From 21a6e8fd836a690ba7de120bbe1fd92d5bc1caae Mon Sep 17 00:00:00 2001 From: DongHun Kwak Date: Mon, 16 Oct 2017 20:00:54 +0900 Subject: [PATCH] Imported Upstream version 3.5.3 Change-Id: I685b7d4e281e9be9dc892ec65b6982aceb90282b Signed-off-by: DongHun Kwak --- Doc/Makefile | 13 +- Doc/c-api/arg.rst | 47 +- Doc/c-api/buffer.rst | 12 +- Doc/c-api/bytes.rst | 8 +- Doc/c-api/capsule.rst | 10 +- Doc/c-api/dict.rst | 1 + Doc/c-api/exceptions.rst | 2 +- Doc/c-api/import.rst | 12 +- Doc/c-api/init.rst | 28 +- Doc/c-api/long.rst | 4 +- Doc/c-api/mapping.rst | 13 +- Doc/c-api/module.rst | 13 +- Doc/c-api/none.rst | 6 +- Doc/c-api/number.rst | 6 +- Doc/c-api/set.rst | 8 +- Doc/c-api/slice.rst | 6 +- Doc/c-api/structures.rst | 7 +- Doc/c-api/typeobj.rst | 25 +- Doc/c-api/unicode.rst | 149 +- Doc/c-api/veryhigh.rst | 19 +- Doc/conf.py | 5 +- Doc/distutils/apiref.rst | 26 +- Doc/distutils/builtdist.rst | 32 +- Doc/distutils/configfile.rst | 6 +- Doc/distutils/examples.rst | 12 +- Doc/distutils/extending.rst | 2 +- Doc/distutils/packageindex.rst | 6 +- Doc/distutils/setupscript.rst | 4 +- Doc/distutils/sourcedist.rst | 16 +- Doc/extending/building.rst | 9 +- Doc/extending/embedding.rst | 20 +- Doc/extending/extending.rst | 7 +- Doc/extending/newtypes.rst | 27 +- Doc/faq/design.rst | 4 +- Doc/faq/extending.rst | 16 +- Doc/faq/general.rst | 4 +- Doc/faq/gui.rst | 10 + Doc/howto/argparse.rst | 4 +- Doc/howto/clinic.rst | 119 +- Doc/howto/cporting.rst | 2 +- Doc/howto/descriptor.rst | 2 +- Doc/howto/functional.rst | 2 +- Doc/howto/ipaddress.rst | 9 +- Doc/howto/logging-cookbook.rst | 24 +- Doc/howto/logging.rst | 25 +- Doc/howto/pyporting.rst | 118 +- Doc/howto/regex.rst | 8 +- Doc/howto/sockets.rst | 2 +- Doc/howto/sorting.rst | 44 +- Doc/howto/unicode.rst | 6 +- Doc/howto/urllib2.rst | 11 +- Doc/includes/email-alternative-new-api.py | 6 +- Doc/install/index.rst | 50 +- Doc/library/2to3.rst | 56 +- Doc/library/argparse.rst | 39 +- Doc/library/array.rst | 2 +- Doc/library/ast.rst | 1 + Doc/library/asyncio-dev.rst | 46 +- Doc/library/asyncio-eventloop.rst | 165 +- Doc/library/asyncio-eventloops.rst | 28 +- Doc/library/asyncio-protocol.rst | 35 +- Doc/library/asyncio-stream.rst | 20 +- Doc/library/asyncio-subprocess.rst | 26 +- Doc/library/asyncio-task.rst | 30 +- Doc/library/asyncio.rst | 4 +- Doc/library/asyncore.rst | 2 +- Doc/library/bdb.rst | 2 +- Doc/library/binascii.rst | 6 +- Doc/library/builtins.rst | 2 +- Doc/library/calendar.rst | 2 +- Doc/library/cgi.rst | 5 +- Doc/library/cmath.rst | 2 +- Doc/library/cmd.rst | 5 +- Doc/library/codecs.rst | 15 +- Doc/library/collections.abc.rst | 5 +- Doc/library/collections.rst | 39 +- Doc/library/configparser.rst | 43 +- Doc/library/copy.rst | 2 +- Doc/library/ctypes.rst | 35 +- Doc/library/curses.ascii.rst | 6 +- Doc/library/curses.rst | 2 +- Doc/library/datetime.rst | 8 +- Doc/library/dbm.rst | 10 + Doc/library/decimal.rst | 18 +- Doc/library/difflib.rst | 8 +- Doc/library/dis.rst | 10 +- Doc/library/doctest.rst | 20 +- Doc/library/email-examples.rst | 6 +- Doc/library/email.contentmanager.rst | 4 +- Doc/library/email.iterators.rst | 10 +- Doc/library/email.message.rst | 20 +- Doc/library/email.parser.rst | 14 +- Doc/library/email.policy.rst | 29 +- Doc/library/ensurepip.rst | 2 +- Doc/library/enum.rst | 2 +- Doc/library/fnmatch.rst | 3 +- Doc/library/ftplib.rst | 2 +- Doc/library/functions.rst | 20 +- Doc/library/functools.rst | 6 +- Doc/library/gc.rst | 2 +- Doc/library/gettext.rst | 2 +- Doc/library/hashlib.rst | 5 + Doc/library/hmac.rst | 2 +- Doc/library/html.parser.rst | 4 +- Doc/library/http.client.rst | 30 +- Doc/library/http.server.rst | 2 +- Doc/library/idle.rst | 13 +- Doc/library/imaplib.rst | 2 +- Doc/library/importlib.rst | 34 +- Doc/library/inspect.rst | 70 +- Doc/library/io.rst | 2 +- Doc/library/ipaddress.rst | 15 +- Doc/library/json.rst | 65 +- Doc/library/linecache.rst | 2 +- Doc/library/logging.config.rst | 60 +- Doc/library/logging.handlers.rst | 10 +- Doc/library/logging.rst | 12 +- Doc/library/lzma.rst | 7 +- Doc/library/mmap.rst | 12 +- Doc/library/msvcrt.rst | 4 +- Doc/library/multiprocessing.rst | 22 +- Doc/library/netrc.rst | 10 +- Doc/library/nntplib.rst | 12 +- Doc/library/optparse.rst | 16 +- Doc/library/os.rst | 34 +- Doc/library/pathlib.rst | 13 +- Doc/library/pdb.rst | 6 +- Doc/library/pickletools.rst | 9 +- Doc/library/pkgutil.rst | 34 +- Doc/library/py_compile.rst | 2 +- Doc/library/pyexpat.rst | 6 +- Doc/library/queue.rst | 6 +- Doc/library/quopri.rst | 2 +- Doc/library/random.rst | 15 +- Doc/library/re.rst | 8 +- Doc/library/readline.rst | 7 +- Doc/library/resource.rst | 6 +- Doc/library/select.rst | 10 +- Doc/library/selectors.rst | 4 +- Doc/library/shelve.rst | 4 +- Doc/library/shutil.rst | 54 +- Doc/library/signal.rst | 5 +- Doc/library/smtpd.rst | 11 +- Doc/library/smtplib.rst | 15 +- Doc/library/socket.rst | 6 +- Doc/library/socketserver.rst | 12 +- Doc/library/sqlite3.rst | 91 +- Doc/library/ssl.rst | 114 +- Doc/library/statistics.rst | 6 +- Doc/library/stdtypes.rst | 104 +- Doc/library/string.rst | 2 +- Doc/library/subprocess.rst | 33 +- Doc/library/sunau.rst | 2 +- Doc/library/sys.rst | 8 +- Doc/library/sysconfig.rst | 10 +- Doc/library/tarfile.rst | 51 +- Doc/library/test.rst | 4 +- Doc/library/threading.rst | 10 +- Doc/library/tkinter.rst | 26 +- Doc/library/tkinter.ttk.rst | 2 +- Doc/library/token.rst | 7 - Doc/library/traceback.rst | 8 +- Doc/library/tracemalloc.rst | 26 +- Doc/library/turtle.rst | 10 +- Doc/library/typing.rst | 627 ++- Doc/library/unittest.mock.rst | 4 +- Doc/library/unittest.rst | 36 +- Doc/library/urllib.parse.rst | 4 +- Doc/library/urllib.request.rst | 21 +- Doc/library/uuid.rst | 7 + Doc/library/venv.rst | 6 + Doc/library/warnings.rst | 13 +- Doc/library/wave.rst | 2 +- Doc/library/weakref.rst | 2 +- Doc/library/winreg.rst | 2 +- Doc/library/xml.dom.minidom.rst | 2 +- Doc/library/xml.dom.pulldom.rst | 2 +- Doc/library/xml.dom.rst | 2 +- Doc/library/xml.etree.elementtree.rst | 2 +- Doc/library/xml.rst | 18 +- Doc/library/xml.sax.reader.rst | 2 +- Doc/library/xml.sax.utils.rst | 4 +- Doc/library/xmlrpc.client.rst | 38 +- Doc/library/xmlrpc.server.rst | 2 +- Doc/library/zipapp.rst | 2 +- Doc/library/zipfile.rst | 69 +- Doc/library/zipimport.rst | 4 +- Doc/license.rst | 2 +- Doc/reference/compound_stmts.rst | 9 +- Doc/reference/datamodel.rst | 72 +- Doc/reference/expressions.rst | 11 +- Doc/reference/import.rst | 4 +- Doc/reference/lexical_analysis.rst | 17 +- Doc/tools/extensions/suspicious.py | 2 +- Doc/tools/pydoctheme/static/pydoctheme.css | 11 + Doc/tools/static/version_switch.js | 5 +- Doc/tools/templates/customsourcelink.html | 10 + Doc/tools/templates/indexsidebar.html | 3 +- Doc/tools/templates/layout.html | 34 +- Doc/tutorial/classes.rst | 58 +- Doc/tutorial/controlflow.rst | 4 +- Doc/tutorial/errors.rst | 74 +- Doc/tutorial/floatingpoint.rst | 4 + Doc/tutorial/interpreter.rst | 4 +- Doc/tutorial/modules.rst | 6 +- Doc/tutorial/stdlib2.rst | 6 +- Doc/using/cmdline.rst | 9 +- Doc/using/venv-create.inc | 4 +- Doc/using/windows.rst | 4 +- Doc/whatsnew/2.0.rst | 8 +- Doc/whatsnew/2.1.rst | 8 +- Doc/whatsnew/2.2.rst | 28 +- Doc/whatsnew/2.3.rst | 47 +- Doc/whatsnew/2.4.rst | 12 +- Doc/whatsnew/2.5.rst | 12 +- Doc/whatsnew/2.6.rst | 20 +- Doc/whatsnew/2.7.rst | 51 +- Doc/whatsnew/3.0.rst | 10 +- Doc/whatsnew/3.1.rst | 2 +- Doc/whatsnew/3.2.rst | 98 +- Doc/whatsnew/3.3.rst | 11 +- Doc/whatsnew/3.5.rst | 24 +- Doc/whatsnew/changelog.rst | 2 + Grammar/Grammar | 2 +- Include/abstract.h | 28 +- Include/dictobject.h | 2 + Include/genobject.h | 1 + Include/longobject.h | 2 +- Include/moduleobject.h | 2 +- Include/patchlevel.h | 4 +- Include/pyfpe.h | 36 +- Include/pymacconfig.h | 4 +- Include/pymath.h | 2 +- Include/pyport.h | 13 +- Include/unicodeobject.h | 40 +- LICENSE | 2 +- Lib/_collections_abc.py | 6 +- Lib/_pydecimal.py | 33 +- Lib/_pyio.py | 2 +- Lib/antigravity.py | 2 +- Lib/asyncio/base_events.py | 260 +- Lib/asyncio/base_subprocess.py | 7 +- Lib/asyncio/coroutines.py | 49 +- Lib/asyncio/events.py | 69 +- Lib/asyncio/futures.py | 39 +- Lib/asyncio/locks.py | 2 +- Lib/asyncio/proactor_events.py | 8 +- Lib/asyncio/queues.py | 1 - Lib/asyncio/selector_events.py | 248 +- Lib/asyncio/sslproto.py | 15 +- Lib/asyncio/streams.py | 38 +- Lib/asyncio/tasks.py | 51 +- Lib/asyncio/test_utils.py | 48 +- Lib/asyncio/transports.py | 8 + Lib/asyncio/unix_events.py | 147 +- Lib/calendar.py | 21 +- Lib/collections/__init__.py | 7 +- Lib/compileall.py | 6 +- Lib/concurrent/futures/process.py | 2 +- Lib/concurrent/futures/thread.py | 2 +- Lib/configparser.py | 2 +- Lib/contextlib.py | 3 + Lib/ctypes/macholib/dyld.py | 5 +- Lib/ctypes/test/test_callbacks.py | 35 + Lib/ctypes/test/test_find.py | 28 +- Lib/ctypes/test/test_frombuffer.py | 8 + Lib/ctypes/test/test_numbers.py | 2 +- Lib/ctypes/test/test_structures.py | 8 +- Lib/ctypes/util.py | 131 +- Lib/curses/ascii.py | 22 +- Lib/curses/textpad.py | 31 +- Lib/datetime.py | 2 +- Lib/dbm/dumb.py | 8 +- Lib/distutils/_msvccompiler.py | 6 +- Lib/distutils/command/build_ext.py | 1 + Lib/distutils/command/upload.py | 2 +- Lib/distutils/command/wininst-14.0-amd64.exe | Bin 589824 -> 587776 bytes Lib/distutils/command/wininst-14.0.exe | Bin 460288 -> 458240 bytes Lib/distutils/config.py | 2 +- Lib/distutils/filelist.py | 48 +- Lib/distutils/tests/test_bdist_rpm.py | 8 +- Lib/distutils/tests/test_build_ext.py | 9 +- Lib/distutils/tests/test_check.py | 16 +- Lib/distutils/tests/test_config.py | 32 +- Lib/distutils/tests/test_filelist.py | 43 +- Lib/distutils/tests/test_msvc9compiler.py | 2 +- Lib/distutils/tests/test_msvccompiler.py | 18 + Lib/distutils/tests/test_register.py | 4 +- Lib/distutils/tests/test_sdist.py | 4 +- Lib/distutils/tests/test_upload.py | 11 +- Lib/distutils/unixccompiler.py | 2 + Lib/email/_header_value_parser.py | 4 +- Lib/email/base64mime.py | 2 +- Lib/email/contentmanager.py | 9 +- Lib/email/feedparser.py | 42 +- Lib/email/generator.py | 26 +- Lib/email/message.py | 4 +- Lib/email/mime/text.py | 4 +- Lib/email/policy.py | 9 +- Lib/email/quoprimime.py | 2 +- Lib/ensurepip/__init__.py | 4 +- .../_bundled/pip-8.1.1-py2.py3-none-any.whl | Bin 1197664 -> 0 bytes .../_bundled/pip-9.0.1-py2.py3-none-any.whl | Bin 0 -> 1254803 bytes ....whl => setuptools-28.8.0-py2.py3-none-any.whl} | Bin 509211 -> 472830 bytes Lib/fractions.py | 6 +- Lib/functools.py | 6 +- Lib/gettext.py | 180 +- Lib/http/client.py | 5 +- Lib/http/cookiejar.py | 4 +- Lib/idlelib/Bindings.py | 2 + Lib/idlelib/CallTipWindow.py | 2 +- Lib/idlelib/NEWS.txt | 710 +-- Lib/idlelib/NEWS2x.txt | 660 +++ Lib/idlelib/ParenMatch.py | 2 +- Lib/idlelib/README.txt | 13 +- Lib/idlelib/aboutDialog.py | 2 + Lib/idlelib/configDialog.py | 8 +- Lib/idlelib/configHandler.py | 31 +- Lib/idlelib/help.html | 86 +- Lib/idlelib/help.py | 3 +- Lib/idlelib/idle.py | 14 +- Lib/idlelib/idle_test/test_autocomplete.py | 2 - Lib/idlelib/idle_test/test_configdialog.py | 1 + Lib/idlelib/idle_test/test_editmenu.py | 1 + Lib/idlelib/idle_test/test_formatparagraph.py | 2 +- Lib/idlelib/idle_test/test_help_about.py | 52 + Lib/idlelib/idle_test/test_hyperparser.py | 1 + Lib/idlelib/idle_test/test_idlehistory.py | 1 + Lib/idlelib/idle_test/test_textview.py | 15 +- Lib/idlelib/idle_test/test_widgetredir.py | 2 + Lib/idlelib/run.py | 6 + Lib/idlelib/textView.py | 4 + Lib/imaplib.py | 2 +- Lib/imp.py | 4 +- Lib/importlib/_bootstrap_external.py | 16 +- Lib/importlib/util.py | 2 +- Lib/inspect.py | 13 +- Lib/json/__init__.py | 6 +- Lib/lib2to3/Grammar.txt | 23 +- Lib/lib2to3/fixer_base.py | 1 - Lib/lib2to3/fixes/fix_apply.py | 11 + Lib/lib2to3/fixes/fix_callable.py | 37 - Lib/lib2to3/fixes/fix_intern.py | 10 + Lib/lib2to3/fixes/fix_reload.py | 10 + Lib/lib2to3/pgen2/driver.py | 15 +- Lib/lib2to3/pgen2/grammar.py | 28 +- Lib/lib2to3/pgen2/pgen.py | 8 +- Lib/lib2to3/tests/support.py | 6 +- Lib/lib2to3/tests/test_fixers.py | 96 +- Lib/lib2to3/tests/test_parser.py | 107 +- Lib/lib2to3/tests/test_refactor.py | 5 +- Lib/logging/__init__.py | 9 +- Lib/logging/handlers.py | 21 +- Lib/mailcap.py | 28 +- Lib/multiprocessing/context.py | 2 +- Lib/multiprocessing/managers.py | 2 +- Lib/multiprocessing/spawn.py | 2 +- Lib/os.py | 4 +- Lib/pdb.py | 10 +- Lib/pickle.py | 12 +- Lib/pkgutil.py | 26 +- Lib/platform.py | 65 +- Lib/plistlib.py | 2 +- Lib/posixpath.py | 1 + Lib/pstats.py | 5 +- Lib/pydoc.py | 5 +- Lib/pydoc_data/topics.py | 30 +- Lib/random.py | 15 +- Lib/runpy.py | 15 +- Lib/selectors.py | 26 +- Lib/shlex.py | 2 +- Lib/shutil.py | 93 +- Lib/smtplib.py | 2 +- Lib/socket.py | 3 +- Lib/sqlite3/test/dbapi.py | 306 +- Lib/sqlite3/test/factory.py | 20 +- Lib/sqlite3/test/hooks.py | 58 +- Lib/sqlite3/test/regression.py | 99 +- Lib/sqlite3/test/transactions.py | 33 +- Lib/sqlite3/test/types.py | 65 +- Lib/sqlite3/test/userfunctions.py | 62 +- Lib/ssl.py | 54 +- Lib/subprocess.py | 427 +- Lib/tarfile.py | 4 +- Lib/test/_test_multiprocessing.py | 15 +- Lib/test/allsans.pem | 37 + Lib/test/cfgparser.2 | 2 +- Lib/test/check_soundcard.vbs | 13 - Lib/test/datetimetester.py | 2 +- Lib/test/eintrdata/eintr_tester.py | 2 +- Lib/test/mailcap.txt | 2 +- Lib/test/make_ssl_certs.py | 49 +- Lib/test/mp_preload.py | 18 + Lib/test/pickletester.py | 29 + Lib/test/regrtest.py | 146 +- Lib/test/ssl_servers.py | 2 +- Lib/test/ssltests.py | 27 +- Lib/test/support/__init__.py | 84 +- Lib/test/support/script_helper.py | 20 +- Lib/test/test_argparse.py | 2 +- Lib/test/test_array.py | 14 +- Lib/test/test_asyncio/test_base_events.py | 202 +- Lib/test/test_asyncio/test_events.py | 242 +- Lib/test/test_asyncio/test_futures.py | 94 + Lib/test/test_asyncio/test_locks.py | 8 +- Lib/test/test_asyncio/test_pep492.py | 1 + Lib/test/test_asyncio/test_proactor_events.py | 3 + Lib/test/test_asyncio/test_queues.py | 1 + Lib/test/test_asyncio/test_selector_events.py | 120 +- Lib/test/test_asyncio/test_sslproto.py | 28 + Lib/test/test_asyncio/test_streams.py | 3 +- Lib/test/test_asyncio/test_subprocess.py | 10 + Lib/test/test_asyncio/test_tasks.py | 79 + Lib/test/test_asyncio/test_unix_events.py | 128 +- Lib/test/test_asyncio/test_windows_events.py | 1 + Lib/test/test_binascii.py | 115 +- Lib/test/test_builtin.py | 35 +- Lib/test/test_bytes.py | 19 + Lib/test/test_bz2.py | 65 +- Lib/test/test_calendar.py | 24 +- Lib/test/test_cmd_line.py | 2 +- Lib/test/test_cmd_line_script.py | 41 +- Lib/test/test_code.py | 54 +- Lib/test/test_codecs.py | 20 + Lib/test/test_collections.py | 2 +- Lib/test/test_compile.py | 7 + Lib/test/test_complex.py | 8 + Lib/test/test_concurrent_futures.py | 2 +- Lib/test/test_configparser.py | 24 + Lib/test/test_contextlib.py | 34 + Lib/test/test_coroutines.py | 72 +- Lib/test/test_curses.py | 88 + Lib/test/test_dbm_dumb.py | 16 + Lib/test/test_decimal.py | 33 +- Lib/test/test_defaultdict.py | 2 +- Lib/test/test_deque.py | 2 +- Lib/test/test_descr.py | 92 +- Lib/test/test_dict.py | 18 + Lib/test/test_dictviews.py | 26 + Lib/test/test_doctest.py | 24 +- Lib/test/test_docxmlrpc.py | 43 +- Lib/test/test_dummy_thread.py | 156 +- Lib/test/test_email/__init__.py | 12 +- Lib/test/test_email/test_email.py | 43 +- Lib/test/test_email/test_inversion.py | 23 +- Lib/test/test_email/test_message.py | 10 + Lib/test/test_email/test_parser.py | 41 + Lib/test/test_enum.py | 20 +- Lib/test/test_exceptions.py | 17 + Lib/test/test_extcall.py | 34 + Lib/test/test_fileio.py | 2 +- Lib/test/test_format.py | 67 +- Lib/test/test_fractions.py | 13 + Lib/test/test_functools.py | 95 +- Lib/test/test_future.py | 63 +- Lib/test/test_gc.py | 7 +- Lib/test/test_gdb.py | 3 +- Lib/test/test_generators.py | 21 + Lib/test/test_genericpath.py | 9 + Lib/test/test_gettext.py | 89 +- Lib/test/test_http_cookiejar.py | 24 +- Lib/test/test_httplib.py | 44 +- Lib/test/test_imaplib.py | 330 ++ .../extension/test_case_sensitivity.py | 14 +- Lib/test/test_importlib/extension/test_loader.py | 9 + Lib/test/test_importlib/import_/test_meta_path.py | 1 - .../test_importlib/source/test_case_sensitivity.py | 10 +- Lib/test/test_importlib/test_lazy.py | 16 +- Lib/test/test_importlib/test_util.py | 2 +- Lib/test/test_importlib/util.py | 10 +- Lib/test/test_inspect.py | 5 + Lib/test/test_io.py | 2 + Lib/test/test_ipaddress.py | 10 +- Lib/test/test_itertools.py | 60 +- Lib/test/test_json/test_decode.py | 2 +- Lib/test/test_logging.py | 93 +- Lib/test/test_long.py | 2 +- Lib/test/test_lzma.py | 45 + Lib/test/test_mailcap.py | 69 +- Lib/test/test_math.py | 4 +- Lib/test/test_mmap.py | 15 + Lib/test/test_module.py | 4 +- Lib/test/test_nntplib.py | 6 +- Lib/test/test_os.py | 110 +- Lib/test/test_parser.py | 16 + Lib/test/test_pdb.py | 23 + Lib/test/test_pep247.py | 2 +- Lib/test/test_pickle.py | 33 +- Lib/test/test_pkgutil.py | 2 +- Lib/test/test_platform.py | 11 +- Lib/test/test_plistlib.py | 7 + Lib/test/test_poll.py | 3 +- Lib/test/test_posixpath.py | 24 +- Lib/test/test_pydoc.py | 15 +- Lib/test/test_pyexpat.py | 6 +- Lib/test/test_random.py | 18 + Lib/test/test_range.py | 29 + Lib/test/test_re.py | 8 + Lib/test/test_readline.py | 161 +- Lib/test/test_regrtest.py | 13 + Lib/test/test_resource.py | 14 + Lib/test/test_runpy.py | 40 +- Lib/test/test_selectors.py | 23 + Lib/test/test_set.py | 15 + Lib/test/test_shelve.py | 4 + Lib/test/test_shlex.py | 12 + Lib/test/test_shutil.py | 110 +- Lib/test/test_socket.py | 44 +- Lib/test/test_ssl.py | 145 +- Lib/test/test_structseq.py | 2 +- Lib/test/test_subprocess.py | 4 +- Lib/test/test_support.py | 37 +- Lib/test/test_symtable.py | 14 +- Lib/test/test_syntax.py | 17 +- Lib/test/test_sys.py | 8 +- Lib/test/test_tarfile.py | 8 +- Lib/test/test_textwrap.py | 31 + Lib/test/test_threading.py | 22 +- Lib/test/test_tools/test_fixcid.py | 92 + Lib/test/test_tools/test_i18n.py | 6 +- Lib/test/test_trace.py | 8 +- Lib/test/test_traceback.py | 26 +- Lib/test/test_typing.py | 991 +++- Lib/test/test_unicode.py | 293 +- Lib/test/test_unpack_ex.py | 5 + Lib/test/test_urllib.py | 14 +- Lib/test/test_urllib2_localnet.py | 48 +- Lib/test/test_urlparse.py | 2 + Lib/test/test_uuid.py | 4 + Lib/test/test_venv.py | 7 + Lib/test/test_warnings/__init__.py | 13 + Lib/test/test_weakref.py | 62 + Lib/test/test_webbrowser.py | 25 + Lib/test/test_winreg.py | 2 +- Lib/test/test_winsound.py | 252 +- Lib/test/test_xml_etree.py | 48 +- Lib/test/test_xml_etree_c.py | 10 + Lib/test/test_zipfile.py | 112 +- Lib/test/test_zipimport.py | 30 +- Lib/test/test_zlib.py | 64 +- Lib/textwrap.py | 27 +- Lib/threading.py | 2 +- Lib/tkinter/__init__.py | 27 +- Lib/tkinter/test/test_tkinter/test_variables.py | 56 +- Lib/tkinter/test/test_ttk/test_extensions.py | 17 +- Lib/tkinter/test/test_ttk/test_widgets.py | 51 + Lib/tkinter/tix.py | 28 +- Lib/tkinter/ttk.py | 6 +- Lib/traceback.py | 2 +- Lib/turtle.py | 20 +- Lib/typing.py | 1529 +++--- Lib/unittest/__init__.py | 2 +- Lib/unittest/case.py | 9 +- Lib/unittest/mock.py | 7 +- Lib/unittest/test/test_case.py | 2 +- Lib/unittest/test/test_discovery.py | 4 +- Lib/unittest/test/test_result.py | 10 + Lib/unittest/test/testmock/testcallable.py | 2 +- Lib/unittest/test/testmock/testhelpers.py | 60 +- Lib/urllib/parse.py | 5 +- Lib/urllib/request.py | 8 +- Lib/venv/scripts/posix/activate | 2 +- Lib/venv/scripts/posix/activate.csh | 2 +- Lib/venv/scripts/posix/activate.fish | 41 +- Lib/weakref.py | 47 +- Lib/webbrowser.py | 29 +- Lib/xml/dom/expatbuilder.py | 2 +- Lib/xml/etree/ElementTree.py | 11 + Lib/xmlrpc/server.py | 2 +- Lib/zipfile.py | 27 +- Mac/BuildScript/build-installer.py | 6 +- Mac/BuildScript/openssl_sdk_makedepend.patch | 12 +- Mac/IDLE/IDLE.app/Contents/Info.plist | 2 +- Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py | 2 - Mac/PythonLauncher/Info.plist.in | 2 +- Mac/PythonLauncher/MyAppDelegate.m | 2 +- Mac/Resources/app/Info.plist.in | 2 +- Mac/Resources/framework/Info.plist.in | 4 +- Makefile.pre.in | 83 +- Misc/ACKS | 30 + Misc/HISTORY | 36 +- Misc/NEWS | 769 ++- Misc/coverity_model.c | 4 +- Misc/python.man | 4 +- Modules/_bz2module.c | 4 +- Modules/_codecsmodule.c | 183 +- Modules/_cryptmodule.c | 4 +- Modules/_csv.c | 23 +- Modules/_ctypes/_ctypes.c | 73 +- Modules/_ctypes/_ctypes_test.c | 18 + Modules/_ctypes/callbacks.c | 6 +- Modules/_ctypes/callproc.c | 12 +- Modules/_ctypes/cfield.c | 20 +- Modules/_ctypes/ctypes.h | 2 +- Modules/_ctypes/libffi_msvc/ffi.c | 14 +- Modules/_ctypes/libffi_osx/ffi.c | 4 +- Modules/_ctypes/stgdict.c | 8 +- Modules/_cursesmodule.c | 37 +- Modules/_dbmmodule.c | 4 +- Modules/_decimal/_decimal.c | 74 +- Modules/_elementtree.c | 27 +- Modules/_functoolsmodule.c | 47 +- Modules/_gdbmmodule.c | 5 +- Modules/_hashopenssl.c | 167 +- Modules/_io/_iomodule.c | 6 +- Modules/_io/clinic/_iomodule.c.h | 6 +- Modules/_io/iobase.c | 2 +- Modules/_io/textio.c | 19 +- Modules/_localemodule.c | 3 +- Modules/_lsprof.c | 2 +- Modules/_lzmamodule.c | 21 +- Modules/_multiprocessing/semaphore.c | 3 + Modules/_opcode.c | 4 +- Modules/_operator.c | 16 +- Modules/_pickle.c | 52 +- Modules/_posixsubprocess.c | 2 +- Modules/_sqlite/connection.c | 96 +- Modules/_sqlite/connection.h | 5 +- Modules/_sqlite/cursor.c | 11 +- Modules/_sqlite/module.h | 2 +- Modules/_sre.c | 16 +- Modules/_ssl.c | 285 +- Modules/_testcapimodule.c | 79 +- Modules/_testmultiphase.c | 33 +- Modules/_threadmodule.c | 2 +- Modules/_tkinter.c | 18 +- Modules/_tracemalloc.c | 2 +- Modules/_weakref.c | 45 +- Modules/_winapi.c | 107 +- Modules/arraymodule.c | 30 +- Modules/audioop.c | 105 +- Modules/binascii.c | 102 +- Modules/cjkcodecs/multibytecodec.c | 4 +- Modules/clinic/_codecsmodule.c.h | 181 +- Modules/clinic/_cryptmodule.c.h | 6 +- Modules/clinic/_dbmmodule.c.h | 6 +- Modules/clinic/_gdbmmodule.c.h | 7 +- Modules/clinic/_lzmamodule.c.h | 14 +- Modules/clinic/_opcode.c.h | 6 +- Modules/clinic/_pickle.c.h | 18 +- Modules/clinic/_sre.c.h | 14 +- Modules/clinic/_ssl.c.h | 50 +- Modules/clinic/_tkinter.c.h | 14 +- Modules/clinic/_weakref.c.h | 35 +- Modules/clinic/_winapi.c.h | 109 +- Modules/clinic/arraymodule.c.h | 6 +- Modules/clinic/audioop.c.h | 107 +- Modules/clinic/binascii.c.h | 68 +- Modules/clinic/cmathmodule.c.h | 94 +- Modules/clinic/fcntlmodule.c.h | 18 +- Modules/clinic/grpmodule.c.h | 14 +- Modules/clinic/md5module.c.h | 6 +- Modules/clinic/posixmodule.c.h | 639 ++- Modules/clinic/pwdmodule.c.h | 10 +- Modules/clinic/pyexpat.c.h | 10 +- Modules/clinic/sha1module.c.h | 6 +- Modules/clinic/sha256module.c.h | 10 +- Modules/clinic/sha512module.c.h | 10 +- Modules/clinic/signalmodule.c.h | 46 +- Modules/clinic/spwdmodule.c.h | 10 +- Modules/clinic/zlibmodule.c.h | 44 +- Modules/cmathmodule.c | 104 +- Modules/expat/xmlrole.c | 4 +- Modules/expat/xmltok.c | 4 +- Modules/fcntlmodule.c | 18 +- Modules/getpath.c | 5 +- Modules/grpmodule.c | 12 +- Modules/hashtable.c | 3 +- Modules/itertoolsmodule.c | 87 +- Modules/ld_so_aix.in | 1 + Modules/makesetup | 7 +- Modules/mathmodule.c | 2 +- Modules/md5module.c | 4 +- Modules/mmapmodule.c | 183 +- Modules/ossaudiodev.c | 9 +- Modules/posixmodule.c | 694 +-- Modules/pwdmodule.c | 12 +- Modules/pyexpat.c | 51 +- Modules/readline.c | 161 +- Modules/resource.c | 64 +- Modules/sha1module.c | 4 +- Modules/sha256module.c | 8 +- Modules/sha512module.c | 8 +- Modules/signalmodule.c | 66 +- Modules/socketmodule.c | 30 +- Modules/spwdmodule.c | 8 +- Modules/unicodedata.c | 10 +- Modules/zipimport.c | 16 +- Modules/zlibmodule.c | 777 ++- Objects/abstract.c | 13 +- Objects/bytearrayobject.c | 45 +- Objects/bytesobject.c | 30 +- Objects/codeobject.c | 72 +- Objects/complexobject.c | 23 +- Objects/dictobject.c | 117 +- Objects/exceptions.c | 54 +- Objects/funcobject.c | 20 +- Objects/genobject.c | 107 +- Objects/listobject.c | 15 +- Objects/listsort.txt | 2 +- Objects/longobject.c | 17 +- Objects/memoryobject.c | 2 +- Objects/moduleobject.c | 66 +- Objects/object.c | 9 + Objects/odictobject.c | 2 +- Objects/rangeobject.c | 16 +- Objects/typeobject.c | 123 +- Objects/typeslots.py | 63 +- Objects/unicodeobject.c | 146 +- PC/_msi.c | 20 +- PC/bdist_wininst/install.c | 20 +- PC/clinic/msvcrtmodule.c.h | 75 +- PC/clinic/winreg.c.h | 90 +- PC/clinic/winsound.c.h | 14 +- PC/icons.mak | 9 - PC/icons.rc | 4 - PC/launcher.c | 2 +- PC/make_versioninfo.c | 38 - PC/msvcrtmodule.c | 73 +- PC/pyshellext.cpp | 605 +++ PC/pyshellext.def | 6 + PC/pyshellext.idl | 12 + PC/pyshellext.rc | 46 + PC/pyshellext_d.def | 6 + PC/python.manifest | 6 + PC/python3.def | 129 +- PC/validate_ucrtbase.py | 5 +- PC/winreg.c | 92 +- PC/winsound.c | 12 +- PCbuild/build.bat | 6 +- PCbuild/get_externals.bat | 2 +- PCbuild/pcbuild.proj | 36 +- PCbuild/pcbuild.sln | 26 +- PCbuild/prepare_ssl.py | 7 +- PCbuild/pyproject.props | 12 +- PCbuild/pyshellext.vcxproj | 87 + PCbuild/pyshellext.vcxproj.filters | 40 + PCbuild/python.props | 11 +- PCbuild/python.vcxproj | 6 +- PCbuild/python3dll.vcxproj | 6 +- PCbuild/pythoncore.vcxproj | 15 +- PCbuild/readme.txt | 2 +- PCbuild/tcl.vcxproj | 2 + PCbuild/tix.vcxproj | 2 + PCbuild/tk.vcxproj | 2 + Parser/asdl_c.py | 7 + Parser/tokenizer.c | 34 +- Programs/_freeze_importlib.c | 1 + Python/Python-ast.c | 216 + Python/_warnings.c | 14 +- Python/ast.c | 14 +- Python/bltinmodule.c | 123 +- Python/ceval.c | 47 +- Python/clinic/bltinmodule.c.h | 71 +- Python/clinic/import.c.h | 54 +- Python/compile.c | 50 +- Python/condvar.h | 2 +- Python/errors.c | 24 +- Python/formatter_unicode.c | 28 +- Python/future.c | 2 +- Python/getargs.c | 2 +- Python/getcopyright.c | 2 +- Python/import.c | 100 +- Python/importdl.c | 4 + Python/importlib.h | 131 +- Python/importlib_external.h | 5115 ++++++++++---------- Python/pystate.c | 6 +- Python/pythonrun.c | 4 +- Python/random.c | 95 +- Python/symtable.c | 4 +- Python/sysmodule.c | 39 +- Python/traceback.c | 46 +- README | 25 +- Tools/clinic/clinic.py | 2 +- Tools/clinic/clinic_test.py | 2 +- Tools/demo/redemo.py | 2 +- Tools/freeze/freeze.py | 2 +- Tools/freeze/winmakemakefile.py | 4 +- Tools/gdb/libpython.py | 20 +- Tools/i18n/pygettext.py | 2 +- Tools/importbench/importbench.py | 13 +- Tools/msi/build.bat | 3 + Tools/msi/buildrelease.bat | 42 +- Tools/msi/bundle/Default.wxl | 10 + .../bootstrap/PythonBootstrapperApplication.cpp | 61 +- Tools/msi/bundle/bootstrap/pythonba.vcxproj | 2 +- Tools/msi/bundle/bundle.targets | 10 - Tools/msi/bundle/bundle.wxs | 6 +- Tools/msi/bundle/packagegroups/launcher.wxs | 4 +- Tools/msi/distutils.command.bdist_wininst.py | 20 + Tools/msi/doc/doc.wxs | 12 +- Tools/msi/launcher/launcher.wixproj | 14 + Tools/msi/launcher/launcher.wxs | 2 +- Tools/msi/launcher/launcher_files.wxs | 13 + Tools/msi/launcher/launcher_reg.wxs | 10 +- Tools/msi/lib/lib_files.wxs | 1 - Tools/msi/make_zip.proj | 4 +- Tools/msi/make_zip.py | 91 +- Tools/msi/msi.props | 8 +- Tools/msi/purge.py | 74 + Tools/nuget/build.bat | 55 + Tools/nuget/make_pkg.proj | 57 + Tools/nuget/python.nuspec | 18 + Tools/nuget/pythonx86.nuspec | 18 + Tools/scripts/fixcid.py | 52 +- aclocal.m4 | 217 +- config.guess | 174 +- config.sub | 75 +- configure | 479 +- configure.ac | 142 +- pyconfig.h.in | 12 +- setup.py | 59 +- 812 files changed, 23164 insertions(+), 13106 deletions(-) create mode 100644 Doc/tools/templates/customsourcelink.html delete mode 100644 Lib/ensurepip/_bundled/pip-8.1.1-py2.py3-none-any.whl create mode 100644 Lib/ensurepip/_bundled/pip-9.0.1-py2.py3-none-any.whl rename Lib/ensurepip/_bundled/{setuptools-20.10.1-py2.py3-none-any.whl => setuptools-28.8.0-py2.py3-none-any.whl} (51%) create mode 100644 Lib/idlelib/NEWS2x.txt create mode 100644 Lib/idlelib/idle_test/test_help_about.py delete mode 100644 Lib/lib2to3/fixes/fix_callable.py create mode 100644 Lib/test/allsans.pem delete mode 100644 Lib/test/check_soundcard.vbs create mode 100644 Lib/test/mp_preload.py create mode 100644 Lib/test/test_tools/test_fixcid.py delete mode 100644 PC/icons.mak delete mode 100644 PC/icons.rc delete mode 100644 PC/make_versioninfo.c create mode 100644 PC/pyshellext.cpp create mode 100644 PC/pyshellext.def create mode 100644 PC/pyshellext.idl create mode 100644 PC/pyshellext.rc create mode 100644 PC/pyshellext_d.def create mode 100644 PCbuild/pyshellext.vcxproj create mode 100644 PCbuild/pyshellext.vcxproj.filters create mode 100644 Tools/msi/distutils.command.bdist_wininst.py create mode 100644 Tools/msi/purge.py create mode 100644 Tools/nuget/build.bat create mode 100644 Tools/nuget/make_pkg.proj create mode 100644 Tools/nuget/python.nuspec create mode 100644 Tools/nuget/pythonx86.nuspec diff --git a/Doc/Makefile b/Doc/Makefile index a42e98b..10c3288 100644 --- a/Doc/Makefile +++ b/Doc/Makefile @@ -162,12 +162,12 @@ serve: # for development releases: always build autobuild-dev: - make dist SPHINXOPTS='-A daily=1 -A versionswitcher=1' + make dist SPHINXOPTS='$(SPHINXOPTS) -A daily=1 -A versionswitcher=1' -make suspicious # for quick rebuilds (HTML only) -autobuild-html: - make html SPHINXOPTS='-A daily=1 -A versionswitcher=1' +autobuild-dev-html: + make html SPHINXOPTS='$(SPHINXOPTS) -A daily=1 -A versionswitcher=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 @@ -177,3 +177,10 @@ autobuild-stable: 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 diff --git a/Doc/c-api/arg.rst b/Doc/c-api/arg.rst index 983d113..1123972 100644 --- a/Doc/c-api/arg.rst +++ b/Doc/c-api/arg.rst @@ -32,8 +32,12 @@ 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. Also, you won't have to release any memory yourself, except with the -``es``, ``es#``, ``et`` and ``et#`` formats. +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 @@ -44,6 +48,11 @@ 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 type of @@ -59,8 +68,8 @@ Unless otherwise stated, buffers are not NUL-terminated. 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 NUL bytes; if it does, - a :exc:`TypeError` exception is raised. Unicode objects are converted + 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. @@ -71,6 +80,10 @@ Unless otherwise stated, buffers are not NUL-terminated. 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. @@ -78,8 +91,8 @@ Unless otherwise stated, buffers are not NUL-terminated. Unicode objects are converted to C strings using ``'utf-8'`` encoding. ``s#`` (:class:`str`, read-only :term:`bytes-like object`) [const char \*, int or :c:type:`Py_ssize_t`] - Like ``s*``, except that it doesn't accept mutable bytes-like objects - such as :class:`bytearray`. The result is stored into two C variables, + 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. @@ -99,9 +112,13 @@ Unless otherwise stated, buffers are not NUL-terminated. ``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 NUL bytes; if it does, a :exc:`TypeError` + 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 @@ -127,17 +144,17 @@ Unless otherwise stated, buffers are not NUL-terminated. 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 NUL characters; if it does, - a :exc:`TypeError` exception is raised. + The Python string must not contain embedded null code points; if it does, + a :exc:`ValueError` exception is raised. - .. note:: - Since ``u`` doesn't give you back the length of the string, and it - may contain embedded NUL characters, it is recommended to use ``u#`` - or ``U`` instead. + .. versionchanged:: 3.5 + Previously, :exc:`TypeError` was raised when embedded null code points + were encountered in the Python string. ``u#`` (:class:`str`) [Py_UNICODE \*, int] This variant on ``u`` stores into two C variables, the first one a pointer to a - Unicode data buffer, the second one its length. + Unicode data buffer, the second one its length. This variant allows + null code points. ``Z`` (:class:`str` or ``None``) [Py_UNICODE \*] Like ``u``, but the Python object may also be ``None``, in which case the @@ -325,7 +342,7 @@ Other objects ``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. + 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. diff --git a/Doc/c-api/buffer.rst b/Doc/c-api/buffer.rst index 45c9488..3d851b7 100644 --- a/Doc/c-api/buffer.rst +++ b/Doc/c-api/buffer.rst @@ -156,7 +156,7 @@ a buffer, see :c:func:`PyObject_GetBuffer`. .. 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 + 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*. @@ -427,7 +427,7 @@ Buffer-related functions .. c:function:: int PyObject_CheckBuffer(PyObject *obj) - Return 1 if *obj* supports the buffer interface otherwise 0. When 1 is + 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. @@ -437,7 +437,7 @@ Buffer-related functions 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 :c:member:`view->obj` to *NULL* and - return -1. + return ``-1``. On success, fill in *view*, set :c:member:`view->obj` to a new reference to *exporter* and return 0. In the case of chained buffer providers @@ -468,9 +468,9 @@ Buffer-related functions .. c:function:: int PyBuffer_IsContiguous(Py_buffer *view, char order) - Return 1 if the memory defined by the *view* is C-style (*order* is + 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. + (*order* is ``'A'``). Return ``0`` otherwise. .. c:function:: void PyBuffer_FillContiguousStrides(int ndim, Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t itemsize, char order) @@ -492,7 +492,7 @@ Buffer-related functions On success, set :c:member:`view->obj` to a new reference to *exporter* and return 0. Otherwise, raise :c:data:`PyExc_BufferError`, set - :c:member:`view->obj` to *NULL* and return -1; + :c:member:`view->obj` to *NULL* and return ``-1``; If this function is used as part of a :ref:`getbufferproc `, *exporter* MUST be set to the exporting object and *flags* must be passed diff --git a/Doc/c-api/bytes.rst b/Doc/c-api/bytes.rst index 23b7128..ee42f85 100644 --- a/Doc/c-api/bytes.rst +++ b/Doc/c-api/bytes.rst @@ -158,7 +158,7 @@ called with a non-bytes parameter. If *length* is *NULL*, the bytes object may not contain embedded null bytes; - if it does, the function returns ``-1`` and a :exc:`TypeError` is raised. + if it does, the function returns ``-1`` and a :exc:`ValueError` is raised. The buffer refers to an internal buffer of *obj*, which includes an additional null byte at the end (not counted in *length*). The data @@ -167,6 +167,10 @@ called with a non-bytes parameter. *obj* is not a bytes object at all, :c:func:`PyBytes_AsStringAndSize` returns ``-1`` and raises :exc:`TypeError`. + .. versionchanged:: 3.5 + Previously, :exc:`TypeError` was raised when embedded null bytes were + encountered in the bytes object. + .. c:function:: void PyBytes_Concat(PyObject **bytes, PyObject *newpart) @@ -194,5 +198,5 @@ called with a non-bytes parameter. desired. On success, *\*bytes* holds the resized bytes object and ``0`` is returned; the address in *\*bytes* may differ from its input value. If the reallocation fails, the original bytes object at *\*bytes* is deallocated, - *\*bytes* is set to *NULL*, a memory exception is set, and ``-1`` is + *\*bytes* is set to *NULL*, :exc:`MemoryError` is set, and ``-1`` is returned. diff --git a/Doc/c-api/capsule.rst b/Doc/c-api/capsule.rst index 6f6250f..b8642d0 100644 --- a/Doc/c-api/capsule.rst +++ b/Doc/c-api/capsule.rst @@ -120,19 +120,19 @@ Refer to :ref:`using-capsules` for more information on using these objects. guaranteed to succeed. Return a nonzero value if the object is valid and matches the name passed in. - Return 0 otherwise. This function will not fail. + Return ``0`` otherwise. This function will not fail. .. c:function:: int PyCapsule_SetContext(PyObject *capsule, void *context) Set the context pointer inside *capsule* to *context*. - Return 0 on success. Return nonzero and set an exception on failure. + Return ``0`` on success. Return nonzero and set an exception on failure. .. c:function:: int PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor) Set the destructor inside *capsule* to *destructor*. - Return 0 on success. Return nonzero and set an exception on failure. + Return ``0`` on success. Return nonzero and set an exception on failure. .. c:function:: int PyCapsule_SetName(PyObject *capsule, const char *name) @@ -140,11 +140,11 @@ Refer to :ref:`using-capsules` for more information on using these objects. outlive the capsule. If the previous *name* stored in the capsule was not *NULL*, no attempt is made to free it. - Return 0 on success. Return nonzero and set an exception on failure. + Return ``0`` on success. Return nonzero and set an exception on failure. .. c:function:: int PyCapsule_SetPointer(PyObject *capsule, void *pointer) Set the void pointer inside *capsule* to *pointer*. The pointer may not be *NULL*. - Return 0 on success. Return nonzero and set an exception on failure. + Return ``0`` on success. Return nonzero and set an exception on failure. diff --git a/Doc/c-api/dict.rst b/Doc/c-api/dict.rst index aeff640..cfa5e13 100644 --- a/Doc/c-api/dict.rst +++ b/Doc/c-api/dict.rst @@ -118,6 +118,7 @@ Dictionary Objects is returned. This function evaluates the hash function of *key* only once, instead of evaluating it independently for the lookup and the insertion. + .. versionadded:: 3.4 .. c:function:: PyObject* PyDict_Items(PyObject *p) diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst index 19cbb3b..c389888 100644 --- a/Doc/c-api/exceptions.rst +++ b/Doc/c-api/exceptions.rst @@ -381,7 +381,7 @@ Querying the error indicator by code that needs to save and restore the error indicator temporarily, e.g.:: { - PyObject **type, **value, **traceback; + PyObject *type, *value, *traceback; PyErr_Fetch(&type, &value, &traceback); /* ... code that might produce other errors ... */ diff --git a/Doc/c-api/import.rst b/Doc/c-api/import.rst index 2936f4f..5273633 100644 --- a/Doc/c-api/import.rst +++ b/Doc/c-api/import.rst @@ -185,10 +185,10 @@ Importing Modules Return the magic number for Python bytecode files (a.k.a. :file:`.pyc` file). The magic number should be present in the first four bytes of the bytecode - file, in little-endian byte order. Returns -1 on error. + file, in little-endian byte order. Returns ``-1`` on error. .. versionchanged:: 3.3 - Return value of -1 upon failure. + Return value of ``-1`` upon failure. .. c:function:: const char * PyImport_GetMagicTag() @@ -207,13 +207,13 @@ Importing Modules .. c:function:: PyObject* PyImport_GetImporter(PyObject *path) - Return an importer object for a :data:`sys.path`/:attr:`pkg.__path__` item + Return a finder object for a :data:`sys.path`/:attr:`pkg.__path__` item *path*, possibly by fetching it from the :data:`sys.path_importer_cache` dict. If it wasn't yet cached, traverse :data:`sys.path_hooks` until a hook is found that can handle the path item. Return ``None`` if no hook could; - this tells our caller it should fall back to the built-in import mechanism. - Cache the result in :data:`sys.path_importer_cache`. Return a new reference - to the importer object. + this tells our caller that the :term:`path based finder` could not find a + finder for this path item. Cache the result in :data:`sys.path_importer_cache`. + Return a new reference to the finder object. .. c:function:: void _PyImport_Init() diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst index 639819c..70b98ae 100644 --- a/Doc/c-api/init.rst +++ b/Doc/c-api/init.rst @@ -37,11 +37,15 @@ Initializing and finalizing the interpreter (without calling :c:func:`Py_Finalize` first). There is no return value; it is a fatal error if the initialization fails. + .. note:: + On Windows, changes the console mode from ``O_TEXT`` to ``O_BINARY``, which will + also affect non-Python uses of the console using the C Runtime. + .. c:function:: void Py_InitializeEx(int initsigs) - This function works like :c:func:`Py_Initialize` if *initsigs* is 1. If - *initsigs* is 0, it skips initialization registration of signal handlers, which + This function works like :c:func:`Py_Initialize` if *initsigs* is ``1``. If + *initsigs* is ``0``, it skips initialization registration of signal handlers, which might be useful when Python is embedded. @@ -110,7 +114,7 @@ Process-wide parameters If :c:func:`Py_Finalize` is called, this function will need to be called again in order to affect subsequent calls to :c:func:`Py_Initialize`. - Returns 0 if successful, a nonzero value on error (e.g. calling after the + Returns ``0`` if successful, a nonzero value on error (e.g. calling after the interpreter has already been initialized). .. versionadded:: 3.4 @@ -345,7 +349,7 @@ Process-wide parameters - If the name of an existing script is passed in ``argv[0]``, the absolute path of the directory where the script is located is prepended to :data:`sys.path`. - - Otherwise (that is, if *argc* is 0 or ``argv[0]`` doesn't point + - Otherwise (that is, if *argc* is ``0`` or ``argv[0]`` doesn't point to an existing file name), an empty string is prepended to :data:`sys.path`, which is the same as prepending the current working directory (``"."``). @@ -355,7 +359,7 @@ Process-wide parameters .. note:: It is recommended that applications embedding the Python interpreter - for purposes other than executing a single script pass 0 as *updatepath*, + for purposes other than executing a single script pass ``0`` as *updatepath*, and update :data:`sys.path` themselves if desired. See `CVE-2008-5983 `_. @@ -367,14 +371,14 @@ Process-wide parameters .. versionadded:: 3.1.3 - .. XXX impl. doesn't seem consistent in allowing 0/NULL for the params; + .. XXX impl. doesn't seem consistent in allowing ``0``/``NULL`` for the params; check w/ Guido. .. c:function:: void PySys_SetArgv(int argc, wchar_t **argv) This function works like :c:func:`PySys_SetArgvEx` with *updatepath* set - to 1 unless the :program:`python` interpreter was started with the + to ``1`` unless the :program:`python` interpreter was started with the :option:`-I`. Use :c:func:`Py_DecodeLocale` to decode a bytes string to get a @@ -714,10 +718,10 @@ with sub-interpreters: .. c:function:: int PyGILState_Check() - Return 1 if the current thread is holding the GIL and 0 otherwise. + Return ``1`` if the current thread is holding the GIL and ``0`` otherwise. This function can be called from any thread at any time. Only if it has had its Python thread state initialized and currently is - holding the GIL will it return 1. + holding the GIL will it return ``1``. This is mainly a helper/diagnostic function. It can be useful for example in callback contexts or memory allocation functions when knowing that the GIL is locked can allow the caller to perform sensitive @@ -987,8 +991,8 @@ pointer and a void pointer argument. .. index:: single: Py_AddPendingCall() Schedule a function to be called from the main interpreter thread. On - success, 0 is returned and *func* is queued for being called in the - main thread. On failure, -1 is returned without setting any exception. + success, ``0`` is returned and *func* is queued for being called in the + main thread. On failure, ``-1`` is returned without setting any exception. When successfully queued, *func* will be *eventually* called from the main interpreter thread with the argument *arg*. It will be called @@ -999,7 +1003,7 @@ pointer and a void pointer argument. * with the main thread holding the :term:`global interpreter lock` (*func* can therefore use the full C API). - *func* must return 0 on success, or -1 on failure with an exception + *func* must return ``0`` on success, or ``-1`` on failure with an exception set. *func* won't be interrupted to perform another asynchronous notification recursively, but it can still be interrupted to switch threads if the global interpreter lock is released. diff --git a/Doc/c-api/long.rst b/Doc/c-api/long.rst index b348015..68f6a8e 100644 --- a/Doc/c-api/long.rst +++ b/Doc/c-api/long.rst @@ -232,7 +232,7 @@ All integers are implemented as "long" integer objects of arbitrary size. method (if present) to convert it to a :c:type:`PyLongObject`. If the value of *obj* is out of range for an :c:type:`unsigned long`, - return the reduction of that value modulo :const:`ULONG_MAX + 1`. + return the reduction of that value modulo ``ULONG_MAX + 1``. .. c:function:: unsigned PY_LONG_LONG PyLong_AsUnsignedLongLongMask(PyObject *obj) @@ -242,7 +242,7 @@ All integers are implemented as "long" integer objects of arbitrary size. method (if present) to convert it to a :c:type:`PyLongObject`. If the value of *obj* is out of range for an :c:type:`unsigned long long`, - return the reduction of that value modulo :const:`PY_ULLONG_MAX + 1`. + return the reduction of that value modulo ``PY_ULLONG_MAX + 1``. .. c:function:: double PyLong_AsDouble(PyObject *pylong) diff --git a/Doc/c-api/mapping.rst b/Doc/c-api/mapping.rst index fe601b6..a71e942 100644 --- a/Doc/c-api/mapping.rst +++ b/Doc/c-api/mapping.rst @@ -50,21 +50,20 @@ Mapping Protocol .. c:function:: PyObject* PyMapping_Keys(PyObject *o) - On success, return a list, a tuple or a dictionary view in case of a dict, - of the keys in object *o*. On failure, return *NULL*. + On success, return a list or tuple of the keys in object *o*. On failure, + return *NULL*. .. c:function:: PyObject* PyMapping_Values(PyObject *o) - On success, return a list, a tuple or a dictionary view in case of a dict, of - the values in object *o*. On failure, return *NULL*. + On success, return a list or tuple of the values in object *o*. On failure, + return *NULL*. .. c:function:: PyObject* PyMapping_Items(PyObject *o) - On success, return a list, a tuple or a dictionary view in case of a dict, of - the items in object *o*, where each item is a tuple containing a key-value - pair. On failure, return *NULL*. + On success, return a list or tuple of the items in object *o*, where each item + is a tuple containing a key-value pair. On failure, return *NULL*. .. c:function:: PyObject* PyMapping_GetItemString(PyObject *o, const char *key) diff --git a/Doc/c-api/module.rst b/Doc/c-api/module.rst index 904b4b1..7724350 100644 --- a/Doc/c-api/module.rst +++ b/Doc/c-api/module.rst @@ -59,10 +59,13 @@ Module Objects .. index:: single: __dict__ (module attribute) Return the dictionary object that implements *module*'s namespace; this object - is the same as the :attr:`__dict__` attribute of the module object. This - function never fails. It is recommended extensions use other - :c:func:`PyModule_\*` and :c:func:`PyObject_\*` functions rather than directly - manipulate a module's :attr:`__dict__`. + is the same as the :attr:`~object.__dict__` attribute of the module object. + If *module* is not a module object (or a subtype of a module object), + :exc:`SystemError` is raised and *NULL* is returned. + + It is recommended extensions use other :c:func:`PyModule_\*` and + :c:func:`PyObject_\*` functions rather than directly manipulate a module's + :attr:`~object.__dict__`. .. c:function:: PyObject* PyModule_GetNameObject(PyObject *module) @@ -321,7 +324,7 @@ The available slot types are: :c:type:`PyModule_Type`. Any type can be used, as long as it supports setting and getting import-related attributes. However, only ``PyModule_Type`` instances may be returned if the - ``PyModuleDef`` has non-*NULL* ``m_methods``, ``m_traverse``, ``m_clear``, + ``PyModuleDef`` has non-*NULL* ``m_traverse``, ``m_clear``, ``m_free``; non-zero ``m_size``; or slots other than ``Py_mod_create``. .. c:var:: Py_mod_exec diff --git a/Doc/c-api/none.rst b/Doc/c-api/none.rst index b9ac269..45568fe 100644 --- a/Doc/c-api/none.rst +++ b/Doc/c-api/none.rst @@ -2,8 +2,8 @@ .. _noneobject: -The None Object ---------------- +The ``None`` Object +------------------- .. index:: object: None @@ -23,4 +23,4 @@ same reason. .. c:macro:: Py_RETURN_NONE Properly handle returning :c:data:`Py_None` from within a C function (that is, - increment the reference count of None and return it.) + increment the reference count of ``None`` and return it.) diff --git a/Doc/c-api/number.rst b/Doc/c-api/number.rst index 9bcb649..3c7605a 100644 --- a/Doc/c-api/number.rst +++ b/Doc/c-api/number.rst @@ -266,7 +266,7 @@ Number Protocol .. c:function:: Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc) Returns *o* converted to a Py_ssize_t value if *o* can be interpreted as an - integer. If the call fails, an exception is raised and -1 is returned. + integer. If the call fails, an exception is raised and ``-1`` is returned. If *o* can be converted to a Python int but the attempt to convert to a Py_ssize_t value would raise an :exc:`OverflowError`, then the @@ -278,5 +278,5 @@ Number Protocol .. c:function:: int PyIndex_Check(PyObject *o) - Returns True if *o* is an index integer (has the nb_index slot of the - tp_as_number structure filled in). + Returns ``1`` if *o* is an index integer (has the nb_index slot of the + tp_as_number structure filled in), and ``0`` otherwise. diff --git a/Doc/c-api/set.rst b/Doc/c-api/set.rst index 8de0394..64b6dde 100644 --- a/Doc/c-api/set.rst +++ b/Doc/c-api/set.rst @@ -114,7 +114,7 @@ or :class:`frozenset` or instances of their subtypes. .. c:function:: int PySet_Contains(PyObject *anyset, PyObject *key) - Return 1 if found, 0 if not found, and -1 if an error is encountered. Unlike + Return ``1`` if found, ``0`` if not found, and ``-1`` if an error is encountered. Unlike the Python :meth:`__contains__` method, this function does not automatically convert unhashable sets into temporary frozensets. Raise a :exc:`TypeError` if the *key* is unhashable. Raise :exc:`PyExc_SystemError` if *anyset* is not a @@ -125,8 +125,8 @@ or :class:`frozenset` or instances of their subtypes. Add *key* to a :class:`set` instance. Also works with :class:`frozenset` instances (like :c:func:`PyTuple_SetItem` it can be used to fill-in the values - of brand new frozensets before they are exposed to other code). Return 0 on - success or -1 on failure. Raise a :exc:`TypeError` if the *key* is + of brand new frozensets before they are exposed to other code). Return ``0`` on + success or ``-1`` on failure. Raise a :exc:`TypeError` if the *key* is unhashable. Raise a :exc:`MemoryError` if there is no room to grow. Raise a :exc:`SystemError` if *set* is not an instance of :class:`set` or its subtype. @@ -138,7 +138,7 @@ subtypes but not for instances of :class:`frozenset` or its subtypes. .. c:function:: int PySet_Discard(PyObject *set, PyObject *key) - Return 1 if found and removed, 0 if not found (no action taken), and -1 if an + Return ``1`` if found and removed, ``0`` if not found (no action taken), and ``-1`` if an error is encountered. Does not raise :exc:`KeyError` for missing keys. Raise a :exc:`TypeError` if the *key* is unhashable. Unlike the Python :meth:`~set.discard` method, this function does not automatically convert unhashable sets into diff --git a/Doc/c-api/slice.rst b/Doc/c-api/slice.rst index e157df2..a825164 100644 --- a/Doc/c-api/slice.rst +++ b/Doc/c-api/slice.rst @@ -32,9 +32,9 @@ Slice Objects assuming a sequence of length *length*. Treats indices greater than *length* as errors. - Returns 0 on success and -1 on error with no exception set (unless one of + Returns ``0`` on success and ``-1`` on error with no exception set (unless one of the indices was not :const:`None` and failed to be converted to an integer, - in which case -1 is returned with an exception set). + in which case ``-1`` is returned with an exception set). You probably do not want to use this function. @@ -51,7 +51,7 @@ Slice Objects of bounds indices are clipped in a manner consistent with the handling of normal slices. - Returns 0 on success and -1 on error with exception set. + Returns ``0`` on success and ``-1`` on error with exception set. .. versionchanged:: 3.2 The parameter type for the *slice* parameter was ``PySliceObject*`` diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst index e9e8add..3e8a90c 100644 --- a/Doc/c-api/structures.rst +++ b/Doc/c-api/structures.rst @@ -150,9 +150,8 @@ specific C type of the *self* object. The :attr:`ml_flags` field is a bitfield which can include the following flags. The individual flags indicate either a calling convention or a binding convention. Of the calling convention flags, only :const:`METH_VARARGS` and -:const:`METH_KEYWORDS` can be combined (but note that :const:`METH_KEYWORDS` -alone is equivalent to ``METH_VARARGS | METH_KEYWORDS``). Any of the calling -convention flags can be combined with a binding flag. +:const:`METH_KEYWORDS` can be combined. Any of the calling convention flags +can be combined with a binding flag. .. data:: METH_VARARGS @@ -291,7 +290,7 @@ definition with the same method name. handles use of the :keyword:`del` statement on that attribute more correctly than :c:macro:`T_OBJECT`. - :attr:`flags` can be 0 for write and read access or :c:macro:`READONLY` for + :attr:`flags` can be ``0`` for write and read access or :c:macro:`READONLY` for read-only access. Using :c:macro:`T_STRING` for :attr:`type` implies :c:macro:`READONLY`. Only :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX` members can be deleted. (They are set to *NULL*). diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst index ac589b8..ac6fd0b 100644 --- a/Doc/c-api/typeobj.rst +++ b/Doc/c-api/typeobj.rst @@ -111,12 +111,13 @@ type objects) *must* have the :attr:`ob_size` field. For statically allocated type objects, the tp_name field should contain a dot. Everything before the last dot is made accessible as the :attr:`__module__` attribute, and everything after the last dot is made accessible as the - :attr:`__name__` attribute. + :attr:`~definition.__name__` attribute. If no dot is present, the entire :c:member:`~PyTypeObject.tp_name` field is made accessible as the - :attr:`__name__` attribute, and the :attr:`__module__` attribute is undefined + :attr:`~definition.__name__` attribute, and the :attr:`__module__` attribute is undefined (unless explicitly set in the dictionary, as explained above). This means your - type will be impossible to pickle. + type will be impossible to pickle. Additionally, it will not be listed in + module documentations created with pydoc. This field is not inherited by subtypes. @@ -198,8 +199,9 @@ type objects) *must* have the :attr:`ob_size` field. This field is deprecated. When it is defined, it should point to a function that acts the same as the :c:member:`~PyTypeObject.tp_getattro` function, but taking a C string - instead of a Python string object to give the attribute name. The signature is - the same as for :c:func:`PyObject_GetAttrString`. + instead of a Python string object to give the attribute name. The signature is :: + + PyObject * tp_getattr(PyObject *o, char *attr_name); This field is inherited by subtypes together with :c:member:`~PyTypeObject.tp_getattro`: a subtype inherits both :c:member:`~PyTypeObject.tp_getattr` and :c:member:`~PyTypeObject.tp_getattro` from its base type when @@ -212,10 +214,11 @@ type objects) *must* have the :attr:`ob_size` field. This field is deprecated. When it is defined, it should point to a function that acts the same as the :c:member:`~PyTypeObject.tp_setattro` function, but taking a C string - instead of a Python string object to give the attribute name. The signature is - the same as for :c:func:`PyObject_SetAttrString`, but setting - *v* to *NULL* to delete an attribute must be supported. + instead of a Python string object to give the attribute name. The signature is :: + + PyObject * tp_setattr(PyObject *o, char *attr_name, PyObject *v); + The *v* argument is set to *NULL* to delete the attribute. This field is inherited by subtypes together with :c:member:`~PyTypeObject.tp_setattro`: a subtype inherits both :c:member:`~PyTypeObject.tp_setattr` and :c:member:`~PyTypeObject.tp_setattro` from its base type when the subtype's :c:member:`~PyTypeObject.tp_setattr` and :c:member:`~PyTypeObject.tp_setattro` are both *NULL*. @@ -1277,7 +1280,7 @@ Buffer Object Structures steps: (1) Check if the request can be met. If not, raise :c:data:`PyExc_BufferError`, - set :c:data:`view->obj` to *NULL* and return -1. + set :c:data:`view->obj` to *NULL* and return ``-1``. (2) Fill in the requested fields. @@ -1285,7 +1288,7 @@ Buffer Object Structures (4) Set :c:data:`view->obj` to *exporter* and increment :c:data:`view->obj`. - (5) Return 0. + (5) Return ``0``. If *exporter* is part of a chain or tree of buffer providers, two main schemes can be used: @@ -1328,7 +1331,7 @@ Buffer Object Structures (1) Decrement an internal counter for the number of exports. - (2) If the counter is 0, free all memory associated with *view*. + (2) If the counter is ``0``, free all memory associated with *view*. The exporter MUST use the :c:member:`~Py_buffer.internal` field to keep track of buffer-specific resources. This field is guaranteed to remain diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst index a0672ca..256fef3 100644 --- a/Doc/c-api/unicode.rst +++ b/Doc/c-api/unicode.rst @@ -102,7 +102,7 @@ access internal read-only data of Unicode objects: .. XXX expand on when it is not required - Returns 0 on success and -1 with an exception set on failure, which in + Returns ``0`` on success and ``-1`` with an exception set on failure, which in particular happens if memory allocation fails. .. versionadded:: 3.3 @@ -255,57 +255,57 @@ the Python configuration. .. c:function:: int Py_UNICODE_ISSPACE(Py_UNICODE ch) - Return 1 or 0 depending on whether *ch* is a whitespace character. + Return ``1`` or ``0`` depending on whether *ch* is a whitespace character. .. c:function:: int Py_UNICODE_ISLOWER(Py_UNICODE ch) - Return 1 or 0 depending on whether *ch* is a lowercase character. + Return ``1`` or ``0`` depending on whether *ch* is a lowercase character. .. c:function:: int Py_UNICODE_ISUPPER(Py_UNICODE ch) - Return 1 or 0 depending on whether *ch* is an uppercase character. + Return ``1`` or ``0`` depending on whether *ch* is an uppercase character. .. c:function:: int Py_UNICODE_ISTITLE(Py_UNICODE ch) - Return 1 or 0 depending on whether *ch* is a titlecase character. + Return ``1`` or ``0`` depending on whether *ch* is a titlecase character. .. c:function:: int Py_UNICODE_ISLINEBREAK(Py_UNICODE ch) - Return 1 or 0 depending on whether *ch* is a linebreak character. + Return ``1`` or ``0`` depending on whether *ch* is a linebreak character. .. c:function:: int Py_UNICODE_ISDECIMAL(Py_UNICODE ch) - Return 1 or 0 depending on whether *ch* is a decimal character. + Return ``1`` or ``0`` depending on whether *ch* is a decimal character. .. c:function:: int Py_UNICODE_ISDIGIT(Py_UNICODE ch) - Return 1 or 0 depending on whether *ch* is a digit character. + Return ``1`` or ``0`` depending on whether *ch* is a digit character. .. c:function:: int Py_UNICODE_ISNUMERIC(Py_UNICODE ch) - Return 1 or 0 depending on whether *ch* is a numeric character. + Return ``1`` or ``0`` depending on whether *ch* is a numeric character. .. c:function:: int Py_UNICODE_ISALPHA(Py_UNICODE ch) - Return 1 or 0 depending on whether *ch* is an alphabetic character. + Return ``1`` or ``0`` depending on whether *ch* is an alphabetic character. .. c:function:: int Py_UNICODE_ISALNUM(Py_UNICODE ch) - Return 1 or 0 depending on whether *ch* is an alphanumeric character. + Return ``1`` or ``0`` depending on whether *ch* is an alphanumeric character. .. c:function:: int Py_UNICODE_ISPRINTABLE(Py_UNICODE ch) - Return 1 or 0 depending on whether *ch* is a printable character. + Return ``1`` or ``0`` depending on whether *ch* is a printable character. Nonprintable characters are those characters defined in the Unicode character database as "Other" or "Separator", excepting the ASCII space (0x20) which is considered printable. (Note that printable characters in this context are @@ -578,13 +578,16 @@ APIs: .. versionadded:: 3.3 -.. c:function:: int PyUnicode_CopyCharacters(PyObject *to, Py_ssize_t to_start, \ - PyObject *from, Py_ssize_t from_start, Py_ssize_t how_many) +.. c:function:: Py_ssize_t PyUnicode_CopyCharacters(PyObject *to, \ + Py_ssize_t to_start, \ + PyObject *from, \ + Py_ssize_t from_start, \ + Py_ssize_t how_many) Copy characters from one Unicode object into another. This function performs character conversion when necessary and falls back to :c:func:`memcpy` if possible. Returns ``-1`` and sets an exception on error, otherwise returns - ``0``. + the number of copied characters. .. versionadded:: 3.3 @@ -641,7 +644,7 @@ APIs: Copy the string *u* into a UCS4 buffer, including a null character, if *copy_null* is set. Returns *NULL* and sets an exception on error (in - particular, a :exc:`ValueError` if *buflen* is smaller than the length of + particular, a :exc:`SystemError` if *buflen* is smaller than the length of *u*). *buffer* is returned on success. .. versionadded:: 3.3 @@ -682,8 +685,8 @@ Extension modules can continue using them, as they will not be removed in Python string content has been filled before using any of the access macros such as :c:func:`PyUnicode_KIND`. - Please migrate to using :c:func:`PyUnicode_FromKindAndData` or - :c:func:`PyUnicode_New`. + Please migrate to using :c:func:`PyUnicode_FromKindAndData`, + :c:func:`PyUnicode_FromWideChar` or :c:func:`PyUnicode_New`. .. c:function:: Py_UNICODE* PyUnicode_AsUnicode(PyObject *unicode) @@ -697,7 +700,7 @@ Extension modules can continue using them, as they will not be removed in Python used in most C functions. Please migrate to using :c:func:`PyUnicode_AsUCS4`, - :c:func:`PyUnicode_Substring`, :c:func:`PyUnicode_ReadChar` or similar new + :c:func:`PyUnicode_AsWideChar`, :c:func:`PyUnicode_ReadChar` or similar new APIs. @@ -790,7 +793,7 @@ system. Encode a Unicode object to the current locale encoding. The supported error handlers are ``"strict"`` and ``"surrogateescape"`` (:pep:`383`). The encoder uses ``"strict"`` error handler if - *errors* is ``NULL``. Return a :class:`bytes` object. *str* cannot + *errors* is ``NULL``. Return a :class:`bytes` object. *unicode* cannot contain embedded null characters. Use :c:func:`PyUnicode_EncodeFSDefault` to encode a string to @@ -900,7 +903,7 @@ wchar_t Support .. c:function:: PyObject* PyUnicode_FromWideChar(const wchar_t *w, Py_ssize_t size) Create a Unicode object from the :c:type:`wchar_t` buffer *w* of the given *size*. - Passing -1 as the *size* indicates that the function must itself compute the length, + Passing ``-1`` as the *size* indicates that the function must itself compute the length, using wcslen. Return *NULL* on failure. @@ -910,7 +913,7 @@ wchar_t Support Copy the Unicode object contents into the :c:type:`wchar_t` buffer *w*. At most *size* :c:type:`wchar_t` characters are copied (excluding a possibly trailing null termination character). Return the number of :c:type:`wchar_t` characters - copied or -1 in case of an error. Note that the resulting :c:type:`wchar_t*` + copied or ``-1`` in case of an error. Note that the resulting :c:type:`wchar_t*` string may or may not be null-terminated. It is the responsibility of the caller to make sure that the :c:type:`wchar_t*` string is null-terminated in case this is required by the application. Also, note that the :c:type:`wchar_t*` string @@ -934,26 +937,6 @@ wchar_t Support .. versionadded:: 3.2 -UCS4 Support -"""""""""""" - -.. versionadded:: 3.3 - -.. XXX are these meant to be public? - -.. c:function:: size_t Py_UCS4_strlen(const Py_UCS4 *u) - Py_UCS4* Py_UCS4_strcpy(Py_UCS4 *s1, const Py_UCS4 *s2) - Py_UCS4* Py_UCS4_strncpy(Py_UCS4 *s1, const Py_UCS4 *s2, size_t n) - Py_UCS4* Py_UCS4_strcat(Py_UCS4 *s1, const Py_UCS4 *s2) - int Py_UCS4_strcmp(const Py_UCS4 *s1, const Py_UCS4 *s2) - int Py_UCS4_strncmp(const Py_UCS4 *s1, const Py_UCS4 *s2, size_t n) - Py_UCS4* Py_UCS4_strchr(const Py_UCS4 *s, Py_UCS4 c) - Py_UCS4* Py_UCS4_strrchr(const Py_UCS4 *s, Py_UCS4 c) - - These utility functions work on strings of :c:type:`Py_UCS4` characters and - otherwise behave like the C standard library functions with the same name. - - .. _builtincodecs: Built-in Codecs @@ -1083,7 +1066,8 @@ These are the UTF-8 codec APIs: .. deprecated-removed:: 3.3 4.0 Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsUTF8String` or :c:func:`PyUnicode_AsUTF8AndSize`. + :c:func:`PyUnicode_AsUTF8String`, :c:func:`PyUnicode_AsUTF8AndSize` or + :c:func:`PyUnicode_AsEncodedString`. UTF-32 Codecs @@ -1156,7 +1140,7 @@ These are the UTF-32 codec APIs: .. deprecated-removed:: 3.3 4.0 Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsUTF32String`. + :c:func:`PyUnicode_AsUTF32String` or :c:func:`PyUnicode_AsEncodedString`. UTF-16 Codecs @@ -1231,7 +1215,7 @@ These are the UTF-16 codec APIs: .. deprecated-removed:: 3.3 4.0 Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsUTF16String`. + :c:func:`PyUnicode_AsUTF16String` or :c:func:`PyUnicode_AsEncodedString`. UTF-7 Codecs @@ -1268,9 +1252,8 @@ These are the UTF-7 codec APIs: Python "utf-7" codec. .. deprecated-removed:: 3.3 4.0 - Part of the old-style :c:type:`Py_UNICODE` API. - - .. XXX replace with what? + Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using + :c:func:`PyUnicode_AsEncodedString`. Unicode-Escape Codecs @@ -1288,16 +1271,15 @@ These are the "Unicode Escape" codec APIs: .. c:function:: PyObject* PyUnicode_AsUnicodeEscapeString(PyObject *unicode) - Encode a Unicode object using Unicode-Escape and return the result as Python - string object. Error handling is "strict". Return *NULL* if an exception was + Encode a Unicode object using Unicode-Escape and return the result as a + bytes object. Error handling is "strict". Return *NULL* if an exception was raised by the codec. .. c:function:: PyObject* PyUnicode_EncodeUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size) Encode the :c:type:`Py_UNICODE` buffer of the given *size* using Unicode-Escape and - return a Python string object. Return *NULL* if an exception was raised by the - codec. + return a bytes object. Return *NULL* if an exception was raised by the codec. .. deprecated-removed:: 3.3 4.0 Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using @@ -1320,7 +1302,7 @@ These are the "Raw Unicode Escape" codec APIs: .. c:function:: PyObject* PyUnicode_AsRawUnicodeEscapeString(PyObject *unicode) Encode a Unicode object using Raw-Unicode-Escape and return the result as - Python string object. Error handling is "strict". Return *NULL* if an exception + a bytes object. Error handling is "strict". Return *NULL* if an exception was raised by the codec. @@ -1328,12 +1310,12 @@ These are the "Raw Unicode Escape" codec APIs: Py_ssize_t size, const char *errors) Encode the :c:type:`Py_UNICODE` buffer of the given *size* using Raw-Unicode-Escape - and return a Python string object. Return *NULL* if an exception was raised by - the codec. + and return a bytes object. Return *NULL* if an exception was raised by the codec. .. deprecated-removed:: 3.3 4.0 Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsRawUnicodeEscapeString`. + :c:func:`PyUnicode_AsRawUnicodeEscapeString` or + :c:func:`PyUnicode_AsEncodedString`. Latin-1 Codecs @@ -1364,7 +1346,8 @@ ordinals and only these are accepted by the codecs during encoding. .. deprecated-removed:: 3.3 4.0 Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsLatin1String`. + :c:func:`PyUnicode_AsLatin1String` or + :c:func:`PyUnicode_AsEncodedString`. ASCII Codecs @@ -1395,7 +1378,8 @@ codes generate errors. .. deprecated-removed:: 3.3 4.0 Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsASCIIString`. + :c:func:`PyUnicode_AsASCIIString` or + :c:func:`PyUnicode_AsEncodedString`. Character Map Codecs @@ -1407,11 +1391,11 @@ included in the :mod:`encodings` package). The codec uses mapping to encode and decode characters. Decoding mappings must map single string characters to single Unicode -characters, integers (which are then interpreted as Unicode ordinals) or None +characters, integers (which are then interpreted as Unicode ordinals) or ``None`` (meaning "undefined mapping" and causing an error). Encoding mappings must map single Unicode characters to single string -characters, integers (which are then interpreted as Latin-1 ordinals) or None +characters, integers (which are then interpreted as Latin-1 ordinals) or ``None`` (meaning "undefined mapping" and causing an error). The mapping objects provided must only support the __getitem__ mapping @@ -1452,16 +1436,16 @@ The following codec API is special in that maps Unicode to Unicode. *NULL* when an exception was raised by the codec. The *mapping* table must map Unicode ordinal integers to Unicode ordinal - integers or None (causing deletion of the character). + integers or ``None`` (causing deletion of the character). Mapping tables need only provide the :meth:`__getitem__` interface; dictionaries and sequences work well. Unmapped character ordinals (ones which cause a :exc:`LookupError`) are left untouched and are copied as-is. .. deprecated-removed:: 3.3 4.0 - Part of the old-style :c:type:`Py_UNICODE` API. - - .. XXX replace with what? + Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using + :c:func:`PyUnicode_Translate`. or :ref:`generic codec based API + ` .. c:function:: PyObject* PyUnicode_EncodeCharmap(const Py_UNICODE *s, Py_ssize_t size, \ @@ -1473,7 +1457,8 @@ The following codec API is special in that maps Unicode to Unicode. .. deprecated-removed:: 3.3 4.0 Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsCharmapString`. + :c:func:`PyUnicode_AsCharmapString` or + :c:func:`PyUnicode_AsEncodedString`. MBCS codecs for Windows @@ -1523,7 +1508,8 @@ the user settings on the machine running the codec. .. deprecated-removed:: 3.3 4.0 Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsMBCSString` or :c:func:`PyUnicode_EncodeCodePage`. + :c:func:`PyUnicode_AsMBCSString`, :c:func:`PyUnicode_EncodeCodePage` or + :c:func:`PyUnicode_AsEncodedString`. Methods & Slots @@ -1558,7 +1544,7 @@ They all return *NULL* or ``-1`` if an exception occurs. .. c:function:: PyObject* PyUnicode_Splitlines(PyObject *s, int keepend) Split a Unicode string at line breaks, returning a list of Unicode strings. - CRLF is considered to be one line break. If *keepend* is 0, the Line break + CRLF is considered to be one line break. If *keepend* is ``0``, the Line break characters are not included in the resulting strings. @@ -1569,7 +1555,7 @@ They all return *NULL* or ``-1`` if an exception occurs. resulting Unicode object. The mapping table must map Unicode ordinal integers to Unicode ordinal integers - or None (causing deletion of the character). + or ``None`` (causing deletion of the character). Mapping tables need only provide the :meth:`__getitem__` interface; dictionaries and sequences work well. Unmapped character ordinals (ones which cause a @@ -1588,16 +1574,16 @@ They all return *NULL* or ``-1`` if an exception occurs. .. c:function:: Py_ssize_t PyUnicode_Tailmatch(PyObject *str, PyObject *substr, \ Py_ssize_t start, Py_ssize_t end, int direction) - Return 1 if *substr* matches ``str[start:end]`` at the given tail end - (*direction* == -1 means to do a prefix match, *direction* == 1 a suffix match), - 0 otherwise. Return ``-1`` if an error occurred. + Return ``1`` if *substr* matches ``str[start:end]`` at the given tail end + (*direction* == ``-1`` means to do a prefix match, *direction* == ``1`` a suffix match), + ``0`` otherwise. Return ``-1`` if an error occurred. .. c:function:: Py_ssize_t PyUnicode_Find(PyObject *str, PyObject *substr, \ Py_ssize_t start, Py_ssize_t end, int direction) Return the first position of *substr* in ``str[start:end]`` using the given - *direction* (*direction* == 1 means to do a forward search, *direction* == -1 a + *direction* (*direction* == ``1`` means to do a forward search, *direction* == ``-1`` a backward search). The return value is the index of the first match; a value of ``-1`` indicates that no match was found, and ``-2`` indicates that an error occurred and an exception has been set. @@ -1607,8 +1593,8 @@ They all return *NULL* or ``-1`` if an exception occurs. Py_ssize_t start, Py_ssize_t end, int direction) Return the first position of the character *ch* in ``str[start:end]`` using - the given *direction* (*direction* == 1 means to do a forward search, - *direction* == -1 a backward search). The return value is the index of the + the given *direction* (*direction* == ``1`` means to do a forward search, + *direction* == ``-1`` a backward search). The return value is the index of the first match; a value of ``-1`` indicates that no match was found, and ``-2`` indicates that an error occurred and an exception has been set. @@ -1626,23 +1612,28 @@ They all return *NULL* or ``-1`` if an exception occurs. PyObject *replstr, Py_ssize_t maxcount) Replace at most *maxcount* occurrences of *substr* in *str* with *replstr* and - return the resulting Unicode object. *maxcount* == -1 means replace all + return the resulting Unicode object. *maxcount* == ``-1`` means replace all occurrences. .. c:function:: int PyUnicode_Compare(PyObject *left, PyObject *right) - Compare two strings and return -1, 0, 1 for less than, equal, and greater than, + Compare two strings and return ``-1``, ``0``, ``1`` for less than, equal, and greater than, respectively. + This function returns ``-1`` upon failure, so one should call + :c:func:`PyErr_Occurred` to check for errors. + .. c:function:: int PyUnicode_CompareWithASCIIString(PyObject *uni, const char *string) - Compare a unicode object, *uni*, with *string* and return -1, 0, 1 for less + Compare a unicode object, *uni*, with *string* and return ``-1``, ``0``, ``1`` for less than, equal, and greater than, respectively. It is best to pass only ASCII-encoded strings, but the function interprets the input string as ISO-8859-1 if it contains non-ASCII characters. + This function does not raise exceptions. + .. c:function:: PyObject* PyUnicode_RichCompare(PyObject *left, PyObject *right, int op) @@ -1652,10 +1643,6 @@ They all return *NULL* or ``-1`` if an exception occurs. * :const:`Py_True` or :const:`Py_False` for successful comparisons * :const:`Py_NotImplemented` in case the type combination is unknown - Note that :const:`Py_EQ` and :const:`Py_NE` comparisons can cause a - :exc:`UnicodeWarning` in case the conversion of the arguments to Unicode fails - with a :exc:`UnicodeDecodeError`. - Possible values for *op* are :const:`Py_GT`, :const:`Py_GE`, :const:`Py_EQ`, :const:`Py_NE`, :const:`Py_LT`, and :const:`Py_LE`. diff --git a/Doc/c-api/veryhigh.rst b/Doc/c-api/veryhigh.rst index 706efdf..d0ceb05 100644 --- a/Doc/c-api/veryhigh.rst +++ b/Doc/c-api/veryhigh.rst @@ -219,9 +219,10 @@ the same library that the Python runtime is using. .. c:function:: PyObject* PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags) Execute Python source code from *str* in the context specified by the - dictionaries *globals* and *locals* with the compiler flags specified by - *flags*. The parameter *start* specifies the start token that should be used to - parse the source code. + objects *globals* and *locals* with the compiler flags specified by + *flags*. *globals* must be a dictionary; *locals* can be any object + that implements the mapping protocol. The parameter *start* specifies + the start token that should be used to parse the source code. Returns the result of executing the code as a Python object, or *NULL* if an exception was raised. @@ -287,7 +288,7 @@ the same library that the Python runtime is using. .. c:function:: PyObject* Py_CompileStringExFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags, int optimize) - Like :c:func:`Py_CompileStringExFlags`, but *filename* is a byte string + Like :c:func:`Py_CompileStringObject`, but *filename* is a byte string decoded from the filesystem encoding (:func:`os.fsdecode`). .. versionadded:: 3.2 @@ -295,16 +296,16 @@ the same library that the Python runtime is using. .. c:function:: PyObject* PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals) This is a simplified interface to :c:func:`PyEval_EvalCodeEx`, with just - the code object, and the dictionaries of global and local variables. - The other arguments are set to *NULL*. + the code object, and global and local variables. The other arguments are + set to *NULL*. .. c:function:: PyObject* PyEval_EvalCodeEx(PyObject *co, PyObject *globals, PyObject *locals, PyObject **args, int argcount, PyObject **kws, int kwcount, PyObject **defs, int defcount, PyObject *closure) Evaluate a precompiled code object, given a particular environment for its - evaluation. This environment consists of dictionaries of global and local - variables, arrays of arguments, keywords and defaults, and a closure tuple of - cells. + evaluation. This environment consists of a dictionary of global variables, + a mapping object of local variables, arrays of arguments, keywords and + defaults, and a closure tuple of cells. .. c:type:: PyFrameObject diff --git a/Doc/conf.py b/Doc/conf.py index d6f20ba..b1bb620 100644 --- a/Doc/conf.py +++ b/Doc/conf.py @@ -60,7 +60,10 @@ templates_path = ['tools/templates'] # Custom sidebar templates, filenames relative to this file. html_sidebars = { - 'index': 'indexsidebar.html', + # Defaults taken from http://www.sphinx-doc.org/en/stable/config.html#confval-html_sidebars + # Removes the quick search block + '**': ['localtoc.html', 'relations.html', 'customsourcelink.html'], + 'index': ['indexsidebar.html'], } # Additional templates that should be rendered to pages. diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst index 0672253..b5b7731 100644 --- a/Doc/distutils/apiref.rst +++ b/Doc/distutils/apiref.rst @@ -166,7 +166,7 @@ the full reference. .. class:: Extension - The Extension class describes a single C or C++extension module in a setup + The Extension class describes a single C or C++ extension module in a setup script. It accepts the following keyword arguments in its constructor: .. tabularcolumns:: |l|L|l| @@ -205,7 +205,7 @@ the full reference. | | to or ``None`` to define it | | | | without a particular value | | | | (equivalent of ``#define FOO`` | | - | | in source or :option:`-DFOO` | | + | | in source or :option:`!-DFOO` | | | | on Unix C compiler command | | | | line) | | +------------------------+--------------------------------+---------------------------+ @@ -319,11 +319,11 @@ This module provides the following functions. .. function:: gen_preprocess_options(macros, include_dirs) - Generate C pre-processor options (:option:`-D`, :option:`!-U`, :option:`!-I`) as + Generate C pre-processor options (:option:`!-D`, :option:`!-U`, :option:`!-I`) as used by at least two types of compilers: the typical Unix compiler and Visual C++. *macros* is the usual thing, a list of 1- or 2-tuples, where ``(name,)`` means undefine (:option:`!-U`) macro *name*, and ``(name, value)`` means define - (:option:`-D`) macro *name* to *value*. *include_dirs* is just a list of + (:option:`!-D`) macro *name* to *value*. *include_dirs* is just a list of directory names to be added to the header file search path (:option:`!-I`). Returns a list of command-line options suitable for either Unix compilers or Visual C++. @@ -359,7 +359,7 @@ This module provides the following functions. .. function:: show_compilers() - Print list of available compilers (used by the :option:`--help-compiler` options + Print list of available compilers (used by the :option:`!--help-compiler` options to :command:`build`, :command:`build_ext`, :command:`build_clib`). @@ -789,15 +789,15 @@ This module provides the following functions. This module provides the :class:`UnixCCompiler` class, a subclass of :class:`CCompiler` that handles the typical Unix-style command-line C compiler: -* macros defined with :option:`-Dname[=value]` +* macros defined with :option:`!-Dname[=value]` -* macros undefined with :option:`-Uname` +* macros undefined with :option:`!-Uname` -* include search directories specified with :option:`-Idir` +* include search directories specified with :option:`!-Idir` -* libraries specified with :option:`-llib` +* libraries specified with :option:`!-llib` -* library search directories specified with :option:`-Ldir` +* library search directories specified with :option:`!-Ldir` * compile handled by :program:`cc` (or similar) executable with :option:`!-c` option: compiles :file:`.c` to :file:`.o` @@ -805,7 +805,7 @@ This module provides the :class:`UnixCCompiler` class, a subclass of * link static library handled by :program:`ar` command (possibly with :program:`ranlib`) -* link shared library handled by :program:`cc` :option:`-shared` +* link shared library handled by :program:`cc` :option:`!-shared` :mod:`distutils.msvccompiler` --- Microsoft Compiler @@ -1318,8 +1318,8 @@ provides the following additional features: * options set attributes of a passed-in object -* boolean options can have "negative aliases" --- eg. if :option:`--quiet` is - the "negative alias" of :option:`--verbose`, then :option:`--quiet` on the +* boolean options can have "negative aliases" --- eg. if :option:`!--quiet` is + the "negative alias" of :option:`!--verbose`, then :option:`!--quiet` on the command line sets *verbose* to false. .. function:: fancy_getopt(options, negative_opt, object, args) diff --git a/Doc/distutils/builtdist.rst b/Doc/distutils/builtdist.rst index 523d1e0..bbd2a8c 100644 --- a/Doc/distutils/builtdist.rst +++ b/Doc/distutils/builtdist.rst @@ -57,7 +57,7 @@ built distributions, such as an RPM package or an executable installer for Windows, is far more convenient for users even if your distribution doesn't include any extensions. -The :command:`bdist` command has a :option:`--formats` option, similar to the +The :command:`bdist` command has a :option:`!--formats` option, similar to the :command:`sdist` command, which you can use to select the types of built distribution to generate: for example, :: @@ -123,7 +123,7 @@ Notes: requires external :program:`rpm` utility, version 3.0.4 or better (use ``rpm --version`` to find out which version you have) -You don't have to use the :command:`bdist` command with the :option:`--formats` +You don't have to use the :command:`bdist` command with the :option:`!--formats` option; you can also use the command that directly implements the format you're interested in. Some of these :command:`bdist` "sub-commands" actually generate several similar formats; for instance, the :command:`bdist_dumb` command @@ -174,7 +174,7 @@ The usual way to create an RPM of your module distribution is to run the python setup.py bdist_rpm -or the :command:`bdist` command with the :option:`--format` option:: +or the :command:`bdist` command with the :option:`!--format` option:: python setup.py bdist --formats=rpm @@ -249,7 +249,7 @@ configuration file, :file:`setup.cfg`\ ---see section :ref:`setup-config`. If you distribute or package many Python module distributions, you might want to put options that apply to all of them in your personal Distutils configuration file (:file:`~/.pydistutils.cfg`). If you want to temporarily disable -this file, you can pass the :option:`--no-user-cfg` option to :file:`setup.py`. +this file, you can pass the :option:`!--no-user-cfg` option to :file:`setup.py`. There are three steps to building a binary RPM package, all of which are handled automatically by the Distutils: @@ -267,10 +267,10 @@ Normally, RPM bundles the last two steps together; when you use the Distutils, all three steps are typically bundled together. If you wish, you can separate these three steps. You can use the -:option:`--spec-only` option to make :command:`bdist_rpm` just create the +:option:`!--spec-only` option to make :command:`bdist_rpm` just create the :file:`.spec` file and exit; in this case, the :file:`.spec` file will be written to the "distribution directory"---normally :file:`dist/`, but -customizable with the :option:`--dist-dir` option. (Normally, the :file:`.spec` +customizable with the :option:`!--dist-dir` option. (Normally, the :file:`.spec` file winds up deep in the "build tree," in a temporary directory created by :command:`bdist_rpm`.) @@ -307,7 +307,7 @@ is usually as easy as running:: python setup.py bdist_wininst -or the :command:`bdist` command with the :option:`--formats` option:: +or the :command:`bdist` command with the :option:`!--formats` option:: python setup.py bdist --formats=wininst @@ -325,20 +325,20 @@ support. The installer will try to compile pure modules into :term:`bytecode` after installation on the target system in normal and optimizing mode. If you don't want this to happen for some reason, you can run the :command:`bdist_wininst` command with -the :option:`--no-target-compile` and/or the :option:`--no-target-optimize` +the :option:`!--no-target-compile` and/or the :option:`!--no-target-optimize` option. By default the installer will display the cool "Python Powered" logo when it is run, but you can also supply your own 152x261 bitmap which must be a Windows -:file:`.bmp` file with the :option:`--bitmap` option. +:file:`.bmp` file with the :option:`!--bitmap` option. The installer will also display a large title on the desktop background window when it is run, which is constructed from the name of your distribution and the version number. This can be changed to another text by using the -:option:`--title` option. +:option:`!--title` option. The installer file will be written to the "distribution directory" --- normally -:file:`dist/`, but customizable with the :option:`--dist-dir` option. +:file:`dist/`, but customizable with the :option:`!--dist-dir` option. .. _cross-compile-windows: @@ -350,7 +350,7 @@ Windows platforms. In practice, this means that with the correct tools installed, you can use a 32bit version of Windows to create 64bit extensions and vice-versa. -To build for an alternate platform, specify the :option:`--plat-name` option +To build for an alternate platform, specify the :option:`!--plat-name` option to the build command. Valid values are currently 'win32', 'win-amd64' and 'win-ia64'. For example, on a 32bit version of Windows, you could execute:: @@ -383,14 +383,14 @@ The Postinstallation script --------------------------- Starting with Python 2.3, a postinstallation script can be specified with the -:option:`--install-script` option. The basename of the script must be +:option:`!--install-script` option. The basename of the script must be specified, and the script filename must also be listed in the scripts argument to the setup function. This script will be run at installation time on the target system after all the -files have been copied, with ``argv[1]`` set to :option:`-install`, and again at +files have been copied, with ``argv[1]`` set to :option:`!-install`, and again at uninstallation time before the files are removed with ``argv[1]`` set to -:option:`-remove`. +:option:`!-remove`. The installation script runs embedded in the windows installer, every output (``sys.stdout``, ``sys.stderr``) is redirected into a buffer and will be @@ -453,7 +453,7 @@ built-in functions in the installation script. Vista User Access Control (UAC) =============================== -Starting with Python 2.6, bdist_wininst supports a :option:`--user-access-control` +Starting with Python 2.6, bdist_wininst supports a :option:`!--user-access-control` option. The default is 'none' (meaning no UAC handling is done), and other valid values are 'auto' (meaning prompt for UAC elevation if Python was installed for all users) and 'force' (meaning always prompt for elevation). diff --git a/Doc/distutils/configfile.rst b/Doc/distutils/configfile.rst index 51d8897..21f1acd 100644 --- a/Doc/distutils/configfile.rst +++ b/Doc/distutils/configfile.rst @@ -66,7 +66,7 @@ universal :option:`!--help` option, e.g. :: --swig-opts list of SWIG command line options [...] -Note that an option spelled :option:`--foo-bar` on the command-line is spelled +Note that an option spelled :option:`!--foo-bar` on the command-line is spelled ``foo_bar`` in configuration files. .. _distutils-build-ext-inplace: @@ -75,12 +75,12 @@ For example, say you want your extensions to be built "in-place"---that is, you have an extension :mod:`pkg.ext`, and you want the compiled extension file (:file:`ext.so` on Unix, say) to be put in the same source directory as your pure Python modules :mod:`pkg.mod1` and :mod:`pkg.mod2`. You can always use the -:option:`--inplace` option on the command-line to ensure this:: +:option:`!--inplace` option on the command-line to ensure this:: python setup.py build_ext --inplace But this requires that you always specify the :command:`build_ext` command -explicitly, and remember to provide :option:`--inplace`. An easier way is to +explicitly, and remember to provide :option:`!--inplace`. An easier way is to "set and forget" this option, by encoding it in :file:`setup.cfg`, the configuration file for this distribution:: diff --git a/Doc/distutils/examples.rst b/Doc/distutils/examples.rst index af9125a..1f5be9c 100644 --- a/Doc/distutils/examples.rst +++ b/Doc/distutils/examples.rst @@ -245,7 +245,9 @@ Let's take an example with a simple script:: setup(name='foobar') -Running the ``check`` command will display some warnings:: +Running the ``check`` command will display some warnings: + +.. code-block:: shell-session $ python setup.py check running check @@ -274,7 +276,9 @@ For example, if the :file:`setup.py` script is changed like this:: url='http://example.com', long_description=desc) Where the long description is broken, ``check`` will be able to detect it -by using the :mod:`docutils` parser:: +by using the :mod:`docutils` parser: + +.. code-block:: shell-session $ python setup.py check --restructuredtext running check @@ -286,7 +290,9 @@ Reading the metadata The :func:`distutils.core.setup` function provides a command-line interface that allows you to query the metadata fields of a project through the -``setup.py`` script of a given project:: +``setup.py`` script of a given project: + +.. code-block:: shell-session $ python setup.py --name distribute diff --git a/Doc/distutils/extending.rst b/Doc/distutils/extending.rst index 5139c6d..501fd7c 100644 --- a/Doc/distutils/extending.rst +++ b/Doc/distutils/extending.rst @@ -62,7 +62,7 @@ requiring modifications to the Python installation. This is expected to allow third-party extensions to provide support for additional packaging systems, but the commands can be used for anything distutils commands can be used for. A new configuration option, ``command_packages`` (command-line option -:option:`--command-packages`), can be used to specify additional packages to be +:option:`!--command-packages`), can be used to specify additional packages to be searched for modules implementing commands. Like all distutils options, this can be specified on the command line or in a configuration file. This option can only be set in the ``[global]`` section of a configuration file, or before diff --git a/Doc/distutils/packageindex.rst b/Doc/distutils/packageindex.rst index 2d7daef..44556e3 100644 --- a/Doc/distutils/packageindex.rst +++ b/Doc/distutils/packageindex.rst @@ -173,7 +173,7 @@ name of all sections describing a repository. Each section describing a repository defines three variables: - *repository*, that defines the url of the PyPI server. Defaults to - ``https://www.python.org/pypi``. + ``https://upload.pypi.org/legacy/``. - *username*, which is the registered username on the PyPI server. - *password*, that will be used to authenticate. If omitted the user will be prompt to type it when needed. @@ -233,7 +233,9 @@ in the root of the package besides :file:`setup.py`. To prevent registering broken reStructuredText content, you can use the :program:`rst2html` program that is provided by the :mod:`docutils` package and -check the ``long_description`` from the command line:: +check the ``long_description`` from the command line: + +.. code-block:: shell-session $ python setup.py --long-description | rst2html.py > output.html diff --git a/Doc/distutils/setupscript.rst b/Doc/distutils/setupscript.rst index 914a34f..38e0202 100644 --- a/Doc/distutils/setupscript.rst +++ b/Doc/distutils/setupscript.rst @@ -201,7 +201,7 @@ The second argument to the :class:`~distutils.core.Extension` constructor is a list of source files. Since the Distutils currently only support C, C++, and Objective-C extensions, these are normally C/C++/Objective-C source files. (Be sure to use -appropriate extensions to distinguish C++\ source files: :file:`.cc` and +appropriate extensions to distinguish C++ source files: :file:`.cc` and :file:`.cpp` seem to be recognized by both Unix and Windows compilers.) However, you can also include SWIG interface (:file:`.i`) files in the list; the @@ -446,7 +446,7 @@ command line. Scripts don't require Distutils to do anything very complicated. The only clever feature is that if the first line of the script starts with ``#!`` and contains the word "python", the Distutils will adjust the first line to refer to the current interpreter location. By default, it is replaced with -the current interpreter location. The :option:`--executable` (or :option:`-e`) +the current interpreter location. The :option:`!--executable` (or :option:`!-e`) option will allow the interpreter path to be explicitly overridden. The ``scripts`` option simply is a list of files to be handled in this diff --git a/Doc/distutils/sourcedist.rst b/Doc/distutils/sourcedist.rst index fb70514..cc289c9 100644 --- a/Doc/distutils/sourcedist.rst +++ b/Doc/distutils/sourcedist.rst @@ -14,7 +14,7 @@ or config file), :command:`sdist` creates the archive of the default format for the current platform. The default format is a gzip'ed tar file (:file:`.tar.gz`) on Unix, and ZIP file on Windows. -You can specify as many formats as you like using the :option:`--formats` +You can specify as many formats as you like using the :option:`!--formats` option, for example:: python setup.py sdist --formats=gztar,zip @@ -133,7 +133,9 @@ described above does not apply in this case. The manifest template has one command per line, where each command specifies a set of files to include or exclude from the source distribution. For an -example, again we turn to the Distutils' own manifest template:: +example, again we turn to the Distutils' own manifest template: + +.. code-block:: none include *.txt recursive-include examples *.txt *.py @@ -145,7 +147,7 @@ matching :file:`\*.txt` or :file:`\*.py`, and exclude all directories matching :file:`examples/sample?/build`. All of this is done *after* the standard include set, so you can exclude files from the standard set with explicit instructions in the manifest template. (Or, you can use the -:option:`--no-defaults` option to disable the standard set entirely.) There are +:option:`!--no-defaults` option to disable the standard set entirely.) There are several other commands available in the manifest template mini-language; see section :ref:`sdist-cmd`. @@ -164,8 +166,8 @@ Now we have our complete list of files, which is written to the manifest for future reference, and then used to build the source distribution archive(s). You can disable the default set of included files with the -:option:`--no-defaults` option, and you can disable the standard exclude set -with :option:`--no-prune`. +:option:`!--no-defaults` option, and you can disable the standard exclude set +with :option:`!--no-prune`. Following the Distutils' own manifest template, let's trace how the :command:`sdist` command builds the list of files to include in the Distutils @@ -223,7 +225,7 @@ The normal course of operations for the :command:`sdist` command is as follows: in) to create the source distribution archive(s) There are a couple of options that modify this behaviour. First, use the -:option:`--no-defaults` and :option:`--no-prune` to disable the standard +:option:`!--no-defaults` and :option:`!--no-prune` to disable the standard "include" and "exclude" sets. Second, you might just want to (re)generate the manifest, but not create a source @@ -231,4 +233,4 @@ distribution:: python setup.py sdist --manifest-only -:option:`-o` is a shortcut for :option:`--manifest-only`. +:option:`!-o` is a shortcut for :option:`!--manifest-only`. diff --git a/Doc/extending/building.rst b/Doc/extending/building.rst index b5ccee7..9fe12c2 100644 --- a/Doc/extending/building.rst +++ b/Doc/extending/building.rst @@ -55,7 +55,9 @@ Since distutils also supports creation of binary packages, users don't necessarily need a compiler and distutils to install the extension. A distutils package contains a driver script, :file:`setup.py`. This is a plain -Python file, which, in the most simple case, could look like this:: +Python file, which, in the most simple case, could look like this: + +.. code-block:: python3 from distutils.core import setup, Extension @@ -96,7 +98,9 @@ file, :file:`demo.c`. In many cases, building an extension is more complex, since additional preprocessor defines and libraries may be needed. This is demonstrated in the -example below. :: +example below. + +.. code-block:: python3 from distutils.core import setup, Extension @@ -161,4 +165,3 @@ commands can be used to do so. :: python setup.py bdist_wininst python setup.py bdist_rpm python setup.py bdist_dumb - diff --git a/Doc/extending/embedding.rst b/Doc/extending/embedding.rst index acd60ae..64033dc 100644 --- a/Doc/extending/embedding.rst +++ b/Doc/extending/embedding.rst @@ -155,7 +155,9 @@ script, such as: c = c + b return c -then the result should be:: +then the result should be: + +.. code-block:: shell-session $ call multiply multiply 3 2 Will compute 3 times 2 @@ -289,16 +291,20 @@ available). This script has several options, of which the following will be directly useful to you: * ``pythonX.Y-config --cflags`` will give you the recommended flags when - compiling:: + compiling: + + .. code-block:: shell-session - $ /opt/bin/python3.4-config --cflags - -I/opt/include/python3.4m -I/opt/include/python3.4m -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes + $ /opt/bin/python3.4-config --cflags + -I/opt/include/python3.4m -I/opt/include/python3.4m -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes * ``pythonX.Y-config --ldflags`` will give you the recommended flags when - linking:: + linking: + + .. code-block:: shell-session - $ /opt/bin/python3.4-config --ldflags - -L/opt/lib/python3.4/config-3.4m -lpthread -ldl -lutil -lm -lpython3.4m -Xlinker -export-dynamic + $ /opt/bin/python3.4-config --ldflags + -L/opt/lib/python3.4/config-3.4m -lpthread -ldl -lutil -lm -lpython3.4m -Xlinker -export-dynamic .. note:: To avoid confusion between several Python installations (and especially diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst index 523dfab..4ac820a 100644 --- a/Doc/extending/extending.rst +++ b/Doc/extending/extending.rst @@ -792,7 +792,9 @@ 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. -Examples (to the left the call, to the right the resulting Python value):: +Examples (to the left the call, to the right the resulting Python value): + +.. code-block:: none Py_BuildValue("") None Py_BuildValue("i", 123) 123 @@ -884,7 +886,7 @@ The :mod:`gc` module exposes a way to run the detector (the :func:`~gc.collect` function), as well as configuration interfaces and the ability to disable the detector at runtime. The cycle detector is considered an optional component; though it is included by default, -it can be disabled at build time using the :option:`--without-cycle-gc` option +it can be disabled at build time using the :option:`!--without-cycle-gc` option to the :program:`configure` script on Unix platforms (including Mac OS X). If the cycle detector is disabled in this way, the :mod:`gc` module will not be available. @@ -1348,4 +1350,3 @@ code distribution). .. [#] These guarantees don't hold when you use the "old" style calling convention --- this is still found in much existing code. - diff --git a/Doc/extending/newtypes.rst b/Doc/extending/newtypes.rst index f60e208..b8ce437 100644 --- a/Doc/extending/newtypes.rst +++ b/Doc/extending/newtypes.rst @@ -52,11 +52,15 @@ The first bit that will be new is:: } noddy_NoddyObject; This is what a Noddy object will contain---in this case, nothing more than what -every Python object contains---a refcount and a pointer to a type object. -These are the fields the ``PyObject_HEAD`` macro brings in. The reason for the -macro is to standardize the layout and to enable special debugging fields in -debug builds. Note that there is no semicolon after the ``PyObject_HEAD`` -macro; one is included in the macro definition. Be wary of adding one by +every Python object contains---a field called ``ob_base`` of type +:c:type:`PyObject`. :c:type:`PyObject` in turn, contains an ``ob_refcnt`` +field and a pointer to a type object. These can be accessed using the macros +:c:macro:`Py_REFCNT` and :c:macro:`Py_TYPE` respectively. These are the fields +the :c:macro:`PyObject_HEAD` macro brings in. The reason for the macro is to +standardize the layout and to enable special debugging fields in debug builds. + +Note that there is no semicolon after the :c:macro:`PyObject_HEAD` macro; +one is included in the macro definition. Be wary of adding one by accident; it's easy to do from habit, and your compiler might not complain, but someone else's probably will! (On Windows, MSVC is known to call this an error and refuse to compile the code.) @@ -125,7 +129,9 @@ our objects and in some error messages, for example:: Note that the name is a dotted name that includes both the module name and the name of the type within the module. The module in this case is :mod:`noddy` and -the type is :class:`Noddy`, so we set the type name to :class:`noddy.Noddy`. :: +the type is :class:`Noddy`, so we set the type name to :class:`noddy.Noddy`. +One side effect of using an undotted name is that the pydoc documentation tool +will not list the new type in the module documentation. :: sizeof(noddy_NoddyObject), /* tp_basicsize */ @@ -209,7 +215,9 @@ That's it! All that remains is to build it; put the above code in a file called setup(name="noddy", version="1.0", ext_modules=[Extension("noddy", ["noddy.c"])]) -in a file called :file:`setup.py`; then typing :: +in a file called :file:`setup.py`; then typing + +.. code-block:: shell-session $ python setup.py build @@ -1114,10 +1122,10 @@ If :c:member:`~PyTypeObject.tp_methods` is not *NULL*, it must refer to an array structure:: typedef struct PyMethodDef { - char *ml_name; /* method name */ + const char *ml_name; /* method name */ PyCFunction ml_meth; /* implementation function */ int ml_flags; /* flags */ - char *ml_doc; /* docstring */ + const char *ml_doc; /* docstring */ } PyMethodDef; One entry should be defined for each method provided by the type; no entries are @@ -1513,4 +1521,3 @@ might be something like the following:: .. [#] Even in the third version, we aren't guaranteed to avoid cycles. Instances of string subclasses are allowed and string subclasses could allow cycles even if normal strings don't. - diff --git a/Doc/faq/design.rst b/Doc/faq/design.rst index 1b6cd7e..108df6d 100644 --- a/Doc/faq/design.rst +++ b/Doc/faq/design.rst @@ -31,7 +31,7 @@ least slightly uneasy when reading (or being required to write) another style. Many coding styles place begin/end brackets on a line by themselves. This makes programs considerably longer and wastes valuable screen space, making it harder to get a good overview of a program. Ideally, a function should fit on one -screen (say, 20-30 lines). 20 lines of Python can do a lot more work than 20 +screen (say, 20--30 lines). 20 lines of Python can do a lot more work than 20 lines of C. This is not solely due to the lack of begin/end brackets -- the lack of declarations and the high-level data types are also responsible -- but the indentation-based syntax certainly helps. @@ -77,7 +77,7 @@ which is exactly:: 1.1999999999999999555910790149937383830547332763671875 (decimal) -The typical precision of 53 bits provides Python floats with 15-16 +The typical precision of 53 bits provides Python floats with 15--16 decimal digits of accuracy. For a fuller explanation, please see the :ref:`floating point arithmetic diff --git a/Doc/faq/extending.rst b/Doc/faq/extending.rst index 852e35f..3eafdf1 100644 --- a/Doc/faq/extending.rst +++ b/Doc/faq/extending.rst @@ -146,7 +146,9 @@ this object to :data:`sys.stdout` and :data:`sys.stderr`. Call print_error, or just allow the standard traceback mechanism to work. Then, the output will go wherever your ``write()`` method sends it. -The easiest way to do this is to use the :class:`io.StringIO` class:: +The easiest way to do this is to use the :class:`io.StringIO` class: + +.. code-block:: pycon >>> import io, sys >>> sys.stdout = io.StringIO() @@ -156,7 +158,9 @@ The easiest way to do this is to use the :class:`io.StringIO` class:: foo hello world! -A custom object to do the same would look like this:: +A custom object to do the same would look like this: + +.. code-block:: pycon >>> import io, sys >>> class StdoutCatcher(io.TextIOBase): @@ -222,11 +226,15 @@ How do I debug an extension? When using GDB with dynamically loaded extensions, you can't set a breakpoint in your extension until your extension is loaded. -In your ``.gdbinit`` file (or interactively), add the command:: +In your ``.gdbinit`` file (or interactively), add the command: + +.. code-block:: none br _PyImport_LoadDynamicModule -Then, when you run GDB:: +Then, when you run GDB: + +.. code-block:: shell-session $ gdb /local/bin/python gdb) run myscript.py diff --git a/Doc/faq/general.rst b/Doc/faq/general.rst index 6b773dd..f1e33af 100644 --- a/Doc/faq/general.rst +++ b/Doc/faq/general.rst @@ -252,7 +252,7 @@ outdated. Guido van Rossum and Jelke de Boer, "Interactively Testing Remote Servers Using the Python Programming Language", CWI Quarterly, Volume 4, Issue 4 - (December 1991), Amsterdam, pp 283-303. + (December 1991), Amsterdam, pp 283--303. Are there any books on Python? @@ -438,7 +438,7 @@ remember the methods for a list, they can do something like this:: >>> L [1] -With the interpreter, documentation is never far from the student as he's +With the interpreter, documentation is never far from the student as they are programming. There are also good IDEs for Python. IDLE is a cross-platform IDE for Python diff --git a/Doc/faq/gui.rst b/Doc/faq/gui.rst index 98a28c3..477d8c6 100644 --- a/Doc/faq/gui.rst +++ b/Doc/faq/gui.rst @@ -77,6 +77,16 @@ for Python allow you to write GTK+ 3 applications. There is also a The older PyGtk bindings for the `Gtk+ 2 toolkit `_ have been implemented by James Henstridge; see . +Kivy +---- + +`Kivy `_ is a cross-platform GUI library supporting both +desktop operating systems (Windows, macOS, Linux) and mobile devices (Android, +iOS). It is written in Python and Cython, and can use a range of windowing +backends. + +Kivy is free and open source software distributed under the MIT license. + FLTK ---- diff --git a/Doc/howto/argparse.rst b/Doc/howto/argparse.rst index cfe9868..3b79b92 100644 --- a/Doc/howto/argparse.rst +++ b/Doc/howto/argparse.rst @@ -503,8 +503,8 @@ to count the number of occurrences of a specific optional arguments: * Now here's a demonstration of what the "count" action gives. You've probably seen this sort of usage before. -* And, just like the "store_true" action, if you don't specify the ``-v`` flag, - that flag is considered to have ``None`` value. +* And if you don't specify the ``-v`` flag, that flag is considered to have + ``None`` value. * As should be expected, specifying the long form of the flag, we should get the same output. diff --git a/Doc/howto/clinic.rst b/Doc/howto/clinic.rst index b04edea..491c5a2 100644 --- a/Doc/howto/clinic.rst +++ b/Doc/howto/clinic.rst @@ -1,3 +1,5 @@ +.. highlightlang:: c + ********************** Argument Clinic How-To ********************** @@ -30,7 +32,7 @@ Argument Clinic's primary goal is to take over responsibility for all argument parsing code inside CPython. This means that, when you convert a function to work with Argument Clinic, that function should no longer -do any of its own argument parsing--the code generated by +do any of its own argument parsing—the code generated by Argument Clinic should be a "black box" to you, where CPython calls in at the top, and your code gets called at the bottom, with ``PyObject *args`` (and maybe ``PyObject *kwargs``) @@ -43,12 +45,12 @@ redundant information in a surprising number of places. When you use Argument Clinic, you don't have to repeat yourself. Obviously, no one would want to use Argument Clinic unless -it's solving their problem--and without creating new problems of +it's solving their problem—and without creating new problems of its own. So it's paramount that Argument Clinic generate correct code. It'd be nice if the code was faster, too, but at the very least it should not introduce a major speed regression. (Eventually Argument -Clinic *should* make a major speedup possible--we could +Clinic *should* make a major speedup possible—we could rewrite its code generator to produce tailor-made argument parsing code, rather than calling the general-purpose CPython argument parsing library. That would make for the fastest @@ -78,17 +80,23 @@ Basic Concepts And Usage ======================== Argument Clinic ships with CPython; you'll find it in ``Tools/clinic/clinic.py``. -If you run that script, specifying a C file as an argument:: +If you run that script, specifying a C file as an argument: + +.. code-block:: shell-session - % python3 Tools/clinic/clinic.py foo.c + $ python3 Tools/clinic/clinic.py foo.c Argument Clinic will scan over the file looking for lines that -look exactly like this:: +look exactly like this: + +.. code-block:: none /*[clinic input] When it finds one, it reads everything up to a line that looks -exactly like this:: +exactly like this: + +.. code-block:: none [clinic start generated code]*/ @@ -99,7 +107,9 @@ lines, are collectively called an Argument Clinic "block". When Argument Clinic parses one of these blocks, it generates output. This output is rewritten into the C file immediately after the block, followed by a comment containing a checksum. -The Argument Clinic block now looks like this:: +The Argument Clinic block now looks like this: + +.. code-block:: none /*[clinic input] ... clinic input goes here ... @@ -113,7 +123,7 @@ line. However, if the input hasn't changed, the output won't change either. You should never modify the output portion of an Argument Clinic block. Instead, change the input until it produces the output you want. (That's the purpose of the -checksum--to detect if someone changed the output, as these edits would be lost +checksum—to detect if someone changed the output, as these edits would be lost the next time Argument Clinic writes out fresh output.) For the sake of clarity, here's the terminology we'll use with Argument Clinic: @@ -152,7 +162,9 @@ Let's dive in! For my example I'm using ``_pickle.Pickler.dump()``. 2. If the call to the ``PyArg_Parse`` function uses any of the - following format units:: + following format units: + + .. code-block:: none O& O! @@ -164,7 +176,7 @@ Let's dive in! or if it has multiple calls to :c:func:`PyArg_ParseTuple`, you should choose a different function. Argument Clinic *does* support all of these scenarios. But these are advanced - topics--let's do something simpler for your first function. + topics—let's do something simpler for your first function. Also, if the function has multiple calls to :c:func:`PyArg_ParseTuple` or :c:func:`PyArg_ParseTupleAndKeywords` where it supports different @@ -186,7 +198,7 @@ Let's dive in! If the old docstring had a first line that looked like a function signature, throw that line away. (The docstring doesn't need it - anymore--when you use ``help()`` on your builtin in the future, + anymore—when you use ``help()`` on your builtin in the future, the first line will be built automatically based on the function's signature.) @@ -207,7 +219,7 @@ Let's dive in! 6. Above the docstring, enter the name of the function, followed by a blank line. This should be the Python name of the function, and should be the full dotted path - to the function--it should start with the name of the module, + to the function—it should start with the name of the module, include any sub-modules, and if the function is a method on a class it should include the class name too. @@ -273,7 +285,7 @@ Let's dive in! What's a "converter"? It establishes both the type of the variable used in C, and the method to convert the Python value into a C value at runtime. - For now you're going to use what's called a "legacy converter"--a + For now you're going to use what's called a "legacy converter"—a convenience syntax intended to make porting old code into Argument Clinic easier. @@ -373,15 +385,10 @@ Let's dive in! Write a pickled representation of obj to the open file. [clinic start generated code]*/ -12. Save and close the file, then run ``Tools/clinic/clinic.py`` on it. - With luck everything worked and your block now has output! Reopen - the file in your text editor to see:: - - /*[clinic input] - module _pickle - class _pickle.Pickler "PicklerObject *" "&Pickler_Type" - [clinic start generated code]*/ - /*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/ +12. Save and close the file, then run ``Tools/clinic/clinic.py`` on + it. With luck everything worked---your block now has output, and + a ``.c.h`` file has been generated! Reopen the file in your + text editor to see:: /*[clinic input] _pickle.Pickler.dump @@ -393,18 +400,20 @@ Let's dive in! Write a pickled representation of obj to the open file. [clinic start generated code]*/ - PyDoc_STRVAR(_pickle_Pickler_dump__doc__, - "Write a pickled representation of obj to the open file.\n" - "\n" - ... static PyObject * - _pickle_Pickler_dump_impl(PicklerObject *self, PyObject *obj) - /*[clinic end generated code: checksum=3bd30745bf206a48f8b576a1da3d90f55a0a4187]*/ + _pickle_Pickler_dump(PicklerObject *self, PyObject *obj) + /*[clinic end generated code: output=87ecad1261e02ac7 input=552eb1c0f52260d9]*/ Obviously, if Argument Clinic didn't produce any output, it's because it found an error in your input. Keep fixing your errors and retrying until Argument Clinic processes your file without complaint. + For readability, most of the glue code has been generated to a ``.c.h`` + file. You'll need to include that in your original ``.c`` file, + typically right after the clinic module block:: + + #include "clinic/_pickle.c.h" + 13. Double-check that the argument-parsing code Argument Clinic generated looks basically the same as the existing code. @@ -422,7 +431,7 @@ Let's dive in! (Argument Clinic always generates its format strings with a ``:`` followed by the name of the function. If the existing code's format string ends with ``;``, to provide - usage help, this change is harmless--don't worry about it.) + usage help, this change is harmless—don't worry about it.) Third, for parameters whose format units require two arguments (like a length variable, or an encoding string, or a pointer @@ -635,7 +644,7 @@ an optional argument on the *left* side of its required argument! Another example is ``curses.window.addch()``, which has a group of two arguments that must always be specified together. (The arguments are called ``x`` and ``y``; if you call the function passing in ``x``, -you must also pass in ``y``--and if you don't pass in ``x`` you may not +you must also pass in ``y``—and if you don't pass in ``x`` you may not pass in ``y`` either.) In any case, the goal of Argument Clinic is to support argument parsing @@ -651,7 +660,7 @@ can *only* be used with positional-only parameters. Functions that use *any* other approach for parsing arguments should *almost never* be converted to Argument Clinic using optional groups. Functions using optional groups currently - cannot have accurate sigantures in Python, because Python just + cannot have accurate signatures in Python, because Python just doesn't understand the concept. Please avoid using optional groups wherever possible. @@ -886,7 +895,7 @@ Advanced converters Remember those format units you skipped for your first time because they were advanced? Here's how to handle those too. -The trick is, all those format units take arguments--either +The trick is, all those format units take arguments—either conversion functions, or types, or strings specifying an encoding. (But "legacy converters" don't support arguments. That's why we skipped them for your first function.) The argument you specified @@ -1000,7 +1009,7 @@ Using a return converter By default the impl function Argument Clinic generates for you returns ``PyObject *``. But your C function often computes some C type, then converts it into the ``PyObject *`` at the last moment. Argument Clinic handles converting your inputs from Python types -into native C types--why not have it convert your return value from a native C type +into native C types—why not have it convert your return value from a native C type into a Python type too? That's what a "return converter" does. It changes your impl function to return @@ -1025,7 +1034,9 @@ that value, and an error has been set (``PyErr_Occurred()`` returns a true value), then the generated code will propagate the error. Otherwise it will encode the value you return like normal. -Currently Argument Clinic supports only a few return converters:: +Currently Argument Clinic supports only a few return converters: + +.. code-block:: none bool int @@ -1182,7 +1193,7 @@ Writing a custom converter As we hinted at in the previous section... you can write your own converters! A converter is simply a Python class that inherits from ``CConverter``. The main purpose of a custom converter is if you have a parameter using -the ``O&`` format unit--parsing this parameter means calling +the ``O&`` format unit—parsing this parameter means calling a :c:func:`PyArg_ParseTuple` "converter function". Your converter class should be named ``*something*_converter``. @@ -1224,7 +1235,7 @@ to specify in your subclass. Here's the current list: The default value used to initialize the C variable when there is no default, but not specifying a default may result in an "uninitialized variable" warning. This can - easily happen when using option groups--although + easily happen when using option groups—although properly-written code will never actually use this value, the variable does get passed in to the impl, and the C compiler will complain about the "use" of the @@ -1249,17 +1260,17 @@ Here's the simplest example of a custom converter, from ``Modules/zlibmodule.c`` /*[python input] - class capped_uint_converter(CConverter): - type = 'unsigned int' - converter = 'capped_uint_converter' + class ssize_t_converter(CConverter): + type = 'Py_ssize_t' + converter = 'ssize_t_converter' [python start generated code]*/ /*[python end generated code: output=da39a3ee5e6b4b0d input=35521e4e733823c7]*/ -This block adds a converter to Argument Clinic named ``capped_uint``. Parameters -declared as ``capped_uint`` will be declared as type ``unsigned int``, and will +This block adds a converter to Argument Clinic named ``ssize_t``. Parameters +declared as ``ssize_t`` will be declared as type ``Py_ssize_t``, and will be parsed by the ``'O&'`` format unit, which will call the -``capped_uint_converter`` converter function. ``capped_uint`` variables +``ssize_t_converter`` converter function. ``ssize_t`` variables automatically support default values. More sophisticated custom converters can insert custom C code to @@ -1335,7 +1346,7 @@ every line of Clinic's generated output. While changing Clinic's output in this manner can be a boon to readability, it may result in Clinic code using types before they are defined, or -your code attempting to use Clinic-generated code befire it is defined. +your code attempting to use Clinic-generated code before it is defined. These problems can be easily solved by rearranging the declarations in your file, or moving where Clinic's generated code goes. (This is why the default behavior of Clinic is to output everything into the current block; while many people @@ -1379,7 +1390,7 @@ Let's start with defining some terminology: ``buffer`` A text buffer where you can save text for later. Text sent - here is appended to the end of any exsiting text. It's an + here is appended to the end of any existing text. It's an error to have any text left in the buffer when Clinic finishes processing a file. @@ -1400,7 +1411,7 @@ Let's start with defining some terminology: all of processing, even from Clinic blocks *after* the ``suppress`` - The text is suppressed--thrown away. + The text is suppressed—thrown away. Clinic defines five new directives that let you reconfigure its output. @@ -1583,7 +1594,7 @@ called ``preserve``:: preserve -This tells Clinic that the current contents of the output should be kept, unmodifed. +This tells Clinic that the current contents of the output should be kept, unmodified. This is used internally by Clinic when dumping output into ``file`` files; wrapping it in a Clinic block lets Clinic use its existing checksum functionality to ensure the file was not modified by hand before it gets overwritten. @@ -1604,7 +1615,9 @@ code probably looks like this:: #endif /* HAVE_FUNCTIONNAME */ And then in the ``PyMethodDef`` structure at the bottom the existing code -will have:: +will have: + +.. code-block:: none #ifdef HAVE_FUNCTIONNAME {'functionname', ... }, @@ -1651,10 +1664,12 @@ undefined, this turns into nothing. However, this causes one ticklish problem: where should Argument Clinic put this extra code when using the "block" output preset? It can't go in the output block, -because that could be decativated by the ``#ifdef``. (That's the whole point!) +because that could be deactivated by the ``#ifdef``. (That's the whole point!) In this situation, Argument Clinic writes the extra code to the "buffer" destination. -This may mean that you get a complaint from Argument Clinic:: +This may mean that you get a complaint from Argument Clinic: + +.. code-block:: none Warning in file "Modules/posixmodule.c" on line 12357: Destination buffer 'buffer' not empty at end of file, emptying. @@ -1674,7 +1689,9 @@ wouldn't make any sense to the Python interpreter. But using Argument Clinic to run Python blocks lets you use Python as a Python preprocessor! Since Python comments are different from C comments, Argument Clinic -blocks embedded in Python files look slightly different. They look like this:: +blocks embedded in Python files look slightly different. They look like this: + +.. code-block:: python3 #/*[python input] #print("def foo(): pass") diff --git a/Doc/howto/cporting.rst b/Doc/howto/cporting.rst index 27e7e6f..7cacb0a 100644 --- a/Doc/howto/cporting.rst +++ b/Doc/howto/cporting.rst @@ -95,7 +95,7 @@ long/int Unification -------------------- Python 3 has only one integer type, :func:`int`. But it actually -corresponds to Python 2's :func:`long` type--the :func:`int` type +corresponds to Python 2's :func:`long` type—the :func:`int` type used in Python 2 was removed. In the C-API, ``PyInt_*`` functions are replaced by their ``PyLong_*`` equivalents. diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst index d370eb5..c2bf473 100644 --- a/Doc/howto/descriptor.rst +++ b/Doc/howto/descriptor.rst @@ -302,7 +302,7 @@ The output suggests that bound and unbound methods are two different types. While they could have been implemented that way, the actual C implementation of :c:type:`PyMethod_Type` in :source:`Objects/classobject.c` is a single object with two different representations depending on whether the :attr:`im_self` -field is set or is *NULL* (the C equivalent of *None*). +field is set or is *NULL* (the C equivalent of ``None``). Likewise, the effects of calling a method object depend on the :attr:`im_self` field. If set (meaning bound), the original function (stored in the diff --git a/Doc/howto/functional.rst b/Doc/howto/functional.rst index 6e21f93..8ae9679 100644 --- a/Doc/howto/functional.rst +++ b/Doc/howto/functional.rst @@ -1040,7 +1040,7 @@ If you use :func:`operator.add` with :func:`functools.reduce`, you'll add up all elements of the iterable. This case is so common that there's a special built-in called :func:`sum` to compute it: - >>> import functools + >>> import functools, operator >>> functools.reduce(operator.add, [1,2,3,4], 0) 10 >>> sum([1,2,3,4]) diff --git a/Doc/howto/ipaddress.rst b/Doc/howto/ipaddress.rst index 5e0ff3e..452e367 100644 --- a/Doc/howto/ipaddress.rst +++ b/Doc/howto/ipaddress.rst @@ -1,3 +1,7 @@ +.. testsetup:: + + import ipaddress + .. _ipaddress-howto: *************************************** @@ -49,11 +53,6 @@ to use the :func:`ipaddress.ip_address` factory function, which automatically determines whether to create an IPv4 or IPv6 address based on the passed in value: -.. testsetup:: - >>> import ipaddress - -:: - >>> ipaddress.ip_address('192.0.2.1') IPv4Address('192.0.2.1') >>> ipaddress.ip_address('2001:DB8::1') diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst index 99b4cdc..f962cd8 100644 --- a/Doc/howto/logging-cookbook.rst +++ b/Doc/howto/logging-cookbook.rst @@ -377,7 +377,9 @@ An example of using these two classes follows (imports omitted):: root.warning('Look out!') listener.stop() -which, when run, will produce:: +which, when run, will produce: + +.. code-block:: none MainThread: Look out! @@ -1086,7 +1088,7 @@ $-formatting to be used to build the actual "message" part which appears in the formatted log output in place of "%(message)s" or "{message}" or "$message". It's a little unwieldy to use the class names whenever you want to log something, but it's quite palatable if you use an alias such as __ (double -underscore – not to be confused with _, the single underscore used as a +underscore --- not to be confused with _, the single underscore used as a synonym/alias for :func:`gettext.gettext` or its brethren). The above classes are not included in Python, though they're easy enough to @@ -1207,7 +1209,7 @@ do simply by adding new packages or modules and doing :: at module level). It's probably one too many things to think about. Developers could also add the filter to a :class:`~logging.NullHandler` attached to their top-level logger, but this would not be invoked if an application developer -attached a handler to a lower-level library logger – so output from that +attached a handler to a lower-level library logger --- so output from that handler would not reflect the intentions of the library developer. In Python 3.2 and later, :class:`~logging.LogRecord` creation is done through a @@ -1860,7 +1862,9 @@ script, ``chowntest.py``:: logger = logging.getLogger('mylogger') logger.debug('A debug message') -To run this, you will probably need to run as ``root``:: +To run this, you will probably need to run as ``root``: + +.. code-block:: shell-session $ sudo python3.3 chowntest.py $ cat chowntest.log @@ -2485,7 +2489,9 @@ via ``stderr`` and once via ``stdout``). After the ``with`` statement's completion, the status is as it was before so message #6 appears (like message #1) whereas message #7 doesn't (just like message #2). -If we run the resulting script, the result is as follows:: +If we run the resulting script, the result is as follows: + +.. code-block:: shell-session $ python logctx.py 1. This should appear just once on stderr. @@ -2495,12 +2501,16 @@ If we run the resulting script, the result is as follows:: 6. This should appear just once on stderr. If we run it again, but pipe ``stderr`` to ``/dev/null``, we see the following, -which is the only message written to ``stdout``:: +which is the only message written to ``stdout``: + +.. code-block:: shell-session $ python logctx.py 2>/dev/null 5. This should appear twice - once on stderr and once on stdout. -Once again, but piping ``stdout`` to ``/dev/null``, we get:: +Once again, but piping ``stdout`` to ``/dev/null``, we get: + +.. code-block:: shell-session $ python logctx.py >/dev/null 1. This should appear just once on stderr. diff --git a/Doc/howto/logging.rst b/Doc/howto/logging.rst index 51e8430..8074b0f 100644 --- a/Doc/howto/logging.rst +++ b/Doc/howto/logging.rst @@ -106,7 +106,9 @@ A very simple example is:: logging.warning('Watch out!') # will print a message to the console logging.info('I told you so') # will not print anything -If you type these lines into a script and run it, you'll see:: +If you type these lines into a script and run it, you'll see: + +.. code-block:: none WARNING:root:Watch out! @@ -230,7 +232,9 @@ append the variable data as arguments. For example:: import logging logging.warning('%s before you %s', 'Look', 'leap!') -will display:: +will display: + +.. code-block:: none WARNING:root:Look before you leap! @@ -460,7 +464,7 @@ ancestor loggers. Because of this, it is unnecessary to define and configure handlers for all the loggers an application uses. It is sufficient to configure handlers for a top-level logger and create child loggers as needed. (You can, however, turn off propagation by setting the *propagate* -attribute of a logger to *False*.) +attribute of a logger to ``False``.) .. _handler-basic: @@ -594,7 +598,9 @@ logger, a console handler, and a simple formatter using Python code:: logger.error('error message') logger.critical('critical message') -Running this module from the command line produces the following output:: +Running this module from the command line produces the following output: + +.. code-block:: shell-session $ python simple_logging_module.py 2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message @@ -653,7 +659,9 @@ Here is the logging.conf file:: format=%(asctime)s - %(name)s - %(levelname)s - %(message)s datefmt= -The output is nearly identical to that of the non-config-file-based example:: +The output is nearly identical to that of the non-config-file-based example: + +.. code-block:: shell-session $ python simple_logging_config.py 2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message @@ -739,10 +747,10 @@ circumstances is dependent on the Python version. For versions of Python prior to 3.2, the behaviour is as follows: -* If *logging.raiseExceptions* is *False* (production mode), the event is +* If *logging.raiseExceptions* is ``False`` (production mode), the event is silently dropped. -* If *logging.raiseExceptions* is *True* (development mode), a message +* If *logging.raiseExceptions* is ``True`` (development mode), a message 'No handlers could be found for logger X.Y.Z' is printed once. In Python 3.2 and later, the behaviour is as follows: @@ -756,7 +764,7 @@ In Python 3.2 and later, the behaviour is as follows: The handler's level is set to ``WARNING``, so all events at this and greater severities will be output. -To obtain the pre-3.2 behaviour, ``logging.lastResort`` can be set to *None*. +To obtain the pre-3.2 behaviour, ``logging.lastResort`` can be set to ``None``. .. _library-config: @@ -1073,4 +1081,3 @@ take up any memory. Useful handlers included with the logging module. :ref:`A logging cookbook ` - diff --git a/Doc/howto/pyporting.rst b/Doc/howto/pyporting.rst index c479f22..8562d23 100644 --- a/Doc/howto/pyporting.rst +++ b/Doc/howto/pyporting.rst @@ -17,7 +17,8 @@ Porting Python 2 Code to Python 3 please see :ref:`cporting-howto`. If you would like to read one core Python developer's take on why Python 3 - came into existence, you can read Nick Coghlan's `Python 3 Q & A`_. + came into existence, you can read Nick Coghlan's `Python 3 Q & A`_ or + Brett Cannon's `Why Python 3 exists`_. For help with porting, you can email the python-porting_ mailing list with questions. @@ -32,8 +33,7 @@ are: #. Make sure you have good test coverage (coverage.py_ can help; ``pip install coverage``) #. Learn the differences between Python 2 & 3 -#. Use Modernize_ or Futurize_ to update your code (``pip install modernize`` or - ``pip install future``, respectively) +#. Use Futurize_ (or Modernize_) to update your code (e.g. ``pip install future``) #. Use Pylint_ to help make sure you don't regress on your Python 3 support (``pip install pylint``) #. Use caniusepython3_ to find out which of your dependencies are blocking your @@ -41,10 +41,9 @@ are: #. Once your dependencies are no longer blocking you, use continuous integration to make sure you stay compatible with Python 2 & 3 (tox_ can help test against multiple versions of Python; ``pip install tox``) - -If you are dropping support for Python 2 entirely, then after you learn the -differences between Python 2 & 3 you can run 2to3_ over your code and skip the -rest of the steps outlined above. +#. Consider using optional static type checking to make sure your type usage + works in both Python 2 & 3 (e.g. use mypy_ to check your typing under both + Python 2 & Python 3). Details @@ -54,7 +53,7 @@ A key point about supporting Python 2 & 3 simultaneously is that you can start **today**! Even if your dependencies are not supporting Python 3 yet that does not mean you can't modernize your code **now** to support Python 3. Most changes required to support Python 3 lead to cleaner code using newer practices even in -Python 2. +Python 2 code. Another key point is that modernizing your Python 2 code to also support Python 3 is largely automated for you. While you might have to make some API @@ -82,12 +81,13 @@ have to import a function instead of using a built-in one, but otherwise the overall transformation should not feel foreign to you. But you should aim for only supporting Python 2.7. Python 2.6 is no longer -supported and thus is not receiving bugfixes. This means **you** will have to -work around any issues you come across with Python 2.6. There are also some +freely supported and thus is not receiving bugfixes. This means **you** will have +to work around any issues you come across with Python 2.6. There are also some tools mentioned in this HOWTO which do not support Python 2.6 (e.g., Pylint_), and this will become more commonplace as time goes on. It will simply be easier for you if you only support the versions of Python that you have to support. + Make sure you specify the proper version support in your ``setup.py`` file -------------------------------------------------------------------------- @@ -98,6 +98,7 @@ Python 3 yet you should at least have also specify each major/minor version of Python that you do support, e.g. ``Programming Language :: Python :: 2.7``. + Have good test coverage ----------------------- @@ -106,9 +107,10 @@ to, you will want to make sure your test suite has good coverage. A good rule of thumb is that if you want to be confident enough in your test suite that any failures that appear after having tools rewrite your code are actual bugs in the tools and not in your code. If you want a number to aim for, try to get over 80% -coverage (and don't feel bad if you can't easily get past 90%). If you -don't already have a tool to measure test coverage then coverage.py_ is -recommended. +coverage (and don't feel bad if you find it hard to get better than 90% +coverage). If you don't already have a tool to measure test coverage then +coverage.py_ is recommended. + Learn the differences between Python 2 & 3 ------------------------------------------- @@ -127,13 +129,15 @@ Update your code Once you feel like you know what is different in Python 3 compared to Python 2, it's time to update your code! You have a choice between two tools in porting -your code automatically: Modernize_ and Futurize_. Which tool you choose will +your code automatically: Futurize_ and Modernize_. Which tool you choose will depend on how much like Python 3 you want your code to be. Futurize_ does its best to make Python 3 idioms and practices exist in Python 2, e.g. backporting the ``bytes`` type from Python 3 so that you have semantic parity between the major versions of Python. Modernize_, on the other hand, is more conservative and targets a Python 2/3 subset of -Python, relying on six_ to help provide compatibility. +Python, directly relying on six_ to help provide compatibility. As Python 3 is +the future, it might be best to consider Futurize to begin adjusting to any new +practices that Python 3 introduces which you are not accustomed to yet. Regardless of which tool you choose, they will update your code to run under Python 3 while staying compatible with the version of Python 2 you started with. @@ -153,6 +157,7 @@ the built-in ``open()`` function is off by default in Modernize). Luckily, though, there are only a couple of things to watch out for which can be considered large issues that may be hard to debug if not watched for. + Division ++++++++ @@ -173,6 +178,7 @@ an object defines a ``__truediv__`` method but not ``__floordiv__`` then your code would begin to fail (e.g. a user-defined class that uses ``/`` to signify some operation but not ``//`` for the same thing or at all). + Text versus binary data +++++++++++++++++++++++ @@ -189,7 +195,7 @@ To make the distinction between text and binary data clearer and more pronounced, Python 3 did what most languages created in the age of the internet have done and made text and binary data distinct types that cannot blindly be mixed together (Python predates widespread access to the internet). For any code -that only deals with text or only binary data, this separation doesn't pose an +that deals only with text or only binary data, this separation doesn't pose an issue. But for code that has to deal with both, it does mean you might have to now care about when you are using text compared to binary data, which is why this cannot be entirely automated. @@ -198,15 +204,15 @@ To start, you will need to decide which APIs take text and which take binary (it is **highly** recommended you don't design APIs that can take both due to the difficulty of keeping the code working; as stated earlier it is difficult to do well). In Python 2 this means making sure the APIs that take text can work -with ``unicode`` in Python 2 and those that work with binary data work with the -``bytes`` type from Python 3 and thus a subset of ``str`` in Python 2 (which the -``bytes`` type in Python 2 is an alias for). Usually the biggest issue is -realizing which methods exist for which types in Python 2 & 3 simultaneously +with ``unicode`` and those that work with binary data work with the +``bytes`` type from Python 3 (which is a subset of ``str`` in Python 2 and acts +as an alias for ``bytes`` type in Python 2). Usually the biggest issue is +realizing which methods exist on which types in Python 2 & 3 simultaneously (for text that's ``unicode`` in Python 2 and ``str`` in Python 3, for binary that's ``str``/``bytes`` in Python 2 and ``bytes`` in Python 3). The following table lists the **unique** methods of each data type across Python 2 & 3 (e.g., the ``decode()`` method is usable on the equivalent binary data type in -either Python 2 or 3, but it can't be used by the text data type consistently +either Python 2 or 3, but it can't be used by the textual data type consistently between Python 2 and 3 because ``str`` in Python 3 doesn't have the method). Do note that as of Python 3.5 the ``__mod__`` method was added to the bytes type. @@ -232,10 +238,11 @@ This allows your code to work with only text internally and thus eliminates having to keep track of what type of data you are working with. The next issue is making sure you know whether the string literals in your code -represent text or binary data. At minimum you should add a ``b`` prefix to any -literal that presents binary data. For text you should either use the -``from __future__ import unicode_literals`` statement or add a ``u`` prefix to -the text literal. +represent text or binary data. You should add a ``b`` prefix to any +literal that presents binary data. For text you should add a ``u`` prefix to +the text literal. (there is a :mod:`__future__` import to force all unspecified +literals to be Unicode, but usage has shown it isn't as effective as adding a +``b`` or ``u`` prefix to all literals explicitly) As part of this dichotomy you also need to be careful about opening files. Unless you have been working on Windows, there is a chance you have not always @@ -243,11 +250,13 @@ bothered to add the ``b`` mode when opening a binary file (e.g., ``rb`` for binary reading). Under Python 3, binary files and text files are clearly distinct and mutually incompatible; see the :mod:`io` module for details. Therefore, you **must** make a decision of whether a file will be used for -binary access (allowing binary data to be read and/or written) or text access +binary access (allowing binary data to be read and/or written) or textual access (allowing text data to be read and/or written). You should also use :func:`io.open` for opening files instead of the built-in :func:`open` function as the :mod:`io` module is consistent from Python 2 to 3 while the built-in :func:`open` function -is not (in Python 3 it's actually :func:`io.open`). +is not (in Python 3 it's actually :func:`io.open`). Do not bother with the +outdated practice of using :func:`codecs.open` as that's only necessary for +keeping compatibility with Python 2.5. The constructors of both ``str`` and ``bytes`` have different semantics for the same arguments between Python 2 & 3. Passing an integer to ``bytes`` in Python 2 @@ -274,21 +283,22 @@ To summarize: #. Make sure that your code that works with text also works with ``unicode`` and code for binary data works with ``bytes`` in Python 2 (see the table above for what methods you cannot use for each type) -#. Mark all binary literals with a ``b`` prefix, use a ``u`` prefix or - :mod:`__future__` import statement for text literals +#. Mark all binary literals with a ``b`` prefix, textual literals with a ``u`` + prefix #. Decode binary data to text as soon as possible, encode text as binary data as late as possible #. Open files using :func:`io.open` and make sure to specify the ``b`` mode when appropriate -#. Be careful when indexing binary data +#. Be careful when indexing into binary data Use feature detection instead of version detection ++++++++++++++++++++++++++++++++++++++++++++++++++ + Inevitably you will have code that has to choose what to do based on what version of Python is running. The best way to do this is with feature detection of whether the version of Python you're running under supports what you need. -If for some reason that doesn't work then you should make the version check is +If for some reason that doesn't work then you should make the version check be against Python 2 and not Python 3. To help explain this, let's look at an example. @@ -299,7 +309,7 @@ access e.g. the ``importlib.abc`` module by doing the following:: import sys - if sys.version[0] == 3: + if sys.version_info[0] == 3: from importlib import abc else: from importlib2 import abc @@ -311,7 +321,7 @@ Python 2:: import sys - if sys.version[0] > 2: + if sys.version_info[0] > 2: from importlib import abc else: from importlib2 import abc @@ -340,14 +350,12 @@ at least the following block of code at the top of it:: from __future__ import absolute_import from __future__ import division from __future__ import print_function - from __future__ import unicode_literals You can also run Python 2 with the ``-3`` flag to be warned about various compatibility issues your code triggers during execution. If you turn warnings into errors with ``-Werror`` then you can make sure that you don't accidentally miss a warning. - You can also use the Pylint_ project and its ``--py3k`` flag to lint your code to receive warnings when your code begins to deviate from Python 3 compatibility. This also prevents you from having to run Modernize_ or Futurize_ @@ -364,22 +372,23 @@ care about whether your dependencies have also been ported. The caniusepython3_ project was created to help you determine which projects -- directly or indirectly -- are blocking you from supporting Python 3. There is both a command-line tool as well as a web interface at -https://caniusepython3.com . +https://caniusepython3.com. The project also provides code which you can integrate into your test suite so that you will have a failing test when you no longer have dependencies blocking you from using Python 3. This allows you to avoid having to manually check your dependencies and to be notified quickly when you can start running on Python 3. + Update your ``setup.py`` file to denote Python 3 compatibility -------------------------------------------------------------- Once your code works under Python 3, you should update the classifiers in your ``setup.py`` to contain ``Programming Language :: Python :: 3`` and to not -specify sole Python 2 support. This will tell -anyone using your code that you support Python 2 **and** 3. Ideally you will -also want to add classifiers for each major/minor version of Python you now -support. +specify sole Python 2 support. This will tell anyone using your code that you +support Python 2 **and** 3. Ideally you will also want to add classifiers for +each major/minor version of Python you now support. + Use continuous integration to stay compatible --------------------------------------------- @@ -404,20 +413,17 @@ don't accidentally break Python 2 or 3 compatibility regardless of which version you typically run your tests under while developing. -Dropping Python 2 support completely -==================================== - -If you are able to fully drop support for Python 2, then the steps required -to transition to Python 3 simplify greatly. - -#. Update your code to only support Python 2.7 -#. Make sure you have good test coverage (coverage.py_ can help) -#. Learn the differences between Python 2 & 3 -#. Use 2to3_ to rewrite your code to run only under Python 3 +Consider using optional static type checking +-------------------------------------------- -After this your code will be fully Python 3 compliant but in a way that is not -supported by Python 2. You should also update the classifiers in your -``setup.py`` to contain ``Programming Language :: Python :: 3 :: Only``. +Another way to help port your code is to use a static type checker like +mypy_ or pytype_ on your code. These tools can be used to analyze your code as +if it's being run under Python 2, then you can run the tool a second time as if +your code is running under Python 3. By running a static type checker twice like +this you can discover if you're e.g. misusing binary data type in one version +of Python compared to another. If you add optional type hints to your code you +can also explicitly state whether your APIs use textual or binary data, helping +to make sure everything functions as expected in both versions of Python. .. _2to3: https://docs.python.org/3/library/2to3.html @@ -428,13 +434,19 @@ supported by Python 2. You should also update the classifiers in your .. _importlib: https://docs.python.org/3/library/importlib.html#module-importlib .. _importlib2: https://pypi.python.org/pypi/importlib2 .. _Modernize: https://python-modernize.readthedocs.org/en/latest/ +.. _mypy: http://mypy-lang.org/ .. _Porting to Python 3: http://python3porting.com/ .. _Pylint: https://pypi.python.org/pypi/pylint + .. _Python 3 Q & A: https://ncoghlan-devs-python-notes.readthedocs.org/en/latest/python3/questions_and_answers.html +.. _pytype: https://github.com/google/pytype .. _python-future: http://python-future.org/ .. _python-porting: https://mail.python.org/mailman/listinfo/python-porting .. _six: https://pypi.python.org/pypi/six .. _tox: https://pypi.python.org/pypi/tox .. _trove classifier: https://pypi.python.org/pypi?%3Aaction=list_classifiers + .. _"What's New": https://docs.python.org/3/whatsnew/index.html + +.. _Why Python 3 exists: http://www.snarky.ca/why-python-3-exists diff --git a/Doc/howto/regex.rst b/Doc/howto/regex.rst index de3f461..d9b7c90 100644 --- a/Doc/howto/regex.rst +++ b/Doc/howto/regex.rst @@ -74,7 +74,9 @@ of the RE by repeating them or changing their meaning. Much of this document is devoted to discussing various metacharacters and what they do. Here's a complete list of the metacharacters; their meanings will be discussed -in the rest of this HOWTO. :: +in the rest of this HOWTO. + +.. code-block:: none . ^ $ * + ? { } [ ] \ | ( ) @@ -374,9 +376,7 @@ module. If you have :mod:`tkinter` available, you may also want to look at :source:`Tools/demo/redemo.py`, a demonstration program included with the Python distribution. It allows you to enter REs and strings, and displays whether the RE matches or fails. :file:`redemo.py` can be quite useful when -trying to debug a complicated RE. Phil Schwartz's `Kodos -`_ is also an interactive tool for developing and -testing RE patterns. +trying to debug a complicated RE. This HOWTO uses the standard Python interpreter for its examples. First, run the Python interpreter, import the :mod:`re` module, and compile a RE:: diff --git a/Doc/howto/sockets.rst b/Doc/howto/sockets.rst index 04394d4..bc71d85 100644 --- a/Doc/howto/sockets.rst +++ b/Doc/howto/sockets.rst @@ -106,7 +106,7 @@ mainloop of the web server:: There's actually 3 general ways in which this loop could work - dispatching a thread to handle ``clientsocket``, create a new process to handle ``clientsocket``, or restructure this app to use non-blocking sockets, and -mulitplex between our "server" socket and any active ``clientsocket``\ s using +multiplex between our "server" socket and any active ``clientsocket``\ s using ``select``. More about that later. The important thing to understand now is this: this is *all* a "server" socket does. It doesn't send any data. It doesn't receive any data. It just produces "client" sockets. Each ``clientsocket`` is diff --git a/Doc/howto/sorting.rst b/Doc/howto/sorting.rst index 0334b26..1280446 100644 --- a/Doc/howto/sorting.rst +++ b/Doc/howto/sorting.rst @@ -24,7 +24,7 @@ returns a new sorted list:: [1, 2, 3, 4, 5] You can also use the :meth:`list.sort` method. It modifies the list -in-place (and returns *None* to avoid confusion). Usually it's less convenient +in-place (and returns ``None`` to avoid confusion). Usually it's less convenient than :func:`sorted` - but if you don't need the original list, it's slightly more efficient. @@ -58,28 +58,28 @@ A common pattern is to sort complex objects using some of the object's indices as keys. For example: >>> student_tuples = [ - ('john', 'A', 15), - ('jane', 'B', 12), - ('dave', 'B', 10), - ] + ... ('john', 'A', 15), + ... ('jane', 'B', 12), + ... ('dave', 'B', 10), + ... ] >>> sorted(student_tuples, key=lambda student: student[2]) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] The same technique works for objects with named attributes. For example: >>> class Student: - def __init__(self, name, grade, age): - self.name = name - self.grade = grade - self.age = age - def __repr__(self): - return repr((self.name, self.grade, self.age)) + ... def __init__(self, name, grade, age): + ... self.name = name + ... self.grade = grade + ... self.age = age + ... def __repr__(self): + ... return repr((self.name, self.grade, self.age)) >>> student_objects = [ - Student('john', 'A', 15), - Student('jane', 'B', 12), - Student('dave', 'B', 10), - ] + ... Student('john', 'A', 15), + ... Student('jane', 'B', 12), + ... Student('dave', 'B', 10), + ... ] >>> sorted(student_objects, key=lambda student: student.age) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] @@ -208,15 +208,15 @@ return a negative value for less-than, return zero if they are equal, or return a positive value for greater-than. For example, we can do: >>> def numeric_compare(x, y): - return x - y - >>> sorted([5, 2, 4, 1, 3], cmp=numeric_compare) + ... return x - y + >>> sorted([5, 2, 4, 1, 3], cmp=numeric_compare) # doctest: +SKIP [1, 2, 3, 4, 5] Or you can reverse the order of comparison with: >>> def reverse_numeric(x, y): - return y - x - >>> sorted([5, 2, 4, 1, 3], cmp=reverse_numeric) + ... return y - x + >>> sorted([5, 2, 4, 1, 3], cmp=reverse_numeric) # doctest: +SKIP [5, 4, 3, 2, 1] When porting code from Python 2.x to 3.x, the situation can arise when you have @@ -244,6 +244,12 @@ function. The following wrapper makes that easy to do:: To convert to a key function, just wrap the old comparison function: +.. testsetup:: + + from functools import cmp_to_key + +.. doctest:: + >>> sorted([5, 2, 4, 1, 3], key=cmp_to_key(reverse_numeric)) [5, 4, 3, 2, 1] diff --git a/Doc/howto/unicode.rst b/Doc/howto/unicode.rst index 50a09ba..a48ae1f 100644 --- a/Doc/howto/unicode.rst +++ b/Doc/howto/unicode.rst @@ -192,7 +192,7 @@ frequently used than UTF-8.) UTF-8 uses the following rules: UTF-8 has several convenient properties: 1. It can handle any Unicode code point. -2. A Unicode string is turned into a string of bytes containing no embedded zero +2. A Unicode string is turned into a sequence of bytes containing no embedded zero bytes. This avoids byte-ordering issues, and means UTF-8 strings can be processed by C functions such as ``strcpy()`` and sent through protocols that can't handle zero bytes. @@ -613,7 +613,9 @@ program:: print(os.listdir(b'.')) print(os.listdir('.')) -will produce the following output:: +will produce the following output: + +.. code-block:: shell-session amk:~$ python t.py [b'filename\xe4\x94\x80abc', ...] diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst index 24a4156..18b5c65 100644 --- a/Doc/howto/urllib2.rst +++ b/Doc/howto/urllib2.rst @@ -240,8 +240,8 @@ Error Codes ~~~~~~~~~~~ Because the default handlers handle redirects (codes in the 300 range), and -codes in the 100-299 range indicate success, you will usually only see error -codes in the 400-599 range. +codes in the 100--299 range indicate success, you will usually only see error +codes in the 400--599 range. :attr:`http.server.BaseHTTPRequestHandler.responses` is a useful dictionary of response codes in that shows all the response codes used by RFC 2616. The @@ -538,6 +538,11 @@ setting up a `Basic Authentication`_ handler: :: through a proxy. However, this can be enabled by extending urllib.request as shown in the recipe [#]_. +.. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; see + the documentation on :func:`~urllib.request.getproxies`. + Sockets and Layers ================== @@ -573,7 +578,7 @@ Footnotes This document was reviewed and revised by John Lee. .. [#] Google for example. -.. [#] Browser sniffing is a very bad practise for website design - building +.. [#] Browser sniffing is a very bad practice for website design - building sites using web standards is much more sensible. Unfortunately a lot of sites still send different versions to different browsers. .. [#] The user agent for MSIE 6 is diff --git a/Doc/includes/email-alternative-new-api.py b/Doc/includes/email-alternative-new-api.py index c1255a6..321f727 100644 --- a/Doc/includes/email-alternative-new-api.py +++ b/Doc/includes/email-alternative-new-api.py @@ -9,9 +9,9 @@ from email.utils import make_msgid # Create the base text message. msg = EmailMessage() msg['Subject'] = "Ayons asperges pour le déjeuner" -msg['From'] = Address("Pepé Le Pew", "pepe@example.com") -msg['To'] = (Address("Penelope Pussycat", "penelope@example.com"), - Address("Fabrette Pussycat", "fabrette@example.com")) +msg['From'] = Address("Pepé Le Pew", "pepe", "example.com") +msg['To'] = (Address("Penelope Pussycat", "penelope", "example.com"), + Address("Fabrette Pussycat", "fabrette", "example.com")) msg.set_content("""\ Salut! diff --git a/Doc/install/index.rst b/Doc/install/index.rst index b22fc59..bc080b0 100644 --- a/Doc/install/index.rst +++ b/Doc/install/index.rst @@ -201,7 +201,7 @@ As implied above, the :command:`build` command is responsible for putting the files to install into a *build directory*. By default, this is :file:`build` under the distribution root; if you're excessively concerned with speed, or want to keep the source tree pristine, you can change the build directory with the -:option:`--build-base` option. For example:: +:option:`!--build-base` option. For example:: python setup.py build --build-base=/path/to/pybuild/foo-1.0 @@ -399,7 +399,7 @@ Installing a new module distribution is as simple as :: python setup.py install --home= -where you can supply any directory you like for the :option:`--home` option. On +where you can supply any directory you like for the :option:`!--home` option. On Unix, lazy typists can just type a tilde (``~``); the :command:`install` command will expand this to your home directory:: @@ -410,7 +410,7 @@ to :ref:`modify Python's search path ` or edit :mod:`sitecustomize` (see :mod:`site`) to call :func:`site.addsitedir` or edit :data:`sys.path`. -The :option:`--home` option defines the installation base directory. Files are +The :option:`!--home` option defines the installation base directory. Files are installed to the following directories under the installation base as follows: =============== =========================================================== @@ -455,12 +455,12 @@ be done with :: /usr/local/bin/python setup.py install --prefix=/mnt/@server/export -In either case, the :option:`--prefix` option defines the installation base, and -the :option:`--exec-prefix` option defines the platform-specific installation +In either case, the :option:`!--prefix` option defines the installation base, and +the :option:`!--exec-prefix` option defines the platform-specific installation base, which is used for platform-specific files. (Currently, this just means non-pure module distributions, but could be expanded to C libraries, binary -executables, etc.) If :option:`--exec-prefix` is not supplied, it defaults to -:option:`--prefix`. Files are installed as follows: +executables, etc.) If :option:`!--exec-prefix` is not supplied, it defaults to +:option:`!--prefix`. Files are installed as follows: ================= ========================================================== Type of file Installation directory @@ -472,13 +472,13 @@ data :file:`{prefix}` C headers :file:`{prefix}/include/python{X.Y}{abiflags}/{distname}` ================= ========================================================== -There is no requirement that :option:`--prefix` or :option:`--exec-prefix` +There is no requirement that :option:`!--prefix` or :option:`!--exec-prefix` actually point to an alternate Python installation; if the directories listed above do not already exist, they are created at installation time. Incidentally, the real reason the prefix scheme is important is simply that a -standard Unix installation uses the prefix scheme, but with :option:`--prefix` -and :option:`--exec-prefix` supplied by Python itself as ``sys.prefix`` and +standard Unix installation uses the prefix scheme, but with :option:`!--prefix` +and :option:`!--exec-prefix` supplied by Python itself as ``sys.prefix`` and ``sys.exec_prefix``. Thus, you might think you'll never use the prefix scheme, but every time you run ``python setup.py install`` without any other options, you're using it. @@ -491,7 +491,7 @@ responsibility to ensure that the interpreter used to run extensions installed in this way is compatible with the interpreter used to build them. The best way to do this is to ensure that the two interpreters are the same version of Python (possibly different builds, or possibly copies of the same build). (Of course, -if your :option:`--prefix` and :option:`--exec-prefix` don't even point to an +if your :option:`!--prefix` and :option:`!--exec-prefix` don't even point to an alternate Python installation, this is immaterial.) @@ -501,7 +501,7 @@ Alternate installation: Windows (the prefix scheme) --------------------------------------------------- Windows has no concept of a user's home directory, and since the standard Python -installation under Windows is simpler than under Unix, the :option:`--prefix` +installation under Windows is simpler than under Unix, the :option:`!--prefix` option has traditionally been used to install additional packages in separate locations on Windows. :: @@ -509,8 +509,8 @@ locations on Windows. :: to install modules to the :file:`\\Temp\\Python` directory on the current drive. -The installation base is defined by the :option:`--prefix` option; the -:option:`--exec-prefix` option is not supported under Windows, which means that +The installation base is defined by the :option:`!--prefix` option; the +:option:`!--exec-prefix` option is not supported under Windows, which means that pure Python modules and extension modules are installed into the same location. Files are installed as follows: @@ -562,7 +562,7 @@ difference between Python and extension modules.) For example, say you're installing a module distribution to your home directory under Unix---but you want scripts to go in :file:`~/scripts` rather than :file:`~/bin`. As you might expect, you can override this directory with the -:option:`--install-scripts` option; in this case, it makes most sense to supply +:option:`!--install-scripts` option; in this case, it makes most sense to supply a relative path, which will be interpreted relative to the installation base directory (your home directory, in this case):: @@ -572,7 +572,7 @@ Another Unix example: suppose your Python installation was built and installed with a prefix of :file:`/usr/local/python`, so under a standard installation scripts will wind up in :file:`/usr/local/python/bin`. If you want them in :file:`/usr/local/bin` instead, you would supply this absolute directory for the -:option:`--install-scripts` option:: +:option:`!--install-scripts` option:: python setup.py install --install-scripts=/usr/local/bin @@ -932,10 +932,10 @@ Let's examine each of the fields in turn. to be in Objective C. * *cpparg* is an argument for the C preprocessor, and is anything starting with - :option:`!-I`, :option:`-D`, :option:`!-U` or :option:`-C`. + :option:`!-I`, :option:`!-D`, :option:`!-U` or :option:`!-C`. -* *library* is anything ending in :file:`.a` or beginning with :option:`-l` or - :option:`-L`. +* *library* is anything ending in :file:`.a` or beginning with :option:`!-l` or + :option:`!-L`. If a particular platform requires a special library on your platform, you can add it by editing the :file:`Setup` file and running ``python setup.py build``. @@ -944,20 +944,20 @@ For example, if the module defined by the line :: foo foomodule.c must be linked with the math library :file:`libm.a` on your platform, simply add -:option:`-lm` to the line:: +:option:`!-lm` to the line:: foo foomodule.c -lm Arbitrary switches intended for the compiler or the linker can be supplied with -the :option:`-Xcompiler` *arg* and :option:`-Xlinker` *arg* options:: +the :option:`!-Xcompiler` *arg* and :option:`!-Xlinker` *arg* options:: foo foomodule.c -Xcompiler -o32 -Xlinker -shared -lm -The next option after :option:`-Xcompiler` and :option:`-Xlinker` will be +The next option after :option:`!-Xcompiler` and :option:`!-Xlinker` will be appended to the proper command line, so in the above example the compiler will -be passed the :option:`-o32` option, and the linker will be passed -:option:`-shared`. If a compiler option requires an argument, you'll have to -supply multiple :option:`-Xcompiler` options; for example, to pass ``-x c++`` +be passed the :option:`!-o32` option, and the linker will be passed +:option:`!-shared`. If a compiler option requires an argument, you'll have to +supply multiple :option:`!-Xcompiler` options; for example, to pass ``-x c++`` the :file:`Setup` file would have to contain ``-Xcompiler -x -Xcompiler c++``. Compiler flags can also be supplied through setting the :envvar:`CFLAGS` diff --git a/Doc/library/2to3.rst b/Doc/library/2to3.rst index 6fc2865..ace1bfa 100644 --- a/Doc/library/2to3.rst +++ b/Doc/library/2to3.rst @@ -33,14 +33,18 @@ Here is a sample Python 2.x source file, :file:`example.py`:: name = raw_input() greet(name) -It can be converted to Python 3.x code via 2to3 on the command line:: +It can be converted to Python 3.x code via 2to3 on the command line: + +.. code-block:: shell-session $ 2to3 example.py A diff against the original source file is printed. 2to3 can also write the needed modifications right back to the source file. (A backup of the original -file is made unless :option:`-n` is also given.) Writing the changes back is -enabled with the :option:`-w` flag:: +file is made unless :option:`!-n` is also given.) Writing the changes back is +enabled with the :option:`!-w` flag: + +.. code-block:: shell-session $ 2to3 -w example.py @@ -55,19 +59,25 @@ After transformation, :file:`example.py` looks like this:: Comments and exact indentation are preserved throughout the translation process. By default, 2to3 runs a set of :ref:`predefined fixers <2to3-fixers>`. The -:option:`-l` flag lists all available fixers. An explicit set of fixers to run -can be given with :option:`-f`. Likewise the :option:`!-x` explicitly disables a -fixer. The following example runs only the ``imports`` and ``has_key`` fixers:: +:option:`!-l` flag lists all available fixers. An explicit set of fixers to run +can be given with :option:`!-f`. Likewise the :option:`!-x` explicitly disables a +fixer. The following example runs only the ``imports`` and ``has_key`` fixers: + +.. code-block:: shell-session $ 2to3 -f imports -f has_key example.py -This command runs every fixer except the ``apply`` fixer:: +This command runs every fixer except the ``apply`` fixer: + +.. code-block:: shell-session $ 2to3 -x apply example.py Some fixers are *explicit*, meaning they aren't run by default and must be listed on the command line to be run. Here, in addition to the default fixers, -the ``idioms`` fixer is run:: +the ``idioms`` fixer is run: + +.. code-block:: shell-session $ 2to3 -f all -f idioms example.py @@ -90,39 +100,43 @@ Since some print statements can be parsed as function calls or statements, 2to3 cannot always read files containing the print function. When 2to3 detects the presence of the ``from __future__ import print_function`` compiler directive, it modifies its internal grammar to interpret :func:`print` as a function. This -change can also be enabled manually with the :option:`-p` flag. Use -:option:`-p` to run fixers on code that already has had its print statements +change can also be enabled manually with the :option:`!-p` flag. Use +:option:`!-p` to run fixers on code that already has had its print statements converted. -The :option:`-o` or :option:`--output-dir` option allows specification of an +The :option:`!-o` or :option:`!--output-dir` option allows specification of an alternate directory for processed output files to be written to. The -:option:`-n` flag is required when using this as backup files do not make sense +:option:`!-n` flag is required when using this as backup files do not make sense when not overwriting the input files. .. versionadded:: 3.2.3 - The :option:`-o` option was added. + The :option:`!-o` option was added. -The :option:`!-W` or :option:`--write-unchanged-files` flag tells 2to3 to always +The :option:`!-W` or :option:`!--write-unchanged-files` flag tells 2to3 to always write output files even if no changes were required to the file. This is most -useful with :option:`-o` so that an entire Python source tree is copied with +useful with :option:`!-o` so that an entire Python source tree is copied with translation from one directory to another. -This option implies the :option:`-w` flag as it would not make sense otherwise. +This option implies the :option:`!-w` flag as it would not make sense otherwise. .. versionadded:: 3.2.3 The :option:`!-W` flag was added. -The :option:`--add-suffix` option specifies a string to append to all output -filenames. The :option:`-n` flag is required when specifying this as backups -are not necessary when writing to different filenames. Example:: +The :option:`!--add-suffix` option specifies a string to append to all output +filenames. The :option:`!-n` flag is required when specifying this as backups +are not necessary when writing to different filenames. Example: + +.. code-block:: shell-session $ 2to3 -n -W --add-suffix=3 example.py Will cause a converted file named ``example.py3`` to be written. .. versionadded:: 3.2.3 - The :option:`--add-suffix` option was added. + The :option:`!--add-suffix` option was added. + +To translate an entire project from one directory tree to another use: -To translate an entire project from one directory tree to another use:: +.. code-block:: shell-session $ 2to3 --output-dir=python3-version/mycode -W -n python2-version/mycode diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst index 10789e9..c6b2bf6 100644 --- a/Doc/library/argparse.rst +++ b/Doc/library/argparse.rst @@ -45,7 +45,9 @@ produces either the sum or the max:: print(args.accumulate(args.integers)) Assuming the Python code above is saved into a file called ``prog.py``, it can -be run at the command line and provides useful help messages:: +be run at the command line and provides useful help messages: + +.. code-block:: shell-session $ python prog.py -h usage: prog.py [-h] [--sum] N [N ...] @@ -60,7 +62,9 @@ be run at the command line and provides useful help messages:: --sum sum the integers (default: find the max) When run with the appropriate arguments, it prints either the sum or the max of -the command-line integers:: +the command-line integers: + +.. code-block:: shell-session $ python prog.py 1 2 3 4 4 @@ -68,7 +72,9 @@ the command-line integers:: $ python prog.py 1 2 3 4 --sum 10 -If invalid arguments are passed in, it will issue an error:: +If invalid arguments are passed in, it will issue an error: + +.. code-block:: shell-session $ python prog.py a b c usage: prog.py [-h] [--sum] N [N ...] @@ -182,7 +188,7 @@ The following sections describe how each of these are used. prog ^^^^ -By default, :class:`ArgumentParser` objects uses ``sys.argv[0]`` to determine +By default, :class:`ArgumentParser` objects use ``sys.argv[0]`` to determine how to display the name of the program in help messages. This default is almost always desirable because it will make the help messages match how the program was invoked on the command line. For example, consider a file named @@ -194,7 +200,9 @@ invoked on the command line. For example, consider a file named args = parser.parse_args() The help for this program will display ``myprogram.py`` as the program name -(regardless of where the program was invoked from):: +(regardless of where the program was invoked from): + +.. code-block:: shell-session $ python myprogram.py --help usage: myprogram.py [-h] [--foo FOO] @@ -550,7 +558,7 @@ conflict_handler ^^^^^^^^^^^^^^^^ :class:`ArgumentParser` objects do not allow two actions with the same option -string. By default, :class:`ArgumentParser` objects raises an exception if an +string. By default, :class:`ArgumentParser` objects raise an exception if an attempt is made to create an argument with an option string that is already in use:: @@ -596,7 +604,9 @@ the parser's help message. For example, consider a file named args = parser.parse_args() If ``-h`` or ``--help`` is supplied at the command line, the ArgumentParser -help will be printed:: +help will be printed: + +.. code-block:: shell-session $ python myprogram.py --help usage: myprogram.py [-h] [--foo FOO] @@ -1542,7 +1552,7 @@ Sub-commands positional arguments * description - description for the sub-parser group in help output, by - default None + default ``None`` * prog - usage information that will be displayed with sub-command help, by default the name of the program and any positional arguments before the @@ -1555,12 +1565,12 @@ Sub-commands encountered at the command line * dest_ - name of the attribute under which sub-command name will be - stored; by default None and no value is stored + stored; by default ``None`` and no value is stored - * help_ - help for sub-parser group in help output, by default None + * help_ - help for sub-parser group in help output, by default ``None`` * metavar_ - string presenting available sub-commands in help; by default it - is None and presents sub-commands in form {cmd1, cmd2, ..} + is ``None`` and presents sub-commands in form {cmd1, cmd2, ..} Some example usage:: @@ -1948,10 +1958,11 @@ Customizing file parsing The method is called once per line read from the argument file, in order. A useful override of this method is one that treats each space-separated word - as an argument:: + as an argument. The following example demonstrates how to do this:: - def convert_arg_line_to_args(self, arg_line): - return arg_line.split() + class MyArgumentParser(argparse.ArgumentParser): + def convert_arg_line_to_args(self, arg_line): + return arg_line.split() Exiting methods diff --git a/Doc/library/array.rst b/Doc/library/array.rst index 24f3f62..4ac7bb5 100644 --- a/Doc/library/array.rst +++ b/Doc/library/array.rst @@ -254,7 +254,7 @@ When an array object is printed or converted to a string, it is represented as empty, otherwise it is a string if the *typecode* is ``'u'``, otherwise it is a list of numbers. The string is guaranteed to be able to be converted back to an array with the same type and value using :func:`eval`, so long as the -:func:`array` function has been imported using ``from array import array``. +:class:`~array.array` class has been imported using ``from array import array``. Examples:: array('l') diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst index 8c3b7e4..8d4ae2c 100644 --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -99,6 +99,7 @@ Abstract Grammar The abstract grammar is currently defined as follows: .. literalinclude:: ../../Parser/Python.asdl + :language: none :mod:`ast` Helpers diff --git a/Doc/library/asyncio-dev.rst b/Doc/library/asyncio-dev.rst index 156c5c0..cc4a14b 100644 --- a/Doc/library/asyncio-dev.rst +++ b/Doc/library/asyncio-dev.rst @@ -21,7 +21,7 @@ enable *debug mode*. To enable all debug checks for an application: * Enable the asyncio debug mode globally by setting the environment variable - :envvar:`PYTHONASYNCIODEBUG` to ``1``, or by calling :meth:`BaseEventLoop.set_debug`. + :envvar:`PYTHONASYNCIODEBUG` to ``1``, or by calling :meth:`AbstractEventLoop.set_debug`. * Set the log level of the :ref:`asyncio logger ` to :py:data:`logging.DEBUG`. For example, call ``logging.basicConfig(level=logging.DEBUG)`` at startup. @@ -33,18 +33,18 @@ Examples debug checks: * Log :ref:`coroutines defined but never "yielded from" ` -* :meth:`~BaseEventLoop.call_soon` and :meth:`~BaseEventLoop.call_at` methods +* :meth:`~AbstractEventLoop.call_soon` and :meth:`~AbstractEventLoop.call_at` methods raise an exception if they are called from the wrong thread. * Log the execution time of the selector * Log callbacks taking more than 100 ms to be executed. The - :attr:`BaseEventLoop.slow_callback_duration` attribute is the minimum + :attr:`AbstractEventLoop.slow_callback_duration` attribute is the minimum duration in seconds of "slow" callbacks. * :exc:`ResourceWarning` warnings are emitted when transports and event loops are :ref:`not closed explicitly `. .. seealso:: - The :meth:`BaseEventLoop.set_debug` method and the :ref:`asyncio logger + The :meth:`AbstractEventLoop.set_debug` method and the :ref:`asyncio logger `. @@ -68,7 +68,7 @@ For example, write:: Don't schedule directly a call to the :meth:`~Future.set_result` or the :meth:`~Future.set_exception` method of a future with -:meth:`BaseEventLoop.call_soon`: the future can be cancelled before its method +:meth:`AbstractEventLoop.call_soon`: the future can be cancelled before its method is called. If you wait for a future, you should check early if the future was cancelled to @@ -96,7 +96,7 @@ the same thread. But when the task uses ``yield from``, the task is suspended and the event loop executes the next task. To schedule a callback from a different thread, the -:meth:`BaseEventLoop.call_soon_threadsafe` method should be used. Example:: +:meth:`AbstractEventLoop.call_soon_threadsafe` method should be used. Example:: loop.call_soon_threadsafe(callback, *args) @@ -116,7 +116,7 @@ To schedule a coroutine object from a different thread, the future = asyncio.run_coroutine_threadsafe(coro_func(), loop) result = future.result(timeout) # Wait for the result with a timeout -The :meth:`BaseEventLoop.run_in_executor` method can be used with a thread pool +The :meth:`AbstractEventLoop.run_in_executor` method can be used with a thread pool executor to execute a callback in different thread to not block the thread of the event loop. @@ -145,7 +145,7 @@ APIs like :ref:`protocols `. An executor can be used to run a task in a different thread or even in a different process, to not block the thread of the event loop. See the -:meth:`BaseEventLoop.run_in_executor` method. +:meth:`AbstractEventLoop.run_in_executor` method. .. seealso:: @@ -161,6 +161,14 @@ Logging The :mod:`asyncio` module logs information with the :mod:`logging` module in the logger ``'asyncio'``. +The default log level for the :mod:`asyncio` module is :py:data:`logging.INFO`. +For those not wanting such verbosity from :mod:`asyncio` the log level can +be changed. For example, to change the level to :py:data:`logging.WARNING`: + +.. code-block:: none + + logging.getLogger('asyncio').setLevel(logging.WARNING) + .. _asyncio-coroutine-not-scheduled: @@ -168,7 +176,7 @@ Detect coroutine objects never scheduled ---------------------------------------- When a coroutine function is called and its result is not passed to -:func:`ensure_future` or to the :meth:`BaseEventLoop.create_task` method, +:func:`ensure_future` or to the :meth:`AbstractEventLoop.create_task` method, the execution of the coroutine object will never be scheduled which is probably a bug. :ref:`Enable the debug mode of asyncio ` to :ref:`log a warning ` to detect it. @@ -191,7 +199,7 @@ Output in debug mode:: test() The fix is to call the :func:`ensure_future` function or the -:meth:`BaseEventLoop.create_task` method with the coroutine object. +:meth:`AbstractEventLoop.create_task` method with the coroutine object. .. seealso:: @@ -267,7 +275,7 @@ coroutine in another coroutine and use classic try/except:: loop.run_forever() loop.close() -Another option is to use the :meth:`BaseEventLoop.run_until_complete` +Another option is to use the :meth:`AbstractEventLoop.run_until_complete` function:: task = asyncio.ensure_future(bug()) @@ -321,14 +329,18 @@ operations:: print("Pending tasks at exit: %s" % asyncio.Task.all_tasks(loop)) loop.close() -Expected output:: +Expected output: + +.. code-block:: none (1) create file (2) write into file (3) close file Pending tasks at exit: set() -Actual output:: +Actual output: + +.. code-block:: none (3) close file (2) write into file @@ -369,13 +381,17 @@ Pending task destroyed If a pending task is destroyed, the execution of its wrapped :ref:`coroutine ` did not complete. It is probably a bug and so a warning is logged. -Example of log:: +Example of log: + +.. code-block:: none Task was destroyed but it is pending! task: wait_for=> :ref:`Enable the debug mode of asyncio ` to get the -traceback where the task was created. Example of log in debug mode:: +traceback where the task was created. Example of log in debug mode: + +.. code-block:: none Task was destroyed but it is pending! source_traceback: Object created at (most recent call last): diff --git a/Doc/library/asyncio-eventloop.rst b/Doc/library/asyncio-eventloop.rst index 7ec3aa1..d720160 100644 --- a/Doc/library/asyncio-eventloop.rst +++ b/Doc/library/asyncio-eventloop.rst @@ -20,14 +20,23 @@ It provides multiple facilities, including: .. class:: BaseEventLoop - Base class of event loops. + This class is an implementation detail. It is a subclass of + :class:`AbstractEventLoop` and may be a base class of concrete + event loop implementations found in :mod:`asyncio`. It should not + be used directly; use :class:`AbstractEventLoop` instead. + ``BaseEventLoop`` should not be subclassed by third-party code; the + internal interface is not stable. + +.. class:: AbstractEventLoop + + Abstract base class of event loops. This class is :ref:`not thread safe `. Run an event loop ----------------- -.. method:: BaseEventLoop.run_forever() +.. method:: AbstractEventLoop.run_forever() Run until :meth:`stop` is called. If :meth:`stop` is called before :meth:`run_forever()` is called, this polls the I/O selector once @@ -40,7 +49,7 @@ Run an event loop .. versionchanged:: 3.5.1 -.. method:: BaseEventLoop.run_until_complete(future) +.. method:: AbstractEventLoop.run_until_complete(future) Run until the :class:`Future` is done. @@ -49,11 +58,11 @@ Run an event loop Return the Future's result, or raise its exception. -.. method:: BaseEventLoop.is_running() +.. method:: AbstractEventLoop.is_running() Returns running status of event loop. -.. method:: BaseEventLoop.stop() +.. method:: AbstractEventLoop.stop() Stop running the event loop. @@ -62,13 +71,13 @@ Run an event loop .. versionchanged:: 3.5.1 -.. method:: BaseEventLoop.is_closed() +.. method:: AbstractEventLoop.is_closed() Returns ``True`` if the event loop was closed. .. versionadded:: 3.4.2 -.. method:: BaseEventLoop.close() +.. method:: AbstractEventLoop.close() Close the event loop. The loop must not be running. Pending callbacks will be lost. @@ -95,7 +104,7 @@ keywords to your callback, use :func:`functools.partial`. For example, parameters in debug mode, whereas ``lambda`` functions have a poor representation. -.. method:: BaseEventLoop.call_soon(callback, \*args) +.. method:: AbstractEventLoop.call_soon(callback, \*args) Arrange for a callback to be called as soon as possible. The callback is called after :meth:`call_soon` returns, when control returns to the event @@ -113,7 +122,7 @@ keywords to your callback, use :func:`functools.partial`. For example, :ref:`Use functools.partial to pass keywords to the callback `. -.. method:: BaseEventLoop.call_soon_threadsafe(callback, \*args) +.. method:: AbstractEventLoop.call_soon_threadsafe(callback, \*args) Like :meth:`call_soon`, but thread safe. @@ -136,7 +145,7 @@ a different clock than :func:`time.time`. Timeouts (relative *delay* or absolute *when*) should not exceed one day. -.. method:: BaseEventLoop.call_later(delay, callback, *args) +.. method:: AbstractEventLoop.call_later(delay, callback, *args) Arrange for the *callback* to be called after the given *delay* seconds (either an int or float). @@ -155,11 +164,11 @@ a different clock than :func:`time.time`. :ref:`Use functools.partial to pass keywords to the callback `. -.. method:: BaseEventLoop.call_at(when, callback, *args) +.. method:: AbstractEventLoop.call_at(when, callback, *args) Arrange for the *callback* to be called at the given absolute timestamp *when* (an int or float), using the same time reference as - :meth:`BaseEventLoop.time`. + :meth:`AbstractEventLoop.time`. This method's behavior is the same as :meth:`call_later`. @@ -169,7 +178,7 @@ a different clock than :func:`time.time`. :ref:`Use functools.partial to pass keywords to the callback `. -.. method:: BaseEventLoop.time() +.. method:: AbstractEventLoop.time() Return the current time, as a :class:`float` value, according to the event loop's internal clock. @@ -182,7 +191,7 @@ a different clock than :func:`time.time`. Futures ------- -.. method:: BaseEventLoop.create_future() +.. method:: AbstractEventLoop.create_future() Create an :class:`asyncio.Future` object attached to the loop. @@ -196,7 +205,7 @@ Futures Tasks ----- -.. method:: BaseEventLoop.create_task(coro) +.. method:: AbstractEventLoop.create_task(coro) Schedule the execution of a :ref:`coroutine object `: wrap it in a future. Return a :class:`Task` object. @@ -210,10 +219,10 @@ Tasks .. versionadded:: 3.4.2 -.. method:: BaseEventLoop.set_task_factory(factory) +.. method:: AbstractEventLoop.set_task_factory(factory) Set a task factory that will be used by - :meth:`BaseEventLoop.create_task`. + :meth:`AbstractEventLoop.create_task`. If *factory* is ``None`` the default task factory will be set. @@ -224,7 +233,7 @@ Tasks .. versionadded:: 3.4.4 -.. method:: BaseEventLoop.get_task_factory() +.. method:: AbstractEventLoop.get_task_factory() Return a task factory, or ``None`` if the default one is in use. @@ -234,7 +243,7 @@ Tasks Creating connections -------------------- -.. coroutinemethod:: BaseEventLoop.create_connection(protocol_factory, host=None, port=None, \*, ssl=None, family=0, proto=0, flags=0, sock=None, local_addr=None, server_hostname=None) +.. coroutinemethod:: AbstractEventLoop.create_connection(protocol_factory, host=None, port=None, \*, ssl=None, family=0, proto=0, flags=0, sock=None, local_addr=None, server_hostname=None) Create a streaming transport connection to a given Internet *host* and *port*: socket family :py:data:`~socket.AF_INET` or @@ -309,7 +318,7 @@ Creating connections (:class:`StreamReader`, :class:`StreamWriter`) instead of a protocol. -.. coroutinemethod:: BaseEventLoop.create_datagram_endpoint(protocol_factory, local_addr=None, remote_addr=None, \*, family=0, proto=0, flags=0, reuse_address=None, reuse_port=None, allow_broadcast=None, sock=None) +.. coroutinemethod:: AbstractEventLoop.create_datagram_endpoint(protocol_factory, local_addr=None, remote_addr=None, \*, family=0, proto=0, flags=0, reuse_address=None, reuse_port=None, allow_broadcast=None, sock=None) Create datagram connection: socket family :py:data:`~socket.AF_INET` or :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified), @@ -337,7 +346,7 @@ Creating connections * *reuse_address* tells the kernel to reuse a local socket in TIME_WAIT state, without waiting for its natural timeout to - expire. If not specified will automatically be set to True on + expire. If not specified will automatically be set to ``True`` on UNIX. * *reuse_port* tells the kernel to allow this endpoint to be bound to the @@ -360,7 +369,7 @@ Creating connections :ref:`UDP echo server protocol ` examples. -.. coroutinemethod:: BaseEventLoop.create_unix_connection(protocol_factory, path, \*, ssl=None, sock=None, server_hostname=None) +.. coroutinemethod:: AbstractEventLoop.create_unix_connection(protocol_factory, path, \*, ssl=None, sock=None, server_hostname=None) Create UNIX connection: socket family :py:data:`~socket.AF_UNIX`, socket type :py:data:`~socket.SOCK_STREAM`. The :py:data:`~socket.AF_UNIX` socket @@ -371,7 +380,11 @@ Creating connections establish the connection in the background. When successful, the coroutine returns a ``(transport, protocol)`` pair. - See the :meth:`BaseEventLoop.create_connection` method for parameters. + *path* is the name of a UNIX domain socket, and is required unless a *sock* + parameter is specified. Abstract UNIX sockets, :class:`str`, and + :class:`bytes` paths are supported. + + See the :meth:`AbstractEventLoop.create_connection` method for parameters. Availability: UNIX. @@ -379,7 +392,7 @@ Creating connections Creating listening connections ------------------------------ -.. coroutinemethod:: BaseEventLoop.create_server(protocol_factory, host=None, port=None, \*, family=socket.AF_UNSPEC, flags=socket.AI_PASSIVE, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None) +.. coroutinemethod:: AbstractEventLoop.create_server(protocol_factory, host=None, port=None, \*, family=socket.AF_UNSPEC, flags=socket.AI_PASSIVE, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None) Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) bound to *host* and *port*. @@ -415,7 +428,7 @@ Creating listening connections * *reuse_address* tells the kernel to reuse a local socket in TIME_WAIT state, without waiting for its natural timeout to - expire. If not specified will automatically be set to True on + expire. If not specified will automatically be set to ``True`` on UNIX. * *reuse_port* tells the kernel to allow this endpoint to be bound to the @@ -439,15 +452,32 @@ Creating listening connections The *host* parameter can now be a sequence of strings. -.. coroutinemethod:: BaseEventLoop.create_unix_server(protocol_factory, path=None, \*, sock=None, backlog=100, ssl=None) +.. coroutinemethod:: AbstractEventLoop.create_unix_server(protocol_factory, path=None, \*, sock=None, backlog=100, ssl=None) - Similar to :meth:`BaseEventLoop.create_server`, but specific to the + Similar to :meth:`AbstractEventLoop.create_server`, but specific to the socket family :py:data:`~socket.AF_UNIX`. This method is a :ref:`coroutine `. Availability: UNIX. +.. coroutinemethod:: BaseEventLoop.connect_accepted_socket(protocol_factory, sock, \*, ssl=None) + + Handle an accepted connection. + + This is used by servers that accept connections outside of + asyncio but that use asyncio to handle them. + + Parameters: + + * *sock* is a preexisting socket object returned from an ``accept`` + call. + + * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the + accepted connections. + + This method is a :ref:`coroutine `. When completed, the + coroutine returns a ``(transport, protocol)`` pair. Watch file descriptors ---------------------- @@ -457,7 +487,7 @@ On Windows with :class:`SelectorEventLoop`, only socket handles are supported On Windows with :class:`ProactorEventLoop`, these methods are not supported. -.. method:: BaseEventLoop.add_reader(fd, callback, \*args) +.. method:: AbstractEventLoop.add_reader(fd, callback, \*args) Start watching the file descriptor for read availability and then call the *callback* with specified arguments. @@ -465,11 +495,11 @@ On Windows with :class:`ProactorEventLoop`, these methods are not supported. :ref:`Use functools.partial to pass keywords to the callback `. -.. method:: BaseEventLoop.remove_reader(fd) +.. method:: AbstractEventLoop.remove_reader(fd) Stop watching the file descriptor for read availability. -.. method:: BaseEventLoop.add_writer(fd, callback, \*args) +.. method:: AbstractEventLoop.add_writer(fd, callback, \*args) Start watching the file descriptor for write availability and then call the *callback* with specified arguments. @@ -477,19 +507,19 @@ On Windows with :class:`ProactorEventLoop`, these methods are not supported. :ref:`Use functools.partial to pass keywords to the callback `. -.. method:: BaseEventLoop.remove_writer(fd) +.. method:: AbstractEventLoop.remove_writer(fd) Stop watching the file descriptor for write availability. The :ref:`watch a file descriptor for read events ` -example uses the low-level :meth:`BaseEventLoop.add_reader` method to register +example uses the low-level :meth:`AbstractEventLoop.add_reader` method to register the file descriptor of a socket. Low-level socket operations --------------------------- -.. coroutinemethod:: BaseEventLoop.sock_recv(sock, nbytes) +.. coroutinemethod:: AbstractEventLoop.sock_recv(sock, nbytes) Receive data from the socket. Modeled after blocking :meth:`socket.socket.recv` method. @@ -503,7 +533,7 @@ Low-level socket operations This method is a :ref:`coroutine `. -.. coroutinemethod:: BaseEventLoop.sock_sendall(sock, data) +.. coroutinemethod:: AbstractEventLoop.sock_sendall(sock, data) Send data to the socket. Modeled after blocking :meth:`socket.socket.sendall` method. @@ -519,7 +549,7 @@ Low-level socket operations This method is a :ref:`coroutine `. -.. coroutinemethod:: BaseEventLoop.sock_connect(sock, address) +.. coroutinemethod:: AbstractEventLoop.sock_connect(sock, address) Connect to a remote socket at *address*. Modeled after blocking :meth:`socket.socket.connect` method. @@ -533,16 +563,16 @@ Low-level socket operations ``address`` no longer needs to be resolved. ``sock_connect`` will try to check if the *address* is already resolved by calling :func:`socket.inet_pton`. If not, - :meth:`BaseEventLoop.getaddrinfo` will be used to resolve the + :meth:`AbstractEventLoop.getaddrinfo` will be used to resolve the *address*. .. seealso:: - :meth:`BaseEventLoop.create_connection` + :meth:`AbstractEventLoop.create_connection` and :func:`asyncio.open_connection() `. -.. coroutinemethod:: BaseEventLoop.sock_accept(sock) +.. coroutinemethod:: AbstractEventLoop.sock_accept(sock) Accept a connection. Modeled after blocking :meth:`socket.socket.accept`. @@ -559,18 +589,18 @@ Low-level socket operations .. seealso:: - :meth:`BaseEventLoop.create_server` and :func:`start_server`. + :meth:`AbstractEventLoop.create_server` and :func:`start_server`. Resolve host name ----------------- -.. coroutinemethod:: BaseEventLoop.getaddrinfo(host, port, \*, family=0, type=0, proto=0, flags=0) +.. coroutinemethod:: AbstractEventLoop.getaddrinfo(host, port, \*, family=0, type=0, proto=0, flags=0) This method is a :ref:`coroutine `, similar to :meth:`socket.getaddrinfo` function but non-blocking. -.. coroutinemethod:: BaseEventLoop.getnameinfo(sockaddr, flags=0) +.. coroutinemethod:: AbstractEventLoop.getnameinfo(sockaddr, flags=0) This method is a :ref:`coroutine `, similar to :meth:`socket.getnameinfo` function but non-blocking. @@ -582,7 +612,7 @@ Connect pipes On Windows with :class:`SelectorEventLoop`, these methods are not supported. Use :class:`ProactorEventLoop` to support pipes on Windows. -.. coroutinemethod:: BaseEventLoop.connect_read_pipe(protocol_factory, pipe) +.. coroutinemethod:: AbstractEventLoop.connect_read_pipe(protocol_factory, pipe) Register read pipe in eventloop. @@ -596,7 +626,7 @@ Use :class:`ProactorEventLoop` to support pipes on Windows. This method is a :ref:`coroutine `. -.. coroutinemethod:: BaseEventLoop.connect_write_pipe(protocol_factory, pipe) +.. coroutinemethod:: AbstractEventLoop.connect_write_pipe(protocol_factory, pipe) Register write pipe in eventloop. @@ -612,8 +642,8 @@ Use :class:`ProactorEventLoop` to support pipes on Windows. .. seealso:: - The :meth:`BaseEventLoop.subprocess_exec` and - :meth:`BaseEventLoop.subprocess_shell` methods. + The :meth:`AbstractEventLoop.subprocess_exec` and + :meth:`AbstractEventLoop.subprocess_shell` methods. UNIX signals @@ -621,7 +651,7 @@ UNIX signals Availability: UNIX only. -.. method:: BaseEventLoop.add_signal_handler(signum, callback, \*args) +.. method:: AbstractEventLoop.add_signal_handler(signum, callback, \*args) Add a handler for a signal. @@ -631,7 +661,7 @@ Availability: UNIX only. :ref:`Use functools.partial to pass keywords to the callback `. -.. method:: BaseEventLoop.remove_signal_handler(sig) +.. method:: AbstractEventLoop.remove_signal_handler(sig) Remove a handler for a signal. @@ -649,7 +679,7 @@ Call a function in an :class:`~concurrent.futures.Executor` (pool of threads or pool of processes). By default, an event loop uses a thread pool executor (:class:`~concurrent.futures.ThreadPoolExecutor`). -.. coroutinemethod:: BaseEventLoop.run_in_executor(executor, func, \*args) +.. coroutinemethod:: AbstractEventLoop.run_in_executor(executor, func, \*args) Arrange for a *func* to be called in the specified executor. @@ -661,7 +691,14 @@ pool of processes). By default, an event loop uses a thread pool executor This method is a :ref:`coroutine `. -.. method:: BaseEventLoop.set_default_executor(executor) + .. versionchanged:: 3.5.3 + :meth:`BaseEventLoop.run_in_executor` no longer configures the + ``max_workers`` of the thread pool executor it creates, instead + leaving it up to the thread pool executor + (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the + default. + +.. method:: AbstractEventLoop.set_default_executor(executor) Set the default executor used by :meth:`run_in_executor`. @@ -671,7 +708,7 @@ Error Handling API Allows customizing how exceptions are handled in the event loop. -.. method:: BaseEventLoop.set_exception_handler(handler) +.. method:: AbstractEventLoop.set_exception_handler(handler) Set *handler* as the new event loop exception handler. @@ -684,14 +721,14 @@ Allows customizing how exceptions are handled in the event loop. will be a ``dict`` object (see :meth:`call_exception_handler` documentation for details about context). -.. method:: BaseEventLoop.get_exception_handler() +.. method:: AbstractEventLoop.get_exception_handler() Return the exception handler, or ``None`` if the default one is in use. .. versionadded:: 3.5.2 -.. method:: BaseEventLoop.default_exception_handler(context) +.. method:: AbstractEventLoop.default_exception_handler(context) Default exception handler. @@ -702,7 +739,7 @@ Allows customizing how exceptions are handled in the event loop. *context* parameter has the same meaning as in :meth:`call_exception_handler`. -.. method:: BaseEventLoop.call_exception_handler(context) +.. method:: AbstractEventLoop.call_exception_handler(context) Call the current event loop exception handler. @@ -726,7 +763,7 @@ Allows customizing how exceptions are handled in the event loop. Debug mode ---------- -.. method:: BaseEventLoop.get_debug() +.. method:: AbstractEventLoop.get_debug() Get the debug mode (:class:`bool`) of the event loop. @@ -736,7 +773,7 @@ Debug mode .. versionadded:: 3.4.2 -.. method:: BaseEventLoop.set_debug(enabled: bool) +.. method:: AbstractEventLoop.set_debug(enabled: bool) Set the debug mode of the event loop. @@ -753,7 +790,7 @@ Server Server listening on sockets. - Object created by the :meth:`BaseEventLoop.create_server` method and the + Object created by the :meth:`AbstractEventLoop.create_server` method and the :func:`start_server` function. Don't instantiate the class directly. .. method:: close() @@ -784,9 +821,9 @@ Handle .. class:: Handle - A callback wrapper object returned by :func:`BaseEventLoop.call_soon`, - :func:`BaseEventLoop.call_soon_threadsafe`, :func:`BaseEventLoop.call_later`, - and :func:`BaseEventLoop.call_at`. + A callback wrapper object returned by :func:`AbstractEventLoop.call_soon`, + :func:`AbstractEventLoop.call_soon_threadsafe`, :func:`AbstractEventLoop.call_later`, + and :func:`AbstractEventLoop.call_at`. .. method:: cancel() @@ -802,7 +839,7 @@ Event loop examples Hello World with call_soon() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Example using the :meth:`BaseEventLoop.call_soon` method to schedule a +Example using the :meth:`AbstractEventLoop.call_soon` method to schedule a callback. The callback displays ``"Hello World"`` and then stops the event loop:: @@ -833,7 +870,7 @@ Display the current date with call_later() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Example of callback displaying the current date every second. The callback uses -the :meth:`BaseEventLoop.call_later` method to reschedule itself during 5 +the :meth:`AbstractEventLoop.call_later` method to reschedule itself during 5 seconds, and then stops the event loop:: import asyncio @@ -869,7 +906,7 @@ Watch a file descriptor for read events ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Wait until a file descriptor received some data using the -:meth:`BaseEventLoop.add_reader` method and then close the event loop:: +:meth:`AbstractEventLoop.add_reader` method and then close the event loop:: import asyncio try: @@ -907,7 +944,7 @@ Wait until a file descriptor received some data using the The :ref:`register an open socket to wait for data using a protocol ` example uses a low-level protocol created by the - :meth:`BaseEventLoop.create_connection` method. + :meth:`AbstractEventLoop.create_connection` method. The :ref:`register an open socket to wait for data using streams ` example uses high-level streams @@ -918,7 +955,7 @@ Set signal handlers for SIGINT and SIGTERM ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM` using -the :meth:`BaseEventLoop.add_signal_handler` method:: +the :meth:`AbstractEventLoop.add_signal_handler` method:: import asyncio import functools diff --git a/Doc/library/asyncio-eventloops.rst b/Doc/library/asyncio-eventloops.rst index b8f29d7..1dc18fc 100644 --- a/Doc/library/asyncio-eventloops.rst +++ b/Doc/library/asyncio-eventloops.rst @@ -35,7 +35,7 @@ asyncio currently provides two implementations of event loops: .. class:: SelectorEventLoop Event loop based on the :mod:`selectors` module. Subclass of - :class:`BaseEventLoop`. + :class:`AbstractEventLoop`. Use the most efficient selector available on the platform. @@ -46,7 +46,7 @@ asyncio currently provides two implementations of event loops: .. class:: ProactorEventLoop Proactor event loop for Windows using "I/O Completion Ports" aka IOCP. - Subclass of :class:`BaseEventLoop`. + Subclass of :class:`AbstractEventLoop`. Availability: Windows. @@ -76,11 +76,11 @@ Windows Common limits of Windows event loops: -- :meth:`~BaseEventLoop.create_unix_connection` and - :meth:`~BaseEventLoop.create_unix_server` are not supported: the socket +- :meth:`~AbstractEventLoop.create_unix_connection` and + :meth:`~AbstractEventLoop.create_unix_server` are not supported: the socket family :data:`socket.AF_UNIX` is specific to UNIX -- :meth:`~BaseEventLoop.add_signal_handler` and - :meth:`~BaseEventLoop.remove_signal_handler` are not supported +- :meth:`~AbstractEventLoop.add_signal_handler` and + :meth:`~AbstractEventLoop.remove_signal_handler` are not supported - :meth:`EventLoopPolicy.set_child_watcher` is not supported. :class:`ProactorEventLoop` supports subprocesses. It has only one implementation to watch child processes, there is no need to configure it. @@ -89,19 +89,19 @@ Common limits of Windows event loops: - :class:`~selectors.SelectSelector` is used which only supports sockets and is limited to 512 sockets. -- :meth:`~BaseEventLoop.add_reader` and :meth:`~BaseEventLoop.add_writer` only +- :meth:`~AbstractEventLoop.add_reader` and :meth:`~AbstractEventLoop.add_writer` only accept file descriptors of sockets - Pipes are not supported - (ex: :meth:`~BaseEventLoop.connect_read_pipe`, - :meth:`~BaseEventLoop.connect_write_pipe`) + (ex: :meth:`~AbstractEventLoop.connect_read_pipe`, + :meth:`~AbstractEventLoop.connect_write_pipe`) - :ref:`Subprocesses ` are not supported - (ex: :meth:`~BaseEventLoop.subprocess_exec`, - :meth:`~BaseEventLoop.subprocess_shell`) + (ex: :meth:`~AbstractEventLoop.subprocess_exec`, + :meth:`~AbstractEventLoop.subprocess_shell`) :class:`ProactorEventLoop` specific limits: -- :meth:`~BaseEventLoop.create_datagram_endpoint` (UDP) is not supported -- :meth:`~BaseEventLoop.add_reader` and :meth:`~BaseEventLoop.add_writer` are +- :meth:`~AbstractEventLoop.create_datagram_endpoint` (UDP) is not supported +- :meth:`~AbstractEventLoop.add_reader` and :meth:`~AbstractEventLoop.add_writer` are not supported The resolution of the monotonic clock on Windows is usually around 15.6 msec. @@ -167,7 +167,7 @@ An event loop policy must implement the following interface: Get the event loop for the current context. - Returns an event loop object implementing the :class:`BaseEventLoop` + Returns an event loop object implementing the :class:`AbstractEventLoop` interface. Raises an exception in case no event loop has been set for the current diff --git a/Doc/library/asyncio-protocol.rst b/Doc/library/asyncio-protocol.rst index 23d34d0..c0342f7 100644 --- a/Doc/library/asyncio-protocol.rst +++ b/Doc/library/asyncio-protocol.rst @@ -11,7 +11,7 @@ Transports Transports are classes provided by :mod:`asyncio` in order to abstract various kinds of communication channels. You generally won't instantiate -a transport yourself; instead, you will call a :class:`BaseEventLoop` method +a transport yourself; instead, you will call an :class:`AbstractEventLoop` method which will create the transport and try to initiate the underlying communication channel, calling you back when it succeeds. @@ -87,6 +87,19 @@ BaseTransport - ``'subprocess'``: :class:`subprocess.Popen` instance + .. method:: set_protocol(protocol) + + Set a new protocol. Switching protocol should only be done when both + protocols are documented to support the switch. + + .. versionadded:: 3.5.3 + + .. method:: get_protocol + + Return the current protocol. + + .. versionadded:: 3.5.3 + .. versionchanged:: 3.5.1 ``'ssl_object'`` info was added to SSL sockets. @@ -372,10 +385,10 @@ The following callbacks are called on :class:`Protocol` instances: (for example by calling :meth:`write_eof`, if the other end also uses asyncio). - This method may return a false value (including None), in which case + This method may return a false value (including ``None``), in which case the transport will close itself. Conversely, if this method returns a true value, closing the transport is up to the protocol. Since the - default implementation returns None, it implicitly closes the connection. + default implementation returns ``None``, it implicitly closes the connection. .. note:: Some transports such as SSL don't support half-closed connections, @@ -475,7 +488,7 @@ Protocol examples TCP echo client protocol ------------------------ -TCP echo client using the :meth:`BaseEventLoop.create_connection` method, send +TCP echo client using the :meth:`AbstractEventLoop.create_connection` method, send data and wait until the connection is closed:: import asyncio @@ -506,10 +519,10 @@ data and wait until the connection is closed:: loop.close() The event loop is running twice. The -:meth:`~BaseEventLoop.run_until_complete` method is preferred in this short +:meth:`~AbstractEventLoop.run_until_complete` method is preferred in this short example to raise an exception if the server is not listening, instead of having to write a short coroutine to handle the exception and stop the -running loop. At :meth:`~BaseEventLoop.run_until_complete` exit, the loop is +running loop. At :meth:`~AbstractEventLoop.run_until_complete` exit, the loop is no longer running, so there is no need to stop the loop in case of an error. .. seealso:: @@ -523,7 +536,7 @@ no longer running, so there is no need to stop the loop in case of an error. TCP echo server protocol ------------------------ -TCP echo server using the :meth:`BaseEventLoop.create_server` method, send back +TCP echo server using the :meth:`AbstractEventLoop.create_server` method, send back received data and close the connection:: import asyncio @@ -577,7 +590,7 @@ methods are not coroutines. UDP echo client protocol ------------------------ -UDP echo client using the :meth:`BaseEventLoop.create_datagram_endpoint` +UDP echo client using the :meth:`AbstractEventLoop.create_datagram_endpoint` method, send data and close the transport when we received the answer:: import asyncio @@ -623,7 +636,7 @@ method, send data and close the transport when we received the answer:: UDP echo server protocol ------------------------ -UDP echo server using the :meth:`BaseEventLoop.create_datagram_endpoint` +UDP echo server using the :meth:`AbstractEventLoop.create_datagram_endpoint` method, send back received data:: import asyncio @@ -660,7 +673,7 @@ Register an open socket to wait for data using a protocol --------------------------------------------------------- Wait until a socket receives data using the -:meth:`BaseEventLoop.create_connection` method with a protocol, and then close +:meth:`AbstractEventLoop.create_connection` method with a protocol, and then close the event loop :: import asyncio @@ -708,7 +721,7 @@ the event loop :: The :ref:`watch a file descriptor for read events ` example uses the low-level - :meth:`BaseEventLoop.add_reader` method to register the file descriptor of a + :meth:`AbstractEventLoop.add_reader` method to register the file descriptor of a socket. The :ref:`register an open socket to wait for data using streams diff --git a/Doc/library/asyncio-stream.rst b/Doc/library/asyncio-stream.rst index 08fe071..6177b4b 100644 --- a/Doc/library/asyncio-stream.rst +++ b/Doc/library/asyncio-stream.rst @@ -18,14 +18,14 @@ Stream functions .. coroutinefunction:: open_connection(host=None, port=None, \*, loop=None, limit=None, \*\*kwds) - A wrapper for :meth:`~BaseEventLoop.create_connection()` returning a (reader, + A wrapper for :meth:`~AbstractEventLoop.create_connection()` returning a (reader, writer) pair. The reader returned is a :class:`StreamReader` instance; the writer is a :class:`StreamWriter` instance. The arguments are all the usual arguments to - :meth:`BaseEventLoop.create_connection` except *protocol_factory*; most + :meth:`AbstractEventLoop.create_connection` except *protocol_factory*; most common are positional host and port, with various optional keyword arguments following. @@ -38,7 +38,7 @@ Stream functions .. coroutinefunction:: start_server(client_connected_cb, host=None, port=None, \*, loop=None, limit=None, \*\*kwds) Start a socket server, with a callback for each client connected. The return - value is the same as :meth:`~BaseEventLoop.create_server()`. + value is the same as :meth:`~AbstractEventLoop.create_server()`. The *client_connected_cb* parameter is called with two parameters: *client_reader*, *client_writer*. *client_reader* is a @@ -49,7 +49,7 @@ Stream functions converted into a :class:`Task`. The rest of the arguments are all the usual arguments to - :meth:`~BaseEventLoop.create_server()` except *protocol_factory*; most + :meth:`~AbstractEventLoop.create_server()` except *protocol_factory*; most common are positional *host* and *port*, with various optional keyword arguments following. @@ -61,7 +61,7 @@ Stream functions .. coroutinefunction:: open_unix_connection(path=None, \*, loop=None, limit=None, **kwds) - A wrapper for :meth:`~BaseEventLoop.create_unix_connection()` returning + A wrapper for :meth:`~AbstractEventLoop.create_unix_connection()` returning a (reader, writer) pair. See :func:`open_connection` for information about return value and other @@ -142,7 +142,7 @@ StreamReader This method is a :ref:`coroutine `. - .. coroutinemethod:: readuntil(separator=b'\n') + .. coroutinemethod:: readuntil(separator=b'\\n') Read data from the stream until ``separator`` is found. @@ -321,7 +321,7 @@ TCP echo client using the :func:`asyncio.open_connection` function:: .. seealso:: The :ref:`TCP echo client protocol ` - example uses the :meth:`BaseEventLoop.create_connection` method. + example uses the :meth:`AbstractEventLoop.create_connection` method. .. _asyncio-tcp-echo-server-streams: @@ -366,7 +366,7 @@ TCP echo server using the :func:`asyncio.start_server` function:: .. seealso:: The :ref:`TCP echo server protocol ` - example uses the :meth:`BaseEventLoop.create_server` method. + example uses the :meth:`AbstractEventLoop.create_server` method. Get HTTP headers @@ -458,10 +458,10 @@ Coroutine waiting until a socket receives data using the The :ref:`register an open socket to wait for data using a protocol ` example uses a low-level protocol created by the - :meth:`BaseEventLoop.create_connection` method. + :meth:`AbstractEventLoop.create_connection` method. The :ref:`watch a file descriptor for read events ` example uses the low-level - :meth:`BaseEventLoop.add_reader` method to register the file descriptor of a + :meth:`AbstractEventLoop.add_reader` method to register the file descriptor of a socket. diff --git a/Doc/library/asyncio-subprocess.rst b/Doc/library/asyncio-subprocess.rst index 51ce427..dc93a74 100644 --- a/Doc/library/asyncio-subprocess.rst +++ b/Doc/library/asyncio-subprocess.rst @@ -32,7 +32,7 @@ Create a subprocess: high-level API using Process Create a subprocess. The *limit* parameter sets the buffer limit passed to the - :class:`StreamReader`. See :meth:`BaseEventLoop.subprocess_exec` for other + :class:`StreamReader`. See :meth:`AbstractEventLoop.subprocess_exec` for other parameters. Return a :class:`~asyncio.subprocess.Process` instance. @@ -44,7 +44,7 @@ Create a subprocess: high-level API using Process Run the shell command *cmd*. The *limit* parameter sets the buffer limit passed to the - :class:`StreamReader`. See :meth:`BaseEventLoop.subprocess_shell` for other + :class:`StreamReader`. See :meth:`AbstractEventLoop.subprocess_shell` for other parameters. Return a :class:`~asyncio.subprocess.Process` instance. @@ -58,8 +58,8 @@ Create a subprocess: high-level API using Process This function is a :ref:`coroutine `. -Use the :meth:`BaseEventLoop.connect_read_pipe` and -:meth:`BaseEventLoop.connect_write_pipe` methods to connect pipes. +Use the :meth:`AbstractEventLoop.connect_read_pipe` and +:meth:`AbstractEventLoop.connect_write_pipe` methods to connect pipes. Create a subprocess: low-level API using subprocess.Popen @@ -67,7 +67,7 @@ Create a subprocess: low-level API using subprocess.Popen Run subprocesses asynchronously using the :mod:`subprocess` module. -.. coroutinemethod:: BaseEventLoop.subprocess_exec(protocol_factory, \*args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, \*\*kwargs) +.. coroutinemethod:: AbstractEventLoop.subprocess_exec(protocol_factory, \*args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, \*\*kwargs) Create a subprocess from one or more string arguments (character strings or bytes strings encoded to the :ref:`filesystem encoding @@ -87,19 +87,19 @@ Run subprocesses asynchronously using the :mod:`subprocess` module. * *stdin*: Either a file-like object representing the pipe to be connected to the subprocess's standard input stream using - :meth:`~BaseEventLoop.connect_write_pipe`, or the constant + :meth:`~AbstractEventLoop.connect_write_pipe`, or the constant :const:`subprocess.PIPE` (the default). By default a new pipe will be created and connected. * *stdout*: Either a file-like object representing the pipe to be connected to the subprocess's standard output stream using - :meth:`~BaseEventLoop.connect_read_pipe`, or the constant + :meth:`~AbstractEventLoop.connect_read_pipe`, or the constant :const:`subprocess.PIPE` (the default). By default a new pipe will be created and connected. * *stderr*: Either a file-like object representing the pipe to be connected to the subprocess's standard error stream using - :meth:`~BaseEventLoop.connect_read_pipe`, or one of the constants + :meth:`~AbstractEventLoop.connect_read_pipe`, or one of the constants :const:`subprocess.PIPE` (the default) or :const:`subprocess.STDOUT`. By default a new pipe will be created and connected. When :const:`subprocess.STDOUT` is specified, the subprocess's standard error @@ -116,7 +116,7 @@ Run subprocesses asynchronously using the :mod:`subprocess` module. See the constructor of the :class:`subprocess.Popen` class for parameters. -.. coroutinemethod:: BaseEventLoop.subprocess_shell(protocol_factory, cmd, \*, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, \*\*kwargs) +.. coroutinemethod:: AbstractEventLoop.subprocess_shell(protocol_factory, cmd, \*, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, \*\*kwargs) Create a subprocess from *cmd*, which is a character string or a bytes string encoded to the :ref:`filesystem encoding `, @@ -126,7 +126,7 @@ Run subprocesses asynchronously using the :mod:`subprocess` module. The *protocol_factory* must instanciate a subclass of the :class:`asyncio.SubprocessProtocol` class. - See :meth:`~BaseEventLoop.subprocess_exec` for more details about + See :meth:`~AbstractEventLoop.subprocess_exec` for more details about the remaining arguments. Returns a pair of ``(transport, protocol)``, where *transport* is an @@ -143,8 +143,8 @@ Run subprocesses asynchronously using the :mod:`subprocess` module. .. seealso:: - The :meth:`BaseEventLoop.connect_read_pipe` and - :meth:`BaseEventLoop.connect_write_pipe` methods. + The :meth:`AbstractEventLoop.connect_read_pipe` and + :meth:`AbstractEventLoop.connect_write_pipe` methods. Constants @@ -329,7 +329,7 @@ Subprocess using transport and protocol Example of a subprocess protocol using to get the output of a subprocess and to wait for the subprocess exit. The subprocess is created by the -:meth:`BaseEventLoop.subprocess_exec` method:: +:meth:`AbstractEventLoop.subprocess_exec` method:: import asyncio import sys diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst index de6ee58..9bff1c4 100644 --- a/Doc/library/asyncio-task.rst +++ b/Doc/library/asyncio-task.rst @@ -59,7 +59,7 @@ the coroutine object returned by the call doesn't do anything until you schedule its execution. There are two basic ways to start it running: call ``await coroutine`` or ``yield from coroutine`` from another coroutine (assuming the other coroutine is already running!), or schedule its execution -using the :func:`ensure_future` function or the :meth:`BaseEventLoop.create_task` +using the :func:`ensure_future` function or the :meth:`AbstractEventLoop.create_task` method. @@ -108,7 +108,7 @@ Example of coroutine displaying ``"Hello World"``:: .. seealso:: The :ref:`Hello World with call_soon() ` - example uses the :meth:`BaseEventLoop.call_soon` method to schedule a + example uses the :meth:`AbstractEventLoop.call_soon` method to schedule a callback. @@ -151,7 +151,7 @@ The same coroutine implemented using a generator:: The :ref:`display the current date with call_later() ` example uses a callback with the - :meth:`BaseEventLoop.call_later` method. + :meth:`AbstractEventLoop.call_later` method. Example: Chain coroutines @@ -182,12 +182,12 @@ Sequence diagram of the example: .. image:: tulip_coro.png :align: center -The "Task" is created by the :meth:`BaseEventLoop.run_until_complete` method +The "Task" is created by the :meth:`AbstractEventLoop.run_until_complete` method when it gets a coroutine object instead of a task. The diagram shows the control flow, it does not describe exactly how things work internally. For example, the sleep coroutine creates an internal future -which uses :meth:`BaseEventLoop.call_later` to wake up the task in 1 second. +which uses :meth:`AbstractEventLoop.call_later` to wake up the task in 1 second. InvalidStateError @@ -223,7 +223,7 @@ Future raise an exception when the future isn't done yet. - Callbacks registered with :meth:`add_done_callback` are always called - via the event loop's :meth:`~BaseEventLoop.call_soon_threadsafe`. + via the event loop's :meth:`~AbstractEventLoop.call_soon_threadsafe`. - This class is not compatible with the :func:`~concurrent.futures.wait` and :func:`~concurrent.futures.as_completed` functions in the @@ -245,7 +245,7 @@ Future .. method:: done() - Return True if the future is done. + Return ``True`` if the future is done. Done means either that a result / exception are available, or that the future was cancelled. @@ -273,7 +273,7 @@ Future The callback is called with a single argument - the future object. If the future is already done when this is called, the callback is scheduled - with :meth:`~BaseEventLoop.call_soon`. + with :meth:`~AbstractEventLoop.call_soon`. :ref:`Use functools.partial to pass parameters to the callback `. For example, @@ -323,11 +323,11 @@ Example combining a :class:`Future` and a :ref:`coroutine function The coroutine function is responsible for the computation (which takes 1 second) and it stores the result into the future. The -:meth:`~BaseEventLoop.run_until_complete` method waits for the completion of +:meth:`~AbstractEventLoop.run_until_complete` method waits for the completion of the future. .. note:: - The :meth:`~BaseEventLoop.run_until_complete` method uses internally the + The :meth:`~AbstractEventLoop.run_until_complete` method uses internally the :meth:`~Future.add_done_callback` method to be notified when the future is done. @@ -374,7 +374,7 @@ Task A task is responsible for executing a coroutine object in an event loop. If the wrapped coroutine yields from a future, the task suspends the execution - of the wrapped coroutine and waits for the completition of the future. When + of the wrapped coroutine and waits for the completion of the future. When the future is done, the execution of the wrapped coroutine restarts with the result or the exception of the future. @@ -396,7 +396,7 @@ Task logged: see :ref:`Pending task destroyed `. Don't directly create :class:`Task` instances: use the :func:`ensure_future` - function or the :meth:`BaseEventLoop.create_task` method. + function or the :meth:`AbstractEventLoop.create_task` method. This class is :ref:`not thread safe `. @@ -486,7 +486,7 @@ Example executing 3 tasks (A, B, C) in parallel:: asyncio.ensure_future(factorial("A", 2)), asyncio.ensure_future(factorial("B", 3)), asyncio.ensure_future(factorial("C", 4))] - loop.run_until_complete(asyncio.wait(tasks)) + loop.run_until_complete(asyncio.gather(*tasks)) loop.close() Output:: @@ -546,7 +546,7 @@ Task functions .. seealso:: - The :meth:`BaseEventLoop.create_task` method. + The :meth:`AbstractEventLoop.create_task` method. .. function:: async(coro_or_future, \*, loop=None) @@ -562,7 +562,7 @@ Task functions All futures must share the same event loop. If all the tasks are done successfully, the returned future's result is the list of results (in the order of the original sequence, not necessarily the order of results - arrival). If *return_exceptions* is True, exceptions in the tasks are + arrival). If *return_exceptions* is true, exceptions in the tasks are treated the same as successful results, and gathered in the result list; otherwise, the first raised exception will be immediately propagated to the returned future. diff --git a/Doc/library/asyncio.rst b/Doc/library/asyncio.rst index f764c68..76bd9e9 100644 --- a/Doc/library/asyncio.rst +++ b/Doc/library/asyncio.rst @@ -1,5 +1,5 @@ -:mod:`asyncio` -- Asynchronous I/O, event loop, coroutines and tasks -==================================================================== +:mod:`asyncio` --- Asynchronous I/O, event loop, coroutines and tasks +===================================================================== .. module:: asyncio :synopsis: Asynchronous I/O, event loop, coroutines and tasks. diff --git a/Doc/library/asyncore.rst b/Doc/library/asyncore.rst index 61061be..c838be7 100644 --- a/Doc/library/asyncore.rst +++ b/Doc/library/asyncore.rst @@ -57,7 +57,7 @@ any that have been added to the map during asynchronous service) is closed. Enter a polling loop that terminates after count passes or all open channels have been closed. All arguments are optional. The *count* - parameter defaults to None, resulting in the loop terminating only when all + parameter defaults to ``None``, resulting in the loop terminating only when all channels have been closed. The *timeout* argument sets the timeout parameter for the appropriate :func:`~select.select` or :func:`~select.poll` call, measured in seconds; the default is 30 seconds. The *use_poll* diff --git a/Doc/library/bdb.rst b/Doc/library/bdb.rst index 8ee9921..116ffcf 100644 --- a/Doc/library/bdb.rst +++ b/Doc/library/bdb.rst @@ -241,7 +241,7 @@ The :mod:`bdb` module also defines two classes: .. method:: set_continue() Stop only at breakpoints or when finished. If there are no breakpoints, - set the system trace function to None. + set the system trace function to ``None``. .. method:: set_quit() diff --git a/Doc/library/binascii.rst b/Doc/library/binascii.rst index 878d8db..49da59a 100644 --- a/Doc/library/binascii.rst +++ b/Doc/library/binascii.rst @@ -115,8 +115,10 @@ The :mod:`binascii` module defines the following functions: .. function:: crc_hqx(data, value) - Compute the binhex4 crc value of *data*, starting with *value* as the - initial crc, and return the result. + Compute a 16-bit CRC value of *data*, starting with *value* as the + initial CRC, and return the result. This uses the CRC-CCITT polynomial + *x*:sup:`16` + *x*:sup:`12` + *x*:sup:`5` + 1, often represented as + 0x1021. This CRC is used in the binhex4 format. .. function:: crc32(data[, value]) diff --git a/Doc/library/builtins.rst b/Doc/library/builtins.rst index 4b589a5..8fb1fef 100644 --- a/Doc/library/builtins.rst +++ b/Doc/library/builtins.rst @@ -37,6 +37,6 @@ that wants to implement an :func:`open` function that wraps the built-in As an implementation detail, most modules have the name ``__builtins__`` made available as part of their globals. The value of ``__builtins__`` is normally -either this module or the value of this module's :attr:`__dict__` attribute. +either this module or the value of this module's :attr:`~object.__dict__` attribute. Since this is an implementation detail, it may not be used by alternate implementations of Python. diff --git a/Doc/library/calendar.rst b/Doc/library/calendar.rst index df76e33..41e9e28 100644 --- a/Doc/library/calendar.rst +++ b/Doc/library/calendar.rst @@ -47,7 +47,7 @@ it's the base calendar for all computations. .. method:: itermonthdates(year, month) - Return an iterator for the month *month* (1-12) in the year *year*. This + Return an iterator for the month *month* (1--12) in the year *year*. This iterator will return all days (as :class:`datetime.date` objects) for the month and all days before the start of the month or after the end of the month that are required to get a complete week. diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst index 0bc2c35..41219ee 100644 --- a/Doc/library/cgi.rst +++ b/Doc/library/cgi.rst @@ -442,7 +442,9 @@ installing a copy of this module file (:file:`cgi.py`) as a CGI script. When invoked as a script, the file will dump its environment and the contents of the form in HTML form. Give it the right mode etc, and send it a request. If it's installed in the standard :file:`cgi-bin` directory, it should be possible to -send it a request by entering a URL into your browser of the form:: +send it a request by entering a URL into your browser of the form: + +.. code-block:: none http://yourhostname/cgi-bin/cgi.py?name=Joe+Blow&addr=At+Home @@ -534,4 +536,3 @@ Common problems and solutions order the field values should be supplied in, but knowing whether a request was received from a conforming browser, or even from a browser at all, is tedious and error-prone. - diff --git a/Doc/library/cmath.rst b/Doc/library/cmath.rst index 62ddb6b..e113ffc 100644 --- a/Doc/library/cmath.rst +++ b/Doc/library/cmath.rst @@ -275,6 +275,6 @@ cuts for numerical purposes, a good reference should be the following: Kahan, W: Branch cuts for complex elementary functions; or, Much ado about nothing's sign bit. In Iserles, A., and Powell, M. (eds.), The state of the art - in numerical analysis. Clarendon Press (1987) pp165-211. + in numerical analysis. Clarendon Press (1987) pp165--211. diff --git a/Doc/library/cmd.rst b/Doc/library/cmd.rst index 61ef0f6..f40cfdf 100644 --- a/Doc/library/cmd.rst +++ b/Doc/library/cmd.rst @@ -314,7 +314,9 @@ immediate playback:: Here is a sample session with the turtle shell showing the help functions, using -blank lines to repeat commands, and the simple record and playback facility:: +blank lines to repeat commands, and the simple record and playback facility: + +.. code-block:: none Welcome to the turtle shell. Type help or ? to list commands. @@ -373,4 +375,3 @@ blank lines to repeat commands, and the simple record and playback facility:: (turtle) bye Thank you for using Turtle - diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 1add300..f38e41b 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -224,6 +224,10 @@ wider range of codecs when working with binary files: The *errors* argument (as well as any other keyword argument) is passed through to the incremental encoder. + This function requires that the codec accept text :class:`str` objects + to encode. Therefore it does not support bytes-to-bytes encoders such as + ``base64_codec``. + .. function:: iterdecode(iterator, encoding, errors='strict', **kwargs) @@ -232,6 +236,11 @@ wider range of codecs when working with binary files: The *errors* argument (as well as any other keyword argument) is passed through to the incremental decoder. + This function requires that the codec accept :class:`bytes` objects + to decode. Therefore it does not support text-to-text encoders such as + ``rot_13``, although ``rot_13`` may be used equivalently with + :func:`iterencode`. + The module also provides the following constants which are useful for reading and writing to platform dependent files: @@ -849,7 +858,7 @@ Encodings and Unicode --------------------- Strings are stored internally as sequences of code points in -range ``0x0``-``0x10FFFF``. (See :pep:`393` for +range ``0x0``--``0x10FFFF``. (See :pep:`393` for more details about the implementation.) Once a string object is used outside of CPU and memory, endianness and how these arrays are stored as bytes become an issue. As with other @@ -859,7 +868,7 @@ There are a variety of different text serialisation codecs, which are collectivity referred to as :term:`text encodings `. The simplest text encoding (called ``'latin-1'`` or ``'iso-8859-1'``) maps -the code points 0-255 to the bytes ``0x0``-``0xff``, which means that a string +the code points 0--255 to the bytes ``0x0``--``0xff``, which means that a string object that contains code points above ``U+00FF`` can't be encoded with this codec. Doing so will raise a :exc:`UnicodeEncodeError` that looks like the following (although the details of the error message may differ): @@ -868,7 +877,7 @@ position 3: ordinal not in range(256)``. There's another group of encodings (the so called charmap encodings) that choose a different subset of all Unicode code points and how these code points are -mapped to the bytes ``0x0``-``0xff``. To see how this is done simply open +mapped to the bytes ``0x0``--``0xff``. To see how this is done simply open e.g. :file:`encodings/cp1252.py` (which is an encoding that is used primarily on Windows). There's a string constant with 256 characters that shows you which character is mapped to which byte value. diff --git a/Doc/library/collections.abc.rst b/Doc/library/collections.abc.rst index 61682cc..aeb6a73 100644 --- a/Doc/library/collections.abc.rst +++ b/Doc/library/collections.abc.rst @@ -55,6 +55,9 @@ ABC Inherits from Abstract Methods Mixin ``__len__``, ``insert`` +:class:`ByteString` :class:`Sequence` ``__getitem__``, Inherited :class:`Sequence` methods + ``__len__`` + :class:`Set` :class:`Sized`, ``__contains__``, ``__le__``, ``__lt__``, ``__eq__``, ``__ne__``, :class:`Iterable`, ``__iter__``, ``__gt__``, ``__ge__``, ``__and__``, ``__or__``, :class:`Container` ``__len__`` ``__sub__``, ``__xor__``, and ``isdisjoint`` @@ -119,6 +122,7 @@ ABC Inherits from Abstract Methods Mixin .. class:: Sequence MutableSequence + ByteString ABCs for read-only and mutable :term:`sequences `. @@ -135,7 +139,6 @@ ABC Inherits from Abstract Methods Mixin The index() method added support for *stop* and *start* arguments. - .. class:: Set MutableSet diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst index 4936b3a..d0aa62e 100644 --- a/Doc/library/collections.rst +++ b/Doc/library/collections.rst @@ -263,7 +263,7 @@ For example:: is less than one, :meth:`elements` will ignore it. >>> c = Counter(a=4, b=2, c=0, d=-2) - >>> list(c.elements()) + >>> sorted(c.elements()) ['a', 'a', 'a', 'a', 'b', 'b'] .. method:: most_common([n]) @@ -273,7 +273,7 @@ For example:: :func:`most_common` returns *all* elements in the counter. Elements with equal counts are ordered arbitrarily: - >>> Counter('abracadabra').most_common(3) + >>> Counter('abracadabra').most_common(3) # doctest: +SKIP [('a', 5), ('r', 2), ('b', 2)] .. method:: subtract([iterable-or-mapping]) @@ -329,7 +329,7 @@ counts, but the output will exclude results with counts of zero or less. Counter({'a': 4, 'b': 3}) >>> c - d # subtract (keeping only positive counts) Counter({'a': 2}) - >>> c & d # intersection: min(c[x], d[x]) + >>> c & d # intersection: min(c[x], d[x]) # doctest: +SKIP Counter({'a': 1, 'b': 1}) >>> c | d # union: max(c[x], d[x]) Counter({'a': 3, 'b': 2}) @@ -412,7 +412,7 @@ or subtracting from an empty counter. position of the underlying data representation. - If *maxlen* is not specified or is *None*, deques may grow to an + If *maxlen* is not specified or is ``None``, deques may grow to an arbitrary length. Otherwise, the deque is bounded to the specified maximum length. Once a bounded length deque is full, when new items are added, a corresponding number of items are discarded from the opposite end. Bounded @@ -520,7 +520,7 @@ or subtracting from an empty counter. .. attribute:: maxlen - Maximum size of a deque or *None* if unbounded. + Maximum size of a deque or ``None`` if unbounded. .. versionadded:: 3.1 @@ -698,7 +698,7 @@ sequence of key-value pairs into a dictionary of lists: >>> for k, v in s: ... d[k].append(v) ... - >>> list(d.items()) + >>> sorted(d.items()) [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])] When each key is encountered for the first time, it is not already in the @@ -713,7 +713,7 @@ simpler and faster than an equivalent technique using :meth:`dict.setdefault`: >>> for k, v in s: ... d.setdefault(k, []).append(v) ... - >>> list(d.items()) + >>> sorted(d.items()) [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])] Setting the :attr:`default_factory` to :class:`int` makes the @@ -725,8 +725,8 @@ languages): >>> for k in s: ... d[k] += 1 ... - >>> list(d.items()) - [('i', 4), ('p', 2), ('s', 4), ('m', 1)] + >>> sorted(d.items()) + [('i', 4), ('m', 1), ('p', 2), ('s', 4)] When a letter is first encountered, it is missing from the mapping, so the :attr:`default_factory` function calls :func:`int` to supply a default count of @@ -752,7 +752,7 @@ Setting the :attr:`default_factory` to :class:`set` makes the >>> for k, v in s: ... d[k].add(v) ... - >>> list(d.items()) + >>> sorted(d.items()) [('blue', {2, 4}), ('red', {1, 3})] @@ -793,11 +793,6 @@ they add the ability to access fields by name instead of position index. Named tuple instances do not have per-instance dictionaries, so they are lightweight and require no more memory than regular tuples. - For simple uses, where the only requirement is to be able to refer to a set - of values by name using attribute-style access, the - :class:`types.SimpleNamespace` type can be a suitable alternative to using - a namedtuple. - .. versionchanged:: 3.1 Added support for *rename*. @@ -914,15 +909,15 @@ functionality with a subclass. Here is how to add a calculated field and a fixed-width print format: >>> class Point(namedtuple('Point', 'x y')): - __slots__ = () - @property - def hypot(self): - return (self.x ** 2 + self.y ** 2) ** 0.5 - def __str__(self): - return 'Point: x=%6.3f y=%6.3f hypot=%6.3f' % (self.x, self.y, self.hypot) + ... __slots__ = () + ... @property + ... def hypot(self): + ... return (self.x ** 2 + self.y ** 2) ** 0.5 + ... def __str__(self): + ... return 'Point: x=%6.3f y=%6.3f hypot=%6.3f' % (self.x, self.y, self.hypot) >>> for p in Point(3, 4), Point(14, 5/7): - print(p) + ... print(p) Point: x= 3.000 y= 4.000 hypot= 5.000 Point: x=14.000 y= 0.714 hypot=14.018 diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst index eeae96a..8d141a2 100644 --- a/Doc/library/configparser.rst +++ b/Doc/library/configparser.rst @@ -66,7 +66,7 @@ The structure of INI files is described `in the following section <#supported-ini-file-structure>`_. Essentially, the file consists of sections, each of which contains keys with values. :mod:`configparser` classes can read and write such files. Let's start by -creating the above configuration file programatically. +creating the above configuration file programmatically. .. doctest:: @@ -150,8 +150,8 @@ Since this task is so common, config parsers provide a range of handy getter methods to handle integers, floats and booleans. The last one is the most interesting because simply passing the value to ``bool()`` would do no good since ``bool('False')`` is still ``True``. This is why config parsers also -provide :meth:`getboolean`. This method is case-insensitive and recognizes -Boolean values from ``'yes'``/``'no'``, ``'on'``/``'off'``, +provide :meth:`~ConfigParser.getboolean`. This method is case-insensitive and +recognizes Boolean values from ``'yes'``/``'no'``, ``'on'``/``'off'``, ``'true'``/``'false'`` and ``'1'``/``'0'`` [1]_. For example: .. doctest:: @@ -163,8 +163,9 @@ Boolean values from ``'yes'``/``'no'``, ``'on'``/``'off'``, >>> config.getboolean('bitbucket.org', 'Compression') True -Apart from :meth:`getboolean`, config parsers also provide equivalent -:meth:`getint` and :meth:`getfloat` methods. You can register your own +Apart from :meth:`~ConfigParser.getboolean`, config parsers also +provide equivalent :meth:`~ConfigParser.getint` and +:meth:`~ConfigParser.getfloat` methods. You can register your own converters and customize the provided ones. [1]_ Fallback Values @@ -205,8 +206,9 @@ the ``fallback`` keyword-only argument: ... fallback='No such things as monsters') 'No such things as monsters' -The same ``fallback`` argument can be used with the :meth:`getint`, -:meth:`getfloat` and :meth:`getboolean` methods, for example: +The same ``fallback`` argument can be used with the +:meth:`~ConfigParser.getint`, :meth:`~ConfigParser.getfloat` and +:meth:`~ConfigParser.getboolean` methods, for example: .. doctest:: @@ -670,14 +672,15 @@ the :meth:`__init__` options: * *converters*, default value: not set Config parsers provide option value getters that perform type conversion. By - default :meth:`getint`, :meth:`getfloat`, and :meth:`getboolean` are - implemented. Should other getters be desirable, users may define them in - a subclass or pass a dictionary where each key is a name of the converter and - each value is a callable implementing said conversion. For instance, passing - ``{'decimal': decimal.Decimal}`` would add :meth:`getdecimal` on both the - parser object and all section proxies. In other words, it will be possible - to write both ``parser_instance.getdecimal('section', 'key', fallback=0)`` - and ``parser_instance['section'].getdecimal('key', 0)``. + default :meth:`~ConfigParser.getint`, :meth:`~ConfigParser.getfloat`, and + :meth:`~ConfigParser.getboolean` are implemented. Should other getters be + desirable, users may define them in a subclass or pass a dictionary where each + key is a name of the converter and each value is a callable implementing said + conversion. For instance, passing ``{'decimal': decimal.Decimal}`` would add + :meth:`getdecimal` on both the parser object and all section proxies. In + other words, it will be possible to write both + ``parser_instance.getdecimal('section', 'key', fallback=0)`` and + ``parser_instance['section'].getdecimal('key', 0)``. If the converter needs to access the state of the parser, it can be implemented as a method on a config parser subclass. If the name of this @@ -690,11 +693,11 @@ be overridden by subclasses or by attribute assignment. .. attribute:: BOOLEAN_STATES - By default when using :meth:`getboolean`, config parsers consider the - following values ``True``: ``'1'``, ``'yes'``, ``'true'``, ``'on'`` and the - following values ``False``: ``'0'``, ``'no'``, ``'false'``, ``'off'``. You - can override this by specifying a custom dictionary of strings and their - Boolean outcomes. For example: + By default when using :meth:`~ConfigParser.getboolean`, config parsers + consider the following values ``True``: ``'1'``, ``'yes'``, ``'true'``, + ``'on'`` and the following values ``False``: ``'0'``, ``'no'``, ``'false'``, + ``'off'``. You can override this by specifying a custom dictionary of strings + and their Boolean outcomes. For example: .. doctest:: diff --git a/Doc/library/copy.rst b/Doc/library/copy.rst index a8adcad..d0b861d 100644 --- a/Doc/library/copy.rst +++ b/Doc/library/copy.rst @@ -48,7 +48,7 @@ copy operations: reference to themselves) may cause a recursive loop. * Because deep copy copies *everything* it may copy too much, e.g., - administrative data structures that should be shared even between copies. + even administrative data structures that should be shared even between copies. The :func:`deepcopy` function avoids these problems by: diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index a675790..b25fbbb 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -1253,7 +1253,7 @@ the library to load. Try to find a library and return a pathname. *name* is the library name without any prefix like *lib*, suffix like ``.so``, ``.dylib`` or version number (this - is the form used for the posix linker option :option:`-l`). If no library can + is the form used for the posix linker option :option:`!-l`). If no library can be found, returns ``None``. The exact functionality is system dependent. @@ -1354,10 +1354,11 @@ function is used to load the library into the process, and to get a handle to it. The *mode* parameter can be used to specify how the library is loaded. For -details, consult the :manpage:`dlopen(3)` manpage, on Windows, *mode* is -ignored. +details, consult the :manpage:`dlopen(3)` manpage. On Windows, *mode* is +ignored. On posix systems, RTLD_NOW is always added, and is not +configurable. -The *use_errno* parameter, when set to True, enables a ctypes mechanism that +The *use_errno* parameter, when set to true, enables a ctypes mechanism that allows accessing the system :data:`errno` error number in a safe way. :mod:`ctypes` maintains a thread-local copy of the systems :data:`errno` variable; if you call foreign functions created with ``use_errno=True`` then the @@ -1368,7 +1369,7 @@ The function :func:`ctypes.get_errno` returns the value of the ctypes private copy, and the function :func:`ctypes.set_errno` changes the ctypes private copy to a new value and returns the former value. -The *use_last_error* parameter, when set to True, enables the same mechanism for +The *use_last_error* parameter, when set to true, enables the same mechanism for the Windows error code which is managed by the :func:`GetLastError` and :func:`SetLastError` Windows API functions; :func:`ctypes.get_last_error` and :func:`ctypes.set_last_error` are used to request and change the ctypes private @@ -1578,7 +1579,7 @@ type and the argument types of the function. The returned function prototype creates functions that use the standard C calling convention. The function will release the GIL during the call. If - *use_errno* is set to True, the ctypes private copy of the system + *use_errno* is set to true, the ctypes private copy of the system :data:`errno` variable is exchanged with the real :data:`errno` value before and after the call; *use_last_error* does the same for the Windows error code. @@ -1664,32 +1665,30 @@ different ways, depending on the type and number of the parameters in the call: The optional third item is the default value for this parameter. -This example demonstrates how to wrap the Windows ``MessageBoxA`` function so +This example demonstrates how to wrap the Windows ``MessageBoxW`` function so that it supports default parameters and named arguments. The C declaration from the windows header file is this:: WINUSERAPI int WINAPI - MessageBoxA( + MessageBoxW( HWND hWnd, - LPCSTR lpText, - LPCSTR lpCaption, + LPCWSTR lpText, + LPCWSTR lpCaption, UINT uType); Here is the wrapping with :mod:`ctypes`:: >>> from ctypes import c_int, WINFUNCTYPE, windll - >>> from ctypes.wintypes import HWND, LPCSTR, UINT - >>> prototype = WINFUNCTYPE(c_int, HWND, LPCSTR, LPCSTR, UINT) - >>> paramflags = (1, "hwnd", 0), (1, "text", "Hi"), (1, "caption", None), (1, "flags", 0) - >>> MessageBox = prototype(("MessageBoxA", windll.user32), paramflags) - >>> + >>> from ctypes.wintypes import HWND, LPCWSTR, UINT + >>> prototype = WINFUNCTYPE(c_int, HWND, LPCWSTR, LPCWSTR, UINT) + >>> paramflags = (1, "hwnd", 0), (1, "text", "Hi"), (1, "caption", "Hello from ctypes"), (1, "flags", 0) + >>> MessageBox = prototype(("MessageBoxW", windll.user32), paramflags) -The MessageBox foreign function can now be called in these ways:: +The ``MessageBox`` foreign function can now be called in these ways:: >>> MessageBox() >>> MessageBox(text="Spam, spam, spam") >>> MessageBox(flags=2, text="foo bar") - >>> A second example demonstrates output parameters. The win32 ``GetWindowRect`` function retrieves the dimensions of a specified window by copying them into @@ -1832,7 +1831,7 @@ Utility functions Try to find a library and return a pathname. *name* is the library name without any prefix like ``lib``, suffix like ``.so``, ``.dylib`` or version - number (this is the form used for the posix linker option :option:`-l`). If + number (this is the form used for the posix linker option :option:`!-l`). If no library can be found, returns ``None``. The exact functionality is system dependent. diff --git a/Doc/library/curses.ascii.rst b/Doc/library/curses.ascii.rst index f3661d9..b6ac251 100644 --- a/Doc/library/curses.ascii.rst +++ b/Doc/library/curses.ascii.rst @@ -115,12 +115,12 @@ C library: .. function:: isblank(c) - Checks for an ASCII whitespace character. + Checks for an ASCII whitespace character; space or horizontal tab. .. function:: iscntrl(c) - Checks for an ASCII control character (in the range 0x00 to 0x1f). + Checks for an ASCII control character (in the range 0x00 to 0x1f or 0x7f). .. function:: isdigit(c) @@ -213,7 +213,7 @@ it returns a string. Return a string representation of the ASCII character *c*. If *c* is printable, this string is the character itself. If the character is a control character - (0x00-0x1f) the string consists of a caret (``'^'``) followed by the + (0x00--0x1f) the string consists of a caret (``'^'``) followed by the corresponding uppercase letter. If the character is an ASCII delete (0x7f) the string is ``'^?'``. If the character has its meta bit (0x80) set, the meta bit is stripped, the preceding rules applied, and ``'!'`` prepended to the result. diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst index b12a325..d746eaf 100644 --- a/Doc/library/curses.rst +++ b/Doc/library/curses.rst @@ -316,7 +316,7 @@ The module :mod:`curses` defines the following functions: Return the name of the key numbered *k*. The name of a key generating printable ASCII character is the key's character. The name of a control-key combination is a two-character string consisting of a caret followed by the corresponding - printable ASCII character. The name of an alt-key combination (128-255) is a + printable ASCII character. The name of an alt-key combination (128--255) is a string consisting of the prefix 'M-' followed by the name of the corresponding ASCII character. diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst index 9254ae8..4f3cfe3 100644 --- a/Doc/library/datetime.rst +++ b/Doc/library/datetime.rst @@ -1296,8 +1296,8 @@ Using datetime with tzinfo: .. _datetime-time: -:class:`time` Objects ---------------------- +:class:`.time` Objects +---------------------- A time object represents a (local) time of day, independent of any particular day, and subject to adjustment via a :class:`tzinfo` object. @@ -1382,7 +1382,7 @@ Supported operations: ``!=``. The latter cases return :const:`False` or :const:`True`, respectively. .. versionchanged:: 3.3 - Equality comparisons between naive and aware :class:`time` instances + Equality comparisons between naive and aware :class:`~datetime.time` instances don't raise :exc:`TypeError`. * hash, use as dict key @@ -1460,7 +1460,7 @@ Instance methods: Example: - >>> from datetime import time, tzinfo + >>> from datetime import time, tzinfo, timedelta >>> class GMT1(tzinfo): ... def utcoffset(self, dt): ... return timedelta(hours=1) diff --git a/Doc/library/dbm.rst b/Doc/library/dbm.rst index 6f64196..2a1db91 100644 --- a/Doc/library/dbm.rst +++ b/Doc/library/dbm.rst @@ -128,6 +128,9 @@ The individual submodules are described in the following sections. :platform: Unix :synopsis: GNU's reinterpretation of dbm. +**Source code:** :source:`Lib/dbm/gnu.py` + +-------------- This module is quite similar to the :mod:`dbm` module, but uses the GNU library ``gdbm`` instead to provide some additional functionality. Please note that the @@ -237,6 +240,9 @@ supported. :platform: Unix :synopsis: The standard "database" interface, based on ndbm. +**Source code:** :source:`Lib/dbm/ndbm.py` + +-------------- The :mod:`dbm.ndbm` module provides an interface to the Unix "(n)dbm" library. Dbm objects behave like mappings (dictionaries), except that keys and values are @@ -299,6 +305,8 @@ to locate the appropriate header file to simplify building this module. .. module:: dbm.dumb :synopsis: Portable implementation of the simple DBM interface. +**Source code:** :source:`Lib/dbm/dumb.py` + .. index:: single: databases .. note:: @@ -308,6 +316,8 @@ to locate the appropriate header file to simplify building this module. module is not written for speed and is not nearly as heavily used as the other database modules. +-------------- + The :mod:`dbm.dumb` module provides a persistent dictionary-like interface which is written entirely in Python. Unlike other modules such as :mod:`dbm.gnu` no external library is required. As with other persistent mappings, the keys and diff --git a/Doc/library/decimal.rst b/Doc/library/decimal.rst index 528f97b..b5ce0b1 100644 --- a/Doc/library/decimal.rst +++ b/Doc/library/decimal.rst @@ -163,7 +163,7 @@ an exception:: >>> c.traps[FloatOperation] = True >>> Decimal(3.14) Traceback (most recent call last): - File "", line 1, in + File "", line 1, in decimal.FloatOperation: [] >>> Decimal('3.5') < 3.7 Traceback (most recent call last): @@ -836,11 +836,13 @@ Decimal objects .. method:: to_eng_string(context=None) - Convert to an engineering-type string. + Convert to a string, using engineering notation if an exponent is needed. + + Engineering notation has an exponent which is a multiple of 3. This + can leave up to 3 digits to the left of the decimal place and may + require the addition of either one or two trailing zeros. - Engineering notation has an exponent which is a multiple of 3, so there - are up to 3 digits left of the decimal place. For example, converts - ``Decimal('123E+1')`` to ``Decimal('1.23E+3')``. + For example, this converts ``Decimal('123E+1')`` to ``Decimal('1.23E+3')``. .. method:: to_integral(rounding=None, context=None) @@ -1410,7 +1412,11 @@ In addition to the three supplied contexts, new contexts can be created with the .. method:: to_eng_string(x) - Converts a number to a string, using scientific notation. + Convert to a string, using engineering notation if an exponent is needed. + + Engineering notation has an exponent which is a multiple of 3. This + can leave up to 3 digits to the left of the decimal place and may + require the addition of either one or two trailing zeros. .. method:: to_integral_exact(x) diff --git a/Doc/library/difflib.rst b/Doc/library/difflib.rst index 59a6478..6743bdc 100644 --- a/Doc/library/difflib.rst +++ b/Doc/library/difflib.rst @@ -170,8 +170,7 @@ diffs. For comparing directories and files, see also, the :mod:`filecmp` module. >>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n'] >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n'] - >>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'): - ... sys.stdout.write(line) # doctest: +NORMALIZE_WHITESPACE + >>> sys.stdout.writelines(context_diff(s1, s2, fromfile='before.py', tofile='after.py')) *** before.py --- after.py *************** @@ -209,7 +208,7 @@ diffs. For comparing directories and files, see also, the :mod:`filecmp` module. >>> import keyword >>> get_close_matches('wheel', keyword.kwlist) ['while'] - >>> get_close_matches('apple', keyword.kwlist) + >>> get_close_matches('pineapple', keyword.kwlist) [] >>> get_close_matches('accept', keyword.kwlist) ['except'] @@ -303,8 +302,7 @@ diffs. For comparing directories and files, see also, the :mod:`filecmp` module. >>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n'] >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n'] - >>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'): - ... sys.stdout.write(line) # doctest: +NORMALIZE_WHITESPACE + >>> sys.stdout.writelines(unified_diff(s1, s2, fromfile='before.py', tofile='after.py')) --- before.py +++ after.py @@ -1,4 +1,4 @@ diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst index d2d8ac7..f86725b 100644 --- a/Doc/library/dis.rst +++ b/Doc/library/dis.rst @@ -56,12 +56,12 @@ code. notably :func:`get_instructions`, as iterating over a :class:`Bytecode` instance yields the bytecode operations as :class:`Instruction` instances. - If *first_line* is not None, it indicates the line number that should be + If *first_line* is not ``None``, it indicates the line number that should be reported for the first source line in the disassembled code. Otherwise, the source line information (if any) is taken directly from the disassembled code object. - If *current_offset* is not None, it refers to an instruction offset in the + If *current_offset* is not ``None``, it refers to an instruction offset in the disassembled code. Setting this means :meth:`.dis` will display a "current instruction" marker against the specified opcode. @@ -197,7 +197,7 @@ operation is being performed, so the intermediate analysis object isn't useful: The iterator generates a series of :class:`Instruction` named tuples giving the details of each operation in the supplied code. - If *first_line* is not None, it indicates the line number that should be + If *first_line* is not ``None``, it indicates the line number that should be reported for the first source line in the disassembled code. Otherwise, the source line information (if any) is taken directly from the disassembled code object. @@ -249,7 +249,7 @@ details of bytecode instructions as :class:`Instruction` instances: .. data:: arg - numeric argument to operation (if any), otherwise None + numeric argument to operation (if any), otherwise ``None`` .. data:: argval @@ -269,7 +269,7 @@ details of bytecode instructions as :class:`Instruction` instances: .. data:: starts_line - line started by this opcode (if any), otherwise None + line started by this opcode (if any), otherwise ``None`` .. data:: is_jump_target diff --git a/Doc/library/doctest.rst b/Doc/library/doctest.rst index c58f417..131206d 100644 --- a/Doc/library/doctest.rst +++ b/Doc/library/doctest.rst @@ -88,14 +88,18 @@ Here's a complete but small example module:: doctest.testmod() If you run :file:`example.py` directly from the command line, :mod:`doctest` -works its magic:: +works its magic: + +.. code-block:: shell-session $ python example.py $ There's no output! That's normal, and it means all the examples worked. Pass ``-v`` to the script, and :mod:`doctest` prints a detailed log of what -it's trying, and prints a summary at the end:: +it's trying, and prints a summary at the end: + +.. code-block:: shell-session $ python example.py -v Trying: @@ -109,7 +113,9 @@ it's trying, and prints a summary at the end:: [1, 1, 2, 6, 24, 120] ok -And so on, eventually ending with:: +And so on, eventually ending with: + +.. code-block:: none Trying: factorial(1e100) @@ -196,7 +202,9 @@ file. This can be done with the :func:`testfile` function:: That short script executes and verifies any interactive Python examples contained in the file :file:`example.txt`. The file content is treated as if it were a single giant docstring; the file doesn't need to contain a Python -program! For example, perhaps :file:`example.txt` contains this:: +program! For example, perhaps :file:`example.txt` contains this: + +.. code-block:: none The ``example`` module ====================== @@ -1207,7 +1215,7 @@ DocTest Objects .. attribute:: docstring - The string that the test was extracted from, or 'None' if the string is + The string that the test was extracted from, or ``None`` if the string is unavailable, or if the test was not extracted from a string. @@ -1312,7 +1320,7 @@ DocTestFinder objects not specified, then ``obj.__name__`` is used. The optional parameter *module* is the module that contains the given object. - If the module is not specified or is None, then the test finder will attempt + If the module is not specified or is ``None``, then the test finder will attempt to automatically determine the correct module. The object's module is used: * As a default namespace, if *globs* is not specified. diff --git a/Doc/library/email-examples.rst b/Doc/library/email-examples.rst index cbbcb78..ad93b5c 100644 --- a/Doc/library/email-examples.rst +++ b/Doc/library/email-examples.rst @@ -59,9 +59,11 @@ way we could process it: .. literalinclude:: ../includes/email-read-alternative-new-api.py -Up to the prompt, the output from the above is:: +Up to the prompt, the output from the above is: - To: Penelope Pussycat <"penelope@example.com">, Fabrette Pussycat <"fabrette@example.com"> +.. code-block:: none + + To: Penelope Pussycat , Fabrette Pussycat From: Pepé Le Pew Subject: Ayons asperges pour le déjeuner diff --git a/Doc/library/email.contentmanager.rst b/Doc/library/email.contentmanager.rst index cd63728..a9c078b 100644 --- a/Doc/library/email.contentmanager.rst +++ b/Doc/library/email.contentmanager.rst @@ -347,7 +347,7 @@ Currently the email package provides only one concrete content manager, .. method:: get_content(msg, errors='replace') - Return the payload of the part as either a string (for ``text`` parts), a + Return the payload of the part as either a string (for ``text`` parts), an :class:`~email.message.EmailMessage` object (for ``message/rfc822`` parts), or a ``bytes`` object (for all other non-multipart types). Raise a :exc:`KeyError` if called on a ``multipart``. If the part is a @@ -433,5 +433,5 @@ Currently the email package provides only one concrete content manager, If *headers* is specified and is a list of strings of the form ``headername: headervalue`` or a list of ``header`` objects - (distinguised from strings by having a ``name`` attribute), add the + (distinguished from strings by having a ``name`` attribute), add the headers to *msg*. diff --git a/Doc/library/email.iterators.rst b/Doc/library/email.iterators.rst index f3e9e18..d53ab33 100644 --- a/Doc/library/email.iterators.rst +++ b/Doc/library/email.iterators.rst @@ -50,9 +50,9 @@ The following function has been added as a useful debugging tool. It should .. testsetup:: - >>> import email - >>> from email.iterators import _structure - >>> somefile = open('Lib/test/test_email/data/msg_02.txt') + import email + from email.iterators import _structure + somefile = open('../Lib/test/test_email/data/msg_02.txt') .. doctest:: @@ -74,9 +74,9 @@ The following function has been added as a useful debugging tool. It should text/plain text/plain - .. testsetup:: + .. testcleanup:: - >>> somefile.close() + somefile.close() Optional *fp* is a file-like object to print the output to. It must be suitable for Python's :func:`print` function. *level* is used internally. diff --git a/Doc/library/email.message.rst b/Doc/library/email.message.rst index 91a694f..2907975 100644 --- a/Doc/library/email.message.rst +++ b/Doc/library/email.message.rst @@ -602,10 +602,10 @@ Here are the methods of the :class:`Message` class: .. testsetup:: - >>> from email import message_from_binary_file - >>> with open('Lib/test/test_email/data/msg_16.txt', 'rb') as f: - ... msg = message_from_binary_file(f) - >>> from email.iterators import _structure + from email import message_from_binary_file + with open('../Lib/test/test_email/data/msg_16.txt', 'rb') as f: + msg = message_from_binary_file(f) + from email.iterators import _structure .. doctest:: @@ -628,7 +628,7 @@ Here are the methods of the :class:`Message` class: .. doctest:: >>> for part in msg.walk(): - ... print(part.get_content_maintype() == 'multipart'), + ... print(part.get_content_maintype() == 'multipart', ... part.is_multipart()) True True False False @@ -640,11 +640,11 @@ Here are the methods of the :class:`Message` class: >>> _structure(msg) multipart/report text/plain - message/delivery-status - text/plain - text/plain - message/rfc822 - text/plain + message/delivery-status + text/plain + text/plain + message/rfc822 + text/plain Here the ``message`` parts are not ``multiparts``, but they do contain subparts. ``is_multipart()`` returns ``True`` and ``walk`` descends diff --git a/Doc/library/email.parser.rst b/Doc/library/email.parser.rst index 93c09ad..b8eb7c5 100644 --- a/Doc/library/email.parser.rst +++ b/Doc/library/email.parser.rst @@ -202,12 +202,12 @@ have the same API as the :class:`Parser` and :class:`BytesParser` classes. reading the headers or not. The default is ``False``, meaning it parses the entire contents of the file. - .. method:: parsebytes(bytes, headersonly=False) + .. method:: parsebytes(text, headersonly=False) - Similar to the :meth:`parse` method, except it takes a byte string object - instead of a file-like object. Calling this method on a byte string is - exactly equivalent to wrapping *text* in a :class:`~io.BytesIO` instance - first and calling :meth:`parse`. + Similar to the :meth:`parse` method, except it takes a :term:`bytes-like + object` instead of a file-like object. Calling this method is equivalent + to wrapping *text* in a :class:`~io.BytesIO` instance first and calling + :meth:`parse`. Optional *headersonly* is as with the :meth:`parse` method. @@ -233,7 +233,7 @@ in the top-level :mod:`email` package namespace. .. function:: message_from_bytes(s, _class=email.message.Message, *, \ policy=policy.compat32) - Return a message object structure from a byte string. This is exactly + Return a message object structure from a :term:`bytes-like object`. This is exactly equivalent to ``BytesParser().parsebytes(s)``. Optional *_class* and *strict* are interpreted as with the :class:`~email.parser.Parser` class constructor. @@ -250,7 +250,7 @@ in the top-level :mod:`email` package namespace. and *policy* are interpreted as with the :class:`~email.parser.Parser` class constructor. - .. versionchanged:: + .. versionchanged:: 3.3 Removed the *strict* argument. Added the *policy* keyword. .. function:: message_from_binary_file(fp, _class=email.message.Message, *, \ diff --git a/Doc/library/email.policy.rst b/Doc/library/email.policy.rst index 47f3212..2a6047d 100644 --- a/Doc/library/email.policy.rst +++ b/Doc/library/email.policy.rst @@ -63,16 +63,15 @@ file on disk and pass it to the system ``sendmail`` program on a Unix system: .. testsetup:: - >>> from unittest import mock - >>> mocker = mock.patch('subprocess.Popen') - >>> m = mocker.start() - >>> proc = mock.MagicMock() - >>> m.return_value = proc - >>> proc.stdin.close.return_value = None - >>> mymsg = open('mymsg.txt', 'w') - >>> mymsg.write('To: abc@xyz.com\n\n') - 17 - >>> mymsg.flush() + from unittest import mock + mocker = mock.patch('subprocess.Popen') + m = mocker.start() + proc = mock.MagicMock() + m.return_value = proc + proc.stdin.close.return_value = None + mymsg = open('mymsg.txt', 'w') + mymsg.write('To: abc@xyz.com\n\n') + mymsg.flush() .. doctest:: @@ -88,12 +87,12 @@ file on disk and pass it to the system ``sendmail`` program on a Unix system: >>> p.stdin.close() >>> rc = p.wait() -.. testsetup:: +.. testcleanup:: - >>> mymsg.close() - >>> mocker.stop() - >>> import os - >>> os.remove('mymsg.txt') + mymsg.close() + mocker.stop() + import os + os.remove('mymsg.txt') Here we are telling :class:`~email.generator.BytesGenerator` to use the RFC correct line separator characters when creating the binary string to feed into diff --git a/Doc/library/ensurepip.rst b/Doc/library/ensurepip.rst index 6aeeabc..c797f63 100644 --- a/Doc/library/ensurepip.rst +++ b/Doc/library/ensurepip.rst @@ -96,7 +96,7 @@ Module API Bootstraps ``pip`` into the current or designated environment. *root* specifies an alternative root directory to install relative to. - If *root* is None, then installation uses the default install location + If *root* is ``None``, then installation uses the default install location for the current environment. *upgrade* indicates whether or not to upgrade an existing installation diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index 60467b4..a3d5afc 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -431,7 +431,7 @@ The solution is to specify the module name explicitly as follows:: the source, pickling will be disabled. The new pickle protocol 4 also, in some circumstances, relies on -:attr:`__qualname__` being set to the location where pickle will be able +:attr:`~definition.__qualname__` being set to the location where pickle will be able to find the class. For example, if the class was made available in class SomeData in the global scope:: diff --git a/Doc/library/fnmatch.rst b/Doc/library/fnmatch.rst index 85ac484..9fc9c7c 100644 --- a/Doc/library/fnmatch.rst +++ b/Doc/library/fnmatch.rst @@ -74,7 +74,8 @@ patterns. .. function:: translate(pattern) - Return the shell-style *pattern* converted to a regular expression. + Return the shell-style *pattern* converted to a regular expression for + using with :func:`re.match`. Example: diff --git a/Doc/library/ftplib.rst b/Doc/library/ftplib.rst index 233e11f..1e35f37 100644 --- a/Doc/library/ftplib.rst +++ b/Doc/library/ftplib.rst @@ -57,7 +57,7 @@ The module defines the following items: >>> with FTP("ftp1.at.proftpd.org") as ftp: ... ftp.login() ... ftp.dir() - ... + ... # doctest: +SKIP '230 Anonymous login ok, restrictions apply.' dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 . dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .. diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index c3563f3..2f14949 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -304,7 +304,7 @@ are always available. They are listed here in alphabetical order. :func:`dir` reports their attributes. If the object does not provide :meth:`__dir__`, the function tries its best to - gather information from the object's :attr:`__dict__` attribute, if defined, and + gather information from the object's :attr:`~object.__dict__` attribute, if defined, and from its type object. The resulting list is not necessarily complete, and may be inaccurate when the object has a custom :func:`__getattr__`. @@ -686,7 +686,7 @@ are always available. They are listed here in alphabetical order. preceded by ``+`` or ``-`` (with no space in between) and surrounded by whitespace. A base-n literal consists of the digits 0 to n-1, with ``a`` to ``z`` (or ``A`` to ``Z``) having - values 10 to 35. The default *base* is 10. The allowed values are 0 and 2-36. + values 10 to 35. The default *base* is 10. The allowed values are 0 and 2--36. Base-2, -8, and -16 literals can be optionally prefixed with ``0b``/``0B``, ``0o``/``0O``, or ``0x``/``0X``, as with integer literals in code. Base 0 means to interpret exactly as a code literal, so that the actual base is 2, @@ -949,7 +949,7 @@ are always available. They are listed here in alphabetical order. the list of supported encodings. *errors* is an optional string that specifies how encoding and decoding - errors are to be handled--this cannot be used in binary mode. + errors are to be handled—this cannot be used in binary mode. A variety of standard error handlers are available (listed under :ref:`error-handlers`), though any error handling name that has been registered with @@ -1234,8 +1234,8 @@ are always available. They are listed here in alphabetical order. .. function:: round(number[, ndigits]) Return the floating point value *number* rounded to *ndigits* digits after - the decimal point. If *ndigits* is omitted, it returns the nearest integer - to its input. Delegates to ``number.__round__(ndigits)``. + the decimal point. If *ndigits* is omitted or is ``None``, it returns the + nearest integer to its input. Delegates to ``number.__round__(ndigits)``. For the built-in types supporting :func:`round`, values are rounded to the closest multiple of 10 to the power minus *ndigits*; if two multiples are @@ -1446,7 +1446,7 @@ are always available. They are listed here in alphabetical order. With three arguments, return a new type object. This is essentially a dynamic form of the :keyword:`class` statement. The *name* string is the - class name and becomes the :attr:`~class.__name__` attribute; the *bases* + class name and becomes the :attr:`~definition.__name__` attribute; the *bases* tuple itemizes the base classes and becomes the :attr:`~class.__bases__` attribute; and the *dict* dictionary is the namespace containing definitions for class body and is copied to a standard dictionary to become the @@ -1464,12 +1464,12 @@ are always available. They are listed here in alphabetical order. .. function:: vars([object]) Return the :attr:`~object.__dict__` attribute for a module, class, instance, - or any other object with a :attr:`__dict__` attribute. + or any other object with a :attr:`~object.__dict__` attribute. - Objects such as modules and instances have an updateable :attr:`__dict__` + Objects such as modules and instances have an updateable :attr:`~object.__dict__` attribute; however, other objects may have write restrictions on their - :attr:`__dict__` attributes (for example, classes use a - dictproxy to prevent direct dictionary updates). + :attr:`~object.__dict__` attributes (for example, classes use a + :class:`types.MappingProxyType` to prevent direct dictionary updates). Without an argument, :func:`vars` acts like :func:`locals`. Note, the locals dictionary is only useful for reads since updates to the locals diff --git a/Doc/library/functools.rst b/Doc/library/functools.rst index abdd66f..9a8defe 100644 --- a/Doc/library/functools.rst +++ b/Doc/library/functools.rst @@ -52,11 +52,11 @@ The :mod:`functools` module defines the following functions: Since a dictionary is used to cache results, the positional and keyword arguments to the function must be hashable. - If *maxsize* is set to None, the LRU feature is disabled and the cache can + If *maxsize* is set to ``None``, the LRU feature is disabled and the cache can grow without bound. The LRU feature performs best when *maxsize* is a power-of-two. - If *typed* is set to True, function arguments of different types will be + If *typed* is set to true, function arguments of different types will be cached separately. For example, ``f(3)`` and ``f(3.0)`` will be treated as distinct calls with distinct results. @@ -474,7 +474,7 @@ have three read-only attributes: :class:`partial` objects are like :class:`function` objects in that they are callable, weak referencable, and can have attributes. There are some important -differences. For instance, the :attr:`__name__` and :attr:`__doc__` attributes +differences. For instance, the :attr:`~definition.__name__` and :attr:`__doc__` attributes are not created automatically. Also, :class:`partial` objects defined in classes behave like static methods and do not transform into bound methods during instance attribute look-up. diff --git a/Doc/library/gc.rst b/Doc/library/gc.rst index 4af16a9..87d6824 100644 --- a/Doc/library/gc.rst +++ b/Doc/library/gc.rst @@ -38,7 +38,7 @@ The :mod:`gc` module provides the following functions: Returns true if automatic collection is enabled. -.. function:: collect(generations=2) +.. function:: collect(generation=2) With no arguments, run a full collection. The optional argument *generation* may be an integer specifying which generation to collect (from 0 to 2). A diff --git a/Doc/library/gettext.rst b/Doc/library/gettext.rst index ea439b5..3a87bf5 100644 --- a/Doc/library/gettext.rst +++ b/Doc/library/gettext.rst @@ -621,7 +621,7 @@ In this case, you are marking translatable strings with the function However, you will need to teach your message extraction program to look for translatable strings marked with :func:`N_`. :program:`xgettext`, :program:`pygettext`, ``pybabel extract``, and :program:`xpot` all -support this through the use of the :option:`-k` command-line switch. +support this through the use of the :option:`!-k` command-line switch. The choice of :func:`N_` here is totally arbitrary; it could have just as easily been :func:`MarkThisStringForTranslation`. diff --git a/Doc/library/hashlib.rst b/Doc/library/hashlib.rst index 30be335..a2e96ca 100644 --- a/Doc/library/hashlib.rst +++ b/Doc/library/hashlib.rst @@ -13,6 +13,11 @@ single: message digest, MD5 single: secure hash algorithm, SHA1, SHA224, SHA256, SHA384, SHA512 +.. testsetup:: + + import hashlib + + -------------- This module implements a common interface to many different secure hash and diff --git a/Doc/library/hmac.rst b/Doc/library/hmac.rst index bb44866..adbf78a 100644 --- a/Doc/library/hmac.rst +++ b/Doc/library/hmac.rst @@ -111,7 +111,7 @@ This module also provides the following helper function: If *a* and *b* are of different lengths, or if an error occurs, a timing attack could theoretically reveal information about the - types and lengths of *a* and *b*--but not their values. + types and lengths of *a* and *b*—but not their values. .. versionadded:: 3.3 diff --git a/Doc/library/html.parser.rst b/Doc/library/html.parser.rst index 16abb40..ac844a6 100644 --- a/Doc/library/html.parser.rst +++ b/Doc/library/html.parser.rst @@ -61,7 +61,9 @@ as they are encountered:: parser.feed('Test' '

Parse me!

') -The output will then be:: +The output will then be: + +.. code-block:: none Encountered a start tag: html Encountered a start tag: head diff --git a/Doc/library/http.client.rst b/Doc/library/http.client.rst index 8954648..e1acf92 100644 --- a/Doc/library/http.client.rst +++ b/Doc/library/http.client.rst @@ -20,7 +20,7 @@ HTTPS protocols. It is normally not used directly --- the module .. seealso:: - The `Requests package `_ + The `Requests package `_ is recommended for a higher-level HTTP client interface. .. note:: @@ -31,8 +31,7 @@ HTTPS protocols. It is normally not used directly --- the module The module provides the following classes: -.. class:: HTTPConnection(host, port=None[, timeout], \ - source_address=None) +.. class:: HTTPConnection(host, port=None[, timeout], source_address=None) An :class:`HTTPConnection` instance represents one transaction with an HTTP server. It should be instantiated passing it a host and optional port @@ -196,7 +195,6 @@ The constants defined in this module are: The default port for the HTTP protocol (always ``80``). - .. data:: HTTPS_PORT The default port for the HTTPS protocol (always ``443``). @@ -227,12 +225,12 @@ HTTPConnection Objects If *body* is specified, the specified data is sent after the headers are finished. It may be a string, a :term:`bytes-like object`, an open :term:`file object`, or an iterable of :term:`bytes-like object`\s. If - *body* is a string, it is encoded as ISO-8851-1, the default for HTTP. If + *body* is a string, it is encoded as ISO-8859-1, the default for HTTP. If it is a bytes-like object the bytes are sent as is. If it is a :term:`file object`, the contents of the file is sent; this file object should support at least the ``read()`` method. If the file object has a ``mode`` attribute, the data returned by the ``read()`` method will be encoded as - ISO-8851-1 unless the ``mode`` attribute contains the substring ``b``, + ISO-8859-1 unless the ``mode`` attribute contains the substring ``b``, otherwise the data returned by ``read()`` is sent as is. If *body* is an iterable, the elements of the iterable are sent as is until the iterable is exhausted. @@ -318,14 +316,15 @@ As an alternative to using the :meth:`request` method described above, you can also send your request step by step, by using the four functions below. -.. method:: HTTPConnection.putrequest(request, selector, skip_host=False, skip_accept_encoding=False) +.. method:: HTTPConnection.putrequest(method, url, skip_host=False, \ + skip_accept_encoding=False) - This should be the first call after the connection to the server has been made. - It sends a line to the server consisting of the *request* string, the *selector* - string, and the HTTP version (``HTTP/1.1``). To disable automatic sending of - ``Host:`` or ``Accept-Encoding:`` headers (for example to accept additional - content encodings), specify *skip_host* or *skip_accept_encoding* with non-False - values. + This should be the first call after the connection to the server has been + made. It sends a line to the server consisting of the *method* string, + the *url* string, and the HTTP version (``HTTP/1.1``). To disable automatic + sending of ``Host:`` or ``Accept-Encoding:`` headers (for example to accept + additional content encodings), specify *skip_host* or *skip_accept_encoding* + with non-False values. .. method:: HTTPConnection.putheader(header, argument[, ...]) @@ -384,7 +383,6 @@ statement. return all of the values joined by ', '. If 'default' is any iterable other than a single string, its elements are similarly returned joined by commas. - .. method:: HTTPResponse.getheaders() Return a list of (header, value) tuples. @@ -399,22 +397,18 @@ statement. headers. :class:`http.client.HTTPMessage` is a subclass of :class:`email.message.Message`. - .. attribute:: HTTPResponse.version HTTP protocol version used by server. 10 for HTTP/1.0, 11 for HTTP/1.1. - .. attribute:: HTTPResponse.status Status code returned by server. - .. attribute:: HTTPResponse.reason Reason phrase returned by server. - .. attribute:: HTTPResponse.debuglevel A debugging hook. If :attr:`debuglevel` is greater than zero, messages diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst index 16c4fac..ae7fb97 100644 --- a/Doc/library/http.server.rst +++ b/Doc/library/http.server.rst @@ -277,7 +277,7 @@ of which this module provides three different variants: .. method:: date_time_string(timestamp=None) - Returns the date and time given by *timestamp* (which must be None or in + Returns the date and time given by *timestamp* (which must be ``None`` or in the format returned by :func:`time.time`), formatted for a message header. If *timestamp* is omitted, it uses the current date and time. diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst index 9ca92ce..a629bc5 100644 --- a/Doc/library/idle.rst +++ b/Doc/library/idle.rst @@ -226,6 +226,9 @@ View Last Restart Restart Shell Restart the shell to clean the environment. +Interrupt Execution + Stop a running program. + Debug menu (Shell window only) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -524,14 +527,14 @@ functions to be used from IDLE's Python shell. Command line usage ^^^^^^^^^^^^^^^^^^ -:: +.. code-block:: none idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ... -c command run command in the shell window -d enable debugger and open shell window -e open editor window - -h print help message with legal combinatios and exit + -h print help message with legal combinations and exit -i open shell window -r file run file in shell window -s run $IDLESTARTUP or $PYTHONSTARTUP first, in shell window @@ -562,11 +565,13 @@ objects that get input from and send output to the Shell window. When this window has the focus, it controls the keyboard and screen. This is normally transparent, but functions that directly access the keyboard and screen will not work. If ``sys`` is reset with ``importlib.reload(sys)``, -IDLE's changes are lost and things li ke ``input``, ``raw_input``, and +IDLE's changes are lost and things like ``input``, ``raw_input``, and ``print`` will not work correctly. With IDLE's Shell, one enters, edits, and recalls complete statements. -Some consoles only work with a single physical line at a time. +Some consoles only work with a single physical line at a time. IDLE uses +``exec`` to run each statement. As a result, ``'__builtins__'`` is always +defined for each statement. Running without a subprocess ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/Doc/library/imaplib.rst b/Doc/library/imaplib.rst index c25e7d8..771ca43 100644 --- a/Doc/library/imaplib.rst +++ b/Doc/library/imaplib.rst @@ -120,7 +120,7 @@ The following utility functions are defined: Parse an IMAP4 ``INTERNALDATE`` string and return corresponding local time. The return value is a :class:`time.struct_time` tuple or - None if the string has wrong format. + ``None`` if the string has wrong format. .. function:: Int2AP(num) diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst index 3302446..526c9f3 100644 --- a/Doc/library/importlib.rst +++ b/Doc/library/importlib.rst @@ -1,5 +1,5 @@ -:mod:`importlib` -- The implementation of :keyword:`import` -=========================================================== +:mod:`importlib` --- The implementation of :keyword:`import` +============================================================ .. module:: importlib :synopsis: The implementation of the import machinery. @@ -118,7 +118,7 @@ Functions :exc:`ValueError` is raised). Otherwise a search using :attr:`sys.meta_path` is done. ``None`` is returned if no loader is found. - A dotted name does not have its parent's implicitly imported as that requires + A dotted name does not have its parents implicitly imported as that requires loading them and that may not be desired. To properly import a submodule you will need to import all parent packages of the submodule and use the correct argument to *path*. @@ -211,6 +211,11 @@ Functions .. module:: importlib.abc :synopsis: Abstract base classes related to import +**Source code:** :source:`Lib/importlib/abc.py` + +-------------- + + The :mod:`importlib.abc` module contains all of the core abstract base classes used by :keyword:`import`. Some subclasses of the core abstract base classes are also provided to help in implementing the core ABCs. @@ -624,7 +629,7 @@ ABC hierarchy:: .. method:: path_stats(path) Optional abstract method which returns a :class:`dict` containing - metadata about the specifed path. Supported dictionary keys are: + metadata about the specified path. Supported dictionary keys are: - ``'mtime'`` (mandatory): an integer or floating-point number representing the modification time of the source code; @@ -700,6 +705,10 @@ ABC hierarchy:: .. module:: importlib.machinery :synopsis: Importers and path hooks +**Source code:** :source:`Lib/importlib/machinery.py` + +-------------- + This module contains the various objects that help :keyword:`import` find and load modules. @@ -1035,7 +1044,7 @@ find and load modules. (``__loader__``) The loader to use for loading. For namespace packages this should be - set to None. + set to ``None``. .. attribute:: origin @@ -1043,33 +1052,33 @@ find and load modules. Name of the place from which the module is loaded, e.g. "builtin" for built-in modules and the filename for modules loaded from source. - Normally "origin" should be set, but it may be None (the default) + Normally "origin" should be set, but it may be ``None`` (the default) which indicates it is unspecified. .. attribute:: submodule_search_locations (``__path__``) - List of strings for where to find submodules, if a package (None + List of strings for where to find submodules, if a package (``None`` otherwise). .. attribute:: loader_state Container of extra module-specific data for use during loading (or - None). + ``None``). .. attribute:: cached (``__cached__``) - String for where the compiled module should be stored (or None). + String for where the compiled module should be stored (or ``None``). .. attribute:: parent (``__package__``) (Read-only) Fully-qualified name of the package to which the module - belongs as a submodule (or None). + belongs as a submodule (or ``None``). .. attribute:: has_location @@ -1082,6 +1091,11 @@ find and load modules. .. module:: importlib.util :synopsis: Utility code for importers + +**Source code:** :source:`Lib/importlib/util.py` + +-------------- + This module contains the various objects that help in the construction of an :term:`importer`. diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst index b28d0f9..62a3988 100644 --- a/Doc/library/inspect.rst +++ b/Doc/library/inspect.rst @@ -152,9 +152,9 @@ attributes: | | co_firstlineno | number of first line in | | | | Python source code | +-----------+-----------------+---------------------------+ -| | co_flags | bitmap: 1=optimized ``|`` | -| | | 2=newlocals ``|`` 4=\*arg | -| | | ``|`` 8=\*\*arg | +| | co_flags | bitmap of ``CO_*`` flags, | +| | | read more :ref:`here | +| | | `| +-----------+-----------------+---------------------------+ | | co_lnotab | encoded mapping of line | | | | numbers to bytecode | @@ -374,8 +374,9 @@ attributes: are true. This, for example, is true of ``int.__add__``. An object passing this test - has a :attr:`__get__` attribute but not a :attr:`__set__` attribute, but - beyond that the set of attributes varies. :attr:`__name__` is usually + has a :meth:`~object.__get__` method but not a :meth:`~object.__set__` + method, but beyond that the set of attributes varies. A + :attr:`~definition.__name__` attribute is usually sensible, and :attr:`__doc__` often is. Methods implemented via descriptors that also pass one of the other tests @@ -388,11 +389,11 @@ attributes: Return true if the object is a data descriptor. - Data descriptors have both a :attr:`__get__` and a :attr:`__set__` attribute. + Data descriptors have both a :attr:`~object.__get__` and a :attr:`~object.__set__` method. Examples are properties (defined in Python), getsets, and members. The latter two are defined in C and there are more specific tests available for those types, which is robust across Python implementations. Typically, data - descriptors will also have :attr:`__name__` and :attr:`__doc__` attributes + descriptors will also have :attr:`~definition.__name__` and :attr:`__doc__` attributes (properties, getsets, and members have both of these attributes), but this is not guaranteed. @@ -1231,6 +1232,61 @@ updated as expected: .. versionadded:: 3.5 +.. _inspect-module-co-flags: + +Code Objects Bit Flags +---------------------- + +Python code objects have a ``co_flags`` attribute, which is a bitmap of +the following flags: + +.. data:: CO_NEWLOCALS + + If set, a new dict will be created for the frame's ``f_locals`` when + the code object is executed. + +.. data:: CO_VARARGS + + The code object has a variable positional parameter (``*args``-like). + +.. data:: CO_VARKEYWORDS + + The code object has a variable keyword parameter (``**kwargs``-like). + +.. data:: CO_GENERATOR + + The flag is set when the code object is a generator function, i.e. + a generator object is returned when the code object is executed. + +.. data:: CO_NOFREE + + The flag is set if there are no free or cell variables. + +.. data:: CO_COROUTINE + + The flag is set when the code object is a coroutine function, i.e. + a coroutine object is returned when the code object is executed. See + :pep:`492` for more details. + + .. versionadded:: 3.5 + +.. data:: CO_ITERABLE_COROUTINE + + Used to turn generators into generator-based coroutines. Generator + objects with this flag can be used in ``await`` expression, and can + ``yield from`` coroutine objects. See :pep:`492` for more details. + + .. versionadded:: 3.5 + +.. note:: + The flags are specific to CPython, and may not be defined in other + Python implementations. Furthermore, the flags are an implementation + detail, and can be removed or deprecated in future Python releases. + It's recommended to use public APIs from the :mod:`inspect` module + for any introspection needs. + + + .. _inspect-module-cli: Command Line Interface diff --git a/Doc/library/io.rst b/Doc/library/io.rst index 23df18f..4da6e09 100644 --- a/Doc/library/io.rst +++ b/Doc/library/io.rst @@ -537,7 +537,7 @@ Raw File I/O The *name* can be one of two things: * a character string or :class:`bytes` object representing the path to the - file which will be opened. In this case closefd must be True (the default) + file which will be opened. In this case closefd must be ``True`` (the default) otherwise an error will be raised. * an integer representing the number of an existing OS-level file descriptor to which the resulting :class:`FileIO` object will give access. When the diff --git a/Doc/library/ipaddress.rst b/Doc/library/ipaddress.rst index 23526b6..50fb778 100644 --- a/Doc/library/ipaddress.rst +++ b/Doc/library/ipaddress.rst @@ -24,6 +24,10 @@ This is the full module API reference—for an overview and introduction, see .. versionadded:: 3.3 +.. testsetup:: + >>> import ipaddress + >>> from ipaddress import (ip_network, IPv4Address, IPv4Interface, + ... IPv4Network) Convenience factory functions ----------------------------- @@ -39,13 +43,6 @@ IP addresses, networks and interfaces: A :exc:`ValueError` is raised if *address* does not represent a valid IPv4 or IPv6 address. -.. testsetup:: - >>> import ipaddress - >>> from ipaddress import (ip_network, IPv4Address, IPv4Interface, - ... IPv4Network) - -:: - >>> ipaddress.ip_address('192.168.0.1') IPv4Address('192.168.0.1') >>> ipaddress.ip_address('2001:db8::') @@ -102,7 +99,7 @@ write code that handles both IP versions correctly. The following constitutes a valid IPv4 address: 1. A string in decimal-dot notation, consisting of four decimal integers in - the inclusive range 0-255, separated by dots (e.g. ``192.168.0.1``). Each + the inclusive range 0--255, separated by dots (e.g. ``192.168.0.1``). Each integer represents an octet (byte) in the address. Leading zeroes are tolerated only for values less than 8 (as there is no ambiguity between the decimal and octal interpretations of such strings). @@ -159,7 +156,7 @@ write code that handles both IP versions correctly. This is the name that could be used for performing a PTR lookup, not the resolved hostname itself. - .. versionadded:: 3.5 + .. versionadded:: 3.5 .. attribute:: is_multicast diff --git a/Doc/library/json.rst b/Doc/library/json.rst index 174e734..f487535 100644 --- a/Doc/library/json.rst +++ b/Doc/library/json.rst @@ -102,7 +102,7 @@ Extending :class:`JSONEncoder`:: .. highlight:: bash -Using json.tool from the shell to validate and pretty-print:: +Using :mod:`json.tool` from the shell to validate and pretty-print:: $ echo '{"json":"obj"}' | python -m json.tool { @@ -135,7 +135,7 @@ Basic Usage :term:`file-like object`) using this :ref:`conversion table `. - If *skipkeys* is ``True`` (default: ``False``), then dict keys that are not + If *skipkeys* is true (default: ``False``), then dict keys that are not of a basic type (:class:`str`, :class:`int`, :class:`float`, :class:`bool`, ``None``) will be skipped instead of raising a :exc:`TypeError`. @@ -143,18 +143,19 @@ Basic Usage :class:`bytes` objects. Therefore, ``fp.write()`` must support :class:`str` input. - If *ensure_ascii* is ``True`` (the default), the output is guaranteed to + If *ensure_ascii* is true (the default), the output is guaranteed to have all incoming non-ASCII characters escaped. If *ensure_ascii* is - ``False``, these characters will be output as-is. + false, these characters will be output as-is. - If *check_circular* is ``False`` (default: ``True``), then the circular + If *check_circular* is false (default: ``True``), then the circular reference check for container types will be skipped and a circular reference will result in an :exc:`OverflowError` (or worse). - If *allow_nan* is ``False`` (default: ``True``), then it will be a + If *allow_nan* is false (default: ``True``), then it will be a :exc:`ValueError` to serialize out of range :class:`float` values (``nan``, - ``inf``, ``-inf``) in strict compliance of the JSON specification, instead of - using the JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). + ``inf``, ``-inf``) in strict compliance of the JSON specification. + If *allow_nan* is true, their JavaScript equivalents (``NaN``, + ``Infinity``, ``-Infinity``) will be used. If *indent* is a non-negative integer or string, then JSON array elements and object members will be pretty-printed with that indent level. An indent level @@ -174,10 +175,12 @@ Basic Usage .. versionchanged:: 3.4 Use ``(',', ': ')`` as default if *indent* is not ``None``. - *default(obj)* is a function that should return a serializable version of - *obj* or raise :exc:`TypeError`. The default simply raises :exc:`TypeError`. + If specified, *default* should be a function that gets called for objects that + can't otherwise be serialized. It should return a JSON encodable version of + the object or raise a :exc:`TypeError`. If not specified, :exc:`TypeError` + is raised. - If *sort_keys* is ``True`` (default: ``False``), then the output of + If *sort_keys* is true (default: ``False``), then the output of dictionaries will be sorted by key. To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the @@ -329,13 +332,13 @@ Encoders and Decoders (e.g. :class:`float`). *parse_constant*, if specified, will be called with one of the following - strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``, ``'null'``, ``'true'``, - ``'false'``. This can be used to raise an exception if invalid JSON numbers + strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. + This can be used to raise an exception if invalid JSON numbers are encountered. - If *strict* is ``False`` (``True`` is the default), then control characters + If *strict* is false (``True`` is the default), then control characters will be allowed inside strings. Control characters in this context are - those with character codes in the 0-31 range, including ``'\t'`` (tab), + those with character codes in the 0--31 range, including ``'\t'`` (tab), ``'\n'``, ``'\r'`` and ``'\0'``. If the data being deserialized is not a valid JSON document, a @@ -393,26 +396,27 @@ Encoders and Decoders for ``o`` if possible, otherwise it should call the superclass implementation (to raise :exc:`TypeError`). - If *skipkeys* is ``False`` (the default), then it is a :exc:`TypeError` to - attempt encoding of keys that are not str, int, float or None. If - *skipkeys* is ``True``, such items are simply skipped. + If *skipkeys* is false (the default), then it is a :exc:`TypeError` to + attempt encoding of keys that are not :class:`str`, :class:`int`, + :class:`float` or ``None``. If *skipkeys* is true, such items are simply + skipped. - If *ensure_ascii* is ``True`` (the default), the output is guaranteed to + If *ensure_ascii* is true (the default), the output is guaranteed to have all incoming non-ASCII characters escaped. If *ensure_ascii* is - ``False``, these characters will be output as-is. + false, these characters will be output as-is. - If *check_circular* is ``True`` (the default), then lists, dicts, and custom + If *check_circular* is true (the default), then lists, dicts, and custom encoded objects will be checked for circular references during encoding to prevent an infinite recursion (which would cause an :exc:`OverflowError`). Otherwise, no such check takes place. - If *allow_nan* is ``True`` (the default), then ``NaN``, ``Infinity``, and + If *allow_nan* is true (the default), then ``NaN``, ``Infinity``, and ``-Infinity`` will be encoded as such. This behavior is not JSON specification compliant, but is consistent with most JavaScript based encoders and decoders. Otherwise, it will be a :exc:`ValueError` to encode such floats. - If *sort_keys* is ``True`` (default ``False``), then the output of dictionaries + If *sort_keys* is true (default: ``False``), then the output of dictionaries will be sorted by key; this is useful for regression tests to ensure that JSON serializations can be compared on a day-to-day basis. @@ -434,9 +438,10 @@ Encoders and Decoders .. versionchanged:: 3.4 Use ``(',', ': ')`` as default if *indent* is not ``None``. - If specified, *default* is a function that gets called for objects that can't - otherwise be serialized. It should return a JSON encodable version of the - object or raise a :exc:`TypeError`. + If specified, *default* should be a function that gets called for objects that + can't otherwise be serialized. It should return a JSON encodable version of + the object or raise a :exc:`TypeError`. If not specified, :exc:`TypeError` + is raised. .. method:: default(o) @@ -629,13 +634,19 @@ when serializing instances of "exotic" numerical types such as :class:`decimal.Decimal`. .. highlight:: bash -.. module:: json.tool .. _json-commandline: Command Line Interface ---------------------- +.. module:: json.tool + :synopsis: A command line to validate and pretty-print JSON. + +**Source code:** :source:`Lib/json/tool.py` + +-------------- + The :mod:`json.tool` module provides a simple command line interface to validate and pretty-print JSON objects. diff --git a/Doc/library/linecache.rst b/Doc/library/linecache.rst index ae3de9f..34fcac5 100644 --- a/Doc/library/linecache.rst +++ b/Doc/library/linecache.rst @@ -51,7 +51,7 @@ The :mod:`linecache` module defines the following functions: .. function:: lazycache(filename, module_globals) Capture enough detail about a non-file-based module to permit getting its - lines later via :func:`getline` even if *module_globals* is None in the later + lines later via :func:`getline` even if *module_globals* is ``None`` in the later call. This avoids doing I/O until a line is actually needed, without having to carry the module globals around indefinitely. diff --git a/Doc/library/logging.config.rst b/Doc/library/logging.config.rst index e196724..a68a890 100644 --- a/Doc/library/logging.config.rst +++ b/Doc/library/logging.config.rst @@ -126,10 +126,10 @@ in :mod:`logging` itself) and defining handlers which are declared either in Starts up a socket server on the specified port, and listens for new configurations. If no port is specified, the module's default :const:`DEFAULT_LOGGING_CONFIG_PORT` is used. Logging configurations will be - sent as a file suitable for processing by :func:`fileConfig`. Returns a - :class:`~threading.Thread` instance on which you can call - :meth:`~threading.Thread.start` to start the server, and which you can - :meth:`~threading.Thread.join` when appropriate. To stop the server, + sent as a file suitable for processing by :func:`dictConfig` or + :func:`fileConfig`. Returns a :class:`~threading.Thread` instance on which + you can call :meth:`~threading.Thread.start` to start the server, and which + you can :meth:`~threading.Thread.join` when appropriate. To stop the server, call :func:`stopListening`. The ``verify`` argument, if specified, should be a callable which should @@ -138,13 +138,13 @@ in :mod:`logging` itself) and defining handlers which are declared either in across the socket, such that the ``verify`` callable can perform signature verification and/or decryption. The ``verify`` callable is called with a single argument - the bytes received across the socket - and should - return the bytes to be processed, or None to indicate that the bytes should + return the bytes to be processed, or ``None`` to indicate that the bytes should be discarded. The returned bytes could be the same as the passed in bytes (e.g. when only verification is done), or they could be completely different (perhaps if decryption were performed). To send a configuration to the socket, read in the configuration file and - send it to the socket as a string of bytes preceded by a four-byte length + send it to the socket as a sequence of bytes preceded by a four-byte length string packed in binary using ``struct.pack('>L', n)``. .. note:: @@ -165,9 +165,18 @@ in :mod:`logging` itself) and defining handlers which are declared either in ``verify`` argument to :func:`listen` to prevent unrecognised configurations from being applied. - .. versionchanged:: 3.4. + .. versionchanged:: 3.4 The ``verify`` argument was added. + .. note:: + + If you want to send configurations to the listener which don't + disable existing loggers, you will need to use a JSON format for + the configuration, which will use :func:`dictConfig` for configuration. + This method allows you to specify ``disable_existing_loggers`` as + ``False`` in the configuration you send. + + .. function:: stopListening() Stops the listening server which was created with a call to :func:`listen`. @@ -243,7 +252,9 @@ otherwise, the context is used to determine what to instantiate. handler. All *other* keys are passed through as keyword arguments to the - handler's constructor. For example, given the snippet:: + handler's constructor. For example, given the snippet: + + .. code-block:: yaml handlers: console: @@ -352,7 +363,9 @@ it unambiguously, and then using the id in the source object's configuration to indicate that a connection exists between the source and the destination object with that id. -So, for example, consider the following YAML snippet:: +So, for example, consider the following YAML snippet: + +.. code-block:: yaml formatters: brief: @@ -409,7 +422,9 @@ to provide a 'factory' - a callable which is called with a configuration dictionary and which returns the instantiated object. This is signalled by an absolute import path to the factory being made available under the special key ``'()'``. Here's a concrete -example:: +example: + +.. code-block:: yaml formatters: brief: @@ -626,7 +641,9 @@ configuration must be specified in a section called ``[logger_root]``. :func:`dictConfig`, so it's worth considering transitioning to this newer API when it's convenient to do so. -Examples of these sections in the file are given below. :: +Examples of these sections in the file are given below. + +.. code-block:: ini [loggers] keys=root,log02,log03,log04,log05,log06,log07 @@ -638,7 +655,9 @@ Examples of these sections in the file are given below. :: keys=form01,form02,form03,form04,form05,form06,form07,form08,form09 The root logger must specify a level and a list of handlers. An example of a -root logger section is given below. :: +root logger section is given below. + +.. code-block:: ini [logger_root] level=NOTSET @@ -655,7 +674,9 @@ appear in the ``[handlers]`` section. These names must appear in the file. For loggers other than the root logger, some additional information is required. -This is illustrated by the following example. :: +This is illustrated by the following example. + +.. code-block:: ini [logger_parser] level=DEBUG @@ -673,7 +694,8 @@ indicate that messages are **not** propagated to handlers up the hierarchy. The say the name used by the application to get the logger. Sections which specify handler configuration are exemplified by the following. -:: + +.. code-block:: ini [handler_hand01] class=StreamHandler @@ -693,7 +715,9 @@ a corresponding section in the configuration file. The ``args`` entry, when :func:`eval`\ uated in the context of the ``logging`` package's namespace, is the list of arguments to the constructor for the handler class. Refer to the constructors for the relevant handlers, or to the examples -below, to see how typical entries are constructed. :: +below, to see how typical entries are constructed. + +.. code-block:: ini [handler_hand02] class=FileHandler @@ -744,7 +768,9 @@ below, to see how typical entries are constructed. :: formatter=form09 args=('localhost:9022', '/log', 'GET') -Sections which specify formatter configuration are typified by the following. :: +Sections which specify formatter configuration are typified by the following. + +.. code-block:: ini [formatter_form01] format=F1 %(asctime)s %(levelname)s %(message)s @@ -780,5 +806,3 @@ condensed format. Module :mod:`logging.handlers` Useful handlers included with the logging module. - - diff --git a/Doc/library/logging.handlers.rst b/Doc/library/logging.handlers.rst index 855adab..0c02d3d 100644 --- a/Doc/library/logging.handlers.rst +++ b/Doc/library/logging.handlers.rst @@ -80,7 +80,7 @@ sends logging output to a disk file. It inherits the output functionality from Returns a new instance of the :class:`FileHandler` class. The specified file is opened and used as the stream for logging. If *mode* is not specified, - :const:`'a'` is used. If *encoding* is not *None*, it is used to open the file + :const:`'a'` is used. If *encoding* is not ``None``, it is used to open the file with that encoding. If *delay* is true, then file opening is deferred until the first call to :meth:`emit`. By default, the file grows indefinitely. @@ -152,11 +152,11 @@ exclusive locks - and so there is no need for such a handler. Furthermore, for this value. -.. class:: WatchedFileHandler(filename[,mode[, encoding[, delay]]]) +.. class:: WatchedFileHandler(filename, mode='a', encoding=None, delay=False) Returns a new instance of the :class:`WatchedFileHandler` class. The specified file is opened and used as the stream for logging. If *mode* is not specified, - :const:`'a'` is used. If *encoding* is not *None*, it is used to open the file + :const:`'a'` is used. If *encoding* is not ``None``, it is used to open the file with that encoding. If *delay* is true, then file opening is deferred until the first call to :meth:`emit`. By default, the file grows indefinitely. @@ -257,11 +257,11 @@ The :class:`RotatingFileHandler` class, located in the :mod:`logging.handlers` module, supports rotation of disk log files. -.. class:: RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0) +.. class:: RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False) Returns a new instance of the :class:`RotatingFileHandler` class. The specified file is opened and used as the stream for logging. If *mode* is not specified, - ``'a'`` is used. If *encoding* is not *None*, it is used to open the file + ``'a'`` is used. If *encoding* is not ``None``, it is used to open the file with that encoding. If *delay* is true, then file opening is deferred until the first call to :meth:`emit`. By default, the file grows indefinitely. diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst index 72da385..6098878 100644 --- a/Doc/library/logging.rst +++ b/Doc/library/logging.rst @@ -296,7 +296,7 @@ is the module's name in the Python package namespace. Finds the caller's source filename and line number. Returns the filename, line number, function name and stack information as a 4-element tuple. The stack - information is returned as *None* unless *stack_info* is *True*. + information is returned as ``None`` unless *stack_info* is ``True``. .. method:: Logger.handle(record) @@ -318,7 +318,7 @@ is the module's name in the Python package namespace. looking for handlers in this logger and its parents in the logger hierarchy. Returns ``True`` if a handler was found, else ``False``. The method stops searching up the hierarchy whenever a logger with the 'propagate' attribute set to - False is found - that will be the last logger which is checked for the + false is found - that will be the last logger which is checked for the existence of handlers. .. versionadded:: 3.2 @@ -561,7 +561,7 @@ The useful mapping keys in a :class:`LogRecord` are given in the section on handled by a strptime format string (``'%Y-%m-%d %H:%M:%S'``), and the part after the comma is a millisecond value. Because strptime does not have a format placeholder for milliseconds, the millisecond value is - appended using another format string, ``'%s,%03d'`` – and both of these + appended using another format string, ``'%s,%03d'`` --- and both of these format strings have been hardcoded into this method. With the change, these strings are defined as class-level attributes which can be overridden at the instance level when desired. The names of the @@ -672,7 +672,7 @@ wire). :param args: Variable data to merge into the *msg* argument to obtain the event description. :param exc_info: An exception tuple with the current exception information, - or *None* if no exception information is available. + or ``None`` if no exception information is available. :param func: The name of the function or method from which the logging call was invoked. :param sinfo: A text string representing stack information from the base of @@ -754,7 +754,7 @@ the options available to you. | | | (as returned by :func:`time.time`). | +----------------+-------------------------+-----------------------------------------------+ | exc_info | You shouldn't need to | Exception tuple (à la ``sys.exc_info``) or, | -| | format this yourself. | if no exception has occurred, *None*. | +| | format this yourself. | if no exception has occurred, ``None``. | +----------------+-------------------------+-----------------------------------------------+ | filename | ``%(filename)s`` | Filename portion of ``pathname``. | +----------------+-------------------------+-----------------------------------------------+ @@ -1187,7 +1187,7 @@ functions. :lno: The line number in the file where the logging call was made. :msg: The logging message. :args: The arguments for the logging message. - :exc_info: An exception tuple, or None. + :exc_info: An exception tuple, or ``None``. :func: The name of the function or method which invoked the logging call. :sinfo: A stack traceback such as is provided by diff --git a/Doc/library/lzma.rst b/Doc/library/lzma.rst index f99c495..61b3ba3 100644 --- a/Doc/library/lzma.rst +++ b/Doc/library/lzma.rst @@ -362,10 +362,9 @@ entries in the dictionary representing the filter): select automatically based on other filter options. The delta filter stores the differences between bytes, producing more repetitive -input for the compressor in certain circumstances. It only supports a single -The delta filter supports only one option, ``dist``. This indicates the distance -between bytes to be subtracted. The default is 1, i.e. take the differences -between adjacent bytes. +input for the compressor in certain circumstances. It supports one option, +``dist``. This indicates the distance between bytes to be subtracted. The +default is 1, i.e. take the differences between adjacent bytes. The BCJ filters are intended to be applied to machine code. They convert relative branches, calls and jumps in the code to use absolute addressing, with diff --git a/Doc/library/mmap.rst b/Doc/library/mmap.rst index 8f53833..2f2945f 100644 --- a/Doc/library/mmap.rst +++ b/Doc/library/mmap.rst @@ -14,7 +14,7 @@ byte by doing ``obj[index] = 97``, or change a subsequence by assigning to a slice: ``obj[i1:i2] = b'...'``. You can also read and write data starting at the current file position, and :meth:`seek` through the file to different positions. -A memory-mapped file is created by the :class:`mmap` constructor, which is +A memory-mapped file is created by the :class:`~mmap.mmap` constructor, which is different on Unix and on Windows. In either case you must provide a file descriptor for a file opened for update. If you wish to map an existing Python file object, use its :meth:`fileno` method to obtain the correct value for the @@ -70,7 +70,7 @@ To map anonymous memory, -1 should be passed as the fileno along with the length **(Unix version)** Maps *length* bytes from the file specified by the file descriptor *fileno*, and returns a mmap object. If *length* is ``0``, the maximum length of the map will be the current size of the file when - :class:`mmap` is called. + :class:`~mmap.mmap` is called. *flags* specifies the nature of the mapping. :const:`MAP_PRIVATE` creates a private copy-on-write mapping, so changes to the contents of the mmap @@ -97,7 +97,7 @@ To map anonymous memory, -1 should be passed as the fileno along with the length by the descriptor *fileno* is internally automatically synchronized with physical backing store on Mac OS X and OpenVMS. - This example shows a simple way of using :class:`mmap`:: + This example shows a simple way of using :class:`~mmap.mmap`:: import mmap @@ -122,7 +122,7 @@ To map anonymous memory, -1 should be passed as the fileno along with the length mm.close() - :class:`mmap` can also be used as a context manager in a :keyword:`with` + :class:`~mmap.mmap` can also be used as a context manager in a :keyword:`with` statement.:: import mmap @@ -204,13 +204,13 @@ To map anonymous memory, -1 should be passed as the fileno along with the length .. method:: read([n]) Return a :class:`bytes` containing up to *n* bytes starting from the - current file position. If the argument is omitted, *None* or negative, + current file position. If the argument is omitted, ``None`` or negative, return all bytes from the current file position to the end of the mapping. The file position is updated to point after the bytes that were returned. .. versionchanged:: 3.3 - Argument can be omitted or *None*. + Argument can be omitted or ``None``. .. method:: read_byte() diff --git a/Doc/library/msvcrt.rst b/Doc/library/msvcrt.rst index b334eeb..bd34ffb 100644 --- a/Doc/library/msvcrt.rst +++ b/Doc/library/msvcrt.rst @@ -1,5 +1,5 @@ -:mod:`msvcrt` -- Useful routines from the MS VC++ runtime -========================================================= +:mod:`msvcrt` --- Useful routines from the MS VC++ runtime +========================================================== .. module:: msvcrt :platform: Windows diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst index c5c092c..d45bc20 100644 --- a/Doc/library/multiprocessing.rst +++ b/Doc/library/multiprocessing.rst @@ -496,6 +496,9 @@ The :mod:`multiprocessing` package mostly replicates the API of the If the optional argument *timeout* is ``None`` (the default), the method blocks until the process whose :meth:`join` method is called terminates. If *timeout* is a positive number, it blocks at most *timeout* seconds. + Note that the method returns ``None`` if its process terminates or if the + method times out. Check the process's :attr:`exitcode` to determine if + it terminated. A process can be joined many times. @@ -939,7 +942,7 @@ Miscellaneous Return a context object which has the same attributes as the :mod:`multiprocessing` module. - If *method* is *None* then the default context is returned. + If *method* is ``None`` then the default context is returned. Otherwise *method* should be ``'fork'``, ``'spawn'``, ``'forkserver'``. :exc:`ValueError` is raised if the specified start method is not available. @@ -953,10 +956,10 @@ Miscellaneous If the start method has not been fixed and *allow_none* is false, then the start method is fixed to the default and the name is returned. If the start method has not been fixed and *allow_none* - is true then *None* is returned. + is true then ``None`` is returned. The return value can be ``'fork'``, ``'spawn'``, ``'forkserver'`` - or *None*. ``'fork'`` is the default on Unix, while ``'spawn'`` is + or ``None``. ``'fork'`` is the default on Unix, while ``'spawn'`` is the default on Windows. .. versionadded:: 3.4 @@ -1010,7 +1013,7 @@ Connection objects are usually created using :func:`Pipe` -- see also using :meth:`recv`. The object must be picklable. Very large pickles (approximately 32 MB+, - though it depends on the OS) may raise a ValueError exception. + though it depends on the OS) may raise a :exc:`ValueError` exception. .. method:: recv() @@ -2025,7 +2028,7 @@ with the :class:`Pool` class. *maxtasksperchild* is the number of tasks a worker process can complete before it will exit and be replaced with a fresh worker process, to enable - unused resources to be freed. The default *maxtasksperchild* is None, which + unused resources to be freed. The default *maxtasksperchild* is ``None``, which means worker processes will live as long as the pool. *context* can be used to specify the context used for starting @@ -2295,7 +2298,7 @@ multiple connections at the same time. ``None`` then digest authentication is used. If *authkey* is a byte string then it will be used as the - authentication key; otherwise it must be *None*. + authentication key; otherwise it must be ``None``. If *authkey* is ``None`` and *authenticate* is ``True`` then ``current_process().authkey`` is used as the authentication key. If @@ -2723,12 +2726,7 @@ start method. More picklability - Ensure that all arguments to :meth:`Process.__init__` are - picklable. This means, in particular, that bound or unbound - methods cannot be used directly as the ``target`` (unless you use - the *fork* start method) --- just define a function and use that - instead. - + Ensure that all arguments to :meth:`Process.__init__` are picklable. Also, if you subclass :class:`~multiprocessing.Process` then make sure that instances will be picklable when the :meth:`Process.start ` method is called. diff --git a/Doc/library/netrc.rst b/Doc/library/netrc.rst index cdc2616..64aa3ac 100644 --- a/Doc/library/netrc.rst +++ b/Doc/library/netrc.rst @@ -12,13 +12,13 @@ -------------- -The :class:`netrc` class parses and encapsulates the netrc file format used by +The :class:`~netrc.netrc` class parses and encapsulates the netrc file format used by the Unix :program:`ftp` program and other FTP clients. .. class:: netrc([file]) - A :class:`netrc` instance or subclass instance encapsulates data from a netrc + A :class:`~netrc.netrc` instance or subclass instance encapsulates data from a netrc file. The initialization argument, if present, specifies the file to parse. If no argument is given, the file :file:`.netrc` in the user's home directory will be read. Parse errors will raise :exc:`NetrcParseError` with diagnostic @@ -35,7 +35,7 @@ the Unix :program:`ftp` program and other FTP clients. .. exception:: NetrcParseError - Exception raised by the :class:`netrc` class when syntactical errors are + Exception raised by the :class:`~netrc.netrc` class when syntactical errors are encountered in source text. Instances of this exception provide three interesting attributes: :attr:`msg` is a textual explanation of the error, :attr:`filename` is the name of the source file, and :attr:`lineno` gives the @@ -47,7 +47,7 @@ the Unix :program:`ftp` program and other FTP clients. netrc Objects ------------- -A :class:`netrc` instance has the following methods: +A :class:`~netrc.netrc` instance has the following methods: .. method:: netrc.authenticators(host) @@ -63,7 +63,7 @@ A :class:`netrc` instance has the following methods: Dump the class data as a string in the format of a netrc file. (This discards comments and may reorder the entries.) -Instances of :class:`netrc` have public instance variables: +Instances of :class:`~netrc.netrc` have public instance variables: .. attribute:: netrc.hosts diff --git a/Doc/library/nntplib.rst b/Doc/library/nntplib.rst index 9790e3a..2c3cd8d 100644 --- a/Doc/library/nntplib.rst +++ b/Doc/library/nntplib.rst @@ -75,7 +75,7 @@ The module itself defines the following classes: >>> from nntplib import NNTP >>> with NNTP('news.gmane.org') as n: ... n.group('gmane.comp.python.committers') - ... + ... # doctest: +SKIP ('211 1755 1 1755 gmane.comp.python.committers', 1755, 1, 1755, 'gmane.comp.python.committers') >>> @@ -220,7 +220,7 @@ tuples or objects that the method normally returns will be empty. .. method:: NNTP.login(user=None, password=None, usenetrc=True) Send ``AUTHINFO`` commands with the user name and password. If *user* - and *password* are None and *usenetrc* is true, credentials from + and *password* are ``None`` and *usenetrc* is true, credentials from ``~/.netrc`` will be used if possible. Unless intentionally delayed, login is normally performed during the @@ -261,9 +261,9 @@ tuples or objects that the method normally returns will be empty. >>> from datetime import date, timedelta >>> resp, groups = s.newgroups(date.today() - timedelta(days=3)) - >>> len(groups) + >>> len(groups) # doctest: +SKIP 85 - >>> groups[0] + >>> groups[0] # doctest: +SKIP GroupInfo(group='gmane.network.tor.devel', last='4', first='1', flag='m') @@ -312,9 +312,9 @@ tuples or objects that the method normally returns will be empty. is a dictionary mapping group names to textual descriptions. >>> resp, descs = s.descriptions('gmane.comp.python.*') - >>> len(descs) + >>> len(descs) # doctest: +SKIP 295 - >>> descs.popitem() + >>> descs.popitem() # doctest: +SKIP ('gmane.comp.python.bio.general', 'BioPython discussion list (Moderated)') diff --git a/Doc/library/optparse.rst b/Doc/library/optparse.rst index 9a4ba4e..2ef187d 100644 --- a/Doc/library/optparse.rst +++ b/Doc/library/optparse.rst @@ -678,7 +678,9 @@ automatically adds a ``--version`` option to your parser. If it encounters this option on the command line, it expands your ``version`` string (by replacing ``%prog``), prints it to stdout, and exits. -For example, if your script is called ``/usr/bin/foo``:: +For example, if your script is called ``/usr/bin/foo``: + +.. code-block:: shell-session $ /usr/bin/foo --version foo 1.0 @@ -728,14 +730,18 @@ program's usage message and an error message to standard error and exits with error status 2. Consider the first example above, where the user passes ``4x`` to an option -that takes an integer:: +that takes an integer: + +.. code-block:: shell-session $ /usr/bin/foo -n 4x Usage: foo [options] foo: error: option -n: invalid integer value: '4x' -Or, where the user fails to pass a value at all:: +Or, where the user fails to pass a value at all: + +.. code-block:: shell-session $ /usr/bin/foo -n Usage: foo [options] @@ -2020,12 +2026,12 @@ Features of note: values.ensure_value(attr, value) - If the ``attr`` attribute of ``values`` doesn't exist or is None, then + If the ``attr`` attribute of ``values`` doesn't exist or is ``None``, then ensure_value() first sets it to ``value``, and then returns 'value. This is very handy for actions like ``"extend"``, ``"append"``, and ``"count"``, all of which accumulate data in a variable and expect that variable to be of a certain type (a list for the first two, an integer for the latter). Using :meth:`ensure_value` means that scripts using your action don't have to worry about setting a default value for the option destinations in question; they - can just leave the default as None and :meth:`ensure_value` will take care of + can just leave the default as ``None`` and :meth:`ensure_value` will take care of getting it right when it's needed. diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 743efb6..5a67f93 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -206,6 +206,9 @@ process and user. Return the value of the environment variable *key* if it exists, or *default* if it doesn't. *key*, *default* and the result are bytes. + :func:`getenvb` is only available if :data:`supports_bytes_environ` + is True. + Availability: most flavors of Unix. .. versionadded:: 3.2 @@ -217,7 +220,7 @@ process and user. executable, similar to a shell, when launching a process. *env*, when specified, should be an environment variable dictionary to lookup the PATH in. - By default, when *env* is None, :data:`environ` is used. + By default, when *env* is ``None``, :data:`environ` is used. .. versionadded:: 3.2 @@ -908,7 +911,7 @@ or `the MSDN `_ on Windo O_EXCL O_TRUNC - These constants are available on Unix and Windows. + The above constants are available on Unix and Windows. .. data:: O_DSYNC @@ -917,11 +920,9 @@ or `the MSDN `_ on Windo O_NDELAY O_NONBLOCK O_NOCTTY - O_SHLOCK - O_EXLOCK O_CLOEXEC - These constants are only available on Unix. + The above constants are only available on Unix. .. versionchanged:: 3.3 Add :data:`O_CLOEXEC` constant. @@ -934,7 +935,7 @@ or `the MSDN `_ on Windo O_SEQUENTIAL O_TEXT - These constants are only available on Windows. + The above constants are only available on Windows. .. data:: O_ASYNC @@ -944,8 +945,10 @@ or `the MSDN `_ on Windo O_NOATIME O_PATH O_TMPFILE + O_SHLOCK + O_EXLOCK - These constants are GNU extensions and not present if they are not defined by + The above constants are extensions and not present if they are not defined by the C library. .. versionchanged:: 3.4 @@ -1195,7 +1198,11 @@ or `the MSDN `_ on Windo .. function:: writev(fd, buffers) Write the contents of *buffers* to file descriptor *fd*. *buffers* must be a - sequence of :term:`bytes-like objects `. + sequence of :term:`bytes-like objects `. Buffers are + processed in array order. Entire contents of first buffer is written before + proceeding to second, and so on. The operating system may set a limit + (sysconf() value SC_IOV_MAX) on the number of buffers that can be used. + :func:`~os.writev` writes the contents of each object to the file descriptor and returns the total number of bytes written. @@ -1712,6 +1719,8 @@ features: This function can also support :ref:`paths relative to directory descriptors `. + Availability: Unix. + .. versionadded:: 3.3 The *dir_fd* argument. @@ -1896,7 +1905,7 @@ features: On Unix, *path* can be of type :class:`str` or :class:`bytes` (use :func:`~os.fsencode` and :func:`~os.fsdecode` to encode and decode :class:`bytes` paths). On Windows, *path* must be of type :class:`str`. - On both sytems, the type of the :attr:`~DirEntry.name` and + On both systems, the type of the :attr:`~DirEntry.name` and :attr:`~DirEntry.path` attributes of each :class:`DirEntry` will be of the same type as *path*. @@ -2049,9 +2058,8 @@ features: Note that there is a nice correspondence between several attributes and methods of ``DirEntry`` and of :class:`pathlib.Path`. In - particular, the ``name`` and ``path`` attributes have the same - meaning, as do the ``is_dir()``, ``is_file()``, ``is_symlink()`` - and ``stat()`` methods. + particular, the ``name`` attribute has the same meaning, as do the + ``is_dir()``, ``is_file()``, ``is_symlink()`` and ``stat()`` methods. .. versionadded:: 3.5 @@ -3613,7 +3621,7 @@ Miscellaneous System Information .. function:: cpu_count() - Return the number of CPUs in the system. Returns None if undetermined. + Return the number of CPUs in the system. Returns ``None`` if undetermined. .. versionadded:: 3.4 diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst index f803fb6..7b90a1f 100644 --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -832,7 +832,7 @@ call fails (for example because the path doesn't exist): If *parents* is false (the default), a missing parent raises :exc:`FileNotFoundError`. - If *exist_ok* is false (the default), an :exc:`FileExistsError` is + If *exist_ok* is false (the default), :exc:`FileExistsError` is raised if the target directory already exists. If *exist_ok* is true, :exc:`FileExistsError` exceptions will be @@ -891,8 +891,9 @@ call fails (for example because the path doesn't exist): .. method:: Path.rename(target) - Rename this file or directory to the given *target*. *target* can be - either a string or another path object:: + Rename this file or directory to the given *target*. On Unix, if + *target* exists and is a file, it will be replaced silently if the user + has permission. *target* can be either a string or another path object:: >>> p = Path('foo') >>> p.open('w').write('some text') @@ -920,7 +921,7 @@ call fails (for example because the path doesn't exist): >>> p.resolve() PosixPath('/home/antoine/pathlib') - `".."` components are also eliminated (this is the only method to do so):: + "``..``" components are also eliminated (this is the only method to do so):: >>> p = Path('docs/../setup.py') >>> p.resolve() @@ -933,7 +934,7 @@ call fails (for example because the path doesn't exist): .. method:: Path.rglob(pattern) - This is like calling :meth:`glob` with "``**``" added in front of the + This is like calling :meth:`Path.glob` with "``**``" added in front of the given *pattern*: >>> sorted(Path().rglob("*.py")) @@ -988,7 +989,7 @@ call fails (for example because the path doesn't exist): of :func:`os.symlink`'s. -.. method:: Path.touch(mode=0o777, exist_ok=True) +.. method:: Path.touch(mode=0o666, exist_ok=True) Create a file at this given path. If *mode* is given, it is combined with the process' ``umask`` value to determine the file mode and access diff --git a/Doc/library/pdb.rst b/Doc/library/pdb.rst index 4520a9b..ba9e547 100644 --- a/Doc/library/pdb.rst +++ b/Doc/library/pdb.rst @@ -158,7 +158,7 @@ access further features, you have to do this yourself: By default, Pdb sets a handler for the SIGINT signal (which is sent when the user presses :kbd:`Ctrl-C` on the console) when you give a ``continue`` command. This allows you to break into the debugger again by pressing :kbd:`Ctrl-C`. If you - want Pdb not to touch the SIGINT handler, set *nosigint* tot true. + want Pdb not to touch the SIGINT handler, set *nosigint* to true. Example call to enable tracing with *skip*:: @@ -328,7 +328,7 @@ by the local file. return, jump, quit and their abbreviations) terminates the command list (as if that command was immediately followed by end). This is because any time you resume execution (even with a simple next or step), you may encounter another - breakpoint--which could have its own command list, leading to ambiguities about + breakpoint—which could have its own command list, leading to ambiguities about which list to execute. If you use the 'silent' command in the command list, the usual message about @@ -449,7 +449,7 @@ by the local file. .. pdbcommand:: interact - Start an interative interpreter (using the :mod:`code` module) whose global + Start an interactive interpreter (using the :mod:`code` module) whose global namespace contains all the (global and local) names found in the current scope. diff --git a/Doc/library/pickletools.rst b/Doc/library/pickletools.rst index 4c0a148..480f4a6 100644 --- a/Doc/library/pickletools.rst +++ b/Doc/library/pickletools.rst @@ -30,7 +30,9 @@ However, when the pickle file that you want to examine comes from an untrusted source, ``-m pickletools`` is a safer option because it does not execute pickle bytecode. -For example, with a tuple ``(1, 2)`` pickled in file ``x.pickle``:: +For example, with a tuple ``(1, 2)`` pickled in file ``x.pickle``: + +.. code-block:: shell-session $ python -m pickle x.pickle (1, 2) @@ -90,8 +92,8 @@ Programmatic Interface a short description. The value of *annotate* is used as a hint for the column where annotation should start. - .. versionadded:: 3.2 - The *annotate* argument. + .. versionadded:: 3.2 + The *annotate* argument. .. function:: genops(pickle) @@ -106,4 +108,3 @@ Programmatic Interface Returns a new equivalent pickle string after eliminating unused ``PUT`` opcodes. The optimized pickle is shorter, takes less transmission time, requires less storage space, and unpickles more efficiently. - diff --git a/Doc/library/pkgutil.rst b/Doc/library/pkgutil.rst index 26c5ac0..b9e76f7 100644 --- a/Doc/library/pkgutil.rst +++ b/Doc/library/pkgutil.rst @@ -46,10 +46,10 @@ support. .. class:: ImpImporter(dirname=None) - :pep:`302` Importer that wraps Python's "classic" import algorithm. + :pep:`302` Finder that wraps Python's "classic" import algorithm. - If *dirname* is a string, a :pep:`302` importer is created that searches that - directory. If *dirname* is ``None``, a :pep:`302` importer is created that + If *dirname* is a string, a :pep:`302` finder is created that searches that + directory. If *dirname* is ``None``, a :pep:`302` finder is created that searches the current :data:`sys.path`, plus any modules that are frozen or built-in. @@ -63,7 +63,7 @@ support. .. class:: ImpLoader(fullname, file, filename, etc) - :pep:`302` Loader that wraps Python's "classic" import algorithm. + :term:`Loader` that wraps Python's "classic" import algorithm. .. deprecated:: 3.3 This emulation is no longer needed, as the standard import mechanism @@ -72,7 +72,7 @@ support. .. function:: find_loader(fullname) - Retrieve a :pep:`302` module loader for the given *fullname*. + Retrieve a module :term:`loader` for the given *fullname*. This is a backwards compatibility wrapper around :func:`importlib.util.find_spec` that converts most failures to @@ -88,9 +88,9 @@ support. .. function:: get_importer(path_item) - Retrieve a :pep:`302` importer for the given *path_item*. + Retrieve a :term:`finder` for the given *path_item*. - The returned importer is cached in :data:`sys.path_importer_cache` if it was + The returned finder is cached in :data:`sys.path_importer_cache` if it was newly created by a path hook. The cache (or part of it) can be cleared manually if a rescan of @@ -103,7 +103,7 @@ support. .. function:: get_loader(module_or_name) - Get a :pep:`302` "loader" object for *module_or_name*. + Get a :term:`loader` object for *module_or_name*. If the module or package is accessible via the normal import mechanism, a wrapper around the relevant part of that machinery is returned. Returns @@ -121,16 +121,16 @@ support. .. function:: iter_importers(fullname='') - Yield :pep:`302` importers for the given module name. + Yield :term:`finder` objects for the given module name. - If fullname contains a '.', the importers will be for the package + If fullname contains a '.', the finders will be for the package containing fullname, otherwise they will be all registered top level - importers (i.e. those on both sys.meta_path and sys.path_hooks). + finders (i.e. those on both sys.meta_path and sys.path_hooks). If the named module is in a package, that package is imported as a side effect of invoking this function. - If no module name is specified, all top level importers are produced. + If no module name is specified, all top level finders are produced. .. versionchanged:: 3.3 Updated to be based directly on :mod:`importlib` rather than relying @@ -201,7 +201,8 @@ support. Get a resource from a package. - This is a wrapper for the :pep:`302` loader :func:`get_data` API. The + This is a wrapper for the :term:`loader` + :meth:`get_data ` API. The *package* argument should be the name of a package, in standard module format (``foo.bar``). The *resource* argument should be in the form of a relative filename, using ``/`` as the path separator. The parent directory name @@ -216,5 +217,8 @@ support. d = os.path.dirname(sys.modules[package].__file__) data = open(os.path.join(d, resource), 'rb').read() - If the package cannot be located or loaded, or it uses a :pep:`302` loader - which does not support :func:`get_data`, then ``None`` is returned. + If the package cannot be located or loaded, or it uses a :term:`loader` + which does not support :meth:`get_data `, + then ``None`` is returned. In particular, the :term:`loader` for + :term:`namespace packages ` does not support + :meth:`get_data `. diff --git a/Doc/library/py_compile.rst b/Doc/library/py_compile.rst index 65f76b8..0af8fb1 100644 --- a/Doc/library/py_compile.rst +++ b/Doc/library/py_compile.rst @@ -30,7 +30,7 @@ byte-code cache files in the directory containing the source code. .. function:: compile(file, cfile=None, dfile=None, doraise=False, optimize=-1) Compile a source file to byte-code and write out the byte-code cache file. - The source code is loaded from the file name *file*. The byte-code is + The source code is loaded from the file named *file*. The byte-code is written to *cfile*, which defaults to the :pep:`3147`/:pep:`488` path, ending in ``.pyc``. For example, if *file* is ``/foo/bar/baz.py`` *cfile* will default to diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst index 29c9f34..075a8b5 100644 --- a/Doc/library/pyexpat.rst +++ b/Doc/library/pyexpat.rst @@ -86,7 +86,9 @@ The :mod:`xml.parsers.expat` module contains two functions: separator. For example, if *namespace_separator* is set to a space character (``' '``) and - the following document is parsed:: + the following document is parsed: + + .. code-block:: xml >> weighted_choices = [('Red', 3), ('Blue', 2), ('Yellow', 1), ('Green', 4)] >>> population = [val for val, cnt in weighted_choices for i in range(cnt)] + >>> population + ['Red', 'Red', 'Red', 'Blue', 'Blue', 'Yellow', 'Green', 'Green', 'Green', 'Green'] + >>> random.choice(population) 'Green' @@ -334,6 +340,9 @@ with :func:`itertools.accumulate`, and then locate the random value with >>> choices, weights = zip(*weighted_choices) >>> cumdist = list(itertools.accumulate(weights)) + >>> cumdist # [3, 3+2, 3+2+1, 3+2+1+4] + [3, 5, 6, 10] + >>> x = random.random() * cumdist[-1] >>> choices[bisect.bisect(cumdist, x)] 'Blue' diff --git a/Doc/library/re.rst b/Doc/library/re.rst index 18d5596..1ca621e 100644 --- a/Doc/library/re.rst +++ b/Doc/library/re.rst @@ -79,6 +79,12 @@ how the regular expressions around them are interpreted. Regular expression pattern strings may not contain null bytes, but can specify the null byte using a ``\number`` notation such as ``'\x00'``. +Repetition qualifiers (``*``, ``+``, ``?``, ``{m,n}``, etc) cannot be +directly nested. This avoids ambiguity with the non-greedy modifier suffix +``?``, and with other modifiers in other implementations. To apply a second +repetition to an inner repetition, parentheses may be used. For example, +the expression ``(?:a{6})*`` matches any multiple of six ``'a'`` characters. + The special characters are: @@ -443,7 +449,7 @@ three digits in length. The ``'\u'`` and ``'\U'`` escape sequences have been added. .. deprecated-removed:: 3.5 3.6 - Unknown escapes consist of ``'\'`` and ASCII letter now raise a + Unknown escapes consisting of ``'\'`` and ASCII letter now raise a deprecation warning and will be forbidden in Python 3.6. diff --git a/Doc/library/readline.rst b/Doc/library/readline.rst index e17e69c..4d3c099 100644 --- a/Doc/library/readline.rst +++ b/Doc/library/readline.rst @@ -104,7 +104,9 @@ The following functions operate on a history file: Append the last *nelements* items of history to a file. The default filename is :file:`~/.history`. The file must already exist. This calls - :c:func:`append_history` in the underlying library. + :c:func:`append_history` in the underlying library. This function + only exists if Python was compiled for a version of the library + that supports it. .. versionadded:: 3.5 @@ -185,7 +187,8 @@ Startup hooks be used as the new hook function; if omitted or ``None``, any function already installed is removed. The hook is called with no arguments after the first prompt has been printed and just before - readline starts reading input characters. + readline starts reading input characters. This function only exists + if Python was compiled for a version of the library that supports it. Completion diff --git a/Doc/library/resource.rst b/Doc/library/resource.rst index b213793..bdfe5f6 100644 --- a/Doc/library/resource.rst +++ b/Doc/library/resource.rst @@ -125,8 +125,7 @@ platform. .. data:: RLIMIT_FSIZE - The maximum size of a file which the process may create. This only affects the - stack of the main thread in a multi-threaded process. + The maximum size of a file which the process may create. .. data:: RLIMIT_DATA @@ -136,7 +135,8 @@ platform. .. data:: RLIMIT_STACK - The maximum size (in bytes) of the call stack for the current process. + The maximum size (in bytes) of the call stack for the current process. This only + affects the stack of the main thread in a multi-threaded process. .. data:: RLIMIT_RSS diff --git a/Doc/library/select.rst b/Doc/library/select.rst index 6cec9f7..a81386a 100644 --- a/Doc/library/select.rst +++ b/Doc/library/select.rst @@ -57,9 +57,7 @@ The module defines the following: (Only supported on Linux 2.5.44 and newer.) Return an edge polling object, which can be used as Edge or Level Triggered interface for I/O - events. *sizehint* is deprecated and completely ignored. *flags* can be set - to :const:`EPOLL_CLOEXEC`, which causes the epoll descriptor to be closed - automatically when :func:`os.execve` is called. + events. *sizehint* and *flags* are deprecated and completely ignored. See the :ref:`epoll-objects` section below for the methods supported by epolling objects. @@ -77,6 +75,10 @@ The module defines the following: Support for the :keyword:`with` statement was added. The new file descriptor is now non-inheritable. + .. deprecated:: 3.4 + The *flags* parameter. ``select.EPOLL_CLOEXEC`` is used by default now. + Use :func:`os.set_inheritable` to make the file descriptor inheritable. + .. function:: poll() @@ -457,7 +459,7 @@ Kqueue Objects Low level interface to kevent - - changelist must be an iterable of kevent object or None + - changelist must be an iterable of kevent object or ``None`` - max_events must be 0 or a positive integer - timeout in seconds (floats possible) diff --git a/Doc/library/selectors.rst b/Doc/library/selectors.rst index 44b27f3..1624d88 100644 --- a/Doc/library/selectors.rst +++ b/Doc/library/selectors.rst @@ -1,5 +1,5 @@ -:mod:`selectors` -- High-level I/O multiplexing -=============================================== +:mod:`selectors` --- High-level I/O multiplexing +================================================ .. module:: selectors :synopsis: High-level I/O multiplexing. diff --git a/Doc/library/shelve.rst b/Doc/library/shelve.rst index 1ec158e..f08c581 100644 --- a/Doc/library/shelve.rst +++ b/Doc/library/shelve.rst @@ -31,7 +31,7 @@ lots of shared sub-objects. The keys are ordinary strings. Because of Python semantics, a shelf cannot know when a mutable persistent-dictionary entry is modified. By default modified objects are written *only* when assigned to the shelf (see :ref:`shelve-example`). If the - optional *writeback* parameter is set to *True*, all entries accessed are also + optional *writeback* parameter is set to ``True``, all entries accessed are also cached in memory, and written back on :meth:`~Shelf.sync` and :meth:`~Shelf.close`; this can make it handier to mutate mutable entries in the persistent dictionary, but, if many entries are accessed, it can consume @@ -108,7 +108,7 @@ Restrictions A subclass of :class:`collections.abc.MutableMapping` which stores pickled values in the *dict* object. - By default, version 0 pickles are used to serialize values. The version of the + By default, version 3 pickles are used to serialize values. The version of the pickle protocol can be specified with the *protocol* parameter. See the :mod:`pickle` documentation for a discussion of the pickle protocols. diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index e9ba4e6..b020bb3 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -107,7 +107,7 @@ Directory and files operations If *follow_symlinks* is false, and *src* and *dst* both refer to symbolic links, :func:`copystat` will operate on the symbolic links themselves rather than the files the - symbolic links refer to--reading the information from the + symbolic links refer to—reading the information from the *src* symbolic link, and writing the information to the *dst* symbolic link. @@ -458,6 +458,10 @@ Archiving operations .. versionadded:: 3.2 +.. versionchanged:: 3.5 + Added support for the *xztar* format. + + High-level utilities to create and read compressed and archived files are also provided. They rely on the :mod:`zipfile` and :mod:`tarfile` modules. @@ -467,8 +471,9 @@ provided. They rely on the :mod:`zipfile` and :mod:`tarfile` modules. *base_name* is the name of the file to create, including the path, minus any format-specific extension. *format* is the archive format: one of - "zip", "tar", "bztar" (if the :mod:`bz2` module is available), "xztar" - (if the :mod:`lzma` module is available) or "gztar". + "zip" (if the :mod:`zlib` module is available), "tar", "gztar" (if the + :mod:`zlib` module is available), "bztar" (if the :mod:`bz2` module is + available), or "xztar" (if the :mod:`lzma` module is available). *root_dir* is a directory that will be the root directory of the archive; for example, we typically chdir into *root_dir* before creating the @@ -491,9 +496,6 @@ provided. They rely on the :mod:`zipfile` and :mod:`tarfile` modules. The *verbose* argument is unused and deprecated. - .. versionchanged:: 3.5 - Added support for the *xztar* format. - .. function:: get_archive_formats() @@ -502,11 +504,11 @@ provided. They rely on the :mod:`zipfile` and :mod:`tarfile` modules. By default :mod:`shutil` provides these formats: - - *gztar*: gzip'ed tar-file - - *bztar*: bzip2'ed tar-file (if the :mod:`bz2` module is available.) - - *xztar*: xz'ed tar-file (if the :mod:`lzma` module is available.) - - *tar*: uncompressed tar file - - *zip*: ZIP file + - *zip*: ZIP file (if the :mod:`zlib` module is available). + - *tar*: uncompressed tar file. + - *gztar*: gzip'ed tar-file (if the :mod:`zlib` module is available). + - *bztar*: bzip2'ed tar-file (if the :mod:`bz2` module is available). + - *xztar*: xz'ed tar-file (if the :mod:`lzma` module is available). You can register new formats or provide your own archiver for any existing formats, by using :func:`register_archive_format`. @@ -541,11 +543,12 @@ provided. They rely on the :mod:`zipfile` and :mod:`tarfile` modules. *extract_dir* is the name of the target directory where the archive is unpacked. If not provided, the current working directory is used. - *format* is the archive format: one of "zip", "tar", or "gztar". Or any - other format registered with :func:`register_unpack_format`. If not - provided, :func:`unpack_archive` will use the archive file name extension - and see if an unpacker was registered for that extension. In case none is - found, a :exc:`ValueError` is raised. + *format* is the archive format: one of "zip", "tar", "gztar", "bztar", or + "xztar". Or any other format registered with + :func:`register_unpack_format`. If not provided, :func:`unpack_archive` + will use the archive file name extension and see if an unpacker was + registered for that extension. In case none is found, + a :exc:`ValueError` is raised. .. function:: register_unpack_format(name, extensions, function[, extra_args[, description]]) @@ -578,11 +581,12 @@ provided. They rely on the :mod:`zipfile` and :mod:`tarfile` modules. By default :mod:`shutil` provides these formats: - - *gztar*: gzip'ed tar-file - - *bztar*: bzip2'ed tar-file (if the :mod:`bz2` module is available.) - - *xztar*: xz'ed tar-file (if the :mod:`lzma` module is available.) - - *tar*: uncompressed tar file - - *zip*: ZIP file + - *zip*: ZIP file (unpacking compressed files works only if the corresponding + module is available). + - *tar*: uncompressed tar file. + - *gztar*: gzip'ed tar-file (if the :mod:`zlib` module is available). + - *bztar*: bzip2'ed tar-file (if the :mod:`bz2` module is available). + - *xztar*: xz'ed tar-file (if the :mod:`lzma` module is available). You can register new formats or provide your own unpacker for any existing formats, by using :func:`register_unpack_format`. @@ -603,7 +607,9 @@ found in the :file:`.ssh` directory of the user:: >>> make_archive(archive_name, 'gztar', root_dir) '/Users/tarek/myarchive.tar.gz' -The resulting archive contains:: +The resulting archive contains: + +.. code-block:: shell-session $ tar -tzvf /Users/tarek/myarchive.tar.gz drwx------ tarek/staff 0 2010-02-01 16:23:40 ./ @@ -619,8 +625,6 @@ The resulting archive contains:: Querying the size of the output terminal ---------------------------------------- -.. versionadded:: 3.3 - .. function:: get_terminal_size(fallback=(columns, lines)) Get the size of the terminal window. @@ -644,6 +648,8 @@ Querying the size of the output terminal See also: The Single UNIX Specification, Version 2, `Other Environment Variables`_. + .. versionadded:: 3.3 + .. _`Other Environment Variables`: http://pubs.opengroup.org/onlinepubs/7908799/xbd/envvar.html#tag_002_003 diff --git a/Doc/library/signal.rst b/Doc/library/signal.rst index 61252ce..039b666 100644 --- a/Doc/library/signal.rst +++ b/Doc/library/signal.rst @@ -350,8 +350,9 @@ The :mod:`signal` module defines the following functions: attribute descriptions in the :mod:`inspect` module). On Windows, :func:`signal` can only be called with :const:`SIGABRT`, - :const:`SIGFPE`, :const:`SIGILL`, :const:`SIGINT`, :const:`SIGSEGV`, or - :const:`SIGTERM`. A :exc:`ValueError` will be raised in any other case. + :const:`SIGFPE`, :const:`SIGILL`, :const:`SIGINT`, :const:`SIGSEGV`, + :const:`SIGTERM`, or :const:`SIGBREAK`. + A :exc:`ValueError` will be raised in any other case. Note that not all systems define the same set of signal names; an :exc:`AttributeError` will be raised if a signal name is not defined as ``SIG*`` module level constant. diff --git a/Doc/library/smtpd.rst b/Doc/library/smtpd.rst index 977f9a8..a096de0 100644 --- a/Doc/library/smtpd.rst +++ b/Doc/library/smtpd.rst @@ -32,9 +32,10 @@ SMTPServer Objects map=None, enable_SMTPUTF8=False, decode_data=True) Create a new :class:`SMTPServer` object, which binds to local address - *localaddr*. It will treat *remoteaddr* as an upstream SMTP relayer. It - inherits from :class:`asyncore.dispatcher`, and so will insert itself into - :mod:`asyncore`'s event loop on instantiation. + *localaddr*. It will treat *remoteaddr* as an upstream SMTP relayer. Both + *localaddr* and *remoteaddr* should be a :ref:`(host, port) ` + tuple. The object inherits from :class:`asyncore.dispatcher`, and so will + insert itself into :mod:`asyncore`'s event loop on instantiation. *data_size_limit* specifies the maximum number of bytes that will be accepted in a ``DATA`` command. A value of ``None`` or ``0`` means no @@ -44,7 +45,7 @@ SMTPServer Objects dictionary is a suitable value). If not specified the :mod:`asyncore` global socket map is used. - *enable_SMTPUTF8* determins whether the ``SMTPUTF8`` extension (as defined + *enable_SMTPUTF8* determines whether the ``SMTPUTF8`` extension (as defined in :RFC:`6531`) should be enabled. The default is ``False``. If set to ``True``, *decode_data* must be ``False`` (otherwise an error is raised). When ``True``, ``SMTPUTF8`` is accepted as a parameter to the ``MAIL`` @@ -161,7 +162,7 @@ SMTPChannel Objects accepted in a ``DATA`` command. A value of ``None`` or ``0`` means no limit. - *enable_SMTPUTF8* determins whether the ``SMTPUTF8`` extension (as defined + *enable_SMTPUTF8* determines whether the ``SMTPUTF8`` extension (as defined in :RFC:`6531`) should be enabled. The default is ``False``. A :exc:`ValueError` is raised if both *enable_SMTPUTF8* and *decode_data* are set to ``True`` at the same time. diff --git a/Doc/library/smtplib.rst b/Doc/library/smtplib.rst index bdf3805..8b98ccf 100644 --- a/Doc/library/smtplib.rst +++ b/Doc/library/smtplib.rst @@ -341,10 +341,10 @@ An :class:`SMTP` instance has the following methods: :rfc:`4954` "initial response" bytes which will be encoded and sent with the ``AUTH`` command as below. If the ``authobject()`` does not support an initial response (e.g. because it requires a challenge), it should return - None when called with ``challenge=None``. If *initial_response_ok* is - false, then ``authobject()`` will not be called first with None. + ``None`` when called with ``challenge=None``. If *initial_response_ok* is + false, then ``authobject()`` will not be called first with ``None``. - If the initial response check returns None, or if *initial_response_ok* is + If the initial response check returns ``None``, or if *initial_response_ok* is false, ``authobject()`` will be called to process the server's challenge response; the *challenge* argument it is passed will be a ``bytes``. It should return ``bytes`` *data* that will be base64 encoded and sent to the @@ -374,8 +374,9 @@ An :class:`SMTP` instance has the following methods: If *keyfile* and *certfile* are provided, these are passed to the :mod:`socket` module's :func:`ssl` function. - Optional *context* parameter is a :class:`ssl.SSLContext` object; This is an alternative to - using a keyfile and a certfile and if specified both *keyfile* and *certfile* should be None. + Optional *context* parameter is a :class:`ssl.SSLContext` object; This is + an alternative to using a keyfile and a certfile and if specified both + *keyfile* and *certfile* should be ``None``. If there has been no previous ``EHLO`` or ``HELO`` command this session, this method tries ESMTP ``EHLO`` first. @@ -439,7 +440,7 @@ An :class:`SMTP` instance has the following methods: and the accompanying error message sent by the server. If ``SMTPUTF8`` is included in *mail_options*, and the server supports it, - *from_addr* and *to_addr* may contain non-ASCII characters. + *from_addr* and *to_addrs* may contain non-ASCII characters. This method may raise the following exceptions: @@ -486,7 +487,7 @@ An :class:`SMTP` instance has the following methods: those arguments with addresses extracted from the headers of *msg* as specified in :rfc:`5322`\: *from_addr* is set to the :mailheader:`Sender` field if it is present, and otherwise to the :mailheader:`From` field. - *to_adresses* combines the values (if any) of the :mailheader:`To`, + *to_addrs* combines the values (if any) of the :mailheader:`To`, :mailheader:`Cc`, and :mailheader:`Bcc` fields from *msg*. If exactly one set of :mailheader:`Resent-*` headers appear in the message, the regular headers are ignored and the :mailheader:`Resent-*` headers are used instead. diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index 48311c5..530000b 100644 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -63,6 +63,8 @@ created. Socket addresses are represented as follows: .. versionchanged:: 3.5 Writable :term:`bytes-like object` is now accepted. +.. _host_port: + - A pair ``(host, port)`` is used for the :const:`AF_INET` address family, where *host* is a string representing either a hostname in Internet domain notation like ``'daring.cwi.nl'`` or an IPv4 address like ``'100.50.200.5'``, @@ -1211,7 +1213,7 @@ to sockets. much data, if any, was successfully sent. .. versionchanged:: 3.5 - The socket timeout is no more reset each time data is sent successfuly. + The socket timeout is no more reset each time data is sent successfully. The socket timeout is now the maximum total duration to send all data. .. versionchanged:: 3.5 @@ -1365,7 +1367,7 @@ Note that there are no methods :meth:`read` or :meth:`write`; use :meth:`~socket.recv` and :meth:`~socket.send` without *flags* argument instead. Socket objects also have these (read-only) attributes that correspond to the -values given to the :class:`socket` constructor. +values given to the :class:`~socket.socket` constructor. .. attribute:: socket.family diff --git a/Doc/library/socketserver.rst b/Doc/library/socketserver.rst index 98d2c46..087f4e0 100644 --- a/Doc/library/socketserver.rst +++ b/Doc/library/socketserver.rst @@ -479,7 +479,9 @@ This is the client side:: The output of the example should look something like this: -Server:: +Server: + +.. code-block:: shell-session $ python TCPServer.py 127.0.0.1 wrote: @@ -487,7 +489,9 @@ Server:: 127.0.0.1 wrote: b'python is nice' -Client:: +Client: + +.. code-block:: shell-session $ python TCPClient.py hello world with TCP Sent: hello world with TCP @@ -599,7 +603,9 @@ An example for the :class:`ThreadingMixIn` class:: server.server_close() -The output of the example should look something like this:: +The output of the example should look something like this: + +.. code-block:: shell-session $ python ThreadedTCPServer.py Server loop running in thread: Thread-1 diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 3bba935..84a4783 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -183,7 +183,7 @@ Module functions and constants parameter is 5.0 (five seconds). For the *isolation_level* parameter, please see the - :attr:`Connection.isolation_level` property of :class:`Connection` objects. + :attr:`~Connection.isolation_level` property of :class:`Connection` objects. SQLite natively supports only the types TEXT, INTEGER, REAL, BLOB and NULL. If you want to use other types you must add support for them yourself. The @@ -285,11 +285,11 @@ Connection Objects .. versionadded:: 3.2 - .. method:: cursor([cursorClass]) + .. method:: cursor(factory=Cursor) - The cursor method accepts a single optional parameter *cursorClass*. If - supplied, this must be a custom cursor class that extends - :class:`sqlite3.Cursor`. + The cursor method accepts a single optional parameter *factory*. If + supplied, this must be a callable returning an instance of :class:`Cursor` + or its subclasses. .. method:: commit() @@ -309,25 +309,26 @@ Connection Objects call :meth:`commit`. If you just close your database connection without calling :meth:`commit` first, your changes will be lost! - .. method:: execute(sql, [parameters]) + .. method:: execute(sql[, parameters]) - This is a nonstandard shortcut that creates an intermediate cursor object by - calling the cursor method, then calls the cursor's :meth:`execute - ` method with the parameters given. + This is a nonstandard shortcut that creates a cursor object by calling + the :meth:`~Connection.cursor` method, calls the cursor's + :meth:`~Cursor.execute` method with the *parameters* given, and returns + the cursor. + .. method:: executemany(sql[, parameters]) - .. method:: executemany(sql, [parameters]) - - This is a nonstandard shortcut that creates an intermediate cursor object by - calling the cursor method, then calls the cursor's :meth:`executemany - ` method with the parameters given. + This is a nonstandard shortcut that creates a cursor object by + calling the :meth:`~Connection.cursor` method, calls the cursor's + :meth:`~Cursor.executemany` method with the *parameters* given, and + returns the cursor. .. method:: executescript(sql_script) - This is a nonstandard shortcut that creates an intermediate cursor object by - calling the cursor method, then calls the cursor's :meth:`executescript - ` method with the parameters given. - + This is a nonstandard shortcut that creates a cursor object by + calling the :meth:`~Connection.cursor` method, calls the cursor's + :meth:`~Cursor.executescript` method with the given *sql_script*, and + returns the cursor. .. method:: create_function(name, num_params, func) @@ -338,7 +339,7 @@ Connection Objects called as the SQL function. The function can return any of the types supported by SQLite: bytes, str, int, - float and None. + float and ``None``. Example: @@ -355,7 +356,7 @@ Connection Objects final result of the aggregate. The ``finalize`` method can return any of the types supported by SQLite: - bytes, str, int, float and None. + bytes, str, int, float and ``None``. Example: @@ -377,7 +378,7 @@ Connection Objects .. literalinclude:: ../includes/sqlite3/collation_reverse.py - To remove a collation, call ``create_collation`` with None as callable:: + To remove a collation, call ``create_collation`` with ``None`` as callable:: con.create_collation("reverse", None) @@ -488,10 +489,6 @@ Connection Objects :mod:`sqlite3` module will return Unicode objects for ``TEXT``. If you want to return bytestrings instead, you can set it to :class:`bytes`. - For efficiency reasons, there's also a way to return :class:`str` objects - only for non-ASCII data, and :class:`bytes` otherwise. To activate it, set - this attribute to :const:`sqlite3.OptimizedUnicode`. - You can also set it to any other callable that accepts a single bytestring parameter and returns the resulting object. @@ -533,7 +530,7 @@ Cursor Objects A :class:`Cursor` instance has the following attributes and methods. - .. method:: execute(sql, [parameters]) + .. method:: execute(sql[, parameters]) Executes an SQL statement. The SQL statement may be parameterized (i. e. placeholders instead of SQL literals). The :mod:`sqlite3` module supports two @@ -545,7 +542,7 @@ Cursor Objects .. literalinclude:: ../includes/sqlite3/execute_1.py :meth:`execute` will only execute a single SQL statement. If you try to execute - more than one statement with it, it will raise a Warning. Use + more than one statement with it, it will raise a :exc:`.Warning`. Use :meth:`executescript` if you want to execute multiple SQL statements with one call. @@ -553,8 +550,8 @@ Cursor Objects .. method:: executemany(sql, seq_of_parameters) Executes an SQL command against all parameter sequences or mappings found in - the sequence *sql*. The :mod:`sqlite3` module also allows using an - :term:`iterator` yielding parameters instead of a sequence. + the sequence *seq_of_parameters*. The :mod:`sqlite3` module also allows + using an :term:`iterator` yielding parameters instead of a sequence. .. literalinclude:: ../includes/sqlite3/executemany_1.py @@ -569,7 +566,7 @@ Cursor Objects at once. It issues a ``COMMIT`` statement first, then executes the SQL script it gets as a parameter. - *sql_script* can be an instance of :class:`str` or :class:`bytes`. + *sql_script* can be an instance of :class:`str`. Example: @@ -608,7 +605,7 @@ Cursor Objects Close the cursor now (rather than whenever ``__del__`` is called). - The cursor will be unusable from this point forward; a ``ProgrammingError`` + The cursor will be unusable from this point forward; a :exc:`ProgrammingError` exception will be raised if any operation is attempted with the cursor. .. attribute:: rowcount @@ -722,6 +719,36 @@ Now we plug :class:`Row` in:: 35.14 +.. _sqlite3-exceptions: + +Exceptions +---------- + +.. exception:: Warning + + A subclass of :exc:`Exception`. + +.. exception:: Error + + The base class of the other exceptions in this module. It is a subclass + of :exc:`Exception`. + +.. exception:: DatabaseError + + Exception raised for errors that are related to the database. + +.. exception:: IntegrityError + + Exception raised when the relational integrity of the database is affected, + e.g. a foreign key check fails. It is a subclass of :exc:`DatabaseError`. + +.. exception:: ProgrammingError + + Exception raised for programming errors, e.g. table not found or already + exists, syntax error in the SQL statement, wrong number of parameters + specified, etc. It is a subclass of :exc:`DatabaseError`. + + .. _sqlite3-types: SQLite and Python types @@ -907,7 +934,7 @@ You can control which kind of ``BEGIN`` statements sqlite3 implicitly executes (or none at all) via the *isolation_level* parameter to the :func:`connect` call, or via the :attr:`isolation_level` property of connections. -If you want **autocommit mode**, then set :attr:`isolation_level` to None. +If you want **autocommit mode**, then set :attr:`isolation_level` to ``None``. Otherwise leave it at its default, which will result in a plain "BEGIN" statement, or set it to one of SQLite's supported isolation levels: "DEFERRED", diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 5792d0d..a2f0083 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -178,7 +178,7 @@ instead. use. Typically, the server chooses a particular protocol version, and the client must adapt to the server's choice. Most of the versions are not interoperable with the other versions. If not specified, the default is - :data:`PROTOCOL_SSLv23`; it provides the most compatibility with other + :data:`PROTOCOL_TLS`; it provides the most compatibility with other versions. Here's a table showing which versions in a client (down the side) can connect @@ -187,11 +187,11 @@ instead. .. table:: ======================== ========= ========= ========== ========= =========== =========== - *client* / **server** **SSLv2** **SSLv3** **SSLv23** **TLSv1** **TLSv1.1** **TLSv1.2** + *client* / **server** **SSLv2** **SSLv3** **TLS** **TLSv1** **TLSv1.1** **TLSv1.2** ------------------------ --------- --------- ---------- --------- ----------- ----------- *SSLv2* yes no yes no no no *SSLv3* no yes yes no no no - *SSLv23* no yes yes yes yes yes + *TLS* (*SSLv23*) no yes yes yes yes yes *TLSv1* no no yes yes no no *TLSv1.1* no no yes no yes no *TLSv1.2* no no yes no no yes @@ -244,7 +244,7 @@ purposes. :const:`None`, this function can choose to trust the system's default CA certificates instead. - The settings are: :data:`PROTOCOL_SSLv23`, :data:`OP_NO_SSLv2`, and + The settings are: :data:`PROTOCOL_TLS`, :data:`OP_NO_SSLv2`, and :data:`OP_NO_SSLv3` with high encryption cipher suites without RC4 and without unauthenticated cipher suites. Passing :data:`~Purpose.SERVER_AUTH` as *purpose* sets :data:`~SSLContext.verify_mode` to :data:`CERT_REQUIRED` @@ -279,6 +279,12 @@ purposes. RC4 was dropped from the default cipher string. + .. versionchanged:: 3.5.3 + + ChaCha20/Poly1305 was added to the default cipher string. + + 3DES was dropped from the default cipher string. + Random generation ^^^^^^^^^^^^^^^^^ @@ -316,6 +322,11 @@ Random generation .. versionadded:: 3.3 + .. deprecated:: 3.5.3 + + OpenSSL has deprecated :func:`ssl.RAND_pseudo_bytes`, use + :func:`ssl.RAND_bytes` instead. + .. function:: RAND_status() Return ``True`` if the SSL pseudo-random number generator has been seeded @@ -334,7 +345,7 @@ Random generation See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources of entropy-gathering daemons. - Availability: not available with LibreSSL. + Availability: not available with LibreSSL and OpenSSL > 1.1.0 .. function:: RAND_add(bytes, entropy) @@ -409,7 +420,7 @@ Certificate handling previously. Return an integer (no fractions of a second in the input format) -.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None) +.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None) Given the address ``addr`` of an SSL-protected server, as a (*hostname*, *port-number*) pair, fetches the server's certificate, and returns it as a @@ -425,7 +436,7 @@ Certificate handling .. versionchanged:: 3.5 The default *ssl_version* is changed from :data:`PROTOCOL_SSLv3` to - :data:`PROTOCOL_SSLv23` for maximum compatibility with modern servers. + :data:`PROTOCOL_TLS` for maximum compatibility with modern servers. .. function:: DER_cert_to_PEM_cert(DER_cert_bytes) @@ -444,13 +455,16 @@ Certificate handling :meth:`SSLContext.set_default_verify_paths`. The return value is a :term:`named tuple` ``DefaultVerifyPaths``: - * :attr:`cafile` - resolved path to cafile or None if the file doesn't exist, - * :attr:`capath` - resolved path to capath or None if the directory doesn't exist, + * :attr:`cafile` - resolved path to cafile or ``None`` if the file doesn't exist, + * :attr:`capath` - resolved path to capath or ``None`` if the directory doesn't exist, * :attr:`openssl_cafile_env` - OpenSSL's environment key that points to a cafile, * :attr:`openssl_cafile` - hard coded path to a cafile, * :attr:`openssl_capath_env` - OpenSSL's environment key that points to a capath, * :attr:`openssl_capath` - hard coded path to a capath directory + Availability: LibreSSL ignores the environment vars + :attr:`openssl_cafile_env` and :attr:`openssl_capath_env` + .. versionadded:: 3.4 .. function:: enum_certificates(store_name) @@ -568,11 +582,21 @@ Constants .. versionadded:: 3.4.4 -.. data:: PROTOCOL_SSLv23 +.. data:: PROTOCOL_TLS Selects the highest protocol version that both the client and server support. Despite the name, this option can select "TLS" protocols as well as "SSL". + .. versionadded:: 3.5.3 + +.. data:: PROTOCOL_SSLv23 + + Alias for data:`PROTOCOL_TLS`. + + .. deprecated:: 3.5.3 + + Use data:`PROTOCOL_TLS` instead. + .. data:: PROTOCOL_SSLv2 Selects SSL version 2 as the channel encryption protocol. @@ -584,6 +608,10 @@ Constants SSL version 2 is insecure. Its use is highly discouraged. + .. deprecated:: 3.5.3 + + OpenSSL has removed support for SSLv2. + .. data:: PROTOCOL_SSLv3 Selects SSL version 3 as the channel encryption protocol. @@ -595,10 +623,20 @@ Constants SSL version 3 is insecure. Its use is highly discouraged. + .. deprecated:: 3.5.3 + + OpenSSL has deprecated all version specific protocols. Use the default + protocol data:`PROTOCOL_TLS` with flags like data:`OP_NO_SSLv3` instead. + .. data:: PROTOCOL_TLSv1 Selects TLS version 1.0 as the channel encryption protocol. + .. deprecated:: 3.5.3 + + OpenSSL has deprecated all version specific protocols. Use the default + protocol data:`PROTOCOL_TLS` with flags like data:`OP_NO_SSLv3` instead. + .. data:: PROTOCOL_TLSv1_1 Selects TLS version 1.1 as the channel encryption protocol. @@ -606,6 +644,11 @@ Constants .. versionadded:: 3.4 + .. deprecated:: 3.5.3 + + OpenSSL has deprecated all version specific protocols. Use the default + protocol data:`PROTOCOL_TLS` with flags like data:`OP_NO_SSLv3` instead. + .. data:: PROTOCOL_TLSv1_2 Selects TLS version 1.2 as the channel encryption protocol. This is the @@ -614,6 +657,11 @@ Constants .. versionadded:: 3.4 + .. deprecated:: 3.5.3 + + OpenSSL has deprecated all version specific protocols. Use the default + protocol data:`PROTOCOL_TLS` with flags like data:`OP_NO_SSLv3` instead. + .. data:: OP_ALL Enables workarounds for various bugs present in other SSL implementations. @@ -625,23 +673,32 @@ Constants .. data:: OP_NO_SSLv2 Prevents an SSLv2 connection. This option is only applicable in - conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from + conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from choosing SSLv2 as the protocol version. .. versionadded:: 3.2 + .. deprecated:: 3.5.3 + + SSLv2 is deprecated + + .. data:: OP_NO_SSLv3 Prevents an SSLv3 connection. This option is only applicable in - conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from + conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from choosing SSLv3 as the protocol version. .. versionadded:: 3.2 + .. deprecated:: 3.5.3 + + SSLv3 is deprecated + .. data:: OP_NO_TLSv1 Prevents a TLSv1 connection. This option is only applicable in - conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from + conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1 as the protocol version. .. versionadded:: 3.2 @@ -649,7 +706,7 @@ Constants .. data:: OP_NO_TLSv1_1 Prevents a TLSv1.1 connection. This option is only applicable in conjunction - with :const:`PROTOCOL_SSLv23`. It prevents the peers from choosing TLSv1.1 as + with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.1 as the protocol version. Available only with openssl version 1.0.1+. .. versionadded:: 3.4 @@ -657,7 +714,7 @@ Constants .. data:: OP_NO_TLSv1_2 Prevents a TLSv1.2 connection. This option is only applicable in conjunction - with :const:`PROTOCOL_SSLv23`. It prevents the peers from choosing TLSv1.2 as + with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.2 as the protocol version. Available only with openssl version 1.0.1+. .. versionadded:: 3.4 @@ -1081,17 +1138,21 @@ such as SSL configuration options, certificate(s) and private key(s). It also manages a cache of SSL sessions for server-side sockets, in order to speed up repeated connections from the same clients. -.. class:: SSLContext(protocol) +.. class:: SSLContext(protocol=PROTOCOL_TLS) - Create a new SSL context. You must pass *protocol* which must be one + Create a new SSL context. You may pass *protocol* which must be one of the ``PROTOCOL_*`` constants defined in this module. - :data:`PROTOCOL_SSLv23` is currently recommended for maximum - interoperability. + :data:`PROTOCOL_TLS` is currently recommended for maximum + interoperability and default value. .. seealso:: :func:`create_default_context` lets the :mod:`ssl` module choose security settings for a given purpose. + .. versionchanged:: 3.5.3 + + :data:`PROTOCOL_TLS` is the default value. + :class:`SSLContext` objects have the following methods and attributes: @@ -1232,6 +1293,9 @@ to speed up repeated connections from the same clients. This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is False. + OpenSSL 1.1.0+ will abort the handshake and raise :exc:`SSLError` when + both sides support ALPN but cannot agree on a protocol. + .. versionadded:: 3.5 .. method:: SSLContext.set_npn_protocols(protocols) @@ -1323,7 +1387,7 @@ to speed up repeated connections from the same clients. This setting doesn't apply to client sockets. You can also use the :data:`OP_SINGLE_ECDH_USE` option to further improve security. - This method is not available if :data:`HAS_ECDH` is False. + This method is not available if :data:`HAS_ECDH` is ``False``. .. versionadded:: 3.3 @@ -1598,7 +1662,7 @@ If you prefer to tune security settings yourself, you might create a context from scratch (but beware that you might not get the settings right):: - >>> context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + >>> context = ssl.SSLContext(ssl.PROTOCOL_TLS) >>> context.verify_mode = ssl.CERT_REQUIRED >>> context.check_hostname = True >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt") @@ -1999,15 +2063,17 @@ Protocol versions SSL versions 2 and 3 are considered insecure and are therefore dangerous to use. If you want maximum compatibility between clients and servers, it is -recommended to use :const:`PROTOCOL_SSLv23` as the protocol version and then +recommended to use :const:`PROTOCOL_TLS` as the protocol version and then disable SSLv2 and SSLv3 explicitly using the :data:`SSLContext.options` attribute:: - context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + context = ssl.SSLContext(ssl.PROTOCOL_TLS) context.options |= ssl.OP_NO_SSLv2 context.options |= ssl.OP_NO_SSLv3 + context.options |= ssl.OP_NO_TLSv1 + context.options |= ssl.OP_NO_TLSv1_1 -The SSL context created above will only allow TLSv1 and later (if +The SSL context created above will only allow TLSv1.2 and later (if supported by your system) connections. Cipher selection diff --git a/Doc/library/statistics.rst b/Doc/library/statistics.rst index ea3d7da..7685621 100644 --- a/Doc/library/statistics.rst +++ b/Doc/library/statistics.rst @@ -191,9 +191,9 @@ However, for reading convenience, most of the examples show sorted sequences. 52.5 In the following example, the data are rounded, so that each value represents - the midpoint of data classes, e.g. 1 is the midpoint of the class 0.5-1.5, 2 - is the midpoint of 1.5-2.5, 3 is the midpoint of 2.5-3.5, etc. With the data - given, the middle value falls somewhere in the class 3.5-4.5, and + the midpoint of data classes, e.g. 1 is the midpoint of the class 0.5--1.5, 2 + is the midpoint of 1.5--2.5, 3 is the midpoint of 2.5--3.5, etc. With the data + given, the middle value falls somewhere in the class 3.5--4.5, and interpolation is used to estimate it: .. doctest:: diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index e8a488e..71cb7f2 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -485,7 +485,7 @@ class`. In addition, it provides a few more methods: >>> (-1024).to_bytes(10, byteorder='big', signed=True) b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00' >>> x = 1000 - >>> x.to_bytes((x.bit_length() // 8) + 1, byteorder='little') + >>> x.to_bytes((x.bit_length() + 7) // 8, byteorder='little') b'\xe8\x03' The integer is represented using *length* bytes. An :exc:`OverflowError` @@ -692,16 +692,16 @@ number, :class:`float`, or :class:`complex`:: m, n = m // P, n // P if n % P == 0: - hash_ = sys.hash_info.inf + hash_value = sys.hash_info.inf else: # Fermat's Little Theorem: pow(n, P-1, P) is 1, so # pow(n, P-2, P) gives the inverse of n modulo P. - hash_ = (abs(m) % P) * pow(n, P - 2, P) % P + hash_value = (abs(m) % P) * pow(n, P - 2, P) % P if m < 0: - hash_ = -hash_ - if hash_ == -1: - hash_ = -2 - return hash_ + hash_value = -hash_value + if hash_value == -1: + hash_value = -2 + return hash_value def hash_float(x): """Compute the hash of a float x.""" @@ -716,13 +716,13 @@ number, :class:`float`, or :class:`complex`:: def hash_complex(z): """Compute the hash of a complex number z.""" - hash_ = hash_float(z.real) + sys.hash_info.imag * hash_float(z.imag) + hash_value = hash_float(z.real) + sys.hash_info.imag * hash_float(z.imag) # do a signed reduction modulo 2**sys.hash_info.width M = 2**(sys.hash_info.width - 1) - hash_ = (hash_ & (M - 1)) - (hash & M) - if hash_ == -1: - hash_ == -2 - return hash_ + hash_value = (hash_value & (M - 1)) - (hash_value & M) + if hash_value == -1: + hash_value = -2 + return hash_value .. _typeiter: @@ -927,7 +927,7 @@ Notes: :ref:`faq-multidimensional-list`. (3) - If *i* or *j* is negative, the index is relative to the end of the string: + If *i* or *j* is negative, the index is relative to the end of sequence *s*: ``len(s) + i`` or ``len(s) + j`` is substituted. But note that ``-0`` is still ``0``. @@ -942,8 +942,10 @@ Notes: The slice of *s* from *i* to *j* with step *k* is defined as the sequence of items with index ``x = i + n*k`` such that ``0 <= n < (j-i)/k``. In other words, the indices are ``i``, ``i+k``, ``i+2*k``, ``i+3*k`` and so on, stopping when - *j* is reached (but never including *j*). If *i* or *j* is greater than - ``len(s)``, use ``len(s)``. If *i* or *j* are omitted or ``None``, they become + *j* is reached (but never including *j*). When *k* is positive, + *i* and *j* are reduced to ``len(s)`` if they are greater. + When *k* is negative, *i* and *j* are reduced to ``len(s) - 1`` if + they are greater. If *i* or *j* are omitted or ``None``, they become "end" values (which end depends on the sign of *k*). Note, *k* cannot be zero. If *k* is ``None``, it is treated like ``1``. @@ -1639,18 +1641,20 @@ expression support in the :mod:`re` module). Return true if all characters in the string are decimal characters and there is at least one character, false - otherwise. Decimal characters are those from general category "Nd". This category - includes digit characters, and all characters - that can be used to form decimal-radix numbers, e.g. U+0660, - ARABIC-INDIC DIGIT ZERO. + otherwise. Decimal characters are those that can be used to form + numbers in base 10, e.g. U+0660, ARABIC-INDIC DIGIT + ZERO. Formally a decimal character is a character in the Unicode + General Category "Nd". .. method:: str.isdigit() Return true if all characters in the string are digits and there is at least one character, false otherwise. Digits include decimal characters and digits that need - special handling, such as the compatibility superscript digits. Formally, a digit - is a character that has the property value Numeric_Type=Digit or Numeric_Type=Decimal. + special handling, such as the compatibility superscript digits. + This covers digits which cannot be used to form numbers in base 10, + like the Kharosthi numbers. Formally, a digit is a character that has the + property value Numeric_Type=Digit or Numeric_Type=Decimal. .. method:: str.isidentifier() @@ -1751,13 +1755,13 @@ expression support in the :mod:`re` module). If there is only one argument, it must be a dictionary mapping Unicode ordinals (integers) or characters (strings of length 1) to Unicode ordinals, - strings (of arbitrary lengths) or None. Character keys will then be + strings (of arbitrary lengths) or ``None``. Character keys will then be converted to ordinals. If there are two arguments, they must be strings of equal length, and in the resulting dictionary, each character in x will be mapped to the character at the same position in y. If there is a third argument, it must be a string, - whose characters will be mapped to None in the result. + whose characters will be mapped to ``None`` in the result. .. method:: str.partition(sep) @@ -2152,7 +2156,7 @@ The conversion types are: +------------+-----------------------------------------------------+-------+ | ``'o'`` | Signed octal value. | \(1) | +------------+-----------------------------------------------------+-------+ -| ``'u'`` | Obsolete type -- it is identical to ``'d'``. | \(7) | +| ``'u'`` | Obsolete type -- it is identical to ``'d'``. | \(6) | +------------+-----------------------------------------------------+-------+ | ``'x'`` | Signed hexadecimal (lowercase). | \(2) | +------------+-----------------------------------------------------+-------+ @@ -2193,15 +2197,12 @@ The conversion types are: Notes: (1) - The alternate form causes a leading zero (``'0'``) to be inserted between - left-hand padding and the formatting of the number if the leading character - of the result is not already a zero. + The alternate form causes a leading octal specifier (``'0o'``) to be + inserted before the first digit. (2) The alternate form causes a leading ``'0x'`` or ``'0X'`` (depending on whether - the ``'x'`` or ``'X'`` format was used) to be inserted between left-hand padding - and the formatting of the number if the leading character of the result is not - already a zero. + the ``'x'`` or ``'X'`` format was used) to be inserted before the first digit. (3) The alternate form causes the result to always contain a decimal point, even if @@ -2220,8 +2221,7 @@ Notes: (5) If precision is ``N``, the output is truncated to ``N`` characters. - -(7) +(6) See :pep:`237`. Since Python strings have an explicit length, ``%s`` conversions do not assume @@ -3294,15 +3294,12 @@ The conversion types are: Notes: (1) - The alternate form causes a leading zero (``'0'``) to be inserted between - left-hand padding and the formatting of the number if the leading character - of the result is not already a zero. + The alternate form causes a leading octal specifier (``'0o'``) to be + inserted before the first digit. (2) The alternate form causes a leading ``'0x'`` or ``'0X'`` (depending on whether - the ``'x'`` or ``'X'`` format was used) to be inserted between left-hand padding - and the formatting of the number if the leading character of the result is not - already a zero. + the ``'x'`` or ``'X'`` format was used) to be inserted before the first digit. (3) The alternate form causes the result to always contain a decimal point, even if @@ -3751,7 +3748,7 @@ copying. memory as an N-dimensional array. .. versionchanged:: 3.3 - An empty tuple instead of None when ndim = 0. + An empty tuple instead of ``None`` when ndim = 0. .. attribute:: strides @@ -3759,7 +3756,7 @@ copying. access each element for each dimension of the array. .. versionchanged:: 3.3 - An empty tuple instead of None when ndim = 0. + An empty tuple instead of ``None`` when ndim = 0. .. attribute:: suboffsets @@ -3866,17 +3863,17 @@ The constructors for both classes work the same: Test whether the set is a proper superset of *other*, that is, ``set >= other and set != other``. - .. method:: union(other, ...) + .. method:: union(*others) set | other | ... Return a new set with elements from the set and all others. - .. method:: intersection(other, ...) + .. method:: intersection(*others) set & other & ... Return a new set with elements common to the set and all others. - .. method:: difference(other, ...) + .. method:: difference(*others) set - other - ... Return a new set with elements in the set that are not in the others. @@ -3926,17 +3923,17 @@ The constructors for both classes work the same: The following table lists operations available for :class:`set` that do not apply to immutable instances of :class:`frozenset`: - .. method:: update(other, ...) + .. method:: update(*others) set |= other | ... Update the set, adding elements from all others. - .. method:: intersection_update(other, ...) + .. method:: intersection_update(*others) set &= other & ... Update the set, keeping only elements found in it and all others. - .. method:: difference_update(other, ...) + .. method:: difference_update(*others) set -= other | ... Update the set, removing elements found in others. @@ -4360,9 +4357,10 @@ an (external) *definition* for a module named *foo* somewhere.) A special attribute of every module is :attr:`~object.__dict__`. This is the dictionary containing the module's symbol table. Modifying this dictionary will actually change the module's symbol table, but direct assignment to the -:attr:`__dict__` attribute is not possible (you can write +:attr:`~object.__dict__` attribute is not possible (you can write ``m.__dict__['a'] = 1``, which defines ``m.a`` to be ``1``, but you can't write -``m.__dict__ = {}``). Modifying :attr:`__dict__` directly is not recommended. +``m.__dict__ = {}``). Modifying :attr:`~object.__dict__` directly is +not recommended. Modules built into the interpreter are written like this: ````. If loaded from a file, they are written as `` @@ -685,8 +696,8 @@ Command line options List files in a tarfile. -.. cmdoption:: -c - --create +.. cmdoption:: -c ... + --create ... Create tarfile from source files. @@ -702,7 +713,7 @@ Command line options .. cmdoption:: -v, --verbose - Verbose output + Verbose output. .. _tar-examples: diff --git a/Doc/library/test.rst b/Doc/library/test.rst index 2ea9c27..59577f0 100644 --- a/Doc/library/test.rst +++ b/Doc/library/test.rst @@ -398,7 +398,7 @@ The :mod:`test.support` module defines the following functions: A context manager that creates a temporary directory at *path* and yields the directory. - If *path* is None, the temporary directory is created using + If *path* is ``None``, the temporary directory is created using :func:`tempfile.mkdtemp`. If *quiet* is ``False``, the context manager raises an exception on error. Otherwise, if *path* is specified and cannot be created, only a warning is issued. @@ -421,7 +421,7 @@ The :mod:`test.support` module defines the following functions: The context manager creates a temporary directory in the current directory with name *name* before temporarily changing the current - working directory. If *name* is None, the temporary directory is + working directory. If *name* is ``None``, the temporary directory is created using :func:`tempfile.mkdtemp`. If *quiet* is ``False`` and it is not possible to create or change diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst index 3066496..2792dfd 100644 --- a/Doc/library/threading.rst +++ b/Doc/library/threading.rst @@ -256,7 +256,7 @@ since it is impossible to detect the termination of alien threads. Wait until the thread terminates. This blocks the calling thread until the thread whose :meth:`~Thread.join` method is called terminates -- either - normally or through an unhandled exception --, or until the optional + normally or through an unhandled exception -- or until the optional timeout occurs. When the *timeout* argument is present and not ``None``, it should be a @@ -615,7 +615,7 @@ item to the buffer only needs to wake up one consumer thread. .. method:: wait_for(predicate, timeout=None) - Wait until a condition evaluates to True. *predicate* should be a + Wait until a condition evaluates to true. *predicate* should be a callable which result will be interpreted as a boolean value. A *timeout* may be provided giving the maximum time to wait. @@ -714,7 +714,7 @@ Semaphores also support the :ref:`context management protocol `. without an argument would block, return false immediately; otherwise, do the same thing as when called without arguments, and return true. - When invoked with a *timeout* other than None, it will block for at + When invoked with a *timeout* other than ``None``, it will block for at most *timeout* seconds. If acquire does not complete successfully in that interval, return false. Return true otherwise. @@ -854,8 +854,8 @@ For example:: Create a timer that will run *function* with arguments *args* and keyword arguments *kwargs*, after *interval* seconds have passed. - If *args* is None (the default) then an empty list will be used. - If *kwargs* is None (the default) then an empty dict will be used. + If *args* is ``None`` (the default) then an empty list will be used. + If *kwargs* is ``None`` (the default) then an empty dict will be used. .. versionchanged:: 3.3 changed from a factory function to a class. diff --git a/Doc/library/tkinter.rst b/Doc/library/tkinter.rst index 130aafe..3e1faed 100644 --- a/Doc/library/tkinter.rst +++ b/Doc/library/tkinter.rst @@ -199,19 +199,19 @@ A Simple Hello World Program class Application(tk.Frame): def __init__(self, master=None): - tk.Frame.__init__(self, master) + super().__init__(master) self.pack() - self.createWidgets() + self.create_widgets() - def createWidgets(self): + def create_widgets(self): self.hi_there = tk.Button(self) self.hi_there["text"] = "Hello World\n(click me)" self.hi_there["command"] = self.say_hi self.hi_there.pack(side="top") - self.QUIT = tk.Button(self, text="QUIT", fg="red", + self.quit = tk.Button(self, text="QUIT", fg="red", command=root.destroy) - self.QUIT.pack(side="bottom") + self.quit.pack(side="bottom") def say_hi(self): print("hi there, everyone!") @@ -536,7 +536,7 @@ For example:: class App(Frame): def __init__(self, master=None): - Frame.__init__(self, master) + super().__init__(master) self.pack() self.entrythingy = Entry() @@ -581,13 +581,13 @@ part of the implementation, and not an interface to Tk functionality. Here are some examples of typical usage:: - from tkinter import * - class App(Frame): + import tkinter as tk + + class App(tk.Frame): def __init__(self, master=None): - Frame.__init__(self, master) + super().__init__(master) self.pack() - # create the application myapp = App() @@ -708,13 +708,13 @@ add For example:: - def turnRed(self, event): + def turn_red(self, event): event.widget["activeforeground"] = "red" - self.button.bind("", self.turnRed) + self.button.bind("", self.turn_red) Notice how the widget field of the event is being accessed in the -:meth:`turnRed` callback. This field contains the widget that caught the X +``turn_red()`` callback. This field contains the widget that caught the X event. The following table lists the other event fields you can access, and how they are denoted in Tk, which can be useful when referring to the Tk man pages. diff --git a/Doc/library/tkinter.ttk.rst b/Doc/library/tkinter.ttk.rst index dbb5bd2..3dad182 100644 --- a/Doc/library/tkinter.ttk.rst +++ b/Doc/library/tkinter.ttk.rst @@ -1404,7 +1404,7 @@ option. If you don't know the class name of a widget, use the method Layouts ^^^^^^^ -A layout can be just None, if it takes no options, or a dict of +A layout can be just ``None``, if it takes no options, or a dict of options specifying how to arrange the element. The layout mechanism uses a simplified version of the pack geometry manager: given an initial cavity, each element is allocated a parcel. Valid diff --git a/Doc/library/token.rst b/Doc/library/token.rst index 116efca..effb711 100644 --- a/Doc/library/token.rst +++ b/Doc/library/token.rst @@ -108,10 +108,3 @@ The token constants are: Added :data:`AWAIT` and :data:`ASYNC` tokens. Starting with Python 3.7, "async" and "await" will be tokenized as :data:`NAME` tokens, and :data:`AWAIT` and :data:`ASYNC` will be removed. - -.. seealso:: - - Module :mod:`parser` - The second example for the :mod:`parser` module shows how to use the - :mod:`symbol` module. - diff --git a/Doc/library/traceback.rst b/Doc/library/traceback.rst index 6ec9ada..3c1d9bb 100644 --- a/Doc/library/traceback.rst +++ b/Doc/library/traceback.rst @@ -361,7 +361,7 @@ exception and traceback: traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout) print("*** print_exc:") - traceback.print_exc() + traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) @@ -407,9 +407,9 @@ The output for the example would look similar to this: ' File "", line 7, in bright_side_of_death\n return tuple()[0]\n', 'IndexError: tuple index out of range\n'] *** extract_tb: - [('', 10, '', 'lumberjack()'), - ('', 4, 'lumberjack', 'bright_side_of_death()'), - ('', 7, 'bright_side_of_death', 'return tuple()[0]')] + [, line 10 in >, + , line 4 in lumberjack>, + , line 7 in bright_side_of_death>] *** format_tb: [' File "", line 10, in \n lumberjack()\n', ' File "", line 4, in lumberjack\n bright_side_of_death()\n', diff --git a/Doc/library/tracemalloc.rst b/Doc/library/tracemalloc.rst index 3a0b1e0..2c8ad0e 100644 --- a/Doc/library/tracemalloc.rst +++ b/Doc/library/tracemalloc.rst @@ -66,7 +66,7 @@ Example of output of the Python test suite:: :5: size=49.7 KiB, count=148, average=344 B /usr/lib/python3.4/sysconfig.py:411: size=48.0 KiB, count=1, average=48.0 KiB -We can see that Python loaded ``4.8 MiB`` data (bytecode and constants) from +We can see that Python loaded ``4855 KiB`` data (bytecode and constants) from modules and that the :mod:`collections` module allocated ``244 KiB`` to build :class:`~collections.namedtuple` types. @@ -106,8 +106,8 @@ Example of output before/after running some tests of the Python test suite:: /usr/lib/python3.4/urllib/parse.py:476: size=71.8 KiB (+71.8 KiB), count=969 (+969), average=76 B /usr/lib/python3.4/contextlib.py:38: size=67.2 KiB (+67.2 KiB), count=126 (+126), average=546 B -We can see that Python has loaded ``8.2 MiB`` of module data (bytecode and -constants), and that this is ``4.4 MiB`` more than had been loaded before the +We can see that Python has loaded ``8173 KiB`` of module data (bytecode and +constants), and that this is ``4428 KiB`` more than had been loaded before the tests, when the previous snapshot was taken. Similarly, the :mod:`linecache` module has cached ``940 KiB`` of Python source code to format tracebacks, all of it since the previous snapshot. @@ -176,7 +176,7 @@ Example of output of the Python test suite (traceback limited to 25 frames):: "__main__", fname, loader, pkg_name) We can see that the most memory was allocated in the :mod:`importlib` module to -load data (bytecode and constants) from modules: ``870 KiB``. The traceback is +load data (bytecode and constants) from modules: ``870.1 KiB``. The traceback is where the :mod:`importlib` loaded data most recently: on the ``import pdb`` line of the :mod:`doctest` module. The traceback may change if a new module is loaded. @@ -192,12 +192,12 @@ ignoring ```` and ```` files:: import os import tracemalloc - def display_top(snapshot, group_by='lineno', limit=10): + def display_top(snapshot, key_type='lineno', limit=10): snapshot = snapshot.filter_traces(( tracemalloc.Filter(False, ""), tracemalloc.Filter(False, ""), )) - top_stats = snapshot.statistics(group_by) + top_stats = snapshot.statistics(key_type) print("Top %s lines" % limit) for index, stat in enumerate(top_stats[:limit], 1): @@ -438,12 +438,12 @@ Snapshot The :func:`take_snapshot` function creates a snapshot instance. - .. method:: compare_to(old_snapshot: Snapshot, group_by: str, cumulative: bool=False) + .. method:: compare_to(old_snapshot: Snapshot, key_type: str, cumulative: bool=False) Compute the differences with an old snapshot. Get statistics as a sorted - list of :class:`StatisticDiff` instances grouped by *group_by*. + list of :class:`StatisticDiff` instances grouped by *key_type*. - See the :meth:`Snapshot.statistics` method for *group_by* and *cumulative* + See the :meth:`Snapshot.statistics` method for *key_type* and *cumulative* parameters. The result is sorted from the biggest to the smallest by: absolute value @@ -478,13 +478,13 @@ Snapshot See also :meth:`dump`. - .. method:: statistics(group_by: str, cumulative: bool=False) + .. method:: statistics(key_type: str, cumulative: bool=False) Get statistics as a sorted list of :class:`Statistic` instances grouped - by *group_by*: + by *key_type*: ===================== ======================== - group_by description + key_type description ===================== ======================== ``'filename'`` filename ``'lineno'`` filename and line number @@ -493,7 +493,7 @@ Snapshot If *cumulative* is ``True``, cumulate size and count of memory blocks of all frames of the traceback of a trace, not only the most recent frame. - The cumulative mode can only be used with *group_by* equals to + The cumulative mode can only be used with *key_type* equals to ``'filename'`` and ``'lineno'``. The result is sorted from the biggest to the smallest by: diff --git a/Doc/library/turtle.rst b/Doc/library/turtle.rst index e4a82ea..1986972 100644 --- a/Doc/library/turtle.rst +++ b/Doc/library/turtle.rst @@ -549,7 +549,7 @@ Turtle motion :param n: an integer (or ``None``) - Delete all or first/last *n* of turtle's stamps. If *n* is None, delete + Delete all or first/last *n* of turtle's stamps. If *n* is ``None``, delete all stamps, if *n* > 0 delete first *n* stamps, else if *n* < 0 delete last *n* stamps. @@ -1799,7 +1799,7 @@ Input methods Pop up a dialog window for input of a string. Parameter title is the title of the dialog window, propmt is a text mostly describing what information to input. - Return the string input. If the dialog is canceled, return None. :: + Return the string input. If the dialog is canceled, return ``None``. :: >>> screen.textinput("NIM", "Name of first player:") @@ -1819,7 +1819,7 @@ Input methods The number input must be in the range minval .. maxval if these are given. If not, a hint is issued and the dialog remains open for correction. - Return the number input. If the dialog is canceled, return None. :: + Return the number input. If the dialog is canceled, return ``None``. :: >>> screen.numinput("Poker", "Your stakes:", 1000, minval=10, maxval=10000) @@ -1984,10 +1984,10 @@ Methods specific to Screen, not inherited from TurtleScreen :param height: if an integer, the height in pixels, if a float, a fraction of the screen; default is 75% of screen :param startx: if positive, starting position in pixels from the left - edge of the screen, if negative from the right edge, if None, + edge of the screen, if negative from the right edge, if ``None``, center window horizontally :param starty: if positive, starting position in pixels from the top - edge of the screen, if negative from the bottom edge, if None, + edge of the screen, if negative from the bottom edge, if ``None``, center window vertically .. doctest:: diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index 731e2ec..923cbb8 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -11,8 +11,8 @@ -------------- This module supports type hints as specified by :pep:`484`. The most -fundamental support consists of the type :class:`Any`, :class:`Union`, -:class:`Tuple`, :class:`Callable`, :class:`TypeVar`, and +fundamental support consists of the types :data:`Any`, :data:`Union`, +:data:`Tuple`, :data:`Callable`, :class:`TypeVar`, and :class:`Generic`. For full specification please see :pep:`484`. For a simplified introduction to type hints see :pep:`483`. @@ -29,10 +29,110 @@ arguments. Type aliases ------------ -A type alias is defined by assigning the type to the alias:: +A type alias is defined by assigning the type to the alias. In this example, +``Vector`` and ``List[float]`` will be treated as interchangeable synonyms:: + from typing import List Vector = List[float] + def scale(scalar: float, vector: Vector) -> Vector: + return [scalar * num for num in vector] + + # typechecks; a list of floats qualifies as a Vector. + new_vector = scale(2.0, [1.0, -4.2, 5.4]) + +Type aliases are useful for simplifying complex type signatures. For example:: + + from typing import Dict, Tuple, List + + ConnectionOptions = Dict[str, str] + Address = Tuple[str, int] + Server = Tuple[Address, ConnectionOptions] + + def broadcast_message(message: str, servers: List[Server]) -> None: + ... + + # The static type checker will treat the previous type signature as + # being exactly equivalent to this one. + def broadcast_message( + message: str, + servers: List[Tuple[Tuple[str, int], Dict[str, str]]]) -> None: + ... + +Note that ``None`` as a type hint is a special case and is replaced by +``type(None)``. + +.. _distinct: + +NewType +------- + +Use the :func:`NewType` helper function to create distinct types:: + + from typing import NewType + + UserId = NewType('UserId', int) + some_id = UserId(524313) + +The static type checker will treat the new type as if it were a subclass +of the original type. This is useful in helping catch logical errors:: + + def get_user_name(user_id: UserId) -> str: + ... + + # typechecks + user_a = get_user_name(UserId(42351)) + + # does not typecheck; an int is not a UserId + user_b = get_user_name(-1) + +You may still perform all ``int`` operations on a variable of type ``UserId``, +but the result will always be of type ``int``. This lets you pass in a +``UserId`` wherever an ``int`` might be expected, but will prevent you from +accidentally creating a ``UserId`` in an invalid way:: + + # 'output' is of type 'int', not 'UserId' + output = UserId(23413) + UserId(54341) + +Note that these checks are enforced only by the static type checker. At runtime +the statement ``Derived = NewType('Derived', Base)`` will make ``Derived`` a +function that immediately returns whatever parameter you pass it. That means +the expression ``Derived(some_value)`` does not create a new class or introduce +any overhead beyond that of a regular function call. + +More precisely, the expression ``some_value is Derived(some_value)`` is always +true at runtime. + +This also means that it is not possible to create a subtype of ``Derived`` +since it is an identity function at runtime, not an actual type. Similarly, it +is not possible to create another :func:`NewType` based on a ``Derived`` type:: + + from typing import NewType + + UserId = NewType('UserId', int) + + # Fails at runtime and does not typecheck + class AdminUserId(UserId): pass + + # Also does not typecheck + ProUserId = NewType('ProUserId', UserId) + +See :pep:`484` for more details. + +.. note:: + + Recall that the use of a type alias declares two types to be *equivalent* to + one another. Doing ``Alias = Original`` will make the static type checker + treat ``Alias`` as being *exactly equivalent* to ``Original`` in all cases. + This is useful when you want to simplify complex type signatures. + + In contrast, ``NewType`` declares one type to be a *subtype* of another. + Doing ``Derived = NewType('Derived', Original)`` will make the static type + checker treat ``Derived`` as a *subclass* of ``Original``, which means a + value of type ``Original`` cannot be used in places where a value of type + ``Derived`` is expected. This is useful when you want to prevent logic + errors with minimal runtime cost. + Callable -------- @@ -53,7 +153,6 @@ For example:: It is possible to declare the return type of a callable without specifying the call signature by substituting a literal ellipsis for the list of arguments in the type hint: ``Callable[..., ReturnType]``. -``None`` as a type hint is a special case and is replaced by ``type(None)``. Generics -------- @@ -109,7 +208,7 @@ A user-defined class can be defined as a generic class. return self.value def log(self, message: str) -> None: - self.logger.info('{}: {}'.format(self.name, message)) + self.logger.info('%s: %s', self.name, message) ``Generic[T]`` as a base class defines that the class ``LoggedVar`` takes a single type parameter ``T`` . This also makes ``T`` valid as a type within the @@ -167,48 +266,119 @@ When inheriting from generic classes, some type variables could be fixed:: In this case ``MyDict`` has a single parameter, ``T``. -Subclassing a generic class without specifying type parameters assumes -:class:`Any` for each position. In the following example, ``MyIterable`` is +Using a generic class without specifying type parameters assumes +:data:`Any` for each position. In the following example, ``MyIterable`` is not generic but implicitly inherits from ``Iterable[Any]``:: from typing import Iterable class MyIterable(Iterable): # Same as Iterable[Any] +User defined generic type aliases are also supported. Examples:: + + from typing import TypeVar, Iterable, Tuple, Union + S = TypeVar('S') + Response = Union[Iterable[S], int] + + # Return type here is same as Union[Iterable[str], int] + def response(query: str) -> Response[str]: + ... + + T = TypeVar('T', int, float, complex) + Vec = Iterable[Tuple[T, T]] + + def inproduct(v: Vec[T]) -> T: # Same as Iterable[Tuple[T, T]] + return sum(x*y for x, y in v) + The metaclass used by :class:`Generic` is a subclass of :class:`abc.ABCMeta`. A generic class can be an ABC by including abstract methods or properties, and generic classes can also have ABCs as base classes without a metaclass -conflict. Generic metaclasses are not supported. +conflict. Generic metaclasses are not supported. The outcome of parameterizing +generics is cached, and most types in the typing module are hashable and +comparable for equality. -The :class:`Any` type +The :data:`Any` type --------------------- -A special kind of type is :class:`Any`. Every type is a subtype of -:class:`Any`. This is also true for the builtin type object. However, to the -static type checker these are completely different. +A special kind of type is :data:`Any`. A static type checker will treat +every type as being compatible with :data:`Any` and :data:`Any` as being +compatible with every type. -When the type of a value is :class:`object`, the type checker will reject -almost all operations on it, and assigning it to a variable (or using it as a -return value) of a more specialized type is a type error. On the other hand, -when a value has type :class:`Any`, the type checker will allow all operations -on it, and a value of type :class:`Any` can be assigned to a variable (or used -as a return value) of a more constrained type. +This means that it is possible to perform any operation or method call on a +value of type on :data:`Any` and assign it to any variable:: + from typing import Any -Classes, functions, and decorators ----------------------------------- + a = None # type: Any + a = [] # OK + a = 2 # OK -The module defines the following classes, functions and decorators: + s = '' # type: str + s = a # OK -.. class:: Any + def foo(item: Any) -> int: + # Typechecks; 'item' could be any type, + # and that type might have a 'bar' method + item.bar() + ... - Special type indicating an unconstrained type. +Notice that no typechecking is performed when assigning a value of type +:data:`Any` to a more precise type. For example, the static type checker did +not report an error when assigning ``a`` to ``s`` even though ``s`` was +declared to be of type :class:`str` and receives an :class:`int` value at +runtime! + +Furthermore, all functions without a return type or parameter types will +implicitly default to using :data:`Any`:: + + def legacy_parser(text): + ... + return data + + # A static type checker will treat the above + # as having the same signature as: + def legacy_parser(text: Any) -> Any: + ... + return data + +This behavior allows :data:`Any` to be used as an *escape hatch* when you +need to mix dynamically and statically typed code. + +Contrast the behavior of :data:`Any` with the behavior of :class:`object`. +Similar to :data:`Any`, every type is a subtype of :class:`object`. However, +unlike :data:`Any`, the reverse is not true: :class:`object` is *not* a +subtype of every other type. + +That means when the type of a value is :class:`object`, a type checker will +reject almost all operations on it, and assigning it to a variable (or using +it as a return value) of a more specialized type is a type error. For example:: + + def hash_a(item: object) -> int: + # Fails; an object does not have a 'magic' method. + item.magic() + ... + + def hash_b(item: Any) -> int: + # Typechecks + item.magic() + ... + + # Typechecks, since ints and strs are subclasses of object + hash_a(42) + hash_a("foo") + + # Typechecks, since Any is compatible with all types + hash_b(42) + hash_b("foo") + +Use :class:`object` to indicate that a value could be any type in a typesafe +manner. Use :data:`Any` to indicate that a value is dynamically typed. + +Classes, functions, and decorators +---------------------------------- - * Any object is an instance of :class:`Any`. - * Any class is a subclass of :class:`Any`. - * As a special case, :class:`Any` and :class:`object` are subclasses of - each other. +The module defines the following classes, functions and decorators: .. class:: TypeVar @@ -248,79 +418,6 @@ The module defines the following classes, functions and decorators: for the type variable must be a subclass of the boundary type, see :pep:`484`. -.. class:: Union - - Union type; ``Union[X, Y]`` means either X or Y. - - To define a union, use e.g. ``Union[int, str]``. Details: - - * The arguments must be types and there must be at least one. - - * Unions of unions are flattened, e.g.:: - - Union[Union[int, str], float] == Union[int, str, float] - - * Unions of a single argument vanish, e.g.:: - - Union[int] == int # The constructor actually returns int - - * Redundant arguments are skipped, e.g.:: - - Union[int, str, int] == Union[int, str] - - * When comparing unions, the argument order is ignored, e.g.:: - - Union[int, str] == Union[str, int] - - * If :class:`Any` is present it is the sole survivor, e.g.:: - - Union[int, Any] == Any - - * You cannot subclass or instantiate a union. - - * You cannot write ``Union[X][Y]``. - - * You can use ``Optional[X]`` as a shorthand for ``Union[X, None]``. - -.. class:: Optional - - Optional type. - - ``Optional[X]`` is equivalent to ``Union[X, type(None)]``. - - Note that this is not the same concept as an optional argument, - which is one that has a default. An optional argument with a - default needn't use the ``Optional`` qualifier on its type - annotation (although it is inferred if the default is ``None``). - A mandatory argument may still have an ``Optional`` type if an - explicit value of ``None`` is allowed. - -.. class:: Tuple - - Tuple type; ``Tuple[X, Y]`` is the type of a tuple of two items - with the first item of type X and the second of type Y. - - Example: ``Tuple[T1, T2]`` is a tuple of two elements corresponding - to type variables T1 and T2. ``Tuple[int, float, str]`` is a tuple - of an int, a float and a string. - - To specify a variable-length tuple of homogeneous type, - use literal ellipsis, e.g. ``Tuple[int, ...]``. - -.. class:: Callable - - Callable type; ``Callable[[int], str]`` is a function of (int) -> str. - - The subscription syntax must always be used with exactly two - values: the argument list and the return type. The argument list - must be a list of types; the return type must be a single type. - - There is no syntax to indicate optional or keyword arguments, - such function types are rarely used as callback types. - ``Callable[..., ReturnType]`` could be used to type hint a callable - taking any number of arguments and returning ``ReturnType``. - A plain :class:`Callable` is equivalent to ``Callable[..., Any]``. - .. class:: Generic Abstract base class for generic types. @@ -345,13 +442,56 @@ The module defines the following classes, functions and decorators: except KeyError: return default +.. class:: Type(Generic[CT_co]) + + A variable annotated with ``C`` may accept a value of type ``C``. In + contrast, a variable annotated with ``Type[C]`` may accept values that are + classes themselves -- specifically, it will accept the *class object* of + ``C``. For example:: + + a = 3 # Has type 'int' + b = int # Has type 'Type[int]' + c = type(a) # Also has type 'Type[int]' + + Note that ``Type[C]`` is covariant:: + + class User: ... + class BasicUser(User): ... + class ProUser(User): ... + class TeamUser(User): ... + + # Accepts User, BasicUser, ProUser, TeamUser, ... + def make_new_user(user_class: Type[User]) -> User: + # ... + return user_class() + + The fact that ``Type[C]`` is covariant implies that all subclasses of + ``C`` should implement the same constructor signature and class method + signatures as ``C``. The type checker should flag violations of this, + but should also allow constructor calls in subclasses that match the + constructor calls in the indicated base class. How the type checker is + required to handle this particular case may change in future revisions of + :pep:`484`. + + The only legal parameters for :class:`Type` are classes, unions of classes, and + :data:`Any`. For example:: + + def new_non_team_user(user_class: Type[Union[BaseUser, ProUser]]): ... + + ``Type[Any]`` is equivalent to ``Type`` which in turn is equivalent + to ``type``, which is the root of Python's metaclass hierarchy. + .. class:: Iterable(Generic[T_co]) - A generic version of the :class:`collections.abc.Iterable`. + A generic version of :class:`collections.abc.Iterable`. .. class:: Iterator(Iterable[T_co]) - A generic version of the :class:`collections.abc.Iterator`. + A generic version of :class:`collections.abc.Iterator`. + +.. class:: Reversible(Iterable[T_co]) + + A generic version of :class:`collections.abc.Reversible`. .. class:: SupportsInt @@ -371,15 +511,18 @@ The module defines the following classes, functions and decorators: An ABC with one abstract method ``__round__`` that is covariant in its return type. -.. class:: Reversible - - An ABC with one abstract method ``__reversed__`` returning - an ``Iterator[T_co]``. - .. class:: Container(Generic[T_co]) A generic version of :class:`collections.abc.Container`. +.. class:: Hashable + + An alias to :class:`collections.abc.Hashable` + +.. class:: Sized + + An alias to :class:`collections.abc.Sized` + .. class:: AbstractSet(Sized, Iterable[T_co], Container[T_co]) A generic version of :class:`collections.abc.Set`. @@ -428,13 +571,17 @@ The module defines the following classes, functions and decorators: def vec2(x: T, y: T) -> List[T]: return [x, y] - def slice__to_4(vector: Sequence[T]) -> List[T]: - return vector[0:4] + def keep_positives(vector: Sequence[T]) -> List[T]: + return [item for item in vector if item > 0] .. class:: Set(set, MutableSet[T]) A generic version of :class:`builtins.set `. +.. class:: FrozenSet(frozenset, AbstractSet[T_co]) + + A generic version of :class:`builtins.frozenset `. + .. class:: MappingView(Sized, Iterable[T_co]) A generic version of :class:`collections.abc.MappingView`. @@ -451,6 +598,31 @@ The module defines the following classes, functions and decorators: A generic version of :class:`collections.abc.ValuesView`. +.. class:: Awaitable(Generic[T_co]) + + A generic version of :class:`collections.abc.Awaitable`. + +.. class:: Coroutine(Awaitable[V_co], Generic[T_co T_contra, V_co]) + + A generic version of :class:`collections.abc.Coroutine`. + The variance and order of type variables + correspond to those of :class:`Generator`, for example:: + + from typing import List, Coroutine + c = None # type: Coroutine[List[str], str, int] + ... + x = c.send('hi') # type: List[str] + async def bar() -> None: + x = await c # type: int + +.. class:: AsyncIterable(Generic[T_co]) + + A generic version of :class:`collections.abc.AsyncIterable`. + +.. class:: AsyncIterator(AsyncIterable[T_co]) + + A generic version of :class:`collections.abc.AsyncIterator`. + .. class:: Dict(dict, MutableMapping[KT, VT]) A generic version of :class:`dict`. @@ -459,8 +631,53 @@ The module defines the following classes, functions and decorators: def get_position_in_index(word_list: Dict[str, int], word: str) -> int: return word_list[word] +.. class:: DefaultDict(collections.defaultdict, MutableMapping[KT, VT]) + + A generic version of :class:`collections.defaultdict` + .. class:: Generator(Iterator[T_co], Generic[T_co, T_contra, V_co]) + A generator can be annotated by the generic type + ``Generator[YieldType, SendType, ReturnType]``. For example:: + + def echo_round() -> Generator[int, float, str]: + sent = yield 0 + while sent >= 0: + sent = yield round(sent) + return 'Done' + + Note that unlike many other generics in the typing module, the ``SendType`` + of :class:`Generator` behaves contravariantly, not covariantly or + invariantly. + + If your generator will only yield values, set the ``SendType`` and + ``ReturnType`` to ``None``:: + + def infinite_stream(start: int) -> Generator[int, None, None]: + while True: + yield start + start += 1 + + Alternatively, annotate your generator as having a return type of + either ``Iterable[YieldType]`` or ``Iterator[YieldType]``:: + + def infinite_stream(start: int) -> Iterator[int]: + while True: + yield start + start += 1 + +.. class:: Text + + ``Text`` is an alias for ``str``. It is provided to supply a forward + compatible path for Python 2 code: in Python 2, ``Text`` is an alias for + ``unicode``. + + Use ``Text`` to indicate that a value must contain a unicode string in + a manner that is compatible with both Python 2 and Python 3:: + + def add_unicode_checkmark(text: Text) -> Text: + return text + u' \u2713' + .. class:: io Wrapper namespace for I/O stream types. @@ -498,6 +715,15 @@ The module defines the following classes, functions and decorators: are in the _fields attribute, which is part of the namedtuple API.) +.. function:: NewType(typ) + + A helper function to indicate a distinct types to a typechecker, + see :ref:`distinct`. At runtime it returns a function that returns + its argument. Usage:: + + UserId = NewType('UserId', int) + first_user = UserId(1) + .. function:: cast(typ, val) Cast a value to a type. @@ -507,13 +733,46 @@ The module defines the following classes, functions and decorators: runtime we intentionally don't check anything (we want this to be as fast as possible). -.. function:: get_type_hints(obj) - - Return type hints for a function or method object. - - This is often the same as ``obj.__annotations__``, but it handles - forward references encoded as string literals, and if necessary - adds ``Optional[t]`` if a default value equal to None is set. +.. function:: get_type_hints(obj[, globals[, locals]]) + + Return a dictionary containing type hints for a function, method, module + or class object. + + This is often the same as ``obj.__annotations__``. In addition, + forward references encoded as string literals are handled by evaluating + them in ``globals`` and ``locals`` namespaces. If necessary, + ``Optional[t]`` is added for function and method annotations if a default + value equal to ``None`` is set. For a class ``C``, return + a dictionary constructed by merging all the ``__annotations__`` along + ``C.__mro__`` in reverse order. + +.. decorator:: overload + + The ``@overload`` decorator allows describing functions and methods + that support multiple different combinations of argument types. A series + of ``@overload``-decorated definitions must be followed by exactly one + non-``@overload``-decorated definition (for the same function/method). + The ``@overload``-decorated definitions are for the benefit of the + type checker only, since they will be overwritten by the + non-``@overload``-decorated definition, while the latter is used at + runtime but should be ignored by a type checker. At runtime, calling + a ``@overload``-decorated function directly will raise + ``NotImplementedError``. An example of overload that gives a more + precise type than can be expressed using a union or a type variable:: + + @overload + def process(response: None) -> None: + ... + @overload + def process(response: int) -> Tuple[int, str]: + ... + @overload + def process(response: bytes) -> str: + ... + def process(response): + + + See :pep:`484` for details and comparison with other typing semantics. .. decorator:: no_type_check(arg) @@ -531,3 +790,139 @@ The module defines the following classes, functions and decorators: This wraps the decorator with something that wraps the decorated function in :func:`no_type_check`. + +.. data:: Any + + Special type indicating an unconstrained type. + + * Every type is compatible with :data:`Any`. + * :data:`Any` is compatible with every type. + +.. data:: Union + + Union type; ``Union[X, Y]`` means either X or Y. + + To define a union, use e.g. ``Union[int, str]``. Details: + + * The arguments must be types and there must be at least one. + + * Unions of unions are flattened, e.g.:: + + Union[Union[int, str], float] == Union[int, str, float] + + * Unions of a single argument vanish, e.g.:: + + Union[int] == int # The constructor actually returns int + + * Redundant arguments are skipped, e.g.:: + + Union[int, str, int] == Union[int, str] + + * When comparing unions, the argument order is ignored, e.g.:: + + Union[int, str] == Union[str, int] + + * When a class and its subclass are present, the former is skipped, e.g.:: + + Union[int, object] == object + + * You cannot subclass or instantiate a union. + + * You cannot write ``Union[X][Y]``. + + * You can use ``Optional[X]`` as a shorthand for ``Union[X, None]``. + +.. data:: Optional + + Optional type. + + ``Optional[X]`` is equivalent to ``Union[X, None]``. + + Note that this is not the same concept as an optional argument, + which is one that has a default. An optional argument with a + default needn't use the ``Optional`` qualifier on its type + annotation (although it is inferred if the default is ``None``). + A mandatory argument may still have an ``Optional`` type if an + explicit value of ``None`` is allowed. + +.. data:: Tuple + + Tuple type; ``Tuple[X, Y]`` is the type of a tuple of two items + with the first item of type X and the second of type Y. + + Example: ``Tuple[T1, T2]`` is a tuple of two elements corresponding + to type variables T1 and T2. ``Tuple[int, float, str]`` is a tuple + of an int, a float and a string. + + To specify a variable-length tuple of homogeneous type, + use literal ellipsis, e.g. ``Tuple[int, ...]``. A plain :data:`Tuple` + is equivalent to ``Tuple[Any, ...]``, and in turn to :class:`tuple`. + +.. data:: Callable + + Callable type; ``Callable[[int], str]`` is a function of (int) -> str. + + The subscription syntax must always be used with exactly two + values: the argument list and the return type. The argument list + must be a list of types or an ellipsis; the return type must be + a single type. + + There is no syntax to indicate optional or keyword arguments; + such function types are rarely used as callback types. + ``Callable[..., ReturnType]`` (literal ellipsis) can be used to + type hint a callable taking any number of arguments and returning + ``ReturnType``. A plain :data:`Callable` is equivalent to + ``Callable[..., Any]``, and in turn to + :class:`collections.abc.Callable`. + +.. data:: ClassVar + + Special type construct to mark class variables. + + As introduced in :pep:`526`, a variable annotation wrapped in ClassVar + indicates that a given attribute is intended to be used as a class variable + and should not be set on instances of that class. Usage:: + + class Starship: + stats = {} # type: ClassVar[Dict[str, int]] # class variable + damage = 10 # type: int # instance variable + + :data:`ClassVar` accepts only types and cannot be further subscribed. + + :data:`ClassVar` is not a class itself, and should not + be used with :func:`isinstance` or :func:`issubclass`. + Note that :data:`ClassVar` does not change Python runtime behavior; + it can be used by 3rd party type checkers, so that the following + code might flagged as an error by those:: + + enterprise_d = Starship(3000) + enterprise_d.stats = {} # Error, setting class variable on instance + Starship.stats = {} # This is OK + + .. versionadded:: 3.5.3 + +.. data:: AnyStr + + ``AnyStr`` is a type variable defined as + ``AnyStr = TypeVar('AnyStr', str, bytes)``. + + It is meant to be used for functions that may accept any kind of string + without allowing different kinds of strings to mix. For example:: + + def concat(a: AnyStr, b: AnyStr) -> AnyStr: + return a + b + + concat(u"foo", u"bar") # Ok, output has type 'unicode' + concat(b"foo", b"bar") # Ok, output has type 'bytes' + concat(u"foo", b"bar") # Error, cannot mix unicode and bytes + +.. data:: TYPE_CHECKING + + A special constant that is assumed to be ``True`` by 3rd party static + type checkers. It is ``False`` at runtime. Usage:: + + if TYPE_CHECKING: + import expensive_mod + + def fun(): + local_var: expensive_mod.some_type = other_fun() diff --git a/Doc/library/unittest.mock.rst b/Doc/library/unittest.mock.rst index 5c9177a..ef30c01 100644 --- a/Doc/library/unittest.mock.rst +++ b/Doc/library/unittest.mock.rst @@ -244,7 +244,7 @@ the *new_callable* argument to :func:`patch`. .. versionadded:: 3.5 - * *wraps*: Item for the mock object to wrap. If *wraps* is not None then + * *wraps*: Item for the mock object to wrap. If *wraps* is not ``None`` then calling the Mock will pass the call through to the wrapped object (returning the real result). Attribute access on the mock will return a Mock object that wraps the corresponding attribute of the wrapped @@ -324,7 +324,7 @@ the *new_callable* argument to :func:`patch`. >>> calls = [call(4), call(2), call(3)] >>> mock.assert_has_calls(calls, any_order=True) - .. method:: assert_not_called(*args, **kwargs) + .. method:: assert_not_called() Assert the mock was never called. diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index 0fc02c4..ac1224c 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -352,7 +352,7 @@ call for every single test we run:: import unittest - class SimpleWidgetTestCase(unittest.TestCase): + class WidgetTestCase(unittest.TestCase): def setUp(self): self.widget = Widget('The widget') @@ -379,7 +379,7 @@ after the test method has been run:: import unittest - class SimpleWidgetTestCase(unittest.TestCase): + class WidgetTestCase(unittest.TestCase): def setUp(self): self.widget = Widget('The widget') @@ -868,7 +868,7 @@ Test cases .. method:: assertIsNone(expr, msg=None) assertIsNotNone(expr, msg=None) - Test that *expr* is (or is not) None. + Test that *expr* is (or is not) ``None``. .. versionadded:: 3.1 @@ -1316,19 +1316,17 @@ Test cases .. attribute:: longMessage - If set to ``True`` then any explicit failure message you pass in to the - :ref:`assert methods ` will be appended to the end of the - normal failure message. The normal messages contain useful information - about the objects involved, for example the message from assertEqual - shows you the repr of the two unequal objects. Setting this attribute - to ``True`` allows you to have a custom error message in addition to the - normal one. + This class attribute determines what happens when a custom failure message + is passed as the msg argument to an assertXYY call that fails. + ``True`` is the default value. In this case, the custom message is appended + to the end of the standard failure message. + When set to ``False``, the custom message replaces the standard message. - This attribute defaults to ``True``. If set to False then a custom message - passed to an assert method will silence the normal message. + The class setting can be overridden in individual test methods by assigning + an instance attribute, self.longMessage, to ``True`` or ``False`` before + calling the assert methods. - The class setting can be overridden in individual tests by assigning an - instance attribute to ``True`` or ``False`` before calling the assert methods. + The class setting gets reset before each test call. .. versionadded:: 3.1 @@ -1342,7 +1340,7 @@ Test cases methods that delegate to it), :meth:`assertDictEqual` and :meth:`assertMultiLineEqual`. - Setting ``maxDiff`` to None means that there is no maximum length of + Setting ``maxDiff`` to ``None`` means that there is no maximum length of diffs. .. versionadded:: 3.2 @@ -1974,7 +1972,8 @@ Loading and running tests methods ` are also special-cased and, when the warning filters are ``'default'`` or ``'always'``, they will appear only once per-module, in order to avoid too many warning messages. This behavior can - be overridden using the :option:`-Wd` or :option:`-Wa` options and leaving + be overridden using Python's :option:`!-Wd` or :option:`!-Wa` options + (see :ref:`Warning control `) and leaving *warnings* to ``None``. .. versionchanged:: 3.2 @@ -2053,9 +2052,10 @@ Loading and running tests The *failfast*, *catchbreak* and *buffer* parameters have the same effect as the same-name `command-line options`_. - The *warning* argument specifies the :ref:`warning filter ` + The *warnings* argument specifies the :ref:`warning filter ` that should be used while running the tests. If it's not specified, it will - remain ``None`` if a :option:`-W` option is passed to :program:`python`, + remain ``None`` if a :option:`!-W` option is passed to :program:`python` + (see :ref:`Warning control `), otherwise it will be set to ``'default'``. Calling ``main`` actually returns an instance of the ``TestProgram`` class. diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst index c6de230..499b211 100644 --- a/Doc/library/urllib.parse.rst +++ b/Doc/library/urllib.parse.rst @@ -25,7 +25,7 @@ Resource Locators. It supports the following URL schemes: ``file``, ``ftp``, ``gopher``, ``hdl``, ``http``, ``https``, ``imap``, ``mailto``, ``mms``, ``news``, ``nntp``, ``prospero``, ``rsync``, ``rtsp``, ``rtspu``, ``sftp``, ``shttp``, ``sip``, ``sips``, ``snews``, ``svn``, ``svn+ssh``, ``telnet``, -``wais``. +``wais``, ``ws``, ``wss``. The :mod:`urllib.parse` module defines functions that fall into two broad categories: URL parsing and URL quoting. These are covered in detail in @@ -543,7 +543,7 @@ task isn't already covered by the URL parsing functions above. When a sequence of two-element tuples is used as the *query* argument, the first element of each tuple is a key and the second is a value. The value element in itself can be a sequence and in that case, if - the optional parameter *doseq* is evaluates to *True*, individual + the optional parameter *doseq* is evaluates to ``True``, individual ``key=value`` pairs separated by ``'&'`` are generated for each element of the value sequence for the key. The order of parameters in the encoded string will match the order of parameter tuples in the sequence. diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst index 1338906..618c69d 100644 --- a/Doc/library/urllib.request.rst +++ b/Doc/library/urllib.request.rst @@ -18,7 +18,7 @@ authentication, redirections, cookies and more. .. seealso:: - The `Requests package `_ + The `Requests package `_ is recommended for a higher-level HTTP client interface. @@ -173,6 +173,16 @@ The :mod:`urllib.request` module defines the following functions: If both lowercase and uppercase environment variables exist (and disagree), lowercase is preferred. + .. note:: + + If the environment variable ``REQUEST_METHOD`` is set, which usually + indicates your script is running in a CGI environment, the environment + variable ``HTTP_PROXY`` (uppercase ``_PROXY``) will be ignored. This is + because that variable can be injected by a client using the "Proxy:" HTTP + header. If you need to use an HTTP proxy in a CGI environment, either use + ``ProxyHandler`` explicitly, or make sure the variable name is in + lowercase (or at least the ``_proxy`` suffix). + The following classes are provided: @@ -280,6 +290,11 @@ The following classes are provided: list of hostname suffixes, optionally with ``:port`` appended, for example ``cern.ch,ncsa.uiuc.edu,some.host:8080``. + .. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; + see the documentation on :func:`~urllib.request.getproxies`. + .. class:: HTTPPasswordMgr() @@ -461,7 +476,7 @@ request. .. attribute:: Request.data - The entity body for the request, or None if not specified. + The entity body for the request, or ``None`` if not specified. .. versionchanged:: 3.4 Changing value of :attr:`Request.data` now deletes "Content-Length" @@ -1138,7 +1153,7 @@ the returned bytes object to string once it determines or guesses the appropriate encoding. The following W3C document, https://www.w3.org/International/O-charset\ , lists -the various ways in which a (X)HTML or a XML document could have specified its +the various ways in which an (X)HTML or an XML document could have specified its encoding information. As the python.org website uses *utf-8* encoding as specified in its meta tag, we diff --git a/Doc/library/uuid.rst b/Doc/library/uuid.rst index 53cbd6c..91dbca2 100644 --- a/Doc/library/uuid.rst +++ b/Doc/library/uuid.rst @@ -45,6 +45,13 @@ random UUID. variant and version number set according to RFC 4122, overriding bits in the given *hex*, *bytes*, *bytes_le*, *fields*, or *int*. + Comparison of UUID objects are made by way of comparing their + :attr:`UUID.int` attributes. Comparison with a non-UUID object + raises a :exc:`TypeError`. + + ``str(uuid)`` returns a string in the form + ``12345678-1234-5678-1234-567812345678`` where the 32 hexadecimal digits + represent the UUID. :class:`UUID` instances have these read-only attributes: diff --git a/Doc/library/venv.rst b/Doc/library/venv.rst index af4a6d1..0327737 100644 --- a/Doc/library/venv.rst +++ b/Doc/library/venv.rst @@ -23,6 +23,12 @@ independent set of installed Python packages in its site directories. See :pep:`405` for more information about Python virtual environments. +.. note:: + The ``pyvenv`` script has been deprecated as of Python 3.6 in favor of using + ``python3 -m venv`` to help prevent any potential confusion as to which + Python interpreter a virtual environment will be based on. + + Creating virtual environments ----------------------------- diff --git a/Doc/library/warnings.rst b/Doc/library/warnings.rst index 5212131..cec55f1 100644 --- a/Doc/library/warnings.rst +++ b/Doc/library/warnings.rst @@ -141,14 +141,15 @@ the disposition of the match. Each entry is a tuple of the form (*action*, | | warnings, regardless of location | +---------------+----------------------------------------------+ -* *message* is a string containing a regular expression that the warning message - must match (the match is compiled to always be case-insensitive). +* *message* is a string containing a regular expression that the start of + the warning message must match. The expression is compiled to always be + case-insensitive. * *category* is a class (a subclass of :exc:`Warning`) of which the warning category must be a subclass in order to match. * *module* is a string containing a regular expression that the module name must - match (the match is compiled to be case-sensitive). + match. The expression is compiled to be case-sensitive. * *lineno* is an integer that the line number where the warning occurred must match, or ``0`` to match all line numbers. @@ -266,13 +267,13 @@ Updating Code For New Versions of Python Warnings that are only of interest to the developer are ignored by default. As such you should make sure to test your code with typically ignored warnings made visible. You can do this from the command-line by passing :option:`-Wd <-W>` -to the interpreter (this is shorthand for :option:`-W default`). This enables +to the interpreter (this is shorthand for :option:`!-W default`). This enables default handling for all warnings, including those that are ignored by default. To change what action is taken for encountered warnings you simply change what -argument is passed to :option:`-W`, e.g. :option:`-W error`. See the +argument is passed to :option:`-W`, e.g. :option:`!-W error`. See the :option:`-W` flag for more details on what is possible. -To programmatically do the same as :option:`-Wd`, use:: +To programmatically do the same as :option:`!-Wd`, use:: warnings.simplefilter('default') diff --git a/Doc/library/wave.rst b/Doc/library/wave.rst index 7144379..a9b3205 100644 --- a/Doc/library/wave.rst +++ b/Doc/library/wave.rst @@ -112,7 +112,7 @@ Wave_read objects, as returned by :func:`.open`, have the following methods: .. method:: Wave_read.readframes(n) - Reads and returns at most *n* frames of audio, as a string of bytes. + Reads and returns at most *n* frames of audio, as a :class:`bytes` object. .. method:: Wave_read.rewind() diff --git a/Doc/library/weakref.rst b/Doc/library/weakref.rst index 0470bd1..e289b97 100644 --- a/Doc/library/weakref.rst +++ b/Doc/library/weakref.rst @@ -414,7 +414,7 @@ the referent is accessed:: Example ------- -This simple example shows how an application can use objects IDs to retrieve +This simple example shows how an application can use object IDs to retrieve objects that it has seen before. The IDs of the objects can then be used in other data structures without forcing the objects to remain alive, but the objects can still be retrieved by ID if they do. diff --git a/Doc/library/winreg.rst b/Doc/library/winreg.rst index 52d591a..767ea31 100644 --- a/Doc/library/winreg.rst +++ b/Doc/library/winreg.rst @@ -1,4 +1,4 @@ -:mod:`winreg` -- Windows registry access +:mod:`winreg` --- Windows registry access ========================================= .. module:: winreg diff --git a/Doc/library/xml.dom.minidom.rst b/Doc/library/xml.dom.minidom.rst index e1042e7..2e9e814 100644 --- a/Doc/library/xml.dom.minidom.rst +++ b/Doc/library/xml.dom.minidom.rst @@ -94,7 +94,7 @@ document: the one that holds all others. Here is an example program:: When you are finished with a DOM tree, you may optionally call the :meth:`unlink` method to encourage early cleanup of the now-unneeded -objects. :meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific +objects. :meth:`unlink` is an :mod:`xml.dom.minidom`\ -specific extension to the DOM API that renders the node and its descendants are essentially useless. Otherwise, Python's garbage collector will eventually take care of the objects in the tree. diff --git a/Doc/library/xml.dom.pulldom.rst b/Doc/library/xml.dom.pulldom.rst index c3339ed..b502554 100644 --- a/Doc/library/xml.dom.pulldom.rst +++ b/Doc/library/xml.dom.pulldom.rst @@ -74,7 +74,7 @@ and switch to DOM-related processing. .. function:: parse(stream_or_string, parser=None, bufsize=None) Return a :class:`DOMEventStream` from the given input. *stream_or_string* may be - either a file name, or a file-like object. *parser*, if given, must be a + either a file name, or a file-like object. *parser*, if given, must be an :class:`~xml.sax.xmlreader.XMLReader` object. This function will change the document handler of the parser and activate namespace support; other parser configuration (like diff --git a/Doc/library/xml.dom.rst b/Doc/library/xml.dom.rst index b037ff6..de334af 100644 --- a/Doc/library/xml.dom.rst +++ b/Doc/library/xml.dom.rst @@ -404,7 +404,7 @@ NodeList Objects ^^^^^^^^^^^^^^^^ A :class:`NodeList` represents a sequence of nodes. These objects are used in -two ways in the DOM Core recommendation: the :class:`Element` objects provides +two ways in the DOM Core recommendation: an :class:`Element` object provides one as its list of child nodes, and the :meth:`getElementsByTagName` and :meth:`getElementsByTagNameNS` methods of :class:`Node` return objects with this interface to represent query results. diff --git a/Doc/library/xml.etree.elementtree.rst b/Doc/library/xml.etree.elementtree.rst index 99d7e8b..b54eace 100644 --- a/Doc/library/xml.etree.elementtree.rst +++ b/Doc/library/xml.etree.elementtree.rst @@ -928,7 +928,7 @@ ElementTree Objects *method* is either ``"xml"``, ``"html"`` or ``"text"`` (default is ``"xml"``). The keyword-only *short_empty_elements* parameter controls the formatting - of elements that contain no content. If *True* (the default), they are + of elements that contain no content. If ``True`` (the default), they are emitted as a single self-closed tag, otherwise they are emitted as a pair of start/end tags. diff --git a/Doc/library/xml.rst b/Doc/library/xml.rst index 3c2fc89..d833b7f 100644 --- a/Doc/library/xml.rst +++ b/Doc/library/xml.rst @@ -60,15 +60,15 @@ circumvent firewalls. The following table gives an overview of the known attacks and whether the various modules are vulnerable to them. -========================= ======== ========= ========= ======== ========= -kind sax etree minidom pulldom xmlrpc -========================= ======== ========= ========= ======== ========= -billion laughs **Yes** **Yes** **Yes** **Yes** **Yes** -quadratic blowup **Yes** **Yes** **Yes** **Yes** **Yes** -external entity expansion **Yes** No (1) No (2) **Yes** No (3) -`DTD`_ retrieval **Yes** No No **Yes** No -decompression bomb No No No No **Yes** -========================= ======== ========= ========= ======== ========= +========================= ============== =============== ============== ============== ============== +kind sax etree minidom pulldom xmlrpc +========================= ============== =============== ============== ============== ============== +billion laughs **Vulnerable** **Vulnerable** **Vulnerable** **Vulnerable** **Vulnerable** +quadratic blowup **Vulnerable** **Vulnerable** **Vulnerable** **Vulnerable** **Vulnerable** +external entity expansion **Vulnerable** Safe (1) Safe (2) **Vulnerable** Safe (3) +`DTD`_ retrieval **Vulnerable** Safe Safe **Vulnerable** Safe +decompression bomb Safe Safe Safe Safe **Vulnerable** +========================= ============== =============== ============== ============== ============== 1. :mod:`xml.etree.ElementTree` doesn't expand external entities and raises a :exc:`ParserError` when an entity occurs. diff --git a/Doc/library/xml.sax.reader.rst b/Doc/library/xml.sax.reader.rst index c368fc2..1b6e431 100644 --- a/Doc/library/xml.sax.reader.rst +++ b/Doc/library/xml.sax.reader.rst @@ -308,7 +308,7 @@ InputSource Objects Get the byte stream for this input source. The getEncoding method will return the character encoding for this byte stream, - or None if unknown. + or ``None`` if unknown. .. method:: InputSource.setCharacterStream(charfile) diff --git a/Doc/library/xml.sax.utils.rst b/Doc/library/xml.sax.utils.rst index 538b798..e46fefd 100644 --- a/Doc/library/xml.sax.utils.rst +++ b/Doc/library/xml.sax.utils.rst @@ -63,8 +63,8 @@ or as base classes. should be a file-like object which will default to *sys.stdout*. *encoding* is the encoding of the output stream which defaults to ``'iso-8859-1'``. *short_empty_elements* controls the formatting of elements that contain no - content: if *False* (the default) they are emitted as a pair of start/end - tags, if set to *True* they are emitted as a single self-closed tag. + content: if ``False`` (the default) they are emitted as a pair of start/end + tags, if set to ``True`` they are emitted as a single self-closed tag. .. versionadded:: 3.2 The *short_empty_elements* parameter. diff --git a/Doc/library/xmlrpc.client.rst b/Doc/library/xmlrpc.client.rst index e7916d2..dad7a02 100644 --- a/Doc/library/xmlrpc.client.rst +++ b/Doc/library/xmlrpc.client.rst @@ -555,33 +555,27 @@ Example of Client Usage print("ERROR", v) To access an XML-RPC server through a HTTP proxy, you need to define a custom -transport. The following example shows how: +transport. The following example shows how:: -.. Example taken from http://lowlife.jp/nobonobo/wiki/xmlrpcwithproxy.html - -:: - - import xmlrpc.client, http.client + import http.client + import xmlrpc.client class ProxiedTransport(xmlrpc.client.Transport): - def set_proxy(self, proxy): - self.proxy = proxy - def make_connection(self, host): - self.realhost = host - h = http.client.HTTPConnection(self.proxy) - return h - - def send_request(self, connection, handler, request_body, debug): - connection.putrequest("POST", 'http://%s%s' % (self.realhost, handler)) + def set_proxy(self, host, port=None, headers=None): + self.proxy = host, port + self.proxy_headers = headers - def send_host(self, connection, host): - connection.putheader('Host', self.realhost) - - p = ProxiedTransport() - p.set_proxy('proxy-server:8080') - server = xmlrpc.client.ServerProxy('http://time.xmlrpc.com/RPC2', transport=p) - print(server.currentTime.getCurrentTime()) + def make_connection(self, host): + connection = http.client.HTTPConnection(*self.proxy) + connection.set_tunnel(host, headers=self.proxy_headers) + self._connection = host, connection + return connection + + transport = ProxiedTransport() + transport.set_proxy('proxy-server', 8080) + server = xmlrpc.client.ServerProxy('http://betty.userland.com', transport=transport) + print(server.examples.getStateName(41)) Example of Client and Server Usage diff --git a/Doc/library/xmlrpc.server.rst b/Doc/library/xmlrpc.server.rst index ad1e812..1c77e84 100644 --- a/Doc/library/xmlrpc.server.rst +++ b/Doc/library/xmlrpc.server.rst @@ -293,7 +293,7 @@ requests sent to Python CGI scripts. .. method:: CGIXMLRPCRequestHandler.handle_request(request_text=None) - Handle a XML-RPC request. If *request_text* is given, it should be the POST + Handle an XML-RPC request. If *request_text* is given, it should be the POST data provided by the HTTP server, otherwise the contents of stdin will be used. Example:: diff --git a/Doc/library/zipapp.rst b/Doc/library/zipapp.rst index 7c7767f..9dee9a5 100644 --- a/Doc/library/zipapp.rst +++ b/Doc/library/zipapp.rst @@ -121,7 +121,7 @@ The module defines two convenience functions: the archive will be written to that file. * If it is an open file object, the archive will be written to that file object, which must be open for writing in bytes mode. - * If the target is omitted (or None), the source must be a directory + * If the target is omitted (or ``None``), the source must be a directory and the target will be a file with the same name as the source, with a ``.pyz`` extension added. diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst index b421ea5..d144ae3 100644 --- a/Doc/library/zipfile.rst +++ b/Doc/library/zipfile.rst @@ -142,8 +142,8 @@ ZipFile Objects file, then additional files are added to it. If *file* does not refer to a ZIP file, then a new ZIP archive is appended to the file. This is meant for adding a ZIP archive to another file (such as :file:`python.exe`). If - *mode* is ``a`` and the file does not exist at all, it is created. - If *mode* is ``r`` or ``a``, the file should be seekable. + *mode* is ``'a'`` and the file does not exist at all, it is created. + If *mode* is ``'r'`` or ``'a'``, the file should be seekable. *compression* is the ZIP compression method to use when writing the archive, and should be :const:`ZIP_STORED`, :const:`ZIP_DEFLATED`, :const:`ZIP_BZIP2` or :const:`ZIP_LZMA`; unrecognized @@ -152,7 +152,7 @@ ZipFile Objects (:mod:`zlib`, :mod:`bz2` or :mod:`lzma`) is not available, :exc:`RuntimeError` is also raised. The default is :const:`ZIP_STORED`. If *allowZip64* is ``True`` (the default) zipfile will create ZIP files that use the ZIP64 - extensions when the zipfile is larger than 2 GiB. If it is false :mod:`zipfile` + extensions when the zipfile is larger than 4 GiB. If it is false :mod:`zipfile` will raise an exception when the ZIP file would require ZIP64 extensions. If the file is created with mode ``'w'``, ``'x'`` or ``'a'`` and then @@ -250,7 +250,7 @@ ZipFile Objects .. method:: ZipFile.extract(member, path=None, pwd=None) Extract a member from the archive to the current working directory; *member* - must be its full name or a :class:`ZipInfo` object). Its file information is + must be its full name or a :class:`ZipInfo` object. Its file information is extracted as accurately as possible. *path* specifies a different directory to extract to. *member* can be a filename or a :class:`ZipInfo` object. *pwd* is the password used for encrypted files. @@ -343,9 +343,9 @@ ZipFile Objects If ``arcname`` (or ``filename``, if ``arcname`` is not given) contains a null byte, the name of the file in the archive will be truncated at the null byte. -.. method:: ZipFile.writestr(zinfo_or_arcname, bytes[, compress_type]) +.. method:: ZipFile.writestr(zinfo_or_arcname, data[, compress_type]) - Write the string *bytes* to the archive; *zinfo_or_arcname* is either the file + Write the string *data* to the archive; *zinfo_or_arcname* is either the file name it will be given in the archive, or a :class:`ZipInfo` instance. If it's an instance, at least the filename, date, and time must be given. If it's a name, the date and time is set to the current date and time. @@ -574,4 +574,61 @@ Instances have the following attributes: Size of the uncompressed file. + +.. _zipfile-commandline: +.. program:: zipfile + +Command-Line Interface +---------------------- + +The :mod:`zipfile` module provides a simple command-line interface to interact +with ZIP archives. + +If you want to create a new ZIP archive, specify its name after the :option:`-c` +option and then list the filename(s) that should be included: + +.. code-block:: shell-session + + $ python -m zipfile -c monty.zip spam.txt eggs.txt + +Passing a directory is also acceptable: + +.. code-block:: shell-session + + $ python -m zipfile -c monty.zip life-of-brian_1979/ + +If you want to extract a ZIP archive into the specified directory, use +the :option:`-e` option: + +.. code-block:: shell-session + + $ python -m zipfile -e monty.zip target-dir/ + +For a list of the files in a ZIP archive, use the :option:`-l` option: + +.. code-block:: shell-session + + $ python -m zipfile -l monty.zip + + +Command-line options +~~~~~~~~~~~~~~~~~~~~ + +.. cmdoption:: -l + + List files in a zipfile. + +.. cmdoption:: -c ... + + Create zipfile from source files. + +.. cmdoption:: -e + + Extract zipfile into target directory. + +.. cmdoption:: -t + + Test whether the zipfile is valid or not. + + .. _PKZIP Application Note: https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT diff --git a/Doc/library/zipimport.rst b/Doc/library/zipimport.rst index 0a0f175..46b8c24 100644 --- a/Doc/library/zipimport.rst +++ b/Doc/library/zipimport.rst @@ -147,7 +147,9 @@ Examples -------- Here is an example that imports a module from a ZIP archive - note that the -:mod:`zipimport` module is not explicitly used. :: +:mod:`zipimport` module is not explicitly used. + +.. code-block:: shell-session $ unzip -l example.zip Archive: example.zip diff --git a/Doc/license.rst b/Doc/license.rst index 8843116..49d29ce 100644 --- a/Doc/license.rst +++ b/Doc/license.rst @@ -87,7 +87,7 @@ PSF LICENSE AGREEMENT FOR PYTHON |release| analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python |release| alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of - copyright, i.e., "Copyright © 2001-2016 Python Software Foundation; All Rights + copyright, i.e., "Copyright © 2001-2017 Python Software Foundation; All Rights Reserved" are retained in Python |release| alone or in any derivative version prepared by Licensee. diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 2469422..88b94ea 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -503,11 +503,13 @@ are applied in nested fashion. For example, the following code :: @f2 def func(): pass -is equivalent to :: +is roughly equivalent to :: def func(): pass func = f1(arg)(f2(func)) +except that the original function is not temporarily bound to the name ``func``. + .. index:: triple: default; parameter; value single: argument; function definition @@ -638,14 +640,13 @@ Classes can also be decorated: just like when decorating functions, :: @f2 class Foo: pass -is equivalent to :: +is roughly equivalent to :: class Foo: pass Foo = f1(arg)(f2(Foo)) The evaluation rules for the decorator expressions are the same as for function -decorators. The result must be a class object, which is then bound to the class -name. +decorators. The result is then bound to the class name. **Programmer's note:** Variables defined in the class definition are class attributes; they are shared by instances. Instance attributes can be set in a diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index 71d695f..2f5625b 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -454,6 +454,19 @@ Callable types .. tabularcolumns:: |l|L|l| + .. index:: + single: __doc__ (function attribute) + single: __name__ (function attribute) + single: __module__ (function attribute) + single: __dict__ (function attribute) + single: __defaults__ (function attribute) + single: __closure__ (function attribute) + single: __code__ (function attribute) + single: __globals__ (function attribute) + single: __annotations__ (function attribute) + single: __kwdefaults__ (function attribute) + pair: global; namespace + +-------------------------+-------------------------------+-----------+ | Attribute | Meaning | | +=========================+===============================+===========+ @@ -462,10 +475,11 @@ Callable types | | unavailable; not inherited by | | | | subclasses | | +-------------------------+-------------------------------+-----------+ - | :attr:`__name__` | The function's name | Writable | + | :attr:`~definition.\ | The function's name | Writable | + | __name__` | | | +-------------------------+-------------------------------+-----------+ - | :attr:`__qualname__` | The function's | Writable | - | | :term:`qualified name` | | + | :attr:`~definition.\ | The function's | Writable | + | __qualname__` | :term:`qualified name` | | | | | | | | .. versionadded:: 3.3 | | +-------------------------+-------------------------------+-----------+ @@ -489,7 +503,7 @@ Callable types | | module in which the function | | | | was defined. | | +-------------------------+-------------------------------+-----------+ - | :attr:`__dict__` | The namespace supporting | Writable | + | :attr:`~object.__dict__`| The namespace supporting | Writable | | | arbitrary function | | | | attributes. | | +-------------------------+-------------------------------+-----------+ @@ -519,19 +533,6 @@ Callable types Additional information about a function's definition can be retrieved from its code object; see the description of internal types below. - .. index:: - single: __doc__ (function attribute) - single: __name__ (function attribute) - single: __module__ (function attribute) - single: __dict__ (function attribute) - single: __defaults__ (function attribute) - single: __closure__ (function attribute) - single: __code__ (function attribute) - single: __globals__ (function attribute) - single: __annotations__ (function attribute) - single: __kwdefaults__ (function attribute) - pair: global; namespace - Instance methods .. index:: object: method @@ -550,7 +551,7 @@ Callable types Special read-only attributes: :attr:`__self__` is the class instance object, :attr:`__func__` is the function object; :attr:`__doc__` is the method's - documentation (same as ``__func__.__doc__``); :attr:`__name__` is the + documentation (same as ``__func__.__doc__``); :attr:`~definition.__name__` is the method name (same as ``__func__.__name__``); :attr:`__module__` is the name of the module the method was defined in, or ``None`` if unavailable. @@ -637,7 +638,7 @@ Callable types standard built-in module). The number and type of the arguments are determined by the C function. Special read-only attributes: :attr:`__doc__` is the function's documentation string, or ``None`` if - unavailable; :attr:`__name__` is the function's name; :attr:`__self__` is + unavailable; :attr:`~definition.__name__` is the function's name; :attr:`__self__` is set to ``None`` (but see the next item); :attr:`__module__` is the name of the module the function was defined in or ``None`` if unavailable. @@ -687,7 +688,7 @@ Modules .. index:: single: __dict__ (module attribute) - Special read-only attribute: :attr:`__dict__` is the module's namespace as a + Special read-only attribute: :attr:`~object.__dict__` is the module's namespace as a dictionary object. .. impl-detail:: @@ -743,7 +744,7 @@ Custom classes method object, it is transformed into the object wrapped by the static method object. See section :ref:`descriptors` for another way in which attributes retrieved from a class may differ from those actually contained in its - :attr:`__dict__`. + :attr:`~object.__dict__`. .. index:: triple: class; attribute; assignment @@ -761,12 +762,12 @@ Custom classes single: __bases__ (class attribute) single: __doc__ (class attribute) - Special attributes: :attr:`__name__` is the class name; :attr:`__module__` is - the module name in which the class was defined; :attr:`__dict__` is the + Special attributes: :attr:`~definition.__name__` is the class name; :attr:`__module__` is + the module name in which the class was defined; :attr:`~object.__dict__` is the dictionary containing the class's namespace; :attr:`~class.__bases__` is a - tuple (possibly empty or a singleton) containing the base classes, in the + tuple (possibly a singleton) containing the base classes, in the order of their occurrence in the base class list; :attr:`__doc__` is the - class's documentation string, or None if undefined. + class's documentation string, or ``None`` if undefined. Class instances .. index:: @@ -785,7 +786,7 @@ Class instances class method objects are also transformed; see above under "Classes". See section :ref:`descriptors` for another way in which attributes of a class retrieved via its instances may differ from the objects actually stored in - the class's :attr:`__dict__`. If no class attribute is found, and the + the class's :attr:`~object.__dict__`. If no class attribute is found, and the object's class has a :meth:`__getattr__` method, that is called to satisfy the lookup. @@ -1116,7 +1117,7 @@ Basic customization instance; for example: ``BaseClass.__init__(self, [args...])``. Because :meth:`__new__` and :meth:`__init__` work together in constructing - objects (:meth:`__new__` to create it, and :meth:`__init__` to customise it), + objects (:meth:`__new__` to create it, and :meth:`__init__` to customize it), no non-``None`` value may be returned by :meth:`__init__`; doing so will cause a :exc:`TypeError` to be raised at runtime. @@ -1304,11 +1305,14 @@ Basic customization Called by built-in function :func:`hash` and for operations on members of hashed collections including :class:`set`, :class:`frozenset`, and - :class:`dict`. :meth:`__hash__` should return an integer. The only - required property is that objects which compare equal have the same hash - value; it is advised to somehow mix together (e.g. using exclusive or) the - hash values for the components of the object that also play a part in - comparison of objects. + :class:`dict`. :meth:`__hash__` should return an integer. The only required + property is that objects which compare equal have the same hash value; it is + advised to mix together the hash values of the components of the object that + also play a part in comparison of objects by packing them into a tuple and + hashing the tuple. Example:: + + def __hash__(self): + return hash((self.name, self.nick, self.color)) .. note:: @@ -1466,7 +1470,7 @@ method (a so-called *descriptor* class) appears in an *owner* class (the descriptor must be in either the owner's class dictionary or in the class dictionary for one of its parents). In the examples below, "the attribute" refers to the attribute whose name is the key of the property in the owner -class' :attr:`__dict__`. +class' :attr:`~object.__dict__`. .. method:: object.__get__(self, instance, owner) @@ -1636,7 +1640,7 @@ By default, classes are constructed using :func:`type`. The class body is executed in a new namespace and the class name is bound locally to the result of ``type(name, bases, namespace)``. -The class creation process can be customised by passing the ``metaclass`` +The class creation process can be customized by passing the ``metaclass`` keyword argument in the class definition line, or by inheriting from an existing class that included such an argument. In the following example, both ``MyClass`` and ``MySubclass`` are instances of ``Meta``:: diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index f508eaa..9792399 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -667,7 +667,7 @@ series of :term:`arguments `: starred_and_keywords: ("*" `expression` | `keyword_item`) : ("," "*" `expression` | "," `keyword_item`)* keywords_arguments: (`keyword_item` | "**" `expression`) - : ("," `keyword_item` | "**" `expression`)* + : ("," `keyword_item` | "," "**" `expression`)* keyword_item: `identifier` "=" `expression` An optional trailing comma may be present after the positional and keyword arguments @@ -1315,8 +1315,9 @@ Identity comparisons -------------------- The operators :keyword:`is` and :keyword:`is not` test for object identity: ``x -is y`` is true if and only if *x* and *y* are the same object. ``x is not y`` -yields the inverse truth value. [#]_ +is y`` is true if and only if *x* and *y* are the same object. Object identity +is determined using the :meth:`id` function. ``x is not y`` yields the inverse +truth value. [#]_ .. _booleans: @@ -1406,7 +1407,9 @@ Lambdas Lambda expressions (sometimes called lambda forms) are used to create anonymous functions. The expression ``lambda arguments: expression`` yields a function -object. The unnamed object behaves like a function object defined with :: +object. The unnamed object behaves like a function object defined with: + +.. code-block:: none def (arguments): return expression diff --git a/Doc/reference/import.rst b/Doc/reference/import.rst index 2144c1f..64302b8 100644 --- a/Doc/reference/import.rst +++ b/Doc/reference/import.rst @@ -774,7 +774,7 @@ hooks ` in this list is called with a single argument, the path entry to be searched. This callable may either return a :term:`path entry finder` that can handle the path entry, or it may raise :exc:`ImportError`. An :exc:`ImportError` is used by the path based finder to -signal that the hook cannot find a :term:`path entry finder`. +signal that the hook cannot find a :term:`path entry finder` for that :term:`path entry`. The exception is ignored and :term:`import path` iteration continues. The hook should expect either a string or bytes object; the encoding of bytes objects @@ -828,7 +828,7 @@ portion. Older path entry finders may implement one of these two deprecated methods instead of ``find_spec()``. The methods are still respected for the - sake of backward compatibility. Howevever, if ``find_spec()`` is + sake of backward compatibility. However, if ``find_spec()`` is implemented on the path entry finder, the legacy methods are ignored. :meth:`~importlib.abc.PathEntryFinder.find_loader` takes one argument, the diff --git a/Doc/reference/lexical_analysis.rst b/Doc/reference/lexical_analysis.rst index 71964d7..37f25f1 100644 --- a/Doc/reference/lexical_analysis.rst +++ b/Doc/reference/lexical_analysis.rst @@ -689,7 +689,10 @@ Operators .. index:: single: operators -The following tokens are operators:: +The following tokens are operators: + +.. code-block:: none + + - * ** / // % @ << >> & | ^ ~ @@ -703,7 +706,9 @@ Delimiters .. index:: single: delimiters -The following tokens serve as delimiters in the grammar:: +The following tokens serve as delimiters in the grammar: + +.. code-block:: none ( ) [ ] { } , : . ; @ = -> @@ -716,12 +721,16 @@ of the list, the augmented assignment operators, serve lexically as delimiters, but also perform an operation. The following printing ASCII characters have special meaning as part of other -tokens or are otherwise significant to the lexical analyzer:: +tokens or are otherwise significant to the lexical analyzer: + +.. code-block:: none ' " # \ The following printing ASCII characters are not used in Python. Their -occurrence outside string literals and comments is an unconditional error:: +occurrence outside string literals and comments is an unconditional error: + +.. code-block:: none $ ? ` diff --git a/Doc/tools/extensions/suspicious.py b/Doc/tools/extensions/suspicious.py index d3ed849..0a70e57 100644 --- a/Doc/tools/extensions/suspicious.py +++ b/Doc/tools/extensions/suspicious.py @@ -270,5 +270,5 @@ class SuspiciousVisitor(nodes.GenericNodeVisitor): # ignore comments -- too much false positives. # (although doing this could miss some errors; # there were two sections "commented-out" by mistake - # in the Python docs that would not be catched) + # in the Python docs that would not be caught) raise nodes.SkipNode diff --git a/Doc/tools/pydoctheme/static/pydoctheme.css b/Doc/tools/pydoctheme/static/pydoctheme.css index e24043f..1d5c18e 100644 --- a/Doc/tools/pydoctheme/static/pydoctheme.css +++ b/Doc/tools/pydoctheme/static/pydoctheme.css @@ -22,6 +22,16 @@ div.related:first-child { border-bottom: 1px solid #ccc; } +.inline-search { + display: inline; +} +form.inline-search input { + display: inline; +} +form.inline-search input[type="submit"] { + width: 30px; +} + div.sphinxsidebar { background-color: #eeeeee; border-radius: 5px; @@ -45,6 +55,7 @@ div.sphinxsidebar a:hover { color: #0095C4; } +form.inline-search input, div.sphinxsidebar input { font-family: 'Lucida Grande',Arial,sans-serif; border: 1px solid #999999; diff --git a/Doc/tools/static/version_switch.js b/Doc/tools/static/version_switch.js index 7289a4d..8b36a61 100644 --- a/Doc/tools/static/version_switch.js +++ b/Doc/tools/static/version_switch.js @@ -2,13 +2,12 @@ 'use strict'; var all_versions = { - '3.6': 'dev (3.6)', + '3.7': 'dev (3.7)', + '3.6': '3.6', '3.5': '3.5', '3.4': '3.4', '3.3': '3.3', - '3.2': '3.2', '2.7': '2.7', - '2.6': '2.6' }; function build_select(current_version, current_release) { diff --git a/Doc/tools/templates/customsourcelink.html b/Doc/tools/templates/customsourcelink.html new file mode 100644 index 0000000..243d810 --- /dev/null +++ b/Doc/tools/templates/customsourcelink.html @@ -0,0 +1,10 @@ +{%- if show_source and has_source and sourcename %} + +{%- endif %} diff --git a/Doc/tools/templates/indexsidebar.html b/Doc/tools/templates/indexsidebar.html index bb449ef..b7bcd74 100644 --- a/Doc/tools/templates/indexsidebar.html +++ b/Doc/tools/templates/indexsidebar.html @@ -3,7 +3,8 @@

{% trans %}Docs for other versions{% endtrans %}

diff --git a/Doc/tools/templates/layout.html b/Doc/tools/templates/layout.html index 1887b85..5c180e7 100644 --- a/Doc/tools/templates/layout.html +++ b/Doc/tools/templates/layout.html @@ -12,10 +12,33 @@ {%- endif %} {% endblock %} +{%- macro searchbox() %} +{# modified from sphinx/themes/basic/searchbox.html #} + {%- if builder != "htmlhelp" %} + + + {%- endif %} +{%- endmacro %} {% block relbar1 %} {% if builder != 'qthelp' %} {{ relbar() }} {% endif %} {% endblock %} {% block relbar2 %} {% if builder != 'qthelp' %} {{ relbar() }} {% endif %} {% endblock %} +{% block relbaritems %} + {%- if pagename != "search" and builder != "singlehtml" and builder != "htmlhelp" %} +
  • + {{ searchbox() }} + {{ reldelim2 }} +
  • + {%- endif %} +{% endblock %} {% block extrahead %} + {% if builder != "htmlhelp" %} {% if not embedded %}{% endif %} {% if versionswitcher is defined and not embedded %}{% endif %} {% if pagename == 'whatsnew/changelog' and not embedded %} @@ -75,6 +98,7 @@ }); {% endif %} + {% endif %} {{ super() }} {% endblock %} {% block footer %} @@ -90,13 +114,3 @@ {% trans sphinx_version=sphinx_version|e %}Created using Sphinx {{ sphinx_version }}.{% endtrans %} {% endblock %} -{% block sidebarsourcelink %} -{%- if show_source and has_source and sourcename %} -

    {{ _('This Page') }}

    - -{%- endif %} -{% endblock %} diff --git a/Doc/tutorial/classes.rst b/Doc/tutorial/classes.rst index 2489d75..e134d5d 100644 --- a/Doc/tutorial/classes.rst +++ b/Doc/tutorial/classes.rst @@ -374,11 +374,11 @@ Surely Python raises an exception when a function that requires an argument is called without any --- even if the argument isn't actually used... Actually, you may have guessed the answer: the special thing about methods is -that the object is passed as the first argument of the function. In our +that the instance object is passed as the first argument of the function. In our example, the call ``x.f()`` is exactly equivalent to ``MyClass.f(x)``. In general, calling a method with a list of *n* arguments is equivalent to calling the corresponding function with an argument list that is created by inserting -the method's object before the first argument. +the method's instance object before the first argument. If you still don't understand how methods work, a look at the implementation can perhaps clarify matters. When an instance attribute is referenced that isn't a @@ -744,55 +744,6 @@ object with the method :meth:`m`, and ``m.__func__`` is the function object corresponding to the method. -.. _tut-exceptionclasses: - -Exceptions Are Classes Too -========================== - -User-defined exceptions are identified by classes as well. Using this mechanism -it is possible to create extensible hierarchies of exceptions. - -There are two new valid (semantic) forms for the :keyword:`raise` statement:: - - raise Class - - raise Instance - -In the first form, ``Class`` must be an instance of :class:`type` or of a -class derived from it. The first form is a shorthand for:: - - raise Class() - -A class in an :keyword:`except` clause is compatible with an exception if it is -the same class or a base class thereof (but not the other way around --- an -except clause listing a derived class is not compatible with a base class). For -example, the following code will print B, C, D in that order:: - - class B(Exception): - pass - class C(B): - pass - class D(C): - pass - - for cls in [B, C, D]: - try: - raise cls() - except D: - print("D") - except C: - print("C") - except B: - print("B") - -Note that if the except clauses were reversed (with ``except B`` first), it -would have printed B, B, B --- the first matching except clause is triggered. - -When an error message is printed for an unhandled exception, the exception's -class name is printed, then a colon and a space, and finally the instance -converted to a string using the built-in function :func:`str`. - - .. _tut-iterators: Iterators @@ -951,8 +902,7 @@ Examples:: .. rubric:: Footnotes .. [#] Except for one thing. Module objects have a secret read-only attribute called - :attr:`__dict__` which returns the dictionary used to implement the module's - namespace; the name :attr:`__dict__` is an attribute but not a global name. + :attr:`~object.__dict__` which returns the dictionary used to implement the module's + namespace; the name :attr:`~object.__dict__` is an attribute but not a global name. Obviously, using this violates the abstraction of namespace implementation, and should be restricted to things like post-mortem debuggers. - diff --git a/Doc/tutorial/controlflow.rst b/Doc/tutorial/controlflow.rst index ddc0855..12989b2 100644 --- a/Doc/tutorial/controlflow.rst +++ b/Doc/tutorial/controlflow.rst @@ -501,7 +501,9 @@ It could be called like this:: client="John Cleese", sketch="Cheese Shop Sketch") -and of course it would print:: +and of course it would print: + +.. code-block:: none -- Do you have any Limburger ? -- I'm sorry, we're all out of Limburger diff --git a/Doc/tutorial/errors.rst b/Doc/tutorial/errors.rst index 4195c7e..759588f 100644 --- a/Doc/tutorial/errors.rst +++ b/Doc/tutorial/errors.rst @@ -18,7 +18,7 @@ Syntax errors, also known as parsing errors, are perhaps the most common kind of complaint you get while you are still learning Python:: >>> while True print('Hello world') - File "", line 1, in ? + File "", line 1 while True print('Hello world') ^ SyntaxError: invalid syntax @@ -44,15 +44,15 @@ programs, however, and result in error messages as shown here:: >>> 10 * (1/0) Traceback (most recent call last): - File "", line 1, in ? + File "", line 1, in ZeroDivisionError: division by zero >>> 4 + spam*3 Traceback (most recent call last): - File "", line 1, in ? + File "", line 1, in NameError: name 'spam' is not defined >>> '2' + 2 Traceback (most recent call last): - File "", line 1, in ? + File "", line 1, in TypeError: Can't convert 'int' object to str implicitly The last line of the error message indicates what happened. Exceptions come in @@ -120,6 +120,33 @@ name multiple exceptions as a parenthesized tuple, for example:: ... except (RuntimeError, TypeError, NameError): ... pass +A class in an :keyword:`except` clause is compatible with an exception if it is +the same class or a base class thereof (but not the other way around --- an +except clause listing a derived class is not compatible with a base class). For +example, the following code will print B, C, D in that order:: + + class B(Exception): + pass + + class C(B): + pass + + class D(C): + pass + + for cls in [B, C, D]: + try: + raise cls() + except D: + print("D") + except C: + print("C") + except B: + print("B") + +Note that if the except clauses were reversed (with ``except B`` first), it +would have printed B, B, B --- the first matching except clause is triggered. + The last except clause may omit the exception name(s), to serve as a wildcard. Use this with extreme caution, since it is easy to mask a real programming error in this way! It can also be used to print an error message and then re-raise @@ -201,7 +228,7 @@ indirectly) in the try clause. For example:: ... except ZeroDivisionError as err: ... print('Handling run-time error:', err) ... - Handling run-time error: int division or modulo by zero + Handling run-time error: division by zero .. _tut-raising: @@ -214,12 +241,15 @@ exception to occur. For example:: >>> raise NameError('HiThere') Traceback (most recent call last): - File "", line 1, in ? + File "", line 1, in NameError: HiThere The sole argument to :keyword:`raise` indicates the exception to be raised. This must be either an exception instance or an exception class (a class that -derives from :class:`Exception`). +derives from :class:`Exception`). If an exception class is passed, it will +be implicitly instantiated by calling its constructor with no arguments:: + + raise ValueError # shorthand for 'raise ValueError()' If you need to determine whether an exception was raised but don't intend to handle it, a simpler form of the :keyword:`raise` statement allows you to @@ -233,7 +263,7 @@ re-raise the exception:: ... An exception flew by! Traceback (most recent call last): - File "", line 2, in ? + File "", line 2, in NameError: HiThere @@ -244,29 +274,7 @@ User-defined Exceptions Programs may name their own exceptions by creating a new exception class (see :ref:`tut-classes` for more about Python classes). Exceptions should typically -be derived from the :exc:`Exception` class, either directly or indirectly. For -example:: - - >>> class MyError(Exception): - ... def __init__(self, value): - ... self.value = value - ... def __str__(self): - ... return repr(self.value) - ... - >>> try: - ... raise MyError(2*2) - ... except MyError as e: - ... print('My exception occurred, value:', e.value) - ... - My exception occurred, value: 4 - >>> raise MyError('oops!') - Traceback (most recent call last): - File "", line 1, in ? - __main__.MyError: 'oops!' - -In this example, the default :meth:`__init__` of :class:`Exception` has been -overridden. The new behavior simply creates the *value* attribute. This -replaces the default behavior of creating the *args* attribute. +be derived from the :exc:`Exception` class, either directly or indirectly. Exception classes can be defined which do anything any other class can do, but are usually kept simple, often only offering a number of attributes that allow @@ -330,7 +338,7 @@ example:: ... Goodbye, world! Traceback (most recent call last): - File "", line 2, in ? + File "", line 2, in KeyboardInterrupt A *finally clause* is always executed before leaving the :keyword:`try` @@ -362,7 +370,7 @@ complicated example:: >>> divide("2", "1") executing finally clause Traceback (most recent call last): - File "", line 1, in ? + File "", line 1, in File "", line 3, in divide TypeError: unsupported operand type(s) for /: 'str' and 'str' diff --git a/Doc/tutorial/floatingpoint.rst b/Doc/tutorial/floatingpoint.rst index d440e53..0c0eb52 100644 --- a/Doc/tutorial/floatingpoint.rst +++ b/Doc/tutorial/floatingpoint.rst @@ -1,3 +1,7 @@ +.. testsetup:: + + import math + .. _tut-fp-issues: ************************************************** diff --git a/Doc/tutorial/interpreter.rst b/Doc/tutorial/interpreter.rst index e966085..e8d8e2b 100644 --- a/Doc/tutorial/interpreter.rst +++ b/Doc/tutorial/interpreter.rst @@ -94,7 +94,9 @@ mode*. In this mode it prompts for the next command with the *primary prompt*, usually three greater-than signs (``>>>``); for continuation lines it prompts with the *secondary prompt*, by default three dots (``...``). The interpreter prints a welcome message stating its version number and a copyright notice -before printing the first prompt:: +before printing the first prompt: + +.. code-block:: shell-session $ python3.5 Python 3.5 (default, Sep 16 2015, 09:25:04) diff --git a/Doc/tutorial/modules.rst b/Doc/tutorial/modules.rst index 261a3f3..1e3d5c0 100644 --- a/Doc/tutorial/modules.rst +++ b/Doc/tutorial/modules.rst @@ -140,7 +140,9 @@ the end of your module:: you can make the file usable as a script as well as an importable module, because the code that parses the command line only runs if the module is -executed as the "main" file:: +executed as the "main" file: + +.. code-block:: shell-session $ python fibo.py 50 1 1 2 3 5 8 13 21 34 @@ -499,7 +501,7 @@ when the ``from...import`` statement is executed. (This also works when ``__all__`` is defined.) Although certain modules are designed to export only names that follow certain -patterns when you use ``import *``, it is still considered bad practise in +patterns when you use ``import *``, it is still considered bad practice in production code. Remember, there is nothing wrong with using ``from Package import diff --git a/Doc/tutorial/stdlib2.rst b/Doc/tutorial/stdlib2.rst index 3714384..f733ffc 100644 --- a/Doc/tutorial/stdlib2.rst +++ b/Doc/tutorial/stdlib2.rst @@ -1,8 +1,8 @@ .. _tut-brieftourtwo: -********************************************* -Brief Tour of the Standard Library -- Part II -********************************************* +********************************************** +Brief Tour of the Standard Library --- Part II +********************************************** This second tour covers more advanced modules that support professional programming needs. These modules rarely occur in small scripts. diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst index ec744a3..6117796 100644 --- a/Doc/using/cmdline.rst +++ b/Doc/using/cmdline.rst @@ -192,7 +192,7 @@ Miscellaneous options Issue a warning when comparing :class:`bytes` or :class:`bytearray` with :class:`str` or :class:`bytes` with :class:`int`. Issue an error when the - option is given twice (:option:`-bb`). + option is given twice (:option:`!-bb`). .. versionchanged:: 3.5 Affects comparisons of :class:`bytes` with :class:`int`. @@ -239,9 +239,7 @@ Miscellaneous options .. cmdoption:: -O - Turn on basic optimizations. This changes the filename extension for - compiled (:term:`bytecode`) files from ``.pyc`` to ``.pyo``. See also - :envvar:`PYTHONOPTIMIZE`. + Turn on basic optimizations. See also :envvar:`PYTHONOPTIMIZE`. .. cmdoption:: -OO @@ -310,11 +308,12 @@ Miscellaneous options Print a message each time a module is initialized, showing the place (filename or built-in module) from which it is loaded. When given twice - (:option:`-vv`), print a message for each file that is checked for when + (:option:`!-vv`), print a message for each file that is checked for when searching for a module. Also provides information on module cleanup at exit. See also :envvar:`PYTHONVERBOSE`. +.. _using-on-warnings: .. cmdoption:: -W arg Warning control. Python's warning machinery by default prints warning diff --git a/Doc/using/venv-create.inc b/Doc/using/venv-create.inc index c529478..7ad3008 100644 --- a/Doc/using/venv-create.inc +++ b/Doc/using/venv-create.inc @@ -89,9 +89,9 @@ venv's binary directory. The invocation of the script is platform-specific: +-------------+-----------------+-----------------------------------------+ | | csh/tcsh | $ source /bin/activate.csh | +-------------+-----------------+-----------------------------------------+ -| Windows | cmd.exe | C:\> \Scripts\activate.bat | +| Windows | cmd.exe | C:\\> \\Scripts\\activate.bat | +-------------+-----------------+-----------------------------------------+ -| | PowerShell | PS C:\> \Scripts\Activate.ps1 | +| | PowerShell | PS C:\\> \\Scripts\\Activate.ps1 | +-------------+-----------------+-----------------------------------------+ You don't specifically *need* to activate an environment; activation just diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst index 7520d60..a4a6a30 100644 --- a/Doc/using/windows.rst +++ b/Doc/using/windows.rst @@ -54,7 +54,7 @@ If you select "Install Now": users) * Python will be installed into your user directory * The :ref:`launcher` will be installed according to the option at the bottom - of the first pace + of the first page * The standard library, test suite, launcher and pip will be installed * If selected, the install directory will be added to your :envvar:`PATH` * Shortcuts will only be visible for the current user @@ -382,7 +382,7 @@ On the first page of the installer, an option labelled "Add Python 3.5 to PATH" can be selected to have the installer add the install location into the :envvar:`PATH`. The location of the :file:`Scripts\\` folder is also added. This allows you to type :command:`python` to run the interpreter, and -:command:`pip` or . Thus, you can also execute your +:command:`pip` for the package installer. Thus, you can also execute your scripts with command line options, see :ref:`using-on-cmdline` documentation. If you don't enable this option at install time, you can always re-run the diff --git a/Doc/whatsnew/2.0.rst b/Doc/whatsnew/2.0.rst index 87462f3..010a007 100644 --- a/Doc/whatsnew/2.0.rst +++ b/Doc/whatsnew/2.0.rst @@ -166,7 +166,7 @@ encoding. Encodings are named by strings, such as ``'ascii'``, ``'utf-8'``, registering new encodings that are then available throughout a Python program. If an encoding isn't specified, the default encoding is usually 7-bit ASCII, though it can be changed for your Python installation by calling the -``sys.setdefaultencoding(encoding)`` function in a customised version of +``sys.setdefaultencoding(encoding)`` function in a customized version of :file:`site.py`. Combining 8-bit and Unicode strings always coerces to Unicode, using the default @@ -476,7 +476,7 @@ lost, because benchmarking this is tricky and depends crucially on how often the program creates and destroys objects. The detection of cycles can be disabled when Python is compiled, if you can't afford even a tiny speed penalty or suspect that the cycle collection is buggy, by specifying the -:option:`--without-cycle-gc` switch when running the :program:`configure` +:option:`!--without-cycle-gc` switch when running the :program:`configure` script. Several people tackled this problem and contributed to a solution. An early @@ -506,7 +506,7 @@ arguments and/or a dictionary of keyword arguments. In Python 1.5 and earlier, you'd use the :func:`apply` built-in function: ``apply(f, args, kw)`` calls the function :func:`f` with the argument tuple *args* and the keyword arguments in the dictionary *kw*. :func:`apply` is the same in 2.0, but thanks to a patch -from Greg Ewing, ``f(*args, **kw)`` as a shorter and clearer way to achieve the +from Greg Ewing, ``f(*args, **kw)`` is a shorter and clearer way to achieve the same effect. This syntax is symmetrical with the syntax for defining functions:: @@ -1139,7 +1139,7 @@ module. Unix, not to be confused with :program:`gzip`\ -format files (which are supported by the :mod:`gzip` module) (Contributed by James C. Ahlstrom.) -* :mod:`imputil`: A module that provides a simpler way for writing customised +* :mod:`imputil`: A module that provides a simpler way for writing customized import hooks, in comparison to the existing :mod:`ihooks` module. (Implemented by Greg Stein, with much discussion on python-dev along the way.) diff --git a/Doc/whatsnew/2.1.rst b/Doc/whatsnew/2.1.rst index e55eaac..00151d7 100644 --- a/Doc/whatsnew/2.1.rst +++ b/Doc/whatsnew/2.1.rst @@ -442,8 +442,8 @@ Python syntax:: f.grammar = "A ::= B (C D)*" The dictionary containing attributes can be accessed as the function's -:attr:`__dict__`. Unlike the :attr:`__dict__` attribute of class instances, in -functions you can actually assign a new dictionary to :attr:`__dict__`, though +:attr:`~object.__dict__`. Unlike the :attr:`~object.__dict__` attribute of class instances, in +functions you can actually assign a new dictionary to :attr:`~object.__dict__`, though the new value is restricted to a regular Python dictionary; you *can't* be tricky and set it to a :class:`UserDict` instance, or any other random object that behaves like a mapping. @@ -692,7 +692,7 @@ of the more notable changes are: faster than the system :func:`malloc` and have less memory overhead. The allocator uses C's :func:`malloc` function to get large pools of memory, and then fulfills smaller memory requests from these pools. It can be enabled by - providing the :option:`--with-pymalloc` option to the :program:`configure` + providing the :option:`!--with-pymalloc` option to the :program:`configure` script; see :file:`Objects/obmalloc.c` for the implementation details. Authors of C extension modules should test their code with the object allocator @@ -731,7 +731,7 @@ of the more notable changes are: ... For a fuller discussion of the line I/O changes, see the python-dev summary for - January 1-15, 2001 at https://mail.python.org/pipermail/python-dev/2001-January/. + January 1--15, 2001 at https://mail.python.org/pipermail/python-dev/2001-January/. * A new method, :meth:`popitem`, was added to dictionaries to enable destructively iterating through the contents of a dictionary; this can be faster diff --git a/Doc/whatsnew/2.2.rst b/Doc/whatsnew/2.2.rst index 885fd60..5f28c29 100644 --- a/Doc/whatsnew/2.2.rst +++ b/Doc/whatsnew/2.2.rst @@ -157,7 +157,7 @@ attributes and methods were supported by an object. There were some informal conventions, such as defining :attr:`__members__` and :attr:`__methods__` attributes that were lists of names, but often the author of an extension type or a class wouldn't bother to define them. You could fall back on inspecting -the :attr:`__dict__` of an object, but when class inheritance or an arbitrary +the :attr:`~object.__dict__` of an object, but when class inheritance or an arbitrary :meth:`__getattr__` hook were in use this could still be inaccurate. The one big idea underlying the new class model is that an API for describing @@ -169,7 +169,7 @@ possible, as well as more exotic constructs. Attribute descriptors are objects that live inside class objects, and have a few attributes of their own: -* :attr:`__name__` is the attribute's name. +* :attr:`~definition.__name__` is the attribute's name. * :attr:`__doc__` is the attribute's docstring. @@ -329,7 +329,7 @@ However, Python 2.2's support for :dfn:`properties` will often be a simpler way to trap attribute references. Writing a :meth:`__getattr__` method is complicated because to avoid recursion you can't use regular attribute accesses inside them, and instead have to mess around with the contents of -:attr:`__dict__`. :meth:`__getattr__` methods also end up being called by Python +:attr:`~object.__dict__`. :meth:`__getattr__` methods also end up being called by Python when it checks for other methods such as :meth:`__repr__` or :meth:`__coerce__`, and so have to be written with this in mind. Finally, calling a function on every attribute access results in a sizable performance loss. @@ -357,15 +357,15 @@ write:: That is certainly clearer and easier to write than a pair of :meth:`__getattr__`/:meth:`__setattr__` methods that check for the :attr:`size` attribute and handle it specially while retrieving all other attributes from the -instance's :attr:`__dict__`. Accesses to :attr:`size` are also the only ones +instance's :attr:`~object.__dict__`. Accesses to :attr:`size` are also the only ones which have to perform the work of calling a function, so references to other attributes run at their usual speed. Finally, it's possible to constrain the list of attributes that can be -referenced on an object using the new :attr:`__slots__` class attribute. Python +referenced on an object using the new :attr:`~object.__slots__` class attribute. Python objects are usually very dynamic; at any time it's possible to define a new attribute on an instance by just doing ``obj.new_attr=1``. A new-style class -can define a class attribute named :attr:`__slots__` to limit the legal +can define a class attribute named :attr:`~object.__slots__` to limit the legal attributes to a particular set of names. An example will make this clear:: >>> class C(object): @@ -383,7 +383,7 @@ attributes to a particular set of names. An example will make this clear:: AttributeError: 'C' object has no attribute 'newattr' Note how you get an :exc:`AttributeError` on the attempt to assign to an -attribute not listed in :attr:`__slots__`. +attribute not listed in :attr:`~object.__slots__`. .. _sect-rellinks: @@ -758,7 +758,7 @@ Here are the changes 2.2 introduces: operators. * Python 2.2 supports some command-line arguments for testing whether code will - work with the changed division semantics. Running python with :option:`-Q + work with the changed division semantics. Running python with :option:`!-Q warn` will cause a warning to be issued whenever division is applied to two integers. You can use this to find code that's affected by the change and fix it. By default, Python 2.2 will simply perform classic division without a @@ -779,8 +779,8 @@ Unicode Changes Python's Unicode support has been enhanced a bit in 2.2. Unicode strings are usually stored as UCS-2, as 16-bit unsigned integers. Python 2.2 can also be compiled to use UCS-4, 32-bit unsigned integers, as its internal encoding by -supplying :option:`--enable-unicode=ucs4` to the configure script. (It's also -possible to specify :option:`--disable-unicode` to completely disable Unicode +supplying :option:`!--enable-unicode=ucs4` to the configure script. (It's also +possible to specify :option:`!--disable-unicode` to completely disable Unicode support.) When built to use UCS-4 (a "wide Python"), the interpreter can natively handle @@ -979,7 +979,7 @@ New and Improved Modules output have been corrected. (Contributed by Fred L. Drake, Jr. and Tim Peters.) * The :mod:`socket` module can be compiled to support IPv6; specify the - :option:`--enable-ipv6` option to Python's configure script. (Contributed by + :option:`!--enable-ipv6` option to Python's configure script. (Contributed by Jun-ichiro "itojun" Hagino.) * Two new format characters were added to the :mod:`struct` module for 64-bit @@ -1140,7 +1140,7 @@ Some of the more notable changes are: in the main Python CVS tree, and many changes have been made to support MacOS X. The most significant change is the ability to build Python as a framework, - enabled by supplying the :option:`--enable-framework` option to the configure + enabled by supplying the :option:`!--enable-framework` option to the configure script when compiling Python. According to Jack Jansen, "This installs a self- contained Python installation plus the OS X framework "glue" into :file:`/Library/Frameworks/Python.framework` (or another location of choice). @@ -1159,7 +1159,7 @@ Some of the more notable changes are: The main change is the possibility to build Python as a framework. This installs a self-contained Python installation plus the OSX framework "glue" into /Library/Frameworks/Python.framework (or - another location of choice). For now there is little immedeate added + another location of choice). For now there is little immediate added benefit to this (actually, there is the disadvantage that you have to change your PATH to be able to find Python), but it is the basis for creating a fullblown Python application, porting the MacPython IDE, @@ -1168,7 +1168,7 @@ Some of the more notable changes are: The other change is that most MacPython toolbox modules, which interface to all the MacOS APIs such as windowing, quicktime, scripting, etc. have been ported. Again, most of these are not of - immedeate use, as they need a full application to be really useful, so + immediate use, as they need a full application to be really useful, so they have been commented out in setup.py. People wanting to experiment can uncomment them. Gestalt and Internet Config modules are enabled by default. diff --git a/Doc/whatsnew/2.3.rst b/Doc/whatsnew/2.3.rst index b8cdcf1..93930b8 100644 --- a/Doc/whatsnew/2.3.rst +++ b/Doc/whatsnew/2.3.rst @@ -291,7 +291,9 @@ PEP 273: Importing Modules from ZIP Archives The new :mod:`zipimport` module adds support for importing modules from a ZIP- format archive. You don't need to import the module explicitly; it will be automatically imported if a ZIP archive's filename is added to ``sys.path``. -For example:: +For example: + +.. code-block:: shell-session amk@nyman:~/src/python$ unzip -l /tmp/example.zip Archive: /tmp/example.zip @@ -392,7 +394,7 @@ be shared between all three operating systems without needing to convert the line-endings. This feature can be disabled when compiling Python by specifying the -:option:`--without-universal-newlines` switch when running Python's +:option:`!--without-universal-newlines` switch when running Python's :program:`configure` script. @@ -1111,10 +1113,10 @@ Here are all of the changes that Python 2.3 makes to the core Python language. * One of the noted incompatibilities between old- and new-style classes has been - removed: you can now assign to the :attr:`__name__` and :attr:`__bases__` + removed: you can now assign to the :attr:`~definition.__name__` and :attr:`~class.__bases__` attributes of new-style classes. There are some restrictions on what can be - assigned to :attr:`__bases__` along the lines of those relating to assigning to - an instance's :attr:`__class__` attribute. + assigned to :attr:`~class.__bases__` along the lines of those relating to assigning to + an instance's :attr:`~instance.__class__` attribute. .. ====================================================================== @@ -1681,13 +1683,13 @@ Date and time types suitable for expressing timestamps were added as the fancy features, and just stick to the basics of representing time. The three primary types are: :class:`date`, representing a day, month, and year; -:class:`time`, consisting of hour, minute, and second; and :class:`datetime`, -which contains all the attributes of both :class:`date` and :class:`time`. +:class:`~datetime.time`, consisting of hour, minute, and second; and :class:`~datetime.datetime`, +which contains all the attributes of both :class:`date` and :class:`~datetime.time`. There's also a :class:`timedelta` class representing differences between two points in time, and time zone logic is implemented by classes inheriting from the abstract :class:`tzinfo` class. -You can create instances of :class:`date` and :class:`time` by either supplying +You can create instances of :class:`date` and :class:`~datetime.time` by either supplying keyword arguments to the appropriate constructor, e.g. ``datetime.date(year=1972, month=10, day=15)``, or by using one of a number of class methods. For example, the :meth:`date.today` class method returns the @@ -1706,7 +1708,7 @@ number of methods for producing formatted strings from objects:: '2002 30 Dec' The :meth:`replace` method allows modifying one or more fields of a -:class:`date` or :class:`datetime` instance, returning a new instance:: +:class:`date` or :class:`~datetime.datetime` instance, returning a new instance:: >>> d = datetime.datetime.now() >>> d @@ -1716,11 +1718,11 @@ The :meth:`replace` method allows modifying one or more fields of a >>> Instances can be compared, hashed, and converted to strings (the result is the -same as that of :meth:`isoformat`). :class:`date` and :class:`datetime` +same as that of :meth:`isoformat`). :class:`date` and :class:`~datetime.datetime` instances can be subtracted from each other, and added to :class:`timedelta` instances. The largest missing feature is that there's no standard library support for parsing strings and getting back a :class:`date` or -:class:`datetime`. +:class:`~datetime.datetime`. For more information, refer to the module's reference documentation. (Contributed by Tim Peters.) @@ -1761,7 +1763,9 @@ This returns an object containing all of the option values, and a list of strings containing the remaining arguments. Invoking the script with the various arguments now works as you'd expect it to. -Note that the length argument is automatically converted to an integer. :: +Note that the length argument is automatically converted to an integer. + +.. code-block:: shell-session $ ./python opt.py -i data arg1 @@ -1771,7 +1775,9 @@ Note that the length argument is automatically converted to an integer. :: [] $ -The help message is automatically generated for you:: +The help message is automatically generated for you: + +.. code-block:: shell-session $ ./python opt.py --help usage: opt.py [options] @@ -1806,9 +1812,9 @@ pools of memory and then fulfills smaller memory requests from these pools. In 2.1 and 2.2, pymalloc was an experimental feature and wasn't enabled by default; you had to explicitly enable it when compiling Python by providing the -:option:`--with-pymalloc` option to the :program:`configure` script. In 2.3, +:option:`!--with-pymalloc` option to the :program:`configure` script. In 2.3, pymalloc has had further enhancements and is now enabled by default; you'll have -to supply :option:`--without-pymalloc` to disable it. +to supply :option:`!--without-pymalloc` to disable it. This change is transparent to code written in Python; however, pymalloc may expose bugs in C extensions. Authors of C extension modules should test their @@ -1847,7 +1853,7 @@ Thanks to lots of work by Tim Peters, pymalloc in 2.3 also provides debugging features to catch memory overwrites and doubled frees in both extension modules and in the interpreter itself. To enable this support, compile a debugging version of the Python interpreter by running :program:`configure` with -:option:`--with-pydebug`. +:option:`!--with-pydebug`. To aid extension writers, a header file :file:`Misc/pymemcompat.h` is distributed with the source to Python 2.3 that allows Python extensions to use @@ -1873,11 +1879,11 @@ Changes to Python's build process and to the C API include: * The cycle detection implementation used by the garbage collection has proven to be stable, so it's now been made mandatory. You can no longer compile Python - without it, and the :option:`--with-cycle-gc` switch to :program:`configure` has + without it, and the :option:`!--with-cycle-gc` switch to :program:`configure` has been removed. * Python can now optionally be built as a shared library - (:file:`libpython2.3.so`) by supplying :option:`--enable-shared` when running + (:file:`libpython2.3.so`) by supplying :option:`!--enable-shared` when running Python's :program:`configure` script. (Contributed by Ondrej Palkovsky.) * The :c:macro:`DL_EXPORT` and :c:macro:`DL_IMPORT` macros are now deprecated. @@ -1886,7 +1892,7 @@ Changes to Python's build process and to the C API include: generally use the :c:macro:`PyAPI_FUNC` and :c:macro:`PyAPI_DATA` macros. * The interpreter can be compiled without any docstrings for the built-in - functions and modules by supplying :option:`--without-doc-strings` to the + functions and modules by supplying :option:`!--without-doc-strings` to the :program:`configure` script. This makes the Python executable about 10% smaller, but will also mean that you can't get help for Python's built-ins. (Contributed by Gustavo Niemeyer.) @@ -1920,7 +1926,7 @@ Changes to Python's build process and to the C API include: * If you dynamically allocate type objects in your extension, you should be aware of a change in the rules relating to the :attr:`__module__` and - :attr:`__name__` attributes. In summary, you will want to ensure the type's + :attr:`~definition.__name__` attributes. In summary, you will want to ensure the type's dictionary contains a ``'__module__'`` key; making the module name the part of the type name leading up to the final period will no longer have the desired effect. For more detail, read the API reference documentation or the source. @@ -2078,4 +2084,3 @@ Michael Hudson, Chris Lambert, Detlef Lannert, Martin von Löwis, Andrew MacIntyre, Lalo Martins, Chad Netzer, Gustavo Niemeyer, Neal Norwitz, Hans Nowak, Chris Reedy, Francesco Ricciardi, Vinay Sajip, Neil Schemenauer, Roman Suzi, Jason Tishler, Just van Rossum. - diff --git a/Doc/whatsnew/2.4.rst b/Doc/whatsnew/2.4.rst index fb4558b..8db90cc 100644 --- a/Doc/whatsnew/2.4.rst +++ b/Doc/whatsnew/2.4.rst @@ -1425,7 +1425,9 @@ specifying the :const:`doctest.REPORT_UDIFF` (unified diffs), print word Running the above function's tests with :const:`doctest.REPORT_UDIFF` specified, -you get the following output:: +you get the following output: + +.. code-block:: none ********************************************************************** File "t.py", line 15, in g @@ -1481,10 +1483,10 @@ Some of the changes to Python's build process and to the C API are: * Python can now be built with additional profiling for the interpreter itself, intended as an aid to people developing the Python core. Providing - :option:`--enable-profiling` to the :program:`configure` script will let you + :option:`!--enable-profiling` to the :program:`configure` script will let you profile the interpreter with :program:`gprof`, and providing the - :option:`--with-tsc` switch enables profiling using the Pentium's Time-Stamp- - Counter register. Note that the :option:`--with-tsc` switch is slightly + :option:`!--with-tsc` switch enables profiling using the Pentium's Time-Stamp- + Counter register. Note that the :option:`!--with-tsc` switch is slightly misnamed, because the profiling feature also works on the PowerPC platform, though that processor architecture doesn't call that register "the TSC register". (Contributed by Jeremy Hylton.) @@ -1521,7 +1523,7 @@ code: empty list instead of raising a :exc:`TypeError` exception if called with no arguments. -* You can no longer compare the :class:`date` and :class:`datetime` instances +* You can no longer compare the :class:`date` and :class:`~datetime.datetime` instances provided by the :mod:`datetime` module. Two instances of different classes will now always be unequal, and relative comparisons (``<``, ``>``) will raise a :exc:`TypeError`. diff --git a/Doc/whatsnew/2.5.rst b/Doc/whatsnew/2.5.rst index 093189e..db8f9df 100644 --- a/Doc/whatsnew/2.5.rst +++ b/Doc/whatsnew/2.5.rst @@ -236,7 +236,7 @@ the repository. Before a package can be uploaded, you must be able to build a distribution using the :command:`sdist` Distutils command. Once that works, you can run ``python setup.py upload`` to add your package to the PyPI archive. Optionally you can -GPG-sign the package by supplying the :option:`--sign` and :option:`--identity` +GPG-sign the package by supplying the :option:`!--sign` and :option:`!--identity` options. Package uploading was implemented by Martin von Löwis and Richard Jones. @@ -1307,7 +1307,7 @@ complete list of changes, or look through the SVN logs for all the details. (Contributed by Skip Montanaro and Andrew McNamara.) -* The :class:`datetime` class in the :mod:`datetime` module now has a +* The :class:`~datetime.datetime` class in the :mod:`datetime` module now has a ``strptime(string, format)`` method for parsing date strings, contributed by Josh Spoerri. It uses the same format characters as :func:`time.strptime` and :func:`time.strftime`:: @@ -1497,7 +1497,7 @@ complete list of changes, or look through the SVN logs for all the details. * The :mod:`pyexpat` module now uses version 2.0 of the Expat parser. (Contributed by Trent Mick.) -* The :class:`Queue` class provided by the :mod:`Queue` module gained two new +* The :class:`~queue.Queue` class provided by the :mod:`Queue` module gained two new methods. :meth:`join` blocks until all items in the queue have been retrieved and all processing work on the items have been completed. Worker threads call the other new method, :meth:`task_done`, to signal that processing for an item @@ -1639,7 +1639,7 @@ complete list of changes, or look through the SVN logs for all the details. * The :mod:`webbrowser` module received a number of enhancements. It's now usable as a script with ``python -m webbrowser``, taking a URL as the argument; - there are a number of switches to control the behaviour (:option:`-n` for a new + there are a number of switches to control the behaviour (:option:`!-n` for a new browser window, :option:`!-t` for a new tab). New module-level functions, :func:`open_new` and :func:`open_new_tab`, were added to support this. The module's :func:`open` function supports an additional feature, an *autoraise* @@ -1649,7 +1649,7 @@ complete list of changes, or look through the SVN logs for all the details. .. Patch #754022 -* The :mod:`xmlrpclib` module now supports returning :class:`datetime` objects +* The :mod:`xmlrpclib` module now supports returning :class:`~datetime.datetime` objects for the XML-RPC date type. Supply ``use_datetime=True`` to the :func:`loads` function or the :class:`Unmarshaller` class to enable this feature. (Contributed by Skip Montanaro.) @@ -2209,7 +2209,7 @@ Port-Specific Changes * MacOS X (10.3 and higher): dynamic loading of modules now uses the :c:func:`dlopen` function instead of MacOS-specific functions. -* MacOS X: an :option:`--enable-universalsdk` switch was added to the +* MacOS X: an :option:`!--enable-universalsdk` switch was added to the :program:`configure` script that compiles the interpreter as a universal binary able to run on both PowerPC and Intel processors. (Contributed by Ronald Oussoren; :issue:`2573`.) diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst index 4ab1656..4fc0c36 100644 --- a/Doc/whatsnew/2.6.rst +++ b/Doc/whatsnew/2.6.rst @@ -58,7 +58,7 @@ Python 2.6 incorporates new features and syntax from 3.0 while remaining compatible with existing code by not removing older features or syntax. When it's not possible to do that, Python 2.6 tries to do what it can, adding compatibility functions in a -:mod:`future_builtins` module and a :option:`-3` switch to warn about +:mod:`future_builtins` module and a :option:`!-3` switch to warn about usages that will become unsupported in 3.0. Some significant new packages have been added to the standard library, @@ -116,7 +116,7 @@ module has versions with the new 3.0 semantics. Code written to be compatible with 3.0 can do ``from future_builtins import hex, map`` as necessary. -A new command-line switch, :option:`-3`, enables warnings +A new command-line switch, :option:`!-3`, enables warnings about features that will be removed in Python 3.0. You can run code with this switch to see how much work will be necessary to port code to 3.0. The value of this switch is available @@ -613,10 +613,10 @@ multiple of 4. result = queue.get() print 'Factorial', N, '=', result -A :class:`Queue` is used to communicate the result of the factorial. -The :class:`Queue` object is stored in a global variable. +A :class:`~queue.Queue` is used to communicate the result of the factorial. +The :class:`~queue.Queue` object is stored in a global variable. The child process will use the value of the variable when the child -was created; because it's a :class:`Queue`, parent and child can use +was created; because it's a :class:`~queue.Queue`, parent and child can use the object to communicate. (If the parent were to change the value of the global variable, the child's value would be unaffected, and vice versa.) @@ -2131,7 +2131,7 @@ changes, or look through the Subversion logs for all the details. (Contributed by Christian Heimes and Mark Dickinson.) -* :class:`mmap` objects now have a :meth:`rfind` method that searches for a +* :class:`~mmap.mmap` objects now have a :meth:`rfind` method that searches for a substring beginning at the end of the string and searching backwards. The :meth:`find` method also gained an *end* parameter giving an index at which to stop searching. @@ -2630,7 +2630,7 @@ changes, or look through the Subversion logs for all the details. :class:`datetime.date` and :class:`datetime.time` to the :class:`xmlrpclib.DateTime` type; the conversion semantics were not necessarily correct for all applications. Code using - :mod:`xmlrpclib` should convert :class:`date` and :class:`time` + :mod:`xmlrpclib` should convert :class:`date` and :class:`~datetime.time` instances. (:issue:`1330538`) The code can also handle dates before 1900 (contributed by Ralf Schmitt; :issue:`2014`) and 64-bit integers represented by using ```` in XML-RPC responses @@ -2992,7 +2992,7 @@ Changes to Python's build process and to the C API include: * On Mac OS X, Python 2.6 can be compiled as a 4-way universal build. The :program:`configure` script - can take a :option:`--with-universal-archs=[32-bit|64-bit|all]` + can take a :option:`!--with-universal-archs=[32-bit|64-bit|all]` switch, controlling whether the binaries are built for 32-bit architectures (x86, PowerPC), 64-bit (x86-64 and PPC-64), or both. (Contributed by Ronald Oussoren.) @@ -3147,7 +3147,7 @@ Port-Specific Changes: Mac OS X * When compiling a framework build of Python, you can now specify the framework name to be used by providing the - :option:`--with-framework-name=` option to the + :option:`!--with-framework-name=` option to the :program:`configure` script. * The :mod:`macfs` module has been removed. This in turn required the @@ -3283,7 +3283,7 @@ that may require changes to your code: :class:`datetime.date` and :class:`datetime.time` to the :class:`xmlrpclib.DateTime` type; the conversion semantics were not necessarily correct for all applications. Code using - :mod:`xmlrpclib` should convert :class:`date` and :class:`time` + :mod:`xmlrpclib` should convert :class:`date` and :class:`~datetime.time` instances. (:issue:`1330538`) * (3.0-warning mode) The :class:`Exception` class now warns diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst index 702aeb4..55392fc 100644 --- a/Doc/whatsnew/2.7.rst +++ b/Doc/whatsnew/2.7.rst @@ -104,7 +104,7 @@ Some key consequences of the long-term significance of 2.7 are: when compared to earlier 2.x versions. Python 2.7 is currently expected to remain supported by the core development team (receiving security updates and other bug fixes) until at least 2020 (10 years after its initial - release, compared to the more typical support period of 18-24 months). + release, compared to the more typical support period of 18--24 months). * As the Python 2.7 standard library ages, making effective use of the Python Package Index (either directly or via a redistributor) becomes @@ -198,8 +198,8 @@ Other new Python3-mode warnings include: * :func:`operator.isCallable` and :func:`operator.sequenceIncludes`, which are not supported in 3.x, now trigger warnings. -* The :option:`-3` switch now automatically - enables the :option:`-Qwarn <-Q>` switch that causes warnings +* The :option:`!-3` switch now automatically + enables the :option:`!-Qwarn` switch that causes warnings about using classic division with integers and long integers. @@ -245,8 +245,8 @@ Deleting an entry and reinserting it will move it to the end:: [('first', 1), ('third', 3), ('second', 5)] The :meth:`~collections.OrderedDict.popitem` method has an optional *last* -argument that defaults to True. If *last* is True, the most recently -added key is returned and removed; if it's False, the +argument that defaults to ``True``. If *last* is true, the most recently +added key is returned and removed; if it's false, the oldest key is selected:: >>> od = OrderedDict([(x,0) for x in range(20)]) @@ -390,7 +390,7 @@ Here's an example:: args = parser.parse_args() print args.__dict__ -Unless you override it, :option:`-h` and :option:`--help` switches +Unless you override it, :option:`!-h` and :option:`!--help` switches are automatically added, and produce neatly formatted output:: -> ./python.exe argparse-example.py --help @@ -532,7 +532,7 @@ implemented by Vinay Sajip, are: calling ``log.getChild('network.listen')`` is equivalent to ``getLogger('app.network.listen')``. -* The :class:`~logging.LoggerAdapter` class gained a +* The :class:`~logging.LoggerAdapter` class gained an :meth:`~logging.LoggerAdapter.isEnabledFor` method that takes a *level* and returns whether the underlying logger would process a message of that level of importance. @@ -960,7 +960,7 @@ Several performance enhancements have been added: benchmark results on 32-bit machines have been mixed. Therefore, the default is to use base 2**30 on 64-bit machines and base 2**15 on 32-bit machines; on Unix, there's a new configure option - :option:`--enable-big-digits` that can be used to override this default. + :option:`!--enable-big-digits` that can be used to override this default. Apart from the performance improvements this change should be invisible to end users, with one exception: for testing and @@ -989,7 +989,7 @@ Several performance enhancements have been added: Gregory Smith; :issue:`1087418`). * The implementation of ``%`` checks for the left-side operand being - a Python string and special-cases it; this results in a 1-3% + a Python string and special-cases it; this results in a 1--3% performance increase for applications that frequently use ``%`` with strings, such as templating libraries. (Implemented by Collin Winter; :issue:`5176`.) @@ -1518,7 +1518,7 @@ changes, or look through the Subversion logs for all the details. * The :mod:`SocketServer` module's :class:`~SocketServer.TCPServer` class now supports socket timeouts and disabling the Nagle algorithm. The :attr:`~SocketServer.TCPServer.disable_nagle_algorithm` class attribute - defaults to False; if overridden to be True, + defaults to ``False``; if overridden to be true, new request connections will have the TCP_NODELAY option set to prevent buffering many small sends into a single TCP packet. The :attr:`~SocketServer.BaseServer.timeout` class attribute can hold @@ -1844,12 +1844,12 @@ Consult the :mod:`unittest` module documentation for more details. The :func:`~unittest.main` function supports some other new options: -* :option:`-b ` or :option:`--buffer` will buffer the standard output +* :option:`-b ` or :option:`!--buffer` will buffer the standard output and standard error streams during each test. If the test passes, any resulting output will be discarded; on failure, the buffered output will be displayed. -* :option:`-c ` or :option:`--catch` will cause the control-C interrupt +* :option:`-c ` or :option:`!--catch` will cause the control-C interrupt to be handled more gracefully. Instead of interrupting the test process immediately, the currently running test will be completed and then the partial results up to the interruption will be reported. @@ -1863,7 +1863,7 @@ The :func:`~unittest.main` function supports some other new options: :func:`~unittest.removeHandler` decorator that can be used to mark tests that should have the control-C handling disabled. -* :option:`-f ` or :option:`--failfast` makes +* :option:`-f ` or :option:`!--failfast` makes test execution stop immediately when a test fails instead of continuing to execute further tests. (Suggested by Cliff Dyer and implemented by Michael Foord; :issue:`8074`.) @@ -1879,7 +1879,7 @@ The error messages for :meth:`~unittest.TestCase.assertEqual`, :meth:`~unittest.TestCase.assertTrue`, and :meth:`~unittest.TestCase.assertFalse` failures now provide more information. If you set the :attr:`~unittest.TestCase.longMessage` attribute of your :class:`~unittest.TestCase` classes to -True, both the standard error message and any additional message you +true, both the standard error message and any additional message you provide will be printed for failures. (Added by Michael Foord; :issue:`5663`.) The :meth:`~unittest.TestCase.assertRaises` method now @@ -1986,7 +1986,7 @@ GvR worked on merging them into Python's version of :mod:`unittest`. sequence comparison methods do. :func:`unittest.main` now takes an optional ``exit`` argument. If -False, :func:`~unittest.main` doesn't call :func:`sys.exit`, allowing +false, :func:`~unittest.main` doesn't call :func:`sys.exit`, allowing :func:`~unittest.main` to be used from the interactive interpreter. (Contributed by J. Pablo Fernández; :issue:`3379`.) @@ -2238,19 +2238,19 @@ Changes to Python's build process and to the C API include: with ``Py``, or with ``_ctypes``. (Implemented by Thomas Heller; :issue:`3102`.) -* New configure option: the :option:`--with-system-expat` switch allows +* New configure option: the :option:`!--with-system-expat` switch allows building the :mod:`pyexpat` module to use the system Expat library. (Contributed by Arfrever Frehtes Taifersar Arahesis; :issue:`7609`.) * New configure option: the - :option:`--with-valgrind` option will now disable the pymalloc + :option:`!--with-valgrind` option will now disable the pymalloc allocator, which is difficult for the Valgrind memory-error detector to analyze correctly. Valgrind will therefore be better at detecting memory leaks and overruns. (Contributed by James Henstridge; :issue:`2422`.) * New configure option: you can now supply an empty string to - :option:`--with-dbmliborder=` in order to disable all of the various + :option:`!--with-dbmliborder=` in order to disable all of the various DBM modules. (Added by Arfrever Frehtes Taifersar Arahesis; :issue:`6491`.) @@ -2290,7 +2290,9 @@ There is an existing data type already used for this, written in pure Python could cause a segmentation fault by taking a :c:type:`PyCObject` from module A and somehow substituting it for the :c:type:`PyCObject` in module B. Capsules know their own name, -and getting the pointer requires providing the name:: +and getting the pointer requires providing the name: + +.. code-block:: c void *vtable; @@ -2395,19 +2397,19 @@ Other Changes and Fixes renamed, moved, or is accessed through different paths. (Patch by Ziga Seilnacht and Jean-Paul Calderone; :issue:`1180193`.) -* The :file:`regrtest.py` script now takes a :option:`--randseed=` +* The :file:`regrtest.py` script now takes a :option:`!--randseed=` switch that takes an integer that will be used as the random seed - for the :option:`-r` option that executes tests in random order. - The :option:`-r` option also reports the seed that was used + for the :option:`!-r` option that executes tests in random order. + The :option:`!-r` option also reports the seed that was used (Added by Collin Winter.) -* Another :file:`regrtest.py` switch is :option:`-j`, which +* Another :file:`regrtest.py` switch is :option:`!-j`, which takes an integer specifying how many tests run in parallel. This allows reducing the total runtime on multi-core machines. This option is compatible with several other options, including the :option:`!-R` switch which is known to produce long runtimes. (Added by Antoine Pitrou, :issue:`6152`.) This can also be used - with a new :option:`-F` switch that runs selected tests in a loop + with a new :option:`!-F` switch that runs selected tests in a loop until they fail. (Added by Antoine Pitrou; :issue:`7312`.) * When executed as a script, the :file:`py_compile.py` module now @@ -2616,4 +2618,3 @@ The author would like to thank the following people for offering suggestions, corrections and assistance with various drafts of this article: Nick Coghlan, Philip Jenvey, Ryan Lovett, R. David Murray, Hugh Secker-Walker. - diff --git a/Doc/whatsnew/3.0.rst b/Doc/whatsnew/3.0.rst index 044d7be..5ecf2eb 100644 --- a/Doc/whatsnew/3.0.rst +++ b/Doc/whatsnew/3.0.rst @@ -117,7 +117,9 @@ You can also customize the separator between items, e.g.:: print("There are <", 2**32, "> possibilities!", sep="") -which produces:: +which produces: + +.. code-block:: none There are <4294967296> possibilities! @@ -783,8 +785,8 @@ Operators And Special Methods :attr:`func_closure`, :attr:`func_code`, :attr:`func_defaults`, :attr:`func_dict`, :attr:`func_doc`, :attr:`func_globals`, :attr:`func_name` were renamed to :attr:`__closure__`, - :attr:`__code__`, :attr:`__defaults__`, :attr:`__dict__`, - :attr:`__doc__`, :attr:`__globals__`, :attr:`__name__`, + :attr:`__code__`, :attr:`__defaults__`, :attr:`~object.__dict__`, + :attr:`__doc__`, :attr:`__globals__`, :attr:`~definition.__name__`, respectively. * :meth:`__nonzero__` is now :meth:`__bool__`. @@ -902,7 +904,7 @@ best strategy is the following: port from Python 2.x to Python 2.(x+1). Make sure all your tests pass. -2. (Still using 2.6:) Turn on the :option:`-3` command line switch. +2. (Still using 2.6:) Turn on the :option:`!-3` command line switch. This enables warnings about features that will be removed (or change) in 3.0. Run your test suite again, and fix code that you get warnings about until there are no warnings left, and all your diff --git a/Doc/whatsnew/3.1.rst b/Doc/whatsnew/3.1.rst index c1a1687..5c31401 100644 --- a/Doc/whatsnew/3.1.rst +++ b/Doc/whatsnew/3.1.rst @@ -548,5 +548,5 @@ that may require changes to your code: * The automatic name remapping in the pickle module for protocol 2 or lower can make Python 3.1 pickles unreadable in Python 3.0. One solution is to use - protocol 3. Another solution is to set the *fix_imports* option to **False**. + protocol 3. Another solution is to set the *fix_imports* option to ``False``. See the discussion above for more details. diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst index baaf797..9acc734 100644 --- a/Doc/whatsnew/3.2.rst +++ b/Doc/whatsnew/3.2.rst @@ -160,6 +160,8 @@ each with their own argument patterns and help displays:: parser_m.add_argument('-c', '--course', type=int, required=True) parser_m.add_argument('-s', '--speed', type=int, default=0) +.. code-block:: shell-session + $ ./helm.py --help # top level help (launch and move) $ ./helm.py launch --help # help for launch options $ ./helm.py launch --missiles # set missiles=True and torpedos=False @@ -311,14 +313,14 @@ aspects that are visible to the programmer: of the actual file that was imported: >>> import collections - >>> collections.__cached__ + >>> collections.__cached__ # doctest: +SKIP 'c:/py32/lib/__pycache__/collections.cpython-32.pyc' * The tag that is unique to each interpreter is accessible from the :mod:`imp` module: >>> import imp - >>> imp.get_tag() + >>> imp.get_tag() # doctest: +SKIP 'cpython-32' * Scripts that try to deduce source filename from the imported file now need to @@ -327,7 +329,7 @@ aspects that are visible to the programmer: >>> imp.source_from_cache('c:/py32/lib/__pycache__/collections.cpython-32.pyc') 'c:/py32/lib/collections.py' - >>> imp.cache_from_source('c:/py32/lib/collections.py') + >>> imp.cache_from_source('c:/py32/lib/collections.py') # doctest: +SKIP 'c:/py32/lib/__pycache__/collections.cpython-32.pyc' * The :mod:`py_compile` and :mod:`compileall` modules have been updated to @@ -478,7 +480,9 @@ Some smaller changes made to the core Python language are: * The interpreter can now be started with a quiet option, ``-q``, to prevent the copyright and version information from being displayed in the interactive - mode. The option can be introspected using the :attr:`sys.flags` attribute:: + mode. The option can be introspected using the :attr:`sys.flags` attribute: + + .. code-block:: shell-session $ python -q >>> sys.flags @@ -528,7 +532,7 @@ Some smaller changes made to the core Python language are: original object. >>> with memoryview(b'abcdefgh') as v: - print(v.tolist()) + ... print(v.tolist()) [97, 98, 99, 100, 101, 102, 103, 104] (Added by Antoine Pitrou; :issue:`9757`.) @@ -564,16 +568,19 @@ Some smaller changes made to the core Python language are: expect a tuple as an argument. This is a big step forward in making the C structures as flexible as their pure Python counterparts: + >>> import sys >>> isinstance(sys.version_info, tuple) True - >>> 'Version %d.%d.%d %s(%d)' % sys.version_info + >>> 'Version %d.%d.%d %s(%d)' % sys.version_info # doctest: +SKIP 'Version 3.2.0 final(0)' (Suggested by Arfrever Frehtes Taifersar Arahesis and implemented by Benjamin Peterson in :issue:`8413`.) * Warnings are now easier to control using the :envvar:`PYTHONWARNINGS` - environment variable as an alternative to using ``-W`` at the command line:: + environment variable as an alternative to using ``-W`` at the command line: + + .. code-block:: shell-session $ export PYTHONWARNINGS='ignore::RuntimeWarning::,once::UnicodeWarning::' @@ -595,7 +602,9 @@ Some smaller changes made to the core Python language are: object ensures it closes the underlying operating system resource (usually, a file descriptor), the delay in deallocating the object could produce various issues, especially under Windows. Here is an example - of enabling the warning from the command line:: + of enabling the warning from the command line: + + .. code-block:: shell-session $ python -q -Wdefault >>> f = open("foo", "wb") @@ -749,18 +758,18 @@ functools >>> import functools >>> @functools.lru_cache(maxsize=300) - >>> def get_phone_number(name): - c = conn.cursor() - c.execute('SELECT phonenumber FROM phonelist WHERE name=?', (name,)) - return c.fetchone()[0] + ... def get_phone_number(name): + ... c = conn.cursor() + ... c.execute('SELECT phonenumber FROM phonelist WHERE name=?', (name,)) + ... return c.fetchone()[0] - >>> for name in user_requests: - get_phone_number(name) # cached lookup + >>> for name in user_requests: # doctest: +SKIP + ... get_phone_number(name) # cached lookup To help with choosing an effective cache size, the wrapped function is instrumented for tracking cache statistics: - >>> get_phone_number.cache_info() + >>> get_phone_number.cache_info() # doctest: +SKIP CacheInfo(hits=4805, misses=980, maxsize=300, currsize=300) If the phonelist table gets updated, the outdated contents of the cache can be @@ -815,7 +824,7 @@ functools modern :term:`key function`: >>> # locale-aware sort order - >>> sorted(iterable, key=cmp_to_key(locale.strcoll)) + >>> sorted(iterable, key=cmp_to_key(locale.strcoll)) # doctest: +SKIP For sorting examples and a brief sorting tutorial, see the `Sorting HowTo `_ tutorial. @@ -853,7 +862,8 @@ collections which only have positive counts, and the latter is more suitable for use cases that allow negative counts: - >>> tally = Counter(dogs=5, cat=3) + >>> from collections import Counter + >>> tally = Counter(dogs=5, cats=3) >>> tally -= Counter(dogs=2, cats=8) # saturating subtraction >>> tally Counter({'dogs': 3}) @@ -876,6 +886,7 @@ collections an ordered dictionary can be used to track order of access by aging entries from the oldest to the most recently accessed. + >>> from collections import OrderedDict >>> d = OrderedDict.fromkeys(['a', 'b', 'X', 'd', 'e']) >>> list(d) ['a', 'b', 'X', 'd', 'e'] @@ -889,6 +900,7 @@ collections :meth:`~collections.deque.count` and :meth:`~collections.deque.reverse` that make them more substitutable for :class:`list` objects: + >>> from collections import deque >>> d = deque('simsalabim') >>> d.count('s') 2 @@ -989,13 +1001,13 @@ datetime and time after 1900. The new supported year range is from 1000 to 9999 inclusive. * Whenever a two-digit year is used in a time tuple, the interpretation has been - governed by :attr:`time.accept2dyear`. The default is *True* which means that + governed by :attr:`time.accept2dyear`. The default is ``True`` which means that for a two-digit year, the century is guessed according to the POSIX rules governing the ``%y`` strptime format. Starting with Py3.2, use of the century guessing heuristic will emit a :exc:`DeprecationWarning`. Instead, it is recommended that - :attr:`time.accept2dyear` be set to *False* so that large date ranges + :attr:`time.accept2dyear` be set to ``False`` so that large date ranges can be used without guesswork:: >>> import time, warnings @@ -1031,9 +1043,10 @@ The :mod:`math` module has been updated with six new functions inspired by the C99 standard. The :func:`~math.isfinite` function provides a reliable and fast way to detect -special values. It returns *True* for regular numbers and *False* for *Nan* or +special values. It returns ``True`` for regular numbers and ``False`` for *Nan* or *Infinity*: +>>> from math import isfinite >>> [isfinite(x) for x in (123, 4.56, float('Nan'), float('Inf'))] [True, True, False, False] @@ -1041,6 +1054,7 @@ The :func:`~math.expm1` function computes ``e**x-1`` for small values of *x* without incurring the loss of precision that usually accompanies the subtraction of nearly equal quantities: +>>> from math import expm1 >>> expm1(0.013671875) # more accurate way to compute e**x-1 for a small x 0.013765762467652909 @@ -1048,6 +1062,7 @@ The :func:`~math.erf` function computes a probability integral or `Gaussian error function `_. The complementary error function, :func:`~math.erfc`, is ``1 - erf(x)``: +>>> from math import erf, erfc, sqrt >>> erf(1.0/sqrt(2.0)) # portion of normal distribution within 1 standard deviation 0.682689492137086 >>> erfc(1.0/sqrt(2.0)) # portion of normal distribution outside 1 standard deviation @@ -1061,6 +1076,7 @@ the function is related to factorials, it grows large even for small values of *x*, so there is also a :func:`~math.lgamma` function for computing the natural logarithm of the gamma function: +>>> from math import gamma, lgamma >>> gamma(7.0) # six factorial 720.0 >>> lgamma(801.0) # log(800 factorial) @@ -1177,7 +1193,7 @@ exception or silently drop the event depending on the value of The use of filters has been simplified. Instead of creating a :class:`~logging.Filter` object, the predicate can be any Python callable that -returns *True* or *False*. +returns ``True`` or ``False``. There were a number of other improvements that add flexibility and simplify configuration. See the module documentation for a full listing of changes in @@ -1279,7 +1295,7 @@ Some of the hashing details are exposed through a new attribute, prime modulus, the hash values for *infinity* and *nan*, and the multiplier used for the imaginary part of a number: ->>> sys.hash_info +>>> sys.hash_info # doctest: +SKIP sys.hash_info(width=64, modulus=2305843009213693951, inf=314159, nan=0, imag=1000003) An early decision to limit the inter-operability of various numeric types has @@ -1302,6 +1318,8 @@ Similar changes were made to :class:`fractions.Fraction` so that the :meth:`~fractions.Fraction.from_float()` and :meth:`~fractions.Fraction.from_decimal` methods are no longer needed (:issue:`8294`): +>>> from decimal import Decimal +>>> from fractions import Fraction >>> Decimal(1.1) Decimal('1.100000000000000088817841970012523233890533447265625') >>> Fraction(1.1) @@ -1384,6 +1402,7 @@ The :mod:`gzip` module also gains the :func:`~gzip.compress` and decompression. Keep in mind that text needs to be encoded as :class:`bytes` before compressing and decompressing: +>>> import gzip >>> s = 'Three shall be the number thou shalt count, ' >>> s += 'and the number of the counting shall be three' >>> b = s.encode() # convert to utf-8 @@ -1393,7 +1412,7 @@ before compressing and decompressing: >>> len(c) 77 >>> gzip.decompress(c).decode()[:42] # decompress and convert to text -'Three shall be the number thou shalt count,' +'Three shall be the number thou shalt count' (Contributed by Anand B. Pillai in :issue:`3488`; and by Antoine Pitrou, Nir Aides and Brian Curtin in :issue:`9962`, :issue:`1675951`, :issue:`7471` and @@ -1420,7 +1439,7 @@ which is now deprecated. If specified, the optional *filter* parameter needs to be a :term:`keyword argument`. The user-supplied filter function accepts a :class:`~tarfile.TarInfo` object and returns an updated :class:`~tarfile.TarInfo` object, or if it wants the file to be excluded, the -function can return *None*:: +function can return ``None``:: >>> import tarfile, glob @@ -1469,7 +1488,7 @@ evaluating expression strings using the Python literal syntax. The :func:`ast.literal_eval` function serves as a secure alternative to the builtin :func:`eval` function which is easily abused. Python 3.2 adds :class:`bytes` and :class:`set` literals to the list of supported types: -strings, bytes, numbers, tuples, lists, dicts, sets, booleans, and None. +strings, bytes, numbers, tuples, lists, dicts, sets, booleans, and ``None``. :: @@ -1495,6 +1514,7 @@ variables. The :mod:`os` module provides two new functions, :func:`~os.fsencode` and :func:`~os.fsdecode`, for encoding and decoding filenames: +>>> import os >>> filename = 'Sehenswürdigkeiten' >>> os.fsencode(filename) b'Sehensw\xc3\xbcrdigkeiten' @@ -1720,7 +1740,9 @@ names. test discovery can find tests within packages, locating any test importable from the top-level directory. The top-level directory can be specified with the `-t` option, a pattern for matching files with ``-p``, and a directory to - start discovery with ``-s``:: + start discovery with ``-s``: + + .. code-block:: shell-session $ python -m unittest discover -s my_proj_dir -p _test.py @@ -1730,6 +1752,7 @@ names. :class:`unittest.case.TestCase` class can now be instantiated without arguments: + >>> from unittest import TestCase >>> TestCase().assertEqual(pow(2, 3), 8) (Contributed by Michael Foord.) @@ -1895,7 +1918,9 @@ pydoc The :mod:`pydoc` module now provides a much-improved Web server interface, as well as a new command-line option ``-b`` to automatically open a browser window -to display that server:: +to display that server: + +.. code-block:: shell-session $ pydoc3.2 -b @@ -1998,7 +2023,9 @@ details of a given Python installation. '/Users/raymondhettinger/Library/Python/3.2/lib/python/site-packages' Conveniently, some of site's functionality is accessible directly from the -command-line:: +command-line: + +.. code-block:: shell-session $ python -m site --user-base /Users/raymondhettinger/.local @@ -2031,7 +2058,9 @@ seven named schemes used by :mod:`distutils`. Those include *posix_prefix*, * :func:`~sysconfig.get_config_vars` returns a dictionary of platform specific variables. -There is also a convenient command-line interface:: +There is also a convenient command-line interface: + +.. code-block:: doscon C:\Python32>python -m sysconfig Platform: "win32" @@ -2185,7 +2214,7 @@ The :func:`~urllib.parse.urlparse` function now supports `IPv6 `_ addresses as described in :rfc:`2732`: >>> import urllib.parse - >>> urllib.parse.urlparse('http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]/foo/') + >>> urllib.parse.urlparse('http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]/foo/') # doctest: +NORMALIZE_WHITESPACE ParseResult(scheme='http', netloc='[dead:beef:cafe:5417:affe:8FA3:deaf:feed]', path='/foo/', @@ -2219,7 +2248,7 @@ functions now accept ASCII-encoded byte strings as input, so long as they are not mixed with regular strings. If ASCII-encoded byte strings are given as parameters, the return types will also be an ASCII-encoded byte strings: - >>> urllib.parse.urlparse(b'http://www.python.org:80/about/') + >>> urllib.parse.urlparse(b'http://www.python.org:80/about/') # doctest: +NORMALIZE_WHITESPACE ParseResultBytes(scheme=b'http', netloc=b'www.python.org:80', path=b'/about/', params=b'', query=b'', fragment=b'') @@ -2265,7 +2294,9 @@ turtledemo The demonstration code for the :mod:`turtle` module was moved from the *Demo* directory to main library. It includes over a dozen sample scripts with lively displays. Being on :attr:`sys.path`, it can now be run directly -from the command-line:: +from the command-line: + +.. code-block:: shell-session $ python -m turtledemo @@ -2666,7 +2697,7 @@ require changes to your code: * The :class:`xml.etree.ElementTree` class now raises an :exc:`xml.etree.ElementTree.ParseError` when a parse fails. Previously it - raised a :exc:`xml.parsers.expat.ExpatError`. + raised an :exc:`xml.parsers.expat.ExpatError`. * The new, longer :func:`str` value on floats may break doctests which rely on the old output format. @@ -2701,4 +2732,3 @@ require changes to your code: * Due to the new :term:`GIL` implementation, :c:func:`PyEval_InitThreads()` cannot be called before :c:func:`Py_Initialize()` anymore. - diff --git a/Doc/whatsnew/3.3.rst b/Doc/whatsnew/3.3.rst index 2096b0b..0c9f2bb 100644 --- a/Doc/whatsnew/3.3.rst +++ b/Doc/whatsnew/3.3.rst @@ -182,7 +182,7 @@ API changes * The maximum number of dimensions is officially limited to 64. * The representation of empty shape, strides and suboffsets is now - an empty tuple instead of None. + an empty tuple instead of ``None``. * Accessing a memoryview element with format 'B' (unsigned bytes) now returns an integer (in accordance with the struct module syntax). @@ -871,7 +871,9 @@ signal. Call :func:`faulthandler.enable` to install fault handlers for the :envvar:`PYTHONFAULTHANDLER` environment variable or by using :option:`-X` ``faulthandler`` command line option. -Example of a segmentation fault on Linux: :: +Example of a segmentation fault on Linux: + +.. code-block:: shell-session $ python -q -X faulthandler >>> import ctypes @@ -999,7 +1001,6 @@ byte of an invalid byte sequence. For example, ``b'\xff\n'.decode('gb2312', Incremental CJK codec encoders are no longer reset at each call to their encode() methods. For example:: - $ ./python -q >>> import codecs >>> encoder = codecs.getincrementalencoder('hz')('strict') >>> b''.join(encoder.encode(x) for x in '\u52ff\u65bd\u65bc\u4eba\u3002 Bye.') @@ -1741,7 +1742,7 @@ sched ----- * :meth:`~sched.scheduler.run` now accepts a *blocking* parameter which when - set to False makes the method execute the scheduled events due to expire + set to false makes the method execute the scheduled events due to expire soonest (if any) and then return immediately. This is useful in case you want to use the :class:`~sched.scheduler` in non-blocking applications. (Contributed by Giampaolo Rodolà in :issue:`13449`.) @@ -1953,7 +1954,7 @@ ssl :attr:`~ssl.OP_NO_COMPRESSION` can be used to disable compression. (Contributed by Antoine Pitrou in :issue:`13634`.) -* Support has been added for the Next Procotol Negotiation extension using +* Support has been added for the Next Protocol Negotiation extension using the :meth:`ssl.SSLContext.set_npn_protocols` method. (Contributed by Colin Marc in :issue:`14204`.) diff --git a/Doc/whatsnew/3.5.rst b/Doc/whatsnew/3.5.rst index 8fc2f6c..ab61d7a 100644 --- a/Doc/whatsnew/3.5.rst +++ b/Doc/whatsnew/3.5.rst @@ -46,8 +46,7 @@ This article explains the new features in Python 3.5, compared to 3.4. Python 3.5 was released on September 13, 2015.  See the -`changelog `_ for a full -list of changes. +:ref:`changelog ` for a full list of changes. .. seealso:: @@ -742,7 +741,9 @@ publicized, either at the time or since. With the new module, bundling your application is as simple as putting all the files, including a ``__main__.py`` file, into a directory ``myapp`` -and running:: +and running: + +.. code-block:: shell-session $ python -m zipapp myapp $ python myapp.pyz @@ -802,11 +803,12 @@ Notable changes in the :mod:`asyncio` module since Python 3.4.0: :func:`~asyncio.ensure_future`. (Contributed by Yury Selivanov.) -* New :meth:`loop.set_task_factory() ` - and :meth:`loop.set_task_factory() ` - methods to customize the task factory that - :meth:`loop.create_task() ` method uses. - (Contributed by Yury Selivanov.) +* New :meth:`loop.set_task_factory() + ` and + :meth:`loop.get_task_factory() ` + methods to customize the task factory that :meth:`loop.create_task() + ` method uses. (Contributed by Yury + Selivanov.) * New :meth:`Queue.join() ` and :meth:`Queue.task_done() ` queue methods. @@ -1889,7 +1891,7 @@ to request exclusive creation. (Contributed by Berker Peksag in :issue:`21717`. The :meth:`TarFile.extractall() ` and :meth:`TarFile.extract() ` methods now take a keyword -argument *numeric_only*. If set to ``True``, the extracted files and +argument *numeric_owner*. If set to ``True``, the extracted files and directories will be owned by the numeric ``uid`` and ``gid`` from the tarfile. If set to ``False`` (the default, and the behavior in versions prior to 3.5), they will be owned by the named user and group in the tarfile. @@ -2127,8 +2129,8 @@ Many operations on :class:`io.BytesIO` are now 50% to 100% faster. (Contributed by Serhiy Storchaka in :issue:`15381` and David Wilson in :issue:`22003`.) -The :func:`marshal.dumps` function is now faster: 65-85% with versions 3 -and 4, 20-25% with versions 0 to 2 on typical data, and up to 5 times in +The :func:`marshal.dumps` function is now faster: 65--85% with versions 3 +and 4, 20--25% with versions 0 to 2 on typical data, and up to 5 times in best cases. (Contributed by Serhiy Storchaka in :issue:`20416` and :issue:`23344`.) diff --git a/Doc/whatsnew/changelog.rst b/Doc/whatsnew/changelog.rst index 07f9094..67a12f3 100644 --- a/Doc/whatsnew/changelog.rst +++ b/Doc/whatsnew/changelog.rst @@ -1,3 +1,5 @@ +.. _changelog: + +++++++++ Changelog +++++++++ diff --git a/Grammar/Grammar b/Grammar/Grammar index 99fcea0..4307523 100644 --- a/Grammar/Grammar +++ b/Grammar/Grammar @@ -132,7 +132,7 @@ arglist: argument (',' argument)* [','] # to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, # we explicitly match '*' here, too, to give it proper precedence. # Illegal combinations and orderings are blocked in ast.c: -# multiple (test comp_for) arguements are blocked; keyword unpackings +# multiple (test comp_for) arguments are blocked; keyword unpackings # that precede iterable unpackings are blocked; etc. argument: ( test [comp_for] | test '=' test | diff --git a/Include/abstract.h b/Include/abstract.h index 4ff79f2..7dbbb74 100644 --- a/Include/abstract.h +++ b/Include/abstract.h @@ -266,18 +266,18 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw); -#ifndef Py_LIMITED_API - PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *func, - PyObject *result, - const char *where); -#endif - /* Call a callable Python object, callable_object, with arguments and keywords arguments. The 'args' argument can not be NULL, but the 'kw' argument can be NULL. */ +#ifndef Py_LIMITED_API + PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *func, + PyObject *result, + const char *where); +#endif + PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable_object, PyObject *args); @@ -458,7 +458,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ /* old buffer API FIXME: usage of these should all be replaced in Python itself but for backwards compatibility we will implement them. - Their usage without a corresponding "unlock" mechansim + Their usage without a corresponding "unlock" mechanism may create issues (but they would already be there). */ PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj, @@ -1216,23 +1216,23 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o); /* - On success, return a list, a tuple or a dictionary view in case of a dict, - of the keys in object o. On failure, return NULL. + On success, return a list or tuple of the keys in object o. + On failure, return NULL. */ PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o); /* - On success, return a list, a tuple or a dictionary view in case of a dict, - of the values in object o. On failure, return NULL. + On success, return a list or tuple of the values in object o. + On failure, return NULL. */ PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o); /* - On success, return a list, a tuple or a dictionary view in case of a dict, - of the items in object o, where each item is a tuple containing a key-value - pair. On failure, return NULL. + On success, return a list or tuple of the items in object o, + where each item is a tuple containing a key-value pair. + On failure, return NULL. */ diff --git a/Include/dictobject.h b/Include/dictobject.h index ba90aaf..e0e1c26 100644 --- a/Include/dictobject.h +++ b/Include/dictobject.h @@ -75,6 +75,8 @@ PyAPI_FUNC(int) PyDict_DelItem(PyObject *mp, PyObject *key); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyDict_DelItem_KnownHash(PyObject *mp, PyObject *key, Py_hash_t hash); +PyAPI_FUNC(int) _PyDict_DelItemIf(PyObject *mp, PyObject *key, + int (*predicate)(PyObject *value)); #endif PyAPI_FUNC(void) PyDict_Clear(PyObject *mp); PyAPI_FUNC(int) PyDict_Next( diff --git a/Include/genobject.h b/Include/genobject.h index 1ff32a8..61e708a 100644 --- a/Include/genobject.h +++ b/Include/genobject.h @@ -41,6 +41,7 @@ PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *); PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(struct _frame *, PyObject *name, PyObject *qualname); PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *); +PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *); PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **); PyObject *_PyGen_Send(PyGenObject *, PyObject *); PyObject *_PyGen_yf(PyGenObject *); diff --git a/Include/longobject.h b/Include/longobject.h index aed59ce..2a2eecf 100644 --- a/Include/longobject.h +++ b/Include/longobject.h @@ -159,7 +159,7 @@ PyAPI_FUNC(PyObject *) _PyLong_FromByteArray( example, if is_signed is 0 and there are more digits in the v than fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of being large enough to hold a sign bit. OverflowError is set in this - case, but bytes holds the least-signficant n bytes of the true value. + case, but bytes holds the least-significant n bytes of the true value. */ PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v, unsigned char* bytes, size_t n, diff --git a/Include/moduleobject.h b/Include/moduleobject.h index 229d7fa..b44fb9b 100644 --- a/Include/moduleobject.h +++ b/Include/moduleobject.h @@ -77,7 +77,7 @@ typedef struct PyModuleDef{ traverseproc m_traverse; inquiry m_clear; freefunc m_free; -}PyModuleDef; +} PyModuleDef; #ifdef __cplusplus } diff --git a/Include/patchlevel.h b/Include/patchlevel.h index 60851c1..77e7249 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -18,12 +18,12 @@ /*--start constants--*/ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 5 -#define PY_MICRO_VERSION 2 +#define PY_MICRO_VERSION 3 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.5.2" +#define PY_VERSION "3.5.3" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/Include/pyfpe.h b/Include/pyfpe.h index e957119..f9a15e6 100644 --- a/Include/pyfpe.h +++ b/Include/pyfpe.h @@ -45,10 +45,10 @@ extern "C" { * Define macros for handling SIGFPE. * Lee Busby, LLNL, November, 1996 * busby1@llnl.gov - * + * ********************************************* * Overview of the system for handling SIGFPE: - * + * * This file (Include/pyfpe.h) defines a couple of "wrapper" macros for * insertion into your Python C code of choice. Their proper use is * discussed below. The file Python/pyfpe.c defines a pair of global @@ -59,33 +59,33 @@ extern "C" { * named fpectl. This module is standard in every respect. It can be loaded * either statically or dynamically as you choose, and like any other * Python module, has no effect until you import it. - * + * * In the general case, there are three steps toward handling SIGFPE in any * Python code: - * + * * 1) Add the *_PROTECT macros to your C code as required to protect * dangerous floating point sections. - * + * * 2) Turn on the inclusion of the code by adding the ``--with-fpectl'' * flag at the time you run configure. If the fpectl or other modules * which use the *_PROTECT macros are to be dynamically loaded, be * sure they are compiled with WANT_SIGFPE_HANDLER defined. - * + * * 3) When python is built and running, import fpectl, and execute * fpectl.turnon_sigfpe(). This sets up the signal handler and enables * generation of SIGFPE whenever an exception occurs. From this point * on, any properly trapped SIGFPE should result in the Python * FloatingPointError exception. - * + * * Step 1 has been done already for the Python kernel code, and should be * done soon for the NumPy array package. Step 2 is usually done once at * python install time. Python's behavior with respect to SIGFPE is not * changed unless you also do step 3. Thus you can control this new * facility at compile time, or run time, or both. - * - ******************************** + * + ******************************** * Using the macros in your code: - * + * * static PyObject *foobar(PyObject *self,PyObject *args) * { * .... @@ -94,17 +94,17 @@ extern "C" { * PyFPE_END_PROTECT(result) * .... * } - * + * * If a floating point error occurs in dangerous_op, foobar returns 0 (NULL), * after setting the associated value of the FloatingPointError exception to * "Error in foobar". ``Dangerous_op'' can be a single operation, or a block * of code, function calls, or any combination, so long as no alternate * return is possible before the PyFPE_END_PROTECT macro is reached. - * + * * The macros can only be used in a function context where an error return * can be recognized as signaling a Python exception. (Generally, most * functions that return a PyObject * will qualify.) - * + * * Guido's original design suggestion for PyFPE_START_PROTECT and * PyFPE_END_PROTECT had them open and close a local block, with a locally * defined jmp_buf and jmp_buf pointer. This would allow recursive nesting @@ -112,17 +112,17 @@ extern "C" { * variables need to be declared with the "volatile" type qualifier to keep * setjmp from corrupting their values. Some current implementations seem * to be more restrictive. For example, the HPUX man page for setjmp says - * + * * Upon the return from a setjmp() call caused by a longjmp(), the * values of any non-static local variables belonging to the routine * from which setjmp() was called are undefined. Code which depends on * such values is not guaranteed to be portable. - * + * * I therefore decided on a more limited form of nesting, using a counter * variable (PyFPE_counter) to keep track of any recursion. If an exception * occurs in an ``inner'' pair of macros, the return will apparently * come from the outermost level. - * + * */ #ifdef WANT_SIGFPE_HANDLER @@ -146,14 +146,14 @@ if (!PyFPE_counter++ && setjmp(PyFPE_jbuf)) { \ * this statement so that it gets executed *before* the unsafe expression * which we're trying to protect. That pretty well messes things up, * of course. - * + * * If the expression(s) you're trying to protect don't happen to return a * value, you will need to manufacture a dummy result just to preserve the * correct ordering of statements. Note that the macro passes the address * of its argument (so you need to give it something which is addressable). * If your expression returns multiple results, pass the last such result * to PyFPE_END_PROTECT. - * + * * Note that PyFPE_dummy returns a double, which is cast to int. * This seeming insanity is to tickle the Floating Point Unit (FPU). * If an exception has occurred in a preceding floating point operation, diff --git a/Include/pymacconfig.h b/Include/pymacconfig.h index 0c28f5c..9dde11b 100644 --- a/Include/pymacconfig.h +++ b/Include/pymacconfig.h @@ -63,7 +63,7 @@ # if defined(__LP64__) /* MacOSX 10.4 (the first release to support 64-bit code * at all) only supports 64-bit in the UNIX layer. - * Therefore surpress the toolbox-glue in 64-bit mode. + * Therefore suppress the toolbox-glue in 64-bit mode. */ /* In 64-bit mode setpgrp always has no arguments, in 32-bit @@ -91,7 +91,7 @@ * * Specifically: OSX 10.4 has limited supported for '%zd', while * 10.5 has full support for '%zd'. A binary built on 10.5 won't - * work properly on 10.4 unless we surpress the definition + * work properly on 10.4 unless we suppress the definition * of PY_FORMAT_SIZE_T */ #undef PY_FORMAT_SIZE_T diff --git a/Include/pymath.h b/Include/pymath.h index 1ea9ac1..1c8d718 100644 --- a/Include/pymath.h +++ b/Include/pymath.h @@ -37,7 +37,7 @@ extern double pow(double, double); #endif /* __STDC__ */ #endif /* _MSC_VER */ -/* High precision defintion of pi and e (Euler) +/* High precision definition of pi and e (Euler) * The values are taken from libc6's math.h. */ #ifndef Py_MATH_PIl diff --git a/Include/pyport.h b/Include/pyport.h index 66e00d4..e7e5178 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -677,7 +677,9 @@ extern pid_t forkpty(int *, char *, struct termios *, struct winsize *); #ifdef __FreeBSD__ #include -#if __FreeBSD_version > 500039 +#if (__FreeBSD_version >= 500040 && __FreeBSD_version < 602113) || \ + (__FreeBSD_version >= 700000 && __FreeBSD_version < 700054) || \ + (__FreeBSD_version >= 800000 && __FreeBSD_version < 800001) # define _PY_PORT_CTYPE_UTF8_ISSUE #endif #endif @@ -688,6 +690,12 @@ extern pid_t forkpty(int *, char *, struct termios *, struct winsize *); #endif #ifdef _PY_PORT_CTYPE_UTF8_ISSUE +#ifndef __cplusplus + /* The workaround below is unsafe in C++ because + * the defines these symbols as real functions, + * with a slightly different signature. + * See issue #10910 + */ #include #include #undef isalnum @@ -705,6 +713,7 @@ extern pid_t forkpty(int *, char *, struct termios *, struct winsize *); #undef toupper #define toupper(c) towupper(btowc(c)) #endif +#endif /* Declarations for symbol visibility. @@ -877,7 +886,7 @@ extern pid_t forkpty(int *, char *, struct termios *, struct winsize *); #define PY_LITTLE_ENDIAN 1 #endif -#ifdef Py_BUILD_CORE +#ifdef Py_BUILD_CORE /* * Macros to protect CRT calls against instant termination when passed an * invalid parameter (issue23524). diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h index 533dd75..9308a6a 100644 --- a/Include/unicodeobject.h +++ b/Include/unicodeobject.h @@ -176,7 +176,7 @@ typedef unsigned char Py_UCS1; #define Py_UNICODE_FILL(target, value, length) \ do {Py_ssize_t i_; Py_UNICODE *t_ = (target); Py_UNICODE v_ = (value);\ - for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\ + for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\ } while (0) /* macros to work with surrogates */ @@ -749,7 +749,7 @@ PyAPI_FUNC(Py_UCS4) _PyUnicode_FindMaxChar ( #endif /* Copy the string into a UCS4 buffer including the null character if copy_null - is set. Return NULL and raise an exception on error. Raise a ValueError if + is set. Return NULL and raise an exception on error. Raise a SystemError if the buffer is smaller than the string. Return buffer on success. buflen is the length of the buffer in (Py_UCS4) characters. */ @@ -2000,27 +2000,53 @@ PyAPI_FUNC(int) PyUnicode_Compare( ); #ifndef Py_LIMITED_API +/* Compare a string with an identifier and return -1, 0, 1 for less than, + equal, and greater than, respectively. + Raise an exception and return -1 on error. */ + PyAPI_FUNC(int) _PyUnicode_CompareWithId( PyObject *left, /* Left string */ _Py_Identifier *right /* Right identifier */ ); + +/* Test whether a unicode is equal to ASCII identifier. Return 1 if true, + 0 otherwise. Return 0 if any argument contains non-ASCII characters. + Any error occurs inside will be cleared before return. */ + +PyAPI_FUNC(int) _PyUnicode_EqualToASCIIId( + PyObject *left, /* Left string */ + _Py_Identifier *right /* Right identifier */ + ); #endif +/* Compare a Unicode object with C string and return -1, 0, 1 for less than, + equal, and greater than, respectively. It is best to pass only + ASCII-encoded strings, but the function interprets the input string as + ISO-8859-1 if it contains non-ASCII characters. + This function does not raise exceptions. */ + PyAPI_FUNC(int) PyUnicode_CompareWithASCIIString( PyObject *left, const char *right /* ASCII-encoded string */ ); +#ifndef Py_LIMITED_API +/* Test whether a unicode is equal to ASCII string. Return 1 if true, + 0 otherwise. Return 0 if any argument contains non-ASCII characters. + Any error occurs inside will be cleared before return. */ + +PyAPI_FUNC(int) _PyUnicode_EqualToASCIIString( + PyObject *left, + const char *right /* ASCII-encoded string */ + ); +#endif + /* Rich compare two strings and return one of the following: - NULL in case an exception was raised - - Py_True or Py_False for successfully comparisons + - Py_True or Py_False for successful comparisons - Py_NotImplemented in case the type combination is unknown - Note that Py_EQ and Py_NE comparisons can cause a UnicodeWarning in - case the conversion of the arguments to Unicode fails with a - UnicodeDecodeError. - Possible values for op: Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE diff --git a/LICENSE b/LICENSE index 84a3337..f5d0b39 100644 --- a/LICENSE +++ b/LICENSE @@ -74,7 +74,7 @@ analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights +2011, 2012, 2013, 2014, 2015, 2016, 2017 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee. diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py index fc9c9f1..8bebd69 100644 --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -29,8 +29,8 @@ __name__ = "collections.abc" # so that they will pass tests like: # it = iter(somebytearray) # assert isinstance(it, Iterable) -# Note: in other implementations, these types many not be distinct -# and they make have their own implementation specific types that +# Note: in other implementations, these types might not be distinct +# and they may have their own implementation specific types that # are not included on this list. bytes_iterator = type(iter(b'')) bytearray_iterator = type(iter(bytearray())) @@ -41,6 +41,7 @@ dict_itemiterator = type(iter({}.items())) list_iterator = type(iter([])) list_reverseiterator = type(iter(reversed([]))) range_iterator = type(iter(range(0))) +longrange_iterator = type(iter(range(1 << 1000))) set_iterator = type(iter(set())) str_iterator = type(iter("")) tuple_iterator = type(iter(())) @@ -234,6 +235,7 @@ Iterator.register(dict_itemiterator) Iterator.register(list_iterator) Iterator.register(list_reverseiterator) Iterator.register(range_iterator) +Iterator.register(longrange_iterator) Iterator.register(set_iterator) Iterator.register(str_iterator) Iterator.register(tuple_iterator) diff --git a/Lib/_pydecimal.py b/Lib/_pydecimal.py index c719424..a5ea340 100644 --- a/Lib/_pydecimal.py +++ b/Lib/_pydecimal.py @@ -1068,12 +1068,11 @@ class Decimal(object): return sign + intpart + fracpart + exp def to_eng_string(self, context=None): - """Convert to engineering-type string. + """Convert to a string, using engineering notation if an exponent is needed. - Engineering notation has an exponent which is a multiple of 3, so there - are up to 3 digits left of the decimal place. - - Same rules for when in exponential and when as a value as in __str__. + Engineering notation has an exponent which is a multiple of 3. This + can leave up to 3 digits to the left of the decimal place and may + require the addition of either one or two trailing zeros. """ return self.__str__(eng=True, context=context) @@ -4107,7 +4106,7 @@ class Context(object): >>> context.create_decimal_from_float(3.1415926535897932) Traceback (most recent call last): ... - decimal.Inexact + decimal.Inexact: None """ d = Decimal.from_float(f) # An exact conversion @@ -5502,9 +5501,29 @@ class Context(object): return r def to_eng_string(self, a): - """Converts a number to a string, using scientific notation. + """Convert to a string, using engineering notation if an exponent is needed. + + Engineering notation has an exponent which is a multiple of 3. This + can leave up to 3 digits to the left of the decimal place and may + require the addition of either one or two trailing zeros. The operation is not affected by the context. + + >>> ExtendedContext.to_eng_string(Decimal('123E+1')) + '1.23E+3' + >>> ExtendedContext.to_eng_string(Decimal('123E+3')) + '123E+3' + >>> ExtendedContext.to_eng_string(Decimal('123E-10')) + '12.3E-9' + >>> ExtendedContext.to_eng_string(Decimal('-123E-12')) + '-123E-12' + >>> ExtendedContext.to_eng_string(Decimal('7E-7')) + '700E-9' + >>> ExtendedContext.to_eng_string(Decimal('7E+1')) + '70' + >>> ExtendedContext.to_eng_string(Decimal('0E+1')) + '0.00E+3' + """ a = _convert_other(a, raiseit=True) return a.to_eng_string(context=self) diff --git a/Lib/_pyio.py b/Lib/_pyio.py index 0d98b74..f2fe447 100644 --- a/Lib/_pyio.py +++ b/Lib/_pyio.py @@ -276,7 +276,7 @@ class OpenWrapper: try: UnsupportedOperation = io.UnsupportedOperation except AttributeError: - class UnsupportedOperation(ValueError, OSError): + class UnsupportedOperation(OSError, ValueError): pass diff --git a/Lib/antigravity.py b/Lib/antigravity.py index 7670187..9b14368 100644 --- a/Lib/antigravity.py +++ b/Lib/antigravity.py @@ -2,7 +2,7 @@ import webbrowser import hashlib -webbrowser.open("http://xkcd.com/353/") +webbrowser.open("https://xkcd.com/353/") def geohash(latitude, longitude, datedow): '''Compute geohash() using the Munroe algorithm. diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index 172a463..50153f8 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -13,7 +13,6 @@ conscious design decision, leaving the door open for keyword arguments to modify the meaning of the API call itself. """ - import collections import concurrent.futures import heapq @@ -28,6 +27,7 @@ import time import traceback import sys import warnings +import weakref from . import compat from . import coroutines @@ -41,9 +41,6 @@ from .log import logger __all__ = ['BaseEventLoop'] -# Argument for default thread pool executor creation. -_MAX_WORKERS = 5 - # Minimum number of _scheduled timer handles before cleanup of # cancelled handles is performed. _MIN_SCHEDULED_TIMER_HANDLES = 100 @@ -76,12 +73,29 @@ def _format_pipe(fd): return repr(fd) -# Linux's sock.type is a bitmask that can include extra info about socket. -_SOCKET_TYPE_MASK = 0 -if hasattr(socket, 'SOCK_NONBLOCK'): - _SOCKET_TYPE_MASK |= socket.SOCK_NONBLOCK -if hasattr(socket, 'SOCK_CLOEXEC'): - _SOCKET_TYPE_MASK |= socket.SOCK_CLOEXEC +def _set_reuseport(sock): + if not hasattr(socket, 'SO_REUSEPORT'): + raise ValueError('reuse_port not supported by socket module') + else: + try: + sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) + except OSError: + raise ValueError('reuse_port not supported by socket module, ' + 'SO_REUSEPORT defined but not implemented.') + + +def _is_stream_socket(sock): + # Linux's socket.type is a bitmask that can include extra info + # about socket, therefore we can't do simple + # `sock_type == socket.SOCK_STREAM`. + return (sock.type & socket.SOCK_STREAM) == socket.SOCK_STREAM + + +def _is_dgram_socket(sock): + # Linux's socket.type is a bitmask that can include extra info + # about socket, therefore we can't do simple + # `sock_type == socket.SOCK_DGRAM`. + return (sock.type & socket.SOCK_DGRAM) == socket.SOCK_DGRAM def _ipaddr_info(host, port, family, type, proto): @@ -94,8 +108,12 @@ def _ipaddr_info(host, port, family, type, proto): host is None: return None - type &= ~_SOCKET_TYPE_MASK if type == socket.SOCK_STREAM: + # Linux only: + # getaddrinfo() can raise when socket.type is a bit mask. + # So if socket.type is a bit mask of SOCK_STREAM, and say + # SOCK_NONBLOCK, we simply return None, which will trigger + # a call to getaddrinfo() letting it process this request. proto = socket.IPPROTO_TCP elif type == socket.SOCK_DGRAM: proto = socket.IPPROTO_UDP @@ -104,27 +122,21 @@ def _ipaddr_info(host, port, family, type, proto): if port is None: port = 0 - elif isinstance(port, bytes): - if port == b'': - port = 0 - else: - try: - port = int(port) - except ValueError: - # Might be a service name like b"http". - port = socket.getservbyname(port.decode('ascii')) - elif isinstance(port, str): - if port == '': - port = 0 - else: - try: - port = int(port) - except ValueError: - # Might be a service name like "http". - port = socket.getservbyname(port) + elif isinstance(port, bytes) and port == b'': + port = 0 + elif isinstance(port, str) and port == '': + port = 0 + else: + # If port's a service name like "http", don't skip getaddrinfo. + try: + port = int(port) + except (TypeError, ValueError): + return None if family == socket.AF_UNSPEC: - afs = [socket.AF_INET, socket.AF_INET6] + afs = [socket.AF_INET] + if hasattr(socket, 'AF_INET6'): + afs.append(socket.AF_INET6) else: afs = [family] @@ -242,6 +254,17 @@ class BaseEventLoop(events.AbstractEventLoop): self._task_factory = None self._coroutine_wrapper_set = False + if hasattr(sys, 'get_asyncgen_hooks'): + # Python >= 3.6 + # A weak set of all asynchronous generators that are + # being iterated by the loop. + self._asyncgens = weakref.WeakSet() + else: + self._asyncgens = None + + # Set to True when `loop.shutdown_asyncgens` is called. + self._asyncgens_shutdown_called = False + def __repr__(self): return ('<%s running=%s closed=%s debug=%s>' % (self.__class__.__name__, self.is_running(), @@ -333,14 +356,67 @@ class BaseEventLoop(events.AbstractEventLoop): if self._closed: raise RuntimeError('Event loop is closed') + def _asyncgen_finalizer_hook(self, agen): + self._asyncgens.discard(agen) + if not self.is_closed(): + self.create_task(agen.aclose()) + # Wake up the loop if the finalizer was called from + # a different thread. + self._write_to_self() + + def _asyncgen_firstiter_hook(self, agen): + if self._asyncgens_shutdown_called: + warnings.warn( + "asynchronous generator {!r} was scheduled after " + "loop.shutdown_asyncgens() call".format(agen), + ResourceWarning, source=self) + + self._asyncgens.add(agen) + + @coroutine + def shutdown_asyncgens(self): + """Shutdown all active asynchronous generators.""" + self._asyncgens_shutdown_called = True + + if self._asyncgens is None or not len(self._asyncgens): + # If Python version is <3.6 or we don't have any asynchronous + # generators alive. + return + + closing_agens = list(self._asyncgens) + self._asyncgens.clear() + + shutdown_coro = tasks.gather( + *[ag.aclose() for ag in closing_agens], + return_exceptions=True, + loop=self) + + results = yield from shutdown_coro + for result, agen in zip(results, closing_agens): + if isinstance(result, Exception): + self.call_exception_handler({ + 'message': 'an error occurred during closing of ' + 'asynchronous generator {!r}'.format(agen), + 'exception': result, + 'asyncgen': agen + }) + def run_forever(self): """Run until stop() is called.""" self._check_closed() if self.is_running(): - raise RuntimeError('Event loop is running.') + raise RuntimeError('This event loop is already running') + if events._get_running_loop() is not None: + raise RuntimeError( + 'Cannot run the event loop while another loop is running') self._set_coroutine_wrapper(self._debug) self._thread_id = threading.get_ident() + if self._asyncgens is not None: + old_agen_hooks = sys.get_asyncgen_hooks() + sys.set_asyncgen_hooks(firstiter=self._asyncgen_firstiter_hook, + finalizer=self._asyncgen_finalizer_hook) try: + events._set_running_loop(self) while True: self._run_once() if self._stopping: @@ -348,7 +424,10 @@ class BaseEventLoop(events.AbstractEventLoop): finally: self._stopping = False self._thread_id = None + events._set_running_loop(None) self._set_coroutine_wrapper(False) + if self._asyncgens is not None: + sys.set_asyncgen_hooks(*old_agen_hooks) def run_until_complete(self, future): """Run until the Future is done. @@ -363,7 +442,7 @@ class BaseEventLoop(events.AbstractEventLoop): """ self._check_closed() - new_task = not isinstance(future, futures.Future) + new_task = not futures.isfuture(future) future = tasks.ensure_future(future, loop=self) if new_task: # An exception is raised if the future didn't complete, so there @@ -469,12 +548,10 @@ class BaseEventLoop(events.AbstractEventLoop): Absolute time corresponds to the event loop's time() method. """ - if (coroutines.iscoroutine(callback) - or coroutines.iscoroutinefunction(callback)): - raise TypeError("coroutines cannot be used with call_at()") self._check_closed() if self._debug: self._check_thread() + self._check_callback(callback, 'call_at') timer = events.TimerHandle(when, callback, args, self) if timer._source_traceback: del timer._source_traceback[-1] @@ -492,18 +569,27 @@ class BaseEventLoop(events.AbstractEventLoop): Any positional arguments after the callback will be passed to the callback when it is called. """ + self._check_closed() if self._debug: self._check_thread() + self._check_callback(callback, 'call_soon') handle = self._call_soon(callback, args) if handle._source_traceback: del handle._source_traceback[-1] return handle + def _check_callback(self, callback, method): + if (coroutines.iscoroutine(callback) or + coroutines.iscoroutinefunction(callback)): + raise TypeError( + "coroutines cannot be used with {}()".format(method)) + if not callable(callback): + raise TypeError( + 'a callable object was expected by {}(), got {!r}'.format( + method, callback)) + + def _call_soon(self, callback, args): - if (coroutines.iscoroutine(callback) - or coroutines.iscoroutinefunction(callback)): - raise TypeError("coroutines cannot be used with call_soon()") - self._check_closed() handle = events.Handle(callback, args, self) if handle._source_traceback: del handle._source_traceback[-1] @@ -529,6 +615,9 @@ class BaseEventLoop(events.AbstractEventLoop): def call_soon_threadsafe(self, callback, *args): """Like call_soon(), but thread-safe.""" + self._check_closed() + if self._debug: + self._check_callback(callback, 'call_soon_threadsafe') handle = self._call_soon(callback, args) if handle._source_traceback: del handle._source_traceback[-1] @@ -536,22 +625,13 @@ class BaseEventLoop(events.AbstractEventLoop): return handle def run_in_executor(self, executor, func, *args): - if (coroutines.iscoroutine(func) - or coroutines.iscoroutinefunction(func)): - raise TypeError("coroutines cannot be used with run_in_executor()") self._check_closed() - if isinstance(func, events.Handle): - assert not args - assert not isinstance(func, events.TimerHandle) - if func._cancelled: - f = self.create_future() - f.set_result(None) - return f - func, args = func._callback, func._args + if self._debug: + self._check_callback(func, 'run_in_executor') if executor is None: executor = self._default_executor if executor is None: - executor = concurrent.futures.ThreadPoolExecutor(_MAX_WORKERS) + executor = concurrent.futures.ThreadPoolExecutor() self._default_executor = executor return futures.wrap_future(executor.submit(func, *args), loop=self) @@ -703,11 +783,19 @@ class BaseEventLoop(events.AbstractEventLoop): raise OSError('Multiple exceptions: {}'.format( ', '.join(str(exc) for exc in exceptions))) - elif sock is None: - raise ValueError( - 'host and port was not specified and no sock specified') - - sock.setblocking(False) + else: + if sock is None: + raise ValueError( + 'host and port was not specified and no sock specified') + if not _is_stream_socket(sock): + # We allow AF_INET, AF_INET6, AF_UNIX as long as they + # are SOCK_STREAM. + # We support passing AF_UNIX sockets even though we have + # a dedicated API for that: create_unix_connection. + # Disallowing AF_UNIX in this method, breaks backwards + # compatibility. + raise ValueError( + 'A Stream Socket was expected, got {!r}'.format(sock)) transport, protocol = yield from self._create_connection_transport( sock, protocol_factory, ssl, server_hostname) @@ -721,14 +809,17 @@ class BaseEventLoop(events.AbstractEventLoop): @coroutine def _create_connection_transport(self, sock, protocol_factory, ssl, - server_hostname): + server_hostname, server_side=False): + + sock.setblocking(False) + protocol = protocol_factory() waiter = self.create_future() if ssl: sslcontext = None if isinstance(ssl, bool) else ssl transport = self._make_ssl_transport( sock, protocol, sslcontext, waiter, - server_side=False, server_hostname=server_hostname) + server_side=server_side, server_hostname=server_hostname) else: transport = self._make_socket_transport(sock, protocol, waiter) @@ -748,6 +839,9 @@ class BaseEventLoop(events.AbstractEventLoop): allow_broadcast=None, sock=None): """Create datagram connection.""" if sock is not None: + if not _is_dgram_socket(sock): + raise ValueError( + 'A UDP Socket was expected, got {!r}'.format(sock)) if (local_addr or remote_addr or family or proto or flags or reuse_address or reuse_port or allow_broadcast): @@ -813,12 +907,7 @@ class BaseEventLoop(events.AbstractEventLoop): sock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) if reuse_port: - if not hasattr(socket, 'SO_REUSEPORT'): - raise ValueError( - 'reuse_port not supported by socket module') - else: - sock.setsockopt( - socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) + _set_reuseport(sock) if allow_broadcast: sock.setsockopt( socket.SOL_SOCKET, socket.SO_BROADCAST, 1) @@ -941,12 +1030,7 @@ class BaseEventLoop(events.AbstractEventLoop): sock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, True) if reuse_port: - if not hasattr(socket, 'SO_REUSEPORT'): - raise ValueError( - 'reuse_port not supported by socket module') - else: - sock.setsockopt( - socket.SOL_SOCKET, socket.SO_REUSEPORT, True) + _set_reuseport(sock) # Disable IPv4/IPv6 dual stack support (enabled by # default on Linux) which makes a single socket # listen on both address families. @@ -968,18 +1052,44 @@ class BaseEventLoop(events.AbstractEventLoop): else: if sock is None: raise ValueError('Neither host/port nor sock were specified') + if not _is_stream_socket(sock): + raise ValueError( + 'A Stream Socket was expected, got {!r}'.format(sock)) sockets = [sock] server = Server(self, sockets) for sock in sockets: sock.listen(backlog) sock.setblocking(False) - self._start_serving(protocol_factory, sock, ssl, server) + self._start_serving(protocol_factory, sock, ssl, server, backlog) if self._debug: logger.info("%r is serving", server) return server @coroutine + def connect_accepted_socket(self, protocol_factory, sock, *, ssl=None): + """Handle an accepted connection. + + This is used by servers that accept connections outside of + asyncio but that use asyncio to handle connections. + + This method is a coroutine. When completed, the coroutine + returns a (transport, protocol) pair. + """ + if not _is_stream_socket(sock): + raise ValueError( + 'A Stream Socket was expected, got {!r}'.format(sock)) + + transport, protocol = yield from self._create_connection_transport( + sock, protocol_factory, ssl, '', server_side=True) + if self._debug: + # Get the socket from the transport because SSL transport closes + # the old socket and creates a new SSL socket + sock = transport.get_extra_info('socket') + logger.debug("%r handled: (%r, %r)", sock, transport, protocol) + return transport, protocol + + @coroutine def connect_read_pipe(self, protocol_factory, pipe): protocol = protocol_factory() waiter = self.create_future() @@ -1048,7 +1158,7 @@ class BaseEventLoop(events.AbstractEventLoop): transport = yield from self._make_subprocess_transport( protocol, cmd, True, stdin, stdout, stderr, bufsize, **kwargs) if self._debug: - logger.info('%s: %r' % (debug_log, transport)) + logger.info('%s: %r', debug_log, transport) return transport, protocol @coroutine @@ -1078,7 +1188,7 @@ class BaseEventLoop(events.AbstractEventLoop): protocol, popen_args, False, stdin, stdout, stderr, bufsize, **kwargs) if self._debug: - logger.info('%s: %r' % (debug_log, transport)) + logger.info('%s: %r', debug_log, transport) return transport, protocol def get_exception_handler(self): @@ -1158,7 +1268,9 @@ class BaseEventLoop(events.AbstractEventLoop): - 'handle' (optional): Handle instance; - 'protocol' (optional): Protocol instance; - 'transport' (optional): Transport instance; - - 'socket' (optional): Socket instance. + - 'socket' (optional): Socket instance; + - 'asyncgen' (optional): Asynchronous generator that caused + the exception. New keys maybe introduced in the future. diff --git a/Lib/asyncio/base_subprocess.py b/Lib/asyncio/base_subprocess.py index 8fc253c..23742a1 100644 --- a/Lib/asyncio/base_subprocess.py +++ b/Lib/asyncio/base_subprocess.py @@ -3,7 +3,6 @@ import subprocess import warnings from . import compat -from . import futures from . import protocols from . import transports from .coroutines import coroutine @@ -87,6 +86,12 @@ class BaseSubprocessTransport(transports.SubprocessTransport): def _start(self, args, shell, stdin, stdout, stderr, bufsize, **kwargs): raise NotImplementedError + def set_protocol(self, protocol): + self._protocol = protocol + + def get_protocol(self): + return self._protocol + def is_closing(self): return self._closed diff --git a/Lib/asyncio/coroutines.py b/Lib/asyncio/coroutines.py index 71bc6fb..5bdeceb 100644 --- a/Lib/asyncio/coroutines.py +++ b/Lib/asyncio/coroutines.py @@ -33,12 +33,16 @@ _DEBUG = (not sys.flags.ignore_environment and try: _types_coroutine = types.coroutine + _types_CoroutineType = types.CoroutineType except AttributeError: + # Python 3.4 _types_coroutine = None + _types_CoroutineType = None try: _inspect_iscoroutinefunction = inspect.iscoroutinefunction except AttributeError: + # Python 3.4 _inspect_iscoroutinefunction = lambda func: False try: @@ -120,8 +124,8 @@ class CoroWrapper: def send(self, value): return self.gen.send(value) - def throw(self, exc): - return self.gen.throw(exc) + def throw(self, type, value=None, traceback=None): + return self.gen.throw(type, value, traceback) def close(self): return self.gen.close() @@ -204,8 +208,8 @@ def coroutine(func): @functools.wraps(func) def coro(*args, **kw): res = func(*args, **kw) - if isinstance(res, futures.Future) or inspect.isgenerator(res) or \ - isinstance(res, CoroWrapper): + if (futures.isfuture(res) or inspect.isgenerator(res) or + isinstance(res, CoroWrapper)): res = yield from res elif _AwaitableABC is not None: # If 'func' returns an Awaitable (new in 3.5) we @@ -238,19 +242,27 @@ def coroutine(func): w.__qualname__ = getattr(func, '__qualname__', None) return w - wrapper._is_coroutine = True # For iscoroutinefunction(). + wrapper._is_coroutine = _is_coroutine # For iscoroutinefunction(). return wrapper +# A marker for iscoroutinefunction. +_is_coroutine = object() + + def iscoroutinefunction(func): """Return True if func is a decorated coroutine function.""" - return (getattr(func, '_is_coroutine', False) or + return (getattr(func, '_is_coroutine', None) is _is_coroutine or _inspect_iscoroutinefunction(func)) _COROUTINE_TYPES = (types.GeneratorType, CoroWrapper) if _CoroutineABC is not None: _COROUTINE_TYPES += (_CoroutineABC,) +if _types_CoroutineType is not None: + # Prioritize native coroutine check to speed-up + # asyncio.iscoroutine. + _COROUTINE_TYPES = (_types_CoroutineType,) + _COROUTINE_TYPES def iscoroutine(obj): @@ -261,6 +273,29 @@ def iscoroutine(obj): def _format_coroutine(coro): assert iscoroutine(coro) + if not hasattr(coro, 'cr_code') and not hasattr(coro, 'gi_code'): + # Most likely a built-in type or a Cython coroutine. + + # Built-in types might not have __qualname__ or __name__. + coro_name = getattr( + coro, '__qualname__', + getattr(coro, '__name__', type(coro).__name__)) + coro_name = '{}()'.format(coro_name) + + running = False + try: + running = coro.cr_running + except AttributeError: + try: + running = coro.gi_running + except AttributeError: + pass + + if running: + return '{} running'.format(coro_name) + else: + return coro_name + coro_name = None if isinstance(coro, CoroWrapper): func = coro.func @@ -271,7 +306,7 @@ def _format_coroutine(coro): func = coro if coro_name is None: - coro_name = events._format_callback(func, ()) + coro_name = events._format_callback(func, (), {}) try: coro_code = coro.gi_code diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py index c48c5be..28a45fc 100644 --- a/Lib/asyncio/events.py +++ b/Lib/asyncio/events.py @@ -6,6 +6,7 @@ __all__ = ['AbstractEventLoopPolicy', 'get_event_loop_policy', 'set_event_loop_policy', 'get_event_loop', 'set_event_loop', 'new_event_loop', 'get_child_watcher', 'set_child_watcher', + '_set_running_loop', '_get_running_loop', ] import functools @@ -35,23 +36,25 @@ def _get_function_source(func): return None -def _format_args(args): - """Format function arguments. +def _format_args_and_kwargs(args, kwargs): + """Format function arguments and keyword arguments. Special case for a single parameter: ('hello',) is formatted as ('hello'). """ # use reprlib to limit the length of the output - args_repr = reprlib.repr(args) - if len(args) == 1 and args_repr.endswith(',)'): - args_repr = args_repr[:-2] + ')' - return args_repr + items = [] + if args: + items.extend(reprlib.repr(arg) for arg in args) + if kwargs: + items.extend('{}={}'.format(k, reprlib.repr(v)) + for k, v in kwargs.items()) + return '(' + ', '.join(items) + ')' -def _format_callback(func, args, suffix=''): +def _format_callback(func, args, kwargs, suffix=''): if isinstance(func, functools.partial): - if args is not None: - suffix = _format_args(args) + suffix - return _format_callback(func.func, func.args, suffix) + suffix = _format_args_and_kwargs(args, kwargs) + suffix + return _format_callback(func.func, func.args, func.keywords, suffix) if hasattr(func, '__qualname__'): func_repr = getattr(func, '__qualname__') @@ -60,14 +63,13 @@ def _format_callback(func, args, suffix=''): else: func_repr = repr(func) - if args is not None: - func_repr += _format_args(args) + func_repr += _format_args_and_kwargs(args, kwargs) if suffix: func_repr += suffix return func_repr def _format_callback_source(func, args): - func_repr = _format_callback(func, args) + func_repr = _format_callback(func, args, None) source = _get_function_source(func) if source: func_repr += ' at %s:%s' % source @@ -81,7 +83,6 @@ class Handle: '_source_traceback', '_repr', '__weakref__') def __init__(self, callback, args, loop): - assert not isinstance(callback, Handle), 'A Handle is not a callback' self._loop = loop self._callback = callback self._args = args @@ -248,6 +249,10 @@ class AbstractEventLoop: """ raise NotImplementedError + def shutdown_asyncgens(self): + """Shutdown all active asynchronous generators.""" + raise NotImplementedError + # Methods scheduling callbacks. All these return Handles. def _timer_handle_cancelled(self, handle): @@ -603,6 +608,30 @@ _event_loop_policy = None _lock = threading.Lock() +# A TLS for the running event loop, used by _get_running_loop. +class _RunningLoop(threading.local): + _loop = None +_running_loop = _RunningLoop() + + +def _get_running_loop(): + """Return the running event loop or None. + + This is a low-level function intended to be used by event loops. + This function is thread-specific. + """ + return _running_loop._loop + + +def _set_running_loop(loop): + """Set the running event loop. + + This is a low-level function intended to be used by event loops. + This function is thread-specific. + """ + _running_loop._loop = loop + + def _init_event_loop_policy(): global _event_loop_policy with _lock: @@ -628,7 +657,17 @@ def set_event_loop_policy(policy): def get_event_loop(): - """Equivalent to calling get_event_loop_policy().get_event_loop().""" + """Return an asyncio event loop. + + When called from a coroutine or a callback (e.g. scheduled with call_soon + or similar API), this function will always return the running event loop. + + If there is no running event loop set, the function will return + the result of `get_event_loop_policy().get_event_loop()` call. + """ + current_loop = _get_running_loop() + if current_loop is not None: + return current_loop return get_event_loop_policy().get_event_loop() diff --git a/Lib/asyncio/futures.py b/Lib/asyncio/futures.py index 1feba4d..9ca8d84 100644 --- a/Lib/asyncio/futures.py +++ b/Lib/asyncio/futures.py @@ -2,7 +2,7 @@ __all__ = ['CancelledError', 'TimeoutError', 'InvalidStateError', - 'Future', 'wrap_future', + 'Future', 'wrap_future', 'isfuture', ] import concurrent.futures._base @@ -110,6 +110,17 @@ class _TracebackLogger: self.loop.call_exception_handler({'message': msg}) +def isfuture(obj): + """Check for a Future. + + This returns True when obj is a Future instance or is advertising + itself as duck-type compatible by setting _asyncio_future_blocking. + See comment in Future for more details. + """ + return (hasattr(obj.__class__, '_asyncio_future_blocking') and + obj._asyncio_future_blocking is not None) + + class Future: """This class is *almost* compatible with concurrent.futures.Future. @@ -134,7 +145,15 @@ class Future: _loop = None _source_traceback = None - _blocking = False # proper use of future (yield vs yield from) + # This field is used for a dual purpose: + # - Its presence is a marker to declare that a class implements + # the Future protocol (i.e. is intended to be duck-type compatible). + # The value must also be not-None, to enable a subclass to declare + # that it is not compatible by setting this to None. + # - It is set by __iter__() below so that Task._step() can tell + # the difference between `yield from Future()` (correct) vs. + # `yield Future()` (incorrect). + _asyncio_future_blocking = False _log_traceback = False # Used for Python 3.4 and later _tb_logger = None # Used for Python 3.3 only @@ -357,7 +376,7 @@ class Future: def __iter__(self): if not self.done(): - self._blocking = True + self._asyncio_future_blocking = True yield self # This tells Task to wait for completion. assert self.done(), "yield from wasn't used with future" return self.result() # May raise too. @@ -415,15 +434,17 @@ def _chain_future(source, destination): If destination is cancelled, source gets cancelled too. Compatible with both asyncio.Future and concurrent.futures.Future. """ - if not isinstance(source, (Future, concurrent.futures.Future)): + if not isfuture(source) and not isinstance(source, + concurrent.futures.Future): raise TypeError('A future is required for source argument') - if not isinstance(destination, (Future, concurrent.futures.Future)): + if not isfuture(destination) and not isinstance(destination, + concurrent.futures.Future): raise TypeError('A future is required for destination argument') - source_loop = source._loop if isinstance(source, Future) else None - dest_loop = destination._loop if isinstance(destination, Future) else None + source_loop = source._loop if isfuture(source) else None + dest_loop = destination._loop if isfuture(destination) else None def _set_state(future, other): - if isinstance(future, Future): + if isfuture(future): _copy_future_state(other, future) else: _set_concurrent_future_state(future, other) @@ -447,7 +468,7 @@ def _chain_future(source, destination): def wrap_future(future, *, loop=None): """Wrap concurrent.futures.Future object.""" - if isinstance(future, Future): + if isfuture(future): return future assert isinstance(future, concurrent.futures.Future), \ 'concurrent.futures.Future is expected, got {!r}'.format(future) diff --git a/Lib/asyncio/locks.py b/Lib/asyncio/locks.py index 741aaf2..deefc93 100644 --- a/Lib/asyncio/locks.py +++ b/Lib/asyncio/locks.py @@ -166,7 +166,7 @@ class Lock(_ContextManagerMixin): This method blocks until the lock is unlocked, then sets it to locked and returns True. """ - if not self._waiters and not self._locked: + if not self._locked and all(w.cancelled() for w in self._waiters): self._locked = True return True diff --git a/Lib/asyncio/proactor_events.py b/Lib/asyncio/proactor_events.py index 3ac314c..fef3205 100644 --- a/Lib/asyncio/proactor_events.py +++ b/Lib/asyncio/proactor_events.py @@ -66,6 +66,12 @@ class _ProactorBasePipeTransport(transports._FlowControlMixin, def _set_extra(self, sock): self._extra['pipe'] = sock + def set_protocol(self, protocol): + self._protocol = protocol + + def get_protocol(self): + return self._protocol + def is_closing(self): return self._closing @@ -488,7 +494,7 @@ class BaseProactorEventLoop(base_events.BaseEventLoop): self._csock.send(b'\0') def _start_serving(self, protocol_factory, sock, - sslcontext=None, server=None): + sslcontext=None, server=None, backlog=100): def loop(f=None): try: diff --git a/Lib/asyncio/queues.py b/Lib/asyncio/queues.py index c453f02..2d38972 100644 --- a/Lib/asyncio/queues.py +++ b/Lib/asyncio/queues.py @@ -7,7 +7,6 @@ import heapq from . import compat from . import events -from . import futures from . import locks from .coroutines import coroutine diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py index 9564d01..12d357b 100644 --- a/Lib/asyncio/selector_events.py +++ b/Lib/asyncio/selector_events.py @@ -11,6 +11,7 @@ import errno import functools import socket import warnings +import weakref try: import ssl except ImportError: # pragma: no cover @@ -39,6 +40,17 @@ def _test_selector_event(selector, fd, event): return bool(key.events & event) +if hasattr(socket, 'TCP_NODELAY'): + def _set_nodelay(sock): + if (sock.family in {socket.AF_INET, socket.AF_INET6} and + sock.type == socket.SOCK_STREAM and + sock.proto == socket.IPPROTO_TCP): + sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) +else: + def _set_nodelay(sock): + pass + + class BaseSelectorEventLoop(base_events.BaseEventLoop): """Selector event loop. @@ -53,6 +65,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): logger.debug('Using selector: %s', selector.__class__.__name__) self._selector = selector self._make_self_pipe() + self._transports = weakref.WeakValueDictionary() def _make_socket_transport(self, sock, protocol, waiter=None, *, extra=None, server=None): @@ -104,7 +117,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): raise NotImplementedError def _close_self_pipe(self): - self.remove_reader(self._ssock.fileno()) + self._remove_reader(self._ssock.fileno()) self._ssock.close() self._ssock = None self._csock.close() @@ -117,7 +130,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): self._ssock.setblocking(False) self._csock.setblocking(False) self._internal_fds += 1 - self.add_reader(self._ssock.fileno(), self._read_from_self) + self._add_reader(self._ssock.fileno(), self._read_from_self) def _process_self_data(self, data): pass @@ -151,43 +164,50 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): exc_info=True) def _start_serving(self, protocol_factory, sock, - sslcontext=None, server=None): - self.add_reader(sock.fileno(), self._accept_connection, - protocol_factory, sock, sslcontext, server) + sslcontext=None, server=None, backlog=100): + self._add_reader(sock.fileno(), self._accept_connection, + protocol_factory, sock, sslcontext, server, backlog) def _accept_connection(self, protocol_factory, sock, - sslcontext=None, server=None): - try: - conn, addr = sock.accept() - if self._debug: - logger.debug("%r got a new connection from %r: %r", - server, addr, conn) - conn.setblocking(False) - except (BlockingIOError, InterruptedError, ConnectionAbortedError): - pass # False alarm. - except OSError as exc: - # There's nowhere to send the error, so just log it. - if exc.errno in (errno.EMFILE, errno.ENFILE, - errno.ENOBUFS, errno.ENOMEM): - # Some platforms (e.g. Linux keep reporting the FD as - # ready, so we remove the read handler temporarily. - # We'll try again in a while. - self.call_exception_handler({ - 'message': 'socket.accept() out of system resource', - 'exception': exc, - 'socket': sock, - }) - self.remove_reader(sock.fileno()) - self.call_later(constants.ACCEPT_RETRY_DELAY, - self._start_serving, - protocol_factory, sock, sslcontext, server) + sslcontext=None, server=None, backlog=100): + # This method is only called once for each event loop tick where the + # listening socket has triggered an EVENT_READ. There may be multiple + # connections waiting for an .accept() so it is called in a loop. + # See https://bugs.python.org/issue27906 for more details. + for _ in range(backlog): + try: + conn, addr = sock.accept() + if self._debug: + logger.debug("%r got a new connection from %r: %r", + server, addr, conn) + conn.setblocking(False) + except (BlockingIOError, InterruptedError, ConnectionAbortedError): + # Early exit because the socket accept buffer is empty. + return None + except OSError as exc: + # There's nowhere to send the error, so just log it. + if exc.errno in (errno.EMFILE, errno.ENFILE, + errno.ENOBUFS, errno.ENOMEM): + # Some platforms (e.g. Linux keep reporting the FD as + # ready, so we remove the read handler temporarily. + # We'll try again in a while. + self.call_exception_handler({ + 'message': 'socket.accept() out of system resource', + 'exception': exc, + 'socket': sock, + }) + self._remove_reader(sock.fileno()) + self.call_later(constants.ACCEPT_RETRY_DELAY, + self._start_serving, + protocol_factory, sock, sslcontext, server, + backlog) + else: + raise # The event loop will catch, log and ignore it. else: - raise # The event loop will catch, log and ignore it. - else: - extra = {'peername': addr} - accept = self._accept_connection2(protocol_factory, conn, extra, - sslcontext, server) - self.create_task(accept) + extra = {'peername': addr} + accept = self._accept_connection2(protocol_factory, conn, extra, + sslcontext, server) + self.create_task(accept) @coroutine def _accept_connection2(self, protocol_factory, conn, extra, @@ -226,8 +246,18 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): context['transport'] = transport self.call_exception_handler(context) - def add_reader(self, fd, callback, *args): - """Add a reader callback.""" + def _ensure_fd_no_transport(self, fd): + try: + transport = self._transports[fd] + except KeyError: + pass + else: + if not transport.is_closing(): + raise RuntimeError( + 'File descriptor {!r} is used by transport {!r}'.format( + fd, transport)) + + def _add_reader(self, fd, callback, *args): self._check_closed() handle = events.Handle(callback, args, self) try: @@ -242,8 +272,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): if reader is not None: reader.cancel() - def remove_reader(self, fd): - """Remove a reader callback.""" + def _remove_reader(self, fd): if self.is_closed(): return False try: @@ -264,8 +293,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): else: return False - def add_writer(self, fd, callback, *args): - """Add a writer callback..""" + def _add_writer(self, fd, callback, *args): self._check_closed() handle = events.Handle(callback, args, self) try: @@ -280,7 +308,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): if writer is not None: writer.cancel() - def remove_writer(self, fd): + def _remove_writer(self, fd): """Remove a writer callback.""" if self.is_closed(): return False @@ -303,6 +331,26 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): else: return False + def add_reader(self, fd, callback, *args): + """Add a reader callback.""" + self._ensure_fd_no_transport(fd) + return self._add_reader(fd, callback, *args) + + def remove_reader(self, fd): + """Remove a reader callback.""" + self._ensure_fd_no_transport(fd) + return self._remove_reader(fd) + + def add_writer(self, fd, callback, *args): + """Add a writer callback..""" + self._ensure_fd_no_transport(fd) + return self._add_writer(fd, callback, *args) + + def remove_writer(self, fd): + """Remove a writer callback.""" + self._ensure_fd_no_transport(fd) + return self._remove_writer(fd) + def sock_recv(self, sock, n): """Receive data from the socket. @@ -382,6 +430,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): data = data[n:] self.add_writer(fd, self._sock_sendall, fut, True, sock, data) + @coroutine def sock_connect(self, sock, address): """Connect to a remote socket at address. @@ -390,23 +439,16 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): if self._debug and sock.gettimeout() != 0: raise ValueError("the socket must be non-blocking") - fut = self.create_future() - if hasattr(socket, 'AF_UNIX') and sock.family == socket.AF_UNIX: - self._sock_connect(fut, sock, address) - else: - resolved = base_events._ensure_resolved(address, loop=self) - resolved.add_done_callback( - lambda resolved: self._on_resolved(fut, sock, resolved)) - - return fut - - def _on_resolved(self, fut, sock, resolved): - try: + if not hasattr(socket, 'AF_UNIX') or sock.family != socket.AF_UNIX: + resolved = base_events._ensure_resolved( + address, family=sock.family, proto=sock.proto, loop=self) + if not resolved.done(): + yield from resolved _, _, _, _, address = resolved.result()[0] - except Exception as exc: - fut.set_exception(exc) - else: - self._sock_connect(fut, sock, address) + + fut = self.create_future() + self._sock_connect(fut, sock, address) + return (yield from fut) def _sock_connect(self, fut, sock, address): fd = sock.fileno() @@ -417,8 +459,8 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): # connection runs in background. We have to wait until the socket # becomes writable to be notified when the connection succeed or # fails. - fut.add_done_callback(functools.partial(self._sock_connect_done, - fd)) + fut.add_done_callback( + functools.partial(self._sock_connect_done, fd)) self.add_writer(fd, self._sock_connect_cb, fut, sock, address) except Exception as exc: fut.set_exception(exc) @@ -482,17 +524,17 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): fileobj, (reader, writer) = key.fileobj, key.data if mask & selectors.EVENT_READ and reader is not None: if reader._cancelled: - self.remove_reader(fileobj) + self._remove_reader(fileobj) else: self._add_callback(reader) if mask & selectors.EVENT_WRITE and writer is not None: if writer._cancelled: - self.remove_writer(fileobj) + self._remove_writer(fileobj) else: self._add_callback(writer) def _stop_serving(self, sock): - self.remove_reader(sock.fileno()) + self._remove_reader(sock.fileno()) sock.close() @@ -527,6 +569,7 @@ class _SelectorTransport(transports._FlowControlMixin, self._closing = False # Set when close() called. if self._server is not None: self._server._attach() + loop._transports[self._sock_fd] = self def __repr__(self): info = [self.__class__.__name__] @@ -559,6 +602,12 @@ class _SelectorTransport(transports._FlowControlMixin, def abort(self): self._force_close(None) + def set_protocol(self, protocol): + self._protocol = protocol + + def get_protocol(self): + return self._protocol + def is_closing(self): return self._closing @@ -566,10 +615,10 @@ class _SelectorTransport(transports._FlowControlMixin, if self._closing: return self._closing = True - self._loop.remove_reader(self._sock_fd) + self._loop._remove_reader(self._sock_fd) if not self._buffer: self._conn_lost += 1 - self._loop.remove_writer(self._sock_fd) + self._loop._remove_writer(self._sock_fd) self._loop.call_soon(self._call_connection_lost, None) # On Python 3.3 and older, objects with a destructor part of a reference @@ -600,10 +649,10 @@ class _SelectorTransport(transports._FlowControlMixin, return if self._buffer: self._buffer.clear() - self._loop.remove_writer(self._sock_fd) + self._loop._remove_writer(self._sock_fd) if not self._closing: self._closing = True - self._loop.remove_reader(self._sock_fd) + self._loop._remove_reader(self._sock_fd) self._conn_lost += 1 self._loop.call_soon(self._call_connection_lost, exc) @@ -633,9 +682,14 @@ class _SelectorSocketTransport(_SelectorTransport): self._eof = False self._paused = False + # Disable the Nagle algorithm -- small writes will be + # sent without waiting for the TCP ACK. This generally + # decreases the latency (in some cases significantly.) + _set_nodelay(self._sock) + self._loop.call_soon(self._protocol.connection_made, self) # only start reading when connection_made() has been called - self._loop.call_soon(self._loop.add_reader, + self._loop.call_soon(self._loop._add_reader, self._sock_fd, self._read_ready) if waiter is not None: # only wake up the waiter when connection_made() has been called @@ -648,7 +702,7 @@ class _SelectorSocketTransport(_SelectorTransport): if self._paused: raise RuntimeError('Already paused') self._paused = True - self._loop.remove_reader(self._sock_fd) + self._loop._remove_reader(self._sock_fd) if self._loop.get_debug(): logger.debug("%r pauses reading", self) @@ -658,7 +712,7 @@ class _SelectorSocketTransport(_SelectorTransport): self._paused = False if self._closing: return - self._loop.add_reader(self._sock_fd, self._read_ready) + self._loop._add_reader(self._sock_fd, self._read_ready) if self._loop.get_debug(): logger.debug("%r resumes reading", self) @@ -682,7 +736,7 @@ class _SelectorSocketTransport(_SelectorTransport): # We're keeping the connection open so the # protocol can write more, but we still can't # receive more, so remove the reader callback. - self._loop.remove_reader(self._sock_fd) + self._loop._remove_reader(self._sock_fd) else: self.close() @@ -715,7 +769,7 @@ class _SelectorSocketTransport(_SelectorTransport): if not data: return # Not all was written; register write handler. - self._loop.add_writer(self._sock_fd, self._write_ready) + self._loop._add_writer(self._sock_fd, self._write_ready) # Add it to the buffer. self._buffer.extend(data) @@ -731,7 +785,7 @@ class _SelectorSocketTransport(_SelectorTransport): except (BlockingIOError, InterruptedError): pass except Exception as exc: - self._loop.remove_writer(self._sock_fd) + self._loop._remove_writer(self._sock_fd) self._buffer.clear() self._fatal_error(exc, 'Fatal write error on socket transport') else: @@ -739,7 +793,7 @@ class _SelectorSocketTransport(_SelectorTransport): del self._buffer[:n] self._maybe_resume_protocol() # May append to buffer. if not self._buffer: - self._loop.remove_writer(self._sock_fd) + self._loop._remove_writer(self._sock_fd) if self._closing: self._call_connection_lost(None) elif self._eof: @@ -810,19 +864,19 @@ class _SelectorSslTransport(_SelectorTransport): try: self._sock.do_handshake() except ssl.SSLWantReadError: - self._loop.add_reader(self._sock_fd, - self._on_handshake, start_time) + self._loop._add_reader(self._sock_fd, + self._on_handshake, start_time) return except ssl.SSLWantWriteError: - self._loop.add_writer(self._sock_fd, - self._on_handshake, start_time) + self._loop._add_writer(self._sock_fd, + self._on_handshake, start_time) return except BaseException as exc: if self._loop.get_debug(): logger.warning("%r: SSL handshake failed", self, exc_info=True) - self._loop.remove_reader(self._sock_fd) - self._loop.remove_writer(self._sock_fd) + self._loop._remove_reader(self._sock_fd) + self._loop._remove_writer(self._sock_fd) self._sock.close() self._wakeup_waiter(exc) if isinstance(exc, Exception): @@ -830,8 +884,8 @@ class _SelectorSslTransport(_SelectorTransport): else: raise - self._loop.remove_reader(self._sock_fd) - self._loop.remove_writer(self._sock_fd) + self._loop._remove_reader(self._sock_fd) + self._loop._remove_writer(self._sock_fd) peercert = self._sock.getpeercert() if not hasattr(self._sslcontext, 'check_hostname'): @@ -859,7 +913,7 @@ class _SelectorSslTransport(_SelectorTransport): self._read_wants_write = False self._write_wants_read = False - self._loop.add_reader(self._sock_fd, self._read_ready) + self._loop._add_reader(self._sock_fd, self._read_ready) self._protocol_connected = True self._loop.call_soon(self._protocol.connection_made, self) # only wake up the waiter when connection_made() has been called @@ -881,7 +935,7 @@ class _SelectorSslTransport(_SelectorTransport): if self._paused: raise RuntimeError('Already paused') self._paused = True - self._loop.remove_reader(self._sock_fd) + self._loop._remove_reader(self._sock_fd) if self._loop.get_debug(): logger.debug("%r pauses reading", self) @@ -891,7 +945,7 @@ class _SelectorSslTransport(_SelectorTransport): self._paused = False if self._closing: return - self._loop.add_reader(self._sock_fd, self._read_ready) + self._loop._add_reader(self._sock_fd, self._read_ready) if self._loop.get_debug(): logger.debug("%r resumes reading", self) @@ -903,7 +957,7 @@ class _SelectorSslTransport(_SelectorTransport): self._write_ready() if self._buffer: - self._loop.add_writer(self._sock_fd, self._write_ready) + self._loop._add_writer(self._sock_fd, self._write_ready) try: data = self._sock.recv(self.max_size) @@ -911,8 +965,8 @@ class _SelectorSslTransport(_SelectorTransport): pass except ssl.SSLWantWriteError: self._read_wants_write = True - self._loop.remove_reader(self._sock_fd) - self._loop.add_writer(self._sock_fd, self._write_ready) + self._loop._remove_reader(self._sock_fd) + self._loop._add_writer(self._sock_fd, self._write_ready) except Exception as exc: self._fatal_error(exc, 'Fatal read error on SSL transport') else: @@ -937,7 +991,7 @@ class _SelectorSslTransport(_SelectorTransport): self._read_ready() if not (self._paused or self._closing): - self._loop.add_reader(self._sock_fd, self._read_ready) + self._loop._add_reader(self._sock_fd, self._read_ready) if self._buffer: try: @@ -946,10 +1000,10 @@ class _SelectorSslTransport(_SelectorTransport): n = 0 except ssl.SSLWantReadError: n = 0 - self._loop.remove_writer(self._sock_fd) + self._loop._remove_writer(self._sock_fd) self._write_wants_read = True except Exception as exc: - self._loop.remove_writer(self._sock_fd) + self._loop._remove_writer(self._sock_fd) self._buffer.clear() self._fatal_error(exc, 'Fatal write error on SSL transport') return @@ -960,7 +1014,7 @@ class _SelectorSslTransport(_SelectorTransport): self._maybe_resume_protocol() # May append to buffer. if not self._buffer: - self._loop.remove_writer(self._sock_fd) + self._loop._remove_writer(self._sock_fd) if self._closing: self._call_connection_lost(None) @@ -978,7 +1032,7 @@ class _SelectorSslTransport(_SelectorTransport): return if not self._buffer: - self._loop.add_writer(self._sock_fd, self._write_ready) + self._loop._add_writer(self._sock_fd, self._write_ready) # Add it to the buffer. self._buffer.extend(data) @@ -998,7 +1052,7 @@ class _SelectorDatagramTransport(_SelectorTransport): self._address = address self._loop.call_soon(self._protocol.connection_made, self) # only start reading when connection_made() has been called - self._loop.call_soon(self._loop.add_reader, + self._loop.call_soon(self._loop._add_reader, self._sock_fd, self._read_ready) if waiter is not None: # only wake up the waiter when connection_made() has been called @@ -1048,7 +1102,7 @@ class _SelectorDatagramTransport(_SelectorTransport): self._sock.sendto(data, addr) return except (BlockingIOError, InterruptedError): - self._loop.add_writer(self._sock_fd, self._sendto_ready) + self._loop._add_writer(self._sock_fd, self._sendto_ready) except OSError as exc: self._protocol.error_received(exc) return @@ -1082,6 +1136,6 @@ class _SelectorDatagramTransport(_SelectorTransport): self._maybe_resume_protocol() # May append to buffer. if not self._buffer: - self._loop.remove_writer(self._sock_fd) + self._loop._remove_writer(self._sock_fd) if self._closing: self._call_connection_lost(None) diff --git a/Lib/asyncio/sslproto.py b/Lib/asyncio/sslproto.py index f58b5ac..c2c4b95 100644 --- a/Lib/asyncio/sslproto.py +++ b/Lib/asyncio/sslproto.py @@ -5,6 +5,7 @@ try: except ImportError: # pragma: no cover ssl = None +from . import base_events from . import compat from . import protocols from . import transports @@ -304,6 +305,12 @@ class _SSLProtocolTransport(transports._FlowControlMixin, """Get optional transport information.""" return self._ssl_protocol._get_extra_info(name, default) + def set_protocol(self, protocol): + self._app_protocol = protocol + + def get_protocol(self): + return self._app_protocol + def is_closing(self): return self._closed @@ -403,7 +410,8 @@ class SSLProtocol(protocols.Protocol): """ def __init__(self, loop, app_protocol, sslcontext, waiter, - server_side=False, server_hostname=None): + server_side=False, server_hostname=None, + call_connection_made=True): if ssl is None: raise RuntimeError('stdlib ssl module not available') @@ -436,6 +444,7 @@ class SSLProtocol(protocols.Protocol): self._in_shutdown = False # transport, ex: SelectorSocketTransport self._transport = None + self._call_connection_made = call_connection_made def _wakeup_waiter(self, exc=None): if self._waiter is None: @@ -470,6 +479,7 @@ class SSLProtocol(protocols.Protocol): self._loop.call_soon(self._app_protocol.connection_lost, exc) self._transport = None self._app_transport = None + self._wakeup_waiter(exc) def pause_writing(self): """Called when the low-level transport's buffer goes over @@ -599,7 +609,8 @@ class SSLProtocol(protocols.Protocol): compression=sslobj.compression(), ssl_object=sslobj, ) - self._app_protocol.connection_made(self._app_transport) + if self._call_connection_made: + self._app_protocol.connection_made(self._app_transport) self._wakeup_waiter() self._session_established = True # In case transport.write() was already called. Don't call diff --git a/Lib/asyncio/streams.py b/Lib/asyncio/streams.py index c88a87c..a82cc79 100644 --- a/Lib/asyncio/streams.py +++ b/Lib/asyncio/streams.py @@ -448,6 +448,7 @@ class StreamReader: assert not self._eof, '_wait_for_data after EOF' # Waiting for data while paused will make deadlock, so prevent it. + # This is essential for readexactly(n) for case when n > self._limit. if self._paused: self._paused = False self._transport.resume_reading() @@ -590,7 +591,7 @@ class StreamReader: bytes. If the EOF was received and the internal buffer is empty, return an empty bytes object. - If n is zero, return empty bytes object immediatelly. + If n is zero, return empty bytes object immediately. If n is positive, this function try to read `n` bytes, and may return less or equal bytes than requested, but at least one byte. If EOF was @@ -658,25 +659,22 @@ class StreamReader: if n == 0: return b'' - # There used to be "optimized" code here. It created its own - # Future and waited until self._buffer had at least the n - # bytes, then called read(n). Unfortunately, this could pause - # the transport if the argument was larger than the pause - # limit (which is twice self._limit). So now we just read() - # into a local buffer. - - blocks = [] - while n > 0: - block = yield from self.read(n) - if not block: - partial = b''.join(blocks) - raise IncompleteReadError(partial, len(partial) + n) - blocks.append(block) - n -= len(block) - - assert n == 0 - - return b''.join(blocks) + while len(self._buffer) < n: + if self._eof: + incomplete = bytes(self._buffer) + self._buffer.clear() + raise IncompleteReadError(incomplete, n) + + yield from self._wait_for_data('readexactly') + + if len(self._buffer) == n: + data = bytes(self._buffer) + self._buffer.clear() + else: + data = bytes(self._buffer[:n]) + del self._buffer[:n] + self._maybe_resume_transport() + return data if compat.PY35: @coroutine diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py index 0cca8e3..8852aa5 100644 --- a/Lib/asyncio/tasks.py +++ b/Lib/asyncio/tasks.py @@ -241,7 +241,7 @@ class Task(futures.Future): result = coro.throw(exc) except StopIteration as exc: self.set_result(exc.value) - except futures.CancelledError as exc: + except futures.CancelledError: super().cancel() # I.e., Future.cancel(self). except Exception as exc: self.set_exception(exc) @@ -249,7 +249,8 @@ class Task(futures.Future): self.set_exception(exc) raise else: - if isinstance(result, futures.Future): + blocking = getattr(result, '_asyncio_future_blocking', None) + if blocking is not None: # Yielded Future must come from Future.__iter__(). if result._loop is not self._loop: self._loop.call_soon( @@ -257,13 +258,20 @@ class Task(futures.Future): RuntimeError( 'Task {!r} got Future {!r} attached to a ' 'different loop'.format(self, result))) - elif result._blocking: - result._blocking = False - result.add_done_callback(self._wakeup) - self._fut_waiter = result - if self._must_cancel: - if self._fut_waiter.cancel(): - self._must_cancel = False + elif blocking: + if result is self: + self._loop.call_soon( + self._step, + RuntimeError( + 'Task cannot await on itself: {!r}'.format( + self))) + else: + result._asyncio_future_blocking = False + result.add_done_callback(self._wakeup) + self._fut_waiter = result + if self._must_cancel: + if self._fut_waiter.cancel(): + self._must_cancel = False else: self._loop.call_soon( self._step, @@ -332,7 +340,7 @@ def wait(fs, *, loop=None, timeout=None, return_when=ALL_COMPLETED): Note: This does not raise TimeoutError! Futures that aren't done when the timeout occurs are returned in the second set. """ - if isinstance(fs, futures.Future) or coroutines.iscoroutine(fs): + if futures.isfuture(fs) or coroutines.iscoroutine(fs): raise TypeError("expect a list of futures, not %s" % type(fs).__name__) if not fs: raise ValueError('Set of coroutines/Futures is empty.') @@ -461,7 +469,7 @@ def as_completed(fs, *, loop=None, timeout=None): Note: The futures 'f' are not necessarily members of fs. """ - if isinstance(fs, futures.Future) or coroutines.iscoroutine(fs): + if futures.isfuture(fs) or coroutines.iscoroutine(fs): raise TypeError("expect a list of futures, not %s" % type(fs).__name__) loop = loop if loop is not None else events.get_event_loop() todo = {ensure_future(f, loop=loop) for f in set(fs)} @@ -518,7 +526,7 @@ def sleep(delay, result=None, *, loop=None): h.cancel() -def async(coro_or_future, *, loop=None): +def async_(coro_or_future, *, loop=None): """Wrap a coroutine in a future. If the argument is a Future, it is returned directly. @@ -531,13 +539,18 @@ def async(coro_or_future, *, loop=None): return ensure_future(coro_or_future, loop=loop) +# Silence DeprecationWarning: +globals()['async'] = async_ +async_.__name__ = 'async' +del async_ + def ensure_future(coro_or_future, *, loop=None): """Wrap a coroutine or an awaitable in a future. If the argument is a Future, it is returned directly. """ - if isinstance(coro_or_future, futures.Future): + if futures.isfuture(coro_or_future): if loop is not None and loop is not coro_or_future._loop: raise ValueError('loop argument must agree with Future') return coro_or_future @@ -579,15 +592,21 @@ class _GatheringFuture(futures.Future): def cancel(self): if self.done(): return False + ret = False for child in self._children: - child.cancel() - return True + if child.cancel(): + ret = True + return ret def gather(*coros_or_futures, loop=None, return_exceptions=False): """Return a future aggregating results from the given coroutines or futures. + Coroutines will be wrapped in a future and scheduled in the event + loop. They will not necessarily be scheduled in the same order as + passed in. + All futures must share the same event loop. If all the tasks are done successfully, the returned future's result is the list of results (in the order of the original sequence, not necessarily @@ -613,7 +632,7 @@ def gather(*coros_or_futures, loop=None, return_exceptions=False): arg_to_fut = {} for arg in set(coros_or_futures): - if not isinstance(arg, futures.Future): + if not futures.isfuture(arg): fut = ensure_future(arg, loop=loop) if loop is None: loop = fut._loop diff --git a/Lib/asyncio/test_utils.py b/Lib/asyncio/test_utils.py index 396e6ae..9d32822 100644 --- a/Lib/asyncio/test_utils.py +++ b/Lib/asyncio/test_utils.py @@ -13,6 +13,8 @@ import tempfile import threading import time import unittest +import weakref + from unittest import mock from http.server import HTTPServer @@ -300,6 +302,8 @@ class TestLoop(base_events.BaseEventLoop): self.writers = {} self.reset_counters() + self._transports = weakref.WeakValueDictionary() + def time(self): return self._time @@ -318,10 +322,10 @@ class TestLoop(base_events.BaseEventLoop): else: # pragma: no cover raise AssertionError("Time generator is not finished") - def add_reader(self, fd, callback, *args): + def _add_reader(self, fd, callback, *args): self.readers[fd] = events.Handle(callback, args, self) - def remove_reader(self, fd): + def _remove_reader(self, fd): self.remove_reader_count[fd] += 1 if fd in self.readers: del self.readers[fd] @@ -337,10 +341,10 @@ class TestLoop(base_events.BaseEventLoop): assert handle._args == args, '{!r} != {!r}'.format( handle._args, args) - def add_writer(self, fd, callback, *args): + def _add_writer(self, fd, callback, *args): self.writers[fd] = events.Handle(callback, args, self) - def remove_writer(self, fd): + def _remove_writer(self, fd): self.remove_writer_count[fd] += 1 if fd in self.writers: del self.writers[fd] @@ -356,6 +360,36 @@ class TestLoop(base_events.BaseEventLoop): assert handle._args == args, '{!r} != {!r}'.format( handle._args, args) + def _ensure_fd_no_transport(self, fd): + try: + transport = self._transports[fd] + except KeyError: + pass + else: + raise RuntimeError( + 'File descriptor {!r} is used by transport {!r}'.format( + fd, transport)) + + def add_reader(self, fd, callback, *args): + """Add a reader callback.""" + self._ensure_fd_no_transport(fd) + return self._add_reader(fd, callback, *args) + + def remove_reader(self, fd): + """Remove a reader callback.""" + self._ensure_fd_no_transport(fd) + return self._remove_reader(fd) + + def add_writer(self, fd, callback, *args): + """Add a writer callback..""" + self._ensure_fd_no_transport(fd) + return self._add_writer(fd, callback, *args) + + def remove_writer(self, fd): + """Remove a writer callback.""" + self._ensure_fd_no_transport(fd) + return self._remove_writer(fd) + def reset_counters(self): self.remove_reader_count = collections.defaultdict(int) self.remove_writer_count = collections.defaultdict(int) @@ -415,7 +449,13 @@ class TestCase(unittest.TestCase): self.set_event_loop(loop) return loop + def setUp(self): + self._get_running_loop = events._get_running_loop + events._get_running_loop = lambda: None + def tearDown(self): + events._get_running_loop = self._get_running_loop + events.set_event_loop(None) # Detect CPython bug #23353: ensure that yield/yield-from is not used diff --git a/Lib/asyncio/transports.py b/Lib/asyncio/transports.py index 9a6d919..0db0875 100644 --- a/Lib/asyncio/transports.py +++ b/Lib/asyncio/transports.py @@ -33,6 +33,14 @@ class BaseTransport: """ raise NotImplementedError + def set_protocol(self, protocol): + """Set a new protocol.""" + raise NotImplementedError + + def get_protocol(self): + """Return the current protocol.""" + raise NotImplementedError + class ReadTransport(BaseTransport): """Interface for read-only transports.""" diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py index d712749..7790534 100644 --- a/Lib/asyncio/unix_events.py +++ b/Lib/asyncio/unix_events.py @@ -39,6 +39,13 @@ def _sighandler_noop(signum, frame): pass +try: + _fspath = os.fspath +except AttributeError: + # Python 3.5 or earlier + _fspath = lambda path: path + + class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop): """Unix event loop. @@ -234,6 +241,11 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop): else: if sock is None: raise ValueError('no path and sock were specified') + if (sock.family != socket.AF_UNIX or + not base_events._is_stream_socket(sock)): + raise ValueError( + 'A UNIX Domain Stream Socket was expected, got {!r}' + .format(sock)) sock.setblocking(False) transport, protocol = yield from self._create_connection_transport( @@ -251,8 +263,20 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop): raise ValueError( 'path and sock can not be specified at the same time') + path = _fspath(path) sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + # Check for abstract socket. `str` and `bytes` paths are supported. + if path[0] not in (0, '\x00'): + try: + if stat.S_ISSOCK(os.stat(path).st_mode): + os.remove(path) + except FileNotFoundError: + pass + except OSError as err: + # Directory may have permissions only to create socket. + logger.error('Unable to check or remove stale UNIX socket %r: %r', path, err) + try: sock.bind(path) except OSError as exc: @@ -272,9 +296,11 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop): raise ValueError( 'path was not specified, and no sock specified') - if sock.family != socket.AF_UNIX: + if (sock.family != socket.AF_UNIX or + not base_events._is_stream_socket(sock)): raise ValueError( - 'A UNIX Domain Socket was expected, got {!r}'.format(sock)) + 'A UNIX Domain Stream Socket was expected, got {!r}' + .format(sock)) server = base_events.Server(self, [sock]) sock.listen(backlog) @@ -305,17 +331,23 @@ class _UnixReadPipeTransport(transports.ReadTransport): self._loop = loop self._pipe = pipe self._fileno = pipe.fileno() + self._protocol = protocol + self._closing = False + mode = os.fstat(self._fileno).st_mode if not (stat.S_ISFIFO(mode) or stat.S_ISSOCK(mode) or stat.S_ISCHR(mode)): + self._pipe = None + self._fileno = None + self._protocol = None raise ValueError("Pipe transport is for pipes/sockets only.") + _set_nonblocking(self._fileno) - self._protocol = protocol - self._closing = False + self._loop.call_soon(self._protocol.connection_made, self) # only start reading when connection_made() has been called - self._loop.call_soon(self._loop.add_reader, + self._loop.call_soon(self._loop._add_reader, self._fileno, self._read_ready) if waiter is not None: # only wake up the waiter when connection_made() has been called @@ -358,15 +390,21 @@ class _UnixReadPipeTransport(transports.ReadTransport): if self._loop.get_debug(): logger.info("%r was closed by peer", self) self._closing = True - self._loop.remove_reader(self._fileno) + self._loop._remove_reader(self._fileno) self._loop.call_soon(self._protocol.eof_received) self._loop.call_soon(self._call_connection_lost, None) def pause_reading(self): - self._loop.remove_reader(self._fileno) + self._loop._remove_reader(self._fileno) def resume_reading(self): - self._loop.add_reader(self._fileno, self._read_ready) + self._loop._add_reader(self._fileno, self._read_ready) + + def set_protocol(self, protocol): + self._protocol = protocol + + def get_protocol(self): + return self._protocol def is_closing(self): return self._closing @@ -400,7 +438,7 @@ class _UnixReadPipeTransport(transports.ReadTransport): def _close(self, exc): self._closing = True - self._loop.remove_reader(self._fileno) + self._loop._remove_reader(self._fileno) self._loop.call_soon(self._call_connection_lost, exc) def _call_connection_lost(self, exc): @@ -421,27 +459,31 @@ class _UnixWritePipeTransport(transports._FlowControlMixin, self._extra['pipe'] = pipe self._pipe = pipe self._fileno = pipe.fileno() + self._protocol = protocol + self._buffer = bytearray() + self._conn_lost = 0 + self._closing = False # Set when close() or write_eof() called. + mode = os.fstat(self._fileno).st_mode + is_char = stat.S_ISCHR(mode) + is_fifo = stat.S_ISFIFO(mode) is_socket = stat.S_ISSOCK(mode) - if not (is_socket or - stat.S_ISFIFO(mode) or - stat.S_ISCHR(mode)): + if not (is_char or is_fifo or is_socket): + self._pipe = None + self._fileno = None + self._protocol = None raise ValueError("Pipe transport is only for " "pipes, sockets and character devices") - _set_nonblocking(self._fileno) - self._protocol = protocol - self._buffer = [] - self._conn_lost = 0 - self._closing = False # Set when close() or write_eof() called. + _set_nonblocking(self._fileno) self._loop.call_soon(self._protocol.connection_made, self) # On AIX, the reader trick (to be notified when the read end of the # socket is closed) only works for sockets. On other platforms it # works for pipes and sockets. (Exception: OS X 10.4? Issue #19294.) - if is_socket or not sys.platform.startswith("aix"): + if is_socket or (is_fifo and not sys.platform.startswith("aix")): # only start reading when connection_made() has been called - self._loop.call_soon(self._loop.add_reader, + self._loop.call_soon(self._loop._add_reader, self._fileno, self._read_ready) if waiter is not None: @@ -475,7 +517,7 @@ class _UnixWritePipeTransport(transports._FlowControlMixin, return '<%s>' % ' '.join(info) def get_write_buffer_size(self): - return sum(len(data) for data in self._buffer) + return len(self._buffer) def _read_ready(self): # Pipe was closed by peer. @@ -513,39 +555,37 @@ class _UnixWritePipeTransport(transports._FlowControlMixin, if n == len(data): return elif n > 0: - data = data[n:] - self._loop.add_writer(self._fileno, self._write_ready) + data = memoryview(data)[n:] + self._loop._add_writer(self._fileno, self._write_ready) - self._buffer.append(data) + self._buffer += data self._maybe_pause_protocol() def _write_ready(self): - data = b''.join(self._buffer) - assert data, 'Data should not be empty' + assert self._buffer, 'Data should not be empty' - self._buffer.clear() try: - n = os.write(self._fileno, data) + n = os.write(self._fileno, self._buffer) except (BlockingIOError, InterruptedError): - self._buffer.append(data) + pass except Exception as exc: + self._buffer.clear() self._conn_lost += 1 # Remove writer here, _fatal_error() doesn't it # because _buffer is empty. - self._loop.remove_writer(self._fileno) + self._loop._remove_writer(self._fileno) self._fatal_error(exc, 'Fatal write error on pipe transport') else: - if n == len(data): - self._loop.remove_writer(self._fileno) + if n == len(self._buffer): + self._buffer.clear() + self._loop._remove_writer(self._fileno) self._maybe_resume_protocol() # May append to buffer. - if not self._buffer and self._closing: - self._loop.remove_reader(self._fileno) + if self._closing: + self._loop._remove_reader(self._fileno) self._call_connection_lost(None) return elif n > 0: - data = data[n:] - - self._buffer.append(data) # Try again later. + del self._buffer[:n] def can_write_eof(self): return True @@ -556,9 +596,15 @@ class _UnixWritePipeTransport(transports._FlowControlMixin, assert self._pipe self._closing = True if not self._buffer: - self._loop.remove_reader(self._fileno) + self._loop._remove_reader(self._fileno) self._loop.call_soon(self._call_connection_lost, None) + def set_protocol(self, protocol): + self._protocol = protocol + + def get_protocol(self): + return self._protocol + def is_closing(self): return self._closing @@ -596,9 +642,9 @@ class _UnixWritePipeTransport(transports._FlowControlMixin, def _close(self, exc=None): self._closing = True if self._buffer: - self._loop.remove_writer(self._fileno) + self._loop._remove_writer(self._fileno) self._buffer.clear() - self._loop.remove_reader(self._fileno) + self._loop._remove_reader(self._fileno) self._loop.call_soon(self._call_connection_lost, exc) def _call_connection_lost(self, exc): @@ -726,6 +772,7 @@ class BaseChildWatcher(AbstractChildWatcher): def __init__(self): self._loop = None + self._callbacks = {} def close(self): self.attach_loop(None) @@ -739,6 +786,12 @@ class BaseChildWatcher(AbstractChildWatcher): def attach_loop(self, loop): assert loop is None or isinstance(loop, events.AbstractEventLoop) + if self._loop is not None and loop is None and self._callbacks: + warnings.warn( + 'A loop is being detached ' + 'from a child watcher with pending handlers', + RuntimeWarning) + if self._loop is not None: self._loop.remove_signal_handler(signal.SIGCHLD) @@ -787,10 +840,6 @@ class SafeChildWatcher(BaseChildWatcher): big number of children (O(n) each time SIGCHLD is raised) """ - def __init__(self): - super().__init__() - self._callbacks = {} - def close(self): self._callbacks.clear() super().close() @@ -802,6 +851,11 @@ class SafeChildWatcher(BaseChildWatcher): pass def add_child_handler(self, pid, callback, *args): + if self._loop is None: + raise RuntimeError( + "Cannot add child handler, " + "the child watcher does not have a loop attached") + self._callbacks[pid] = (callback, args) # Prevent a race condition in case the child is already terminated. @@ -866,7 +920,6 @@ class FastChildWatcher(BaseChildWatcher): """ def __init__(self): super().__init__() - self._callbacks = {} self._lock = threading.Lock() self._zombies = {} self._forks = 0 @@ -898,6 +951,12 @@ class FastChildWatcher(BaseChildWatcher): def add_child_handler(self, pid, callback, *args): assert self._forks, "Must use the context manager" + + if self._loop is None: + raise RuntimeError( + "Cannot add child handler, " + "the child watcher does not have a loop attached") + with self._lock: try: returncode = self._zombies.pop(pid) diff --git a/Lib/calendar.py b/Lib/calendar.py index 5244b8d..76cf8de 100644 --- a/Lib/calendar.py +++ b/Lib/calendar.py @@ -8,6 +8,7 @@ set the first day of the week (0=Monday, 6=Sunday).""" import sys import datetime import locale as _locale +from itertools import repeat __all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday", "firstweekday", "isleap", "leapdays", "weekday", "monthrange", @@ -174,22 +175,20 @@ class Calendar(object): Like itermonthdates(), but will yield (day number, weekday number) tuples. For days outside the specified month the day number is 0. """ - for date in self.itermonthdates(year, month): - if date.month != month: - yield (0, date.weekday()) - else: - yield (date.day, date.weekday()) + for i, d in enumerate(self.itermonthdays(year, month), self.firstweekday): + yield d, i % 7 def itermonthdays(self, year, month): """ Like itermonthdates(), but will yield day numbers. For days outside the specified month the day number is 0. """ - for date in self.itermonthdates(year, month): - if date.month != month: - yield 0 - else: - yield date.day + day1, ndays = monthrange(year, month) + days_before = (day1 - self.firstweekday) % 7 + yield from repeat(0, days_before) + yield from range(1, ndays + 1) + days_after = (self.firstweekday - day1 - ndays) % 7 + yield from repeat(0, days_after) def monthdatescalendar(self, year, month): """ @@ -313,7 +312,7 @@ class TextCalendar(Calendar): """ Print a month's calendar. """ - print(self.formatmonth(theyear, themonth, w, l), end=' ') + print(self.formatmonth(theyear, themonth, w, l), end='') def formatmonth(self, theyear, themonth, w=0, l=0): """ diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index ebe8ee7..bea811d 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -189,6 +189,7 @@ class OrderedDict(dict): link = self.__map[key] link_prev = link.prev link_next = link.next + soft_link = link_next.prev link_prev.next = link_next link_next.prev = link_prev root = self.__root @@ -196,12 +197,14 @@ class OrderedDict(dict): last = root.prev link.prev = last link.next = root - last.next = root.prev = link + root.prev = soft_link + last.next = link else: first = root.next link.prev = root link.next = first - root.next = first.prev = link + first.prev = soft_link + root.next = link def __sizeof__(self): sizeof = _sys.getsizeof diff --git a/Lib/compileall.py b/Lib/compileall.py index 0cc0c1d..2d4c523 100644 --- a/Lib/compileall.py +++ b/Lib/compileall.py @@ -66,13 +66,13 @@ def compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, optimize: optimization level or -1 for level of the interpreter workers: maximum number of parallel workers """ + if workers is not None and workers < 0: + raise ValueError('workers must be greater or equal to 0') + files = _walk_dir(dir, quiet=quiet, maxlevels=maxlevels, ddir=ddir) success = 1 if workers is not None and workers != 1 and ProcessPoolExecutor is not None: - if workers < 0: - raise ValueError('workers must be greater or equal to 0') - workers = workers or None with ProcessPoolExecutor(max_workers=workers) as executor: results = executor.map(partial(compile_file, diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py index 590edba..8f1d714 100644 --- a/Lib/concurrent/futures/process.py +++ b/Lib/concurrent/futures/process.py @@ -63,7 +63,7 @@ import traceback # interpreter to exit when there are still idle processes in a # ProcessPoolExecutor's process pool (i.e. shutdown() was not called). However, # allowing workers to die with the interpreter has two undesirable properties: -# - The workers would still be running during interpretor shutdown, +# - The workers would still be running during interpreter shutdown, # meaning that they would fail in unpredictable ways. # - The workers could be killed while evaluating a work item, which could # be bad if the callable being evaluated has external side-effects e.g. diff --git a/Lib/concurrent/futures/thread.py b/Lib/concurrent/futures/thread.py index 3ae442d..9c3aec9 100644 --- a/Lib/concurrent/futures/thread.py +++ b/Lib/concurrent/futures/thread.py @@ -16,7 +16,7 @@ import os # to exit when there are still idle threads in a ThreadPoolExecutor's thread # pool (i.e. shutdown() was not called). However, allowing workers to die with # the interpreter has two undesirable properties: -# - The workers would still be running during interpretor shutdown, +# - The workers would still be running during interpreter shutdown, # meaning that they would fail in unpredictable ways. # - The workers could be killed while evaluating a work item, which could # be bad if the callable being evaluated has external side-effects e.g. diff --git a/Lib/configparser.py b/Lib/configparser.py index 3a9fb56..af5aca1 100644 --- a/Lib/configparser.py +++ b/Lib/configparser.py @@ -1102,10 +1102,10 @@ class RawConfigParser(MutableMapping): # raised at the end of the file and will contain a # list of all bogus lines e = self._handle_error(e, fpname, lineno, line) + self._join_multiline_values() # if any parsing errors occurred, raise an exception if e: raise e - self._join_multiline_values() def _join_multiline_values(self): defaults = self.default_section, self._defaults diff --git a/Lib/contextlib.py b/Lib/contextlib.py index 5377987..d44edd6 100644 --- a/Lib/contextlib.py +++ b/Lib/contextlib.py @@ -82,6 +82,9 @@ class _GeneratorContextManager(ContextDecorator): # raised inside the "with" statement from being suppressed. return exc is not value except RuntimeError as exc: + # Don't re-raise the passed in exception. (issue27112) + if exc is value: + return False # Likewise, avoid suppressing if a StopIteration exception # was passed to throw() and later wrapped into a RuntimeError # (see PEP 479). diff --git a/Lib/ctypes/macholib/dyld.py b/Lib/ctypes/macholib/dyld.py index dc7052e..c158e67 100644 --- a/Lib/ctypes/macholib/dyld.py +++ b/Lib/ctypes/macholib/dyld.py @@ -135,10 +135,11 @@ def framework_find(fn, executable_path=None, env=None): Python.framework Python.framework/Versions/Current """ + error = None try: return dyld_find(fn, executable_path=executable_path, env=env) except ValueError as e: - pass + error = e fmwk_index = fn.rfind('.framework') if fmwk_index == -1: fmwk_index = len(fn) @@ -147,7 +148,7 @@ def framework_find(fn, executable_path=None, env=None): try: return dyld_find(fn, executable_path=executable_path, env=env) except ValueError: - raise e + raise error def test_dyld_find(): env = {} diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py index 3824f7c..8eac58f 100644 --- a/Lib/ctypes/test/test_callbacks.py +++ b/Lib/ctypes/test/test_callbacks.py @@ -1,3 +1,4 @@ +import functools import unittest from ctypes import * from ctypes.test import need_symbol @@ -240,6 +241,40 @@ class SampleCallbacksTestCase(unittest.TestCase): self.assertEqual(result, callback(1.1*1.1, 2.2*2.2, 3.3*3.3, 4.4*4.4, 5.5*5.5)) + def test_callback_large_struct(self): + class Check: pass + + class X(Structure): + _fields_ = [ + ('first', c_ulong), + ('second', c_ulong), + ('third', c_ulong), + ] + + def callback(check, s): + check.first = s.first + check.second = s.second + check.third = s.third + + check = Check() + s = X() + s.first = 0xdeadbeef + s.second = 0xcafebabe + s.third = 0x0bad1dea + + CALLBACK = CFUNCTYPE(None, X) + dll = CDLL(_ctypes_test.__file__) + func = dll._testfunc_cbk_large_struct + func.argtypes = (X, CALLBACK) + func.restype = None + # the function just calls the callback with the passed structure + func(s, CALLBACK(functools.partial(callback, check))) + self.assertEqual(check.first, s.first) + self.assertEqual(check.second, s.second) + self.assertEqual(check.third, s.third) + self.assertEqual(check.first, 0xdeadbeef) + self.assertEqual(check.second, 0xcafebabe) + self.assertEqual(check.third, 0x0bad1dea) ################################################################ diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py index e6bc19d..94b0b89 100644 --- a/Lib/ctypes/test/test_find.py +++ b/Lib/ctypes/test/test_find.py @@ -1,5 +1,5 @@ import unittest -import os +import os.path import sys import test.support from ctypes import * @@ -64,28 +64,10 @@ class Test_OpenGL_libs(unittest.TestCase): self.skipTest('lib_gle not available') self.gle.gleGetJoinStyle -# On platforms where the default shared library suffix is '.so', -# at least some libraries can be loaded as attributes of the cdll -# object, since ctypes now tries loading the lib again -# with '.so' appended of the first try fails. -# -# Won't work for libc, unfortunately. OTOH, it isn't -# needed for libc since this is already mapped into the current -# process (?) -# -# On MAC OSX, it won't work either, because dlopen() needs a full path, -# and the default suffix is either none or '.dylib'. -@unittest.skip('test disabled') -@unittest.skipUnless(os.name=="posix" and sys.platform != "darwin", - 'test not suitable for this platform') -class LoadLibs(unittest.TestCase): - def test_libm(self): - import math - libm = cdll.libm - sqrt = libm.sqrt - sqrt.argtypes = (c_double,) - sqrt.restype = c_double - self.assertEqual(sqrt(2), math.sqrt(2)) + def test_shell_injection(self): + result = find_library('; echo Hello shell > ' + test.support.TESTFN) + self.assertFalse(os.path.lexists(test.support.TESTFN)) + self.assertIsNone(result) if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_frombuffer.py b/Lib/ctypes/test/test_frombuffer.py index 29c5a19..7ab38f1 100644 --- a/Lib/ctypes/test/test_frombuffer.py +++ b/Lib/ctypes/test/test_frombuffer.py @@ -120,5 +120,13 @@ class Test(unittest.TestCase): with self.assertRaises(ValueError): (c_int * 1).from_buffer_copy(a, 16 * sizeof(c_int)) + def test_abstract(self): + self.assertRaises(TypeError, Array.from_buffer, bytearray(10)) + self.assertRaises(TypeError, Structure.from_buffer, bytearray(10)) + self.assertRaises(TypeError, Union.from_buffer, bytearray(10)) + self.assertRaises(TypeError, Array.from_buffer_copy, b"123") + self.assertRaises(TypeError, Structure.from_buffer_copy, b"123") + self.assertRaises(TypeError, Union.from_buffer_copy, b"123") + if __name__ == '__main__': unittest.main() diff --git a/Lib/ctypes/test/test_numbers.py b/Lib/ctypes/test/test_numbers.py index 2afca26..ba4f563 100644 --- a/Lib/ctypes/test/test_numbers.py +++ b/Lib/ctypes/test/test_numbers.py @@ -76,7 +76,7 @@ class NumberTestCase(unittest.TestCase): self.assertEqual(t(v).value, truth(v)) def test_typeerror(self): - # Only numbers are allowed in the contructor, + # Only numbers are allowed in the constructor, # otherwise TypeError is raised for t in signed_types + unsigned_types + float_types: self.assertRaises(TypeError, t, "") diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py index 84d456c..c4a651c 100644 --- a/Lib/ctypes/test/test_structures.py +++ b/Lib/ctypes/test/test_structures.py @@ -106,7 +106,7 @@ class StructureTestCase(unittest.TestCase): self.assertEqual(alignment(XX), alignment(X)) self.assertEqual(sizeof(XX), calcsize("3s 3s 0s")) - def test_emtpy(self): + def test_empty(self): # I had problems with these # # Although these are pathological cases: Empty Structures! @@ -227,10 +227,10 @@ class StructureTestCase(unittest.TestCase): def test_conflicting_initializers(self): class POINT(Structure): - _fields_ = [("x", c_int), ("y", c_int)] + _fields_ = [("phi", c_float), ("rho", c_float)] # conflicting positional and keyword args - self.assertRaises(TypeError, POINT, 2, 3, x=4) - self.assertRaises(TypeError, POINT, 2, 3, y=4) + self.assertRaisesRegex(TypeError, "phi", POINT, 2, 3, phi=4) + self.assertRaisesRegex(TypeError, "rho", POINT, 2, 3, rho=4) # too many initializers self.assertRaises(TypeError, POINT, 2, 3, 4) diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py index 8ff4aff..7684eab 100644 --- a/Lib/ctypes/util.py +++ b/Lib/ctypes/util.py @@ -1,6 +1,7 @@ -import sys, os -import contextlib +import os +import shutil import subprocess +import sys # find_library(name) returns the pathname of a library, or None. if os.name == "nt": @@ -94,28 +95,46 @@ elif os.name == "posix": import re, tempfile def _findLib_gcc(name): - expr = r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name) - fdout, ccout = tempfile.mkstemp() - os.close(fdout) - cmd = 'if type gcc >/dev/null 2>&1; then CC=gcc; elif type cc >/dev/null 2>&1; then CC=cc;else exit 10; fi;' \ - 'LANG=C LC_ALL=C $CC -Wl,-t -o ' + ccout + ' 2>&1 -l' + name + # Run GCC's linker with the -t (aka --trace) option and examine the + # library name it prints out. The GCC command will fail because we + # haven't supplied a proper program with main(), but that does not + # matter. + expr = os.fsencode(r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name)) + + c_compiler = shutil.which('gcc') + if not c_compiler: + c_compiler = shutil.which('cc') + if not c_compiler: + # No C compiler available, give up + return None + + temp = tempfile.NamedTemporaryFile() try: - f = os.popen(cmd) + args = [c_compiler, '-Wl,-t', '-o', temp.name, '-l' + name] + + env = dict(os.environ) + env['LC_ALL'] = 'C' + env['LANG'] = 'C' try: - trace = f.read() - finally: - rv = f.close() + proc = subprocess.Popen(args, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + env=env) + except OSError: # E.g. bad executable + return None + with proc: + trace = proc.stdout.read() finally: try: - os.unlink(ccout) + temp.close() except FileNotFoundError: + # Raised if the file was already removed, which is the normal + # behaviour of GCC if linking fails pass - if rv == 10: - raise OSError('gcc or cc command not found') res = re.search(expr, trace) if not res: return None - return res.group(0) + return os.fsdecode(res.group(0)) if sys.platform == "sunos5": @@ -123,55 +142,75 @@ elif os.name == "posix": def _get_soname(f): if not f: return None - cmd = "/usr/ccs/bin/dump -Lpv 2>/dev/null " + f - with contextlib.closing(os.popen(cmd)) as f: - data = f.read() - res = re.search(r'\[.*\]\sSONAME\s+([^\s]+)', data) + + try: + proc = subprocess.Popen(("/usr/ccs/bin/dump", "-Lpv", f), + stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL) + except OSError: # E.g. command not found + return None + with proc: + data = proc.stdout.read() + res = re.search(br'\[.*\]\sSONAME\s+([^\s]+)', data) if not res: return None - return res.group(1) + return os.fsdecode(res.group(1)) else: def _get_soname(f): # assuming GNU binutils / ELF if not f: return None - cmd = 'if ! type objdump >/dev/null 2>&1; then exit 10; fi;' \ - "objdump -p -j .dynamic 2>/dev/null " + f - f = os.popen(cmd) + objdump = shutil.which('objdump') + if not objdump: + # objdump is not available, give up + return None + try: - dump = f.read() - finally: - rv = f.close() - if rv == 10: - raise OSError('objdump command not found') - res = re.search(r'\sSONAME\s+([^\s]+)', dump) + proc = subprocess.Popen((objdump, '-p', '-j', '.dynamic', f), + stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL) + except OSError: # E.g. bad executable + return None + with proc: + dump = proc.stdout.read() + res = re.search(br'\sSONAME\s+([^\s]+)', dump) if not res: return None - return res.group(1) + return os.fsdecode(res.group(1)) if sys.platform.startswith(("freebsd", "openbsd", "dragonfly")): def _num_version(libname): # "libxyz.so.MAJOR.MINOR" => [ MAJOR, MINOR ] - parts = libname.split(".") + parts = libname.split(b".") nums = [] try: while parts: nums.insert(0, int(parts.pop())) except ValueError: pass - return nums or [ sys.maxsize ] + return nums or [sys.maxsize] def find_library(name): ename = re.escape(name) expr = r':-l%s\.\S+ => \S*/(lib%s\.\S+)' % (ename, ename) - with contextlib.closing(os.popen('/sbin/ldconfig -r 2>/dev/null')) as f: - data = f.read() + expr = os.fsencode(expr) + + try: + proc = subprocess.Popen(('/sbin/ldconfig', '-r'), + stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL) + except OSError: # E.g. command not found + data = b'' + else: + with proc: + data = proc.stdout.read() + res = re.findall(expr, data) if not res: return _get_soname(_findLib_gcc(name)) res.sort(key=_num_version) - return res[-1] + return os.fsdecode(res[-1]) elif sys.platform == "sunos5": @@ -179,17 +218,27 @@ elif os.name == "posix": if not os.path.exists('/usr/bin/crle'): return None + env = dict(os.environ) + env['LC_ALL'] = 'C' + if is64: - cmd = 'env LC_ALL=C /usr/bin/crle -64 2>/dev/null' + args = ('/usr/bin/crle', '-64') else: - cmd = 'env LC_ALL=C /usr/bin/crle 2>/dev/null' + args = ('/usr/bin/crle',) paths = None - with contextlib.closing(os.popen(cmd)) as f: - for line in f.readlines(): + try: + proc = subprocess.Popen(args, + stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL, + env=env) + except OSError: # E.g. bad executable + return None + with proc: + for line in proc.stdout: line = line.strip() - if line.startswith('Default Library Path (ELF):'): - paths = line.split()[4] + if line.startswith(b'Default Library Path (ELF):'): + paths = os.fsdecode(line).split()[4] if not paths: return None diff --git a/Lib/curses/ascii.py b/Lib/curses/ascii.py index 800fd8b..5b243be 100644 --- a/Lib/curses/ascii.py +++ b/Lib/curses/ascii.py @@ -53,19 +53,19 @@ def _ctoi(c): def isalnum(c): return isalpha(c) or isdigit(c) def isalpha(c): return isupper(c) or islower(c) -def isascii(c): return _ctoi(c) <= 127 # ? -def isblank(c): return _ctoi(c) in (8,32) -def iscntrl(c): return _ctoi(c) <= 31 -def isdigit(c): return _ctoi(c) >= 48 and _ctoi(c) <= 57 -def isgraph(c): return _ctoi(c) >= 33 and _ctoi(c) <= 126 -def islower(c): return _ctoi(c) >= 97 and _ctoi(c) <= 122 -def isprint(c): return _ctoi(c) >= 32 and _ctoi(c) <= 126 -def ispunct(c): return _ctoi(c) != 32 and not isalnum(c) +def isascii(c): return 0 <= _ctoi(c) <= 127 # ? +def isblank(c): return _ctoi(c) in (9, 32) +def iscntrl(c): return 0 <= _ctoi(c) <= 31 or _ctoi(c) == 127 +def isdigit(c): return 48 <= _ctoi(c) <= 57 +def isgraph(c): return 33 <= _ctoi(c) <= 126 +def islower(c): return 97 <= _ctoi(c) <= 122 +def isprint(c): return 32 <= _ctoi(c) <= 126 +def ispunct(c): return isgraph(c) and not isalnum(c) def isspace(c): return _ctoi(c) in (9, 10, 11, 12, 13, 32) -def isupper(c): return _ctoi(c) >= 65 and _ctoi(c) <= 90 +def isupper(c): return 65 <= _ctoi(c) <= 90 def isxdigit(c): return isdigit(c) or \ - (_ctoi(c) >= 65 and _ctoi(c) <= 70) or (_ctoi(c) >= 97 and _ctoi(c) <= 102) -def isctrl(c): return _ctoi(c) < 32 + (65 <= _ctoi(c) <= 70) or (97 <= _ctoi(c) <= 102) +def isctrl(c): return 0 <= _ctoi(c) < 32 def ismeta(c): return _ctoi(c) > 127 def ascii(c): diff --git a/Lib/curses/textpad.py b/Lib/curses/textpad.py index 2b4b4cb..2079953 100644 --- a/Lib/curses/textpad.py +++ b/Lib/curses/textpad.py @@ -43,16 +43,20 @@ class Textbox: def __init__(self, win, insert_mode=False): self.win = win self.insert_mode = insert_mode - (self.maxy, self.maxx) = win.getmaxyx() - self.maxy = self.maxy - 1 - self.maxx = self.maxx - 1 + self._update_max_yx() self.stripspaces = 1 self.lastcmd = None win.keypad(1) + def _update_max_yx(self): + maxy, maxx = self.win.getmaxyx() + self.maxy = maxy - 1 + self.maxx = maxx - 1 + def _end_of_line(self, y): """Go to the location of the first blank on the given line, returning the index of the last non-blank character.""" + self._update_max_yx() last = self.maxx while True: if curses.ascii.ascii(self.win.inch(y, last)) != curses.ascii.SP: @@ -64,8 +68,10 @@ class Textbox: return last def _insert_printable_char(self, ch): + self._update_max_yx() (y, x) = self.win.getyx() - if y < self.maxy or x < self.maxx: + backyx = None + while y < self.maxy or x < self.maxx: if self.insert_mode: oldch = self.win.inch() # The try-catch ignores the error we trigger from some curses @@ -75,14 +81,20 @@ class Textbox: self.win.addch(ch) except curses.error: pass - if self.insert_mode: - (backy, backx) = self.win.getyx() - if curses.ascii.isprint(oldch): - self._insert_printable_char(oldch) - self.win.move(backy, backx) + if not self.insert_mode or not curses.ascii.isprint(oldch): + break + ch = oldch + (y, x) = self.win.getyx() + # Remember where to put the cursor back since we are in insert_mode + if backyx is None: + backyx = y, x + + if backyx is not None: + self.win.move(*backyx) def do_command(self, ch): "Process a single editing command." + self._update_max_yx() (y, x) = self.win.getyx() self.lastcmd = ch if curses.ascii.isprint(ch): @@ -148,6 +160,7 @@ class Textbox: def gather(self): "Collect and return the contents of the window." result = "" + self._update_max_yx() for y in range(self.maxy+1): self.win.move(y, 0) stop = self._end_of_line(y) diff --git a/Lib/datetime.py b/Lib/datetime.py index 2f94218..a2178c7 100644 --- a/Lib/datetime.py +++ b/Lib/datetime.py @@ -706,7 +706,7 @@ class date: @classmethod def fromordinal(cls, n): - """Contruct a date from a proleptic Gregorian ordinal. + """Construct a date from a proleptic Gregorian ordinal. January 1 of year 1 is day 1. Only the year, month and day are non-zero in the result. diff --git a/Lib/dbm/dumb.py b/Lib/dbm/dumb.py index 7777a7c..e6d6505 100644 --- a/Lib/dbm/dumb.py +++ b/Lib/dbm/dumb.py @@ -47,6 +47,7 @@ class _Database(collections.MutableMapping): def __init__(self, filebasename, mode, flag='c'): self._mode = mode + self._readonly = (flag == 'r') # The directory file is a text file. Each line looks like # "%r, (%d, %d)\n" % (key, pos, siz) @@ -91,8 +92,9 @@ class _Database(collections.MutableMapping): try: f = _io.open(self._dirfile, 'r', encoding="Latin-1") except OSError: - pass + self._modified = not self._readonly else: + self._modified = False with f: for line in f: line = line.rstrip() @@ -107,7 +109,7 @@ class _Database(collections.MutableMapping): # CAUTION: It's vital that _commit() succeed, and _commit() can # be called from __del__(). Therefore we must never reference a # global in this routine. - if self._index is None: + if self._index is None or not self._modified: return # nothing to do try: @@ -187,6 +189,7 @@ class _Database(collections.MutableMapping): elif not isinstance(val, (bytes, bytearray)): raise TypeError("values must be bytes or strings") self._verify_open() + self._modified = True if key not in self._index: self._addkey(key, self._addval(val)) else: @@ -215,6 +218,7 @@ class _Database(collections.MutableMapping): if isinstance(key, str): key = key.encode('utf-8') self._verify_open() + self._modified = True # The blocks used by the associated value are lost. del self._index[key] # XXX It's unclear why we do a _commit() here (the code always diff --git a/Lib/distutils/_msvccompiler.py b/Lib/distutils/_msvccompiler.py index d0ba7d6..b120273 100644 --- a/Lib/distutils/_msvccompiler.py +++ b/Lib/distutils/_msvccompiler.py @@ -86,11 +86,9 @@ def _get_vc_env(plat_spec): try: out = subprocess.check_output( - '"{}" {} && set'.format(vcvarsall, plat_spec), - shell=True, + 'cmd /u /c "{}" {} && set'.format(vcvarsall, plat_spec), stderr=subprocess.STDOUT, - universal_newlines=True, - ) + ).decode('utf-16le', errors='replace') except subprocess.CalledProcessError as exc: log.error(exc.output) raise DistutilsPlatformError("Error executing {}" diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py index f03a4e3..7c278ef 100644 --- a/Lib/distutils/command/build_ext.py +++ b/Lib/distutils/command/build_ext.py @@ -166,6 +166,7 @@ class build_ext(Command): self.include_dirs.append(plat_py_include) self.ensure_string_list('libraries') + self.ensure_string_list('link_objects') # Life is easier if we're not forever checking for None, so # simplify these options to empty lists if unset diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py index 0afcbf2..1fd574a 100644 --- a/Lib/distutils/command/upload.py +++ b/Lib/distutils/command/upload.py @@ -91,7 +91,7 @@ class upload(PyPIRCCommand): data = { # action ':action': 'file_upload', - 'protcol_version': '1', + 'protocol_version': '1', # identify release 'name': meta.get_name(), diff --git a/Lib/distutils/command/wininst-14.0-amd64.exe b/Lib/distutils/command/wininst-14.0-amd64.exe index 22299543a97ffc1525a3b1c778cb158d6c6430ad..253c2e2eccefa79393827f44f85680536906574a 100644 GIT binary patch delta 117970 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

    )t?oHVn5Sq%T?GqR|24h(;z`zbGppoRWXDn~U12 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 Q;XT#&G~W}hI31h(Fa4nPXaE2J delta 119901 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ൣ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 diff --git a/Lib/distutils/command/wininst-14.0.exe b/Lib/distutils/command/wininst-14.0.exe index 0dac1103d98db0af1e9027c41fe921136c5f6396..46f5f356676c800f99742deb6bf4c0a96aa166c0 100644 GIT binary patch delta 106589 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 z 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: + # XXX this error message isn't quite right when we use splitlines + # (see issue 22233), but I'm not sure what should happen here. raise ValueError("Header values may not contain linefeed " "or carriage return characters") return (name, self.header_factory(name, value)) @@ -150,7 +155,9 @@ class EmailPolicy(Policy): """ if hasattr(value, 'name'): return value - return self.header_factory(name, ''.join(value.splitlines())) + # We can't use splitlines here because it splits on more than \r and \n. + value = ''.join(linesep_splitter.split(value)) + return self.header_factory(name, value) def fold(self, name, value): """+ diff --git a/Lib/email/quoprimime.py b/Lib/email/quoprimime.py index c1fe2b4..c543eb5 100644 --- a/Lib/email/quoprimime.py +++ b/Lib/email/quoprimime.py @@ -292,7 +292,7 @@ def header_decode(s): """Decode a string encoded with RFC 2045 MIME header `Q' encoding. This function does not parse a full MIME header value encoded with - quoted-printable (like =?iso-8895-1?q?Hello_World?=) -- please use + quoted-printable (like =?iso-8859-1?q?Hello_World?=) -- please use the high level email.header class for that functionality. """ s = s.replace('_', ' ') diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py index 08aedf9..25c5567 100644 --- a/Lib/ensurepip/__init__.py +++ b/Lib/ensurepip/__init__.py @@ -8,9 +8,9 @@ import tempfile __all__ = ["version", "bootstrap"] -_SETUPTOOLS_VERSION = "20.10.1" +_SETUPTOOLS_VERSION = "28.8.0" -_PIP_VERSION = "8.1.1" +_PIP_VERSION = "9.0.1" # pip currently requires ssl support, so we try to provide a nicer # error message when that is missing (http://bugs.python.org/issue19744) diff --git a/Lib/ensurepip/_bundled/pip-8.1.1-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/pip-8.1.1-py2.py3-none-any.whl deleted file mode 100644 index 8632eb7af04c6337f0442a878ecb99cd2b1a67e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1197664 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%0DCJ(hMV9Sq883g5#Y! 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

      BBZp7+`2nk|0D>!vwe@=$Da7v5$r2VS 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≦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 z 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%0AImYhlviJWc5oE;z|0MYj;!nXRweU`AK0JM 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

      (q(z~w*qBb=|&aqR5%Q9;W%J#=i!8cU? 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

      D1T1J8Q< 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∈>n)eLB$?*yd1_}A0)FI=p+q>N)QoE7ol3Qz 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%0AA>KQ3o|(HvR~ zbLzbGR0>;l{Gkhgee;_Tfc43*L{f&Ru3p=i&u2vax~|tB`p-V_jog8y^#Ic?jjicQ zT2s9Klle8d$ZPKYA&t%0X>80+V_U((lXU{r^HLnlZw~*EF;g17*P{lGs2(hLqdgso z+fviqQ3knZiX20{z!%OC8|V&E@3DJh2vNGq6UD|ghhCN^eG;C>y9tPO1x1~f6qI-^ zgR}HRM4z)Hsm>~Eg?pv%dL+(}jCHE=<6TjyuApBXRHsi&DC!#mp!eIO!A~KXN(`?Y zUl+D!o(Fzrbt`8gQ9Gcpw^juQC86wFArr@oMUi85NDi}zkK_Vij((v86N;=lSQAxf zP{)(6y=2TTr>yLt#yEnL+uoLomglT(yNA(zH%?U_Zg-2&K;U*J`S&GKBK5&uUV)32 zGU6Yn^}>!i^duztMCnsI9ut?030sXb@lJ<_%^;wIg+5P*42y)^ zb0NB-O7wkcUwwjzZTqY}GjHGJdu##63`f61+F&$dkK>@L+)~dMq+>w{9(h%vy#bE3 zn{hVA9`d4K*40IO#gXVCC+*l|z%#wNH!d5;L8+>zY9vRtrxfnV`=x(J8~S3raW%6a zbpXxf8%|CK+{!{}Izlk6!K?sW2UMb4k$3Omp~~Bkr{bG^N=OEy&USe)lS|h$rlcWh zIL(cq^HYo|o%58fx2<}u2OQd-L7g|O8v|WW&d)b7{@Fx||M!9z|AnXXuR;v`>!Di` zLN*5lihyzGyVJGV-knI(O+OKjHdgmGj+$)gIwQ75!U5t13 z(+WqBZ5;{Rg%G1~0|6^m*v4D&&(;U&u7V3^zotKuz1?Onh+S(3+t<F<|$Ecm!v~?u#?eLppe7YU})7(WEZA)5Fv@LQ)JGcn(OI`!ctSUq1FGjNn4%ma*jfeUfxWi38ASt@MT3`WsD)kTur z*K%8SE(i?rJU2ELa?C;+SfD{@aoej*HNvpi*7C~}QhUyuqF$SoyBbAn(gcS{X6 zCR}O1!3KW12ANYA@Cm#zA(A9SG|F3V6t^CtC1SZ2zUAX6iC)k?$cJu@PnLjr7>Jh| zq4QAd&!S@Y5`#a1%AE>p$n^jcpRZYR51g8$(IfN^4(~dkZ4SqIL2OB^^?sa4pYODk z=dheTY5SN2@MTWotI-ELan0DK+T~%fl1dQX02=g61i04QUk}Uzf5uHZ{zyG%MUD}a z>lJuz0iiMu1Kwo!yK}r5Z^G?0&FL0-K!V19hi!*v!#kWoo-y=9LaAs){#n9?ZRo2a z*Rg=XqHQD4PI1KitV&|us80IbwWtN|gbTzY=-Zbmn;TQYaWMaI;$H{OXWKX04X3!9 zfd_h;UHy0^d&IY-)7xsbXVvNaQsdD5k-*Q>0N(56yuu?Tc;NcW454Z2l&d|Ivby55 zT*mvX;%U1}z1z@pwUkh*mR?}?`NmLls6hTnGeK&nvW-^_eT8G(yu7bR+O{=GtpVy0 zD=rSf&l^K_I_cQ6FPmFIVqPZ#J^j8~ z^DTX$x9j}3jK#N<**xl^+hjezD6;%+^V#`7K@fz0K@ns#{sxh6J4pZ39=^1XzVqs@ za`boYi_m>?G1)TlS~A1r*4IbK-Oy-n#}nzV_-+@pWxMRVS()0qGHdz+p)D(K=HcMB z6tH=Cr(1I0^hlvCGa~SY0oGD}%emxwz#nAg6(Ug7t{f9@d)a0jiC>X;JI0!W@x8_; z(T!@nxf$(Nm|NE<+6~6ZZP);Uw}lHZ-I`$VuGvTK>Y|&#-(Rce-M6fav>#cSp?^*} zPh69+4QLGi!6Z>XYoos-7<$GF?`w?nq1t)gb?u6+a@Mf3ov&F;n6Ypn6;F4zeMvdKzW zY!1U4L~G(2KYQ{l9__j`4Yva z!-=>rB?MS3ms@%i$Yb9H3RgvQ{GbJ!^<$-Oc0P)-!u;xqPG_vnqO&I2Yjw1{HNU+a zisZVgB7|zUns-)$pjw>I4&E62>Q*T9LuD0abq!i>xx=rTd)85Iu-4wKSE{kxEaptO z$))u!MivpjBJss+wk?`c$0BwgOXS)eqpQSOCB4}_(q^=s)jV~LEIgi%k5=)TT%96~S6X)_QV8es2X|jJ=d5%ugJo@M}OBZ|N9-aMpwcoBEt#KF2#hSS;7O6q4 z*H=wL`hmDfcfaBmakQ7>fsppySpXYlHI`O9>|OGNxkH=Z+%nkN{;*x@LSzN2G0M+5 zxs#D*Ugv1R-70fy`>V*^2A3qEc+LoS*%D(gr?O66yr2o4;|O95hSft>4=XmsJBuMM zBqHHuPu7O(FYx>Jx?18!rLE=w2^yVJQi@)sS8=`%(K@&^67NTtZGv}vm?y$u7eSjN zo~y0=6j$5krj<@GQ>9Blp_e-Bm|b8=%V&zDKY~x|lL!z3b0mMAB5B_%X9Pk*@96~# zl%O%F=iM$;3KYSA4o-b}GX9CALY_2x*#UF#QUd}hpKUO+?JgJnvC+e@JI-d-`r_6s z=jcpMS9zmdIm&HmOVO%1g05ssS@c_*DqYV7U(;gkml7Tu^N|U3i9D!X==1Fv%Z|mK z6VM<{%pqdC&b+QKk=G*Mh7k2#$t(MCzfHvC-cWxB70xy))&<>wh_GVU8 zquk(?c~g>6Kd9Ic?2sH~v3jlV+&xi~)%rqd4|@>{y4RoB1<6IAVi zb33m$9!0%y7sk#&3etBK%Bk>`b#Jb8)dsg4deLy<2n?M3Aklpr8do*)PE{Av% zlBau#d)FPOX4xD$*Rvv0d@8s_XIt7A{BjeCRB?ECbCciknt`p`rO3|4XvFrE-<}@) zqE7ja<`Y4%SQm+IVNVHdzU)^vzepZ~f45wLOLkX-uL;UMwWFZ-0Q*~*rpnb?4mL?t z=Ou^ox|R0_#GmUF+H$xPX6R$33`@l?RW#VGc0_qZMa69zAI%-@E<-t>7za|yB?sq; zU|D9dWg_gcXQJw&3|+{t#)ohhWL_%x7Mm}PEz#=nVdK;glUbG;$k@FUl`40R_-6p@vpiLp z#0d+8yGsh8&po~TNnfD%*8ptwF&A{P-F++D_;@+}?OXKtc1g3pefvK(Y)XFpR+nM) zxBr+@L@|zgD^{6?`n>u1zvTo!hU(D2 zWT@H|wb{Wi(hnmG`gF1ER=R!cH_z(wQIbBKX9u2v#f<|HHMAre$OQR|tS(hfKJy15 z0Gh1f4lDYVkef?mrRu0FbQ;^w?gk|ebDAA|y*bir)eJXyMo~J>ny0EmGfWWTIijM8 zG3??X-}$<$s7ARU0);y6TIMmv$%Y3gT?yJwH+F|zXI?VRILBBmQ2G88qGLuNeRc6y zf!YLyQZ;f<^XdgNv|Byf5C?HP=Q^?WiPbXA5A`LFL{Ii)%3Vi|3BMb9vq1PH?(9aGrfsPx;I;+vN%7;44+w?NFq-Otc{yW(q~ zMCf$PR)oved}(gAMMdkrM8W# zhqo{k)1UnK;j#WH042x6vYET3JQdhpjcYpjXp(gY$QHY}?P`wNynY(=hzF=CL; zk}2=D215fBhY=wKURJ_1tVo zojam2F4yC-gt$eKM_~o90YpiiXP5>>w%`b8_S4iA7G%_ZoPYgVXaweu;ES&V{(8&b z1~;Xl2$;@(;w_R|!e3E#|0@th0+1GR+hZKs>xg}h#iiipTi?oPqWmf#Nl>(bb(MSbLsep%fj zf*myJ)TX&Z^*@07QkHTKrcIWqsHi)t^z%9~y`K_;%qY&*j%$)Z{gLcJUGbJwV{MBD zx5z#CV?)n3<5*43=+U{Zn#)fanCo`eF|cMJI0q{;loB+uJ_V_^ux7(op@XcMp4BQ8 zY&2#+O!YN~li1We8JEuPyW-lTlR%>4lA|F<&62Flab52iZN4TnU6^Acq^<{gnu>gU zX?G7AKz-da1B1JW;+vq{@}%rQZF#jX7cV(<57T`xO~EW~oU~P!Ez|UDZXx)*rfMZ8 zK$m8*j)JKMoEx}BA4U#3RvT8<(cxT9xkG8rFz%}!-${$szID6*^uRdor8UZl#h2iV z-Fo4djGiH}>+}frz1uE;x?`Lzow5B7bU}wUGh0aa1711WRA+4Owzh^PZO@E#y^%xb zNkFMD*T3Bn8zcTcO+&3+X>H!?d{s;`aRLqeb83Sh9ARx0IQC;NSSQDAs&3gJ-(%5y zY`@>?Tep?Gd|Q{>wFV`};;Ucs*-e1J%&}w>e5%Z&$(b;JyO1=@fSGB^3qTQtnVHG> z>z6Xe$tYm7@+}}Z)tVv+@w2vBOjJbADSZQjY=f0xoKyh};aQ;HRl`WRj%fgx(I^Ph zLPj_!0LMcAB2aYWp}i-}yM-N#60-CSoY}C9m>DdwOFY0wia82(x`I}00J8@>J!8|l#^%~2a+Xwpj8FQVD66NFj}r?v=v zAgXR*Uz-yZ`YO*wPPj-$OWC#{F9F7lx4D3HzE~tmBlJip35JMiMny_0qvsp}lnB51E>JFu%QI98gQ>$=NXFzJO)zDv4}S$wflF|E7zHHt1f3vj&qHaUuC7EL#s=z^imY^w2N2mAzDx5Wkcq zRm%H{6wnpSy*m)D3J!1c;X(`qM-s~?GkITw+znYY**^`si8_4%(#vyKD^1S9in`OW z-%mU+mdLf+bu!Q;u4Eb+b{Zh=!MCIk+~QFJ`}X6$o3EJK$VE`&<&}afA~}Ww;}G_) zwim{bT&JoCZp>pR1Tr`=8knv6ELFX~n{B^G=lNmIz z?*Nv3UpF}m+a0Lfi~v^{9=IlTGCn&XgS~{aR2X1MD^oild?!hcr@^r`VQ3An+88%* zqv?MW%&yuGnlC``@N^c4yeH^T=my6F42r(3Pw&$P47&u#3<`7tvRV~mfbY~!C^RBu zELy$>Z}(s^crKQl;7M5yp7aI)79J8kKc-aATLZyMz|`LoArHaNd-+jLW8;j((lL>p z{_WGJQ};GfoATH9khm?uVN_xaoL0fxoh3_~v{t?;v#Fz43oyjkh;^}B=2LgHky5eL zB3<12c5zwK|KbjZ({?^?3gRVCF>K-V!?)@FVGL_ivjL%ASXcLixps$QLde`Mni{p{ zd^px@AgT>sMv`a|k{X2m7=Lt;Kl6TY-s#@pl4$fdG$e)G%uy@@|09HEkRLPl`|;)l zF&c6&<^>l6nGe`_xm>0mr=$qr4AcOFD@2kIfY$IRaWsy zEFG{b7qo0CeWi>VVfhkVOgLp5BPcjnvSAVg^q^CqRbC9hjK_5r6aZI@A8Cfx?Edu| zZj4XLv@fX9D}Q{3vKOvju+fX#Vre>F($2DO_Ycf2#VU6yfQqmP4%En++{M*S z@mfU!hEtbCSa8PW&@as3M!sA&ztCaBZ|v|;;gxY`7kB?GB=udug^_fDr(DoDAKM^$ zFs`=xizxml@wBJs4kO*xIv#TjgZ1*Dg)vOdngkvW7xE#!R8gtQYnu)W-5$eGWV-BS z$FSQtXPOOav-Rk|R!hqs&K)Uf35_pSm$UT8c$DhQspQpH&8j2UtmruUE7&z4F#5s5Qn@Fs4L3`aoQH5$991M3?b6}hD19@pk_tP z3y?=AV2`KjSINGO2Wc3A&g%?ME=J%%_L!w3V!=8Xy`8H#1$bzde*#0l0X^pt+-N2P zZLk?$L*9o8BlZ~WqKba!4mSPcRWM{Tn1xJ2b))zQWQ2IP0gyyJFM>FFiNz7go3Z~NTF_YumWey&kBu5R4-57Qj`iqb|5 zTjev86!DrZ--c09a!7d;mcr}QR;|&mivH)nv-5c`FKFuO&tz;?NGl&VjZBh35i!0h zIBTB>mXL+jVa9!p^LYLY;Wj;g>ev%COwFOFlh%b!!AJOXv}R2&82DR5yMS)Dbe^NX z9h)`?#XPxnN^~H^zmF>RlUPZg^^t@Ke?$pW^tVqTyK8WN6X$5Y1$uuiQ9%7|U2z!^ zXav(5A=EwrGJxk5(S#C`91=oOLNYFun?VyaQ@-v8i=mA1l$oz>f;a#G3}Hf~966p5 zpveDxV+;};$VWvNV~o1}`DYo}Uv^~#$Hot|M;lc(oa8{{F=MdJ7%O|ljspWYaFiIS zj{lQ2c$5eeOkARjOcEB*F}p?YE&8J^uK46XMlmUf>w0C3a(uk!Z;f)i7X56GEXv7} zbVZpR?9D1nSkpv`(cd(8MZ>#2rU+#Av@yUu^cQ!n!xX}zX@f?K2D9l!Y!@j*kJ@r3 zZC;(5P4?j;MHf+rXV_g$r=n9ox1Z`_5i*{L(u|YH78*i?S!@h- ziZY1BpwaUMQFcn6yctdoQgBD1_^GK@b_c}$vzj6bg~>-ZN@D(0-6%txQY%)+sM)qv z7=6UZXLvT1$MV!8zs;sgBa7XaZLwv@7PXH`2$%KxIj+}QBHC+PjW@q8isR-m_{gd0 z)AKwQ^Dl)<*4j#G2KuLSxbDYt|ATWs+v*z!^k!TF`$Ud-t0?l6qy1(t+13{$X}Sg+ z-%V{xIo+6>8wbSaF8R<~J%rPhehGu0Yd*cv&HC-|mL-(dLc(uiP^>#87}nu>N-8>2 z0~cro5J7ZtI!O1~qrikoJo6FBiX}yYF%p!y0jco86$Tu9wS;B`?Rw;IR(3?w-zR9> zMAOCm>l?9U^xI!APtks7-4~kSs3AbKyaa0 zF*#Jm3J?Cxtq8x{&7rkG*}CHF{KH#)_+R!bXnlG${@Awr-o0Y!is!E8zi?(J#Fx$o z6h8Bg*-eewufnt@ywQtS&q>Cr*e_?3)$b%H?}D_Zj{>vc_wx-UgQ8oKbj6rP?zO3k zXDcWT1S#icWU0Q^xou}0_z;Cjj|{sBQ_>F!FqVd5Gf5hB<|{>-Zdv3RHSz13`KRob zF0b6gmg*fy1(Nm!kLzEltq5`2<)Vo#^HVL1&c3E6rNV4Yknd<`;UxR3?sMDtZB0(Z zS8<@(=3UwuS109T4wuaom`HhGX7ojW){O1y)4P@4V^prE+Ea&uu<$VDNT~l+Ol`Ba zF7V>LT9!L(#;oyh7x(Geyu*QQeDf!+W9#`>%FJDE<)%l+YGzNjhT^rG^F+h5-}mQ9 zsK?DD4Ne~A=6SZf%fRoci09YgtwNsvwA62xn1?j>@5co`ZLoas!4t^I5{!|D)8t8< z<=K6SgT!WX0mJHy44;C=X1dSL5=#ggCHJrNZbUJP9j22G?a9_)phLHQv<|Kda zFd1<8eEC~BW&Z;Hw2p+}@AelG1H5`zF34w zUk6mRarL`gMrgc(S`Ft7^QS$4K3lD%k}&sp;mwmQ$S{A8mYvk$yMfR!8t)6)CF9^?tYq-suTu10S_@4`A4aZRs|qznRREV+ z)h4r>Bqv429|0fyK~17-$<5dTI!7o0q2>}J&7n1#kIxqcEtAL!@D$L!3tpVJD4laYjTx#Y#yet(bYRrFGri)#sY6%m!21ATMY9@fBl*mo6B#$!Y7lQ+trl7nJ~Ln z?&tWVHfss+lt~I&?A2qIo+>fRKNRR!oRWNPjH2cjaPXxb_9=Aw+ay6h$cDlgdA$H( zPcbKRo)LP0iFG6=V}dbR=AHz?gugu2d@+)OG^7YI+RzGtSFuSD9}3KusG*Ipe^mKH zfyXr)i~&PJ@L|eq5z|Dc&@rP01e69aSFAyj=oy^Plv(h{1Fh2+paPs<5yu4_P$a&| z!9wB=O>jRhsXiH;8MuhUd*JUhJ*Yisbz;+r{ABOU++^=>(q7Mb^riA2)qE&DX#5+# z0Gp~SI)iy~t1ZgJ@vXuk?~LkA9zt7XC@}g3?{Na8ygA%JtT8 zbbmT1EmS_k;Z#~EZFm;aOge8x>^x#=7VTE|*71?OX2jBE>w|$K)OV`#uP|xPpW;zu zVHR;8Hg0=1e=_tNNrFb2{EknBvHtK-sR<|E9mdwiy|Z=CVIJihj=nVCaXBI#bJ2XL z^T9JKhv{oJGx)>nW-wT4YPlfU+A@HHu}Zc&n`iRm;#VUgZ0gpPsd_KbUoaR-`oMub zh}b5o1nui$dS^mcpCMk;kVl-7>WPen?pz0rStHXp7CwdK?*e`4D8Alwf!!IJi^6N> zOJrsd)QLo>rF-INdw>4zrOv*t`4qZQt={ta$)YE^zPo6@DZP=R``9CdxM|>8S-xgJ^`NIWkQhI#^BaTRt!V4Z_(ng%ny{z?hKoO)(k`%+ z{0R{5qJA|Tj(X6L1fZmA=8ur?UIuEEI$>}EfUqHO1Z*jV%<#)UP*?)OFPP_!qz2p1 zXEwYHP7}K0N%tkBBW&i0q9%f%tR0_@6Y5|UfPIMU{8eHq0dwHQU`rJA8y%h?3sPQi z2uxhyPhMD11&|D$fZgd~l%X>D#iVb@x!|0K)`zeLZTLk1-Xn#BFmZB?{+_leO<8FS zRAvN7jg$V-|FZ+HhT&q%)ry=GA<;?xJR%()J>VpyNrdzl5Zy^vroVXHg;-F<~GB$wc3R!#aw08l=$LofO zKjAtSY}X(g128KYzk_uy$PsR6H`U7!9+^*o_(gwBl!jZt^IW#QB;l+Jjk{?aKzzp8 z;4`T)5QWU?HKr)AnUFyu&|iszt+8i(@0x;qm8PDQPC@^OJZ-1ga0SbQqk`TCG67UF z>D7f@at7)dpE~FoQPI4Sin8yA&K*hR*tRc#vL`XUSW#}95PRsaba_2<=v;bHA`mH}N!+Dye_+XQs@;cq?j!j6wz2&*nq4wk8LY%;&44#3z_Nf2TP` z77ZP9!}7;xA{A(IN@A5+nUbmdTm=o{GTXK1!|}Go2F*HgEvGdaZB1M~iE0Y^rsrUe z=|N)MX6&sh*xy36#qBlP66L3NPI*|lWf&-3l1V1N6<4mBmM>C5)Ca=iy1%qu_4V*9 zv><0ru6(zQ&a*pAw5g#ky9pt`^AN?Q_(;}8x+fJ9iLqGr_$O||JS9@vO4GE>H|~ZM z!!fS2-%>Hnc`ay~EQ{tfHw_exQi7a0D&!E7vf^?+eZWR7oj51L@vE-RIHhArHTKJN zXB5wf*_!&x(=(bSGfYqLO=rD)$Bo86sd5_i51;vEu0NC;C$B9qG*kIfBZHN`$gG$^ z7GL7iLIkisCXJQ9o-C>PzBjQ0kY~Sp5^wlW!6@+!Pk5ifCWc5@4WI=L`B9fc6aIOM z46(7HURTu|w2<}U<>OXS!fF97RyJ~Su*Lm0_b^-$LP%67Y(Cevaiq%hH5gP4387K3 zSsNJ!$}PZ9u?P}?2|s_9j+H{R%6z|+reLOiEw#wzL*FV*r*E}RyaV|XB4L4e8Sz67 z`21+;^yKk8tXWdaT}t5)<9a_Lea63eWPS?VaibQX|_IHg@5uwz5DFOZ|Sy{LZ26cL%;S0nb=Z^nJ;jl>6TNa?Y0%+QPnx~=%K$X zRv%XYTNp@bh{)xeb8C)p!gv;?o|(ntYzmWWtOUEPclx$t$P6YK@P}jNrf+f;XED>S2d|KydLp*)H|F5lQXX1_R>M{Mb~#>3{vq@&)r`I__0rx@SQ zxQ2q3b`HhuA?opJK$zfs%D$M~YpT;u%X^*0$>72>4dV2a_8@-_JtO6q$|ZMExF`|F zABUf5I}z$byK1jZO=os&D(LNgX#b@kuj$^e(p{i5!rFG!v9dUA9G$lni|zwAWrkK4 zL?4gN5mXM=w=8$C_P}`FD^B87H&5c=l+@mcCKQ;R$n0#D8&VXN%j2X?f*!NSQ2%`1V%2j8Js$F=aT;x7W0N)4=SuPsId394Z&A| zo@gW)*vFAnpc!4nnN6aRDgu#Z#F$aS2tFW@^^p>b7)0ooR@4y_-r+L{EP!MY4d_8A zO^5~65O4(g1YgWg*Jc(Vlqq4@DxnTgO-yPK7Qm7v@~?6qEsnfo&l-my_Y+nZWRoG~Bkxi3lbR8T%(K=A#7pn;#Z4@>?H*z4$h_m2G_g`cRl4eYNA%f^p| zei+$%v(vd6lgGmAn?-x4Ui!9a9k-W#l@}@+@5-oXP0vc9?L@V|R#-3)U24bI$>P?Y zHPXKO#%gH;w4>A}Tk|ThS zuT}Zm-#yhM#ML8RAn4~&_r*%q*?Vr}xm$ zc#K$C%*VO+{Y*pYHJz$TZ|nVe!rpTLO-FhAQp!}2$W+eJd*^aRG6SQy@X@cuwz1Aspp*XG) zC&;gqB?qf1kx@9fpr48#jv=%4&)5~n%jFElth+>c4LvH0ffY*k76Vk-Xg<=BTFCG# z`G*P|Ip8HCY?dr8cxZ$J<@wA7L}_tx{vZO$L)ricLHUOqp?puykw;SN;M_W@Fd1J1 zoFUWYLJm3x_G!)6XjkO&!SMW^_0Z0znI~6LWou>x`rWc@<`-na>rH>*W0zQKcTpB( ze?Ny>5~&JYVe5NOSG`!sPPLkqf;0Nn1yylvim_}SX`rPD_)=G;aY|1#J-$lUDFRJ+ zTWe%vSYGWC8i|?2GU6U_KiE+PAhAn@;WWL)f zUjMwenLI5k?DJZFy(<5jf}ilY>pqH?^7pTRYD+M4${^4)OmYUeKO4#zVu>U}e<+~$ zSf`9wJ}U3P-;iH|Vhi{|2z0|jds9L}B2xjjMln)4ZGZ|XQH9gT%a7xbD?z|4BMZX8 zBMb>l10}#HF!Fu4Ntj)CB@B0X66PtPKidW&9@UTIXaMQS4l3t3z!}-5OEbB=5@|v{ z1m2vHui3K%eTNhomZN1kc@3xpPLwHOcmskhxc-8|xI7EAO5Abul`v{OFwB&71kEKw zoOrhKLbDK3xpEgP&&+?%EzumN!y%8y%hn(2d8Ki@q=0Ahb9iivnf}In{P}ozb775X zAaI0Ay%2~Y%X5R}<#k87M)6!E-u@24aJ=Bb<=;Ubs2x%Kn#F5F@XHf~q=z!-a7nzX zH5RcTC$ZhS(Bwg31uoUDkIg543E$f$2zuO*!C6&D+B=v^?gpyB27ftzQ+D~)X^yuJ z`&tqGY&RR%*ZseNRVWT>JF~l*@d0^j-)*eokd!7tc#0N^*{=3Te8Xu zU6FFt-0q6j!qt94{#bh>0vt8Y9V>TY{1xmLuBwz zOWW$2XL=H&n95hdLjh_xxc%Bur%)Rp;gjrD_Ku}GAzT#aLR}ZVZVbKS=BSy>1zUev z0kL9Z$YA@qx-CvTbyK0poX}Vcck56=UUA``a#_gJB3Iay+>vI7ov8q&p(h+5`$vPJ{-tI`>WMMHdLeIgshY;paxf{jU7-_nSug44>~!8Qqun4!$z$?Q}m7A?hR~APH+7 z{@=uIn^@3L2^_GE_^IUx2g2XLk~D|>*ii|~nXs~~(hIi?$-r(fZ)kN05GP>6&*^CZ z?FCBQn2UA!D<>n#vl(NY>0pr1HE*8Psy7f=vk^@D`QI&uo5JP(#N38 z9OQUO6Z~6Xd8RH^QOU^(#vBFlkxmu@-Xc*$|E5#NKQ%g!dWyWC{;Krzbn}{X5S1MK zfe1YQ1y#6<8mDhtDun|*-oCta(e6k1r9z6~qp~HrJ`&Gf={b*nu*8Y0l|c&VBljNr z>7ehy-FJ#EiG>lspx^V{pj^xW#L1V5lHBy;Y2&miFPXbOwoE>ZDXNeDWqz^r@*MZt zjv8?0i#T%20T7T-qKB7WAx%Jod!#D0fyif&eAu(H`*6OJNWVkWo?jc7A+VZ832kW= zd+(ij4ec&T@1UkN-0Y;7phS*TN#0d$mi-W6*Pc9+POgnuSE|`WiU~o^W$m?^896M) z_z|R%c&T`3jU({|`5%Tt#-j)aAVzo4#o)KeV~&LD0Cb_r|Uj z^w{Ad{LG^o4MY;!`cf=bd}s%aO%Ug+3IAJXd2&(DJjEzN=JYZ&im??OVJq6r&Heb8 zO#W<|Ihr?2yT3L?dRjehR^IlDX{&3zAIl~~ciXP9Zu|oF#Qe;~a8CBD z^h=dD_L;Leyp3nH<112bAnvLT+OXvhInv87u!1x&2nqlI00cm>oufo8BYm71AOL_V z5C8z~zgGuK2YP)sQ#%uTCweDSM^{s47iW57QzsW^ItNeN1b+K12AC0dKd2YG_O89z zHZ(vc6wxq%+@PzV*&>@(wqqqFB>MNO#9vSf1-qiR@m=pv`!$?rFXN7+?gNH0Hi)Zx zC-(s^jyXR~@a9cWEQ8Du6tmIKpDpq9&L8t(58anLlPxlzE9&Wn9JZQE2{+NA4~-$q%&T za6!&}ZAREm3O)^B=aP$_dRp28oh^&=Fscd~9t)m6){^HQgD7ebe<&9XTJ~ItX&6QX z0Cx?_5!&&C$Y4kzvb6$A4tWhI>kD^j4!Br%0lexhCEi$G@l=E9q6V83X<{oUV^2X( zcX57^cS4#bUf!e*23b13h@?%#^%ebO>&(=FS8n^Aw(#OqZREv`dE8B=&tt+js{)1e@r=U*Dat*8t0s;HRakf*UWt>d*HUUNAh19dAp zXGWM0+3Ax#;ma8O*})B^O)pSIYEJMspp26zLOQ_QS0TI|aFhd8ckl?@b$ITzz!bpE zd4tv+^`%T|=7f2ALR=w# zg@t_XcRp(H*-2k<2cEjynw#N`Bk4Pby|K&^1BLo?+xmd-ob&QbsX^lfgK7zOjy?Ur zcVmepNi0GaopB!?1D7HWsg{D+<)Bn45$P^uROhd&u{kQydseNu6L`g=nSw1o2yjD} z7;~b8Pg+>6RWO&4a@)j7E4RR88*Opm_YX+pyg$l*ScUT}iZBm*RLMXG7RJgdQc_Q! zrvlM|RWE4WBI@R;_TJ4xTI8jWJZyeaq=5ITOZ9kn?Brb~arWy?< z9`({hD?#8u;&rc?Q#FYGij^v65*awLyJgv9leEQnx?^*%aD%`zl~|q`$t>nZf}f{S zG&n|@mciJ{X)Bv6SWYGC$Z4Oo==U!2{n}fC0e4TZu02op_{2S_vYULPC%5cLpTBOk z@gGq0Su}d8!?$e}T-oA7RJWi=_)G7{YU!)<<<_U>DW1Z>n7fvfmcA*tMwWiwkh1B=cxQ^{W z;rUf)q7PQ-m8+}WK|j2=s-@yZx7v&LMx_h=RcWGhUZi6@wHwDM*duS$A4FIOF1 zh_`jg+tg`Ay{Eg-b;=f$?fbe}{1QDuXHXwi{8F@ZskDbWD=M8(i`(J(fMKab4x|ZE z#CwwCF(J1e4^icBy-GDv=ky^zf1R!yqP2nb=;)%^matHCczcZ<%dT$#Aq@sZghP0$ z+vf3+QQL^~j)Ctj_0Ot)wFF>^6ZJYoHw4J79ci`TD$d5+2V?L@%QT^tC#CIU&}Vy9 zN>n+eW+}n^4+)Z2&*a;Zzpx7}uBs|Z^rEQ~Hk4A3C@-qSBl~(U1r!Y&OD*HrDj2k% zrR%Eke*!s46KOVm^;oe$;o@u1qPi*1+2i3ktW;a7v%1}QH7$TR1Qzt#WPPVIUOSUw zE$4A9)I!4?)~L#D#i$+f#P9@KocFY%$Dl$wlfSX>>Sl&q8VgwyQ@BVS8Q`{}yDwEX zE2(ZtXTOZO5fnYzL8rK*gyEtIoTj4-+XX!XI|IXPO}Fuwy3VJmnj@dFS{!@i1epg<)`PCa16QawfFukT zV97J!Iqn9j&BbTrw~7=*Cs zD^kS~)l6maT`6XJs!EDCsI{RnC~dgWg9W9Jx5aLbhMiUvzVEM#M|+7wf8KE|?xB>g z6mMu{FZNWl+B<`D18wNdtY!D(_C<#bBxmhxD=DSB7KQ+O9e_{0ZTW=ktdE=GRC1@< zy&iyWZ+#6kQ}Nx|T_NZ4>HYg%q z!ju>KA;Q1-IoWK@%yg1l@z^pcE0~$r0Wq4GV#@m##7jS5tPkcKkne~HVgfWpZ`l&O z+6u-esR)cq1De7!64d^|IxqTT_jmv}bGQzN;3?=Fm<{utcSv4u@YZGv@7R*o?)|4^ zFH6tq$|+83w@p|VX_QiWUTu)D{i`t0K#!6MU~1~XY4}j5Tw$yKo`8IZ4dIac>J`r> z#A|dDJuHqH&bsrrZ^VK~)!*ePudrCex@I<78H9hKFs>`V|YagQiQ76#6W-wW>zLns>ye1}nxJ#}Q z;@7a)-8+FSIwFn=$I%#oJSas~D4~e^uL}cv(+Jr!mH=e~GF0d^MGmZ)V2<(I&|Fk^ zVQD)M5c7l39PnPPo%?kGVtaM5AcLDhdqU!@Hw>erD#dLR6yNEV&`^fQyoCnZQ<+}@ zr-X>#m8zbGMCqDu*H1z<$`5BwvkUhr>%}V%jX>If-{wuky;edI@TAzP*et`C)O5dP zqEWxSNg$9qYJZdthDe=mxv0bhjSH!Ov8cDjFvbbC4R-v#XdTGq*Y7+Tw=E>tx-E+Y z2`GK;YmXFdXsN_1noK?Jl_o(31|hQDWLXcnw_OrV%1JZ3hd1O-=c0|M!4~eiUPU!A z8%I&Fg24SC%LI@ivo`o1oQQ>jX2Amr91tvd&N3{7Bm;o)6yA8;(tOZDw6F1bZsE-cycyj^SuC&y^Si$jU(?Pnj%smwcwp06LBbg|ihO_4*`jHh zkSs?jBB$=*4jIg%Sb`SN#zEIV8fcR7lFGa`VQZPiTms?#VL0ny$6TE*wls`mvvSiUzGh6z>0B=qlF>jsPIATw)hmMGzfMqc3~} z)=naQ2|w+3SQN3R?I2chL9!^5O|PoFEKGSF$LV-#RbG5CfyN6%Gcv85AgPr{Hb9sg zNj25LlGcOgg>qoMj(-Q3cdmF1KkUaR+?-gTL|8CjwG^}U~`Q?0zs~;Z3IgK4L~Pzc;Q{EE0T=~ zbK`~+sJ`$p3Hy!+A?<{Q!E9IxYn9-y3>Yv#rN72|kUi|62!ejT#l7MDFb;R5#N?6d zz~d5tw#}fIHW^>NH9aiVK&H&`d=)rR=>DWickA_71{wkQ-FLjIq*di7PKd~Jdli>W`4q1eiuKgm2` zu9t|0O^A4%mkV-=J6$OB`g}MFG39KczvT8(6#MA2@gOJD(D)e18tK4w@HHhHtQvU& zo70>RNg_lc0`d;#jlMJ|ob4!?K-B!v>4fO~QfQ+XgJeDlG-%A)o``i2AZFcCR%{9I z@?xkHKne4CSPWeUq7MNA(N?^p+ze4e!MIHIRF0kHxB_y}yC%yF6yV0|ehFielB7!P zYZGTU$pd$SvYzmbP;M}5qIN4+mBc4VLLz_%b4ip)z!J#-0E6LrH;547P$(AdP zCx3VvW#^3C!WPDTi16~;B;(jY{H_JF&m3*%_8M=_AZ*woauzL3$M@Kz*aA$HS6t~j zjs4;K0}N?9z?E%Uk2<@RJ}jRZV!$^7udR_m%uQZe%~PgEypMuHLNM9)&5~WSn;}b) z>IT@lbUxm@u9K~Rp%9=4@P(OfaHdV2S1s;H(lTa=85OqomO=&oDUt%Pe@OumP?)Ze zJ18G@?jtng1M>`XxV&0vVYrF`?PEOm-qSh3StFk@ghPoOP_FLk0Ujh54$g#2kNae0 zN1x*rFEK%(=H7oSM~v7yUMeAO_eDX1iu@o63f@v8bO3>SPmeg;JS;)w)f)vW-2V9z zzWHH^FAX%fI_u)%fwb+Z^u=#W@BNO~hwM{T6@YC0+E$?8E{^;&9EC5=2A|v6UcRNi zuEaKPdpa3yn3CgYQDwN|{d-u>m&cU|xM3p7yfb?LOcx>H0f8}6lIZrP_zxtq0QfL< zCu8A)h$K>9_ckoys1y?sjo9=CZL~sPY`6QXbwxyx%FvpJ>teqISr+y^!8m zxdU9(%&G{U8584c$Wp#(+r+f$%oGP=hFryP9|fW^`9ax|+;U~A5O_+h-LU{kS8H!} zn_`PZpFU&8Hw0S2EJSnqxF@O-*bqt7_6RRQ!&sd|E2`pR864Lugsd9{l4P)Ay`{(Z z5+%d&SZnFTxds>%WRJJD>f4uSJ)Q!>57XiPu-2zX)(~ZaB>e<1$|xG)lW2@cIz`_8 z3WVK>G(8LvU33R=pwQI;6tRM|`obVSfsKWp63{qpA4|S9-rg=yd<7?}#gwFmgKV+B zd@pwaV(UJA$4?wG(or>xjKnHrbPrM%bYoVB=gcP2W%O83tCQQ&2}Ca-3GxwUEl1E_ zpYe7xu814+1!}ch$&k<4kUCaHrnmimQRw_0$|<@Jgk}4bE!g+Lg&2%KV)NOIcP78;W3(0|5JI zd~bZInS7Lrb-tQhJ5~nCrN!Hn0)c$f5z3A-D`*0(}ej zFlxES?maYMG*6M+9%JR=8mH-$x%GbcSa|-9Fzt0wUr0X))Y`L)J*_{<7Z$&Edc z5>>CBvnc#E8WZP%_G&a4$-dVzI{dCTxj56+Hl6IoN(1)Wi~;Qhrxcd3Ui#)9xe2Gy zst|Jq+3v&Qx)lT^7H=Qh3Q9cCV7rS9bAqZHSzd`x^?@*b1D8|3((Hy(glE6D-~d>L zy=S%o!*vpff$J~AjS(GEts@{CAp`p7w2~kngfcm}RT#{>(&oZ}U#E8p!3;u09|He4 z2#+A;BNidVE}q?1CO4G9;Iao_XYYZlTOOG~4_LPvqJRbWL?|jelPfV#)wcmXbe5QR zU}WBiAW>(ENf$qCD)4}^VHC-4P7}BL_3)NDEA>9|I@oP^hc&B@I4L4iJ0De^QKw zA{`wiw*Kf|oNaLhr9;;=>`8kia+QME@@e+IJ5q#)S`z$S=r!M=#RrR0)f1|riYw1# z5<&W>$qDlTWZG!K3G6EBkMaj&^#QCg5Nh3{s_p@#GJmaR@0zLDkF4@Hw&@Dcvln)M z`QDpPxZNm8H4~X%2(B&EzK>)2pShZe_GDWk29y~48&Zu&|Nb1~}pq=Z+!)yaeq@IIAc;-S_t8Sdj(7|8}JJ0kz zv)bGjGL6;ER@>aL>xoYfnA?*M#glPAKb#(ijJ3-@*Oo^f3M%2_NefC^w)fi&>1)%w?mhJE}Jm=%xC9iT&?ZucZ1$bE`10b4Q=$1Z)ylV9~r$lJ1sWs7@N;G?=DhHG+=o2zxH9z(gig;Sid;dpGp-zbWc^^>lmm zbiXyf_MdH;UVt$er?Z=fpY8I+a1uCN>ba06Okk%x?C3Kn1cpyI9qH4m-eFbDePPd! zOKy!WhQ;vaIHb83vqqLlv-*hPXAYTsLMh!^(+IN1HT`*AW84_@^v0a?j=m+?Io-|@ zao#jZz~G3?{uXN(4JF{(`2}wad$2T4Xf<}}c8#`AlgolB?7x=Y8dL#z$X*1TqlO~d zU-K=zoP}Nnon`VL=8WMx4AV=4FxL&=eo?-dpYVZjzz7JP$&7n?L~xP{-RhRGb?HUS zeLIr`+oy-tyFS^93^}4Nc({&%yGw&%Lo~~Jx;cFhr#<@a@0i3q1oX;|aTGzZ8APf2 zF7epJN!Gk4StW3bQ`LC}XKHy+xLyEx`z&ABS%7o1(y?;v7v>>SG;>OJ2V_1nv0H;k zmt;9vNrPm=^d`#GZE_{G1i~9 ze#}{mbQwgvzaifn{v=?UBJi87J>=O%F4-8%X^~ad>l5^o!ygKPc0r>nabMrg6)ah|ITZrP^|X9 z6X2~$tv6V3rj=+sqF+-|Z~!!WM@LJ^E^e5B@e7UPvzO)WkeNznejBpLfqS9h-2I!P z_X=B-0zBXD6;LUa0h6GDzwu^)h`S$;NJb0Cy;P4R=V1??f(c`?lCMqZ;kf5TZ_J3I0a+VQaeRO;>E+s$#CoEy2Vo}Z(ERI4Ji0CW ztaQI|g5&GrFl^K#FaHJA7C(hWw2M$wGo_HAITryE%T6w3oB|E zF7=gG0qX6%>`Hn`F#hbu)#V?a%uD$2P9!9|u?d?pya-y0ycfrq(EAGkKY>eCp-%d~ zTzt5Y2}a#i79!s6vjwC&Pfu~{;%?8u-s4sc1sV9L?Sc@%3q~Vc!^#JNWNF^a&%}%A zJFGn2bpLEXeUw~~7u`aN3D7oXvalZ)R?tR)MdT9b^|G6BlKrCL`Q*W<-pCJL=J8qq zsb#lL6%_xOyz!zVVjukIVtat5epbLnttx=obJ?&nkUwY@m9W`|)A188`MVY5G%um2 z6FayR$FohNHHdk~hqwt0%D8{MKetERx@;emitjLT3Qpk(<|HB$oy9bC2)fIoPkP>P znuKANClcSPxDdscE(P5ci1j?F{tm%b^#%E#oj?!hu-oe&#rFIEqu4C$?XCYG#ilr5 z6)b?zbE^(BAqX3JN_36|MQUZ&7@$mXlmx!| zSs%GP0spIg;|h{@{~`bYbR7Smvzv{bv5ED6R&AQ+>!)?6^nTR#ttSyBPedO&cXBjO zuuhMzblN0JWL->|Fd@+hvRXwhAr;}+mAE@YF`%2yot*yPiy=s%at%@v^>&ofWOFMoax!v81QQDC1>!?Wje`GRJ zC7IC_tuMTjR@e$SKU8Wky;E2XwR9#myV&?G!n?g2tIxqb(ZHIfDizbketacJcgMQB zU36@Obs@hF!ZJlGl3JDS>Xolh@y0K&R97fmPe#T?RCFj836d_FXfnWfmSB~YS}RMc zi*23=Rql(F8^Jy#vwDl30kvot z{27r>>(sBq2ZAN(Ri(hbc6L)j<~8{?i_0dSv?>cLA_=)X5-aW0jLk&;%~#2L$->P z929knMRI(+zZaFe+RP`V(z_|sC)z=t{D6q5CPPascJ~$&B^3Bx=av|^`;3-t0kK?6 z!b4!n(<`u)m zT^fBEs3JA~Y3@>Kv3m+0<>>M|eRe8GROKa}q`egt+5jUtFnZ{g6cQk6rJ{Q<7+9%X zb-^9$#SuM(MKbG0<-W_!#F3I4ORXbVAEWn-pMQA(^OiIR9v>j*VQN|5&5;wiETU%H46t8z%dVJVqu?!sM_6qNNd4)4IL@`E4f~8O$p$^*m z7o7UfJ<=L7ag4Zue@i*5e~OAG3fr2GmYTmra!!DErAf*vKic@thZ>#SPOqm!$E*GO z=cDixO%8xOe1a-nCggSvC zweC2x36v6kgL^yk@~YeW>HTdqR~F4xgfIKk+YyS&)3NF0;3{)b%}y4L&iC{6Z*3Gj z+4mDv4j(TP{J!6)-c5E^kLOMA$Kc^%cXzi+0;P%ZpZ)gS2RaXoM#i)$bJtxETLar^ z*e_s6SY}vh;3gC*jVc$aPydWpAafF+X_zwfxcY-Y@q-aMzyA#^h2XV@ zkbNvQXMB$JpSYjO{l0fos8|XJhQ7V1hahT@C3Uu^1Dn0QOo|LL|$ zbO9z$(|$Be1{$UY=?=9>7*-Jk?UyN-^R$P(w<*^K9KI}O!it$k(C1#kM!LAB6iOgJ z%(XO<+nbl|Dz-9|e!aGY;F9uCws)rV=hfl|Kj$(xNPasiTDfFq$qE7?!lTAx?`5ZY zytm%t2bKJ#^!v4w{QZF=WsNyJ2o93%*KI@XAF@n`#dxNvuG^>6sws%juymdB+3r^M zUaG9kWXx-*r1pWY5r$pmVr<*x{66||bEeOsRLDhh?1XMCnLrV}MBL0iRC37IO-O0& zZQ#oZFjtmz7@IDYJO(-=$_B~t-dVW|RaxvvdB-f<>%Ir`q_VVse7}8WZh|j0lDFsn z77b`d$ITgX6N4|=_UjY@V4rL00Njv!&M^tM=CA~##T?crekCH4DVAN|8LAx?2C8PK z-^ywpq>aXY2Tsm%MeJKHn+S9ccg(=D(4rDxFGC8}yNbGWO@n)opdZ%a2z#cV&mTh; z(UoVd$0r>QtC+Y5?(r-Z0Wi}+Z_rS$gfy;EsNTIwEqn6h>I(&QPwEv#!+GAFLE;<; zbd`+2Qj8)4p=W)clBl1|IxK@gJKNkqQCj+$4^U@aHTp~=#2B%s(BP`Xhk{p7D`7!; z9BriuZEVXbzuyom5;dhP3nesg${`Bc6TR;u#p>;kjO9yDRB`X`Q2WYl)Zq} z8b?#H$Er^rv8%AnGrn$g&y7rdX(VGwLK5YR4iFf~PW-=44%}TjR`wMu<~F)dy2!h3 zfSgNU`r~96AjlBE-orm=mu|S%ZM6CMH{}P9bGoOk$0k>O1aNqrHF*CdE;zd}1Wz(R zXR!BnObS{Y0#lT*?FG9--E8@P>@KG0G~>DNJ+GwUR8E!K5cCTQ71G**ehkh(@&wr~#Gl}hZb;r|v zVo&mTMV|`@;z*ik;ke#7vK~KaGBIs-{Dm*;?Wqgv4K_5j_Z2ELqQCyo$)2^*-K9NJNA{kvQigcU((Kd9wuR0$!=4sQ3I^ zhhQ=IX}3-=zn8+O;_<~jn9kX?&T$X8zK+)wM=P5JUJffQ(B960X<$Q8VD&L0MV8eXR&LFV)1g{c%&_wg@JKuMSwYAQObPJ-j1Rh&`K&}< zsOFJ|H&zesb39iU}XlurZ&#F;K|pv(}cl0cB2cO!NP zWL7pF7Xd&LBlK2iXdxk)TK8!H%gmqgS^&$SLl|YsnP$&kf z5Yin0HZi0_u-D!z3Oi;5A`@oUOP>C%8!5dOK(TlVN?(E5C!VB7AZMG_&v@~>mFY8lv z{~FC^rR$c7BeK|Te>G)K<6^+Y{QEp-1~%}VXWm>d6nj0Prc0{e^>e1h!n$8TK$>=~ z_rPULe+9ke<=bS^-g)bc>YBK&f2WjmGKg4X1wX{LNu3cxzPx`US$K z?6<6?&rgW-!tH3M5Y<}(CG6hR}0N|5t`4Og%h0QxP$N~vGI!Q3n;s* zN#~NiH0Olhmx4utU(7CVKR)(3nc|GJ3F&Ti%cZug9(BNJA5`&D3Xai;bt<<>#5|nE z)23x~7tFKRZGBV5Qy|es_Rmpo-3NkxrmkX*qpa|GFa3d`ZJF!rKDvIjrc-nfFS7Q( znT9Qpr#B1?6SxBG%HdmUzTmhsCdu{+uQP>|OBc-wSkqT}Xwbx#l@X~OV%s5boMb?t z5UUoI0{8vgLBB@a&2_;LJ=RSx1Jcm8UoV(caxCDpl~|7&^7TgCTb=TD*TUc^KJYu| zD5)6iI~!4*Rs^(?kYI(u@WmBrVR!}8fM6x;o^P?Ib0OV4t?Y1Yzr==o*A*VqfGLEm zViIA_mEVNAw+LT-oaWdY4+F)_af|Y!k-Gj5K$=gIegYfW0d6{0Go~z;&0^i~{`OnK z%JKWdLiW01E1yr?uz4+{8c9U9Cge@mtbDliu#iX%7XHFO3=`X23(elwRC>{#N?J<~ z*Q*{IWTZZV$Evm*n4Y>_2)#!@7=eWjVw(%{CMb{iVL{VWs%guD=hAL2>$MtuYhGU| z!3g|19fVe=5UupZ-atwU1;dJQPBcokA`F_zou2is+PoyRmEe>XwJ@#)(T2B->EG`v z7LfP@0%n#P3*dl+RU8k6HsIXc6SY4(^tb_d)CLsQY)NQnSj`-3;7ohUBmU|6u4A9Ibv*NL5IjBv~TGYdJegS zDbT)tg(P#uS_IGQ-I^?B@*;?!2YBMsh`ub_DTvBoC|k%q*6co>B*J?Mf`hZ2(= zBUn6CV@U~a5+PlnUL>eRY(lDbHIVX#j{ZuafC9+?}h-_#Nt<>$RXD2vdFh6>J#RK7~je<09!AV z(n#@N#jI-c<7RxGE~E*M6B`|s%jv*63pRu76&mNb_-K!4DxI&v?!F!n&%ejUg{j<6 z3!)!Hi&UK9HN|hAz=C6+pJ^!5R;p;?K8j>b$=n0i3;f+6@la5nq6D#oMDn3HW@=($ zu4x36VLw4RzN9lijjFtDHjoO34yQwL_wNb%?uakP7v#g=v?i#}95tUW7FrY!mIH`E zMSt0jyI-)oL!petsKEq6=*;H?lW*#b)|Zz(T_8rQ54EbNXe*!qL!To>sO?LiB|nzt zr*oIpA?3-IpZtkx;wM`fu9$fhXRxNs}GYv{4)bX+Wlqa?Dsrh^a z2P3iY^tF?aKOx*%MF?m2<$7;@f58~TxlY=^3={53dJ^eSIViCda4)Wdx)S^RsbTIj zSy11ZU7*8SQ-s$*WSY>TPg+c2vqy1T{gLCky+inw7Q!LToq){6pslORM;^b>hzGPX zMUB$)m7=*Dk*scyhwY{AH2H6cdHYL0)hpR#jrW;I*ocg~?fsCi38^ zdc>R@!-G~6!>N?|Tpb84ofk~aHsn7?_%>?a(EN-@l~*VDaLqrkLCh`{k1x3VG5Xj+ z7r$g5njw6IK`!c6Y67LOK(8do57}K{G;2^>IJEM8F|1E54MI1c&lFbp?`on(P6OUw zAR?>0VxHkt@$G+5T9~XFHTC_=EWGf}#Lw5Hd?%q)X|cTnsiIviFv>z#vM;z_N}FAyo1J==Kg~2^^TVy>z5Vg@b*RDycrZSd!>BmH0d* zg;tVi;E|m-Fm8a0ZW=PI#9k|#2S&aLtf?S`IXNzh@()@JrIEwdazy#(L_<)dM9zo8XpOFdH!;# z!EP+k+5)Vq>T;cTK`QRWKbNO;01PRwkKeBrZ0GoxV^ zHwmKh))9O=p^Qo=`Nwg6*VceCIQw}7Gzw>>hY|6L5-|d&n-gXt7?@#MZG`Hbw5{eT z_h4o*7Ygr@z?<3zJ97zr8ZK_hEOC57S=div48a}I3@(FshJ}|jSHei^1>y^T=h8>H zhNpnsF{Q|2D_()tXrRfL9mSf*e3f zMh0c0r!+5_Agx1-ixk9WVw}qE2qfwYsVm3i#dN~}F@Z#=-`g^GQ3UB<;K(zLw&(AH zZ(#U$0=02nx<4WDo-t$2GLS8XIx-&SRwYp9ps<`h=aKEGhFi|xKA4?7ct6G-WeI5E zT`XB;U&6X1Kpz4^a_)w#A`r5@U$F6mRqXY!@`SFR%1rWZp#7vFVlbby1jVSX%whDi zps-91<`23)Qr%gA2g>&JD}kBI*eiijXjG|w0|+(9%2R5|2r=DCs1drm!u;0q!}6cC(RE}s39 zrY3d`|42dJv>J}0*Ys0Ux6&IUpV#mFcEi;!dp4@oYOJqUq@h5W^bD3JxE@U|AYA8YbdbMQbOV(-N6MwnJ$yS_2D zbY@cfq`@|18>hqDJ>uh1Y45BH&-M5D79LCy!}7(6$zll{ET~p{cl;z53x@lZ>^0e; z$rQrJXNe+x4NAUIrad%L0-FE@aa}yxisSa`VEyi7)Ur~$HbHe6ikvYQ)EPxiIRY9A z(dasMCs;nUg%ry``a+Q6Yr|`uhlKExW7zOLrVu(w-nvB-EdAq2le!RpDNRxmF8&t( zQ@{{(yYAxpX$$B@#EX4y!fvt5Bd&Y^N%li%bH5|;$cPth&ER6m%*Z;r7A-xo7uuI1 z&4cfd#nsa-ZSLuPZ!F%)mT-P?&db#7iVWC8b0aU_!1YpUp>$mmD`(a}5CMpZrt^4^ zV=X%))*7J41?`Rl1PMg=<8|clKRrtX21?u2DwdX!#Exue)k#hVe=7RVqJg<~#J~9= zn`0Zwyn_f%ROfwwwT~iX^Fb!6gNh`d2WfXL8nQpp(1&??!@~01jk{MmlQ}FO&pbaP zl-OpUxc(&|>O}sCUCs#cw5}JEwa%d2yl$Y?ek36h!PEtvhWNTsg0-~kj8ldIqIsIs zb>7Q06pRNLuvjN45EUVYo&&Xcc4rc?!^~_7C-q__q1=WLAVv_kGRVxn$s!$KfqO5^ z49|PKySf9yqI%Z$1?@!j)q{bGjVS8)c)IA`QGREUh?`YJnd$5StS3lPeN2g&(Ry|M z=*@V)g!ExaP9k34Ppyh_4hswO&`0}?=%4^b`a>7=H-fqc#cCf$<@=*`{7~;bB|@HO zp@w*q#U>tywQE zBwoIY?R*UIs55?N*AOJ0L&?&JF#ov7l5XvlGnVQ58ynrshQZ^+K`Q4Gteu=QFA2#T z<6t6ESs5I@zC3)-P%>$S5l7W1#$0z^u~psQ%7@E3HAhh)kDlh8dMD~lAuSCOMD3m2 zx;!TX^jJZKPJz)>g{M<)l4JwrSpe-?IvK!1&ON&S$5zg5PZ0G1Xv=1HG*$}a#u$B@ zK~leVsNsv+D$y9DQ-70I#f((hNZgNL%kveG>B3q;c<3qg-rNsL=s&`9aYdz6mXqqI z0=c6KLN2HkT)b=}-SZ6|zRzNM|B|r&vir}4Z_725DO~41c{`G#-Ij zgSlcZNkqhy2-Dv`@Y~lxBbAmhKmy2vN}?w0)$t``cDu&nd`d~Sny40kEdN!f>e}pTmSe$ zqs!k6Z|SzAs7sHCeN}h0`pA-y8I!((FaL=9%EClq1j?n_s$%-3MShb)L`H`6M#Q4Wz1%THzj| zoL$pL#+}tc@f7;U;6>t3gVNa$&uJ>Rq^nhzc~i@tX;QO6F~^G*l9EQC)=Xy?FV0GR z+dV9ka0F-?nkDz#08POt%XpswlLUIDC#0$@K$+V?8I`uNo)TMFT8Y?K@ z_xeg$Agr)_>RdyeGHGzwrHKEXUg;6dYRog`3sg$El{HX)6I`5sn={Y&z`}^^_* zM{0VSGL!P&1|BY>@>^|TMvex@hP{r+!FZ~Ne2O5R^}+*YZmjpi*7>83wAAfxEBh{F zr+vi)6)Fc+LAg@g6jA7tjE2&+=KA8Vj(msBD_r;Z=|n&0=thaDLG)(6N+D0-Cgh^6 zrO<{sP(0j0B~t%2_aIjcIBKO9@ojE@tpa0`TsFuhdlN3mxjv~W9UA3#SQcN7CDx8M z4+q)5TQk3f(^ukQ9&V5j!z{tiz?R;_n_CL^!z=bEd=|drZMoVCZlxlFkM|6ru)Paq z{WhC9cW~JTe<*sp4h{c&krAkBslAS-a*_#GC(`k~V-N$5(`)D>E;C7szi>&X{MB%F z$%!>VRS$t~;wOthc|(V*WjH}J2kuHGcId_8f4nlbTX;1f(nbjo-B^#U z?Khg!7b}10a>Udo3im7*-qUk`?+H`IiAis9K# z4pN~f{aD;L&#AQUXRdBdV*rlCjF_88jK1?5248K=A32r~LHi8l++kdkFwG%qZbvme zkM8dvwr$Z}Tqtw7bh=niJwP%xT1`U63>jLsL3Fk~mho%9uN zhWe{r32?Gxeckt<7^1N(&r^Ia^QU8dc^uP`4Id*$rMPL$$7NHtGL=XXUDvm6SrYJ< zt!EVC(XW1^8Ma@hd3!ggJ{%-Y5Mp9Hqxmq^LP0j@bH%OabGE6j7YjLXSMe#tV-}7j zgB1TXN-?dKxpUw%n04aL{#3)=1qYP%xW7yxo1uXlcdrA!OT9KjOURhsXQaNP5g227 zF_B<}vpfqw@WcJ-X+v?4dmPtTd!v+b0DZz7@?c^z<=lW?A5QPjbl*G1u9HXGn*4*f zfDFe@z9p)4)y-F0WZX@)PXrkPg~i`E$MOGp|NDK6TtU0E{W)w7 zGG3d3LooxTR>$_*Vuqcj3PD)-;8lDS1+df*XHH{rF!#F9a{MI1(K~u@Ir^~3+*te~ zZ>YWFjEZU+zF7Z-n))Zr)HZ8a+98^Y9>Ym)We#}dMZ>yg>>abC%aZbws;kc~|AI7T z*D!!Obt6KDw)-4?)CW@N9~@D^p_bjLtG=tFvWmF<45ci)miu2cIR4(mQgyo$#cw>EA0)WaulUs?ps+aQSU7ds7xe# z0jm-3-tAR1NU2gV@O?SU9O!V$f?@P9 z9ui%?oFZkH4CqHfO`;S0>aLpGMS!C~HcB{;et~0#d8QSS`3oUI%Zh?8UJV<3YPE^S zVyI=>4~h_f?Rzi4yYJdH6=zlG(=&)|>aNk{ddeOc<8L$v< z7Apf~bTTs;IHLr_Au^RYSDYw^l-molSO8X_~ceh=X66eI)o|3Lh*46fFxX>?}| zDbNL#=Z2=k8foO+{_C$UKBULnO;noN!ltY( z#odEYWYO7QIcf)>De1s~I+$cEt^WEg9vjy;ckVjwxs{9_W2zx}2}d;_8nLiQrSgG9?9qZ@)}SLJ$L-G(&i7ljN~a4OLav7 ze_sVC!xQ2LhI_LE!x5nkvb7p5>+7WjYnewZCXgD9pnZACbUJ!G-fS&J)`S+EOP(|6 zC)W?%4Fy%7UZ#E%q3FRHiNI$|Ei^0ql@U;5h09uliRC-Ojz0UgQhwJh7|)Y)FZUU! z3q<5gy${`)#BL5l1MoleFM8gVYB7KCX{{4O`?#*`7sj?fvhYjYdg0}=hqKm>&foH07 z$Dhv6?TaU^Ew}BMS59-{C?|e6pU4+IbCJn4eF4&Vz~`hZ?!F^0l%UkfP`~SHsbO+G z1Vq6uuWWgmIPr2>R^F%7$QjPwSP?1QB@$NUa9~g(U&K_|{uigyUm&!#qVO;MazF?7 z$j2(TD(Spe&fj7qG47$LX43~?}-jTse%gat8#&IDxi=gL08Uu*c!l6Fy z!fHD$js&j(yuiUtkZ*|pNqkZN7HmAl1OWE*008{|ivs6l;^g$-1h^}18>dZn&)p{~ z`^<51Nt2EB?RF^^2h*-tw?nHPORiO2AKVB+f~fyuQC!KsYyEta?_EESE5rQ@v(y$MtWQ)%0K~-;{_{stHMwCngMk<_k0W zHgyxps>!DD;x*-Cn-obBLx&k0;r3Sr(&jR$`q-#f&B!+KVNq2|rDpkt8UuCnT;*a# zS9S);iF?u{OTvQ^T^WR1u~&{*cg=NACDmr~Wqplgt2FPNL45iwr1#}a_eP+xPu>_S z4KphX-HcrjUz~mPzuVS`mDK6`h3OSk+k_OWnQg2#?v5TUY2j`vlvL?GQ;D908I<4k zQ&8^>5mY2LcAC*=yqLdUZwK)XEkk2WDFov2E+}Qs)2|sSCo!7R!kJ>yj6DB|c{imj zH#5VIdJ^XaOJVhJoir~-Nf;B^`vEIcX9J@arC5h^ZGb><_A;(N9u3*?D- z$nAILW9}W~lWY$4JV_R+KnXy77C>{2kK7vLF5HNtl_hNnXA=F~-ij(Dc_(eumKsZR z#ScsR7RY35eUX&FoIt;OBTRX)ok@{TbM5%Z(+TU?sfr9B(%h4lWR@2m*;VhGyXz7YAa9u4ACV+!O~99NXrg|#O=NuxHaD5KI*!F<)nIt)#- ze>GEPa%a=DWU5naM*ABm9he)ks6Xj**GWZOhynpGxH3E%(Yq6;n1ETQ*d>J5eJWS^ zuanWUy*VgReqm`vfaN{X)+qKTCek!;SGIm>Tex3;9-JOH)7SOJ#l`AnPtC}E9|~hf zmO?;41oZ>JSF&nchQ%*_Jz%X&XO#H(7cfgX_6_6{SJ-29(V#rQM#n=N?28A( z5iF7s`4hs*z#CPj0VHn*dMU5H6K@}FOM2iMEsb3T-chq`9u3;Xg6$|GUxx+g=S9_z za+F5|Dw8s|XF+FwyxsLW4|pbvV(Qkyc-)-60E*n_IR#$u09A_+fgA~7k(Li0jYuBhmqMbfY1fM=Ee#qn|iGN)Hf>kzt;+}^-dhGkBnO`2`3~=a8a3qrF*wT0NR#M$;IozfM zVZxn9FqtSYJFj*xj2TZaf%6Zw(?7CpDZJ}b>y}EJfOeq2%DYT><=32*4gj6Z%_5Oq zI*Z9Bl;3U;7h_*{C>0^NG4#Ho!_+15Pcx>>rjt zaRkm>Pbm-*Nla^B3Z9UxkNe(N6W{m`D1YDr?t$MoqsprP6fQCsEc8mA)hr zL=KU%`ECPBqJO#hqSULO0KXq;&*ISq-_||t<>;nwa&=OY_s$hD|>l=74a&cLr zU#N70?g>K&rXCh3cI?WpjxDj~9pwmYsHRr{YDL0+MGf2H*H@Ev5H#Ad$A%3b8~`r}ImwJ6oK+Ee z^!sma?w2p&HE}5I99?iX`fwCFiUZC9mW^5r^zFQUh>oEaq0v;|g8PA|Z?K7<RKM49pQ^lfMuCdCeT<$p7g{>S$XlL(mnH1X%blVEM8B3 z^Tqql`p&A2q%`S}JwHQG%K;ohPc=>e{e|!_9|^I-2taCKdc%&PQd6H^Nppl zk3e<&y=#iU{|n{oALNG+a*lE=J21+uXGil zR$UO%46snb7dzt16jjxBEJDF!D?c@zV&)cfOx@?tvUtr;AcZRd{Ub=EmR0th6ddZt+*J8CL|DRb zd#7ti=uIPhQA2Jc1j#~cE~~KD19d`y?*3;v{c1rmfD~ALmJLO!eog+9I79e4lE6RX zhU!r?A^4bcqZTN61#}fW=lXu8h5wEMF}z&8dtcLZNn-^+f?}d}H&yuP5nN}>MjdsS zG4=u!A^t1?;NgX^&>39_$*$&(0FgqCJ_>Hg#aA#}rrg}*x_a0hr9>Y>{m#1qMw%uY zx)ha{oKy!}4Wjzm-%CUoL3uG7X~pEu1D@UqxgEX@&*g7&FU<}OPrJ4tS2_>5*H-tf zcfHqChkjlP4lhD0rWfVry}gUnk6Yc~Kr3$c-IF;bLV2inhj7myy#_;;1PpNI2*4XapguTu!#JA5c|LRMTL>RU%8{_{0{gzm zV*_!Jh-;@ruU;rZasWnGP-d|%s|y{3XV>(Tb(Uk@JihA=nv8XQ&{;k)11QnnLhGRt zWlF812AoD5Xm0Fdbk6I7UVWvxoSAM{QrieIdY<^^+-4^b&UQBt@8AT#KH67l+Me+t z0k9s*1XH&a1*54#WT?(y__N+`D*g!Exm0_i@5UN6Gj<|JR2Dd4J**ur?Sa^G>}b?| z$4K<11o*jZ!L0kIB=#(xr9Bl6JBAX^nY-)9PAs(j*UK- zNY0HBkCW|GuE|?TtqwbV;1%rWf*%;_CzF>Q``UnxgIoT7UO@?9wK*48$C#E08*LK? z@w`Z8Gb3NZqf2Rb?4h=Vq5wjb1payW{ zwIWvZ`L&oveEttiv}lkxepF-}ci`ku%b<}B`z``e<${wuY$)>!Hq6HZ_(%1hNS#q} zX5ih!H80#!OK?+>WBY7bj8B^1Nfrf0ya7w+@(ERjQa<)J{1s(H#FJuFJJBGTk*2FF3X9tzJX3qpB z-5^dsYecl_g zj1dn# zCu*{y$o^v4(+3?jOV*(pR8rgdrYZZvFwI}ldI>DIwI%Gn#h>^*QI+m8yK83XEvR1z zIAGUgsSUEfLMfK}Z!U}X*ed(Bu5}HCdfP1BPS>fa8a!DGt39|~sQ;9+7j&D^Sxts) z!El!xH%)}aI1*HU(;XTg2c{#L$(>}FAeKHJ4`+3n8*wZ7WJ?>qwg0;}+_~m0YTmRV zBj0ljdI#K+^!^s>+1Fsp%vu<<`NEq+Q3dScwuI~RZqPm?!^G|y+D;E+mrYzSQaEAn z_=*JxTg?i~&cOhbwGIbD#yvvx!Xv_z7_?JNn!+p3*yMVBML&zvv0}uOMQt%G+5kfR55_`mWt9I*Z( ziS=SFbozba_fl|5g%*&N{18YF(ioQNbz|D*`py0?0o0&DwFW&HE|MOKfx;M8EdweI z(Qb&&viF;!Q_>BpMnwJt3vlvdcP~KMy{LYIPX_Ltc)(WZ{{G|NaDXLN7=i24IGT6# zPnk~!EjB9!=8KT3uA#Q^goNzreSwnTqN1vEalf2urYhmaBIt*9Cxc0P3ZyuRUFNj1 z(l`APE=!4R2Riv6Pu{@lPo0MN(3S3LESG-J8JgvTzR3GFsFJmeES@8Fq?X8(G(vD0 zSZati6bU62Y00W`=}PqTrchkFSM=l*h1BXLE+QY3X#- zn=mydJcecpz2ekc$=lWniCD{_w=ET;0$vg$9EKd-Oiu#&uHvOr`8LrE9rX;fYQ()tVmIjPbuOW$B|%F+O*FN z?CA5!xAxvXk5hjQ}Li%*Kg~#(4SZ-qvg$cf}Z$26W2^H!-WWSi7%Nd(74gNbX zx7L3iE<52Xb&@)DqNha97liry((7}-_n$&?h))dP=jw(U`z6guv~_yig@yZZJI^RZ z;Bx(Xs}aDL!vS_Ek86SCv`S6^eE=MXnG5$_8m|fy_Hr=C^JomU4zqD9U}r)523(hO zbosBe4dtn2r*u}jKZ1W! zJ0mY_hpdyNR~@Ke?dKabN8E)3S?piIguYsBL*x1NI+8E^da1JH#WO_4fvq3fJnUcg zzP{n57jV1-YNIU{#MdB%iSC_Tfg%Ne~o(cRU_(PVEw_|J20gee8ly8Jn^RZ9DQIY_|k#bGB+eyN$lX&{CPX9 zl}<1BSCwW75!fFq?X|@f3w9D>t=VXMb~|4E^PHsn9D3^`qvR;!S^53NOZoU=@{O^l zwcNEcMQwaFnV~V!1-m0xc5r!(F2+#%xOppRVz-RWtd+}V z;r--#rcPJ-t}O!~qeqnQ_{x=L|9zL$=Vl;@uj0~LSLCsSu2s1UCVB@7W7%i*c=MLD zfhu}JfS=9{k@QXIby>_@`U8RS3g=8JLl%e}eAuy|tCyk%nzu#zUXa4f5zlvx__lZn zmJ+3+j&n%8uH9I^sz=?!BjubyUU{C*ZIR7)x!q7pQ@q+`#-#uWHZ7i*gH)S=pU z-iBVXWw@eH>ns9oa{Cg5G;Y&;H@An6qr?5TVdcdzPVG%jOcb>t9kK`B#AOJVfGY8Q zwm6Jz(aJsx1i?Cs;0rpP(uD8IKK`>J z`71CQs2ffaE>T}fEJrcP;Rk2hIdf~`(GJ|kaZ3o%3#%>F;Z`Ey><#CzvZj|KaKgr1 zy<$yaToUmh5sLn{wML53VYyq{O~Pw_e^lPV1v*nQjI@n$;4z&ch8agE7G{OzoXkhVOkX$27IZ`kZ&GOF~gF_cQf^+gva`@gKw&uz}8 zB7N0RzZ|RK#>i!r_`XhBh6GjMv>pM)oDwechMhC}sH_EV3OlT&n?jpynDz$c75vM_@YlJcMBMd2+l)mJqa2(_W_1 zvyI|mCFrw$Bfj zcO1)hNXpv%#*Sic?bZJR;1caW*eI(S20FNCc=|UXSj*pM^$Xv6%)RmPUb)S#_d*CV z00MW!A$?YXqi7;ay9LTr`fkgX1^2hbRd%m&L=OJxjcx5cyiqKa?pa#1{o^^zBKQ6qvEc||uOlcxFBSn}1BtYCy8GhE~Je90qiftlOI z9Ng?!bsMI(SPz1gp|EYKe^J*U7Pj>liX#Fl=LeCLl}@d1uCWoRPtJ^2x|<;BsJ3Kw ztz9+@?^Y{BgfeovvYiySliCpHrwYOVre@mSv_q8J331!LJ*{jt(Ys^9BRr0Buy+_7 zwR}x>zuf8$A^%&kod=HIOv+p8_zx97k|AY+b$p_mjCJV12F=QQjZm4bbvwg=wzMTI zjK>hvxp!pIHkp?Kbs+=pkr6-^>|m@GIBGRn@wd}Wu^egKvTLZro|?W-OTejPeYkgY zPHUAU&VCuQyLyqT)fi*GyX-k~ArsCr-bFuaep;QolrF;n8)UG(Xes3Ua3L2>SIM%9 zObT>sY(GQ|6b>oW?RLx-hn;6dZ9G=g{XOQ|ZG9Vsl+D~_W*yR1bCf9(5Yg!a9ktq!BX`tMy3Xd0H&jDyJB^B;Jt3ni^du zM?9P>_Xy$ev0YteT|IrR0psiSfkK=#zOt^m^|S+@%VpMG zZM}#VFXF!^3g#1+W@siM`67?QSs63S1P^8&{()>>0uT zId5ja*AjCa>EFaccC*W?uSY%J;J4lPXEMutHYLP_P`0<`EswH_fEz`r7P?gt=I0LQ z6@#-_Jmw&}a&Ip(NLEaZdK3&pC?RUphs#?3Wx#A^AlTb05ts%?t%}k>0XYaCm_8S? z?j-IP#=C!k%j!?S?aDi>pqYyt${+9`mE7VWd0i8G)T30}<2f-0>IS{M6}Son5ZZbY zGWzxMXH}zNVihS_DXTd7NjQ36@Y*$bQ3>=#4=x!9asw@{w2nE!^>d)2Cog+tn#TkH z1EOxrn!Fb5v4JF*F3Hl{Mf;ljl+CSa9N{%VQ;s8nxc7rTr_|!_L~<`-23a*)lsVq- z5Kr_Cd97p{247smggpA!K!R_ZI1(b%0j+wVeSc{vo1yz_U+Kx07*XT{v6HI9t}1pq zES1SMKLG|>v2WF^wEiK&@9yw5O4eS^*2}k5Af4KFdWn=~Y7Q;i!V664d_of95=Ch{ zrxdlUB-A-q8W5<>&73vScInqq1)SD~4Q6@t50vrqCux}|-1A7zr-e7rHfYzo)SQ_7d`^MHfi#uEF70Kpyq^*5h=^^Mp+&}G#tM_;OErjI;P zNq1o;XC`f-d`zR1tyHkJlG=m^R0ypRXJN5#{4MGYlJ8DpDsQG?p6o)2IimyUhS`i< zdDt)LhrX2@ZU>lx1#a~cOvMi5mi9=t*ccGfQB({$uBmw&4AL4tS`5;6>v=NR@@mia4F+h-<6mAq{gcF7WVTa(la$yQAC51- z>JyH-tUMy@ZUEnwjf@KK&2MzA3u0D9ScQ#T8bJify}+R8>+H+qP|+72CF*+}O5l z8#lSRo$jyKJ;v)d-uLl3bFX#I-fPaOBWFj8hvs|KO}&?-Z0Jdo$|al%2;dK(PjjD~ zhzi8y$y_j!ML>kan9!~fUQ5BvcK#rau1V_<&p5fUfRSVxvzvS%YV{56pZS#)S@jav zP9Zd3-^!n&rBe)@SX)YsslQf?zva38>!BSjNph2)O+rrd%A`waLh7)Q&Hu`i9_51J zuV6PG$}_u}Inx=!Fs zs>DlbG0IDVb12wT_V>sm@b1s6BilFlCxOA~D2v_k#87VHlM+Wla1|2Z%Z?-|ET{fE zcYy0PN6a^n)rX7^93dH$U*5ENV-KyO`?ZM^lSMmO(|ypara$D4;Cq`tg(+U}6MN=x z@qOhPU|~}~rg!qFV9giuzc&_GB_I}9f2Pblr2j=*$I;2b+0e<^;lC1QlFGWxJ{P+8 zvMM?vPCT@x#CAk3ExJ+52~#! zWWY6KX;VW9A0&3$N`xOFajr$?m(EDYGc8t3@U=)j*m>TY=Qz7K+ht2h{TZXX0FUg`4xn|32W`jNzB^~znM8Wp7gU8bwZ~4 zx4N=#9WKTV&FYf|lXJjp;5;}KTH$84=JSK2+;r$4br;R@c$wX`CRf!YbM`BJlYl+r zf&1tdUaI+0D+K0fn*pcWkuQf<$U>{tpJt6Nf?H)?DH}JhZZmsCanXnq-}uJibHH6A z55r8u)29T_ydYX^+aFvoA0z~yk%r{3al@>>wcKr4YRq8N3CFQTHtqZ3bRgZlHZP5t zl#y9GC8+teXxuo4wI9mZV#w;mz44L1WEjS0-Pn{v`s05jtK6)fiZDV52xaB}#bLwQ z$^5^BWEKTLuIpU!|0yIhmJ$E^`&#_GR{4+9_V5O0?mz9}n^#%q#x!5!@e~Vx$2Bi@ zKiO`-Li~)&&vf#1y|&)6Wc=5o$C7&e%}f{h8ciZq!oEEKEy9-7RKGjb6yG=7I9;J^y*665uL~tw%nrGP`e9TTLRN6eVD+u zYu$0J-n;H?56m$_uF2^>tEP}i0;2$}U%u*CmcrrKGd~b>a&}dHX#;;AWwCGOj8(=# z%O4^B!3$e0jL*?-gV4w0A1AV!@_(J+^0tHu~WOy52?=_Z(f ziG-amJ+i?a(dxdo*N>yC>&GAC^QzR>c2WC9^&{e@q=Y%by{Wj=%(2tDS+CQvpqeRN zfSdE4udCM+Cvr)`vrV!c9#hnMz>8wc84GKUqOGUwR*L}|8%yF!(obD$B*}q8?Hw1A>7P_A2AWsmyaM^0TA2f* zqwv47j8k_B6&OSzbu8&rpPy*`Y}3XXFXzakIYkfo(PAM3y=mRH6thqxmbXS}jm7=r z{KY23UK^~KYPhIfiBAvSWL?43-C~Hm-q7z)F?bIT(WXKh;f1Dp?I7)!DgTbSN`Hs$ zG>-2TdG%4=KPEay``u(u!6XmU>ruxmL+w!ZZvyCpG?~wD2 zRK7dHH`z1#*W2Ft4n9KfSvnO2DaNmzUggZ+Gsp2berf{4TxF+rq8}rHQQNSwHk3rGMG^Ng zN@QPtF(cfJ+s_m-Q(z%c>|A{1sa@2(0RcvgjSQj-@_X^f5q2<@LE7d|7FcMHMrguW zn7Z^|Y509TE=aY0KQMQPvL8kqOpHZy5n`&lwKpJ52j^q{G6c3A8FBC^MA z*RH^p{K7)RGApVc{O8Jpp3Vzd^Bri$3`dn5m2SK3Q5xfVZzR`S$;hiT5b1DRGmS)HW2zBJZq{&+Oc|dF>`O) zzx8s$*us2$`Rd&b3&QXIWL1&;CnD?CQIipLPtGI+duNnN--&W~5rKX-@*3esE! zNPnT}0+!V+5Cw^li6e}+G&~Bc05`hv!Ig^WGz z?UN$S(#_T{4_`2hMq=%+Z?kTB-s%C^IiL9T-iOg2S@Kh73ar3?>gLHNGaVt7 zi$>X0!P({b`^f46>j4FQ7UHb z!$9}*YYV!s?kVLIfQJ8Co6Uvi|i%v=NfN?Qd=$kBbGW zu8AIAu?UH*ZL&$Li4J)0roMO~S*uRP|Mg+HO19`aFCRi1D^wH`e`wGdXf3pNs{M5k zKTHPUW(q0@VQ1Nn4J`Cl@Qt~Z2eEM5^T$dp%7%TEZU{AU1kbVFY; zyotZC2o-$EoF8qu99K;Pnx5V*8H_+F8E^=qgX1e!Eu-{{m7bIz2Sg4z1<0H(vt%lH zu6Vg01K?{y;4rB#sYtH1M*A_HYWxMS=3odQNr76vKqTb70$ z86|7BS1=8c1U|TN9j}kBgjvryBc@rFnx}uS*Y&z2oi%I5*VFH|rv_pN|MgVA?NRbs z(%Y$x8G9uWZH&C1nW{4dX&T!xCagb)^|mM^eKwjZ%1YCUlC^&6t%U4cmF)C>)rvwR z5rhM0Hj@nzQy_>^L%`LP$guGKjO=kyt>QRF}9=T|tSLj`nJ_Iq=6EmwZS@4^^h zOUXmAcE0cf`t~_*+1!Y}!TjD?r982k=ym1%8<1MnFl`otmVeDWo!SQ;G(zuW zR7fzXMhe?p#2X;6{kKT{a4T0>l6wtBKUSu0xCe%Q3Pg3M`e|}x-5u|miRor$&pUA< zUM&>9a{kQ0Oy+RpfP5~uJ>?ph6z~2?fj`@V4Gs7R7X;Q9o>UN-t{AgZc$r4gS(Zb15Mk;tU%&Vbrnc+%j$fSkh z%M0cXZ+SLLZ>FrS#%%40PaqKmg(0ISHso))-7D6zv*A|%X2jIycGxHm7id*&}@54tjHwE7@|0no{tm_m^drtm&x`4pm3=uo2=Y1i~~0niOAhZaoWH z=g56$FFU#6ATgjLoh>CZ6eUHehEf|+&)%ew`6GYJ%kaCg8Yc7}IKt(jKwUv@MW7uM zj?h7rO}VBnl+r)+YD01@v`k{KHTuK^*BI^YHO`BQSHh-f{0|3fAte=d!+Y>L{ zCg&BUr4@vcdg~{`Z2RNzP3=AlmfcQ3DFhLE;TO)OT2ilkR`yA`cdgiTep(-NPiE{c z6hzg!r_d`#;&yBtNU1YD^J=41e4VUYqFz9SfGmt~E9@4!&E zs1h3_c2GKYjC!J>vQ*)HS~Xu(ucV7sSsMZ#o=l@&vN@~;M!*HG{2l$3?Il0VrWk*T>CR^ ziwGzAbEZ8AWzxMw_di$%qBX2}lKSKnK8UOG7<2 zULn5YajVh1>m{AiG!G$6vwX$o)CRd`Xf3)?;ZRFHnq6iz{v5ofA_O+v8`Q~T>ddoT zlxy;rm_=MFoL^-%R@7v>A$qCd@(_+~4$|W8?^Ke7!8M8X60Z-_sObMPA#B1bnSLJL zmx>kG&6jA>`xX_fp-`Jq^b1?jB=@4T+fdn2S1+5cP{J8Q)s#q%$gnZJz+{@zncY9x z-tm}Lt-PlLTtv*;bpkrk+H&oJ*L}L(Z;+nBQ`=TiOm!J6>7EK4q-#aOQ~V9>sQ?Ke zxVWS{^?RKz5%xi}g(&BZK_$!>#ctWE=8h#(`Wqhs8VC#lRyN<&`A2OmmHNQ%v$xb1 zzKt{ zn7bYvU+5>Ye^FVP$7V8++Egf>dThe%c$;bBypESQ+yW|yq^1z|7 zawO$(HMq*`_GI^Zf4OH4p%`w|!``{^KP#Z4AZ*ew%@y+2-f=4HR@bwqsfoQKn#2%* z#|C^`JV6=nI@4=r%W^3+qT)t*r%EP$<|%GM44Jk(F6^%(!Ib6rOXf4+r4@IwY!fZM zy-0)^^MusMEi&Y!UaY!Vda%4QFf=1Wn;gO&Q1;%A^!n~$iyM{}7(x0s&?o}ZTY0A* zQd#6B7oA&|(w-)1e9f2iq~eOaEcQ6j1=0uW2ZunA12NTJ)tJq>j54DOxAX-{AGK^5 zNG4@&ZRKVk36HzC4hbwukOFMs{^ko)ej1FOGS!1U`A$g1OXCX% z>w~ZBiu`8ItTDpCz1xD1t=IDw>g&H-KE8K-zOD{%jqna&27gE-ll84z)oI<#&iC`> zlI{1)#g@;H_2=i7>!~RKc$WkW67FSyQP*YIM^hc8n_Ln;ET^flwc!?Sz!E_3>Ysf% z**%W^IKRaep9WW%z9S~Al(9OE3siIVyYnT|Aur*1*s?HVk(ZoEQGG4;_$i`UVGE-K zK|dVVQt25aB33<{Xnz&}hYEv`t_6emjA?Xw^RjtAujm4Bre(AMuBwSDEYx6SOsorz zPYr~r5f>tz#=sStmvoZiICTygmQ0q@_uM1vZ@eU<8bfT$Sp~^WjTiESw3E0$MYK~G0 zRKUWuHqg1~chpZQD^^4+P5R$3PLIKw=tcz*vUJ*E8rU<=dnhDr2>CDah{~1Cq{QDU z)rm1eptY_o8fjxsP#Pb5dneX{wsM}pUZ1qb%WYp4o>YM}pVySg@okNM*0k-+S;4&C z_%|_AgVkKDKUqfKrak(;6^~c)N^)5rVjCZH-k1K4x_r>nK;p)q^!y8`Vl=Ps5Jy8X z+n#6C;N-ApBz_9YeuBUO`l%qzDfo|)Oz)|78%BDvzTc|#6$hny-d;;fpoRNJaoiv= zh_5Tr5KTSPV4AoXVbe{pXQ)*}j}Hb~$d;B(EbfO%-^WY*C3AX;sCJpcCLM(@40OamE@j>U^Ev%eo- zA*o)Mg12@%;fm0GyKBhwe+wiAUhI|K7_ zzidTw^is%Td(h2&VUU?e>V1iM)uW5o%Nv1ljn9$f{=m4K)qjX+9{Z7Nshpf5_r-Xx6v;{s&SRM z{tQ<8<$>(>bp3^+i%W4y793!7if&E98tckt@zB<)y@|#c0(Osg)afG%%=JB!Y-=eh z?SqRSS_z0#%Dc0-M5td|QGrb%&J?5J(C7#@o_bvUe1cnbx+@6(NRXm%jFli!=M3OQ z9u}7@FF#a&lO6K$R~|S|S<+C!4S=NG5{TKyCSoEau(kIPZ0moXThLtfm3}X4iVw$p z;@p}jr;;eb;J}@;1VHdZv78eQuC%bw<3^&`>`wCEq7@=;hs|+6B!$4m7c=8UcS-$V zbg=%$ebM=2Y=@CewzKyq^>>YV)Md7)WBXD_b=7H6VQs|#=D{JTC~RsR0hnUh@D4hg zfav^BPQA`J>Ff<@ZbYP8@IaqR)Q@VXV~76V=3iw9us`&7fZ}e0MpD>{FQ0Ti~$lWDoLDU zWf{-@N3Zv=2PCA%*q^4CyWeAv=usC<3x+pQ-+w`ij$>8pU6e5yjY4Bsx==Mr z4aVAc3How_5LMB`%_dAEhi=TeeXkf4pzYWa8XD7mqoqwk1?XLv*JDfJ zxR9PkhUh53oAYKpl9E~~C>XMqYiK5bmB@{?*7dr-nzXdD9$C(X`?VQ^7*nUyJhd55 z5Clk)Z&UWSPch29F{sR~-7b~?5ojH6juGqFSx#(M9`|*t=ty`DsDYh0 zqH5bsR7*w{Jy{*QM>Sv8Q>86KtfMmJem1^oamo z1`nkW5#S42SpO8>Xe*m7$jaz*EJ)}@CTA?4=N(YP7Fwz;3tMTW_Y=+q7XE^ykIl-Gi zR`B)Ps*!cFXoHp4L*?;2QdJzJl@=Cj7H>i7BILS>cs6c+IOn)srK25owmcbq{t#d` zcxdin8$qVp)ow?_7Aib0XqgfZ{7_Xj+Am71q}7GFSvLFr0`q96X|1pjvt$`?$MO{=<0wDk&xJWEN9fp znOKXEhEs`Rl2Mc6DUSUG0O4^vAaW@hN9w%|&W0P(Z8CR`1s6^$lexlI2-+IM#R-a{ z5OynY2_^DrlJ&!$*xMJY%gzBf$!y}LVhZWeoFyDQcN2AzLRs9W#G;*j@@)ikmhw75 z(4YkP*2(RQWFYsP^3byE!1HgJRG_=Uwy*?Jl3YkiLitT&an+(T!GvlxPGwkOV=8!g z0#}rHR+e0EE?$HAk2h5*1rwEU5hwH~zl<=Ug)(tM98S?)a-?FRT#9=jjGN5FpR&xK z$Y0)`jnrRmEo&BVEN`?z6O8PQS+RsdB$NNwRp*Awsm=#`HlJ(ykdefvuWkbgbk1=pB@R_6Mq8_GxDys7y~V#zI(;_5shB3HQ}6|jG$k+ z<##WYXi`MON?C2od0k6$4UU5|Xzn4ETfC+qhIF?f@X$>j_M14kCM@-cFXfg-RfocmB@pOYO)_ zu*%|2kT9prIibC4!}R!c(2{bt7~ipuj;0+CHf3D_Ze9ITzNZhG35fV3!yAXB^!g1$zJ3F4tXRozu$;DWT5nmxFOrE0cCBC63-wmEkkubR~)$uELBJdIc(p z#n_D!dbIqBr5+};`G4{09y9*2W(Oijb~y5P{~}+tnDj;T)+svQoVdTOw>B%Q@4{3i z+qMk(b$_V&u);GR(@L2O;ooxxPJdez(7|mPbXKqaG>Mr#G5a{YaEc+GArpC$eVl2f zXFuGHfUnd(wn&~XUkXGCYI9CL~Ia43J6obCs&-|0xPsL<%ng$Fn zQ8BwqwbeWSGiJ;4n+_|+{N~oNdZDab9+3{56b$j3lW@9oY}m01IRG62k0u!#Er6rC z#57UGhsP$>OcTGs0x|?;p_|oz;>oXE9F=-iWP}i}iW|~wD*`{KTy3O;hqesN)stgo zIZ>fp_czg46*9|p6Av{3uzTxgcSgrwn35D`v@Tq>cQ03$d}Xr1HXq#Xv~TMNpXFdw zdYt*c&XW30b*{F7aR5?^)cvb z-ZV~v?ag1?>C@i!9XJ?Sj(O}E!)lD)(v9rYAq=JRpu}G@srH7PvcDsH7+KQ1mC|oK zlWsf96^kb10vXX6&blCzxS3t=Q6^^a$~W_VOu{gX|F}u)Vb9LzK$z&sn@WRX|5*;l zT@^e~g`P^6Z<gj?+#s-E=d6qyyw z*R|(j##4%;iIqJla{_4-+CQ&bL$LU=I}}Hg+a?K z^?zkDx}35?%5QtGwQ{pHzF{7(YA#Z~K9%p;woh1RoOT@B=oW~+JtR|@m}0K~piAs+ zuAEKQ$Yw37og(=k*v6^xhbcKgR%W*j!*2;t}$-;r}ygPI|v!o z+v?Zo^+fdzqrVmIuV{<@f+`?dC5^&`7$H}2oY|Y2R z(QO8rE%@@XV|iQ1=i?)TJGNz8_~R7>c6+;Qsd)o{-;YVQxNk*11VhEw%tq%jbi=zl?r*AKc#Fg7#Z{K`$lG*H_QiWx%IP5~0q|%bHxql5BOldx1Y< zNx*Z^Z*Rl8+u)lQ;A6*dDED?J$j5aX^YdWfCbzIRIBy;N3gWf}zo_~=_IKC~h(5%lq@@fN#UD?^kca zpkWzMy#M*3-8869Djf^SPtFkBgVb+U9naa-6a6qN64Ugz=!FMk;Ilixl$AFJB-H+~1>xWI>%g1%WF3`OzW5Bimuu7=Y z=lQlq@aAeK$M^Pd8Z6!N@@}g8eim8t5j+dNi>&bhMQ($xZpXL1USHmC*QWuW+j77k zs-LHQxx5CvU)uUSM@|#RZg;ugn@6Ng060g%(^%lTj`#bw>`~h-FE7y3`t@@KSep6z zS+K_z;QoI42mqWKe*h=flS_xsx5&3akKko|pSO=qz-#yBfiTs>XMn&jZqFb46~muO zY}Tvhr*AnbEuOEjkKT)7;78LM;`0-LX^H?mKu^py+o09K^Oo%=cyO$+_xsDHFYr_r ze3t_7dOFG=5qf(`0V@s5f;avMy*~)^gNM~)hh=^4a!979kKBi50eq@nz{N3*cMGE9 z65YcM0AKcTr?2vI>979d$~RTjYJ8!cNZYMkA)#L!`)~2)KJWb{Q$E1`ed^~}-{+Um zdv@pP6v3fq-w%SzE$4pXDOumnqx+X%;0IUm&HII0b=SWSp!Rt`;I(zxR}VMy+*iEt zDR&ESZVd!Uan0v^DyPWC3O6Yz`Zu<}-jM*j++SC5!Hpk}6~3>RxWeFfRWLAC_x-AZ z8St`t4FK+O13s3Sg|ETuHMJgjJ|88^BscnA0_y#t+MT;c?H1-MT5ItV_F0t!8+AUWY#_TIs9C$4Hb^&wvUTJlzjvIVk zjh>FPk1H@1Cp~U;vYhAk+`2t-17h92IZxPd3{}{hfESQ9!D*nN;mjHhkJs~A#+p?y zVNy*@AYiCnCz}5C=3C8>)^G*;(h4Z%{!mX1+sfTqse!)5_bwo=00go62YiL0P&Q{RV^x<}~Y3dg%; zb)QzLdXKrGd%l+qBep9a!|n${UiZLdZ??Nx#^*QfnyH7u;WJ4L!TeQ`;&H2g`>E0o1DC1cV=g#ht?^(E#N6h}#hZPt6pt~O~Kv*p=?19WDi(?4(2Ujwpfxa+*4qlRD z8sbj$W~96m+;&Ok!FxXSV`8bNm6+B089;{97D*Z=ZB%wm#c{>*^9m@t%SP&{CPy_g zron^d-Bk8Oe*W3B{z6vcjvVwPSnea{Y#Vz4zCe3Jm02sfoqD}%tsa!7vfa*lW;zpk znLddDf+8eN|Hb-bNU?LE#t5g~;J zHn5tm@YL*dW7a}iKj=a)ScLMNsm!^)X~}#Xa_99(p~!6LxQOup{UdR4ij<5+@b|tW zhZo}jBF4&(j2NhEXn1@9Iwo|rPkDAOzs|9pEaYQr_-JIVQf<1s4t#C64)m!gdgH0d zF1o!Cjb$_)4gL0UdXfyvp4MqGvYN+W4LZ?(w7Q+@iW;81U#Cyt*rS+78JbXjmhbBB zGM6Xp+F;zRdlNjC2JnEg1uNX2_;Wz7&}mo3rZW#XSEXCSpyfcw=8MNzK{FhSn{?;a z)0WJv``5Yax%~0Jm(yrRRk&v-oM(`9XMxzqu7XX1O3f_$D9yU#Jd<%{S{U7w zui^jn;`~b4YeQ&Nfq;V*{q<*O$C1FZK$L0CCqeTKMNMtXmUxOICnAAbYXUk!!0oog zo3ve)LqZrEGn(dx%l+9?NHZtPDkZxU^Nmfd$|sLFIbxN`^0S#J6~|?{-XrC)z7Ybb zGw4vT5!bd1UD#cT{vvoMN1 zy%{v?&S|rusolAZt(JvJ)fw)1coMHMn?o8~g-sbW;i<^>1`ioLvjtg4NH6B@ ziqhv|9*bCvGvWHKyt#ee=Mc_pZ?bV+uiRSysmUnL6l8lh2>C}QO2Z8CuVblPXHWF1 zIF2XHDIA~CaQNmKZFu@@{bP{DtV^jgV|p!ajc32cvlt5H{+Y8SH+o)bDp&OL%Ezh& zz=$O%e8{YVdj+9&Oz>nh=4x2a>XF0_r=i4xZR-l9qyqLy57iU>>fN&wQ}EO#HRh`< zVyGkAD8e8DVWb|cl<=cS?RwdT=(HV)VT}_+cJ;@m?HeULs;RBMmzfMK{zuR46{VyE z_L0B_pBkc7jY*E^bG&|b$p;ei`-Y3-Zpsdy0MjBIP9;gKWeC6jsSi_>Bx_!)mq5EN z446L)LpLF>USAXE6DcW~PeVve=(l3xi#_Yla&L(K_;-UHl+Bgf=#I;Zi#D8hHxI5C z>FYJ9@9{p2TAq?^TH0DrLN)ukFqG8fThjfJ1tfn>Q6H1j?K2zaU)S!|g?h$~TAsx) z(8?f@bvPVSlSkcT7mm!x&LH>jgt57t2qjTX%e(Zq>@MBIo}@KYQW>>Ewdj^5D3qaX zm@@YDlxxJ#UF*VA*LF$6aDnPwXtNZS*ZVpv&En&AukuAmph#T@77_C7z%EWKMT7Ds zj9|(cOA$%+wZP}}{p`>u>Ay`YhsV;elgXy}OoR-HWBruYV z*4&!>%|0SuzRC*Q8|^#2l_A=jhoUl1ksoEE%tH?VZ{LxcM(v2*7-R2a4DZ9eJJcYK zmP^fxFr7bDM0!sDDo5u1MwA5}Mn%XMQQ!AWu?xktfkLeS2mUdQ^EI6oodJJMftfrcuy1&}H@c_2?-v?)3-H;-mP-kg{lvcMpHYhG zviCp`M6;mgIv9cz=>5s7Rwdn=U1}>4QW;O3T(#hDxyX!^y-ynz zxP=KlafE3Nvd5o$Pj42rHat*aHsAqGN;2l(D`pv_ZCMNy6#1%Rb&)NjMN-Stp|6b; zfu3^fzNJsn?HItkq_=Qb>#ESvjq3|8d8Y7FxDH%>02SGiVlVlC0)1V;CElgaI&<$x zo}K-PEH-gDQ6f%k2A1v{RyX{XlpkMGlxg* zAY3n0RxquIh~)Xm(_A$DMLQyZORCn1tO5$2fn5o{!&~4|94W$|yphKNZ)j&Z$Fmc+ z6Gqo6jE!Bqy+|KXKLcKbzD~d0LwO%L@E_yDqWpucQDN|iW?{12zF?|`8 z0;gt+g7p){+x%-2RlLX5Lu)HF1NaNGN|nUjNg+aP@qe8{{>`7jvHge`=hjAchQPqB z$8z0p=#@6Pne~sxzhL8}%7BLQ*dcUE8Ce*VOq~dG5|PsQM#<2d-V~ZAWC-6Zyt+^H zViW2?1a48Dk}!&v$JyUWmE`j>!nPC)_0S$Gkz=D+c6?s<`GpoD=$V(w)Eq~~5S=|X zQjn4rwxfiCQirhT-|UWl+9>2aiDJEU^_kgif+&e5=*Yh14d&?v#GLw~062dBDhs^oM~C-xDsFS^1+#h2^X;n6Zb*F(>OW0~~!AWsN` zDB*$61F}T4&>Jq@!V6EAq70Q#^uO#7juEI{Pwr`t?+_Utyu=?2J}&;5-&exu_Ct}UYG%ln2vXE zD2bBS7D@vc?a^VIPEh**@MNc>zDxll#4+{osJu;_&jO9QbI~t|$MpCp?hszV)C~kGjr+wj zM`O&iKMr9^1lD3kZ_O)o=)T8`+Y|~K#e5A-XuZ(aA&;V&Ju(lYwjoI;&F%?NXJE^I z>+ebPfq#X_Uq;xC-jU-N2}59n3XM}gi&^QqxI0$NGg4{M3=Z2TU!H>Bx$GsOidE#V zvq@O&Q{Ngpe95+(pnJmS_hwxO8DHy>zCcWd0CJLnmvfd*s`_Ww@!-CJ>mCbV z7&HPGyUhP8isq@~y z?raGpVWEQZ%VjrN`h*K{1l_ezJ=!pC7GSCZND?1+x#VYer7mAupStm0DC1VL;XB#9 zsCFh570c?pk6pB7%N$$?vgqOw<5se`w%8(0Cs=cO_?~+Pk%Jrt*3(68 zxlvq4cwD40{CV*SeEpE-6h&g#DLPvmK9qh z%U>6U)-Yu jK7{jQ-qtWZpzrF_}~c6??}iNG?3@2jAp1ZR3`w2>+yik~Q@6{y^D z-A#C6o#JK+g#9D_G>|#+P3ksNmeaOz!)d=ozo|h=OK*o@GlPt`ra1)KM>0)sVF)7w zCw6M4 z^x)0Ojl-<@MW-@q53Ha$nvVY&zzjM2qZs^J+M#g?FC1lIg(}P;*~(rA3N-^9kT$K};!{~tkK6tDGA>^)(FYaqOKX%X%FUuSa0|u@ z233}YP3Ft?6ZzymsoE5@{;<)H1RoN!d*~qU=G)&Uqu39u7pwCOXiiYZf>Z0n)INx9 zZTlQy9WvphEX7_=5V(v9zG`dZ!srO?|Am0CWMmAZ1-dYr)EoD$hwS3XpKY$7ExpKK@0I!Y5!CSvR-2jm1zIZ zm!jTzUvG0bmpN`E&*4T9nEEP0EnLdR7uWSGl}9Oq2j_f4h>F2{Is9?xibs!yJ(N$^ zU&=qZ=~vswI$|vgShvh)!9z6L=qvFni z;TKc9C;wtKgdG@mVK@nNl`L5LpTG|A>VDVAKCL`64IT*(9%f5&@EDebc>{PNryBH-Qjn^eD8a||GI1KHM7q?=j=Y`?pp?y zs6@q(IhzJk^6_ssdt9!i$I1GS*J*7L&*g6q?v6^CV#+_PO=%zvHEu~oOQxPu@(vg< z{6a2dUu>}JbPDYJ&}_s86HVSoz9hSaQ>EU!-fZv{o%cDF{I&@KdG1CAEZFqOm^OzU zV(Z*PiFK>9S%O|h=|unmkDN(VbYC|d6RSaK*mIrTVLo~~@Fc?9LW9C~d4)T+RhzXn zusE{~ZDSiOPMKBaXDr5YVN7#-IA|;jQ>u9*rYjq#VZIkzQk2ZPzf-UH!26v5gP&lf zF+8?=$Fr|VS)3v3X6$7&GY6tGXk}|djqSs)JxZ4rr#A43HhLX*$fc4m_P8`yuuH4j z^3Zg0&Df6R5yM^sWhQx~bXmva4&PK+>f=xXLQ z9-q}gSf?e8w!>ypCT!~cbM2Qf*1V@G*$Y%CrthPeJA2!^|$tI3@F?ZO@arGkcui zC6%^yw+ro-tmaaY*c*;^7J4Dq2#&Z{TeO&xqP_aeRa*4{!g2zFZEU!2F_%Q^2WyjB z4`Q@v_d@nD_uideOw1A76W%u(rBH%cS)@ODGSi&cQDB<>EZn(AU$sKBOOl9Qan~V* zB|EA!$N?)Sm1+q}i5cC%CHxSkRLPeun(IQts2BD=t{r?Yy?(u$+fattp864m#H$sl z#*IFyz=m^?d~qOkt!i7D(zd@-qiKM`mFK$#YO3!V(Gwe+q*hw!RAKg0tYiD&n~@h@ z)&p(~@yQ=%!_%92S%n+!le}GSl8G;17ddoYeess8302egvw!%xqK?FZ)9WP08!A?- z?wUJ}HXN_++24?JWSMu0M8ogqS}YP-nt1WL@VZ^$E{~)s{dFkX;JQJtpKw&{de2A8uKY%rH|F)&&T%E?n>s`OM zRVpQxM&x`XQ~4Q~F>97(_j_O6jrej#<_ptEhqU0oABb`{A^Dj2T7Il-<~LuaKda5}*iM?R!=>3lZTkZ2`^`q7)MrGx3IwFP z4e#S9zxsID#UFiY>Ka`_?Nwz*Z8gLt(H_5!bd-nDWXMk-Bb78}uIlgoX4uY(X=f7F-1knE+H`)HOL3NkIW=I zrPS7B41(PKQZa`AHE{RxtSFO<)?in`@NH=`Dj9Dsq0oe`60t`-ZwS03uG!y%n)BH7 z>DS6#$!xpAPx4Ia7K%7kz51x%*GX?`G(^2{6&*zS%>TsH_93JbDHj*^-Oij=DlcwZ zLW^j$HPt|s`8`|;bf+qkRe1VG?#%WYku@jck3hRzHDCFbn7*(Bt<=LqN;$} z)uLfo2|5x=(%kdP=|xe3jTpIYw91eHX1C^lZd@P-!2qDFW2GvGOz3B!SXh`RqTCMW{U&{^*h8_ z4cN@^knDD21{BjR)1CyJr$NM;ZKKpY3?F>sWYf+~cex2ktRHA)Ed)tNtol4I@9Gkh zdK+V?fW}^JqyOr|b*2J(!FLUq>cZdc6%U<#?Hq?+%;XBjM7|TtAxeC9JHfG3omwy1 zAcEjskbP$RZHrHC^$VU=BVHaypQJ=QB?#P}`@gRC_is|lfY3+0{OB8%Y>$AUU{0E> zEFXv{96D3ZE6O=5=5hAZlWNyu`T98Dxnb-?mVCWCMgwK@ON1H!@Wd&sYGmN(apdvD z0uPJuDV~Mt6F(7Aq7qv{k;P6AoZCPJa=cBC8cwXP{H|J?m5tT_W z4O>u0BeBs)%<)S;o?Tnm-E^mLjW8^K^u^$fe%`rnLTKp&1yp()CYR@;xP2Xv8p}Do zLi&-4k>IM4GSsNfCk*=c6*EFw38VAGiC#~6D&IZk>1l7|%|dR{)pfSe_zq|#(x=j| z1N$k83zxTRyyPcR?vK18O!O*^jWB1HJNB4TkzT5HViw;4wX{DFK+kcU#vC^wG*Ey) zkjXQQS(Y zS`x|M0`Iq0_JUp@8c_2}E0>HX@A4c&%ooC=Eu9l1I5=}_B2#o0_oLaHXbqadR?YKr z6`0u%SLdREtRAX&u(<=irTuN?IJ%{V^If(@hmvThAWhx(BbF@?mzMc=t<83cGMWf0 z^K(Dc+-kaK(qj|IC&I7T%lbM7mClPkOgvcd?&N1mLD(@Y;5=L_P3(=XP~a8`-`S%? zA%0U#_rfV9$II*uE1iaj-L zqB2>oD58S|TE2u3kXA`F&*=EsdIrKSn02_#D|Xf(f=OOi#o0cl87#{yyT2NM=VYWK z%In;|8pO_riCJC>Z`FC&$D;gIKR64)!TZd{@mt_tVBR2%+eC8&Y8y}*GZ5^*S@T_H zat%q8+FGPXk6^@!Xj89@y_3ndtgCO1(&fxQzVvOxNULq0$XQX(lP9)Q2eIeItQVQF z&U+Ha^kcVduMbm23@0V=;e4ISZBU;fkl5=z*ig|pd=z!g$y&h+F$zGsz-J;PuXyQ< zg;)uZa49M^Z5tuF5vcO{Bd-gc(qWaa##>!Xt80!;p$m;2tojuZ_pObCzP)%6v#Gde z&3#v7z1Qwg)-B-WllM1U+o;nTB?%w0<}YE0!kT8^p!VA|8OZNMwd#r9BuaitcX%BA zwrWI@?cob!g-OT6Je<3s(igERH|TjnM2#4|K-k$DzW4||fstL>&4sF2(5gwsz6mjv z5fSHIV@&Z|jE>}FIVA6Wp1xOY^9;8GDGGWqeH4@BL-8M$%NA*qhzedOf`0r)OxH|K zf!yM$!q*{bdD@KC(oKQCrp?+o6T9dUMMD|qb!UD4Sx|n$%l$^_XIr8YH$0SNNWC2o z@*LUrD^FY48(*sF&N3dn2EJb$<~HK4aWCMMC}g5Hv27sAUOttNRinCcsR&WVBC2o` z&sN5+6JLZ@Cgrtn^=z0D)|)fxo_|*xH4>|K@q&MtL{-Yiz&x5Q3uK+pTzObXY9YQ;BJo*Vx}gKor-A&1PJ2Znv0w z5cjok)Lw}ogL3skQ0!Cgrd*E|Ck)(!C&LPq+AfMil9uZ`gPw`B3VLQ8uN$g0lJQox zPahMR@=Z3MY%6WIz8oX4Eqm2IjLhwFM4!k`(tt5K>?pdq-6V@;E3dFx8APP{$^?VZ~e7%6jxP%D1bj1Ed9H!gj-B#tdob9H|$izhJVbeDGk`-2* z^%a!gIFiY~Meml4e5q2=Uj8J4$GkoIRBVUXP#qJA11Ui3TcnG7xQ*G0eYmINBK*J& z+pB6s%Jpmu*N^OjFjpf{Y#O&6#)G~c2afLCom7n1Vxl20gDVy&PwU=5Cf9U7(kizl z`q4XsY(;=S);DnOzM75j!v*0CAB23}jNvg{0~SqrV+7y2FL}%?=!l(6DOxL! zeK$4zxym=rc4DdS*Nz3vrNrmf&{1p+`CAe--OU{h)~}#keXYhf^lyf`$gh1+9oo51 z;X|e1S-e{eaERLQF(33nM4s>^sT;!Vi=3(C*7nRZCbrMYq?T>?J;1|fBNNA?0D}S6 z!YsACJb3bCu+Z=wDZvGO^laWw_Z{Aj#n`C8MT2+uqDJ4@^{_8lrO=m_Y|bJhs*~36OR{{IX}?16S8qc*a`FOOO1f%@E#yWyhSo| zy+)m#xvb6HeK*_$^C3D@oZu;*5;0BwB~SRnZL(f{^9xU%ovn<9f`|jWVvbXhlOhBe zir^L<^9}E+H1Yg9+Y&`uYPwJFEIu&A^Zv-?>u*4;@HpLD{-CL9Bn+gGM~=0S&-84C?g!E7(thEuMJpgPVB|DRpW^Rrd8{d)jHU4n3{hcVS z@@*Hn#JR>#bB*ijeWNUjBS?MC)S_|A45PQkgz+YA12m3yI3(Cfa%Qgy^nh0T=B3FUtW+nffx@MT{>-I$#5nfe)p8Lp9Gn8PRC#=~`tC zyu_y4x2NW38nr7-`YvT-J}2)gM{SuUb_=>Z5cnDQg`bnFsa{}f(S-Oz$9-2sRo7)o zOjV!aeZb?`1SQz)8&k%tgYk3aridv|m#i40l}!(|^lDTrd7cn=Vq|5nm(y6+u(;%w z?uV=#T1HQJT`-+Kro)A}A<){c&V`;?MbQwc$$P00IhxdiFlu&Qw5l1QpBuc2i`fw5 z_j9%wxsJD{eQ1W7WVEwL;y_@M!(#u${Wh~f`|zHn$?Z4GxMt}QG6tmcv_NHnw6tGD za3c?dXAJcU!(iM8QY`BZJ+yJ>HRsH$+I}xV^!;9QwY;pT4Jt*CDEUvRqlxC|E8@Pe z5v-kV(QQ%1w3M%fe8_Qei}cCLCSgR}>V5o92uZ;=S)8PVUnwY*G^iPew~IPjOYs)Z zN1ex$Ych`>^>Wd@?sw=wG*NHi~rUwaF( zDyD+A251OvJ@W z4lop9*)NA-1lH$2$ON|i+o?SRZ)cUL?q?=LOWt7IcuDhCmt5Xh)o!~K`*S$jcY&ve zRpG5vCfyt1B-p8JZLacn*k3+6u7N}r={ncTQM-g}estSW3etX+ML>|~G;Q(^;NWT@2>~YOf zj7ay+C;s(FSl!!<2KqT6tt2Iy?lKhl!p4O@;nr^o^xg|yMCI#lobO$pHanZXefW&B z>vq+SSg|P`>Xt|Deo`XznSW|sycPanqL7>e4OTa!y;A!?;R|dYeqyeM1!yf1(To#y z62prFOeNvmM2!>LW?hSsX1P`EheGvTUS&k&v@SdyTyVwBu;Io$R=(Y$6vlk}$$=%i zS4WKHXX=NK?(_S-EH16h&K{87e7;m`>qA`Tm6tDQyV&JB@FaFeVh(wLoBv({5c82X zg_*FV4${*B(EbAzd%Uh4frIB~MG?6>dQWRVwu)SQqyV<+EeqJ4E@Ew2tT;Jx_vaVn z+G|>{C2(ktpMRg1nDwHXC-GnGPJnK@XeG&{i^Eb35YIoad>FgC%aH5`qTkCsu3wM} zbX1nj_UJC}Q$0LW*O_}lnT~EBdf1&-*Hd~yaqmr2yv&1z#M87})by^3rh4xeQ-C+= z3*YMrj-`3&B-5}mTH_fVw6?HSOyRfb*W~vxLPu+=A*J4&5d*x0^#R;Ex!EpSt3HwG zg<7=JQKgJc_)2;Ixx)%6lC&n~?pzXOmf~>f?%00r1l5-HOibAAx%7+-zo!TBZbFKj zdDYBzJLX+(&O?kTNrw|L4!SuG6JL(ohu2(QZGA|MeC{}EVUR#OoTjb*!X%J|-xJKr z(dzw~wW-Ijok9i~SaCm%v34fp8yBjFEiq6FWpL>y+`&-kS^dn)&2sS@IBQH~qsusp^SRF)5P*^O$ISAy4UpxYHPeO)uA zx)`;Q?{!jJH(G3AY|gyp-|u#SRP$-Hmq8>x?BrzJ99W_<#3OOwXt7JiMP8qGpiD}m zN=&49MHZpqI9%d`=-DtQo@mn%L+F||-dNoC@(9bC+;J=6TIF21E~2+3oj=t@wGim~ zWw39lY~Ok42|bz|Tf&ECXJ$sf2<70tAHi+!ZUYo!!l;wThqsQUtWIPy_e*R=YAFa4 zB-Jg|rh_FPd||1d=OO)w@p83mUYoxgL|0|q-)w9aYIk3|{>#Uym^Xry9<5n$Eb>vL zcOON*9P+#_>Cpi~8gt*S8AqTZdl6Ypi(F8{LWbOas@|r?OhsbEXDymlXvYUqaQCw8 zU>Bwlx79vyy`*?3u(VmaFio;5DLPtwr2jrLC-Y}Z8QR)qjI>Jq>6gvCneRu=`;kkK zyaSh3zGNuM3@#pI2}W76(|WEckW!&R8N+rUk;1JTn+k_-2AW6PsEjw)2m(~g`1T~UcD@oDiIwsGx0?wuh|rpSLj`v!^N)ZkYw&p z?18Z+0ffkYI34_tvBB>;o2;j&lo%*G2IeidCgNxpxr!StL*VS+CZ;;~PBE;rk;3WN zOIX+`(ZIUkJ;Ub1j^S;zMsUX2By4&W5$w9iUbD)U4HDLS1M1(2GKf zx{dT6n>9P2{@R4~pmb|6nvpEAATBAlyvxiOQtK-&E|Eu^tZ#|gxpk1*2^)1w3VLfZ!I+U5tnbmL>u3|Jxzp*(c9yf83VOJP)ee$_g7)c|u ziT%oqBb;{Zx$|t#f?>)jIBz!2-ls&XsqXZGyLYW~OaFm94^dLr9-H7Tkoi-!E6EGmh1O|)V@-*y0gdh zsdG%kX(R*b$5PSQY0)dp(Am&WuPFHJn!j6DEWgxq+SX_1VqsCwP}$_^rsfywR5snk zf~NCvvky27qTL@itk5kR(ZzkL(ilW?x>@^?+4y==9K5__a~8KD&0pifC4%AtK$lyXI+gGhmVDqv0;98tved;7**n zVo6|E)S$w5w4;Hg%K%(WS=(aH;7=^B%|7&!{}MbsXz6Ihf;F(aKy6C=)Me!KqXiow z$fvsd1&~@S%UdT@ns;Ufbr9Ja;+9m}fgA&7FevrZ;Uo8`(P!D6JFwFWI8Ze!-e5tz z8BuWtZEpFB?Sxebd2vNMIi{yb9X6#{e)FCsM(8b#Ye&|gE$t|7=CrZqMbQvi(@oh_ zvFm)gP9z>j&#!gwe22Jg@IolWY&zd1`21iUnM9)dnYs)jN`W@Wrag9duW(&fB9${U}8+BbP(PZ?ir&E6)v-)A%LuJh1YLGhUJferuE0Z^v4p^#fOC2kMTpo=*O za}|##-HMhhyiX-Yhi-=6&nACM^jPu?Dx0dau^o!0-CuINgzr9y5LhyMpGm zP@wJt+@Ha+No1KG_?Y!ONc0YYm)w%)jE<8n&guEB4AHh11r__Kc7MsOrZ?m7oka39~=deWsGf0!rs78JOWnK6I>9c`TnSuII!(x#D*BRMbeU&z%VqV)_u2z%y zDCQI9L;GV^Dfg$X3viJVtLe`;7~XfAQ7d1y?;IbI#_)4Y%=^S-j2!E@du*(F+8q`% zRW}hGv)E%D+XqNJvKO`OFrXecpPFY3^|~YM@qB=rDd~Hecbh)$Dn;n&UD)7v)u$w? z15+G>5=LYr6|KN!CStJyQ45bJ1k8Ti{@1AY(02k>IAXTS}q|g~&F29D_5&^U7B={&qw>p; zn3mMx`#EG?`%YEvOQ;oCJ~k$Kl44~_fl~(yGHQ3b!k*GS7Rf5(K?soE+E+mnHshgolJ$JPXA1$GX;JM_8^>lUH7Zfx8xEe(V z${8Z;p@QL${F{2sj?uN-gGB@r8qptXaw1ogsxLfI*VsRt;Y}e8Iw(%@o=2dCk}6g6 z5=`pFMr()QhfvhTEZm4^)Nh$cjFxP!4TV2wQGOl?P11RkN$RMF{jRE>oj|fAQa}v% zO$4WEa(qIwrT_MV)iI4Ktw;D>NBNA7N!e6Ux8=Z7JkA03VQX~{{pR+qMd#$AR$&n) zIgIe#wSi87sL!1wPIt<7K<<4R@KZiHkqb#D7u@2Cs)fpP%n;c!w|Rb{5!eY@4Fz-AAk?f|9^;sl zz;#;J6r33CcFd+9e4gJugL{EJ_```N&_!}o)u<^+rB?>_8{Zaw_% zVpDaeM~lq~7t}h&r(Y66E$R+j9@L-CHal$Aziy711-GeMk(jO!nLjtjdDvF^L6+&@ z#j#;BG1?|eW|L906>?Gwyz3h!vd**RJ;hHRWBXgd*1;k13PXl*Mf{BP9i93T-^?pD z^9OhKO@+@%E$dlm%k6Cv`RBH!z?J?d_aQdE zbcu@7mV5=3%6u*5fP@b>>5GEiRNz}$1%FAK)3@^aI%ks5@&&hZO+(@7JM($j?e)2g zwVf$8d^Oh1o7*h-hNXc*<5EuZB?{57SgHFpxav>M++zqi5A()jos9E+_GqI=P=GIV z3cP|8lgsH9FHw-?cNXT)5Dv~^HOq77Mr) z)x2xH&X6;uO>W>-6KyC-I>ch%2OBOBK7M4Tc-V>2Si{DHP@KdP^!^q6U#5;CtK z5EN>VL)NIELrRx-X&U}{W9T3aQa={9B(=yX_D$LY6D^#k_sW$AF(u*N8}8v`=3E-u z^)Jxh=W--2`#jYIZc7mv_CyY!@uB1tx0+b1wJjMkk~f;GoE` zg~dl9-N*Fj-wJ_Q3MXA}LSCz$ejCliDzBbYDq`%^zmu^b)A=^q>m{B#?$2YL;jVzi zp|FwQ)U9V&J4qTF5@_nyT(sSnbk>I-;moCY80DG zb*35il^Cg&))+bU?W8S8bq2oFDy=ZG>YGbL=du>rv@>10mE(X@VTj}ni!Vu`WnqrP zeq#qCj!wy95buIy5FdT@{7yYcf!2a#wQhjkXK@&qANCxND-*d0&%-Wk2s=Urxfuui zV5SOF+sLB|m6RGBhm`ioZAD~T86fpAM}<)lHX==<53)AALgvFMQftUYIU~Nm1_`4> zJBIXL`y+^T{_ewX_)Qn z1}m5}{Z<_c51DR`2Pyi@E&mxWLJ_QoUPYXid~+2DyJ}T_10NhqFVk3a5UqU8mb zz)R|HY(S65HcWGanL2dza7dhz!aCt$Ox4_n8Z;t3OHXafN4x^URGP%sG-HSc>oFOh zdlu48Xpls|L9y^MrAASviac(ud@FavGRY3Sa{>~EAc$CmVBD5o#Tb!Ca}YvHq!-Ai zq8`96vauu;$f3r=AN^FxF5LWb#hr*UZ8Zgrr)>r^U>4j+In$l;LYO%Of0f-!s0kc+ zoiqV`NC%?!Eb&y4+BF(M;Yp89_w5ws4Gp6Nagife5a^nU1Jx^bXf_gLHqCd&!@-gY zlIRd7vHeP+moD-nhEzI)(?|jLn(`ES?k3pknnLN!(FMy0vT>@3AQBj2^*XWoh%h~UB#d!t}<3bmNW9t5OAXo6-W<}rZGA6!iEc=m&BJr>c*5V)DElL;)7frVmlEvy2G z6zz!#AsjtbLSc(E@(%j`Fz2G^)PXFl#$F+nTv;96P83qYkW&v@e(pi)<#;DY6YtF~ ztUofv_C`)DZU^@BPolt+UTFJH5QuhI4Yo-K3?&!rc|DR8eL);@F0ar)qCAXd$cQ|E zzbXxT^oH`3>;9#xWzq&2n7y$&XkihaDI#F$4a}8EurXc6f>)wT*d2n18Ay|`v`y=1 zjKU?`Z3MUHzUJMg#@ARe`};Fo)J;CoVd$efs1_?*8eG` zft}^^9ly{vOI&6F4AR4xvpIlSfBfS*4?~QhJP5k3f-iAKsTbOlFh$VLO$Zy4j) z4NDXpgY1VJ`=mh`_D$_KZRtH-Gf1k5M=A`ZFGZY3P8m75iM@?=8kzV0*B1)eRD;H! z&l#`$m`f_^g@OuIq%sC$6okw$|8b~Mi0+d!O82Nog8b4HjE^Cr_w#F(fUES>_F-Zm z563W0d~0N6B>eifDT(T>8W(5_2OUf2$+jLW@6Qc!FGGV%YC%ik7DZ$gx{nzoST?Kx z*XXqZD>Ff9X(gFp54qL1l_scSP zuqUF>d96bfP#La;b@nFjE#kQCC>$WpUu?60>Dv-9<95M1wASCPJHjNa=VwR4mVwXL zqjFu(sPwDjUPj6))wX>-5;b%WEXGH!d}8iu(C2?zMy z=s#!hGNAG*)el3(<$4VfVwZl1*8UOvko;R4%vCjv0EbuyQgv6_tVK&M_>$QDW?_@8 zbdeh*?M~Yh^!8ZrJ5qxvSjLku9_$^daCb^UZa;3|-q|BY109q>8Us}ru54HuR>WP1 zHKTL^nqVZDhB!kKcJ?rA5KEB?a_5FMoo@@#iaTdy1`mw-K^Pp%niv9QXp=#c@ds}b z-Xw!%NQ5b4DS{w(=%wlJBRb!2L8^4T{evK33|Iq=7=9U8`rPi*ad=rMs1ukoV!8*& z1q5KXZ+4-;OW8k1>mDIhVz!BjBam+rfSr)qQNw6bmXOpjUkQ2iB75Wa+6;>E_?&JN z_bz#eVeSd0^gO9rWue6q67NBFPC8-#Oo4`{B##jzX1ikXnx-fHR4Qvvn`iPGRj}un zCRr|2`ED-vASuFu&%A4uYdr?&TjJU|wBNLT{Mt6m|e%<=}eL5`iS3Li zarkJ8Ry-a9EdOfHLj8eitqbTtm&!BISq!k~J7>^BTHSJ{K9^y(6VF9`M5D0kp@qH(akKAi^0@CWysOl}(_B0hwihp%AgkvH!=HQ&OH{1h`s=r;~knFe_N zjz2^){ zgzFxf@>+IVb{>VOt~4`i75TA=?y(^UOGol(*c#VH7T*fsPO{ITb>geqHy9Ef<5Su<6#YcCmL1{(2I_}~*~3anGT`71G~=c7Oj*kF z7@*Ba7%~nTgZA3PK9ZDPwf&2{XZP}ADrhWeIo8{P$yIoE95f9*vTrIUDS#(sNK!Cb z3McdJ-edZLs0f?;ie}9eChR!@`UV9%h{1!TIxmkFR0>w|pNILqH~*wUsU&HGiz9%J zz(7f+cP`?2WaAlsjOK02lp#z%30i?lJ2;D^y4I&T9g}i3 zct?U?d~H=CDKHxLxZo`1DFm*NaWdu*b) zGR+7hPlJx29uBnl&UAU7o;d(pi=Vg#2b4OJE%@JLX`!E*TSAG2 z!~Q1tyHA5K@|4rMEDmS)B)cN&5%jWcw@5*jX_|@D4a^VTLi1$85`oNsP~-_6Y57Cb z9Qmx~NfP4!*#K)GK}-4z)l*H0t#lUg7Y6A4hiFeYbsBUIU3QSD-L2WjZ~5@!Pd&*A zym!;vo#{{eZ`7c0k5*|YG6LAu0NsA0|C@5WFw2qe*A)Mzoq6)ByYrIM=@4npt^XM0 zZ|%;&kv2sRV^;KDR_hp`FT&l!#RZ=*U;A5&zYT;^W3zrHVt>GRWw3@n?z7bEr+pE% zD2?;Sjbh04fe|w>{+G+yFkR8kc2{H3HjkY%@P;A&xUfj(uivxXvs>ZOZUN|>Sc@O0 z4`lmIVVz=ObpP#gRV2gkA_TQnC~!CZPhS*t<=8>}?T^1)bP}`%Rdoo_GVl=u&ZL0R zoGl>7b67-wE9R%$UAmAUfAXh@x|_dSoy9Pe!~eGBm9{Q5SwrBbd%s$z6z@0f-wu2g z8mbOWmwei^?o#&sD<*!15!(4JJu~7%CS+IQySIq+yWL{1pME`OxOdc|~RKP9W7WS?NjC+L((4w6D7dHzs1<1pSoqcZf?= zkTk&w5#E+e-oi_Ep%nFK{qR4QxlC18NvL51&79y6>@7?`0h;YT?abzgW4}s05>+IB zceu<(e+`)+$#NjO{pwHJ`91G1)K9lq>@H*9Z&k3bmnQ!INF0`SHp0Q|ID7c6X-8;| zOTdQNx8zhR0_ie~T&ZL6A8C%m0ai)U1=mGrT3yOB0iQE>bN`v&{)jdU#rnmmX0;Ki zB%tv7SE)Aach>*4BK*nvQ#uiEQrCeL_;XFTT0($j;$KS$6OZt7I`bxlx|_N9QKO;w@Beo!>D$QG9QbI7F&iRnEiA&DT}e$ZQJtnK2We{2(if*$sm>6MV)z_0oF z;6*Fmm#BdR3F=&52RKnr`(Zr$<_8faX` z+xVVw!vOmcTw!(3L`3qIg56?wy&jTF4Ho&o)q?i)rBHpF^4Rqfv`b|z)@9(MjslyS zluI2(3Z)K$QlLn7C^;nJaHLf<1tt$6-#AnKKyw{qc7>GH zwCoW#$vI!~*Y(m2e_$C{6}x8DADt`z)CoJZza-mm@^ZiTfQduMvkw&1y(9b74P^)Q zhZV1k=Y5~)CNRC4(`C3Yz<=@654xm5NhhI%i!Y-|FcAvP_JCePk8FnP@~^!c1`?Fz zvbQ7?wNU3c%{uUT=BpWcS12O4<8A5}7w*{>?HZ_-#h}S1tJYi@^-AcUPBA5vsRUR( z*0w2w97f-Lmolj2?>OPjZi3#3H{k zz;ByeIgWtPl|M+^YL~mEBX|KX{w+eoGTKiSctgw5OEA5mU|a3FHnZs*m&dw4r2In? z1O-s3Bv`)$_w03g9mhis)Tef!z3xFt7dx9U$Y(A zG$vO%1|=KW_pYaW1!5&1ahP!|V^gsAe4hM%6}TTgoXy`Bl7YjZ6}F5bK|xq`IdZ{i zC#3k<C7_9 z!z<40);m2p9yr@Du^s>f9aHmiNlMJ!;#Sg~O*+v;uof@v2IE}5CUHS{ z=m^YxCCwu(g;kg$P|`^mM9(bHnlp-N!^^1>A41Qg?d&tt4u${~H3mn!#&R2Tq<{vN~VrEDqxix}vycD1`h(WdCFx}vq<_sS#v zRs|kGuVibpLw=8Aq$R$Fq7F2FcDmdL{-j)p5t(x)|4j!ez_Hc}TZ3s*T%veCUshMK zVOoUiKQUK>T@fjK_(kN(ZeYC5PTyb-)ILdj|CZrOtQehbUjosk3mUU<#x}cP`CZ_Z zIC#@kaXUh?t_TzzileHA5%fB?Ej!Ob99ONGwVxW0x@?SJw1hm+?v zH*oJC2Hu1e{muK8x_*i+gZt!CrjhdnQA+<9m@Wlc^-sP0ly_&%+@tE(B$rIYFJ0Cr zIP5)(ae}URN_GrFZ)T&kZ!E&`)#6x(=~3WT>yDx~7gU>H4+PHXWlYFb?Hfz}Gy)S0 z-A0ljGKfryiI%M8F4qa>ysQyqzNo+X5%=GMJkBN$_qz%KX!x>~>9p8fE{7kNxd-1$JvR zK)fnzrL3YnrTF2eYzlUsdH)~ky%vQxXc@R(@t>`pd9tXfchKc1bgPED-=-c_>!4wX z167&dVZw%FhYY--hCt#ZnMYC`hz)o_*{;Fz8G<4gSz%;nS94I>K`H>o~f(be@ zW(P4k0Vq9x#noS}zft-JFsRD92-TyD%*)XGNg`_U{pFVYj{G*k7b2=l)=iUF@Z0g+F2VMLniY@jJ*H;T}Ut6qh|w<`VQm{{bw58dBE6Eoc|1r!{0*HNBR03q}5koqga*Xq2n_sIJqoq>3m@I}QAbjO?{KG{Uko#eYZWKNjP+SNnvuv279O z3g80a&mG0pzDirW;3eqi)`(i`=Pm`ojxMoZC%1(4XZP^W_4je|4rYTba@N||lAl7Y zsP-Vyk2UlvIpF-r7cmdMnxUjzVzO{Jv_^nrVt0AACax7jns*kkh(+{IgJ1cHZB>DA zQZ}OOmvp(nSTQ8uo-0TKAM5#@gJKIz?)k2(&`V=(LMBpI^6+^S0^wTdEF88*t(?hsZ_*1?6FSK3J#xJ zV;1{gB!7^xd*}gm;J%UFVd24AZNe2CN;l+mcHKSnpgNB}3XT($2RaSQI9P7TsqElA zbniNkUJAk!XY&yMM;q=GtUnH~XkgEoNuGbC*(>6xdz8$B6HhchvJnG3)9#tcUbKfE zUDwc0p?ZQMtE0Pu!{YWE**7wf%L?2yaP^q7vrx$8Jp&h;@d%o);f!Nnil);mh(;n> z(G5gXzP5!?-_GbgqcJ;s_iZZ?G1WDPDy;UY)!-n0g?GR-YecRvPMcfwnRD>owH4lL zanZeT7E>!r+5=odtm*#&QU{2ISbu}vFT&>&rs@x}4Q&A+YC9(R8{Er2w;B5jES;9D zLNi{^^YLz^4$uny0j^%=Ox~s5P}$`lz!~~($rX5;f54u_#Di=yTXje>6k!a!7pwON z_?~#sLlx3HQTiHsx>WkQ`&H?BC$w z+Af^^`{#|wUq(RTY`V9%iudIDN@+MWVYxKm7cg3aL&E{Z-diUfvhe{LuPCN^1V*^WskH;3{mz0Vv_7c$EjxFuwk z_6v;lj61vmlwd`yLpW~vF&b*RQhEveNwv+#%I$-;f*MB(Hm5cr5SXX}5 zdg^ov4FZ%Pvym!)y|y$6+PVA}_~TudzZ~lc3Q6XtE8rnNEb-fGx{wnR0B2ZB{MfBW zGM4o5v+KLfb5Z=)ON@W~PYPkd1CPiW*-;LrX*pdyvm+H>Q~V6X2JZza2b0UWK{=+ST8P?BBWN z#!i%FvPi=5W!FU^C#TXjt?L}(uJo7cySiL?Z(zFWP*{tFb5an;}7 zc(=Ph1Yf-PZ1!nPCELyJ55SiP9(y@mEiHup2Hhhn4!)-`2Sdg>@c$FIH5J>xUG266 zScS5_ALtjl1Sj4agK}k+(1f+pe*(?wr2Mzz(-n^uudn~B>HquNUB05lR9&ZGv?JH6Grnxk3n>#Q(U7=+` zS0JWo8+0r8vcpxce`tD4Wohl5u>5)O_}P`Vw~kjWQLm@{WA5JyKR#LQhJJ^x1(udV zW!L^MaJuU1X2+COKR$l5EEB4+TKd1h)>CjI=iw(`D;Mp474IuAnGnX?UnQWRNsmh_ z#P50LWyh_sly+tE!a{`Y9=|#F(4`vX9p7BfzvOd6)MQ|2QOK--jJEVa{=S{M&XO9% zirgOi`{IFX!T>lCdS56noL1Tl6<+@V>bjfj`Lx~_0!`D0p0>A6u9r8O1jC0%joskG zBmWZ|*AZmw_5jfmtN#2-%MK$U7dnMgx@C3HwYAbZu~`g0t&O4qeBq6vUDu^2z`8hQ zn5||11L*mwoY{{W`@w$$nuBm`0*KPSn~eKXa=leT0r{A5D%}3--!y-yfBahd;a6wO2CPnE9#@q_kQ2{ziZaIXWaXDW@gWx znZ55mc+aos`zH>w|H$|sx!>4W$I`n{6Y@{i|1TUiQQ}@hU8;*r@BbNvU<1Nr%=%sV zbg9C??oD7ebr!bo@idJueKk)m9PL=B=|>;l(X*d^ohuM_)8t33A#$pg z?DtAPSIl8rC-*7%gKA+*L*Og{JfX3WS&jX_VyoL7U12>CY$c#^ThB`4Kg^Z6l(^K7 z(2CqUDN1!gwL&*Ums*VbmgOee7Lw-PybIs;ONHy;5k-nf{w;)3cG+wsT8$ZEyXz&?e^C#FC#mKVcF- zdgRb(Ip{XIynS{>PaqRaDUO{PI6OI8Y~aXHOR*hwX;CorF7pMGUMb?-V0|KwUK~>& zzCRP1-jfc_CwJC!ZEw*h_+Ed$!gSZ3oF~Zg=R&b(8u}uL2crpQFdj=)BkxhbXwC)% zZOy+vTdUhH8I^2^U9hQhSu6oLF%Wz+3{GUS>~O;WrW5SXG=jIS|{Yf)L#QlSJ8-pO1f!#H;4w6K3-1C{a zGe2{*sVC)A5p#URi;Nyrz+9Ol#3mdO{q=4578D@((!>mS`;scTdh~|HJ92`wWLy0r zaWBL`AZ$k9VCtcJ)V_Ot2G%@jgWXOOGscnuI%wNl(90io&{76yJJWmD>A{S6LJe?| z*biGIZ4vRBYCq-xoVy&R%q2vV-#2LtokeUN9!OJ?o<7kzxhvu2{_2war9tWJ>~?c0pjKwJ;+)hv~!Nm!*DAaEEc?a z^BA6_L-)g@cV9135_cWXv1<+1>r%Ulx{BgV#a>N0o>PrHA9-&0lBxcK=TC}tqKqf< zPb+V_lItrc%OuOJcgyd}i_;Wi|A#&w87=D@UQB?HuROOySpeaW!1UEmH`R@dhKz<% z162QlZ-OG9EZ_O8c5~h9imHR8oD595jgL(3i4NsBVk<(CC$Rk!5%FOu?+3vibWc+AJ zzY~x~`J1kazDX1Cp$M`4B)Vr#+KeFW2Ytq(;}f@R9R9vtd$$ZCb5|~-q4;NVC_u}p zux%q-vp;D~8GDGZt()I6Yiy8GCJ8m6@^5n9L&YvQlik%M$)?N}^T)OtYVS@9EDSWq zTyDQ=s;8pM4A+R95wS$Ca)yl67fRDrph|RsBIf zgRya7+$+fC#N!2=hb@A`7i-&5Vt=VHP12@ZK*9?h@pkulF8tmtYbN7hikXK|U;H9z zhd(~CZXeOdrZ!iXI4kreKA$s;`8Hmct{t5ezLk@(2@$P9NBTFiaKG*R&78H{4HBYb zZ#7Qu_I@YLUvRq`fa|MWBrW&vA|i7M*#46VJP8{SkpzQD)BHVCwzopK2zX&n$nx-n zKnUN(A@Lf!~#At97&B$8?dvEWnm?eX)OZZICtk%k@^QjSj0EC%- zp@%N6#c=2hx^l4t%k0|u6GrwKuNL&PiK$F$<%F_?;~mH&v9fJ*QO45Bw%2g3DY0u_ z^c4KF=2oBMjZj9M?S!o(M-rpvvyKgAL5S3kAKy_mRq&w+fe^pT$Xj_iV~-`K&BLBh z=6#K>Xd2*n268NMQFM+RIf<^Qm|im9r!40P2L*1+=v$GwU{56?{16Uq;sXDChpg2D zXY8Rw&v~Og83E5Z0Veo+u~Rv>ju5%!S|l#`IZEtUchOqMd>o=Dl=)|l^wu`qPGCu0 ze<@M_`h;ji7 zmC;>n=$Px7uTqQuKEKZyX#@I_8v=ui;+-V>99zTGBEyvaw|(Nrp?6y47ZLrj=DUX3*ODik?MDN1Qt+=Zb22sSHtG+`}tTPwI>}Ls==Z(23q?uP<4JCG0ugXgv@+j;j;g;93sHA?Xup(=O@iBiSZVe-QlnMJVC{6!W5V{%P{Z&bb2Pv)#x z>h5|44M|wS2)a=8;h8y>8Jm}0`9HR)+2!y!ZQH-W2Jc!YKVP~Sz;j>UeG$CD;2%y} zaO^h5`@EtX6{J9K**#Hknt4FA5XwBwzstd~Wtf)e0V3D{U*227*VR&ROt{tTw$Uwh zrpmk$pk5GQ8mhQ!6-0;OLpf#~Y7=CD0nG-)K0dIWi`{B`eYRT1FyYqZa)j~TEua-& zCzw$jpF9||13}M+sr3N(%#|2EA5R7tOpGKWf9(+2Xk7;`nlB|r) z_w6!_e4#wUmq{4g9wBO0;Q_P|Ac?Z~z0`j*BlC&wUQHglC?h}B{sic9|846*$gB36 zPSQNckYHp{IoW#51xtyKEk-L=D|!_^2T1oC?cN)gOAUltX;rBLbF%pL2AwW;#?kPcw~w<)-vy@a{j zn7mWYcI;Tf*QVB=TC(9Gj5ICjy`d7OYSZOL0ySf<^k1{UKP-Xs3)ay-+81U#mZsn> z9^$C1Yod!NhziAayEa%%xsi(R?estaMido;O>hkAo}rAvAB)?OjW0V3fE^ojw9+CI zlpoF$%7hOgWHlZ77lSPiWeSydz~S+sLKwx=RNknO*nngN=`VqTV^0*3AUciM&DOF? zG2U{5QdwNO1^ZHe>%3?BAv-o*IlIP-(IgyQd2b<9csBg8CtgSbsMoCfqs?+K0$@n# zXtOK~59&7SdZIu*b2>Ocygu-v9L~*QVb)zR*{J-| zMm=R=xKTG)jfjEFND#)~+zSklDcjWd2=i1;8ra1aByzzS`JwG0``r6LT8R2L_jYu3 zKs^*u=fjD&tM0WzaKZQLndzL0e2Zern8#JRIgk9$nC%d#q1d3tUN?a_{40b>Og;0U zGuFuReoMj|eRj=?H|3KI??5>ZSw_^H2Ki~;Lo5y5noTH1<-YlpCtem5- z!C}Bj*PaM(Mc81npVM;B&{HZTnONtv#KRjUaF3eYSf9Tcdp)ztp~i?~~WGCaj8YPvjUpIt6b|c?iQ=(%`)bA|jhDsD6-t7)A#69n$gKqp_J2_)g@gf#ocDb^{A4&r zpDnWnjFQNDbD}P@o>c+sIcY?}1{FaB;(sq&kF2ok)h)n%A+h#Lh ziDRttqk=L@rrc9B7|IPMmR@yMlBc{olxY~Fg3>TdsO_w0^(7V@RK5@x3>)eg>sgLJ z@OX_Pi9&F%!`FNn?8JT|*8R)I(iRrcJ3A}+gY6N&Fc;9D3$H1!*zA^Fq!6f*r=}I2$10!AJGA(71 zpmU((;NK8>nh-G~(V~{JHjh9_wds=b<1lTEq)Bz3>ju;uGr~SHAdE7R&k>4W zBh51(7gXXJoYz@X4lp4B+Xk;o7+~T6jVZJVUS4`wsYlbKy_x$(UJ;Lc_+b=LWYkal z;zqW;$e2gKMbg})H2WRG^BmT=kvI3Y|7Oq&#!mMa-gUMCmnuRTBdMENp+5wtxw6Dmbz_%HmQBorDN#a?LnxX$I9*(foA;I!9YUWFVoH;2(|CMw{nz7 zC9Q#)*8S}M&d_&ffzwygue5WN+D)_+k?spl!_4a0yFD8Tv*FF{sa2_;=>$$gtu^IR zljfXvXRoqw%)$9Le-nIMTBrX2Nj&ULV;=KG}A+-PT+ZNpH8r2JB5ls5jQ5QSaXyE7gJjn>MbW zB>_1jttpqJTjP(f*5t-x5v;K00S!Q>$bHHsnbySiX=+Fx_#!0j6$i_Ns5>%v#WM{@ z3EmsV-Jfa(+u(m=?9d5r!}tG2T z;unpJfLhFn9FgGeGu*KemaS?lqP_h+Zd&?+&L|+J_EN1FIUKDvGFt zl>?9l#zjDsw?_Fq`_X_aWO90~M9Yd<2v7sk`e7vjz^^5X@RQ>fxC%uPC1V0(^PfFE z7ix~^SO9GXrb7nsAg;Zf`VSd@3N;yUv~o72HU~~dlv0#k{!|ARVMqoo^&ke87EukW zG^=%l>w@s*Rd{_{TuxQd@nM|sC@q(mb*$_>!uE{Uugk&<(hqjC6 z6YB<Y@8wFeZC$pBy80GlH`DWIiXOAHul=_9F20g#r; z)GydU(twzR!#8Qt!tp-Lfp6u7V|{+u2e=oNE+rhB#do)Dcd)l#PLT(ck4&Q!lJQDt z=l&TUfqT5)9?9KD)O0eZ6P7cMdkSm?ndI+y`tT#3AY)kOiE-(E+g(r{^xbZ#jZqX& zP>Bxd9o8XW1=tlCMnx*8YY~M(MJg+te-PIdGLK85H6&*hL3Vfg*_?#Yn9qugeuxN~I&$ zngV_xeWZ4`1>UL6>dLpK`3MCXD0rp93Lv^;^=2sBFt5M%`YBGRA7-{KOyeB5AGt`? zB6kmpxX40mTE~x)b}IWJPT%7!C)Woe2hkhr4|VEMi&XLNa2>F=0h7SeNQWR(qOU~$ zm90O-e7e>j5b(XfV~_mgh6V;hej7L$>CkCPG)T0@kT-BkZ3348D~cF^g+W0gNm;ZX zsRl~{5%h+tMfT8Yz#Grj=s&u(qu~vYzZoh{?DqH6cKA7^s_%qsm$}~%c zMB7hjvDK}9dLSegfA_+2Bidt`B}3{e)+C@5_$IQMQgfcbKb!JF@{hg^zz{GkQjqGs ztgbJ(@4ZajxiVq}+%n+%8_k95Zb|Il!v2{R-T0q17?KwwRho@zW@P`=U>^=dNFlho z#rmc4gUkTYS)zctDcPU%wK@I5N9}io7-%2QswgnF_c)?5lYxi;*L77+aIF}FTy(M8 zAs2Az`I*{t3og%M5)llrdH_*C>PUIYveqBf1CsK8)PUV8`LcO%F_EWC|5+ns{^}p1 zP>CJ5Wsi+>#ve~afGGP_C3I~fNhp6UB4F(SK#a&;7w{TkMfMBgl>o~Y`1R*HgH;g! zTkn~Bj3_N9<}cIIrFBUohbaCsjrI+=!nz1Zk;Nn-yuoVDdNA7U=!@1aO!*fIQV-Lm zoKGtNx?ci+jRDaBiv~Q#!06wl`bRzVq<9p=iMHVg8*8UZm3-~+=4;jm@wGX zwf_V@3LiM7m52xffEKPCag$01RTv12iLpjL{Oyll4$5+z7zuntB^(7lsw4&KUi?t? zoGh7-SoCifg1~9!g-t36hWtkd-wRYc<#7Nz#Wy;27HXUkQ5MTA?q3t}6W4eV3HM9u zFI#@h=byr}T#u-bWqqi@LFC$P!a(5dLjZ8UmOGJbN$bsS!*H>$U^jusG zPY?I%8)_PAU29xx_0x2Ikm0Cx#1fzl=ofiC^Y#Rs7~q#tN*Z4LY(t?UkY!HN=j>hu z9EnfGMKDq5NzU)he9Jjy{O9Bl@^l-r540vn13%q9yMN3*cQH!K#Z;|t-aQ$iUa2qL zeSdRDRPZwbCFZTDd&w&c?lDtfT%o>Ncj3z)ntqw{TQ#KNZc_cD#?-gpd%xcd1_l=`R_-8V>tny;BGYRhbL*Ri6>a+H!SYm)GampVKjy>c8o3 zj!@72Y3-mp1JFv(!|{|DUuKqeIS^ua&WdIwj%+l(pJ#@Ycx*6zZJqrgpKc*1)0lo< zw|rzerHG7QLf;{Uh_qiE3KM}YbGv>(H%6p-^~#)Caw7PtsA^O=fpTCTgMiP{Mtq!BX0QYYn5TSrtdPkU99%Gl#qF1L-dKw#YQ` z(Ncd6)M!-DatSav?`Daav@#c;oO%10JtXlahQGoXETI=Tu~*;vz_#}bi1=0 zPsGKU~)f%>8^bjRy^JP8F^x825&`S>Ll8DpI}i_rw-Ii+?E#BLyFW zLR(w9;)?jDDp0-a2MC(7BJA(k&-r=R*6qhpJ7GPkj+kJ&cs6N6)JRCY76UG}-=DcN z*0=tg!E$iLHmnNlm7HiS)s-@2i-bhs&p^5trQZL;J<)sf4FJ!sR!J}h64T(zeF6jn z2!OT}-3@z85I^3!L3V6@(I_+BURk`q5;MD^(_TP4 zl-2uHkbe4dTFITWyPkvZ4!p}&02cs5Z~^$s8!saUss=Hpe87o(!TV#=2FcoS#verq zeEHjN!GQQGsoQbIgcC||DE%7PPt(T+aweIx-@o%Pn1A(dfoKZ2|O} z8J++R?1SH<{O8_7ON+sU6Ha}c|J5T9?0nJgMLm(fzSj>|{tq$nkEG0-*y@v-Q;Fl* zs5(M}i3tRl-Sw}#&chGLzrFZZgNM8RcoP2KfWEV30&Zq|{f(}naBzJZe?~xecm{GZ z>Z&grNqoE)&8292zi??E<{jc`Ff$?lW@t|urh7|R;y8jaJ zC$KL8kSW&aNLT(pV76a3rpq7Pn@20nj119wJKt2X4c1y9KEeKUC_J59FNK#{w25&cnDgc zFdR?D=VmsG{Lfx7)gK3d-B$s|;ilmK2ejw3A|EFWfz>aZmoG_31 zzop%F8HYEWyf8fY-{wrZ%yg_vC37!%@CdZ7a}fB$N0<@Niruiw=b7EVeoBJOv+YsBC89h+SAF9;?Xxu{`$_&p>Tg@EAj>a94f0MosIpS>-l z-XdU-5UIB?ye|q80S+_uieppnI2gyNZ{4*R1_8kPqo5HyVeSpS2k6UprG*KR?zzw3 zFmREC)`Z!ReiQES4MrxwW2OlXen@~0elaI+ms8jQ$v2?^hh4*)z&{Z5`mehR8Noml zI07VQ9DV98`LJ{nqy7xde- z1MuH6h7G4RN!{SNe?MsQxVs>}`{r@;`R-z2;qH?7?&|J(;qG+r4q9Fc1{Mbj3JL)# z)6z!b){_ACF$@$`6g(6Z3%J$V#F|0d!N5}A%9g>_z~-%ioxL4{wT_;dj*)>KgPyUD zt-gUhgRY4Yo3*W#u7NGR^}A?g8LJsi4A9j}lHPbag4`xuE!yfUljhCZ#i-$)F zNs%W~ixC2%1#eE=j$f9Cz-)ilM_cC`aA8TYJiC0+Hr%E!J_=+`SS2TvUGEk+mbLsm zn!Wnb#Bx>DG@Y7>BGNu8Ayx6&dpk{zSGcW@rF7s}J5M#7;Qm>(umN&N21U=X)6^q?^M}xQOXiUn|cz?B5 zJFO;xNTCqNfOJBkNOksV5&bT|71nJO9+& z%<*(zr#j;qkFq3s;goQH#uT+W6mK+~StsDhj!55*RuZAV@SzeZD|?zijmryK8{&C) z-7SoCx#7j@>A*6%jkj{=@&a|W=*^FD<|2eSwh0I{s}{vffQrP%j{8Icf(Yq@_%zdu zY#$56Pg*=*U-GNFCzizE3=(a+BpDo-UpV={<_ys|-s=Kv@rjoL^2&v;aDBZ=o*Hy> zkSs6hbF1_FeeaB1HIG_nO)X2h%Z%>(y#l~_6VE~9XBI$5ki+bwsoeP7@+z1KRMNA1{T&_$QYi>Btj~oOmdobVa zWe#uO3eZPe<|?TxDJffhNG|<&GoOHZoawP77scMwtFy(`Vlm)uQ^TiIs+l#<9jZ_u zRu-8sSh`{z>7RJ)WasC(#_Xt*Bj=eu>)z<`D6}l(mA{Prr-9nbx3(!clPdY6n>do3 zjsZ`Dwlqr!5+4LT&{G(8rYo}=-%8O_NnT#6M+?49cJD^ZHP%ec$~ivy@O{2Oae-uE z;|6h|snJYqkK;j5(FSHi*L1mdYC_F;#@fQF`f145V^ZGz^dscIbM0OEOLZ1lD5x&P z|0dUd=A40^JtWsuXFkrbW4KMclzs|ZsiENleMlyVF80~v0jyA%C6QOZuoO7i)BgLcpV^+KjO` z0(RpFx2LLd7&FO)>CK@xDN3(ZixsOusY)HQ#^;(ES4SX&J8JfDRsIHw&(ZPRyc>Gh zd;4rfxg>^>Bfy24H@hBIl#)@u-}cuhQN)U>QIR8>d+F6VaO=;aSrK6=bh4?x&!6E2 zJy7m_;`y3;^q45aKBJ5 zt{o-Z!<5X&_&cjYMTyzFX?YYO!Jxjq_e4 zz>B0iu`NDX>fpm!1>W+l$aNK2QW+3(IXuKj&iaB{5h*{~y=ST~^?l;r((Qy1EO!#6 zrQY*NPFGTK!sePiK>pOwhazQXNxiaefyi?d3o0LkCSnOELR0^dN;)(7wD_be+^W!W zQ48Un^0kzVe4vz<{j^4Ka!YRd&1vE~;IVYoR;hATt0_kHK_OgfG=Fv=jxS7d+uT!B ztDX%Gys4eJr_>KYyF)P3R+eXPXiPdv!cskKJszZ(dbO+ect&K)a&xQ}E8%yuLOKfDhe@V}Xr2zl;S zh8A62o2JUt5C3JG`bb$-g-Mb5kxUb=>y3fqGeySZYMX*8_z>_?*<(uaKIUDgBD ztCCG#ofN$K9W@h`%#R$N85SlutlA!I(LkvHNSl^EB3?RQNje98AvyALX5CPxKc!(v zVRBko-iaD>VzU!$`qdZb|3;&{*~6uTmojtpCEVYlhSHl zTKy(1Paw@}fACr1sK3<2=_{727k6-7vUM`u7Nt|!`@Z?RZyq%9Mb58;Zk43szFhqL zpc++i$5NyQDl%^~Yh%_nKkOnGiW z+#I(X^>JL2?g=?BAuVlZCG`uIlFbJh9e#%=4^(93w7tbB-v#D3%30)~exegjZ$f0? z25Q2I_qL#P_WAp=6k^PAULwx{J+fAP&=3g;nLq5}8Wwu3Ug$j6Myt%kGp|a=^%7=d zwWB`u!!;Ez#ty?xK_Ne7^dY6%{}|PA8+f>4-6B=d+-9R@Mt%%@USdf$jhB2F_DIx3>p_QNY@vkFCj`ysrJu*$M1+_5dT%N110HeHtEi5| zJPCr;UVqwl*_Nm@ujV;|e7J-PnpW>&ZCT4A>TWK7+ID&l?Z>(Cq%`AwnmV-~OA`WG zT6SpvZvBi_Y<`i;rJBX(f}-7<$3v|nPRMs+Nh|tD2+lrACRB{b)M)S=Ar3cB9hA-b zw+zoxs+!ClG(u$k>8)mzv+GUkX9~}X3oPoks`e~-La-EG1Vjf;#i@&HB|0I*V8cl{ zw{ni4XJ#(6fk<(V`3QLyU}v|H5JkhiG2-b@57SG$!uc4g%~3A>R>B?_d|;ixnuNYo zoQI1I@d$zfX*?e(Knh4&3_{1VFTGJjYq=bGDT((fN4PDELuH$e_~rA}ww_*F-@J*I z9uZ>GO8S&IWi;E`bXDxwexzJKwGr@1~DGYr&r^5MVLIZUYueAtY+91tA7fGht}^vX*Mc9lD10VL!>}~Xv_Q@u76UAEhX$FYyIdExvqW`w z5V7dK%DyX3kmgDjU0$1xKaD=Mtrg#@c04KeP}otunseL{U!U7KflF4(c6E)|I-U-> zb<6Z#x7|Eub+(+F?zE+F95rXNa^~3VXRxbH+TtPY!5OeG>#+)`ex5%=7PS=57fj_h zwkL&?>@GlzmHUjyo8x?+kQaInzcSoiUB$I`4xQT-~f*!;~SZV(eZvxS%7`+ue zy&R(#FODu6SOd8uB1SSZKdGkrnzfP>;NRupNzem74z8p7)?&aj)C!06w};w%W93gW zq4(^S){-PJViJ3~+zFap>q{_^3c+n%L9VU3%JijMXmUDeEza~}e$9#dTD!UPwStZe zxgh3fIajc0^N^#s`P+FUGlvtD=qZil{_$6*LP`66Zi?^ntVJF)mbt?)%M}4Jcu+3VFMIB`3rr1SG>qp)r__u64aHD)z`buh-@A zYS|Fv%RYWSc|%h2brSy_wU3d-Yd|jhw>xQjIPM zHdx^ux+clUBiF3a+Rf-t6gyU4;<8IB=7KJenU}_E$5R9ar5Fxu`!7E$uW?ElSYfnz zAD_NgKCWLqegbD5Kh@A7ZdpZw=VYON#3a2GmCbJ|UpQB%oVR4)%Qg`; zAGEPTjc&?dh1{ch`vC)_ci0u;*{^S@d|Bw&6~DpzwBt`lZ3YSUi+|(Sqtxt5^lO8Y z;o{vTb32%YVKRf&X;=zrSTivq>g~_QkCh_I&9trR-lRqm&ZH$Zlja23;#M^Pj9!nM zXxvqL%qtpVN1^0W&zajAFMASCd7XN8^%5mStC49x#0@1iWm~jk+vn_=>}{bYdcr%~ z@*r=JGT&6A(wx#ro%MrHD{T$izB6&ZL6c zfg)tN;KUsp$(d78Lrpdphmo%Dr-$fO?|tXo7DY6qx>4&N*B5eqFB7+NX`Rm8n_{!w zfu^%;W{iL8AW;1DaSOWs zgfZB`Bw0MPutgOgczq1Z#X?NZUs(xvX%OVLs?^e0V2SjuPOb~~$p6$1-p-VD0eY={ zsF661IC9Ki*EDwqZ$9n{r_d#^Sh)~++kGc8M(5pYz?;S% z!feWY;Ec|DhiXkv@5>*sqe~cSQ?owm#4u^YL%eRbpiJZICPF&!?V*=v$w`U@g8nQQ zKQ5HU=Wv&1kItKwl*RS>(bV460iuxZZf05cN6N0JWu;G%z83L!prw3DbFvOAXt-n} zXUwOXdjI~*U4wL~U&Ic2 zPYVn=goz-$0-8o)zGt8b)wHn`woEiQzA=Wiq9S$JSskDm%a*vJ)k84bE>~LSzLkHsrKM6dV^?CP(1(DCdc|ml+E8BJt8ySOytmYcvu$PZ14cb`E~AomJc*#!$MZZdC_qVv4#?Wx2JQ2J+IoC zYPszgu_G_=Id7Vv*k)hG+h$E9B0D@^@i&CRW}}I(^V2EHy8@c!v0Taao|5F+xt!5F zm%%;Xuy^=u5I~n^$`My~{V6FO)f{UR|G{(rX|dhJMKy0;74#YjYmO}b8xql;;}CA- zafEPj0i;(xf{pubmDiW&l|H-21dWdCN4xeHt}hw^Y{`mnN`OYxPsn^}l{naxlxwhz z1btW9&oX8nhrH-DlJekuCHpW44uyDq$XDI5@ySVQ#~fE*%34L|mu6@+l3mtn)0j^U z6O&Y3MSy2~ticbtdvD^A3IlZ(Tl_#|kEX?BW#EE40Kp9Tx+GtuA{c#FKFmX(2}z84 zaeVpYl6Qx6LJ`%_O84Dm!lZ@xsjcp^kszCz{CU_FEFVgiGTjEyqHrrqs%$4TS@tUD z$fX`;zmi1iD~$JMEDN3#NcAXs)=Q7ZaJ?h@9lJ7cG9>n;R3xK#UDDMUw_qdYUU`($z28Hg?1k0;nu2&(D#`?UOU(cB z^%yGqMgB*UVH7+n1O5-)(@TBw77{_UjOnQu40QfnsUc#Z!PsE$Zs8};CoP zfMng}G@@bqamDM?UNn4UUai??IMKkEU zy2S1L$@qgB&-75L+$!LXkx*xK`WZ3ddyR>R-?ByWfXOA1cBXVU#iCPUr#89L8hIilM3kr^i zPvFlo5kp?wv;c_Yt$26t#PD28OkY;2vB(s?2GZf2$P56U^2LGAiG`%-QYX1*_04pi zy7Wxht%YQx6f5imFpi8!)yy4W(^MEp<&b#56W(H<(qn6YUs?aGs?R4@oaf2T_~aaP zGb@XO)gUeMAXoNRv;&LhIxyqa!ueIX&P_rbI}Q&qjONI{KNmY%+%g^j9~iG+NnVP( z(2Qc8eAWC$PAiJu>Yf{~OhdylM#cy}Fz$ce#O}O~SweH|!@M-#FjlX$L4pBLVXkUb z6`E@WA0PXAz#nPkO9SJF^toa!Q;8+tVR7HhskK{4(+53|lT6N>mya>3w|No1M#dP`$L5Bs!S0>;!_iNed^b{2#>`mn}`aiE%SwlL=l^ zl5a`cdy)unUNvxro`oaCllL&V{17qh+ox_6D?Focg~zX`!x+h?svRNBmZ|bKMVnI? zyEmL>)Y)0{?rJ8~q5fp2Gqufwut^jAe{^%UM8>wFTFxogb;Pm93rfAPz7QFn&2P_* zzZ|~2xKnCkU>F}ewsgil*8V$Po2M{X7s2TYIpp~-_8wOHCYDBa_B!?k7CL&yCYA<} z!)BG4kKmkjTc?p+)_Ef`NjfZ61G_kPh#U}}R^Ja; z?w+w_>-t?e`dMrVvFTePXOZt`)5%MfB1N}(H@;edbg@0GGmIgHuchd4s$}{APqWvw zKSkv|uFpZJcHYFF9vzVqbzcTQ&*_bk7QRJ-U-sYD1pln4Qo?R!FeF7?r;Ey_9(tOX zn_Gs0QdI|FOH7411B$TSEX3qW$>zC4ye$ZkSO#j`VRkFCS)IUv8H@-W*eNSjR17dMQhYw%vEp8Q3N)}q$VvXFAp2%#DrYxusm)r}&EXB?sZK`1fn~P7&q`yk z8V}`?@ndsKJJtNh0n*51V{D#-V<4)SegArJT~gc71lcqc2^NNzDP!{Qzu@>xT81?8 zP;tYL&v3j%(z=+H@)OG>YGo%nRK^frM}Vp{PiMF6S5Hs1%jrZnqJE>XC-fU;cFZPd zMnNv^!X{3`O;3P18WhmM`GrHbP|HyG_LMt=UB=bUH}mG0la4MGI!4^tyT-yYgd9{A zS}yZevc|lr!7oN-lZ|^^qc{WJ$*e@SBa$e=Q0ScsKaY)V6m)rtkRQjs95}odKtcHd zR#o5ST$@i>yrjZ8+!psZMPGROoN%Y8ef!O&mOUQz`t3O5u>wfkgAD_4?C6Ut9X=n8 zm{#9|uaOyJ!|#KZ&;@dvFrIC+XlSy)=+7-}aL8l1K28jks8yCM1b!mY3FISO6<%+> z+#f^UlAE`G>__IfQ#45*5+aqYnB{{UDolGqh?w$_Y+9n?1?kHb1vMSqXZCD328JP;9r!vpL1Ea!=f(wT z%h|gNmdws9Ws0sx=R1=#lFDwp244Frz8|rYRn9^4H-#R9HLIuO^%*{$QeWFV;jd&! z?VT!~Z7Ig6)NhM!yxHX;6(tGdcoh4xIQpWK4OB@auFmE8T1e&iXDC+c0 z9Z2El?50sF(Wc* z78(ld3z-jY>EuMSFwgK3XDFsQDmyB1W&+K{bzK2S`BNS zC)!#(ESE#@ZcE%Z@O7J>Ft~FWxP`l3PZ~A6%yQtexJOj$mMWi9u83;uYm$?1(?wrR z8^M44q7=nn$o|Z06<1E^$-`cIo+Y(nR+mjdD#}_j)9&`9Xw04}+9X7xHmB3(fH#D6 z8TK=uQeSK`OJnuDWO`8O%^6~tD2Aa23Y;haJb8dPoZYU;v_Nxc7ATc7Yf`K)B-=He zqPSq|LWf+4th_8ZyOy-_eid=0&g8DZze-gg^n!Wi)exdSVs>&U9{D>5r^|W!SoPwY z6UDxVG>-S7~TYq8C<>bH)tprbXW4-%)I39Z$oy?;@a z{h3L9tLt)c#`6OCd97f^yETKIAePkyq8;`yf0gH3K0Tipu3w(A)baSu&Qm8zgpL=) z30${cq5i$BU8^(?R)eFH0}cv``M-!xOYoXzX>SKv&6Ha#ml-iYM~}#DOelID6c9NK z6Dbl-8_nSL?|S! zG0n*sW-c7VRnM6!l^G9nV~x1%(`d(ZqyyUmbntRc%S z@c;1Lqy4B#7$TGas!xhydPD(n&3452H!db5yH)#;tV_eakjjs?AWD zV|1sdFkhUWpsqTxXRFH*Dw%lrMa(IdESnlx?F9i(b;;|eR0IUzW$h{BLUjFYAi}Wn zBwm74RhjJz4j(kWcOpmARw0%c7u6j!QHWP-Zu8>lk%D2$-O-P#(Y_bcv2azKT5Y&W zRB_2aV^uHC;u-f>Oz|mhBnY}r{YI}1Ljv3L z{_SS0nvq_br%42b4QVZ%d5?f|`<6>+{LKNt1?yYmFZR|A{CQ~jp4qusPDyk~A4Vwn z#ME)Kzt|$sHZ;>e;b-oi(*k1X(So<0!(0eCHtf!#;`Xu95xNA^#8hI0>s%p51Y)eA zn#4_S`&@~wPTGWLIDF;G|yg8>1{w@k?#g7*}-mb7qO8#)Boe_y#t!)mbhUns5B9j zDxe}*=vBH%?_GM44k7ej5{iO!5u{gX(m^2f0Mbk7J%kRSw*aAqeDU$#=icXj-yiS$ z{gK_-**SC0nfaaFIh)zDdgOy0W{=D`>qypjqu~?(6WkTyF?A~9g1Zx3whqt#`6zG{ z;1T$HCiYDeZjVdX@k8U%btv#1$7&l0?5K~#-*1n7cKBjP?!{$oV@{SU8cw2R}RRDs2-MxL3)$=wJ9_8JcR zd?#Z+_fv=KXP!Zu<)^3t+KYuH`O2j8)x)Y~xrs~VEEgcz7A;@4V?>9-@ylXO- zAF^Bu{q>HA^n@9fJENmJ#2b*s>|kwlRx%uN{v`4%;I*ArQJlV|GZUJf!CmIt%a;$6 zS*%8Q_wWCT9h$Z>i!n}AT+;%+atn60ok#~RMp26@Ch%C|=N+{qvlb>L0G?|wMqBjG zaNd<^m|25Zo zC0OEuDKLO9<`o(bT7LB2+j)H-zs3B%%zO;#iOllwQh}uyEo)v7W7Z-|-j}rxjg(S- zPL!j*RD)JM3=Hy#(GMm~jUJpaIuUpOdfOAx^re?KS1hZE_?DKm{z1RBOYZ|RsT(Th z+88xlqE3omldJ%Nw+t6E&^N)T_;*A%=k`0IbLTv=8OjBF-+6GJ|Bm264v7WvdKOow zdx1l0nFR9_X9wt!H~(Z)v%R-u->vv)Vxl}W)+Mw`zhpK!Fwiv3{*&9b$3(H3*txdY zce#SbZSC}Do@6JeCiIt}ou|j0UJ-gvMoPwf6~j-`b50bg2RUzZRa@m$hdG24iB5VxF{h z9CXL{rTqRE2US=?t8$7+0v)^id0}OBCZtCe{w=)ihsJbL{V}#gqSL9;*B{@tfAfTX zpXgaq<_)UAf<=bLaOn#cajuSo_l_AD`9Dv*hp}XR{D)3VYf2 zZF?Q}kk_*LHezdQPg0G*Ba=dkqeh3wW$ecsM>p4o!Uu9=V5FuJqW%d%%g2HYj^$y! z14_1lr#vQ%{qB~}q|(LY$PT`l+FEJd!#(4rO7^(7{m9*!K$I+#V?i*R`3WHh=_S*{ zvo5ZM#ernV(@a;pF+8ne0wQ_@1!Z=g>>}yySG|@HL#bJ2Bqv(U`c~eP3cjZ4*Su8$ zo?Z+bagrH@J_OwxvvZhW`Pkc~srF9#15E1`QkM9>mAxX%rfF zwl6a-Nh<2TWa^K)!5r9QG6#MdJ%_Ot)@z(u56S){v@cAlj2sHmb%0VH8+SGd^c$^J z7VtY>6K;QJ`r0zBJGcFbTIbg|!XXa24VGi=S7mwEvaj)N6BYD}I&Z!(;d$D#tH2wP zqmzI3wa;isf8og;o0}=J( zu@l9tDlt_(dm1*EV&qm@dcIq+I;i`><}EBXI~^%d_|165A#ud|!E+pK-6Od8k3{Rlxx#uPJz6J5-t4 z&0Y^KH*nU|?6c4?BVTjB(A-yks1>-KQW=3_V0Od@Yu^%#1hIP*VZcMn&b~9*ER*>n z#PZty*aFJ}>klcGMQZmFs6;h)uBkuW=D7G|#6vIhU{3SKz*<@Re5xybHDu8=JhG58 zNT{E`iuA`T0ykpy95>Bjqs^rEJnx2u?;YN{^2hU=slya6_Vj%lE69Bh;OXzOMCK)(Ref2AR=0bc`Gn^ zx8PuaW+R;O3N-WMi9B0Cb3d1%8_X2Ii+Nwf7JRP_0g4uSqbgtMazN{W{i5atsOUm~ zyzmiv3(y+*ZF-NPg6IW*uM9t``q!`=QR)j?@rQ;R$GK`o%y2CCu^_$f`4jr2 z=tgDyrZ^!Q<%_SkoBEs0Vex6##j(G>?p2Q=)k_h?A^zC^Ne-Hj#q{^!0_+UBYuDKR zkHZVx110BD7d3Nji@Jn=_-nLu$z?3V{ z`MXxLkJaV1M8aD$0H4Aep|tL6{6Y;|N#OozDr{iUfSbcLj8OwOrN=@cc>d~^kMH0; zD~=?&TJ7D~Edr960M=Hb4|JDn-svxHZ{B60ef^MYGJQ{)%^MUqI70A9U3}qfd;42# zK*T!*7Di$iQenPYas?0cnST7K>H$6>VcXm1%kf{Ie&titc4|-1xGPoh=yj^?qgJnr z8%LIv0Z(+$52}Poq*rKu$p)*7C&c}$zKelFG-nR(rk zQk=ZS@geMnn4y?`BvSdC>g$>3GIDo6EJ)6CR4C}&Rw(~SB0poF_^~VU^V`!Cm4J63 zx~bC2?^(GH%g!&hWDC6#cNUKquAg(YD=zAtt1sFH_Z1-Z?w}17&a-Zj{tE2;HEo$+ zAJ_dx=~n&q;Aju@gPd^pwrs<8r?DkRdtuS$M+8fS zez|S|Q7L^$+Tz?YJ>`9hb0UXliSjzZBf8#F5&qEqI{vykaN=9Q{+$f{Y&8IfSEHoy ztWDL@+4Gp$vtKTp9HsJi#q>TbQ7)8n+s-o#*KZ#C#LDzS;VFcI%bc!zGDCqM06ZJj z^yej{g!IyF7f$)NIO4hBrZbB6v6K4SCf#2CLNyE;H67O?##`v+X6N=JJOAg$-EpyxDg|1FJ zDV?S)v&`zVt{BzC=HvEb3N}C*ZSDwDSiz)8V!Z7&eB|qWii8i+xo<11^5E{ z02Flc?%eRAaS|M)YNxvN#dE?NOlnUOwt8T7Xz;1_-k{d!qJ4vJwXX)XLW>R!B5SD! z$3GVx7^KyDcWUj|=<#sTIJw~uvSXR_gKDMIYDgy+>X@9A(g6=9R|LdU7k>ZhUOH){ zr##?a6$pP5j$~P4Nv{m8^cr9qSQC&-UHR)5@+JgHyF{DsNUCi{+0l_W0eD|}#1%em za`m+~hvJnk5doiAy-O${qghoKpfe`aDV&iaHc;|2DI;00>3;Nkm$OOdjKaD;zWJeY zffboil{1Ao$Xeu2%dtt{WU&UP*-tYOmN_BA>37Eyt|S#j};QlbXCPn6eV;Gqf`9@7X}W zD0a@}xfKzfXql`bnt2+FHfxfJruow>@8&a-x_++FairSiJ_=7%9ZYW}PLX4DC7 z^_Ap}tMf}sU2fwT6Fxn6kfj7S3f&HnuVR%0SeJ3Fo@1lT_XWpim%qgp?Fe}qk2QK$ zY{7#p)q^9Xzf92C*-Y>3o3r-W?)%v2rVVq&hMsv;7stQS4I2N+B#K*}WjZAub4M>& z>MX5#TT>36ZNV%|{CMQ&ZUQRTRN6UW%3iSx+m(&Wk}5qQ(aVsw6pPF()hVl(!5PFzI(c)#T`L~{3sRYRNcV25{YQ@)I^ zLd}Vv(#@|BuQjin$lxf_Rlg70sLM#|pUpFp*1PoG``?H9ecy!+3nw%E5( ziU4<0Fv2A>{GZP`E!@m(|C7a#`yTi^ivgD`O36!a>pF&C^2(5GmGPad1i`I?@2@tc ztSh?8wS6ddN@HuAuPiaY!hthK^%*8c=}BIe?h{s4xQOLWDwXltvpi_)#}GirGtZlGS-1p-uZfZ5 zUKmNGZtbvw_MhZ0B!{>-RN|&?GjicY-&I|ANoyq|#Y^1B#)Vxz+dwf?eAhYEjDpQ% zhPk#bb{*UZ{_#@d^z)5}THK-9Pte_7-6G`F0X9>5Npsst^%bH0hms4@4}5!fZ!<7A zMPfe7$KIN&PkX8tHFcw)b`cE2+gC@S zop;{fspw=N*8lhxvTwoB+@#;1B?Jv&M{HCHrOz9GVdYfP+cXYt&jxniO)OMbO#JwO z*#=qr9CSRcE_`JFzFPrTQGVd<9 z!=L7{L)>C2{Z#}1e0ht4Ev8aBNYJ7zT-o)RD%TAP=TI5+jOyM!uc|{nMH?Rd=h~8L z_IzOyZDkLFL`DXN6xD&d5(J;ad0QzX5^EN35Y!kICh5XnjFPk6s-#g8I;oQY4`1-q ziK@EVm_1LX*uXR#fAkXl2`Rdfq15wbb4XB-D>YKO>g<_SSI=^cU}lc~GrZMJ)UbeuCtf4g-8j*&EC08*LQeZAJS& zev@F$a`94cF!-a;JFeEgsW;^qIll2Xzavz}gg_}B;)0=e`IgtOmSFikMNMY@>-n9m zCfWyC1T-U8^&jtlinVpW*PvZ%80)G%xn8ATun~|iazr=ReBqlOI78HD-80Ho{+h#P z7!dmkdKjW96U4d>9UbW2iOOvBL%qxxajXsW)Xl5u?Rk%FSAWb5 zMZJuO7cE_K8-D>*`ECeYC)KpC-%@8n$a5!G4}3%6HwOD=*{u(Yr_c`FjN?KlkMYzJ zg9WC4#uzj2230CP@4sk+~WDAM?3G`rKiP!|l_385E=+dJB2qVul~TiHsv z3Id{w94R-G^Dr!k?apB>R84RaApNQ&| z^A|q;EFvUDT_R#zc|iZqi|eZuwwN-FYuA!1|F0eyxS0W*Epe~s;iB$11hC9b&W&Mx z53QZkPNDy5)Jmo}p}WGHF~Z5CfHU*P*r7FJ(F?YMcbq?*b95vFppVGAu;wlLv*P`mqD-g zuTu8tj1d`UR}Es!n9CHBdB0kXtDOrl2z%T$-;6yvJx%HIz>24%k>JCt28ZVJL-Zcj zcp7wi3add!XMnH=qnD0Wm#5QRDrNKF;|)y0d=vI~SsR>6i^b$ZFB!|`u?NsGhi0G4 z4ifC4lSl?~U`g!q6iqL7dcM^~A$qa19FCrcVvh#*z!>kZ^q|YN1{HeHamWQHb_w2m zIlntEOb5oU=3@^|r$frH8>1ofB3GME^NSwQd!nMClde6`#X*Xg2-Z;37<@XO&n|{h zE5NLcUZA5L#IDvFz;zDWW%S_7(~vH0V-V`}=xP#Y6bmp#yGJy8^Vu=@{B%PZ+YsG+ zwVxt(K28rkJI1`(J#Ro~fY3V`ef!OqD+$r`&Day@Xcx|eunQIR=;by^^Z9w3w#O1Z z_;eG)kF&h*+0HT=SHb~Xl5;f>d3mYAe|Xvu?Qx<}55{<67eVvY*fUJN!`{5`1iDPj zct=G5bW*!@&JMjCz|2>l`P{`GLN~-jp-{l`Xof~%0XCEHYDW!>Io*e?T)-Rl_pr4t zjTuMAyS3hzo0w%1oXueL(5vl%#jEY*X7E)w_I%X%YUv;-W=nEk{Fs7D%Ycyfr7u|I+ut#`xC1ZTK-#qscw9lV`Jw+K`2Enln zgW!W$ddwvd#~RV>d(wv& zVprJ0jxsS2N(I&8@fG}fxEbVo3R_Nzp7%RBO;DlVU9Vf-n;+jx>uVn0xAK?*A7cjT zyb$!~hbh>DV?%r~Ty_m2WPVl`iH{ zrKk++h`w(;Kj?wJ4z5)=vuE(Qezl7R-?ztMeY0lX_wsxh2fDmT!RRhy%sBSS^8zHc zm!Un80S1*`AR8x|uYBbLYaW8HI#5(kVEU=xi*b|y@C;?#j6FQ40TUasE)(27KOHPf zbr!oCU1l$BJ|88)VGW8#Cu~D&9nhc_aK=f>g~TpWxz-(u8OO|n1#wFT*60V8@P-1 znlW2QoXf?ohH)1a6n0q#y|+iewtCz)4?2?@nbq{#E_%`LCy*=C<@H&LH4II6O%K7QUXL*%?< zZ?FlmSBmtt_dD@Sz1l{kNnGfbIyi+OO9xB0>cKU05dNjBvU;*fIjoyinnM@OMsA}b zUKcF2$B}Je6$-mpgz`K-)fseHsr%)G=Y+4Mftx`58L<+*S+j0+TlJ&q7cP5rKK7-) z^=r*53&ixuf*-qm9c~meUM^b>8&noLKhwkNx0Xvo)kOuOx7A-Q)Hfm$etHbQ*W8g8 zapP%j;O;LNj>k&M_SG}*j6S2!5<2!2yL|kVjQHtvUoukkT|xf&o}DHZV}kZe%O_`@ zd{$nj9qh5OJIOA==(!^Fd5g9z45ax;44;>)dkLNmQ77g5yM5d;aUFRQD&7@aiqL4#lN z;7rF{H@Ew>J_^$KZOkhrL5O&7a!0H!9PZnsVKmdHrmuoMjyo2fGvpa|5umTj3%P$s zg>}{X2w7h_3>P+7Rra`4w)X0@d8ff}kO!H?)-ffeo7a5;{G1R-t!sP_T6>Hc0%3Mb zOMEv2c(Pp3LL}3(gCc&zzUFhP{UWgUtj(THw%TnZ9xcLv}dMJoju zj6lbIccBJKxwH>2HS5n_F;I+mwMz!FJz*2ERn}d%K$d2>5TI#Po|H1tC3hM2O&S=H zuE*2qAKeWZ;@^3x)C^A^a!Egcc0W@`s+KbDs`D47fIQ}d7<2-qg5Kz@N%TK%+J?Sf zCB?f_;pM^C_f0q*51r@tk@%Ug&a9iO*w4A0b;LUfgggoed;BUu$d9Iv%B$EerS7!5+Eqa$~NeqpZWnV1TEXPFi zxjGw3dekdn%4DG-#3B_@Yl`_gC;^J$P+<%k`R+tiqm$U-$AZG<#zq@$nGCO95k+F& zW`!qQ4xZAO#bNqa$6M>zfwbd>hWwEOVdgivsLV4yl1%?w+x2Ua_l9&7Y8;H-`8J2 zLmrhMa|&k2bTmHMk2AQ>#J9(1i&W&C{X##}@n_d`x|Bk5eg z=0uyZOI=qwMA+hoUj`1nF&PPZAX~;PmC@rlH%r+^+bT_+8uRtu-jC{RJIO}z&Kth; z2VZ)oC9zq1b31q!p655RJzmgFgJKne(rJuP4|e;I2BTvOY}%}Ci5IhFoKk=^HszE$9ty;q2q)JoIsVEX zj$N_*9~13~SIf!D?T@L-tD7%kj@3um4LlnBQYRz(frYn&S~XbLSN5>#eTUw=NsnO- z@=___WJjaU(>_lhD&O4!*FerA1L}5{xinhF35Ik|zqAXA!a>znR>@sSkYZh$FY#II zn!OrY!fvbF&1nVW+?v&{3F(|=XXU07bm{f|$bOOxysP}Hg8~iTwOhr7>6@Hl5ney) zWC!{`sK4-5JL1`H+*q8GXD#D(C}LANIpMn*&d1$UZ28FhGg6TvgG|L#qclPEuzLRhdN_Di^)#(3#XTpXB$OGk9Px7SWm}S&7>qVUFr0UI=lasIv9qTV+um!# z^o#x#eS!f1wf`$J&B>|~uNCecCpwe!s8G=kHs#XE$D11&mSKbW13Y;{jH7{81w5!| zq)YOg%lms8FUgF9nY5hH{pSLhI`5PaJ(pZ0;{VP7Yk$LuJDLuL-1`apY1-Xxuq+kfeg`^P` zt@-I<8?_m9+d>`B*NauU_}4oc58=HSDYWe(_uabh)8>ZRH;VoiSE!1>+#22fqtCFR3+;wz? zGM*b(-_`C&dL`#^>3D{;9_4N3em#pa_SR&d1c-3l=CZL;v!8bUsH8~qfRa-@9%Xv( zec0YH7XcHgm`Foz|A?QVOKvj7R-^**{u4V}BfP-8XDIXYJl#RIC#JuAJ)Uy=ISO!o zv0}5jC+y_W>?3wq#ATSf6^bsi-|d@~Eg0-3D3 z#4v49Sw*>ysuZOgaKBFVICdk87s>vT$6S&-Wf;th=0J4%dZ$~J^0RhOHX@x-OZE^C ztC=HjbIf9Kw9*Vki(%etbU0!4WypX%nk7m&TO6$}(pMs;Xr0Y8eRQB|qw|hxE`!SH z{nMcDrrws9oZ;V+0>|59b3p^25SD~-RF`PQ+lItK?A&XB2bF_D6<<@_65^eSvNyL& zH)g%x)1^x`uZh!hwsLA9XJWIG(l(YsDIVnCM7NUz$NUUYo@F%Y^F69qSJ-&pr~JM; z`h$U?FWKSxodIr24rbK)W%FL0b-D2peOdX0$Y$~p%4xzHOJg)UQO|BUbG+qYVV1Ik ziCS%GQq10&+JseVpP!<6Qs7P~jN9Whxukb1LY>OAWkM0}MAKg&4TNITuA@$ff%&DR zzbA1O>FRMa=6>|eXejLBYM64HuX;j8(PDsHkv;d;Zj5RIUpUWJX8PG@s;%@-(Ti91 zcp5Klz48`Bw9{|AU=pU{Kd1Xx>`cRw-i;KO85>D+)rq9sxqgZ8WG%ORjn+(Ec0x7 z4QTp$do?X9s_WcNSD6*H#LLZ-jY%ezVFoiZ4fufKbY#~@;z1v5VimF*xMv>>Zd>0o z`WFpt0Kcd|9eBD1d|uW0Kpqgf*JU?8&Z~!UjV4YxU$9&&l4QgwPn>s~%cC;(L zwG_9xlQ`$RTAX2tc=LAM=_q9R?n&itbU%lnlAqpLo3D0F)wiu}l13#dB@bb@oDiS> zDivnaM$h$p`ZCqR0&-LyT}xU>2FLiu?h~4z1+H*Gvd7#3VRf>7LqW>fs#h4jVS)$% zM9kDXXwgW{n?>e95P41`g^k`|_=C0972X|q@hIZ~qAkLNs%(M)-z^XDNX?m2BD7#L zVC(LTHeYFhiz5~w7!qOAm#4Pyp`n&e0y~^{9*2Wh?<<)2hCB9Y> zFH}QJnz@>+eH*oBzNOWCeVwzxLt@Hhk$VJ`NAKsY_vHJhk`1b}l?MZ8E|mkN>A`z@ zF>{IHs_b*9WfrQBun4zO=jN(}WhwM(-JZTH$=pyIFt%6(&=V5>BayyRMku^0_agc6 z)M2JzM*~LpxM(4S(*m-lzBqHck*u$%3q|;_b3~T_z}WX_uIU=u^P+zhk#`@QnG+C6 zH5V=#5j8mB8R7DopznLNaRb?_Md-O-h@g&P&j`;h1^rknHPznWi~CL6>EgY#t1*?) zMQe2v@b(s-!|8*h-NOpzwzI0ANgo86z|r3WnbYOz%Z=d+f{m`vWA|8>B6shbiE?`g z6KO?%yqOmh+s-SL?*pPWrG+KKBxFq?m_+;f2yZkyl8!w1%I}@y))0Dj(fkK}_4A+B zy(2cPKoE?l1yYnv_S6XcMkwaZE@=3Rr7{mkzEx6;EtAtlbl*Z(sMuw>***fiUG9R^Jn0c_r?22*-VM zjzoiRvk@^qmgbdJv;nDX0ij*R;+;Ll-%Q^okK!NHH+q!Dw4XT{%@&EIdJceLhZ9nS z%zT#<>EG7+O(JVZro8a;nMb*IZPJcRw(WI=rd3CSV=DwA)qXHSyWvh2zz~YI!v-ekSV3Lm=W-)zd$1ARYO5}^Ij!*AW zH8HhSI{B^wc7?pld1hfii&X{RlmaxZW&lZ_V5zHZZwvTrf$|~po541OTiS{WFEgUD zZ^(5$h*w(Vg)0K$wAZjTNwx>Lju15Rv(?R%gt;mBgUqp-YN=OWU zB^p=ndOq(DH5IMuIt;X1zcLZrNU9R`!z0E5oipUGu;^jfmH)k_RE8a zl$&gvq0H8Zkk-1q_dd2>kfqgX=~3|>j3YAII8$1|pPx9oY6WWmrdw8Fb&!J}W6 z%s;g_Qr{ zep5lj!fWK}gL&Wq81dI6iM1mGjkn3-%BC@PPtb{xS{zrNP!7{xQ&Hh>CN_NL$(4#D z*F{4>2-L z<@LI1qP<;nE$*|A=hO#1feofMx$i|k+iDK0zoXyy1R{`@>@A#yJ~wQCoh487daLNi zM!N02sELj0OA76X-KD7840rDJHUSfhAE$=Ee*Rg66HZgXP zh(bZyU$R$lr_2ZYccsb~OxHc}t9%%@rZcHiK2i1z>O+HgHDVN{$jY3xn=o8AU6oR7 zD2L?JPl}!sKveg?lPbDpi z$Bw&O6~_c8&7e?JMeuHJQH8j#h8Dvy!L> z-gotr5FPp4aM;~fL~M#lgG>j~6#2e?IFX*WbPz;(Ml4!Haf({nEK5hk)Sh22ptmYF zi3%-FQdDk88!WJu=yzqoTW(OdV!ZK=LQKAHT?lM`RZCBDR8i>Fwih}VKMjGsA}Imsv$GjDO4T7#r=%X8`N zEbhJA!i&k8?zIpC!ld&nz50?@*s_yw3tdg5YQ<-b0-~v;`!0u`ewgmo=i{D`#61I( zxL=ku@dn*U`>8Ia1o>W#sjP2eHZ4n;K(?|SF@79OPACq&4IthSWp49=-&{YjecM&8S_wa! z5u{0reZveG%+V;G1c$clVQeTwwh(9#?ynay%t6Eaxmlob6ZU+$`BWk{`if)eU@>KH z4(yHH@jx+CH-oTWwGN|CTR5a zUGL}B5!{lK@k>}P4)sV&ZnFWIml+Zs?M6k=$g7gezwIzBOW?R_Q(#+E zhLt5_LeZLb(U8dpFjL^N)0f^(t;s7~GVJ)hdX3>?vw(Z}!(4Uh1KmV`t~WbAtc+^v zF}v}=NvVLGsD47!Hk%bsLbgnwzq{27<QN5)}k2Dr7z?M!et2tWeLBXKPpm84U>V(M!-fZQGg9L7=KSwNTgPv~72R3#>PgFh_Nd zuq!ZrnICXMQGiP3?3G(y6+Un#228&+KFNHvWSD3oKwL|?l-vxiJv z?P>Du{VH4h!}w?BTm6@9a){NOUFRHkf#-FpbOtU)-HIOscp7Mv4F~$zx-1fcQu@vs zEjF4g^F*!C3D3&<0>*if&UhcwvtNZ>Jo#CbwBDm z%u|KkElONv8FGf0wsuN!$J@gfq31fLbjriGj;Pw?Mo_ z259=OL1ht-221|ogbVpdXyfYs%uk|vJ0=$Urp&n;%zfV-U`t*7Kmm=K)B^p1F;=V1 z_?t9+0zpC&G5#};W^`#yb)(s>rsK`*;GB@1%W3ybJE4bFY4TI<=QWt5ND_XiXN{6I zWZ4w%RIyV&Y{6Rb*m7Fg-L9b(4w?m}c&QESv6$9evQx28E#&OXPP*>`gifj-U(7`L z0hyr?GGjPZE-=9xeui*}g~gjHROC*n&pvUos(n6<`?kXqIoSvQ+Oa)Q|41$XoNIWQ zM8*t1-01xfeYD|~K54bGf1XCGPQ04@+^Np8&QeZIeb&jz>dmtr#saUH(p2g?|}w3e+cX=vx31RhJ|{v_?Q8KW=zvnm@|~ z_ALyknoL#CDSzAs(CL~?Z6aPcz*i9_9&r3=;vhTj-5ttqhwR!K=ahJW!yP=(^8L z#^^OTTN`8$vUBBd3f4>tC@{+bR0aI% z0AHpNuxn8Bf&6kgd_V;GwMY0V2)GZt>FbgOl<|gNn?G_k3j}ugzz^o!8~N4dPO58& zHh}=|vJF~0X@`bE_$~@k*|@{vAk+tkbU*?cfiw;@o$%lT$PQ$u-rmOnPB)h4um>qg z24-8p#irerAc#<4tjWzC*bjd2T#Hxb8cdR3a_ZEPtWwErm+*Fg*B0OCOdgpJUWN@D z8Nyw;Mr0HSaD{Krp146^1Hdi|9LXoNM>yUbIRMOdfv?Z<3D*1}muC4mYn1vUE%<@+ z43tPZQt~9N029 z2r2lva}4zHgX7J2ir_Yok{aL^P{a zH+k5!GY4$&fbSxhR^agnh(!%>x(VKG2`_+q+QGx%kR`tBb0?jUrV60LcCviMSvAlV z=wkq*g4TZ+q~@wL8ZT)wH9f;u&F3@=@q&~T178E+?K7wlzER~Ja|Bfw zal^Gq$v{joPz=yD8+pItx!Yn7(Aai)2)BVJ%$(%%Ny9&H52&V2#m?}3hwS77FKpnp zGww<5jf`?%C&Pe?yt!81HwQQ=oT)uMja9wT%8G!( z!RJ1lt{sA3u_JB=C-Ddd%*E^YJ~<`IrmVjdSW?7BjRw>Sb$pVrD1f4Y7{uM>`WndkZttZx6It*BY>{i`|soZqPgQh z*vPrx*^+W$zui!=*9lEIwJ&dI-R-RN2$p8}+90>fR7Zobw`~a6!GolX+rMv6+sS3& zD?>D%B;P350N&ZjtDtGL->+}o!YfOuv#+Wj-jps%3AJacPg=M9o)Ws7TyTdRq3S9z zOeDqshcK)R6F>#KF5QT*=csR8$IGUP_#K*X)%UD3Wv4{g|AY8__Ajy0q_8paPV&~- zAV-G(k@}+pCk4oRYVI04tR&4(g%CbU?s@&ELIf(8LGLyt!o)RbSY&>X6D~ZdI7+!; znUfM@FI`Xd7qKfq&lf`|&;J6E=^8WwljCRhs}bM8%cY6?TjXB^O|-pm{lUek?e*$yHbg5M)An#{y%Hq-b(oi%@`wMM z*gbo_wXy$YBV9~s;+X2#S9Pjolt_hN7_sl#HYzf2!s*8-jzIA~8r3%)i&W#6Mo=C@ zB}m)V_+=2ZZf1X2R#8eFjjz+L38K1PxKY8^Oba}MpWex{Pptp28C*bZ$t6DV&&7SJ_Un86)_s+ou_QhrGFxJ!Z6`z^qtzU(cEVqX? zdAF`Z>yZT4EiJC;@|z8{330D{$K>yZu!eg{OO8)^ck|2Kj5+#+oL&5P9Mw@0AR8)Z&Z z^}EQp5%MAO@E3ulH1+oD^;tO87y^dhgk@<;-7c~?!D~xPBM_$;DUPVkec1_`MMSL!d7UW?3-%TX|(3!GmYIf)zo={2;_B?>=B*vZXA*_+~R6 zi0G2~H)Ckh<6p;z)GNH*fG?8_W!DXZYVaJ0P`fQ9ob$wHPSpL!1CB7Td`*u22l8D)Xr-Aamkv zNr0XiG&w)dU%vipX-?&X;+Iv~&Faoe4DBhwEOjmK+TaDUPx8ip)c?_Pv%Zrz z#KQSXfvfeM(alD@-^OQl@vd2$yG`(KL;l0ElLqa-nD+q&8Z6I4-?aYI;(rVJ;j}#c z?StPo7dHxO#PcHhj}yfIT@l$M^oL$*@1?{RpN9>J3nhPdp_bPXurQJ6U_>xS-N@?+ z*q`{XlYbb$9jKv>5=goFhi&@jG>i#bgH0`%leakHdm(82b0q zp2Su2han{K?C$SM|8u%5`SR1P0K$C=Uv^4^g`BrX#TFa@QrX zG5DoUqTeS0ZOZAkFSOhXN+ebJE{Wdl6%|&DNmk@!vV33c7^V}&5I?*;odV2n_TYUb zVx*Bh8Bl%0F>UhmKb*hh-u@Q@C&IWem02Nf7SxFsNkmP$mUX3Y`o%f*uk7?$jSFl~D!!v1F@>8T8->Q%No5AN&5-c>fDp$H~n;sgVA^ z91zKgGkxnnebG`jDS7ixQBzQUTT6*Y@ORvJv5ibzPYj`W{2Nn$#&J*;o()kq^%veX zmFU2qcosyx)N#Bo0ICz2#p1d_zZpj{duQs zRmU?6#kGP8@wA8vaZgizY&NtM258+Z!h28jom!ID-}c)0wZZ^3v#YoMF}D?nBB*a2 zzq9lRMn%0@{L!j*GaFAD$D`!sur(QL`4NC)bf%6@*ahX{;76KB&B1G8i+hEofU~O@ zc6##%o+?o$_1k|by{@@OD21=~S2dq)@8hbuuK5f}CrSSwp~N!$zfTvfE#Ag8s*qZs z#^y>_<5l3zbi97TRLc7Y1FEj7MTwO?ydBJvs)|EVZ)pRb-{88XcgOU8Dg(=)8MHJ) z_jhypmdb~SUc<|O5{3UNuO$G~mQRHxEe@{uFwJlaq;HfKeCW5CNtA2vzhg8|UU65G@s>hy&Hq=YZvK#leT@Bq_un0x zjJSg{?SI)iGMV$!zeJ9c7jukoQxf98%>Q39xQh~{4sW^b?|T07$X^~h_I?;y`?e_H z{ml|-7=>W-JtdQCIG?Jah}co8--CX3`m!(ae#^%)l!)v721n%C&C0*A@Z06r0M{md zyW9+V?qXSO%{ye9IsUc?hp)eUUQGR`%7235uU7pn;;l5*pJ6qzWf|FnA zR0Nga>HhSSS>RY^bZ10aT{P=CYEWCIB;R-nw zsftmnU!#d-KIwC@nRvoPp49t13pT&YaL!LtAMvc)IF2slwJHV0t&RW4wcJ*@WdRLRRa`+z zo8L06vOzJOlpBN(|7gnmmnIwn$vknog^_&B6^RW04{vWBRaMu;jnW|!0@5v|q;z*m zgGxwuBc0OSol=ql(nxoAcXxLlBa?k8S)Lge*zbV4D7Ie#V58j)RgWa2jt(q`eX;DW5bo<%nWf+YowggTFzDpq&U2T zEisYAU?yxMh7sM&Zn3Bc@@G<9i8f5zh9f}eA#G60KjhzW)^|r^btL>oBqJXiTg5?~ zMSbL=%pk`I2LhXsESu+QHL9;-fz1)ecIP9tUc~`P>&d`P6xH^t8pp_LRp4#6XmlE3 ziD7F$8gYq{$a2!7x((pQKK4M&{^p=+Bw|m@j+8SpA&?YXiXl;#soOAem^4FNBr2Hv zfzWK|ISiEnFM<}_An^+TFKivUkkm+qEwwws)GSV)sL2EZ))gw!47$Cd<~RZdpe-Xn z^oJNprcDiNdU46`xUCO<&aTgsw}^mh(0&DwVOaN5fFPP5Ig%8flfhMD#;cE~4m|OU zyU~+e`*U5pi0qkoP_Xz?9H5|WC8uvS0p+8GkrVWr^k^3{DF-2OC4wRk3a7YeROkZs zz{bJuD6o+I9?$P_7fJMIdIAh7@Y<^xbR?oA%DO+&o#i=-5JS8|i{5Yvic@wP8Oh8N zmq3eMsF*v&4&RomGO`+7%Vu936}Cl9*>HgbTNDSiNB-WwIrk7Xot#_BA@PW5*{EgI zI|p6{Erpy_N;k2KDZ+?kR4AMM*Dyd5Edkg+2ShM3deB0bAN3Qmt=Db^KJ-HZS3e*W zD?G-;3gsmf^JfY9xQ~ZXJ&H&qFzMgBygz7HRhUrdQ^-^Zk81Q^&aTexgvsfaib^79 z?FS@nB=!bjJ(vZu{(&xK4!ok&e(>jkQeQBQnnKR?hXadb+)_?|I`k7TFiBqAOq$E? zwvYN(=rnCDEk-UN<(&uz4Ag<#c_LvJ8U+^fOJnV^w%h2|C19@vHE@SsHcb@tQ}u^{7M;}x760`md)P} zFffM%vwuschgAEEfcKDU|H6C7y{IUC=}jT@f&%LKxM)IBm{q7DMFdR zGpReMW{G@XWDl#m$jJMlq6uXNh@nL+UX1RXqRP`)>!I(%2zKY~n^4r4^a?FJum1vF@E;(~X)m3p^ZH zC8x!7l=Sb1S-+km7?4aQ^U@zp_xHmc1q>e==m0#NB7W4iL~%o@z;8YgK@h#p&~Mlb*-G zRSrD=@t^%ur%ul3gv-51XWZ$9vZzGoaTdqHLG zuUvD9FdB3dXUXF6;nX8Gr6rE!UZt781=|Mm7-_E31hA|$#q7eF7CQm`Tp^ckawb2_;iT_AfpSs}w zcNvLF10F;q@5EC&3n@jbjy|E5gdoYnBG!!-)JAnxrFhM;k8Z3~?B8o$_n+0}S2;|y z?qOm#9%$rb#>bVEich3wR{l{g|0r9a8;7!Jzn=(x6sU*7x0x!J$o&~q?EVeIFZJ`> z#VM%Klz-ZgeVF0~Z6xWQOD-#wmdMBKVGJ=2mB+5}g|(jhjZ~hKL9Rk`Ucei)eDb$a z1&K<`pN-|mGxNmXMCFkK*@>^2Hy3Bb3lfFSOU=6hBLm8{#pAm90GIlgjZsSeT$`2~ z8$xih{p@;)Ld*fisN@Wc{8eD&r>yrRxlKlv zqbu3%Qb9==tTehRUFG3M#G?Y)K9VMP!~E7EAlBjc=akRp6>6S00G1SLa;Uh;9BW1t z0&~zIJV4XTuM7VWW3DpyLyVrWx=1?1qo)jCh(|wV2}=aUV$jg2sFar*8V!&9AW(h* zY;N@x1jb@e0~ae)d3j-i9oMF4fG`9D(4bSFeR7>2=7Ho^Z37>sEdlKVilU^ERe2ku zm#vgm&S&H?0+9v%3LzSUf<_v2a{P?~!u53QuP3kLaNAk*Nfu$8|zT>b$AULQk%q&z@C zQZV3YP*rZqHZ&|5{OI6RP|Asbn?NzJG-y5qcMLEZFqNBAr+LFXgRc! z*8ZJB^H{}XM?Xc8OLK@Mt)jDUzvC$^4U*IO?*5rP@W*n;BqgDqKEFvybaN>CsUpY= z0~RmL0 zBo&ZFe+YPxI5R5x{=1z&V1Ma>P_X%QarWfxiQc&yhL_&_YYaj?9=UAPb0>yj_n*Fj z=JeZ_V*-5wssULg%blmCwqy42B2) z64CsFFyXRlF+BJwRhT#E!Bvp_pUm&R0|~&djS!{%R|rVqhUpfw)#zzC2{_2JKco87 zGvL+G0~_S{e<}fLO)N|QZpSV4wenwf{Pb!i1^5gF+y&$6A3s5%_`~s)l*30Z7^l>0 z%3WpQ2E>B`DLz~Xju2H9ck zQ_m=uml+y>W`GC__LOjZ1|9>6Zhmz+(LxX)esI~5zE+!nw=e|4+|$B*0L+NVh8b4j zmdf#$PfG2a} zJ7bUm#$ds5ANHJs{&C-@c;S}_+8Axr{>mt2MEd-Fp7DpYUMuG{blgxq)X~b6WwQF| zeY>`kpS%n(x~U@_``rV9l7NnJfTjy1_%I;oVSGoPCVIphU<^=yRAwuCuYcZ$2Lh}l zd{_8OlxI9NNMR$jtMVyg=J@F$vXpHAQlK(=8Ku5lA4GgRU696G8F+-yl$_*R3_R|9 z1b1byGBAB`AP<^8NDZTg+D5sl)Ljp}7a|s#+9cHFq7ScFPph{j)`te+9mZE`W96~Z zTs^toPqD%@K`Iy(KmxE)?NsS+AQ0^VWRfkmRXU`X-kWGaL}RDCS30Fv(yJZUPWwaC z15+T*hZaF?!UfXkH$A4`MLd`h^adlJ`mJ(7=|CTzre1T8XACse4_bUFoZgcjl4xN{ z1Zj+q)NIP9MbVha!2j<{mvob#6LCX9QKvZM4kN!LtP0 zS!60T(jD!}j*xnmB*GG6iZjhrs-@f7W&iMbud;hLa_#${u6U`cu6RkNl05bESoFJt ztj*NV2f!^)W!CJ7*^h^97uEZ(W@Emh6AOziQyO@6!9*aE;0m$$o1#n;mGT1>{zE{T z#w%rCOV)ZNANgbV^YD*WUcUVM4I=q?cBX%shcf-R6kGRMmq>UB5ib7%HV>KOtCQ%p z=iLgCIixb;DUtr*Fn>TAOddWncIk)r6D9Gpc$xkrJjh`21bqVrB=rx-Rmri=XlHhq z6d^7bivtjHzE;w$BiQL1iinTP!D3^&HPu&=pu^ayAKH(X#Li+3f((_U|98m6jiB{E zbAKU0b4@pX2DdP4f3`-Z<2W!7;zib8R13ni(;rrd4|A3tO zr2l5`e;8w_v)YkD_t2bY<}*mP_vx8#Y=vksBq5G>r6EZU}RQ~o7SR)J?G z&ES5lq?ar@rX5qke?v@+kJw{K;IMQUJM18FnfDFPP3VzA}X>^&CElJlF1e)~S0%_BaQ*0%c+N*6H0U>C(6fDxF zkq!pAJ964lZR7z`s7a(O;--;Pq$T3N6Z}CCVr{`TUw_0WxFjq>rv6hXC4UnBkB~ip z>tObOpZ`N3r{Ejp|EA&x#J(RniI9cY)OG5n7@&39y5aX10odd4zw#cy7gzr_?+-zp z$VoUX%%;XuW5u7f6k4-=r4auh`1*3Yy<7M%%pYi`JpfMIf6V-Ykgg@zYX6t$KLDSB zfE2ID|62%TD~vDVV_Ym2dQ;7*reZm*j200e(9(a(LS_1Ps-Rd|tE@%er~gsX10nZ2 zB&BH8RB|f5_@$OkONVy|JT4jw`40kQ3ye1+94^X*3%&tb3%R!xToMWkv8lk6cQL#c zhyY@;5Sj8#xfgHlvi-&Ufd(JB*re~?50(VZ0$~a@1y}q;^BIsH0*3pO;0)sgGxfL_ zTayt;m%2~9W4<-Ho;)ks));Nfb^{S?2l>M8aqgM#{-XZ|Shd|8F3JFWdf-`#(q#Z18nK1mK)7ubFgBh8JOjZ1MX=aVY|*pVn_U_g^L+ zGB27mOga=Ds}E|J6E@fnE$}8UN>g3+T2>jTrDNK+))A z!s1$Kysr;s>jlq|#yS5UjB&~y^3_A0BaPKEaz)~ahmwj$KI@KH6SE>^kHo`te02=` zR(Lz;zRTd}=!gBt+#9#Qjd`#EWX$Eke^E64k0Rh;Kz3Z=|7_3e^S`ZqupeaY4`~OF z-*Eq@Qy|KNQ{Q305-;;_zW-*@X^|A(zsETJSBznI>N)ui!RjH;kcPewT2GLAIjIlR z>by>ndN?V63~GVfChEiDx*yyhgP+_VFp%M(xqrfb3Hc5K8b0`-;y2hIx_~fXEX)4V z^_NKlc$i#&Yx)g4`@ne4<@H_gg;0M}ME~Gnr9{^9xFBh5}U{~>j?dcx| zzi}U6^VoS#|8O4$e+mJ?faeB+--Li*KUDmqi*g}3J+Jc*UBSOB`3LrYHpu{3PLGi~ zII#{j>%4vr1doy0InfVg>wXOS7KI7_vKr{+U(Ola@$da3;h(|ZqS_vx{h{hR@HbT; zozi{(gH8XR30nJKEE@P9Ec*Xd(7=re+V7e6@456Dd+YC%{EswA2DA+QbGZH){C(WU z{+B5A{|{06Ujz-@#LR;h(k(CkYzcfT9~e~gO+E^x)s~o7jhrS02I>KC$z_y@mex|6 zgErU86fBuwijJri@#9Pfd9LRv=rVx@3-Rs0SZJ#OzgQIQQ7hB>TRK1IftYPS=Yg2w z$EJ*DKZK&K-fjZ0bkr6$j~%DucJByQVgG#nCv;iI8aA+>PtgBWKOf+`l})UE^$d9} zWiiWvQuj@fdM5~y&3Miaww!M3dq1B>qG?JiU_T$dhkibkjSYfsS!Q@kZzznaIX@<- z0eg!8((jgBnX-;4u_epE&pXT3JQljmDrd^482St5#AwjTvNa<^U!0P}phlG7_B;tv z$r+1?RVO(OO;t+3f5$)uK)~usEw!(ndMWVcjY$FmU5MRPIj7DgAy{^GiJybHvIDK* z{N9sAbu!bY8RjbE-Oo{~a)-TfgYH%F1abxFS;UiaJ-|Myn6P94!wWsO`yu;P`S&Qq ziE!V%Hss9;3bqoPhN4)REN&*YGF+81)@B~fLdCu6l^lq^!)`PG{E~THAZlHp29hiI zh}7nISZPc#J6sPwb0C$w?F!+LN=jt zu)hKB&Xj((^C3F{w)1%*aY3QXmVhTMP3F!%s20Di)2x}mm1*CI*QO*I()xm9)VlDR zhBHaB_{;13@t&CX2Pj;>dihZP)63^Y*zu7nZLq5huYq5Y;T!yM>8)MpP4?lCj_^Q>&VP};k-0t?Me9t6*8`8YWRgAaX72?mOMkbSizQ_j# z#^(Qj`KDbP`yX%GjY+mBB5RM>SX`8mi>y$2XS~|O`vzODNVElOFs%aEs4wC&WW1@p zJbPQ;oK<8mXYuOxlT+P@L#CQK-gS!g3o0r`hLr${l)lrb)SK1&uZu2MgM=UIZtpUX zd2X)CkSiB&?!pLf2KO7U4rB;iOF!K8uU>TKV7h%c-U0OPdrfL^o6{|rx;fl7YSg&^ zxbE*RW)C&$uTB87lQOe$bQ)X@PPHEr799_l=d%dwosKVr)d91ejob|`xAUu`7uUP{ z`@DvXjrYf^v#c6C_Xo%K#ux3oiWVn>Ifv@J08y5@4=2~37w%8CkAd@wzS6mtx8J+u zZ_1RP&xbkYTP&FK-Yyxut1avzzgwPMoLz7OSbd8=Y?$Wx0Bmu2R@qs!BhKS+yR$zU zMAtCbd9$6Addsjl{gs!??YeS53X|^s`fO!(fAihN(f-B7`9*h_MWf^Gj_Vy>UL0M6 zgVWvFvy6-L(bd(9jq^zhx317z<8R03m$Pw$8fG$K8ubne{hNGs^C^wjJD5eOC)XAl zZs#kzgpRx46gAdYhjuH&WELA7S$*$sj#Ixb@-}p*nBU)A?HoT(-H1ADbO5aM)?HoF zHMqE(Z&*6t>3<8oTyQzPjJU?f2kaemUDQra*JXUm-#-?19jL#*xH=pvdPJMchmHh$`W=cedC*NM7?eZ1#fIw0QPj$0SBG;MeHts>v4?_3w3LUkk|S9 z?US?llNPCFyj=BSv*NqoWXh7h+=?-kwnK-W;_$hiQDcUzjCy#ootU+;}R}ctvqA z?_@eV=yoSFd$+K6YYKSFJ78~tPldF=q2hKqk$C=g_FLUzph??W%ZHBJiHcAx>040^ zZk|QgZv$i7b2-8H7rXXmw<|gOo0q`047W9nISSWI&hcS4sYT8)nEDp3$D=w2`+K_smZ@`Atf!yGD=iLu{ z@7p)RR2x~zm5V*KXNUJ2mxOogWnp)devWc$Q}bV}=QoS)UB`r|(LvGB>s9ug`TU$!5ZN=)7Yhdlr&OJdY;~6sVA<%9UM6$RW7Ja`OP@;wy(p;AZex= zx3&1o60B1Ro!;5tj6LENm#%a@wKb)Sn2^edXQj!B&o7*ZD{p%ykVH5rXeo5)(+irP z85Do%xVjLztld|yZkg?x?rH9!Gn{2C>Wlaqg7;*P0v{96Xx`D!42q>?NZWuND&msk z)FVv&wqAuR6A{T5qlg|;!qw9Lt)NcFcBgplw!sLdX7uff@3hDa_J#lLSMx(-e2r(D zX6z*wTTR7EeaYr#>>*#WwAT9^o``((ia?M|>Jfe9(i@D%8_AelUuYM0OHBCDj)BG)8dueYts zkZcW_%Vv|pT0KOPF*SZC{m8)PRIjVY450t!uE$6wuC<1(q}P=4P`I*KfJ-0Z@l97d z*P1h6J#-p2Dkq06{xog=X2%7~Dd&Krr`Ng#H;%5bk8^EJhcbjp29Gk^{b>pXTA(O< ziG!llp?&SM&HX;44K!WFisl5xjqv5^k?d2XW;O>C0+&ieu166jgY<%F9q0~;6?yZH z*}S{7iW8gKFl7h;KEP(T*OacLDXB$NY?J9agawruDdNzkRZX?x?)bqpVd=X>S_BU= zrc;2GHl#C~BTBa9A~rQv9bkao{JMKzb4>{k+w%m;prV%K8>b7dAN_ksc5bwHQk#t1 z4TGYBM(&O#cNKW-9|vvJ9+Lq3GOF)7WIoe#Nj~=3?Pcevdf7lEHG|?jWUa`wOY@B- zm}=5|Nag0Uoa$UJTbprLRe;Qhy(TiEXxYoTX=KIMJfEXV<4d2;AsohM_xWRWP#nDA z{Q7B+I9d4G_Rdf!Ac5+IC~2cxwt~d{rXqZ_BzjnM#uvaU*71g4FH_tRk?scR{y1&b z+FmGINSP}9Q+64w+4rALybzutxro>smsFj_y1dForPOurf#%GgZzG!~jg=woL|j|d zB5+J9e;&td-(@>|JPIfp&|UK?!Wr^$(^fh%g@T!dj$2AD9WCq;QKGMbbb1sr^u;Kw zw8C-+-*Ve~h3ateTSSH%HMh&OpoD7VS3DQDAvPE<87@mnDf(vu&v#pjyrTV8A^m2P z?thyguJe!qEc6!V3^=7AcfU_@8FcMB-aBxr6JMmQ`hk0nc z^`LFUym6RPtQ}XTQMEOtAJ;V#tSYzKT7pC3!(!e-M`DkguSDL&GD5P6Q$!#T!$P97 zw+~TKyr47a@z0_bP8G{umRPU0(AjlLdhQfVA3?DF+WRK~~u5BthO_pU^za%K1j}#6vO|MT`n#gXUcA)CH z-orUKsH;rEv!da|igWb3ybrGDw7QN!D*_YSo#~$ky5Akx6EH%oi7fyt2$rTJeGHRJ z9YV{9HeJ)=>vnJ@SJIG6Uvlx z{h-=6+g|z#GvPG*(f|v5RdInn2NsuDQI~n`gwr9jeN?kMp3R;2o|Ll4m^Fv(781_X z;|voC^CL$yZe|9N0XQ820xLZQq>S$rpK`o`YtLnsZ4npC{EK76HR4Qea&TEytH4$% zs0xgaRI9jctV?RGyBkeqZ;wlqR5zs7?X5})t(NHrr<+}r`<}O|DOHx-_-B0r>*yH6 zQmP1eS~&0bF4J7H!?qHERypRA31BI=1zM;$QDknTUC4uT5Q&I0KrF{np|{EbW^M_e zHK%Hg)CYo;j(!_`_oo1rOTx(fT_3G9 zv!chsKD8qcJeul8p?I#vlP&8Gby+hj1*`@=Do|8-^F@)!PxfREo{I3Ua6L(fTpJa^ za+pLm$BiD(6a=oCOG#CRp2-^d^T|-SWt~lR9J_G2k#Qzd=K-`pk@!>J%2le_+B@4%EijO;?bakj9w{ORebyns4@7YOSS1(_EHKm7Z^bwWkF+#p0Hio%bRXnQf7CAL^na9i4U$t5*bFB zvN&mxy3=D!pZy3akqU?29^;OCSwi}@8_X}t6h0AJ*I}xzYdalr&t*Gwo2Y{k?oBmV zpBZ)*?q%{4DxTZSqs*~3UR9#h<;Hl~zCy;MI7$h&M7moBU8Mbu7Mt@?W~6P3cvg2b z<)oV)JuaB216TYSKI6{EuxWt`+(T`vKQhq(p7moWXt+$ zEZy|#X-ZM`*HI2GFJEDfilN#sxKe28u5^FafjW7)2a65P5}8n;)pvt#C1}GX38_wU%P4 zrH{Gb2g)iWdYdR%CZG#KyJOpy?E(~JTyhZ7Pdy~dHNg899VIx@`xf7S(3O(9cvkgo zAlH-kT~seS;+J?gpNSw}IEX6s6-y4@@HS3opg=I%?T=R7XxNx6Rr=uSBkNJ^VX3P9 zbz=@$kTFL@)Y{nIl2?Z`gva#6L%eHPq z5Rb~(ph1nZnVL2SLn>KqYT_qwzcG8;wMUI_sL$^q=YSa#5x%Jhi9Vl+Xvk_Q&ZyHE z7(p%wrB^(2x@{>(J@PEh#1Bi|Jq4yS!7EWlOlZ$NIfQX&K zzPC4&uE&Q{>jP^YK*Zl7t+J2R@yR5zc1s8aV@5BV#uly(2UIgT`jstp0{=h`xZW@+ z`hGYkSxAEJF+f!x3e&Y_j~F#hGU~jSOv~Q~NnO@K@)%Wt4|bCQ{B%=(w`rJJSVn3V zw@T-va>Z@bb|0B(0Fz$4gJ48k09MznBw`+1yC0RQX)z&O(@txSJa7NRKP?uQS9Jxo z&%22u9TJu5DziLDqZ400Q21o_CG|ugmG_7+=YI7VsU_TtX1iuGsf8{FICu%C`R!SK zwUx)1Y=WABe$UNO=$0MSM!+P&hk}pvYGKdaJyRlCC9yB8OFtpUzkv(GgY7@aw73f@ z;lgHOhi{2w4#{=mb1DT4!P_}jWl!rme}x?1rid|B0SP({R?6$oB)wTmo(dmo!b*8cdVhb`Wr!xd9-^?lT7M@ zAYnL9!#*ubdCzKZ67o)RBPGq|;3awn_Z0DLX`BZA@v;%0OTPtUo*Pdcaf2Rwo%Co} zq~P2bso}~}qn2P<_qNvZ3u;$}R=&c@=R96>YS(WZs`ZA8#dE}6(AsLZ2zfnATKG*vJb8Ns^DHa|NJfD%IsN+Cb475k&N%GA6Kwr zHguIoD;aUVAbEF9L3O$Ndt9%TJIJXdFEo1%**;}N&23r z7=qQGRxEu>+sHD^JGC2x?nP9Mq2xcu@=B+ub1c0lXd9wk?od1S@nhEuu@Klli-K*X zRPg`i+i&>T>Z0|~i{HPKRMYzPl$yI;?dlh0MeG zXa(x?$Fw)oC5#^)OY$N%F_aBoc_5jw=eSla;pftmG5 zWGq&XZQ~j-CFHBzYLN;Fd;^trwhu{Q&3V+Gnc{4#gh--qRJ@-<5~~rbcQRx13-+9w z11o})8u`1i?x8>hy|%-NE}|WU5t+0~ELU++oo{C@jKrx=7e{6pEw~o-XkcE4DWyeO z*#}}J5uk18evFajTe6F+GM`RxWUMsX2-9oCZ-8>Pa1Rx?)a_SEWYdyxe_cWw2mfp& zAQsa#3|H2CKNk0FQMlf##e00J8Wgx5rITncr~n<-eUnp9@9R0 zAMUyGfcx^>=s4?7hKN@S#T|GO)TuR5WZPgC_%Oy%ViU7ZCyv#!SISBkZ$v}s48KA_ z5f@m}9~sD|Wai_V)N0+~8m;R;@%g0XWn`S0xu1KScZ@$~xrQ^QrMhP4KJLo#Zsx^7 zRlpmt$=J{$S$q$|=3R(2*mV!P`8!j03ID}u{x`7RFNqfAd94G|lT(6N&Ni-TXXqVL zN?nAItn8RbzXD?%bE|!rN%2%oiX*3;JMuMxd~AOKE{bPO9xVCU7@9`Y@@%T!^?9+} zG`1|gntsZji;jpp)8mioPV(}LD+7Hk_t5NBeVV{CQg@4vZqCaA1s%p9@{Es}`CM?}xmwO>zFL$t9vLcr zzz#TYh%%}-%G#upNw09KYz)AQf@0`mMAN!H3d2ERLzWth79t$LGw^s|A{O7Q5gEmC zgvR8yIx$w((kAfcDh5>*KI^kl7S3;ZR_@@cr%X=l!1`!;G!SxMrPC6>%-gPcpNyQW z%{~stN99F`U}zx!ySyr2`6s2wO0@^?FP-snSC#6R)WZ`VkF=55wfSQ-xF&Yv=Y2t6 zeG&$~570~YCLdU-IV zvk9O;q(nVewB{+6I5C2$?wwj0^u=2uzJzjbU-9!~g}63lw$f{)u*KW2e>2Uq`jW9q zX-k40skkYX!4pGLOd5f^8TaX`@ay`zPZO3ZTY`sK>e?w4IQg|U;iwkx-ZD3f#y{`F zqT@=B@H+PzFxU2 z%r6c?!|RZ8Qr6?&Reoy)AI2t|%vo6Z3~oyxF59X|(GBxDQqQRujVZ{aJynaDH2B4e zv^zO`yYG=$?kbo#X)&HDg(Y~Ba9>8ia!X?6uOubkzKxYi;m!O-|?yF-D$ z3PD&CTzz4i(V~f4u&(ghlOu&w3%DeM$J|hLDe=}; zTVjY|58e=nZ8AzN<-ncMJ1nk-SCKZ#5TvyYLn*XF3`r_KxiKLTPkfEvu_EgPo?4R| zPItA4w3UEz_BH5$Ia*gbfGij;s(dOV32<9){Kyr%c&xDWgqMl=iC(xXGpuko%@_!RlFbPbgYMiA4=N)FZcFx!1U%@_?Q2 zDbEUD2Es%JyIXkdEx9dA;P~s~1)lxkS71UDlX^OIPQHPnlCRsMQE! zz%I&nPIpu49im6{l3_!DbAQ0jJ9>F5A2Mict#Vm7n-wRjHbZXN&>=04 z;|rezJf)E+P=)6;Qbrl6>b(`Ld|Z$p;6x`Yp~$Rp-3>WUHBJ$p&k6Q8C7kQZ(6`DpP%Ar0+RMj&UIw%_o!gDG`VPx=TL zC8JKat)hft7V-?$+nsiepMlZpI|+d=ML+g?p`{_4acuTH&$hmq@96!oOO(4V}b?0b3sixYi>I9bE*N8&Z*-s2G^FpETYtYM8N%$OuloEXj zv4OuOdH2c6tTdhzxT!s+bUgvCVVTOL+%)~UJhr~9|!cQT_>o@d%Qly7qsD9w>IBq7H%YFF(?xO%sMR_MLYyobL0$Ik` zq`Vdv-G)!cM@^SkpPbElXb~8 zRv+nQmUE8%vQbzB4{ocmb%zz=JPn5-HrbutE0<8LcKWW1iNv^S9~fxdgO8eU(FdC8 zlsDL{Z=)L~av}`!FXL5+hqY$(UPd28tFQ81a`0Vyorq#yp6_5>rK}JjX+26Ec4i5r z6KPUYXO4m&l85_Z}-T9EoWPaX~FyE zPM2Yxj9WlC2O?5h;&OahkW%IMLC5V_FT{uxv=4bzdDuQmu%%An%o98NhK7s4csvIl z#e}7tEtdXRDn0lKI{0HrI&ojlo3Yr1)h5@EWgqiBU>BL^+BGjN@!YXbB054-`NMHB zeb^PO<$;gH>)%@_?&ot3)zb>!#+_!b)XsjGg|?C0e%^t{(~P>deZZ#Knf1Cxf(=cV z>JYR#jc_u~^45awdAC$&@p5kP!o0#)R6_bM2@4EeKUW#p+GyXUE9H#FU$Ps@7a7x7JU zT4Fse?f{V(wl~v<^L;*&W3IC;esw4vRpbs--l&5BQS_t8UT>ukq9% zFZ7`k$VlbN4eiE?=cPMrur-tHG&k5H(r?K6s+ei5-YVeDQ-20b1WgjoiFu19k-ng3;DDSbBj508hk=AXPWX~9QMSA;*wx(k^M?b!8pZRAXhIP) zB#7)LWR_kDHQ#~y>xu<`W0dO`)}QJ!sxjSb9R`6eXks36_zWI2=zpazF{9dNwFyJr z6Ypr(l-=8ENllI(lgd$psyR3ozI-K>?pGLB1<#_sbpbP8B0OB3x+C%W4vc7ii?2in z&U-3y4F1jT1QlWLE!!TvNghWotG(aEzRaVVU6~Y*sp2FC{1*eCb39ar972c@?2A}! ziw+1m&NluwC6Us5n=uMwT%Yco90}Gt!gdq-Ee!r^ zh}o@IpDu^qi!3oD&KCc|?3W*7i*;PH_Q2<00!Txk_~Y`f;?iz`BbJFG{n$+`2-v&$3rlDjM&o?L+SiX9tFsIHIz%Es@IpUa?m z+g8?gElN{sq(N6SAaIm(D-ef&Gn!d=4Qs8~&BDW1%AM=`cxxO$xaxjj`$D+<$_--c zsY`WF@LD21G}9$9ZFahsyvCCj{KOJcCew1kNJb;OqxUL@Kh zzS>`F?LEFBM_15{`R7*_-G&3xApKQ{*vz;<%%awEmCn?BavqBut<0KXQeow1A84>8 z9A8}N!X)7KYKC7kc|QOxW+sxSq*2%=vTkVcWy}`ChB*u=YTv7;1!9S3Z$I2s%~ABt z3Hm<15wti7E#N0Lvrc>$NuOsZ@7Nf02TkpXR#}hRp$M?GDMGAD=01TgtTy|FQR|XSbnNhtfu)kFCLZ7U;<*1oNf}OPc{3wA}oZ11x?m3;EE!`#kv+#Gl>p5)^ zxbn}oM(Zo2b&hu_Y9^c09(y)Ju(KkVzX@uQ6>DMvG}7GOicN3H94ZxQHjDRw$> zoVumHSw5zHq)NiMKWU0-+TOU=zFO9A8HHcPpC zwCT`t%E1w2+Z-;NG2T#pXyMmnTkz{cGF^n6_+>kdW1GReq^Lcj zG*s6}Yl8^}Tw9r8*GdWePN;^jNyP=SBh=E*w(*`1`+nPrH_fC;s&Kdr=Zleqjygb| z^|g)2wUe=NNEu$fhQbw1x4|fUs)$!+kVtJ?KuaYyqI?h!z^By$v)@PH1}>7G5Zutu zj)B2DtkJ26zB*vciSW3_UP$9pF{l1tG6`*MzWA;m(Aj=G*da~;-j2S;AL@;auoPY% zM5-Lz7A+`1jN=VTP#q5$le@YUx}2fWNzBz;e}>M2dO*v{?KtNXxu4C>&c`wkEp@GX zmtFgU;COEZwK$$LKbjpc<_RU0Hhek;*KQNORi;7$WM~5aTcy^#ZHX{>r#4`y=^j(j zqvM(&Z|D^UeV%PWEarxtouyq)Gzy4(blH@67Rz%kbjiW>Xss0I1HdpBcU_SZk|qeQ z)vcLsm^F~L->mn5SkA$)uh#q?w1UN;FPWc`9xSuXKi5mMn><}dS;8WV<_d$N>DFUU zLTx?D4C63Z6S}O4J-_Ld!opDC3J=olM20Bjde721;jB_bO!i+4x@T#2;I?s-ab+cdhx(2iArZ4eh(bZ1!o@JJWIGNR20tmX#-$)UDjxeIM1U^*{$>9*7lK zb4uG3LH5*1IfQY!5qyWfgl{!;Z7x=x?EVYs2MqZ~TWJ(5VR|fghP_3sy9}DUB!DkihR>7ZE zb(#G?l)Y1!V8ODeS+;H4wr$(CyKKA5wrv|-wr$&8)>Q9v_RO7moA>-yBqCx(Mn?Xb zJVH`27AR}a;Zgn*5_J5r&90EGUUN^tJ1`R=5XCo4$2jelem{uf7&UJzu7!(&!LEG? zy>2cyjEihdV~Sju&tf6ULiK>&^@QXkoLi@Zt@FxB+uB>$n3j7aZNnk{9f-7q9{Csb z&%^*g2^xhp(u5f)9v;BHq9YhOn)srJ%#V_z&Rdlxs51i@2(1CX7iUv2WMZe!+1Wx= z56^D6*c+D&G;O-;Zc*nYXUk94h%o)SIioE?oUpAs?+>G4&1-p|q%-9CsmpZNT*K^G zQB7px1sCQG*iPcrE8?^|?lNYIri-PnND z?GyL}TZZf0CMzl}yKAsv!+2<0YZXGCCO9BO&mIT*&b66=qDN>-wRZIWG`0oGO$t#R zXFL@r93(^Psun=SZl?AJVKKcS{s zhBV%G{gs`{oyfGbxn!cJP-N)1-MH8|^;r!Caa(=kvZr3o+H`)V2}8%UQKT27U|4TnH)Yup?MR}v$badHS&=jP1$`h1!DFsLbwLpr7{(myar*7-Z!< zd%g%%_);F0_v3&O>+TTV84o^h!sSdfs&4L)4{U{C_$nMYl+(|VP@3i=V~;C`zDI_Q zkhzbNTg2XI4m=o0a0)l9?9DM0-~MEbZb`%bL}5{Q9*S{cg30Uc^#_a!YbgdY@>pW_ z{n>O*;*_0cIrsi&-L9B6KJ)vpv?*6j!x|ayd9aSTbzah2kwJQ%&QYA#z+rD3F`c?k z2O1q)thejAR*tLTGt61O2Eu89CyE1q6ANkJJ)W9oZ*gkpO@Dk!sq~ctalQDXMu$M+ z1*gcZPf%0|_pen|W~;gQ4DB{}Scg~3J@B7!bUoCR^JBWHp_wYs=)59HHBW9vcaY+D zcU@yr45WFLcTE|Ob-ve?T@?&_@7rz<#rD8`XKtuZ&^wYy+nqd`Y81TwZ7(W&YKJ=J zw(yAjKE$zJ+^D>1w*Qj${{fhT4TeClE0nVktT!z-}TIho+kO*|%YoV=5(tJPiTy*;zt zPYVa8lQjxGURmM6wWX4JbbEXCRF^0OdXA$bWy}Sr#)XCJOKPY!dZ&7+&04M8Vf6v_ zf`v0&3Wd|)0;6i;AB+~Dj2eX3n)HslvdrkAbbnT8?Ax7wGLV0E6_pgAabmK@k;^X@hC>sifajZP) zaB;!huiQF!k%l-O8ibbv7Tw$LI;?C5?o0`VqLjbvN-d-N7j#bz6Fa7UGyw9MYk5Xl z^CK`U7@6G~OR@0^ubtr)C3lq-{)WDFjJfXhV)=&VCydYEzI4gbJ79jn-RML2K;l9= z1OSej5cjqw#Q71!p%-03;jdm(QSQuc=47Fvyrm>S^&h9I{@*5@$^8{c;Y zDA%2f>Al-^>Nr~Gda0Eox?f@9wZv+-Hj{7uEQs%-Qk{YyEJAl6$E{kXtTeu_cBwvp z)ODv#;O!?(h$oB9n&{+3mIpVnT1X@%DMA~ITOBJSFG`oOJ60&IkM|bOn>sADAnuRg zs$@M?5Esk9E&#Jlx9}XR69LqcYXX_Q8+&)Pt#RB8g?Pygt9?}=-$%z`CadGwv#)P>e=>S78nXCF#N?Ic7qMotq8 z+`Qgk9k2(lw+^+#G<<+^V$zf)iciTHq32tvl z-0=4lJDRakOd)zSgN!4fqvdg_o@OY>B}`@Go3ax1?c+a zVd2yHqX{gp;N$OG2M%&u*spr+dQOmS&c$+%3ov28Gdx*rlv%etWu3ay^n_Nced9{MPJALaZ_~?J(Yte6=2t{d(yjZXsUO|V+0H#pG;8FyGRc( zEmk@CjTz>q#AEo<=9Vu;_hL)MoTG#XWL~>lQUC#*R;4JH2~Jq-`uV>w?H>FIGly+y z*Mzw*`j)qbD|LTPgHYD2^HLi9CmdfT8Q!?b^HK)7p{?{co6I#;FzG_vXB;}E)ceUU z{=#1mJdMzn;ZUU-t!#)W)$1tW^6MSlhgT&om$) zcN~U*OtuBOAS+^|Un_p#K(l-%0~Z!oWd~}+)?yT|7;G30zj7gllUBWqC9?76%fnqS zPKOJ-=;0himr%as3*`!pG zceG^=goIGFTwUS)xOJ7J)MoYjGd^9luf@sybfISipn=(QoPK2deL$V`OgX|!F?t`? zcWFE=zyRs@xpr*VyXIlxfF^#sJ;fLo^~|F6BVT94^RlO%cgIN@N5if@!xVM~}T8+nB`hQ6$?(K1ruE&akxa%C?Z;l!YD*ahv z(OZ>%et<>jgr#IF-MMZ*)wY2su4O)iis^O|&Ewu_2c6hSMYYo~^45?Im5k@)5+8VH zn@2N{{|=AVWv6+Z`ji7ZsQNzC7Crhaa%qjSq<%Xn4Jt{n#Bml%-JRX<{YwvBT_ZNB z!GNXTkFPqr#d35~7(HXaf;K6@E9XlYYhhK7!R1Cv+=W}TI^oC^Lt5bZ?%HR_$XhA4 zT#!|>6aY*PUbm+l;oGR=gCj64lz(=Wxmv8yxswK!ruk`p2F;dVdleHGfF&sw7yz!J z&gY>Z8Q-}1fj^KLL$U|1@<4$F62)W6i$v_rC06$UosO+R5lAw7!Ag#Ek^Z$?;hMf~ z_a>+tV8gMy5%7M1sVbL1_0`n^qf`0hSyXa|LdkJ|+CM7$W9G+89HhX=12;b$Mj!oZ z$v0)oGp*tT+RL0xVb}s5;FU3(ZC~J(eLl&nHiSe?qwov?$S#pPJQdXc5RBwa9@4(L zRZq55n&?z`ct!rRdzWYL)aaaIAZXm5a% z=Edw9TOnepE|VW~cc`~;37n}WNB677{Eb17;} z!pkI4WW3Xrw^tZk*UI3GvklP$WF3c(A|G5fTu&=TteD-9=_ ziST^jza6TS3E9nP$MCT)##~1~Th!?qB!OAq_Vfr#`wpDkBt)LA%hCJJ4?{Mvpsg1> z$7danA@!S&pUnVSnBvJLHwGEhV<%~g^kyK~7Os}Zz9*Oxp*n;CYO{Onx}VH=Lfg7z zxm|t#smZ2XO_O$%d<3D1*h3jQ`&GImlZEszG|`=_KxvSu1Us@u<>I6vx0y#5PnIgK zRHzk)H4f%7^ouViWY)p?HGhyFfN#=gr0w9(4AH?2{qnh@Z#@41o7wez-gJbgJ^u>L z#@{@c;4^es32sj_&G+ZJpmk{7JKM|2?)iJ1@#_`_Phz20<8#f(A^;NP z$wNXMfqsz=p#S7LALlnX``c=$r^9$y>Oz^}iYIa4Ay+6z@CLLBpP;2LkQ(;SLjhGv zpawW}%*46S;>xh5i6|3W==fBu!`uNe2;0|O?!Wyo#8*hH}~@YRMJzoL%7d}(9 z6L$1^-9Fx)-Ve*U?Vsm&R|lzIgQspg{65cbQ^sZ$=esn>!JkhjDp@FgpWz!Wya2#b zzEVeC*GQrq6I{!g#lE>1VlyuxLhc3^;6aF&(P5=UfHw{Xdy2{a;|9tmb(Cazb3p^; zfm@aREx8s$li-n>dhTHp;6B(ooNY*p5pgtS+@R5Z{+fYMW_2q>aTnlL`~IcjYTT;8 zLp1cSaCViP5#Z{976f^LQ0fXpk;fc3n-_;rLXNz^8l9H3s;>|zja|2J>Q)IHf%?jOX%L=i6v z%R`-vfGwM8l-#;bh)-eWv6tP2M5@+T4VsZJpo=`q0VoAONU+!NCo2d7EBH^I7Iso~ zfqD_-|424c9t8}H^ignvAKwkQfr_jabYZ1H0Mpb~*n+SE0W?JGmb?Df^pJZM3P-W8 z9mGVU4-zDfT0m5g2GU4!_XQY^d)F@rg zNt6Plh$*PSNhbgZz%|$bDgoOO6rcpPu!}Spsf3|X8VxH#)Zx2i9e~ttJK6ikMg_|` zSDk+{?!kb9iUbJ9VDmi!i3p>J``eH>|0Wc-W>9T444q@eKNg|L1UHKZ z6-7KS$Sx2WA#kdL(Qf9qQ40F@o|Fw}yr{w!?0JJ=KSvoU*r89~acDYXJ)wa~AS}9} ztIM~L+J6U?4~M>34uon;-~kIDmj?v1XamTJewqf=%Fi&6&txS%T zNk9yth$zStoe4575RTcHWF7FYmzrH5^g0p0<6yzg4-DQ#1ZKd^CqYK~K%laBdEx}< z(Q(`m8&MSg)AVORL%~3M7I7`$`+<2JxGJ!LPC5#6kN}2#`5=^Pb+p{qiO2t|pQ})v zzCoX@{a+gf_||oMvD#5AwLfU`rU$ z697YS(!IQCtVNsyzI0B7$@@RtIuX@rcyX)2MKB0t{y>E7g4@_dG=}#8v(Wwu1VT|i zPmTY_MEWNVk9Lm^P4AGp97x%K1`vd-0BiH$43PIz3o-r*Fit?kLfvX<) zTfqES#&4FgFfh29)_kDIg-6i4Nc`yu_~m zDNNg_e`xf*}e*pDycpP5F4>Rj9?T%P4BpR@U>q!>~w}8W+OXYbvC`qA#PGSla;r}E2pIcbw+szL;q{-6*CSxIZ0m`5$8YJ)lvLctj z2r8nNVVcHH{jXxiV+AimyW)X*&g8M+WjP_?Xdqq2!?08aa4?Uq2K}YK)|dIGng84Z zXpq1F_TpgR_%8tk5CJZQL{O%vyf3udaKUr@OE)N!Psi<_zW&F3twI&28_eh{)Wahq z$mv2%D?_+afQI3NBt-hdz&~MubDJJ?IYR!&$x_#&2Ezof5tRXgKNjT;BNy2TI-!v$ z3MMnG7GZ@~0Id`JAHDs_Fj!y+twZ{fuJ$5d)<8Zjf@GQlg|ZjPt}!Con1*|S3;cIr z`9R1Dz5z1i3ML>>L3t#&NsK{Q>V3=LD0&2l&{8e+b~=GZDXHGz+Jf8&qhLTKoCG+5 zSk4O7Fi^>YK8$6Xpvj$a?f&}kWse&F&r$)AqQz+d0-_Wp3s#_;NmGCYVz~>ffi$<| zfg#^syw3ZY{RGAT@B*Lruf4p(^vrAT&nNKT{~t05Z2^bMKQc-5|6ekRv)lhcCegKD zmqPG4QI8&njt|Gy(k-`L1V0dnq|^VCMz@xw5W{)ZW`;-XGUOsB}T@<$8R{ zX+FGQr|(ECXxCflaQGw#7I2|Q;`xGw`0(0V zBsK$8)|z#Xa}xE%_m5X(0=g1$6l&3^xC@K^A2P{__=wuvH9V8uMN@foA4P(@*lF4iOLnhJbApQ@TbYu7Xv(`+kxBSY!>kH7(Lp67ZKIom6-Hz}^dFf7{{JMC z2>*~tmI++PG|nOLUkWo-DY}5pGEh1U<&*Q3(RtkCGZGiUH*qINpb_%_V*V1rF6lln zs_hUEpyQ2B*)gjm9a<3g3`dW0@9^#trK=jI#Bvu&FfAtWC!Bz~vStA9Gx^#7<`Z4V z4i_F7=kepvmIkpD@7V}4P8|$6B~=aI1s+!pd8fb;6(qeLIyyWgOqj<)3#5Rl9bbm1 z)XaT_gK;yca9#}}7tUcyPohA6kf?sj>#B&^!v`wf@1N3+1vcI3dbS`f1igAK>F0Gh zw?);@6wrOH2q(<$pnAp?cvCp(-S|?X z_E$P<3up=`Sz+FzmeEPo3hqdS#r|Hq4#sDW?=+nLT!+ozKQhTywtjmLl~3^tc-8k? z3wAa?0*z~-_$`gigzpxMQ?=;WKQhU)+5-2cL$|m4${XbWn@qy_`!DQ;5CA}BGyniI z004l4r31abtErudy%W8YsiTYOFXvzM4u;0ohUTWf=#4E5olH!f>CKIpm>HS=Z#0Q+ zEbd5r$<0hHg@8sM*t(OcnTXmFMx#H;1fG$JWS$937dx0}OVzM~jcj5={_7+5OyZ(v zz#TwmN8Tvk$>Lb-i~GTE_D24fUHtD>pO3SfT%R7Fr^`fn{_pdJtAm-ImqY#5@8fR# zO}^EhuWR4;{j)uKczeCBZ9WfgmtNkkt*_gcT=-i3-ZDSG@6T9!JiQ+G=a;5#?@x#C zS=b2qw<7%Z53)mx-|yA=dw=V*@+vded*AP~0$rZxA}sg3vd63Sb3akv?y6(j zbCBQrJ#0g~R^NWc<7VUP^>gFB^hb~u^XuW=RA*_Jy>FG}*Zvj#ce!tat)Khd-~*cg)|cyxb3rdn=o3dl!MN3;d`X*L&J`e18ZeSFyD>=a7%vS35aApY-}4 zcNbSbY>}qV4e^;=zrU|5es8kft!f>5)t}n(o-bcvO#SNGQ|D(xnQr_`eHVa!FMnUj zzm;-dP7lm;dEejUqrco{dcHmuYJ1jwpNAf<3a=(&bNoIp6Zw6g<{qvl`1!u?qiXp+ z9X5J8dcQp)G$;L6ouTRaz{*uTFzT6QbnUT*Mus>Q#r9}f-|ww`_fIBs2!@c2vS&)e%?m26KfwtgQK zzV|zytv+wB_TTtHSLPg^yY-tv9z(-!Jt-BNw@=&*~c!H+nqX?h&-zUUyR$ z??(ZT%w!sg@3HhbdY>QbuIjnIAHMI`{3ndy@Y9~>PnG(gGq&HiZ7-RA<>>3%2cOXD ze&0gak3u^KAFm+~pV04B=;!elAy0cf-ycG595Z@b$XvcHW;{on(p{g8`YU2zZ|GO* zH{Wj)Z)X}o?t0U@1E00{-pV(Ir@h<0j4_i?6pyv~Z*3_f_rbKF`zg?Q^$ zkUft*T89*4`OddCRPpg_pWZYt-RfsPYjhvueWx`21|8Y&H!og4t}05SnLT;yT0ZT# zPh8NuLz{HLZ#btrv$kfI*mXIrKOSWj$pSYPH6Dx{PCQnuR^2`?Srb=lJ2#et*zd;` zYnvX*B(ENeuQ&o@7bmCLu3NCCbt|85tFSKge6=!l;)3gQ{t<9>%$F-+9@H*WCy+i(7(ICnYZ37Z zmpy9XpEEef~Jb@x1|B~E!7^RjaN9Lb7wM=+9f^4t)) zfBn>tq*O3>+g3heJ+5TP^;$Uu4e_#MVm+OHAU^I5KQCEWMR-*n4Umn40Y#P1U7Gvo zUN)nN+v;7x$kReg9&18#UfUVh_NUDK)FAXTJ|SoJ4QlJKcGGavjFgc#F?BI6p!WIK z%{N0%O<6aGYR0aCY3uHl@Tuclf>YP6fLQffd*Z%V*LFm$OR%N+RGLyCpL)C2NgSy) zKc!8L8MAD8I&WB;2NEtl$-vb1q}yKI;5Ke=vUJ55HnKEJJ+8f#FkP-Et%JJSFRrjJ zTkFvb2Y~NZH>Q~CJhn1=X%3X3j~7}Ykxw`*-6z{FuQbOfH+dSE`&lJ3>_?T$fU6^i zS1ub3ga_F>1;Kx*z0bTSj4U=H`K?a)x12#RjzK}Ph6WAs(SMcu9keFOa*lJ26ETwV zbT4*kYDg-0>_VEppN^@% zDcoc{;KA8%34O+B@+>>4q1bHO#Z>BEST_H17@BH44ZKichPgtt2AJUy79*2e7kB;{ zeuiLTAC>`{Rw`~18d7B055|e6b=6LVlw}E}$3_b=*aOrF9ck4l6?t2mHxokoUudox z*ZmlDG{5^9Z{(10ydP$NV|!ehRAV|U{3foK*hGw_CC9Nb=5;`Ln6QC?L-(CfaV1&_ zAitlgUx7ND&AKSJkvDKZiU{U3b7Fk`g@9uvW6FjFh&(HPVhKR=zP^@((Y7WBU~Wma zW?jcZ{_eO4Hyo2Xg{*IPIkRakDrRdYS}wRfNLIHq3_U_XmI@6U_%?g&d6WYs`dgKL z1Cp=P9HYmIs)i1++;U6Z=Tj`E_W9BsU@o-j*OGWk=v7t(V*`v#sggE190*`b5B)S# zwIIWJ(TDG8D~Qxi+e%6@=aQEEpUvIO^RU%1lA8xUCNtp3=pY2HL|B8FQM#j{Lmwg} zY8~I9q&1n%ULmabV3(}`F7(|H2USI2eK1#>!I3M98Ov*afQm#pu@OSK=ghkG7o?9` z=F+xtDeSf4bf6OD>tpyV5)5?1W+0CCccd2(d`!HHwgK364t~=+b6%lKpq-&JrdQ*c4Hy)!$y*yhKCFi zS{*^S2Tw97dxL>6Kn^~hR}(R60t=rU$z{PADEG5W-VIh#B zwwdv44%z!N@}r6UmNcpYPrH#Oyqny&HPaGPH1}W2$4ag_Dh*ba z9&fsLy0%YBgq$smhUD9j3|HG*P6l(O_V_QPOkA|s=wy=Qu`a=mbeY*io}D(V5az@hd}m-0V>OB ze6y6DqW+1-<>rCIzgl61!cWO|*eM6%!e4{SzmDMq7FXx$mvXaqR%=57d_*SeXK1BN zt3m{ms3{NwA5qA~1#v*?POJQaGFubGfw6O|1V2NVC7{bO;=gxdztBypMgqpV6M}5R zWNgnP;s{NWF|EwjesH!zP+BFxM>R4%0hA6BrG_5{fmCIbtuqQ5?ue9u5mu?jMV55a zW9ffOe4|?ia#p{Ki}Z?XABOUhGz|RANlP&RUg5iARqzC7NKF^kt)p6%Q_aOa*bP`r z*${O|Yi>0~UldhQuLEXPq)A8ciTin<_xIzOO5E?@3~xtsaO=q5vgOT~!*hm|&_Wj+ zH(-|l=;~~PW$ry3_kH2=+dObY+<-TSQ-D(qF4=f|WTN6xsDP9?WZ26HmAG^dq)eEz zB7^QYSm7!UMJX^=ylj*bH^d}(LR`XdA*V8j6|m;ouSQTkS4>CTjA-Z+1!>R?u7;Ob z^J1`CL(T39Qm@xoFYf@$ER;IqoZ;pDD5g04ZH-b&jFH|h@lf&@=Xq4#(xq_i0q zzkpfRer{i!A64~(wwECaX3jF#VL;6|@!#K@_%(FKEjomv-zx*}1HTU2aS?8Tk$O*s z&0B(3%bYuIGS*!u-m+q^r6mb8*i{Lv@d^Xc44r`u2qSnm@gcdM7|ZG`3S@&bUiLjw z@hZ6jEA1LnA-SCsmB_U4i>m%+$RC2Q4oKqB+?)^!zB>T*uh?)+pYO1iV6*#UHi@EA zoP2EtLLuPZx5uQMD@sf*^vkw1nXE>=Um`Tl@E-A47e0B1I1cv0QA)bXFq|vGTC%5& zj@rD!$ZGR|TAS7K9#aCO_(3^HMGnF2$L{^EfUIItBz6v2>7^FqIKuW3{~P=`P{zw-NQ_@UvP??jsXY& zKVi-$ZC+(4-0=BLwP-ziupXaH(>g*|Wv?A40|HnIMwoDMGG zrLcMheBx8Skbx8d1NS%_Btf%Wfce$k`6IZQ z)Xgj&0Qv*WU33x8I|Fvsjb=m!6iRM&KOws(H+<|8O)*%!;D z2iHnAE6J%gQ{+$y12i=C^o8_AeZY!#jBfyMiom$Tf z?Ld&?qO6lDqfY^;=8T(gS+ zINBN)uWMw9iC)SLV&ASm(h4vHW~1DiLba{l2={~)R}@o55hx(7(Mz}*`0|48z?QxL zb^)7o<>;G^RClGf*ClHME)LLsuUlUd2+(erZK{@Qr&HE7SZ#4Pi4W&y^;lqu&pBlF zATC)q6oATGGa9&^oGpz8_Y=sHxj=E4^q-OEA@vUhjwz9aq}sP&R&3bG4)%=uh=t}) z7_7T)epU+tbQu4oC{u+I(TJ5- z2Ywot%yGb`#WK8vMCT+f|JAw_#MnM((!|(`DXPiK$o~en22pZGbx`9hM zFwHN4fG&+Od=-|ab1h=mTy-1ifnJf$GD%Gql$$w@1Yj>d@15@&MhcUYz-h)#5UgY% z-;yGQegnHWk1;bl6bA?ed#NH18?(LSdv;`l*~Su?n8W!Dg;ja^q5Vv}cr#>na6@Ajw^U&C4OK&*#2({4SjcA-^o6$SNN`Cvd^8j74#9h;sD z=?DDdMm^CD$4#6!c2`*z3i+rr!3u%=e%PH*qv*Rt>codl3;n=uFlsQ~v{DdR^zf$j z^Q`7hMK8*c_(j(87zyUPYQSVAHh!vrV*(P>shoPu%_yzn5@aNX3)K*a;5_4X5nHls zEO7H+3wd&eM^uc<>U+?p#~==(7=Ig1@mLFX4OppJ0O`nKk)Mbq5PoP#H{5->t#lZx z+49Io^I?P*b3E5u2vj~g)7b8heHPd?a}?QNFb|s9)V6h_=OHjGEr=ScWv7^Q%21A|@! z6?iCH!s#+a6dp`H31k6;Y&G+oM_@S>1gKbl^e#R%vwCX8D@4I_jg zcro$^@gZlX%{0Cfar3i{>+2a5PPwrJ3dH($o|1tWE`@JPn*eILk1+1ElNr0->k_NQ z$S%S6Kuh>4bXTIsaSjCz5I{Py&K43R7=)P|@F7);mSInS>NbC&jW&AE(=-`UghJ7b z&E7m^5L~L$jM%SvNL8`ffHN~IiI3*=S%+Sl_MukeUCDUZEWsAZ0GG;177Obp{S~Bs z0T87)c7xQ>JT13AVCI=!_9E3_8)9ov1qk2KExE?Jw0LdhaiF~>3?j~yY(;3WHVA_S zVuE38@+?<&T?d#ItI0aYX+u~OyI6x{(mbAgLJrTQ<#iO*XTZk`oHjPDtES`&39 zeN?{ub1+L42-i-TRi{mBz@|3#Q(Gkc)+AfvJMfsQI0wmxl5_b2wH`ghH}*hX1YL+iGxr)P~;6Yzd#!byY}1L4g$20&6H>s zMes3ZjlI(hK~^_T+6A>Q3<#N9GzqhG0w3sanPX`Z54Lyv6KS{1e5SZ+AbW57sm<&1@3D4bo$ zLjIv|bciZ0eU3X<=IKdvA;y+3O0*&N>U6T5l}!?C>zRdXRG`hpA&?*80SQudyAh4l zjRD)(Chvd3GDaJ;*cM1cL&99#{JjfNH*8)Iak!{wEwWus2Sskso@&nwR1!J{@yb~H zh?%ZV=tkrn;*44#qYcY$^6)UWVxot#`ZKbCPQaxnPx7AR&P$upgB5JwNZq$A%WzXX zTs>?b8|{%CL4Xl_xl=J_B3GrL#`%l2mdL^fI+MbFvfQL6uEi3ewi8_ge6e)8v9TOx)3GX&*SM{}Hx~Mp zAtN{{pv>ArSGuM7_uVRCMqVi^5=Lj35NNfSVcGhxFgb5D|12dX$-ZH^$NG_aZ3JD> zHqI02(l=Ia90!Yf2u>gm*xv&GX&tLb#YARSF(%Y}9oVd*J1~1GsyIhSm?5KxShey zv8|Dr1EzYRSI#d73{3;NdV0X~0I3iFlofD8Zth}Pdv<=2& zvjBj^y|03W{-A70XIm1<2cVMrCH0$%fu?=Z!3L_0sYqDYFqj5S_Sn#BJ@BSzPP#Gy zmmKa$$kvDzi$08&iu79GjP!)bV?D*}NNBCPe50fn%Y50vBK}lv6hGU&Q}Qu*h<*z6 z{4VCpR7N|!N@_i*N!vc?Sc@=8tq@PF*WlrTQ3L5EblO5=qtr(jNDth)F36bTct~v* z(>@c53L4yNZ*&-YDy?V3`gX1%bkbxDngXcYh%J0xR)5-(8EY0#x*{+gY9WIO`M@>!c>4|v6vKsXrYNy<(x}A5AwL{ zMoH)XkRy1VU`1#lAzjVZsG;NhigSWK zUynM#S~go_ZrnhZPLwCf$D(mHPl!*WP;5me*NtLw=fn)N`%?6<0=8@P4yy2%?>YN0ZaT*L!Wtb2y0ax0## zVD+uifHe_i>2V7Ffsw-XC+B_f^Kk8G+%;%Np=5KouaGxkifaN>t=C{1Q=OMa!r!|M z*_3W=(*Qa)D;2uo*4`&W3}-b%^C0Z1pR%N(VYm>_gUfbuni=W~IEdOgSuzkyXcTLi zMzG_}fK)c6lt|Z=id3b8G>o=E<#uegaNHZK`Ef#g>QD@E%1j&ak@UZ3Z34xeu+IH~ zY*auyVX%+=Bk-X{<;R@F3R#G3A1lM=W;LuMz%fUV8zIwwH?=}|tkdGCJXD}7KapcX zzy@xcagl_^1UqP7p_+}Xm3Zdip8x#_F#)vjdfYA#hfmo`0rddzEzR`=Bs2_SJJFCX z6U~3=hCOAT$Ic<0}kY z$M{FE(W&Zz2VpS9&?=i@$u+!F5`m=AF3QUAk^!Y=fk~rGD}JDbI^Y*O7jQg}N#W3K zw$E8>74lfj?jqTnP*GF4Yy>F2hHz{X!ahU1YfUI7n|KeyH)RU4x7W7On*WPJ$W5_z zp4HId#w@kPdjy(zJ%AjAq^Y$$>9ldNdg zn9<}=7YzB<7KF3bad*CW3F=p*I3y$WAt8%kGX(^eZChIDXf6BB+Nd036RFzIZEzH$ z&`G`Zuqdss1hhO0bk-0rm1&5sR-lO$Rq0Q6VHZiO6U9Q|)GNYrcI;tgpmhOwc4egK zfSk-`F_O_hL`2krg5}y~I6bwznb2k|3T28zXwjA}CFVA>su}Lt2dW9QypkWz7QQB{ z3++&I17+QuJrUsvB*WbwnQ=~MFzEz37fIfJsc=v@f2B;8D_gH0Lq$1n439M76q&QR z!5a=?UY?m23oSPC14S~W$Z-S^wifjYsm-b*ANIb>2uG;Va|sl@cKeO-6i zb9G@Jk{Xye3js!M1}(JWy|_YYkig5fz)cB>a(rE)*Qw5R=t`u%CP(OxH+Yo;isj7mqtTFC=K*BL>S_eUNvHj+ARGYQpo9gVN6q z)_L0+k}~_Eg*{sEM0FYsA@hG-c1l9Idsd_r#N5u7ld7jC)q_L6G(P6ckATR(b3s{g zWvpM5(8UV5;|RO>ivc`}fdm#~(J0I;34^<@CH!@Ws^)KtwNsya@F*2xij~A0R|-c6 zWG18*k&0vv^(~sz>H_ACJjexO66RAt$WlMG4uBA)?qX801Jax#SrFD~F^w)fv|2^R zq_gUV*kDghM_`4<-!6h%E0S|_hsia?UomzXPbwENhzS#gqaAz72{!C|QZBlN*F3vU z_rSFK)8Z~z{Ym(=n{-BK67T=SkzvAl8Wp_VGq zG**@drtn7@oNO-E#aVNJjK$+gJ_KONqHzv(_`>E9EO953DkKT>(FA6ve1H{`H6$W> z_Fy9E1 zgn}EO?{GI4m#7lc?R3+&bmW|L6~K7o?_dNCkXnTi&YaXi-&;vjyxD18%3pW3l1>k* z2P6SocRks0pk0wzpQ6fY=?=Lqdf3!?it4*1uD z3cxj2%G7$qMJu>t0mQq)To8B?>`IK$4xSuMgq}_;=(X$@BQE}(D{N)r;n5+xDN|4( zjGD-k!%?9Vr5o_joT$?yc$ICsIy2r#$${g;-TVs>HW0kfs+O!x47lfqn=V%jkSQXR zSj>V@;WY*NI`f1p%fekyKj^+JU$M!c%4KkH0tfH0d; zr+OV=q4B89<=l#H^&YzKShc?Ta(za+-i4>m*idyrbyy;xh!RRrgFaVjs4j7$idCGBSj6!3D`Z@=k=*cs zobiOqPx42DF^T>g{K9oM64(1Xn(_ikeJ8dMZXxVe*HnSlK#9 zkQE=1!qA^{S)_|7XK>u`T$^{?xDkZK=FS2@UjaR$+^_2?-p8oA}jPwZ+KQ5J2 zwYj5(HSdHle1%~=N^HD5An*J{P0YD$y8cbhVfp6<9>2t#`$}7kYq>x+a@qt zj$^Wp76>r9P_T_%YtK@m4HVucE zBDotAVmMoo)+w;#BTL}+6gmO+r}*EzlCxLrO5s4>)o8a?a9y`)W}?ylrSEnVpzo|N zs29bzR*7yf(pDdUHjpC>8C1OXSp?kny7B$vmyzKb!s}hGU+|Ce38k|02>7A zR)gGl5SA**2R<;w{@jrJdrCYo0SJxS?Ewu&y7vaLzab^OSeLBq;OE7f1z%7%=B&vz1>dQoLe#1b%kf#eyvN%dMR^} zK=yRBPNEsgxm!&rr>c)<5)I+uS3;yRK<# z{ds_Qo{~#$f+B=$CM4~Rd0IG8gtkusFr=GO>b5V4$vEtg#5O}pEtQSA3c7lXYQ3@O z-{E`t`%|&S-~E2QH>KZVf345|^_%+`uN}qK%l+Z{>nvwu2rsuS?dq%e+4S@FU;#eX z{>EOCA~)~89sngHZK5Py^f&oTXu?VmwVE6XA;iM?PDwLmCC`;%q1{nH=%FY3b%KHx zrgTK8omV_s12fJE<+EJTtuh#_qMd&^GD_m*39V+7q(w$w+U;N1Gve|qBr+BXtCB@3 zFlLFTh)PgzMWI$Qo&HNa*`4Zc*JEG^%nRNzjUcMa!&kZUUGtt@?b8MI`J7Yf#C-+{ zzgB~jAQ7hbbqfB;p5$kl$Pa;xoX%$w2K(SZW|VWe8l|#+5K2;u`OSpof&YuLw+_nV z>9$63ceh}{AvnR^-6g@@-Q6962X}XOcMlre-Q6D^xFo;xzUMvXySM6owg2hry=L|9 z?%7jaGd-)xOd-RWIC$djHsX!4RqAqee&SKiT#*M4>s1KOF_^(2d?h!#*-*O3#>gO; zOL=-FgDqMSGK=vmmAbO(Lo=bvq`K(|q)rYlDBkGJY0mNHDpVNhhpkQ`EDe^1=i1GWFK$kN_);M0Y8UVs{WY~jky0ElU<<1T3isqUXC0UwjKZ7|A|)zk>g%+BAedgf zCxx~@Y!3qQ1DVBu6JH|@sCk?e2uC?bX)0x^K@Tq!2 zgona|T+L>I6YkgUSVT%YGF8aZ)4=#vSs`oEYH0}lTn~h(c#J!6BwD@i;1@hrDY0(o zgE9gOWG_XfXro{ZJmui{?8lx(;_aOYkq^oa51egp(S|Fa!Tf2*7CLmBr9H~q)B7-i z%dT`Gfl_PyVA=!&jdn-V32{Gq+3sMyz$h5zlu5J=A)u8_3o)@@ReFeIHTooVX?UTe z=d%Q=coxwE)R`E5fs@Rp&-)1m7N6PCINkGBc-K!Hyn-~{>e%fi>wVj(W_)ei%jO_) z0hNd$?=u+ywZyL?!Ff;@9;Q0ZxP%>kRUxaR4|#4EHKlB@g6jQh@vxVo}sXSp1~`aAFe{CF}q3@O|ih6 zPCZu+R*dUUCl`3BW$AmPk4E^lnVabjwklC@tjGb3H^IiDPu@6%eQpCS6(XF`=Ig|_ zw+ULpiF7YXxhb@-?4a_gr~Z1#E{XlPg5fD}YUV{#Nv8DZ*wl`LTo09&I|h>LCw5~H zbK7YiFGT8#_D5gr62b!72WL}8$*$)9P@B-sXBjF2uotGmC!n=W1sZN z_s$Yii8$qfR1HXWD3^@S%-JhAO^~2~Tg@nWac>Ss`%b?6Y_@SxYcd|&ka>{2G@Ngf zFxAU_td7iGVLpVVD%d!w6^BMN*k9!T-X~}0fSRfoZsIYJHn*qR&(L1+`)e>!(D#!Z zSfZZ=;XU!_75oA?;nOtVB3nD^TaR%Z*s0su*lks&B{#or8=1aAak7PtcHR=1SHq;CMg%4u*z94}D%IoY92z{=z`^ zE-Jx*-5;lvyG)B;n~c6cNKhKZvcneN;Ohy?v1!QF3mQ$3a&PyuNmw0(zD#xZl|@*R z6$~r^lAPHYY_dbT(9Za{=o24y{12VkRrv4KbMyq5=B)D8HK4+Wh0G{v*_Io{mM}8h zytPwaa@mYeffEv(NK@%$yeP#`t@OD<6taoSUYO9}h`;eD(&xW1d>`1*w6An!iL|j6 zgh3>*sqqq|I`g4y;_qMx1%=LXNV^v*Z-n=gb@l!FtyL`VaUD8_WQ|*~M%Uw$I6#vGEf&dJFNb zFt;dnvzY?7pQH}-b^3}zlFEZVQ7%xVHAH+RBRh&0Ax_K)lDKF|CFPv9s1bk#rkZJ? ze5FiDrwBcxL`2mm2q$ZA7~;PGu<8hM$)UQA}#I?nAM1wRhr<6@d z;hT1WjwAO^B=HV=W0|u^WEAO=Eucc@BLOLr^yM!a*>+&~Ci{!Opi^Xzu{HguS1ZF8 zC#)0Af-S5WRszASp@3C7?>#Yaxsy$?_UP&@vHu84jI9~TkTZ1*eRM-MDpLRpqLh@) zzTsZqT3(oX#sb1iu`>6_(v3Gw){T9gb4Q;CUL_qODkDJh6|09yRnPsRe=g0er3{Z8 z&+fq;=@kE5dPb)vScgSonrot0#Fr`!hY+!jo8Jmpqi7|CCR99RTfa&>$x#(M+Yr>L zX9xNTg(|yGco2=WNZ5%lJcxvsE^WF2^!R63w&`3K65DcA5@wCSMq#9+mRhCDGfE0M z!n#&)m|l1gQ;^=BVgKDP0`!s0P~TG>dju$xbJS9KWM^8gAnGiOnbEyw{qAJBXJScm zD}{i`xgvDz0y(MF`SKYXavoFh7?C&>fY^q``up7=QiPp>bb#rveXptzgnGpcW4Yk7paT zLk#5}@+L;QBZZE3zp1r{F8Ha5D>2Mvv#yH%rs94uRCa$J)eA_rPX_rdZFXsYZ5?@h z-YGB4o1O)F8k{?0uW^F>h$71^8O+A65(mnsK8w7fiY8=jTJ0$hMgOR(2zmm|{Gh;? z^;=<$u+TQ)UZYX6;R;z}N=`1B#ZN}E;vj<=r^#sVW11PKY~r#TSF zl8XhGvy%vd z4S7gMjj2Arv)Y1ph_8xNGM(anKX!+i#SjwnGUjqdQzPM!W|0Lzj@8XGQKX-n`#m;| zADMhU^(KDF2j?nUytU)7kkmkum&&JYQ$Yt6{rC>J84h9Tfj6@oiWReS(N%R>AP>_P zcuE8(GHYi`a6;?u(Kb6yzHdl88Wwdx>Srhb1*I|wp-x7{*eSV^?p}$k{FB#x0#|0=8t`vR#tBEV30j9yWtipImPPH z5&rFj=E6c;14!clZ?=yomx zx~E6|W&IWnKi#keyF+1^#;X>_r)9-m{*;s&=85Qse|YirqBa-{EWfcK*~ zxe4bXe7)YKb=V5{UxJjt6Pei~nVj3LGD z`EnIz6{xJ~S&E21wfO8}2V4~nAPtdofz2SOv}_kf7k{WLW;zVvFpjkqA({!`4X&f( z6%$f5ke0}B;(_^o4^rrfeKai-1sSk!?2~cV<(bh+&O?gXp-vI@#Zmzk%qK+-*CmAz z^|+ZAsE-fZr3mhGY9e&Rijk>aUKY)pVR z4*@o+n0y!ib1rZbqNgD}BE&`LbZYujyXhD7zq(F&_KS`_4gg$Jn( z{Xj00K>$pf{?06II?^$d;aH*x$yx#frih1G0p7t-UvyShCxD60D9u@Rvb6&6#WP%Z`VAAGJMHsR7CQ5de z?kia}-xK$ne7Iyxo|vPsDVvLWQynaJ=rLQem zWlQvy2l=)x!n+~iytGBkoHgV{z&2pgHMLIK!Rjjwha{UR@rLAQTbbK1FFC=Us1TS% zfjSmP%>o6)W9BHfMoUti_TF$jvmT;6R;WKNyZc#QAAFNg{Di3C$1n~t&5_m~r_P<| z@>8YGAPybU`(w+cFJ;xJ^Re`0b+b3?} zO%_+pkd&ZKDA4*|=-~=h8hxuJsBD>VpY5^S%u~Eq`xRIyOC@9{Y2sycsKZgS9VAr{ z{59_!ddTU1i%>4;-p31e)UFP6Tc$of|L;>T8deM8U)T2xe>14o1(ZI^U-alE8VGZ93J;%y&AOwu32elr`UK9$8X{)WXl!w=1G(F26~r4(VTsLD+R6Nizr%)$ z8WLSAk&9d1@pCQejWG= z>BU#57W(Y5*FDtJ3o&5=Uw;@?4c!nz83Ow81Lf66b=3^i;gRN&68J6-Fw!6};2g(R zKlW34Ugt-WJ?cwq3yPT8Y&eV%ZWA%~nX8Yh!O6yeDx}70I+pC`R3sk|MDoLN^PTBX zr5JkT3O=t|mtgf{n%EUr*YQ61UZ?gOw-C^-!k8iZV&j?$6|Z4*DD)XcnZ*70l(wP1 zosX!%1?o(pa-H~1qZ@4`;_d21t-`w&E-`AOLSmn%bWF*~br~Dhmp8utJ_kAmRp#bA zIfyLTF8D@k-~u)tes2O638x*1A&Qo=*cWHjt>M1H(b6$6CEtUFoRB_-IR@9^q0lgi zDL)XLyCSbQ#ITGsBkLOQCdmA?)noUW zN=gB@6YAYH~#y6O_s_s0=BXeY|8R(&WF^+pR zF~f3x8PbvS2~mg=o66A6B9JjL(-UgBZ{vlsLgZ}cxuG3A2rzOS_EROrhUbJwG5q+N!N-&^oUJ1#FK3q2&%20FfR}7K{owZA* zoO1BT33P?4n4uCi?Ach7YikF2g)Uza{_&xASO#5dG^DdQYp z(S@=Eg#1tizcKudXniaNDakdnkh<{(k`nvr4Az`SP_roScPa;I`TD=OT`DgJf}m6 zhK>NOxA%y_q`|nhCypF8UV8PgI9%+BmR-iI*!QQ|76sz0A8E?l!%Tzbk^7hG#NiG# z`LRu2lXoYYH`4l0^)N=Lf~(PWW^^$-r)ovVO-Azeos`)t32d|xzofk2phZDCA``^H zCXY--0<}FA)&(zrh4wBS(40Jy8w5&|q7f2ScDT)spjr`Xsu+=+Se=5?Pg&nPfW$0c zhC3*te~s=hB+%Lf2HJ>@uz)xRY=z_8C!qDdz(WI97IBLd_Y9%6nv6 zu*lB=$hi#W-2DgQ-K3NtC$tIsf}k_0h>s$6=PM+lrpbfmOXzJL_-Oo)oK35Ecq>p@e56E-{i4ESd`-gcouwEBG!{&YuNa@4N z>{3+PVi8&=BC9shL@A)AmT5%w=1>G@$`Qeg*(KeR7-DdrFt^j=1jW~1^}hbG@e`|x zq!mfG1!L9aF;JYAh{zPKMgd(I>aQA~BvQRV z*XoJ*do9Zp9WLQ0l3b6u=^M3tfA$sH*n8I!3F++%ZPo_6OMCyv%r~rz@l|la8WtWjcJeRlkltYq!v`tWqHb2U`()pL zUF8Y7YCupItKrh|E{3+Rp z2cMwKC#gcQ6O@c2HdbW!I1`?_POZ{EgDSj@_3(EdwgBr4Q$1g`wMmO{TMAWz{t?CI4~?vbI#4X+gjyC$nR zg+|w&5HhB_aQS?God-c#>A_DWhh1s>m`mR>?k}j4t~MWd8)%Y z?oD53a86Qz_sm6bE8yfk*h2-8q@9VF=S`ss3#d;&m@R^H0i)59G7Lyhtf0gWBK02K z|AH%FSN`4u-fz?P)|H3RVv87*X#Si*qiwHaLc4ByyYW@GK2G>kgC`&47IO^wPCo}G z70!AGD)c^Ls?n@i2GWJf-lod&Ha#gPcQKq>T2|jOs4>GyAwwkCeRrA!HtW*rpk%>A z%7C$!j;%c~R|eT~(cCk7^6pNY1Mi_9L=HF)ls4 zZIl8K6U3!};dC|UPQoD+6aZtD^X*UiChQ<|o>7R{zs7qVI|S*=LT{aYVG49v-@Wno ziPZLSS>DsTdj!)lAS&m?z(dijA1}NSxa3N3=Z?a2={dLc*gnN55C7QNxV*5btt2KK zM7$F`Ojz{Xx2yUPHXzE1y`v;t&FM!Fo^{Izl#?9?RR&8ncnu~`z7o&h`Eme{E4Mf2 zUP7FyNie>LRX|IFnkwGkv+dwdC;H?IJJ z#M^H1sodGV3Z+Zxsz7pC#~Lq!8N$sFYN7s_^y5~na$NUPBzw&8OOYb})kp-iKTEm= za88vpQ>J(VEEqcWYXExhu)qs--0#I@p`4MlFNFwvsV7|^8=33)b`I2{^Vav-Z*sEmqPOMp zpxmbg|=C zMzEUd9UL91(A$;|;UP)65Jtw4uBM9tE8{)ra`tNOYcK>^9Tpj+)!nufS%I2lPAzFc ztV&&6pWM=^k(AN*O-FOKtC>>T3;m1BcsTSOI0(Xio^A2$i}Wxmhm&0C0S1!$zCR~p z&{YENOZYXG);I6CoeYzb@CXwGyuzWU6uy)>Sn=ZRne1=lW=lVrdHRU5a~Ka8=MoN; zJIEU!`wVvnSUD)ee|weBkb z_$R2!G@Lr6Ab;#NRw{gC>C=9gXr|+dh%`gobI(-8 zg#VY+_*YDXy{YAPEdrd}va-gB;AAmwua&^s;SZ&n*(GJ3W;!112J0VTmw%LMKH+IK zKF&+qm|Z>J68W{H5h_+-6p}0|j{P`i!KVDHRAYS}ecqbRk4lmT3&{MbbY4+$^w~d` z($;MGsdJ{%Mlj5;>yB%doXX1sKuY2O+=CObSzVfF6f@DAi1TDAlO*xFvm$oflu@{YR+=(osaS zXvO|pIUh=_^d?1lb>w}-&NI4qR zlCaQ(W21YFqZrEaXR2|t4hiZa>*2CgB1mGxKX{I{r;)%M=4huy8Yb3e08lAH2S zvD?u17O}QWIdfT2#m33UKCTC7%ckiVsE|!FHCl$y=tGENT)_TyLuIc|oW~(gNF~~{ zjs;&b`EUYV#)KT@AzF_X6oZVj<`qW=fVIW*X;?BUdY;27AD;iPtoeA^DkQp)D^m;h zaAhl8|B}m|4&e+QL0mFDdSGSQ%HxOX@=(8HC!NSh>r#E@}k;Y=o}^ymoNDLOt#(lN(xIf5D*5| z|C?kpGd6HA{%=vJPEBja)gjckDqZ^|{;-VrioJR3lle)7IwMEYF+9nt;av|_@hyqG zKKMXzk^1hgsf!Iz=y-=Sr=m1TQczbsV)3CZh5CtugNu)|XO$eoW+pH% zO9ODWmD;9>cV8ugC0V8HtTrG)`{ zplL1O{;hQ5n=UUupARUSXL8IuhwN{}%Epr+4Q0MG4IF;jn=%;_wt?g2H)#{=vTlOi0`6Y>V@Ixw0k73 zg-(R;rBt>2v^z#!x#G@*!UQ{Q%*H02V;fqX>d8X^%J)NiMM12K_jIzPR$Vfr37Yv0 zsG_1SEL(JnCG<2-YF<%m-4rmz4{J$r|dO>eA8)_?)S%X6QUq!`7X9J3P5 zA{$>Q)LF+i_S)i|`Gko*bRZtqP*UccW;612kW~H+T(v*)Rhbwn0p)6)7lX#ZM2DvIn|&e>P*b z#P^apycG~*kN4MVpX@oBlKXfbsne8SsVrpn)h}P7!XpuEw@h?Y;{?~s7Q`%2pHq^N zZgwRD8WIu{D(!9^k5~jmvD%`LJIX7JS%)M)whwy!td4?rG#k;)@zq7R?jp8PS(3oG5 zX19cawR41RtiXcm^R{JuMMo=t1pwLT5TbW z4LU(9aTIh*^z%$0V51glOLmB5l#-E!svd75BW!1+ z-MeM+6q`OQQB@Ij-!L~&8$~%$Q*}L<(OC;dc9^Xf-|CBlANa`)*j0Ej&5dXpXuT!>MXMKunm7+_c0^Qnabk1I9$F+%I7ccJ z*`zp=lhHu5I@Mk2wOEp&Lq`ktku;EW#~aj$Cu34V!I5l>qC3`;RPp<}3KDp0rJ^uR z3{X~2&lU4fg0D_*)KewmF76yEyohdxE3Zm) zNw`!?m^S*kX`Z}rI;l&A0-W_q58^zcDBYp9PJ-5TPMRjb!{1?FS_Pj~78V}_t1@(V zwSKe!J$+lLT}bc_hmul4x+VLR89~P} zxg>71^@eL9Ts+NufD)mizJ)P#h4IWqEgPN^QMjv-oi8QZttKP#)S8MJ*0^|Jw0 z4}tA^h800P-b*9bXkS%1(#+4=AL~_%uDCu!sWS*PO%dIF|CfjX4Qw|`fjQY(81oY9 zj~@;riNA6TT69JAot(=N%{_+Cz{T^aCA;o|Iu)d?j*6M9>ZTd%LlIt7L0nAY^>%sBq12`2_@!f zNzsaCxb(%A7^ z_YGXfP%IO&fjNJ|oNM(IgYaAIZ#g8SH_ldXW!OdY^gi-*h`p9@(61ZC+PW z+9c(+)u@HO#;~NlDxGhF{i!@l2IGqD#NxzQ>od((Tu0ZV!47X1ZCDJ~HPmP2CE9ka z2C8`uSdGqZ)+km}Ro6cp6(yJ~Aj`H-dRt;(r1E9t2^?Tb%#RDVxg>wa zCbv`QnfTe_`n5-iY7aNnc-_!C7yM}2gvfB-tbbZ)fQ&B6IPK`1N60-aVMCH}oFeqO zbg9dQBIJBhdB@T4UW{1vnOlCvN5W9DS(ZBEJ%kyS#mJyO?r!Zk5%sPcET(uwQb{lb zR*z)7EuP*k9LT>ywB9;~=68%_?@6u6U)8nMbII{6%vmU6FhP!8k;-`1I&E2Iq0g|g z=Qt;(nSE0!;!@(pyUq_j1E2;Gix+}&mDOn|nrEoLy`&>yh2g&#w5!nLubl~|;a*N+ z3v3s?5;qT3&9ynPy#G`y&_r2_7&v6^{5@vo;!<;D(nF8oHa3rzXNXmWZZs$--(Lozl zM$X34no5~8j?t8aYv!D;4ieY)9iKIJp)d(STU0AuQX|qB zstoeW;7Z11n2B zO{p?`dl_%fUPj@b%#h3m1d-`rAqybJEh!z{(sSmsi|dzknJ(PpqsqmxHK$ zASMt#)FtgFI@jqQ? zXJ$sTCIVjJFM#NLDW~-Q!FfqI&1zA}yxPzes881Z{!WHWU{5Qg{RHJE$?=P91jiy0&oy@M&Kf0>or?=!?+72NWK zu)4%TEAwL^z4Q*p{x8*zY^V)ZrEQ4|71_4PExhAtQA%FBuZbefEMgl~d7!_Mr)9J; zQ>)gz$1-X`(nGj%yOB&Kp_Lw`J~u~l&?KBj|4fVe25>U$$!B($#Pu~&wOKQb8KBML z*LcL0YQrs+pSy0P#Xn|ew=qZmk6hx#pm zFNH*&4o8;U{nHaVuw{j^xM4zJ8%)hOM1=j3wY)R*`$Z(r`dv$1I0uS zNsC{GupghbtDB1jji*j;DOu#Nmpxao-SSTqOTv&Jv!|;T&ye$$t6N3O?>iH_q%8ql zH-7Klmg_Wj4k&x$@Mp#5u4nuUB18h4&s;oWxE*3uQgI@#bs2l*ekn%uzrmrxlw*`v z1Y@Rb&qH$&<%&g4p^6?^#n!Wyc$Ag-KRuYe7PdRBm9p_ex3BG4U$QEim@A#HK^szh zyyK0PB#=!COdDji;->RMALdWgDwhz9~_*3gDKpu6*$f5*b?)Cqw5T-k)8DmjO}x|0?lMC;W1qW?tAF*n8YP(;^f+82!VHo4;|xyQ4v)E6jcSBD_K z+RQyW!>7;6ZOYzz@09`kV~>wRx8ANc2qWh1;-d0^T_l7=wCiex$j)LO2iIGjbMC!n zV8dkcJLLa-dzDb$J`&F@px#PbymOHhp$(xgk+0))(rdLbXM)&j6adBRD zxBLC}Z~ABCDPMOV-~-^$b#c|U8re7h7Z9+?=j--F=_5dUg^X zcUHc<+IhQq0^f#_eSH82K5y%))w;mr^>J7JS3+KH+uW*a`>U(%M_12dyzctbZ69{0PmrfByFA~OiQaZ?-|c`e z&p?~w`;R=z+B`3Q1|s`<08dV}pB6uc&FA**+2i@`C2MNq{kfX=o)+(Be?9h8-PZN~ z;bK#Fs`}w^4ZtvUxp669^Tia5?ju6~Mn4{dVoqDZaZdPtO0A zu6?yg2|Vz)AF_Dw0QkHcs<#l`ZL(KX@$>5Pclf?Ngf23;AOe~fecxZp-yhofy_~&o zR{3?_fe8#B^4iV1!0XFLTUYr@+sCKOG#&3pV8|BxqEDGC!=~4hJ-e6sRr-ev_g(in zTK4PBt*-CeZz6MGHQ)P5bGG;M{(bqTx4pLm@a==_<#mq#^(BF!YV&5Sc-@)5n((7~|=-c?s3^cJOjL-pzBV|Mv3y zTWtQ`K|b!%_mv;7f6;dHHFByw^0iU;{mtY4{QlrP6nn9|+q1E@e&&%#%ysc*@!Gpq z@cn+6p-S-~MyKm}anTc|Yi-c?{$y4AzFMc-8*njrKi+)Fe>J!1RX5IOK^>!;_&~LI zAIk7Z`Ck5BHRS_9eoq(M&o9=#PG-QZ0IGc434rzc8+imH?^lyufUi$W7r2C{P1h#Q z^UFQ*DqqLORP&b}yP{(O~_Na@6VH~i?;9k;(*s|9iR7`NfzOoi|0)r zH=o=4A;36)=SGV6Gq88)BA>r=9T~9C@OFI5P_ zetpS)-@aw&e%ZOzecLXd@_k(OecMR@c5530o&;UJUk;Nmk4~cpeF5v-(b&6oAIA!K z-Hhw{K1}KQyz%p`l6yp&4<w##0u&Sb~q*eMtcRx}|%~R3x zqq#U_zI4FXZ#wghJEEoDnrG9eDea5v zO%F@1+NYwU(37?R*T!Gk&nH?G$g{0yKY3oXZL{S8F)w*M519|f*elug-?X@rfp?v3 z^zC`W7YzpX-+lIFvh?}&KRrxx+>7~^?dubrV-0rMhihNj`0UQMBG5lbIHWQ>m_1iF zMxG;mis41FzD}{^54-<0JomPg3zL-Zldt-AMQM^Ox%s=iEwH4oB$Zx)xv&6r?3o3S!Wx?tk5HNV@RyFDU z#Zu9nDCKD#*KOd09n*B#$bfK^xA)h?vB&@8>lS=ic(KB@dZfAd>f( zTNUDM=z`<%Kd*a8=W6_8qsq3I?HfYZLf29shIr_mYgA}dNM;8W3=j&J3K#ohuy(?o zwZoOHQeXdVE>eH(;y3loUjvPTyDHd-(!R{u%h@9=;Wfe_`cGS9q{6~5G)T%3xl_Je z*&UkLz?Om{4~!QaEih7IriLwoPobxV`#A6JK$9{5@S=Y`2HNzVDcc3xzju9%+0_t^ zWA*oU)JKD_iF-OrU{*6-cGc0HLYo*@EyD&=)EBm$jr`VI$R} zE5d4kKxzUR_2R3G0A2){ZLx9e>~sH3VV|oS_%n|{4<-h0VXJqGbIzK}X;CxKXUIM5 z*lyp+VAG|r%~OqSSIgB=?R}q=xo&{t*)Ib^&R{IH3jM2!=uPM$=SRJMmvjBq!O}|o zNU`OF68{-q7jSr|GvUdX2H$GXHXH2DY1)eEf`-Ov(6VUdbJ^&=0pu+`rm4$$F}N!b=MTnOZzHb z>PTnR^Z^WM8Q$POcU*fm8h0Y*%No+tN8^Ld?4y|_0d({0kOB~jlzTh0^=$cPv~5>i9G2#J&#)c6cD-wG&f_avNkG-*CssoE!R{u*ATMcAN^j(i1-je z%@oCV-SxlseXo^PvoaeDS+EvvEtTMFg*&P(i;p*`YTzf$dKVRs5PokBaO zPbBZDE5B8@(PlUnBB+fuAMgRnE|npn5f@ho*o+68$b>~ z<})#_sEA6s&#R-Ft?&j#7Iob2rur43@eP%h*1%Y_q9Uv@>%MX~Sw(GVY^)?-{TuFe z&qHuLaYG&RPTDyHp{tBxfqv&tGB`-kL8WIa@Q%<2qo zr8YUD;YaIRR$IyQz4G7uXyF-uY=d9``toZ*)Wt&}Q)-DknlR^d1JUR@l7gFu)^%Rd zqE5RM;vrjJ%; zO}Km?@E2pXRkvNrM!bAAkEdWIPzyQ;g@LbNU%6e{h;Ld8j0ZxKbCdT<^($NI z75K+NiQ(ax|Ethjat=@4BN54B^MUgZU&EFPND4_<=#c>bj2OkrIQvgw>lV4=x!0hZ zA#sGoh6#tgMySKpz5Phc!Sm-Na1O}8unKKJfS1t9j1zrj#=w|Tw_ao|XHU9PYwE9C zmts-=%oLrpH~Cen#N&ZioOON#f;{f=^T~ zIZOTq&=F4ofWMD%hch{wZlia>53fHN;l~W2Nw`=+jqiRGs9ds&Zi)Zvit6Fb(evap zekxcp?$|SdI`B~>vT!qK|MlsaeD#lk7N`XuM8e=!ID7PnTV+`G{loKzGI!%+(zkN| z%PD|r>!C{p`UkgLaohTL6#b2$<3Ifc8x31I{}bK6!-Oc#-+c4fNp||fML+*HJmO_0 z%@4qY+6Ub097&7|=UA^GFplriK0OLw<5&+e)JK;J_FvV1{Jn)l;86&S%snF@pLZV? z4P%;BOaYR+dRkZ&BEB^~igrEhlK$utn`P`EKF^2ze{6Phr z)-fc4e9q6bPyeUC6$mxVjGF%@_=^c_{Db*hH-y{#Pk(#IKxo11+5W`x$05{E$FK(f zhj6#y5BT%17TMQ$P&FtGTs>pGCMX)D6&Ow&M?3Q0&LiBkPgyiv#&A;sfaG{HF*i1{Nj4z1wsp4ORi60b7H% zlmPPiPbCBnEMvg$O>C(@7yPN{G5*HzpN*3Bz}Q@TOx<7PM+^bBANPRR&H)kD|3v+5 z@n4K+|Af%88yT#NrbpfbCphYtvHFopsGJ;2m4aq`VOh{|m(!&PjDL}9*VBCrA3^;= zvhH!O||&W)s85q=xfKGREtX^-2W9L3}vTqR4Rm ztAdaab;oNFUJb2+OhfWa@<07xo-LH0KQjAI-7=sQyPK@{BenmK`7wP>c4CGciP-jRP7G9FvD zlVxg{d&eMX(LMju1M#_l<$?5mOQ}VLK6)ItIYPItXAF!MzJl&-6zns66dhw-&&dBM z^mtwvUqxvSGJMlB_D_OT!+L2x9NUeJqQ!$irwVI|4A8y z@F&jyP5OW0{xl7?{kJ#&5yk()!6x4PxeNZ!AS>KI@^$oYKWge~DF1`u4;IF~Sa8g| z=LHF-=KSZ{ZqvstBfgz5_IGKNycMrSfh}bd1);dwrI7d6cAm(MLw7$GOX9( zlZO0{ef;)I{zF&Eg`?}#I??Js>@4xa*2%PFB{wSgzpS?tiaY>KFg!;@;RCdq z!Ryi~IGSUmz)XdkC?iEdp78Oz+n$bOc!7u#DRo>ThmYj)_EVLslEeQt`)bkff0=X4 zs=*o-IW~DO9IH`}BV>k}fGMPtTC6BM$1mbYETb7PIWA)AK)UaV9}i#q8|7FDcr^2* z+>$%ZVfjuuK8%Q;DAgE_$TgcO$xz!U1sehLtC05!W1U^+9M7e~0F{iv2;|usQo)CU z+AHmrO2mgN(yvro728Q{0efSKRw(kAd}YZAt~A_oK5ZIeG(*K`^*Yl~NiF{mSMMBM z+4Dq?#hgbMijc33)SbA2?j>qsD9red^I_^lqLNSw2@4*z{ff5sdW7(;Vg%G(a4X zeT#BN4i%|yktRKG=ByOcBb-`#P?vyU`Qaliz18^0O0j+uG{;CkPxDNc!0R|!=#@6Z z?n@^&=QX4^X?qf2J%@4~D1(C*t!c92x&H}03vjg~OudLCHF2$A!P$$a9@xJ$VN1p} z)e4M2z}5i<`rseA>GdH@Pa&SxqOCx|*Tv^_BmEW+LzC2m4`&T*R$ww}F2S~_Z(;M4 z6aDXxjD~2Ph=rQ7Fri^ra7=yYt}uuuty3F=W@$51{Yfu;upHlZBu(XG?q1(ntqF$E zo1_3`vgc0VeL-Q?XDe$i&ZsvR_C&|z6sbl&BhJw+SbaYle)D?`fXXyKnn(IHLZ@T< z4`B?Udqd*Uh&>Eh6i9JWl{0)X0<6I~(Lnvzd&g5q0Hvm89SO@icNZpTFlNwGUe|Pk+u%s;OW(zUOD?9*JKwP&ZL&aHw3L4n_28RQ59OFnbWO$^69-mM(j;Vx zbk?pEkYXD7RK=IHN_gZ3*Im1%&DT3(p`}NMSZtS~-gql>Z2lZ$c$nowv2Bmh@Wuu1 z?A+VR{-iaHrdwwh%F-7j!2o{<(W^ZrgB#GE>l%;~?)IEpY1zP$4kzFs>em9GxaT_( znNH7aSO>>>Fz>MIEJg8Zm7J2flRTvW$#{0Bvw7?^a zyi<&Em?w?QgUe9%knL>>EZ)sV)Aa2x2z-swFajb!hYfPK*1VKaL;`;rtw*cR$L*rfZo&*G|hBHgY<&mDJ)-5^TVk1FCBUV z-`<$WqI()#d(ZoI`76c3;*?FQ<)IH@5%8r27aDIB{p37Y1~C@KYX}$4>a2-Qj+NCr!>21z0TZiz zM?f&37g+;zvkgRI?g)79CG9ZPC>|6zQg>q}uhz!9g6LK!?i^A3UtB-xD6WmQc^dC~L?KaoM2=|pMWU(Q`So45 z_wQ=#090j7jhsV+Cu&yR-$&xk3JF2(7Q#p+<{P zuT4B|^G#Tb{WyGEz|(;eN{BQto2_r(&8V74QhI6{qR{Q_aE> z0sSgg4Bp69d+Iy={b51*?Dz~h^JCj1$nC>3tmljQuBBQgX58*EMPVdGX<`+cI=qNU z=qFckJ5$YYsT0_d?h;9QtG_IA^q1qTCJ zfM-slMihjHI$S}OUGMz)sE9M=fD)@@DYjY8mt8pPt0gt9N#u$av2Gk(48HZSPQ%Hi zm+QN;Gni&nsUlZ}%s|IbhU!UOKR!47Mc9TRlIL}!Vf5c!beKZgXP1aHzx+E*HQ?A7 zw+3-0H`;V@TZieJ2ZuW8-GsPLR4*K_0+eYhDXLHMdM>3+OQOIFpF&i9Q|`?C(pm`40}_J$Ehnp7A%(op;LWLR5_k&8U_PIXi=18WNja3tem zijLRWuanN_EL*NYKM7<**Hjh+DR1bg!?4muHce}LF+Vh-^Lw?y($9xti;*t?W%mZ} zdlg2Ak!uO|b3>lk_(IQN6zs$d9J;PtyJyR6rtgdWww;U>N&d*QY7C^B9|3By#^vV8 zyQ|ak+x`7e%Uu^l)8zuqd}XtEobXQ46W>!w0Cn}sEnTj$k zbeSl_-7jcs&*t|vwkyFmXRT$`HU7)(qHX!5Jj5mwS|bl~?mv3G@iQz#CUT)2{(%Gp z0PdRW)p%g0UYmIv^8e12`PAd6C`g} zHU|I15Kd_v6TW6wTA_|3tTZYDVxYjl|J2NV!2N30;V+_;^xp+uu~ z#X1AFa$JINhk~b)k^rZ<-PxFV?z8|M&!}?xcF*Uqwc_coMvi$jSdl4N!tnTHWQ(2uGzp5 zS6kk}Xmwt~YMRmz20XFuZ)datjP#W=7Fz1ptK@cJrfkRn5`XVdbSgYDA@RtS(T_tc zGDEt!HP7;D(4HOR6oN@?e|m02Nh>SomifT-I))k!Ze>ZxT+cV$loK;3C%k+LJ9uXD z`%W~GvYEnsDhwF=-MGQ!ub%NbT4FLWDuP)FqVvqLLEQZmXtgbqry?-giPLL~-$VaY z(|=~1=$|0BY+~P}JygDz+i+a~BN4INnK`fkMZIbRCJk8VSP3t{NOCCj=$w7W&VtyV zDQaa{{BqI=e43s#liH`(bR@7Ze93iVR$G1;RqH*0hH$bdgmBlK$yo;9gA^J`)C@JG z+QLqN_=|zQRJ^+-ocI{doc=c~&9Dql@}3$#y?l7hB_CMJt&DDEKSm|UEh$h?T7n;Q za-jN-0MHv{(`yEfl&#?NsW{=CF_vlG(h%P-`mDhU@JYV-gID&H4VE3{*8LD9-1%;f zS2sR_PM#pv>?%I%!}Mv*Mjjiu!hiBjJsupuF%~&E!dAt} z3>>U368<7IHirPT^$d0z_AGbAeiVr$n-=_CeBSQ<~#-IP@5$PXXxuF-jO>i0x6P0sOj32=k>30g|Qn6e< zm+D;~=)V8zYO@+jgQ*KC?iBKUv| zaFCAjyjuyoG?Xvi@Z2S|Dep&xFM2X7A8l;770XO&OlglyxUt5p)*TqDvgpR^w%S){ zA)!oTaMskoQz{C=f0S^^ihhXRmf{eoh}Y_UVp-=kLjL zBMmFdA-9bB_D_gu)9!{Z5T4~gQnx`9c0WTC6T~g)Cu-4JhxB=L&6DUvK+U7qIhl-w zWa!z@SZiDv-&qN z9TIBT1=(z6eNF%yq(!xeK-JK^j%A==qJA&XKb&ufe#y<5-4~E(E?uLykS`6Hjk;u@ zUJqCp;JjQ59f$Sc{;2+M^2WSrk(Tq?ZyG0>|rin zgXqxZ8d`ntHM5{c3OKaGSq=|F4`I}}ev8c=<99nU^O7v~ z+*#~*XIUw6yRHc+nzs7(swzYJ`$}bv&`PnhQTQHlDf+kfVxL6pj5T+mZ06gGfYoaK z@GIv(_gW^I&s+h;2t?ww-|+8y-(#PsLsDY6U(*i8+WYy8$MI*FdSk*6crGn6?W5NI z`;vfItdLK8exL$Jj9Y?DQeTLSyBS73W)@AF<`EKP_bVSG>~#+b;9x9KH?7fCj7sXC zYdzdwrcbB9n4NZ#+O{%FuGokEqH$0L2g+(%NA)v6 z8X%;Ti_ki{!gceh?#!2ZF(3ygIP#;+{Em;^%V>|^$|INoXVE2!$o_rh#wyRYxnG?omgXK;XS4CeQ2tXhvx3jPc1Lq!JdivOWm$|Q10v*9W>h?qS zY}D?7ls4iWilAbenO`!;@?^wDDHqC1T<+6wv;l{q>*-9W$>b4S>- zffL0y`9=X1qWHskLdWF~b>LkFo19Hi0>@Lk9m7En#ET9IuS*25z4~J^CCfgeyUg%0 zv`G+HT)H5i>Xi+Rw|L-~qkuxTjC$%Z*?eXqFJnP{#jKE>C0ZUDs6Rt!#W!XMn`>}76tyWJNH7`VPAQ!C*R`wf>pkkuOcZAfurY_r z1U!$CpxnrmohU+C7Add+-nvPKPDyVw=BrgVffLApOKTk&%;U{g8SDpuO)lRRle?TB zE2Wu|TsP+5*XgEgHoXnLw_?y5meAEPN`BLoHpfYer7bM~5uIW2U^a}|U@jJTzp-hm zL-iv0j5*2U*~q;!Z-Ny0X!#1RwaA4Y_6Y|wSn|zsk_dAcES)V%Deg+Oz$rFalQj_D zZ{+~y_{2o(He8?%qdtT0=|GGIWj(e-zdjVN*XAcZWE!$|tyKRl^;p6i^ladx|mKpLF9`k-B zkYK*j4F~nA^;`FU>3`(%o>P&NJ{>;(%EuKDevR9^^Ecj41f14fGlK(So6&kn%iX7u zY^K(xM{8jW!o38`n52L1C?oMt?#qd`6iQQ;`q|U0He40co6nRG0*7GhyqvdPGT&B@ zY45~Yw3xMpvBPjO0$jZc07WPf^mB8Zn#p2g{#&$0Pi*j;Y=*~<0^?j|RuxHLON~=Tad5aSsMeXgqV_e=$zth=a(Oj~{7q&u@U$Z| zp}&d+sjG1Zs1{Zpt&`2{+|z$=B6WuDMm_GNy`we?&y;*=dTUT$XoT}iLQ%# zcGl|MbBtj%&}|8Xeeh9i=E2WJE4Fi6RF{HXG;B%pr3EzCb9L$~!u5>j(lBo#!h zZ-#DEcW_tWp5r4WSuG#BPr#kxCZ+E=BKdXgktgDU(Wb3h+(4LNO>cn+iMKy6j4~#k z06~lB-21=8HD}No+tK!%MWzD5CXvU{!BW-08oyq}A+TAa+^i>PoYtln5;fS=S%87p}=h&GRepi?!oChHyVo|a7QU3JmalsfaIaQ~lj1paViStqP}=<(#D(@_r9tiur*n6O-) zjkt&b?MJSRJ+ZbSRd#zQ+*o4Xg5fD>h^jpo7qqZa2(c>;6a2W5lGe73O05osM2Q6i z6}iD7r#Huol1*L3+q2p^7%ZI^(^2btK-gCdjDzfR&XK`d!>XL%CFo8n_>h{`3yZ1O zgBLr*jcI+qnCUyk#eS2y&M=d%BK!*`lP9+-Urq)kBTg|W{9i>IMj6i7ON`aOAWQ)l zcclb98xqrDuO#n~E{+Xa*l zJlR)d5ZgT=P1inmZl7?LMNj@NWKK**IULpB`)AOtJN$$Yz?_e|sjA%k@hBxKIgl!A z#>gL`FE2;$xJg6o#I}te3P7nU>x0WxFSBChWDId#*vkpJlpH>bmQ8st^`AbZ%S>i- zT?zUMV&~o@V0*5RRE`?gXAEE!mP;L1!UfZFPV! zlf4C%mUeXd>Wc8uhvy>}J$rpOpN%kr75$_A@?W--4gg&`~vxYN>)O(PX5*B(1y>@h60el0fxZM@FEy zqu(>8k?|8&P1gpmXX7!`mAoT-I3)4X;#IcLJZ?b~t#OkH-D=bcoV3(8z!6nSMaN_; zB53Q9XxP)JNpODG&>#{Z#sm(H8Tl-^W~yPDPx!nnXA~fuGJwxqSC#}YyISkoZ?Kyw zVC9rC=OgQFHhkJ3SU|XEyx1>Wxz%DAoBJG!18T=Q8~VA*`jG8APEv_m2Cf2YM#KF^ zz7A58KBxCgzh#zP3I745Y#ouSb|H4p6HMl|uFX%fW{vk4q$Yl$r$u?qCT z@UZyc8R=Z22FO?}z+YJV5~KlS;~$tSP2oK_a62G;b}*qSovEH>@c zQ5wkS$Fb^${AW1^{{3)HuSRVIRnlZk?V$i|kp$0*+E_Ip?d3iYX=Ho1Y%}lT9tr{K z<_QmQ$(=XJry_6`1AW04XN&6%kE)F6QLaxIXqq`P_V|;q{R8+a0k}+?7c(Fvy; zld?h#0hJZ-_EbL{N6=P|iUj#sXS|iq8q&WzT$uFQfT1{nPo=08%3#mI1d@&C9hcn# zQp8dmM+~|{I@yEx7v7_Q?L%W7*REE5G21{8_3$6WL;KQ`)3lX$d=+gk`to$$chJrfKz;F##YzGVhdjat)Y=t zn;#9jmHnDQvHMSw6>1m5$ZT~)k8q57+}rDg)Sk6fuG>NsBo&1xcpw3R%Jqs5w>FD9 zNWXdgmbX_y1_=pE`Hqmqya&4r=H)Q_T7i27R7U-EH^E2XpB-u?yKxa`#?iljXuQj{~5*8 zlFjGLM4CdV4Bc>QoS5!o5f3GVl-gA+8avovrN*z!y&=1LLId}3_N(+jDP3%$Ncy&j zCK5l*X|>kWJ&Tr(Ke*hH2Nk}q3+Y+*ffxlp2|9$hf;Ok0&QD>6XXhCSz_`SeToEiw ztM?;v#HiG%Q*J7tMq-SNm>`1;Ka+l?F|v9Ow0jRi4KxnT@otcp%61D&;&f76Kyz&r zQ+%&1(MHXXLPB8rrYlDm6!Dl6q=hH`BxBDuTC|IWT~~H4m;sGjrZvn@5A<5mH=(hp z>DKx&;|)S!i<9gpG@YQ5!~~fbf-q~2<^r2;>7s`;xF}Xhp7{%)?oPPZjY05D&CjWy z>qh0#4m}zH8$#+um8c#gFqH<>*^&8iLX?~gU0yuK07gBh0%l*mKhcb^vJvQMsmaW; z_GP>-5;Jzo%9LHkioyc7d|xWEF9ufuRAtE5rarUTBZwF;Ys^mH)G{}8I9t~d+#lcm}h`|MrakUmflf^-P7)X)Mg|=I=n2A)KZF z1>^U2BIZPbuTJ#_4HyC)D~1n%$t#BHt8iF22o9qd7t|)i=t*?vL<_BvHMen-oK>Uq zz=PDwF8zLXX7baHasHCNVWff@zz>VNjV!%aT&s+YYTpJhDK@=fT9IyW+W=L=40h_; ztoVqtx`%D)iO!OmS=%i5CKAOZ3MhvIJ24lrD+zDYgI=DEYi9XSwz_{R2g47V@GZLk ziI+cs*r>qThcO2L>15v5@~nYR|10&?Lv=*%lVgG$H8KR)Cz}lY_4tL41}#$t6{VqD zVd}Kpi#oA!;7gw_(_d+@KbbGJ`O-^Tn=6|7LG}b`471^Vv`c@q_AdSkrq2{VBmwUF zbg3wR)vI$XudvB5e2tw`kti?N_ew}(%7)LH;bTqnbDv&R;{qJi18kEp(lwI=hgUA$ ztF>RWRLiS`QW)dyqS+iC(I6inP2B{G znU3Uc@455srdkglPn^LVr(RYN_H=VYw3N7vXRTIT(Pk`6S9JF7=4?DIU1r~i`i>pT z7XCec10<7v&CP;+J$}Al4?YycboOoT`9GbEKJ=dc72IvQ{q+!i+9;g;^+CED^zZra zgQoTrO5^%+Vz?DC98p}2;(`g?Hf|DG2pybJ`%rw01zmfL{wic+Knhm1D-?Kv*j@`X zA2JkSC^X{zaXvR4oLpFfX^K0XKP4G^7`I4{w7LsrxG#@f6|A~0+iR$Z;M5{?gjx>M z#5pPlj5rzL)djLtX($qV8TzIU-b=+`k}r>5W%#P?P%~_jD%h*p6ePQBlLj{$3EWkf zSW&Z}sGd|9lDSxHv@C_@jkhyISnuHv7;*zT9||8rE6syE>5G28v67lHIAEM$JwEYF z&)WTou?ubNWWhgcR0RxF)ph1Kh#YbvQ4dOBtoQfs(H~U=`F_O$?1|D5bu~guM zIs)&vRk>G`BUh)3o98#@;)THmu-9_Ek*?wh8JZ9=%q9LtqLcAjwQUgb`N|xi>xH9U z0~dIvla^3X`9ntRBomY_Z+Xtht$HKy5Y8#)*-Va8ra;4rrr~kY*CQ|=FxfRyhHsR? zSQ3$h;kNef_Tg#>9;No=VLu8>ghAi$$WnqO?=c2Y!^VsEe@S^Dq_>3{!ecmy82~&sBQQnpb-iKt-I;)Bh8o82HY##E+ z5^bO_$awfjzF0EwzJh70+1JnBE@}6KI36PCD=eh&A9%=&j0V|-#K#8LQu9sWik6u?zQme{ujb_^k%&q;de&WVLX zT(gCShW{a}7U;=7k;l1Cp?v%egjGQuadCVd4?V^5#VmfC5b(jIv;ylPfz;vUYK$vw z&JW$X@c2G%@Z>MQLWdsBzBHcOa#`8Ks z$hh{D%LlJ$x{{DwNoFLB7HhI;H&_gL{&V|;_cP+Y`SG ziC^4NNB_S%I2U#7!(NUks#sp&hJ9P@`x2LZQjOEfMN1pTzo%6$v!|QUSiyrWo*>ha zTT2D|e_7v`PiM8)MC*54e2($T(8f>-h_@DsT|f@1`*LuOZF>SiZe0b-`B&DNuE)SU zPzw6!^+UXlFhVi3lL%1sWD_DA@d+4$?=Lb=cK+HA)kCEeH>3^a)zX z7_C=YG${B4`d~|}0p0lfPkafuovCf;-U5hg@uJgM=d=)Dl<(Dfr*rD$Vrp{yE--kJ zHI=*|Shn=XoUJ6}27gb;HBO1U%alZ{cWY!j`Z^P7>z^kI4RLS)8e7ym);AYe=)}aj zP_FXYpWN(AD*bhAqciNdB59%n)9B-^Pjd5p47aEV(oJk*hi z#U(D^P@0>qoBu#bpZNkvYsZl`1uD%5T1S4R?5cMbfHmjxnf_~(HNUj zMB_|YqY;a1EOdPQN4B9Hmsh-O{5qCESo!9 z^3BkKW)RPFkd_S0!wAERI;cJG(1kmLsAr9EdEW+e?7p-78KFl^W z6IxNsch0#ul)+sHk75Hz?(N75u7L{0lY%_WAHl@smLM=9O7c0C*;%;#@*Ur`yWr~7 z+l$kd8t8wgI6*HD$$w0HOtbWy%5ZaZA3oJr42wvWYiycA<(uMjP1QMS%yJmB=Ld}+ zeQ?`_N6@CUpQN`Yg~lFAL@W0W-Q5$Sha$J{+E`tK_v{dvy2R%lt!s7t%#r4wIx2qN zF(t8Tj%#K)RpIlZ?Um1EM63(He99iUN2zjxtsg*gNxo-@8P86Shj2ckH2= z6zC=?^m_>5c698xJ@AC|2FxGndu4Xt0QD>dn7jOqI}3P+5`$)CR=z8zjK z1a@uQ{7?+1OhRAfX%aVKT1JA=Xa_eDa^G&};lrC6UrzdpeQ_xNz`ZVg9gOcgb*Cfa zBCu2+RzUr1{VmU>_0Q@K${5I>!X7he+!)=bF^9_$E#~@AcYX;LRl$mK?L} z?HuA*t8uoXGB}q#XAEWJW^x&cP3DfFbRIg}4Y&ibS~Ia~eR>-z-Qx3WwFych@-@}V zs&~Ztk}`MPub%e(8I{&b&yA6E(CS3Dnce}UW{i76Yt#BY%lJY%hqE z)E4Z_wD}1RsYn}Oz*=2TR);L@IZAqnjY01tHH?lD-|zQHyt^-vwpxgQM>|raP=J7V z2|nazq?OFSk0{iLHr8XBqHF7TAQJf9*OtldkxY=#YM6qkvx(g(Lk|rp!u@)5acR05 z+>2Qis9L&k(g%75^3P>`J5A|qY&S{Loym6nu}uSGxxtj_^z2cH4*vzqu~y|8Jsy_F zDG5Q1?jS$b%xS2GxTt?E2G9prZ0Cj>; zDv>;z5rRk7a>;(cF~h}BdiBUnSri^Tj>>P}x?^9IE9@|O6jv{*!Nae1uoI`s=jn~u zj4O{MrNTQMKh1${==A8V`PnSj!jH@n+#pjAPxB~8g>wPOA-T>Hfx z^w0y;ieC8#HEN&HG5u|xB&p880iRUOIeao1bM6l$Aeu8iaA1Gk19Q2h?P%wH5B$zi zNqcD@6^>>YmC!=K2@%UHl%Q19lO0SDesFIyLq+pr)MdfurE54_i5D}9RFfJwCV5)) zK?{U3zLd$Rz63Lq&zJ?-`|S@cc{Mn`l>?|vg13dUEpL3k?4YCzCM z89Lcw&@bL5Z_=Y%(1S$!U(1m6y=uCY#)M{WrP_VP!-Ta~BqNZ%X@f zkoBTfRDHNr{VTr-0On5R-x_|Wg}X{6veh(4lcCT>0IvU06kI2$4+(pnm5BgkhUUWE z?4iuSKQJ}jFk6XwXm{KxDH{#M4F>+Ln%wif%Jvtgi8C@E^*4<%trB72c3l+1K>0?f zG@)EQuEUVnq~o&c4kwqOsm>Zn=t-Dja~J;qLz1_520$wtp73 zVkV6gqzVp7V2>vvQ~Tc;@6l`UXh9!lxc zve*?$?3s)Tr5ZI4Cq7hH{q|tzzj)t{DC0}P2UlXV_MhV`FfB#<=014+i$2yDP{Zc7 zFzSe~7HK9oU1*>Q`-O;u7^`9v1|5K78OyiV$E7pZc^rylGTm2 z`KS8m1}0}cTC5h?Rt#V?|267*Kmm-{hb%kx*tl8H8Pedm0Yu^fyofWYqTnTw`2+XG z(Ep(h9yg4}ojJF%ca4Hkqp^6~eEm&J14Sbyh0q+z49&7eWHW&K>E!*8lJj8}O(Hyh zN|N+BgYjWm#aX#W4iT&F)3F!$cU2Y2K2hQuOmTR=iXbM@XV zWX*MKaV9}IH;#2leL9Ubmfvwg%zVvMe1B^l&eng)k{4VTAjk&yDb7(i#T~m*q4dJE zeat;#bSVDKtuhXi^*AP;KM^u%km!dP>Qq>UqFHG%%)wQ(GGh^<7Lv}kOvZP2(b2}C z9=mx3l}AHhJiP8RILsf3)Nt;US>6cmn^i_E@Ln#Gx__FdnfnuYE??I`yX%7lO?W(F zQD&{OSNHJZ=HP*@8kv$DEWTtVl=WL3Ey=+#LvQ~%sx8^Ktc-w-lyqwpjS+EgCb^F& zehrOG<;F#%(jR<$`|GHKqqEw#A9P7CsG~c38W#BrRT#AJKvAMS4G2{vJ9jM1wAquLS3*sreVeBo>&$4cBVrA8AvXO?Dk7Eu{a7q68_WOYYonq}6 z&kYuHDS+vr*abVO$P+ccf?B7!Ns#{z^+6pNycsO-e_M2Jge(0zJvON*#P(c%%jz;J z^;mTOK+9VfSnHATICWPFifJ9FU`4-$GYNJ5n=~4+{p^SwFpPZ&>r{%gS#_DRY% zs5E(`X0pxC|9E4A5prY^rM`0isFGrIFj)@IR~Gg&Q3yqdrjB_ip#QB3LYL*tdm@VT zC0cO$-(jMoUs`yQcXTZdoj&1*(q62Xti^10KxnY9EzXgiGV1pUXi>L$w0R||W1mU| z0^6HHnU$4@pwYZ%;Xh~#JlcXO?C1Nor~ona4ScMiKABF>_m&kvzRj7|EtN8f1k zVAUTU5~<~)q~RQtIMg`BAGF#i7b%4Bx;@gOn+k(PGvo&IUE~GI^N+uxT`hbMJ`oG# z7)%VR+Cbm`n_>@))`1bnzb>t%}6mR0RF&kl( zVBi*Cv4Y(@lj6pL&Rin-^Co3~KjyUdmws4IYE<8#S2*2pfxi!-!{U&1JPxx#o9$AG zv}H%TqEWt8w|rKdy+k^ifcUqPq?@NPW{@ABiwnSR7G;btPM2|}XS8yshpPzInj-G2 z^1&YDTF%RxPEX_d4SK>CuXS9C%$9XE!yZm-8BM>ro=;oZU8M(S84Y1^68zy0vP;5G zHiQksvHuW6VmE{fcmfsGeo^d7c)FqokHA`3BVdfapvDxFyQEC1rrR0clRKZ`Qxj*F zu@mPBUuq_eKqQqzKFv#$D!iSsIZ~Pv1+i>TYYlY({ku?fCK=oI(@aq~0S^Ne!@bTm z1hH_X)Qc)Gvh(zcxuf$f^1H_HJ~tXbh?-qHty<;2LVlTgn)K10JYWn*zgznPaw|<` zmK|zb?D}?1PO;;kL)B?lY=XIq_!7mCz76w(VV}u2*5$M>zV+Wti-1^Q9MIre)73y~9ll>1_nDA`Mb3 zfT`xNnTJZt@CA`JdiJa9zmo`Q(Mle%(w~a$nc%Yzz(YV zT*$lVl?h&adBtc+fGWw8mdc4F84^$kJiVe_P!#!FjajySYt1!RY8@b47*2m%Loj!-UMmn^3{qQMd3c!>xul zN1;itnz(K(4N%_i40N^RCc4=d^NQCz-cl2D>#B4+Np1jRKL3iS?7n90*%+9=>DQwU zRD0D#Tng;VYON)AVio=N&OhsEsGefee+u2Rp|j8jrZS#2>tHr6Ho*FBx$huWhgoQY z{bO{SPQ4$pN`O_BlKyQK%K$yer;Qd+j+RLaYO9kdgLrkz!!?U}APmf_erDqv8y)aE zq51;l3L5A%RI!&-=y^vjA8OTces@hz=ZE$kx3&9F?K-11$6V6`FqVb33=b^n zU!RdHP?wu2er2#`%h6jx;1?jm)tivD2M^a^DVms+MZquFy9OzzffF8Jlj%Hs=j+ZmVqy z%wMQWtQ-b%weQq2v+CjRxIu5XY^GsP7faG((C{NCVbU)fOpjsrRVEOqsyb*YjDVb#$9$Lmvoco*%|mam?jd?rIH7m4<@ zf4(%}deOhyYO()WL(slD8#R{tc?dhxET&q(QHG*=ma;Hhh@!ydl1K%-@nbbbxBOm% zBQ5r%eq@#!p;Kxm6QGTdOD_DJ%@i_XBdN^w{ag_ZD2cPLU5#547P+Q;a0b4DiIvT4 zQNAQfiJo8fNN_$cQ>Q2FY4R^2LwDDY=u8a-axy3ic9@4&J|W^!(e8%_hWvY1{sJC{ zZj!U&XF_?-c=<*z>8;|Gx6W5tY1-+mrtA}ErNcdIpRlPJG<{S8JGvs5YMlse-%cNT z&xX`~N?bp(<02ImMMOpIN}@P-0>A}X7428~pAsOy@Gm1_A?CdOj!U2o7}%OrFY4+i z?yb%KLw@xD{md#mi+tzD&Zjg6|8&dC&&tSf$Uz~G)<2H?xJ+(7P|Xp>if2FQEXrnu z)#v7K#RZJLd`lk}^=yZ<*pkdzn77o|53S{u$|ilwG0X$wg0Uppmg(sJ#)^_un!Kht z^DF=uUdjFnm5qbG;Wnp7$d0zAJn98y6QUq8OeLLWzU-5tN%xwFnx}bZ9?gZ;R9eO7 zBmx>N-sum$JzyWbyhGhhfK%>-KL4BtsrF4Zan?NENA$wRaah_4fLZrrQipB4L7Am# zl%i`-K6$mLXoXrY22M!Hz4KJ%`o55A?%GQqY?E9>%!B17e%6KJq)MuHIUc|`Rtf0SR!#NX+siGYCunWLISy(pA-T9r5spf0q9Hv(4E_rjA^ z=RLA@)ezZ#qA4$&!%@>ynPeodPXEI>$Iy%$Hv&WU(Z4bFM*l@g?&CCQ;j`U;#HTKn z{!szx!WQ&e^|-i6tpiTWs@ukX*6mSsO~f zksGBf8FoIA^da4CRaw!-6CI_*zV|~BC)WUY)7E9rBQoM5sIVbaONm9ys-_i@Bg51v z#Y}#?6trxX?Y@j;9d1_*d?PyTJqk;#6{$vrpYM5cz9q^gu#YxUJ}?3$uT?&vv{aJT zbIW>1+%W!+*RBQ)@BA3Gd7gjPYjibh3@P{A=bprIeLU^1KLKhxiu-#KdVK2cEFX^$ z9emmknsF7&eA3)AJEwumC5uUwl7L^uv~l3(0HqCOohB=2MP0V_Jn?&aVXXW)#}=NW zCKtBfo11;8jO27%Pc0Rk{ptEYl$xxbkvw#jBCwiCun06C3?p0;`~Gt zZHQG^N*qsG0c*Ap&(o`BzwF`WIvz+FoHJk%-%Pk*?*&7D;DMKj2^ zp90H?ycf54lMegu_Ke1~Apc2u7sUJ`l&B3RxJKHt#Ya7jR4?s6${0g?MK}<+0o4)H zY?RSWLQ5H_?jFb@oakAoEgsbsf%)Ixpds*Z`2Ax66GmyQNkL*SxiO=d;Jy@Ks@Q*& z-o)J-enu9zZz{E-?JKhshbJnb;sL<|d><=5%Dx z6rL~4x{VT|sd46oSWU+rM*e+0F3MRNHXo4VA$656*N3U?Q*x{_{@Yn2#Y&0F@JB1hk*}1PebKh9%|x9Mp71i?J-3S7Kb5CtvXkX2gIOm|x*u17STI@6}`K zetQ-@Ui_kZMN)FGUVTq;));EA$s3jR<)iaewI#GEq$U}0W}RWkcL3OAIN;L;TcT)* zLb|O8gMM9e0{0@XGTGwglcLd)K8ujwsWM$_FX5; z`k1S5oHGd};y7v))Zd)3nV7`=4AH6?zwb}+9i|KHgX5 zHx{_{cJUoA)i3jNlH?WCob1Oap0y4)^8wPk4k`kasrug&JU36jK7W@bo$M`9o<|ZM z@SWR6an9J4w5xX|6HeKBE$I0Y1u;})k9xmWYmQ_RaqP_Ax9!*yYw?TwU=A|XD=-|@ zXXSBq7EFHC1eDKm5FNxSJK|LKi{uLObHkm|@`Pca;C~@5d6#_6f0Q@i4PO`9Y2?Gr zB7UeT{oLOYu7hihq!U7qL`?_oGwBYt;w5}z{%=tbAGu(z`IZojXwLO^4QiY zqE%qM8Tbq$snWbF!}%?OtBDzJwok`|N5S)!3Bs$gPlY5#3zCrpi^DJG9y^0LGg0uY zW9P9f!s?~8_K(4HLMzzD{w1;tt4GNHtQEPGwLRZHBudEi)gOQfGiQ{iC+>YRUQ-MsB$ptZN98U(oE;ix8viIikzrsF4RVj({ zSZ)?j9^`-m4vyLHeh%N@l0Fan%94Rw*UGSQ6A{?zjkH62x~`ZzJHr-*P+ZE5!*^y@594?+N zh~ISxD@-^3%JpUezPXj~94VkyK;2QAh^dgPXzCMs6#S*wIjWAnnO(Mm`}H09;=e+m!s7#9_Vn?pNvPXW}`XVho zF*0WU{et_i%V(d({t6_$3N~=?oe2o9wqIC<-OuBF3sbT-W_Ck<>mjR~$1rmOUrp@`^kpJ}8{*!&6 z|M8#f!;69f6?GcMf3gp|hdlV5^3(r+o9_QlUG9IjF6VLt^0;Ewr$PWwr$(CJ>&di&e*nX+qRv|*gE;nUVGPB=W4GSebLo7-J`0j`gxyz z-rr~iu-WB@XOw!Aw&jT2B)k1oys>yCZU7ndf{nHH<$*v$YZTVllw z$Z7K5^?(SQeBzAKQF4%a&1p{g|J5X^h9Dl>T(B&QAqwZJ2s~SSknEwse@=g~#Rtfm z7@%OScFs^`{I6E}powb%U)K5G>8Cy9LN$P2mc;z&rwZhj-IBw`{g-m9%bq!j%yV5% zYdL?=IBKDa7;ja{11kZr*2Hb;64m5ZKeOwsh#S)_D#+K%0S;E%VQca(H99ZB2?pRr ziz1|~b3(F>3MjOTBG)YOT(T;1D9H;VyDUf?vS4!eeC(G0^=?s1q>>{S0~{=g)zc}H z$)$<_N|wZO>8Al<^g?)YqkMpj1u;tcXfXNj zQ~;Q1{#UBW5yjYsCc-u6&m-@lNCl#;21vTF0t(5cvH=O^`G;wgp8q*@F(=+ilW-@u z%F;xrVf?T5P_a-LhedQ4=lEqv;ZW-OMT{BdP-GI$5@nu9VR$5;m)B(etG$rS zDN<@?$#xkf%EY8m(iuic4VgQnM4#T^e>t-hC|W-H<1Sswr1v@U*CTF zYh$A18{@yTaB)HoN2O7KfRdzvfaw44S-1|yb}k-t4xURoKQo*-5`Jbl1!VYec*ou% z`?O`HOsR3kWO*#t={74nm#K`4O2-XFi&#ni#^0&o|I-^}7w5vZwpP^+Fwz9MUH^Po zh$i1NpDF$Zq>R+a&kU`d&E38})_HikIXsnr>NGUi$4kh>e1{k zzG+u3g#34G+*CQ~+uM=uUCYYlCS9|Fu+p>DOx4f-)-0MgRkxHQJu11N_@2L=lv|$+ zsnyv{v|Bx{m}#?rVrb5;vD^^W(6kFg&FaC{I%CAb<3d&xU->=&Scq#(KXvde`YQX0J`C1=!b}sL- zU6d)Y#TM$c4^ESn+)FlEqc@MQ+>XUsyvny)s^xPPZJS$F6K!@rYSXGqzZDyetjE{U zB+mzB4%cNxG8fz5_1gKNRL?KWE@#RuT>%pCq+-szVnP>QHK&swO>8a2d)?U&1sc}2 zEEb*&R3KVsLP@GSS5gyt{$zC`#B* zMpjn#5BH^TBPIqaG8PKl&BN69@3xkXh8}MN5LcuG2gOpAg`SA@&gs~j{vHasiniHZ z&F@%0HhTqLglM4UB&*%)Bx5V)&yv^sevso;Uz~UA*VqYxd`c!sD=z7h;-@Paix=1z z>TbcDvCrq`5Qq?`v@0q4YFVS{TpUvzDY^UBS6`4L(_b_*tM1^RH#-uWe&`g}q3&-r z(RrTdaPav*CKuk>uxYbBis4RPOf8rCE^JH-E8Ey#m@#H#^>}-GJ34v0csPH&?Vopf z5Pf++o$r4fKh>OI^qkty99_PA>~CGLx2TVpx3Jq+$JFfTWOmJ~o8ZoD=5Jo?^agzO_^$zw*={-Am2jkEOw!xbr%AK8 zH4l0HoI{1q>QY}5HlyRjH^n5((F+ocA6mMDAV`^qZ*wg5-|)=s~cTwh{V{vC3P-;vXD1RH@-$YYiYs{@XzzQsZ~& z&3q$-j6wSG{(;|IX1@Sy4{`O#N4Q*#Je4Wh+>$KLE6x=DG7OI^y92v3O6*xKEFk8Y zlZK04i=}hugDy)0f}^(R`_thqDd*9v!o_6k|Jsp zc%e3NATY9>G7K~}ERHfMUYvqOnB*+X_#YJxk0>kt$I{(}Z<%G=D1QCqmg-p?zeuQy2+md{mE;PNbfvS9dZ&fkijmG} zAB{)+NdKiNvF9v?dQt}FbCyY$XklSu7RP(jWDwnlH-I2wczYmTfpRp8$h|6YuTTATZm|z~!0dGzeNg3{zxo2V&xqC!$QQoOEt4Z^-hvH7sW!atC8DDNNVNdld*YSTP5<5B0J>v2O@ zHqXZtgK>EGAx{Yr_yShziDDCU@3P3-A@m4El{ohmxpQ5L=4BDNcJIKi{ybTV_Z0vQ z7Ern8ZLa+IBCoRoXdzRQ!BxLLr*ZqM^mY@&LkmaTe>^rXp+>~_`J_PP^wI}V=U8Ey zII%*{3YFN&oY3Pw^V7CsOa$VHcv_W9u4n) z6~GH+ltvzK_nvg%OlET_#Xb@cJ)AOErnvJ=!C=V`b;*NjAL50kJ)7G;=gplaBpeD| zPD?ZbR*eK89u~kH&hD6)_{Bcn4=1wUZyrpK8T^8Zq&9gdj?+cNYnUeB&NWDB01E}o z+qe;Y5(Z2pL-cjn@f-TtLrPrC0oNjnNo!yfF$>QZF;)qc?_mKz5638uNjf%!ug&BI zouxv3o4-dJb{{`jARHQ*B@VqM*xHZ)5C4PSbVGoPVWzr*D@?q4uyzSSM&yBFkP*1K z#NN4cJW3$yt8qY}<3+pWK^MZelkt&`!7>$|5xF1&C;?FyFwPms4-K$@K(@)!Q3Rsa zQLO;Csfq=SCXE7%YP=E#VaZFR*k=J;2;t;(9R^9|p)Kzq;{{WT#(aC!Oe|C9vBVg7 zy7$VQWT@fEp{>SJ;TA;VC-cA{fGIL5Z3)L#5Fm3-ZtexVUJdfoQkW=+rSK2o&jxF7 z^BP^Du$ZB|LT;br2uVM9BD#z`R0z1|V@Z_oV@vyc)09FzlSG4e82TyP)5IEgqDY)5 z(ne|y<{X^a-SQq18K{KOSIJQxPwWCD2c2I`xJ2GhBjr)o2j}r%ki=f)7&^N|7o<|p zi&F3kM;M{Uh4}vT<0A6J-prBkC0gHPN1s~anhHblREic7h>t1+^zU^r5E@afM+P)= z03im1o{^p#BJ$3OX?U3^a0J}MfN(fvVrj$6|3yJ&=En^*86*D_?KxUtG1K3t@YvSU zx#*qTM2AwUtr#9_>Dbg03Xk$|Ez4ETyf=Tr=4IQCp zfq?~3BD_yu#$$$zuXDgNo*0#P&Iv~8NDYeB&k%lN7|3|R8604XL(Wd6L}CmLnUf)x zN>CKV48k@}?pTo$|IoV|u%*zQS0fc@dINCkHc%rNzCO@J?VeCfyRyps`fA1?;KqAo zVjv$sN?ap_#Vj=Ir>K|NgTwa&MJAUF$TzX&INZIc!Vpq9`)XxzqJgvK|4`+sxr!dvSbt`01;Z;9!F#l{U`a00sdBQeF*f&fSFH4RZ z1Dh{QjX(v2hgYurB4wl|^FDzQQ3>JpGMP1rFyRC>CayG6O>!V4EfTa%GG>wpGDcz< zs_Wc4$`!7$m?8f;#;HK!2#DQnN`wBlc6YN=_fW48BwG{Lg*65*-&?Jm&}=#m=SS0V>E)Qd32o>csoY0VVI%bNvzRX z<;woF01NE|@uZw=spx~c$=hfdDVJGz>LdBHU~h7Ko4A=hdERxy(#-6mz5|?AIQSMs zJ~APkgt98g!2sXS-8PDU!yZi353ISUly*KTLG$p9_oQ?ZX@#erlnn6l9Vm5hPco}9 zy}13EyprhF@*hHk-0Sneza4r9n@H8yMUWqA4Mma|pfkfb=SxV6EcxKl?y0W7XlsDh z3_$|zQW3={t&(JpYK_25R_#NjLGj3BA{-(QJLV}fwa#7pGo?<`?&c6n%12U3pVGm=qH$B1h5mb~_tltYZb_=0WF&WJ+ z*N7v-?T;AZrNz+5ty*D1A`cE@N0=Bzru|N`nTt`leWY3&%r~@T*Y12Wset!TQtnVm zJy6$B{M1PSr=cXVK;fZ?3_|M* zejP#^V3=h(<0l2Xr!x0wWp@yg8~_N`Uywqy55|c7z(Bw79C@~8p}L4?ddTIfdqzM( zeL85;q>7wl_IM9BtFk~)yNAdV3l=$XscaSYA>{>y+#uJlAd~*YeZSm3&Cbkb=||As z+JLziHiCaR?Z=Pw4i=`-1Y z&OVXx*)tGFBf!jsNaj#jNZ;@|ruf@1aGr~FNw*fQ=KBw*+xGdEaWK7Ga0)1`h&D2l zNaVAj0Y5D0yVMns$x=Umwv3v{W;A|`jeMmlr;|X`HPOoJ(=X}2pQK`~PKgh4hr#kiuM7p>V1W1*Ia6Y`2l@km~ zecMb@=`2*U4qcTvSr3;@S_*TII=r24^NUFdGeC(GWsSRz!?tqgT(=BgE?t;seh$8*wF93N{~`7^XuCvm=3 zqA5(RbbMXjmRo4*yGyBhg}|_8?ocm0gm6$TR}pX0JkEQqisXB=F<+aP8zIiG8(fub zepsutSeIkrY*sFxNy2>TT}aNXS(P%DY%dX?o6jT_oxD+M*}{lHeBSQb74@91vgdo3@*2?4aAFcXwkNf` zK2BdxH8o|bR0`mOUql~AmQO0$?cRk)>>BM<-^&Az@h4wb^|*L3Rz(vs&$p+&0Q1C? zb=S=->d@U1JEi=Tc9*8gK1xOn3v8W~(I!z#V#m4O)-gf+PZg_wmv}FV!VYt()i-c0 z^;e#cI&*61tj}kpY*ZU6acIZdxCntPCwWc9y5|SV7dI6m_@8fJ6qmK-7v)9th3%iq zJFaRju~z*k{b`2$0fz^EvnnZF0s}YwO8V~;g9ej&#Zld;Gw)*ZO<2wX3d)uXII$%Z z4dzt){4$ZBdd1#}yz9^hbgQU5YZpZmV-Y6v-T(9lPdQ#52yF;QC_)RfE4@}q_ZL#k zF7O7zZdRYe%8vX$W+TrIM$Vde^MbnJkg~~(v{jcn-j}ZOPb2as8Z+65a?1)HD%Ih{ zWydC*3}LNTsqiwsH>MqzgUon^8Hc>Onf(!k6s)J5vOG#N{BhwAxPKrsu20K`?*F`V)Fxz7Ok^Y~1COzK; zWVbaVw~LR71)sprh*T89ep?63OjSMKC|>-WKKaiStsbSF1rr4GhaL2}@x^4GF8hNv zAgU8B!*DJiHJT2bmcY+<8!O9X17F%#V--V zqm!=XPUlS7wB#PM=!=)FxtWw5JKY`xi&zGC*hxG&;;+LOYM`p+_6x-s3VBu;|CZiG zrEwmns@~yInI8PKusiDb*U3vCzOrloMZ!04#&`bz?#oFiK}EsB00G@F0s(RVU;A=4 zhIZygt~Ta|PL_stw)Q5bHa{NSm6o>hh6K9bO3i8d;xef!bb;O4FnI?;Z~$x*7$qTV zatW;=du~J=PeNw!+WL3*PWUv5anN7>|5%*4;i}2Y}#TUWt*Ui9f83!jH z2TvCd>b3kd{1??P6MfH`!KEy8b59?f5=CP8`Ve$SB0e+!VM*k@_s`GY(I<*&M@HF$ zT(m>DOx)RuymALjp~p3E6>{}O)1q!956D!WDZ5VRS{lqJ_F9 z`wG{)4G6O#J68Pd)D<4N&J#{4nndR}=5)Ga9{F+{@K@~&WDoIN>Et!Cs|({ZiiR|hH!zNyvo5Q^a`P! zN@N0bLTW$$?zgMUh2&NKPa40Sp4L_VuD1{PdIN0t_?~qopB@n?IO67q07ko&&Y~{AbE;+jQx*=q1Uyey%@w4Eu09z zBwqqfguTHXA7~9<=blv{V=kS;v1PDG+mw_>Q3*2VuEQK{kFNNWIn-j z9u6f{Pzw`mAz}_)9n%8|yuAOGQ)%a&fkyO*x2v`(AazI7lSTX%)s?6+LN$pL!6^PL z5Crv&`#cmnbi8tLXJWh`5)0B^ga zZJ*uK(E+YsctnAe0oTww6mfWa9p#fzAP7YW@lba1j*%*2-AT;h0yd$pP)k&kW4DCq zx7br)+2jga;0aJXvKF?`szM<%%$)-ru%j$_fv_@>x|(Teh}a&Lc6;gZ(4O#hVizww zL7ZR}h?j`zx~W9;3=0*%^iW$B1PcF%fJ4%x?ye894zX5D${?Y(_Sy7;JLW1N?+=11 z{DyLba&#y{J^bILqRZaUOY)Q)81es>6y*AtbGSFrqEKmw0*obGXVfX)-CiRTN*}BU z_)iT&*6lZA21u39BKiKhGX4`r#TW>sR3#Iyr;yf0&Wxz&5~<>79Xvx)iR5d{BzVEV zPGq8y0|cIyJ=-N|Y6i~?Ql8Ko&$*e9B$6udA*6IE5RnVsDtx~is3~~vk>Xm6Zt^P| zEG+;!IV&F~2d!*?lmjI~rBtp~E?N*cdekObY+y3@?-@um8bz+B2&>3-uAhkDthoYz z@p`;!QwARiGkd_#+(0(@=APntedV*T5+(2P#*xTE#(KlS)G`s4G-{3%AR%+evC>KzPEO|5Wk{zoaud;kx*f(f&{p-{c4e~{wj)FDFj=iTH$rMg#MF$3XEp4 z;gNPzXDzj%hrN`UIUjaoL#=>n!O*LQ4`e<0_rUxp9zjlBewH9!Upr?0eza!u+!M$O zvW<1l2>-@y4-{b3?eUSoh{Cd^xB`uEZF+97042!wc{&{ut?bGDwL;Wbf|%2j@Y)ha z_xzcbyeg=0-EMZx%B>ikd+`a*VX$RUpmy1k2I7XiYWZM6&yxoa8#vqYSc0w3L(NNS zmvb9Hb90Yy?R+pL6P(A84anW=%?=}tOnp9_{n>EYWl+D>fIQ)I8m1yzKa07ZgmtcOvT%u96RzwVYj{8%Jun!Gm8fP-X?$k{LxOK1njef=tD%37QogJ{PbR==JRw_C{Uol|T?#k@cVBlbHG~LQ6V$-FDYI$u$_9_gbthi)G?59N)b_4i zyvFAjqar_^hRj}E)@Xq-<5$Bo{nD*t4He)l7nB|ynhp9x5r?4sZ|Tc^g7pr$gk^x| zn(;!I&9F_^(rWqOwoP@Xg}WoUR;;(8Th{#B;i?QYg^u0#Lt7rbUA22_BK4L-m*=GV z^snZra&6KRk%jCL7o%He3*f@7ppqiN7HK0{&4YshLXg`u!E>#Z*>N=BzGJH8{rqy; zZ6$>^=Ss@PRL~94<-+$Rj^fI{zMY=^TpTf&c6$T2)f{~q>_UuP>#U;>me_$p!TYJr zd6o8+6=Dl}ckNVe5Fh?L!|>u~w_118$@kLm%plzXuA4vEFIT+Ph8k(rmVfMv!1nsx zRZc3Ol^y~7IuKh+aJZ#^g}zS&!M1Fk;hKTL(5tn1?Cds|n}2C1uZ|3$yAtB*Ur`bq z<;okrTYc{&!_+Hh%Qo?3Bx!qgi*Yb@0JtCM4t`}gN<14u( zv9GLjnu*}?>O|Ci1n&x9pZxl3>66V>5wwS~W73YZbN`+3Jj`Rc&XZ%1E&I|!F*xIV z@>-qqJa{~!fiGAVwN1v<_PiwjjNrlOc<_wxLMx)o|v5n1xq`VSORKQT0nQQ7j%inYSKEUee ztYLX7iEx^4Y8_EwC-ZK5jsVv}!U(%%MpN!FZPZ=1FjYnl|rLb$Rzr-p`B~I{+UsGABd*U__cl_?@t8KaD z>o8uRH1*_>j?m%-QLLxT`edG9{9?->Q-5A`O_|<>*VG+;waqhn`8p)wj)2h^-yX5d z9LQ+snDAs8+AT1_E)ku~52P)vX`PGbA{3s+5ndJi^{DEyQ_s=ooBnQ{iE(P^q+Pm( z9nB|PtuIEl7HdOiu}h8VJ99iLRxM`7Eu71nRYzL2xJ~%P5g^3z23Kp8!q`E*U(wNq z02gPP15f|O@#)d$CePO(-;p@>Z*1tKB~G-^5#zOjm8=Cuz+re-6~E|+7d9;L;B#!7 z0JHA>-_7aGKC`C3gNI|izuz>x9ED9v)|DI`{4*c^mE7vu$k^K1>ld5xiDRXZOrHyQ z8{93L%C=efAq`!DiQZ!Mf21}hM^0VFsdW^K`~g_F5t5XNV~-mAiKdtCYa|g@uDzzy z(0t{?S_==b+n;Vdw>;646^PT44L%s~;QWUPTq=%{o1jDJa)e{ezwej2YDuJCoso4q z(0%%me_)3BvJ1@D5H|QK7c0^Yg4SBPbi?&2OS;%nl#3MyP zTIlm9JU@mDfD`=}t|Bj4#5s5Q-Z8w-#uy$5R@^dAqWWaJL$TdSSOXWqzLc@c;tR#z zVy!2Zz?xW%#PjEN@EQ?q|FDVR4k;sr}rL0Ma`A_|A5S^~KW>llakR@z9cK$4V|O^2Np{CXTfdK*bj z2Yy}!QiFAr+)^MCt2H5YfUgikBv2$+jQXq19IR}t!4&#}xo;dEYdD6<9Gm9{OEF@s z?-WBmi)ajd0u(I4y+XryBJ?T)UOvtj^SM(lAt}rg1ZeO8AFc! zJ~s*cXC!*`MJuCHD2b@hSs6s}D9ix-Q8Qpcq|84<-+#Zn~^CBG>G*N9+HPgDwt3Gr>D&nGIE!y6?aIk zpfHx}=&+3-V2ro!U8fP$xD7!D?1fLBVcUDP$AK2`eZl927p~ulHFdQ8Eu1Hq{B6_` zq*Af@5ADqTCCXssq=&VJ5~D^e4k2_p=lWlsT;tPOtHOPbE3}- zQ@!fpn=^$~v}X&aZ}`X4mbCpJUwvvJ8mR3;0WD%|g8-4vlTmI%?zD)jO*MAM-1Uj5 z=vL=CDZzua0GF2)u7wJRQEfZ?N^gKoYbyI3x@>GY_?$*VF*w4ofT7G(eu3d~phfkv z(0;n6gKEKe2N%qy#78xa#i4sF7c}Xy&~dR^F(1s5D!q@LNuHa0V)yV6xkGOT=eu9| z<~^GnHpY0htOlVrj7gARh{X1^v3h|;HQSIxJ_=|9aS+?D`3OY&f`cmVf`LFj_=h)j z2sP(G&(G%@L3ZTL6`H&|Vr=S6^h!SbHm0+4bu0ue{COXRgTC5b#%*re+E4VqZcY43 z%BNf`s5XQ!^}66m-~9%>(IRupA#HLtRwY(q0(E`{BKkEj*wGn6`BQ-MdF#cpod^g~ z?sp}aZfDbaq|*F6COcz&)4dL(T9cA;lC7bDa^CIXq0JJm9F6Qji2O%2;|8^I_Yf;& z-$xfYl~kB@)brH}E{!q+Q1sJ}-=wRoeZJen0@x>yY39Sa8pm$T`_plXFusCKN>8e; zGzuz3T&%8<+gR*=Fg-^i(X?xv!LAO%hFSFTE+Xy1?VxS;>!!S2*4n7pti+GgifAbn6?B4{6zwY^_>ZXm>-&ibd-w49)scetn%AVk24E+Z+hIkmK`Y z)K0#n6FKkIMhAR~7))DKoRZW{1vZ+w>`kc|(N+s?m=gDWwMv=_ib^&|cxgHay1%L> zgMaGGSGnqb29Q9j!EO%CPj$q^lnr0hOp#Bw6SfR=u2G;T$`vvS;|1B>xs2lArmAj> z9y49zkV1n3Iz@xBz?B7eFDx)MYwOJ5z1VY>)BfwJ0a@McC{iF4JBo#&9NE>bie+8pg42JSoAhO|boIVivnaO0eF>D}Z_ z1N^%}nR>PTx_EkW$epdO_|Btgv^HLuXew8nY4kx?f1m}I=d8qZ*wMpL$Jt>@h)mu( z<{Jk|yuRdH!0&S7s3)xC>{zC45}2}Zj-iHN>uN-Iku0F@PDn1YuklA%u!4Z7pw-BR z*>k?{Yv|~81x$)^bbUXyDb!(0>3suCvIacd+zNW}kQzp`{hc=&dN=u~aCBVf5G+jl zp5N^?dcD;g3Tkjbx%>3|ADzSO*X9NSxc}MRQ-jy=Tnqn=a(avo{`QLMO4ZU|@VX6c z)7vki_wUr0-I!y3D<5!FIUduGyYidLOX%oo)hAuB@cWAfQ9Y9AZ+a1|+a zDveA3v|#OZ@<~ZI!4cLg$U<+VkEJ?zBt zH{DyR`Bdd0`&X3?PxTs^cbeqHTbzG2Z{U7mr9hFx4^QnM?nMiR+I#&6YZ$?0+#WEG z*M(i7CSDJPW|B(&)GLdh^mf=^0WHMcGOn7;I#LC4 zJVEpeY+!qqOLLAUoC@upfqG9+L{5?T4o(mDSko`>Zf zL`a=)7IcBC^FuqF_Y-lZqWCv($|@QzR&IvhsPwapP{zclMcBnh017UUm!NJ(X&fIk zLTeNFL*vWS^Z9u`K#QmEmmfQ_aCUoiRl*(zzJMwEAys(e2tdt5>68lM&>wIB>g3PL z{)oXEv7e!zw&$0;n3=Yxm$$b&y|j`Vaq;Ep;^lvJaO5evKv=l=Nz#Jm;}D?^B}}p< zP)A_=@%e#*>l_MVnigH;Aa29{5_9%~?1l{XBo{J41=k>+cx*7jB)j$9qc64)+EHlD zPT-rL9yH9#75-CZb&NoUyFp?wj0D{XBtse9~c0h&TyAALKiGYs!If;n*S5&RBm zjC+S^?xc6N*z0V;BAAjHTFn>=U-SZG8%TAUVX!GYut;YeieoJ{%Wwxof&+^BFHxAK z49Ou(VZfB25-Ts7(JlN7ZYXRX+metEe>`+=4>Nxr>nHb9d0!ZE^&yd}$PY~L49dKA z7>#g1zWuL_30p%Boc4?zGcO=VSm7$D0(c#AreLbk5UP(y(i_V8gtL?n(Y)To5V{@0 zseKaf70XzH7lZ|Fmcr1d6myg^?==y`EL7t4#-7kws9#Wri$h>XK}?qXPbS}QkZF!w zQ)uFuaM0}J%}GPJFigW#P|f2|RI)PFh`s3|O6)|$KYy1|{&jaEKw|=1OJM(UA@9fq z9J;X3u}V!GG7rPgi6P6CgTfN1qSEu2?>J`nr{69qQe5RzFaLt)-PoxH!Qhz^cdO?-Msgo{V&pdmtmxG_ET z7&D=x(v^>L+;?9G0Jt$jywesOjv2_9WcN!jo96$C(}_;fvP zbyHgvVqLNaL*Mlyx9k#|0!Q3u)ikqQUFZBYyvbILaDGLDo-xgA8@M&IbHf4VJhxi0 z%@y^#;J6Mj4W5!vY713gIG(e@sGaHCW;vY28dMwx+}gd(nhN>lz(oL84He)<(LGLe z5|oRaS8{P4YPrt({Me;a?NKwibX*qZkPXk-NN}HlpPwCN3(l$!ywqBs8oNsm7PMZI z&aS+>kCcn|7ai2d?z|KCW=;FmZOHEjy&}yOaph{oWP0b>P+OmrushVRds2}Ky7^eAc>Kn$BtQU+sG=I9MAs*9L{z7Q=ylr~& zSsWa3=g(#X)&ps+_tMalnp*sX7_1Y<0-XM0G`wj>yUDUx%WK=EtFF1fSC5ki6wf@C zzEsB63p$Vf9cC-|P=D7_vU$5yjE8UC7Lk9o>~Fgtpt z{`B|7KTUjYUK(W|QM7ZI^%Q%X?uu8JDILGoHt4p-kI-~{^p!HMZlk-rkBAXE<6Qva z)tFU7SoFH5&g$F`#+iH=3&7)1&e>*FH74(kq@7K%f2q6(G%M`XP>p6wE9Eaoodam~ zc!$cE2E5VPIrq{`Kbq_`U7b-Qpe}SC$Jqwp<=u@b7M8+)(#Evu8C!kg91nw&Rlcy3 z)G#Nh6GDfkpf488n(Q3*bZRTkzSrTo!{uh0plLurkmHcUT5HV419q^6F+d%HfMxTq z*U=O?Rc4SzOm=A0v`V2CYI}LU*Sz&NgzEcnX*aVQZMASn&z0NV3OSeHOBIuCtx`>! zkBcVYsH3KGG|o}9{DaGC!0nC0u%hkIaff(nmav(lim$8Qg|vB3&3ecXT9W}%=FS9G ze-pcx13j5+%)Xn?DyM-fPK~P5aLgcaa8GwYFDXmC-^*3xqay~b)6?lz#}zmuz`yHp5ykPfYXU8jpvItc~E#=J3tpxm$`Qyxqs=yIG0uq>ddp zGn1fQe3cOow6q&y){nV*zTLi$DdQU~4eN<#E(3wpD(CB*U)0@qA2Xnr+!-lSk?tsq z-ca8z;eKhF*RG#VB31S|?Mg0GJM`HTD|p)wp4fgNwV&0(M2{XFdZ7)3?Q-=B-6V|3 z*TX`K+^JDV8yF$8=0tx>Zo7QUKZFk3B#0c)MbaFSWz$CKgTw>Aa;EL8^xlD{jnU(G_nrqhcxLzF;%`LI1mQBgprL&i+wu zY&1YX9RDNbW?^dNWa|FErQ4F0w)}wbH)Le73bcU$tj0}LfdWsh zv_fF(s4Qdd0TcE2oo8xpxfc7jcwY@Iyp63TRejx#=+2gv5AmFtZXKP4qoK34$1N=1 z?oQ56h^Eg7Kd?-gdUzQ-^zsD+DH0I#q znx9s8zCdif^*LYm%!{W3p%wkmZRb-cCn^8wnVsq(-ug7oGBk{35=!ZHGCb&=@yM%G+T8!M}Or_bs)|lIw!IfWr`+Zx1QwrNSb+xWH1|2i*8@wf}W7HNcyt<6mM=F|arG`1vfK8?wO= zX)wz9T9eodVQhisZO8@cz|hKtlkGPYkvM~qg7LhA_4zvV`M9=)m$d_X7HlUU`ixP6 zkU}Bc?u)s-y_tpAKO==kZf4AePVJEgeGp^Q?>*ft`l3sR`|#L#K6nPoh_~gipThZ+zsTW z;eXEQed7twUoDi@2k(m-M!JK6PIwDx-TSl0AiY$>axe=F(YpSey+k0KEO)?w;}%Pm*2Nci z{bhn3GhdbxW-;v5cc*A77BaP+?~zHHG;&Co1rc?fK@d~Wa##SQ0Ot0>6M{M|f#%>y z1yoQdL(ccI=^Y!u)x7-?r~Z)$^{*fU(-H>y4d+T5vw7trYuKB(bztp}tg|^=;9BdG zH&;Xaq}ck!qZ^xDOsE%V#;^Wj5}kMWe`M7>Zox4pdOPSsx%V7zNXxLf3jFHj2O2J5 z$WZ8?_{EM_cx(Ofrv`J^22||_`|Gx%3t0tcLi>skG#X4At{TJ*N9IvMVjOWi23k?i z4hZ&&=5cjrz_K+ElJF%sp@PeXZmmz6l4|9#))+Q#RTeS0(h`F}NpV1Qc->)z@C`#u zC1HNS)6byVLby!mcn=^C3abf$(Srz zu#|l={Z+`_NPnpI2*&PfV=r%*Q+u6=^*Io8;PSwuRG_Tovx@fsJ~INnaIErlg3I+u zk`2GaZ1wx85gEJ~Z|-yJtsLL@(G8HER&ca`vT7%s7+vtn(I_tNlRNNLJw&_>{akz-t1#p-YXI7nS1XOVu%Lk3z>xorijqw2pw%%$E3 zvAV19V;dcG2-Ay70m5Uw8Zp55A2sT!LhOE5aeVuTZ{j%l5DP*N?!91c>ByV#Tuin(g>=M+KBtJ+8qOSqIzf-Akb z2wkBVB0(6-eGN|fl-G!^qLo%#+J0))>=jnPn)RNyH0bLSoasuqsc2=mo?7w@&Nn|`M|aDnw`>+nsqux!G!FT+YTjq3-;*7~oHH6A;YdOWTg zsY+_vB$1$ajuYvCQ6FG5R~(!5N>k*Est+YI4@1vil>)oXx;kK0X#)LY_qq;o9Et}te!L&)AQNv|L8%|r!wNnQ2-ssQ{I z6}d_>%T9H{qwHV*@IUae-r(_Bz7f(~uOB$BMpUsSymDfI(ms)b6KsO#9`2IVc^0u- zEwZ<@E;H!1S$gjEa@0Qyd7DRrJnxu6=T_GBay2h6Zu6^m3DKu`XRqyB*IV^dwiZ-? zqiU!;g=MvwRe4|EfoBsSl$K@%(M6Dgbh8O^VoT4sOyF33YTZBv9A(vaFIiY$ZU1rw z8(Pk{RgPNTH!#}xI?vcWpJwAcuJ>~+B6e^Eq!9YeT)Qy`HtZ zUkWr1vjui#c53>a8Hzsh%N|0(^<8~uORdYs4B?8fdqse}^E+ga|a46#alXTs*9 zd+YZnKCL1t*}7vh9}RpfcKM?*htK`-R2+O`%gML+wH#k&_QKlP?bz!hR2O###}{{1 z-4@K#>9OFvX#6IHX6C#jUt&_y1J$>ALNQ}C0Re_4Q*=dVu4VdYWj>Y76DaQki*z{{ ziGSjbN&1Yb;47XgeoifaiYjOH$-Gm>p(bF$C>x^!hNF0*v-DaX220&ZtYsp3QFee}`$NKLpL8KSoP)blBY%&FvRiZiK{hF4+(SHeC|MZ|%tKZ9O!4ZK6> ziITQg(F92seS(;W5Wl)Y^1@-g$7lnYk9;y&i-cw(r@5_i+$_DLHl?a;<2b2qGzd0Rxi^Wgz zzrmQQK~YhAUVD=oA4cgKHSQb?qHAW?XXr{R0W!Oyt!FHM5EtoPd*-h@4uaz+RW*u_ zu~RizH`obj(Wq#i*p(+GL;N(wn5r#)?=RUM1bh$)wp@6#m!^`EjgLl20Gi_0^di*JIThR*~9ljF-XQE1G zp$YCAdSMGlud^upEqgeNoC%PKLKIRuy++>JjFJz&fsmedl9xOGzZ$bt`t-!HABS4PrVlmi(b`TYL<316Z$K!a>6R~Q~M;ru+F z{@CAn8}^4}I3J^V8xV)0FwNY5JAU}GB>8}_n9dx7?0z9Y$E|p>_AzFJ-N`x}{l8-D zR)TA>W55An9h{;vgiLZ{7^56u80|p@5W7_#tZEk_AebF7pg8t1r0pqgrX2JDAOZb* zIm^t(MWg+lBK-Jw3=5-@^Y%1?LBMeWMO*PGk1Y|NiFd#g0r44ea6)?#_b~Q2dKvo} zhY@%EHZfcwQezF+LpI$Zz>P3s3^+n|F+z+mL>Z#=G5Qz+3_wB=FNjt|Y9sa0`)vDn z^nnH-VaORWd+q-2+tqgc!CbfB|E|++i+F!u1QR^WgZ`^1ZAt2vnwV6#QvB z3`es>tq24fe)fPdAP{gtL>Bg-p!K#~2ig%p!EwLefZ%9De2? zcl1ddaQe9*Kz9%aP!MAL=z`&p!VBWCs?F|TyO3d2x#C5TfqkVIR3Hpdi$aCS*3gr( zesb~cVD#~dgx35#{ww_a?Ld|&ais0wc)jwRiiG^pK#pjVfAgSF1B2R+Y?4800(U6K zIIO?6WxnQZiM~oY#&Rx*+QUIM>GCBNT#!^)xlhOnXxqarfjUmf3^rwyale;;exZEY zGFi8e2`tEdYAJ*CVGLhkC)_70nERJ#q8WOcvK%y1N3cb$@*^TKlHITlT5d-^Gc@3Woxu&p$Uy zBg{*!65)o(K%Q(J*bwBv2E-k+s(Vim*$VmaLVBbwtP%Lv;AlX|ChXfT8(#Vz@zuew z5NxM23&^j2&-oY20cB#QOF-{+E(XvbT-(LqO9nS=vpNJPYWe03ifUO|{Babpz%{tW4CwWX& zO{=8azeE0ZHdQofxZjR1{s@>b4QQd>6(c)9574<;h=PZlwxdaZ4fU$zx38(7X%B@4 zR+C+Prf(v<u?=%wK=$TF`H}B45$j3Z^vD41LUJ)%-Y&*I z$ut*j7VQ0Hh6ZF{vR;W$jMc_!*G0c;qozC22c2xb$GC*n%xR{2p^KZAm+vyL7CgX$ zbvdkWj;400u?%RHToY|$-5I+R>Y{Ji=gfWIAwGl7#T=PM#E`YUsJ&9n*Uo1ZZ4P33 zx{3;vC|(6T;BQW=Eu8{4xectH-VXdepr+Wo+JZW>mN$uIykXwrZ%@$P;Bc<7@;e_F zOw_khB`AAIzoM9D*`V@=rX$>kyg#s%SIv!|@9Hu~>W ztPXgwo(HFW;*#0m5eb4#rs(mLb+I=Dv_Cs^Gu(#l!Eu2=Zx}xHvLBYN54RH|i^gpK9Jhd{n60Z3oeS7RteeTM@aAE!ao?n^W&Y2V z+H4L3y_-ueQ_{d#Q%}vX-jJcG@x0KZ{ znKtg2_U-Y*Z20t6S=kz#R7azQulw>?5nmG`zyYZhZ0ZOqNqeVk*56jdVS>NqX#vy4 zG%cB#t)`Rbi*jk!N)2i*ZFytw>{^?(X*1V4I95J>Ty7KYdw{F() zvhDW^_YJX;&{=8!YjY*5rY5-;o!V*o ztzI{>H@olIOkuk#7kXP%ze6`N7hgp$@<&mrn#Bi>jY$1jDS*?=m2Km_;|)5b#+%`K zX_&^@MW5qzeBJSe%Y5s?dRuPxn(Tv`;LYT$Gxc$T(8dSWId^z+3A=~+@oS)@l`7#H zW6Af`z~t4vA(MQ8qib?PxQoM~XiGhqb3F%Ui5io-phj_8uHN&J>^Z%XN~3qDSbfxg zSZ(}_$0w=vbK&%HD1(A4trL+C^cyZL@zqo=?HgnR#4gu`PezUBkydo0j zdh7AK0KNo&rsibtE8rBvv}AN6~~aG9@DXpZ+tW z?#a6|z<^V-iSs9o>U_niQy(3P4Q13r&A*PYDzT)OSr>_E(r|?NZZCc@i9xoHD*?7D zd3QCIx>}A2KkaARHTp+CO268Hr9~6qHLRr}>-bu0z?nHQ$Eb=I*%*)mz#3mNg!5o(X@)}_Fs9m=cBj##c zd{ut?qa^?vG_oRj2h=?0EAEG~r+V!1^4C!MvpX_7%}V(Brz0yQn^ktH`;oVvF;&^rd~*fzVXnfcL&eAp(dTfkyW(RvV$72(3)d{8;DVel2~WJyTQ}~| zu4myJ?Hee@&k{7^#KdDW?8zWrVRzZZmu^>osp;aiqE#5Yk*g0ul7KY%L8XhC9u5eVEh*Ix*k zv+_A7$XLQ&6c+n?|N8(km#|Sn%eu7mpPQbFWWT88Nf~2$Kd7`-m zFv4^4dU-0yg$lU*en&x#qS|5{BbvFc)p!M$NyvY+Ug~RWj zgiayul-4|@;tQ;szIWzcmWwRS)LWoV>3ou8Fqev+@Kyrw9+H9>FgKx*RdCarm;A+u zQdQWEPZm{Z0-v($6@`xO72M(}bV`d)c>HZpz-W#gy_r9U*WBJh6bIvPKik^=s>0@$ zokg-nm`^0ZQW){1>-+$o5;%KJ6#t9M#3e(j9ag)qe6S=b6mPAst+I(ajk4?Xk_g#1^mLzBasfu;b_R z)K#Q6{rJP~F(8_TnA5n2jVR!0i|8Ka7*I&x9)n~T4ULV%zH2Hq` z6!GD_#=+Bc?B>Hr^JQ&E0F{YQ7r%o|EVzp7ed9L3xc$|bz020r#Ob=tQHDi5Hz0g- zQrv$Ee6x}Q%TcE%W62`FQ777K$>y$`mYO}@ys&LObj}bF!^j#ap$WaU*{9~YMx+@{ znhDaoArGXg%Rs2C&m>!9;S94H)+XV%$b-k$&|$E2;%-ijNOp9a+obEkm}|S#-)5S{ zXbp1wn@Rmd8g$#5%Wi$3!5e+GyiM8zW{gbnM#}7C3T#LLa4FPqLf}Kw!zuL*rhAiG4)?c|&WuR!35PSOP?+~y?BKU2HueXi%tkw+$)I=n~7&+(Z6T!Xfg=!K_7{5BAcvZN;(AslRXBmoQ(NH<}nn=Um*(R`tpp z;j;A-`w1Y@!QHDSsmU7bR@@hzGQItmMf(|PRsxD0j8@hzt_Jcg(5p7t#5hPaiD9xg z{|XTI%9y*-s>ibpx;K$Y<6zj>;`V>;YT`G`Wp%}y=@ro5ytW@WoK_CoirmzHV}cL+ zck;S~2F*ZSRLSc)x$BUxMJ!gyTZh{y$uw{~foy6H{g|ooaM$s<2id7bD4@B5T5tQi z?euz|LTSNvA~7N=5buzhYnlJ4&Mi7qfp|HO@h0D|qtv{8q`;2M*1&3BeVlm0C_8rl ztD7Bv@gBcP&(_jusb}AmerWVu(aoM3&0$}VwLG4Qe)@n-?5Yi&pH)i==bmM*Sm6!Z zG|&;rTkEp-)RK?B-)ml%K6Vvg+t0rCJK_GVDZ+J67GhG8p}R@*0yTWgnlrVXqiyL<3&AeWWVN+Ju})`tlGRyBTsFb63o71%!=-;dqwz^_CTfq=E6g&F*}DEnqtkH zZZ-SXY|`P?uc1Bn??p_5dlw1N^q0}SzZ^h#mb(JcN%nJd8joApN1!_{MQ{Q66pd{O z+!F!zwK|CJFg8>lB-FYt zC3o)SttuLAxTkHwIDA*P4p$ylV#W5hyV2SkJ=WDc@tb~Oo`!PTe|s7uS4NsoP|tir z^kIW`x(3j)ed$58zq`u`B4+hnZT@sL8|pT+t$n5vr0e#-GXMhAEs zdyoBkF^U(~Tiit~TFr@n*86v0`S4G9x+fR_fISKT0PBB|I6GU|GTJ-Z8Jal$NH-*_ zYdNiPA^b22RyaH3QWRk%#4{Ga?d>OUfN)?gjhS$V>qKS;)s@l4?0r60lWVkrv-|4Q z-Y;9&DHEiMKG7Sww>!K~T&iTZPx(98Yrp(~+er&R_BjLn4`z6rfop?i{KV|(zxD-o z`biFIq(wRQrgShFL3x!Xl>`Gq%Tf-YLIBFkK;)Cf{T z=nJol<^Rr>%)oI# z66-}X*Dd)*!x(YcE50iLIa6Uak)ly$P^IXI_!x1dhjjOsts(4n97ECA%n0C7#CI>9 zny%w`@dIO=Ww+*YH>{0Vu|`#%1v=}mxq2DVX9`jM2J~qXEl~CSu#aq4hr$^G8cBIE z#I$FLQjlO*wsOXS-Eb5A3oqQbwyEp(!N0Y>>Cm&!p${)Q8(?6?a;2H5YXveeX3k;H zr9wkzWD!A`{+^IoR&|jgtGcHWZ?gd#30@rWDE41KB5LC&p zB^;rAtrb?aB-8LTX1yrw7ao`(gzo(2Moz~|I*=xj$+Bc@qak@4G-vc^9-~3woQ7p- zP#!kn-yb1bhI9_?GE+Y{l+aF&=aG2jNL6Tu@l<+$y=WO-@;Ua)D^O}6ZDaLC9+=`3 zlXai)KDzG(97+ZWYV(73L{K0L#P+};Cee8e^)IQuNWr`bv<8C+N4boekVJ~uiN1R)oHM9Nduxm^D?YWnKw#2;0UD&(T;n!S; zp6ChtVb^QC*vll{N4nhwx2)kc8e#CuKZb9oI}BGLFSgC^py(-kiOtD;7C5(?gI=6V z@7_dX|dTXWy6TusrSc1kuRFZGofg=P1DC#$a?Qy-E6l_i9U5csxg}p zzw5$gEVF~8?6AbVRL9vzC-MA@eYOy{H#@unZTPOkuIaMi3!Prr#BGDl5%fxaBhhvJ z+|EU@Tfp=QfFyE;jQ3rqyRSKi?RNFYabZ>#yc@`tceMd~CnMahHC|_*mvD!kM!ldi zre1zDSk=4`YRvwlM&(OgJL8P4)Aw67G(X4%DGeW8U7Lw4v3zF14NPaJtp*seqWR*GBI`p&w# zK_NWM!CwT@B{;DW3l^M)eKhe4O?i5oi{nWrRaCbOW#i%*f1*IOo*K`b=bVT|iWe@` zG^+xjYw5om+)XaBteVLQx%D-7B}i8pL-=;x&Z67R zkvI6Ld{c+cVBE770@-@1fXq{Sl;~vN0(fW51DcHYn{ipo?qAv~|E+})5hIP2^&y## zo;yTMsP9nlmVSOTx!!vQgOgkGWfJEF#Gmj){sOF*xf=>e7g`?KsFTs<@f=!o&wpt* zq9Sxd$qt|EIOwgfdL&7IH@xUW)!d0!_Zbl5DY#hJxGI^{GU^z{;{Qa5S30~TL)?ve zr+IMI1OeU*QJi%U&xj|NZnB)3Jlz+9Xdbsz*n+*zA4RVCs)Dt45j(=m+9_|cjsr#H z&ez-$dR=*mhW^HDlVGlj`5W6be7rIN+XJ1n_KNIHFW^_w{xTpdATfEO1m(&sO!UQ+ zAM19@4#x9TMS_;6Px8%n9Fn_%4kk4gd|;`=`t&C6{^|$EioITyK#lSJA23i+rh`)! z2mrt!%zs0TvoSO>H*j<^asJ;IT9K-j-JU3l&#@W~B|NldO24YNM3Q7s90)4JUcO3_ zsCjLy0Sa@V>99msPxp2jH=D(pW&}#keb%}g-OFD7OJ2s4cZuAlY{e#i(`oVh%3I*H zKD{J5i!Q@2EY4KP!NqyP#Ky%1J`)`1KNPRS!-B{(L3I}t#v}d-0 z6LvV~sMzy}Z9vPt&#SBal^FSlObSd0vX&;dma1#U^!C!gHh=GWYwdC7X{LCNgdq35 zs}zGYIjCBw9=dexdPN93MW;B5^F}nW>P_y4ciR(ERHsKZ0^Y`(9U&nV z61owYoDW!F6gDj2arXj;`O4&+0|Ioo6Co z9kECn)WI08#{H5_kWy52P0>AluDyr~WQd$gc6raoQ0s!WMxK}fA-!u@o9Ec@DhT|> z`(Hm8fvN4(1?DM-PV!bY(UfXySV+p4TA-a_zIzFwyho(xqbTceNF7k|{EG0iZU^>_ zrKi4-Kh5Dnr@mfJq0}G1HJ!aLCFs=Zf{c_+f*dK4LIZU@S3LYg?th-rs2r~+w=9RA zUs!XS`*D9*%;83|{uZv|%x!XJ@xCd4K`2;irWVy8uhCRi*;1tK~44xHynGdlA>+^%&?k z(wHj=D^?0`V9ZLP9hnoo$|3f;#ApJ3ZCP{v-H~N#zdk4;?n^Xgb!IhGBEKP8c2uy1 z>7u57Of2-NU8DF})F`#Mv=_%AHUOhQ>X3-DCyeg4`^QlAP`W|s#XI@yLm&J|ThtxC3TGLmGTfon z!rpN_Wv^#r(Zl5EU87q$rm}AvxFD9Vi)TqEpX~kIo)e z4_&XS{X%F7S8@3VQx&gTUsWqxS{>(?)-Q-LU^{p=&+o)UrkgVA=f}Jlhvcd$-r);s zYX<|1mZ%a4D|*dt-vy8gLPvI6Suy2C;0M@r+gp;yeKBvd!VOX}lBqur9t%J%OK&isjY-1^}o5|1U$HlbNHPi~awGykr#vyESoy&*>VBaC+fj;LH0Y`TPsu&@Wl+@;CdPL1z&$&ENh)_BE}u>4kW7QeVRc>doIimKp^|t9 zk*CrRDQ(LC+`ds1j_=*kq_yR;^+~ECIR6MB-5wvaf**!Ht(mPa*lnH<3 zI=X@v4#P|HDdr!oLi2p%KbcKXK~Z)sxx+%dr21ei)7I^p(xO%d2C7n4rHEgrTa%D2 z7ciq_`*S)jk!>+ORyx^jnCV%rECD$oaj%>vq!c%UG_kOqB>JgaL{y<&I;j-4W7?#B zJtgsaYAE7l%YZNQdz#e)YCIYRGUAwMw{3S229?g#)y$i`I{st@LI&l;O71Eg`e1X_ zmK-6^z|NlQa&#paVA0_3V=OL(_Ac(9YVm#{@A6LCzTfjn!nzArI~ZSpgkau7vhyKI z7VfI!bQpd`BN`tzZ4qNyJaYx;AzMT~?ciu%1klUy(uR8CfQHgV8n)CdZ~>tXC%!_# z?0=@rZWGUam?F`C+S|sMNMeELqs+c6uYyr3`}HxSJ?%5^69;7{wTOBoGW{KEa!I;z z$O<{5zCb)-v63h+SD-_uAV*44kOtOJmcH-g%e}N_A`=>NpGla;QB|*0pfBKDpT>1+ zGe3V_n5Oc=0vNtF1c4%slM?|y3R4wzuqY05odkxiec3ad_+ofnz=x?K67_hPcfP#g z+ZDQ2BwKh%bnOQ>ES1whRk6kWsHoJ;h>`8No-qkzai%1(y>A3n?~NUU4St{$Lxy+H z*AvE;R#f!5~cTT^4=A=t+`Ym4o-z?K|^QEdC=PXRxjfYn7BrD9JiM)2Xzx} zYT0%1`N4cj_;wX-IJuTOE!!AR4{MultvaN8T=zxSC*Gx&xq0XnPcv=raEGsR&b+%h zIY#4SL_YNV`{R0hX!b|?Cp!s|{%?#-elip%C!2pn61C?X*Tm7hkEz=uLP=D@k^%hF zl<};nP3!`Ooj$EaBQ%-~N#?+3dbcdM8{lxESJ&)$*KK9^!H}KN`1u^3 zz_1PH6e%NJX&sb$b%$(Lb#Dr`G;1C!{bHL%7mushrqLsCECQ<6^@#-f%nIxV%-J_D z@ioSB)ATdc8d(vCxDj;Q(Krv~^7Ct=lmBMo=9#i)I|P(#^vq1uV_Wq*6+ zpcuV;orTE!28yqL<~d+|IPz$K@q!;!+TJ(lPtT|Ycc5uok6mnoFwO?=pC&fv#ola* zdiRT*@i}k+5>v0SLd{8OSus$U)a@t>!=FA1B=@o!aVK z8Ni<2f})1~PSJDH(JQ%ii!%<}zHhwSRjq@|s?DJ^Gu z@n-7!X~BES#CF_?VaS-aNN^qE4lA=I#*jdr-R=`NTJ7tixpwViXoCx2GP|Pd|T<&_WQi5c%v{LHhN%361m=(`DO7J6aj@W(*_9 zwrk5G24veIfbfg)o*F0conWVhp*_~Nb{Dl7awh5$;z@J8om8_$6oOqv`-b*c&yOo> zJRbT-cJ?;^Zzrn?Ku6)f#zMlUk>OgelZ1ue)HJ$NQ@LoxN0OqPu4bqDvQ5F!BA3ZdHLkoVkx&)Q`mr`v_LNOl`C96~os#OwV z(^KI#x%BmHTkvY8dL+=HA{jM(=NvT$#i2oTP-2PAN?D73e}+JOlMaG(GdD;W>QOh$ z`oXwfo=bq^9`h|D?#5iWIPde0^HS*`ezrBxC<==@!{B$FW0IQ zeMthtJn|hd_h%*2aKD}h0kO$Id_Wl^$#`C&Aa5W6X&qvpFjiW4W~Y#2veiJ=9UV94 z-Eh6}T%w2`8nDJnJ;t~p3A7lR(Jdi7qwhn3On-ewb{FxY6x;e7^f^D8tAdD+vDgD= zg-G}rH1wS5Q>t}?KMOvcaK;@r1!4)+ys>doCNw3-hW5T7#1Lb*qRq7JhIYX;oSPb@ zjb?vcoab0eS3m)4T^6(QMxnJ)iiEO4RAp;uX|XbO#Y12&ifPJHvMpO1Co`{hi>AC! ztLh!PQ2=^EOSyo*$#zJ-V28ip+i!hJjb-WIF1R0$Ns{-Lx|w+zwbqf zVMaj`!-O)K;1KFdOZEjG#)KLg!GsDgfEgmYfH0#-(%FRx?*F-P?`KK-%)Gc(C8Ntw356oOd;}4`_YluJH+)qcR#L&@yG8VR9!b$f&Kddg5a9v} zRScHu){G8zO#B40Qv7hr>Q%a^T_g5h{rv+}#i?1d5!z#;Z3FUEpe-|xG20L)pEXiy)`>Y%tc6l-DVs|JvP*ctI*!4Ed|axY&da8 z-T~DAZ2#w^VQXvlhoF@lJ9go(XV^>8oX^wOm4D8Sj)*3ee>h+&Ac4?eam@1zt@leC4Y=&)!=9f zX;b{7o&jAPK>V+X1dauBu#pYfExv1AzFQI-{5Oitm6{@I<8%dt1JPu3suOR*gfc-i-p$tnppgH0dHwZ?zn7X(7Q3 zuszC5CYjM?w$a0rS=bFF@{~?^W`3!rnY!XTJl5Y*e*+UW8R7xOf*Quk8nA75(Kiy> z^G}N!yGKo04K^L0@19ZeQcpBbRX!yWZ{Ay@-)OAfMOydqUXDN3nJGSy;xi-JBD*UM z;yAz2f{kW=I>t3nVtz#q#+xZ{JkcPD{oe-_=OWAwBkawivvjfIo|m85Xi0y-8&W*r zXdM=2TEiGAGlMfzKx0jMEn>mqCDTapixQ__cF2Ja&h@y4fbez;+;zaT_tkN(zUrve%I~hwV2qRfUSenQouCh)*Z+Hy0soSD!_iB=IaDybL;A`=A(?< zykT39LpS5b%5g_Knn)Q@kygphkb6ps`T3Xjx(7fKt&|l)q zSaDnJb!$P`%sks&@`iLG~ z)N^n+(?W7}fEuBb-5VWRKT>0`X^sBmznXmzO8LOu3X~TXgydQ!+aYN`zUb>Zgwzt@ ziC3nFQc_#o_EV&3p}el2!EuIqAX5TtqfdqYL;-R>=ew(|z-_{}IIZ~I-H`+DuF;(_ z#opPsjq8Z`ro?{SWxQE&`(Uza=hksA++*o>JccQwAal+b%#Xj8tEOY6*hPxJABg=h z&Uns#a;Yu+XMAe4(=1a~llFGxRG1OfvK=xbA{{dzT}E87Sn#&4Y_z}|RqS80G~7oZ z+Kiv*P%OANs!V~C0ToWHlxJ^EMG_+&++SA~$H9aO_0Pd?B`FydoC)r5;@>6qG}k0C z2U-1forxR?Zcrn4vU}SWW&`{e*78aN+KBwSQW@CRWoHHXy{B`wBLlupPC~Bc;^=Qv zur8GW(oK4+8}iE`rj_ymrBP)c1H0jao&l;Q$KD!s|nD0ikxQc&T9Ft;&1W9zRdfoOb~18SX~F6J@lI@^_^Xbyl$KXM=qorLZ2U zh1bh!Qh<>$ayLd18o{s}F_cCxA`>lUS@m)hsQ+DmkNhX4c&JkQ%*T^smYGJu*3NQPg} zN#4=gvI!ZOaFLTmk_!{xzTUi(4(P|Gn|d#?AQ0l2W0~ztvr8i*7x>Ov-MR=LJ$2kp zIu=i3+rM*}o6)C1Wl}OlC3(WrL>7~sWCa)aztn^g3oK}|+vZmwQ>86z&8K1Eqm@zm z8+WY{J?a>MOxZuu#h7*@4gw}2%~#;t<_M)YQdBEkXar4zqFC`%h*aJH^s%Ipt3o4~ z2aX?FB@idX7)|ODU}H3~%3ZCTSFM`?9OgR(E-8p+)-3N@kIvF(8l>Bq*d%$Xnw$h5Cl%Rdv`tTzQH&Z*jltLT>_$^5AP?fMJt^^%q zHR&dyiN3|Le^S1o!WZq63oizfu%Y{B#XeusW5c>SsdM)jFB{E}isY>XFZN8u9IHY> zH=ZM?k=W(fc!=E%bi!Cx@?y$5E04C4yT4$2$NsZbAYPK+VtYXEPu5yKm9r)VO}}Wx zDv8y~nT+)8&AIZPZv4N@J#{@fe!oCyB>{C%*oTm)N{|3VRiZ>rf%yaL?|5u_x;Jun`Pkj* z7xY}pgj8QIT#gp7MXzraE@wTh<3*QjxgT`EqNLu_4y8;gkz7;g0yvWPk%R<=i<_14 z<#u8LiaKf5o5e7N;wZ6_hrmg&@hK0856f9}+pi+O#SaD;TAV%PgLr^nYLwH-KRs3% zQT2;vRckUB-ljs3-t78Nqxp457b?4)iQ813=E80tnN%!!Ex)y`68(8o=X@r1bHC5p zbK2!7P0Awgnwu6h@WD!|3BvFST(enrdX-4>0ug9aK#$~Q-*T{z zBilSZ7%g0Vu|I^_?0B*wo1z}^#c&q=%w5k0A-*1dto8Z5t2TUOJFfq-Fy}l)ZdQ=$$Egc%Jni`F$t`G|L$Km9>OzTF9hQb8Uj}~FMi8yD%qrtK zSZR_G>12ZkfO{$~A_%exHEc0`HdF7f#4P|lJhquNGY5xhQUo$tL{(3?xH{}O_gGA& z3}RGJ|F{aGd+P-LtS3{<6v`G+v8I#jhAA{9>M;a2183Oc6K9e|b{D^bS|VNDEXoXw zs`o{VqSCsG+K^3-@1^11ZmGdd8)rez_%9XbKjH&K?q`invNmfpF>Lfth-cD0=rDWH z`K!+Xrm9hSnzQNTy23%i-kX3|E1r8~qu{)?N$BCi14-o#+f95!Q<_626{3(Ha=c(1?9R zquWk^GamsIE{jVKomtH1`?T&dh_TSvzj0i@z5b-&L)37R3{Q)jpIh9<=$LHzm_(2< z*-QaSQ8mnHVOEDUt;X{ijuZHl9of7AhHr z`cy2arn?20;NLZGl)DPl$dQrCnJG>_(o2IUi*!+9ukUpqGt~xf9MGz>~f1kf{6StI=_mtj}^?-9a3EID9&H z>p4_dnFHG@6L+PmQrody?h7{BId68qEm$#DWP(zCQqdC)qrUPv1aEous6C<*)&$0B zrkAorcXC=&o|eX(2Dh6@>hg?3d}Zmj5q;T!@a;7`gDzK)Yk%gv#@0sFpqU7IX{3|d zQcn~Ol22lP`kHoqeahF&y$%dvOET}gm;HK1;^|Jh2raiKRalMgQBm~YH?T$9>QwzG zuM$OGa}x}NO-Bu*C1bYI^B@7^gi; z&X+?N6>Zokz$C=yMS)bE&iQwst#IS8hvcUexc*<20)O6T|AC7asoL1>aUlF~!ZFJ9 z_zj(cP`j2?o&nW!&Hagh%FCCa(gz7uqob`$HaBW|9FQax`%yho;zlQVW;(gs+RAum zv7?5W)1ux3)7kyD4)VT%r&qQXZS^q~+~ut&Kz3(S0YQrmsJ;y{k<}re1d~Oh@ezy4 z{Qa=bu*-VIluBInF`!K`{&<(rCr$iPArN9fT{Pz_5Pdh6Q)pZt3V0o4pk(1K?@~Sm zMjFsAm%gHwgn`vhEQ~6t4y)IG2hkA$JNpD{)S^YFq?*D#afE}msxS~>RiS4YWjd8I zKv^G5)6-%95`^qcDm6=E?pCn|*8?DC(I=TiMwW=zbXN%A>n~cGXz^NrIt1-caBNl( zCT(ud%SUO1nW7f;0S}MrBL_l(O`HBODuO{k{2)Z#b7RssFchhSV9?7*$+Ikh7r~oS zWyr%)@<&8f&U^pexjQL#6ZEQV4kbLWHSX+8b2tmOcj(_MPvoun#hnZD__xJ|Pcrwi z72J-~2-zu^i;>O8`gsco8^ak0XT1ncyrdpvL>gG1s3^LY^93A|aZU|~Z$&wL zok^E>^(1uv(0b=LgO@r#`qAc)fe?(zUhu_c8jCAN2=9e{M~m zFQ3>#*F$B=z0FY+R}A%Xq;5;5zi~8v!%ZQ*d7z-)WTe@J8wzJSI(vZYgpbfhLTf9~ zOgl7P!?z=;RnXAc?_M<^O*vj{Hfu?tj9uis@FtG?PVTJn-> z1}>j_21``rz~OfzStkNv^?OX+4Atu{vmP4IwH%`yB*|>kTqZVbnTTS2h2#{Saxjl4 z7p$4qdC>xuXw49sY(IG!Uy6FR!IR@0VpeE5}MfKcPy!DydbWc28da zTT*+i+U)oC_(V@dgCFDVfPOymxZ@b97xK|<{jtr6-txWQ(fkGj*|N`#en;r zlcry0_%=3LPD~|<>xEyvAmxyy#gMk*5(30D$@bnNsIuY2oz0#khZh&QCG!pP)mDZ>fA1s7kJb zeMllG-j9nA6kcA6o;QRypnIXy*de?3^_I~D%h4>cu;ml*`?u*)`l?1wCJR0XzHW3e z10HOMk{!hHen#K6{oqrf3s59%fApReojM3GCV@R{-N$r6Ses&1A9?!vT6zo!dnOJ2 z4I*)y2q+WCf}g;X63d#I7Ks85dBFRmJtfPhidI=Y9|#O{nPXc`943r@vT4|(ytGE8 zjbt7hSf&8BM-Jb&07CQ;-9rJy(O=a89M*C%m^(=@MT{Y}@c8k$OL`K(G=@h2X1prY z*j-@x5U{8q4NEpflt*M%L_Nx4#RF2qZ*#PByDRs=wTDHN`CqqB80Is8GtvQ#2YP8|24~&kE)s#RgU;9!~ma^JIId z;k`v9FHxIH{IVX{?}*7{kY3K79p<2h;Dtb;m>GO7PFA?$^4r{I8!d2%eGwSwX-Argy(AoamD1w)Thmq2d|+%Ic6Gw%ySo0O|a3x!2rhvGb2 zqM3eWR6{`$lny{?Fvo#bcPBZq!v#ZGQ(umaX>h;b>FkbXLp6N6F<@;+J~=0Cj~lS< zPJrCQxFcxOWk{|m;UJk(295nfZpDv_wiP^CNijfc4PwP@p5hmT0Sl<>Wqiv+<5A8l zbsaeoJfL_$2xY*tQA$?xPAgne<>5XrXJ_AS!F{gd5s~2$n|g_#rSOm*Oh}5(dfOI< z|H!@_tbeYYyYM~mx_AP#;7P>bV#v~OwF>_L6lY0YbX-eS@?#hq?uT}1^XAQx)nO6+ z`U%1zIVE7=g^#n7Og6hhks*;yY%DH}_w3p`(>8GyJQe8&f3l$aF2rVI+;(?9S?}m1 z?|5m8mG5<2ziqt@vL}XJ33nRGRuoV*M@+cwnDQRcP~WnKOD;{!1zjqZ?ud(BOf%4r zS(c@xLS5lx)FCEFOO~3nxv&aqi>n^wqv85WbGR#{c9R)sy=P5NS{$vh>9f~X=KN8i}V12 zadeiecRG=Y412+pI}jo`(c%fJ!=Y6t*Ew?e#F;zYVr&8LdsYsp>|q@>X^W|Y2lI*D zXWM62rs5E^ch$gB2ZxGuX~NtyCu@$WSEarh+oZ5$Z7F1n<vknDKvH~e+( z3O2Tf&@37FLw2P(fcPVxITr4hYpw5KN4rDccFZ&qrjiAjdV}8F$k+fhrD%;K7n4VT zOMA@7)YIGO$M-0SQZe3YGZB98*@bbmWRhS!`y`xs7GuPiP2p8M=BU7kG`6Qy&*K&4 z4?kh^eHo`*&C1t%Tp#~5vU2o$!u!}Jt0r}ehpFbGXV{o)WS3zcmiAkr?$x_U;xf6s z@tg0{Id63}aHA*TEQ5-k=^dbpCTELYJ}1i?ZHcwZ&fblWb~T|e>>1qXPv@uLn3{G6 z(;d3`EIZ4TUb)l^XLDbXMtH|7^Ewid1?j!p*F#wN}tM$UHsu#}tBy?-(} zvdtnXQ1 z{?ILipQ5e3$abfW0wgcONODYYcnN=!Ve;@5CE_mvyodoKA;6mf%KSy&2;=*mhy%1L zRB#k$l9PggdhWt*51@et!fu_n_Xm>)LtnWBX!H&pgHfw)%Zoq?v;vDwRw438+4FEg z7*rd9hJ_KnqF>6$bkHPaj~UO*!qzaa0JJ+ksH4npMo*!z{E#H$U_`C{4`b)pB?#0c z>9TFxwr$(CZQHhO+vu|0W!tu^ruXbw%zS$PMBMviW<+$F7z#0J*4^*IW^kEn`yxZz z!i12)p5=7=)Yf$Gg#;KtzlS9G2eC#EI1BF$mlO5k(~=Ire&=I~|DZme8`ZWQ%!~V` zY9-yJj>q_L_Jjf=RzT?_B{=l>q09ka5IzQYk)VL+048oAPvuhLl8&1YLvXw<| ztWt0Q>Aa3^Qy*Ele+2(LMJMf?%ZK+)faGK|wiqtq$$xHd3VOp7Z{DAo{bgS03^5^7 z8(qTmv_1e8s>9GiN**o^lu-Q*xu(XS|8| zjJyCEBC}=)xg3KVBaif!XmYmCbsB1}W{92*sdIl7K$k(#Eu0Qv0}|uV^^AcK_1qQP zv$o7u8@AhY9iSa~i?gMGy~o4wp0iQ~4JUb21y0%W*sx97C8NTIZP@Emku;f{4Fvuo+%e^}=f;IR-O78cCkj{+`;iq( z8I^BU88G&k9$DZlk<64taA+(5Cy;1xD)=d6Rdf(Ckvrw*sBEDndxi_)JTp^vzB={t zr@`OXn>Sl8);qa6djK>i*p#gn3UefANrUgzIO^JWC&{%;Y?(m*SamV^tt&?hVF2dy` zc?Jpuqxh;wMl418)#ekmt`$Z{bQSTRAg?rwAJlV~#HdbOb_7yPawSu!S1Dtq&C+D_ zI_G#s*WrpZiTsX-v%8{Afz%~UAV@RS%h!}EF~BQZmVU!W+MA{>RUf8_I2XJL;BgNe z+W0gO_sHl=1J}c!apNLtFVn`3M8%8HoClZtg2y0gsQezRZb^VJY~J=%wk; zIA<;ehXI3DK3h8~M7&7#w@53aCI0Vq7;P_pYgM8_wK3&bnA$Vz1?9<$j{WC>rj>mn zOK2;#0aB5!2_bwVil?kf?ODM)eS|LJ)GkzXlh+*Fg{M#Vwn*-J#P>Z>rA_6N$KUQ# zO24YLnaG;V%{BPWF~4TBd@(Ulj?m{-)+wqs&5;=y~mCDm|*f708Y)1k6q>qzr&W>_U**shwx(bw3As59N`xAF5MUQFg;ibiOQ%U+E= zi=@EvhuJLYZ1sf6B=zikJq4hAgK)Zz635q1#&R^z>LL^u(QA8C=jx05wS|gb()F}- z{YVPSU)9j6#(G?B#UGj=c>n-iytgwH7w2>fqxo zR2K`@`iO|o!v@sKgh!dQo#b@ryVC>F8w8=~o6hlpz5HuyKT0$)U(A$0xi2P*Ss6q@ zB8Rji>ubhXPADz*e@UK|e>H4%lSxT>sJ86FyHb6^7Nu57nM;ch3P@T0nY~QNW*bvJDf@_G=t=|B4E8L9M@A zh+mr`h5k|+?IRGotpRs_&L6hc415LZ`G)YKS1|JU^+{ykSt5ipk*rmF2mkNSwf-l8 zHQqn?(fMb_|Igva)y0hC|AU`RyF)ev-&J)OHhQgo7ruz6z281Wy$mHYua9xK1deEoWy z>IgN6W>K{n5gbpZLH#Ty5B8&;M^ddp8Af%@!EqqWF$wW+VLEmSfieR+(Hvnl)hXtX1qXlX4&b&?l`kv8pgzpAv{6a*28xQ=c+zfHgq~SZvV8dPPa)JDD|y zR<)#UrBsD5D6P_y-0-y_m2)@|AQW=Z)Qf3QfFxFp^U7ZHrig$T({m zr@bQB;NYv`9gjB1eD0tA*Sb^J@_{K{!wJg|sYhz&Mw=l_(y}@glIgS%<)DfFOMc|y zP3&0lfoN5J9MHwU+aZS&LG%+{dW>iE!#eQCQ1<+HVDx_RElr!59+QWigA^sRq#T)f zk(kS-XLPK3vOu0d*QYR+6AVmS6cHB@w$1!3!gM3mC+U>n!q~=lBiKD4GK z^q2#^UG7KP^~sLYqmpQiYnyRx5Mk`UCqnE9ZaA9H2})$|2Rqp>2Y_3)>EjNEdH!|* zq?KZm3!TvwR0n|N3t=#IDGoLiCYGyi@sWGHqO^jqv$IcAts__Y?Fb%9*v3|#wK2t( zHKQwo`BfZ2JS4{W?rgkT=FR+-oI7de!=0>~4_ST^LNwJ-FPJ})>M!3aS#8gU>p@|p zY@m(sdS@KUt6kGWW%GmBB{#1VcOcM1K?kX-Oe`kJyR_8zK@;VK<{ej-&!Q9iB6lJzfd z#BTOn{2;#l_+OnDhg@%%tWI2&Ch}_pn6dD2-->t#ITDvCWYk(yA8z9JX(sv;x*!IR zH?S8b{|~zVWw$oEj`mM*#>T~IP_sHsU21nXGq{}Y2e2Q1s+Bxob9sQ>H7eUiEp*L^ zr~7Bta=iZDQ5^Sx`nBs8+c&fF!Rv0~<%XTw8Px0lpo4HAX&;n-a-;E2ZvGWn0617W z(CfRI+L_op(L0$sx|%w>IMX{A8e1Ehn>y3GI{hodGh(LK*SEB@bkW!UU)Du6S^Ixt z(|f57g9Fl}ATH1q4g?6qvTc_QklnxLu|O>NPi$aCtt2P)URT{EqSA6WbXCBCAD_)Q z9yy+D*rvRQOEvrhs5NY1A3i1@zzY9L86JnI&0ErjZUCsWV)R_lLYlG_&(|<^fsSVF zJcD5ZFSu=R>{(Zv-X@50VlR2yp^R)0*5Nq6p-_6{0s6lFBjdw`KO~tK%DbTnmne8pX2O&ST*I`W92Dy9JVje?rD8 zwEF*^-G&!0d0Ntt3t_b2q6SdzeJT6Il;yX5TFnd6x$^WxTAcNC& zwkprP11P~cA%1^}g9F-xW^1R+1Zn74D$8H}Ttd)IVI1-k>;a}Nq4oxI z!W*rF-m7;X|DO3)&ZBaUNGcM>GJx^%)%4hj4?V=dbX`7t2z%y+<0ygY9(nzwUA-H% z@Z_`0dbq2|uCa?sJV|vi9FxGLND$Rqo8dN2GwjYGo=t;FmuYGINgMxrmHe~4nSz64 zoXkV&`8QXO=XEW^K89!>omWO_G!rZl z`xIEhbG-Y}_gx5j9Z#ikP+CjFLeT>YSg6J}zT>R6NFo#_MzR!#nAGh7?FwN)-skX_ z62gyez*xCD0hR{c4-H;P2+v+g7cO8FJttzK385biJ3 zTV=bzDPDe!HH&#!;7ehx8B@2d_B6M05wCfnawCC189biH)N7!3b;X9ebu#gx@|*R) zWL8^}uOi?W$(yw|rnyPhs)TQw2zgoVf8mdNC;j1e$^8npMN0RToKDq;GrCr&+#3#` zglZSA6W6$UqTK-1hVb@58;iXkhT?K)&vU1vlhX~q^w_V?_Z2mM{VgKAH>o#J{uut& zSFv|ky7%g}JVtSESvYs(ihRcAANX~Q5*e+TDB-R4zeUIo?Q#aKQEZ^Q1gXd*enbEF z9}Ogz+tkXxB@!Lwf8vn-zY=3?Z)5Xs@?dFi=loA*O0~4@58IIZ=IRNMP?EI8*IMAA zLGBK&*4^ebTej)iHp7WvakPq%*_ukCTx{CU{P}lbC?mUuCtlu2n?&JG`F3HN>!xBg z=vKA6YnPoUpUSALsgEX8-dCzhKmD4@{xw~mQnhx`$TZ)GYpQm2?Z>{pjvOuOU>%NkKAt64vWh5$sy;hmVyD)dZ%couthq4h{8?S8&x3YoYYCU? zECcFyo4tSgGA3f*}aq8Br@pB$9Z zt>DUvKI_Zp^L?X-DX`+A>?-rUZTF1RJ-%>{K%2WuW*f9G{sHyNUf#-rj;hN=rM5f=J_b z;_FNX_faNN|GW0M(d_vLG~aGW3U`tS8%a8+UPrAd4SV1J#%E8wb2a-~3}tf$>MPZH zp8`6y8ukb4E<8VCldn`JyNU&BK)nRF^A=A9mhD*#QZu2GO$fUXuK=py{E$*%yl30f z8CfZ2eUkYMXj3^u!!#1X{!W1JYPn;PVZXM?PtY3K&%*YVjJ?76%#vJp?~Dinr#@$7 zB-&HHXXLXfV@)bUC34`Go!XH&CmA)7mF9?u zOJ|O9Qfyyu^O0O11(QRy3_#9Vs-g+1pk^rT=GgVru4PfdmR^4sre|LRSR+xM1XD7- z=fkpkyAK*oTKRMMKO#OO5-V=^YA0edT+4e`j(3tBF8NeWQi@vUfm4m3UXc~;&FJ=- zlkvlwjHg^g+0n_xK)fUO8Om$MF{E*fXU2AualKcZkV;mSu|OA%0w8q}6)}c_IK4w) z6P%?Yg#qY_Zl_Jr;kJS!NVDMVx|Lweg-K+J4pva|wfy2~|4xH12&$Bj%MQH4oCvWn z0Ojc#`joB~vEc#5SBkKbh}#a}f?`yhSu&8v-ptq01pajm-Lcx1JT(1)ODwpZf)Dp`f^xc^Hegr8;XNN7Z2y0=diY+LbDmSd%fT`ftB6M+v4P{(t zo=8-xA)u^SfqVAEi%yfAr}%M4m8j|FJk;V)g5s&Erl+N{^XJwxa^ta#q%i%6ts!4n zD^Hd|&0bjpGw5$)Eb)x*jOg}?$Iv-qBMiRNj=^NC6M)CD#Bph3-hg_&9xGy44J*Xl zx&x#nmN-AP_fHwkZEI1OrEXeuYE7{?+R)^wWw!_Eug+KF_U%}8J&}_SN`SLUlD0QG zVpgP{*r6-G|7&HT$BaET+DQ>9|IYKM^6!AMJ2&rl8*+xgM;;LHXXo34bUJ`gL|^Uv z^Rp`ZsSl^LmKLzd&d|O8H}1*%C>EZ_d?WB)&nWkU64c%reLlPmyEn=E;oe09Nx{n1 zl{yh4zXRki^HI5u`zc3E@?|p~ydStnL6euOqvtm!27-P5OuN1z9^r8(q?@uH76SZvCBK#wsgfk_e30V= zG;sJK>Z2I}+aZjw^i4_P%F2xQg_{gZwg@!LNIqW>m@-^6%=n%6TAB74hkQ(vl3QB?P~u%C%^5P=ExA=x*1} zrB$Bp-0(Z~Jwx~wwgCG6X@}kTXy88Tf!1D^n!t|e%FC7^^H*G>d-C%tsT2oB;cXn) z^P06Ibclin{f6S@Q!kf8-!OD#=44XBsz4{42O_!e5cCBw#*HZ!FR$y9b!Fj_O?8%} zyy_)5kgy!?LMQgd-&`d%_F;U8uz%*JH#QB%bptX(2-;0C5 zu&5Tud7b0!CbzX6pTUz1a)ND^G1x5Z=NPIAcE-w?vD{=^ollKwWzFg2vpAg8S+eq1 zO=t;_MJy*_7qiNm=7|!%B;Twz#m??a0It}*_2O3a2#8$R*h=H5PBWcR2|PbdD&gi5 zwEE^&pU=)R#KP%HVtx>xLSY*&^bZ`+Jdm>@I2E`RZiDwW8s4HDJy+2Nh6@&CRtQF@ zP@DY1VA4}}2V|Am7v8P_($g%_>bid4KJ}^x#Xsu=DHPg}p7AGzF2#*dKXQ7s3+wYw zF#go+ELT2L$@peW1f;iCj#EcH$K~NeT4cUhg{S)=#k$SOc8Sdf=~pp7>=9V-sM|cicF=5xLhQHgG4Or!9G_y z$pz2TluKKVR9c9Z-L-FdAx;%?DnJtnHw1aiNtA{;UP1HT$6kyW$Ay?t-dd!OQ>7NY zwU`+UXRPBD@j`b1dz{`#dA$#&mNyrRq23TxDd3BAW_=_gyzBA()xX68y5%#a8rl1i z(waCJ91B;&p;6r)PNILL+v=G$7erw|*my#<;Sqx``MqP?`&bNs<)`BjI&A%Q>$0ae z+klb-&&`KvN<2vEz#@{sBk~F2v9a^KNM}M)Us*63je_mebrd>SgR>SB4F~5a<2JfJ zYu@V7{kyZcxn<9))HXUy$ujm?15*6LLBV%C|B!O!a#k)AY3c4F zDPc?Ha~8 zJvnME?%ql~ggXGXn|9mH5CQlzXG#okK+OCtvU z^%!9r@qY1FWOU7@7td>F)pE~c4h=o&Z(3u{9b{bdM>EI|j;FSwMw0PiwQ@~%u3g3=@}<|wx_u}Oi7e${8f7!uW!cxi|6>-TFnSmY z0{ah?DE^bt@BaZMV|zQh|IJDNFlj`~+j)}>=~q7=2wh%WWpX|)m#nrd4|`S3E3cz% zPA%*Fh>1l+2+2Ci0AjwWZt>Qy+am#h^4Kw+Q``k4HQG3- zR!UD&$UNw@)ui!9Z9$iMGh{ziU#-tS!xkrBU^S)(vJ)ko3 zNQYMS6!&xZ(dNazX<74qgod?=>$sX}%5ab?S=!0l`(C{@5Vd-Ic{RVn;7;ydF3ypo zN&osB=+uLdGqGvX%z*piQ=*!*+-bIYnOU)kB-?xrp@1BXonym(-&=P8;M3jj0%e16`nykMLV~u)( zMAAagY+53yG;2Z)UJWf5kvdMgpiK4J!G*(3ZbcKr=fGg&Br|tj!?%D;ugNuB?d-t{ zXTsA_d(JN$oxD?oZr5^-sh&-!36;(=OdK~oT0rqWYSILgzB7S>Z7QDM>b=f1ty+|C z6BXFS)4*|%3RC^67^2ru=dPa$&>X7Pcla_YtuYLl7vf>y*m*BS)if0q3DeEJEt{+s z9M*v#&(`ZZp@%@LurVkp!5q z0uDZ}4`RakE&TJJad)|TxolasKXohCFQ3Qr0gV@Vn%)#?bU^G><=v?Jh^2ip&furN z5wbTp9##;XTIla~G(jR&B23aTg|l;(0I2(dU7a|5`* zu?mkgfN;gMnP%Pu?8JGP>K>=ljE0~`-XObHNr{2A$KN~xqU%HQy|50_nF-#_8qd_h zd#VOp$SiUcoYsFilG~^2MPjS1^Z!EKspo7}t8<@71jP;UYHK7OxJ(ZN?`zGEZs6jQ zNgro$w^(7eJD)stNol}p0E^MQ z@GD;y>?1sd0Z^X>FRBI!4)H1mf+&C>l5Kd%ltpO2+9^Ch$A*v542#kcIn&?L(BH%6 zkx*>PaK!3Uh~kRG<)J2Xjp_eLzfKmk>2sH zzC*@n-O|$?ZdWh2CtFNl5x&o!IQlp`_*#WLP&uRhnRjwfwR|}Pd!TC&51}A+KEVx} zW{dJ<0Sk##jl9W+6!1W!Eka=V`Wf2Zrm&hf-@_28F?i2-Gx*XAZZI^nmzkX&^+g@J z2~#m49}0WGj4(t?0EW^z*D*`)SqAeYE5nqfE;SW z(e-m(kq@&u_svD+i3!6B1Sg#87OMpuV2bKZh5*h3BfKa_;3a@2nua2is};h&d9==} zOt6$7q*e@TB{fGi?S;n z$VZ|9W|Z9-U_zJ54U%kC3JXqRjg>d}tV3(6aW>fNP)vBL0!EV#)aF($SvAz^VFu1SL{ z8EbUYYA>Ip$8tCNmr0<>gkxI+v^X;{`~MD$92dl~TeFTjlr1UD;4xh-3|<&_cJ=9qc&QJTjrbSlK2g2b z_%r-pt=wD$^8MX8@Cm~%-GL@R!RO$_6+}3m7`!M1z)#c?FR2lJ6ZoAc3#U3ptn^vE zO}t#)Sjp;}#f!+Z>4IRCjW{*9Jh3kNgnRLxNA>kV2C z2F9p+K)S|6KC~ipll#;5)E`;L3FNp~F=K#VZsTV%jQ+vV%EciiW?}smL-D5C5i`C$WAE?Jh@vkhuIUmyLr1Zvthru;WzS(-K=vzDRB)3M&>4$F8Z6_ z18~^2iLCJy)O1BjlcvLX(r;1A(!`q!YEYvj+xGco#ZM2KTWdonW!k&hANt-4=KCWP z$twIjvAUhFUZ;WeS&IIhx0c#nS6LypcY6_=lTNn^%xRC$zr@d0l6rwu)D$z>|H^Am zhU^QFozcw>DBWn4s4A^yKWyBWZ}Aob84-=y5Fg)ryt$Di^Zv>*5b-0O!i}^Nm^a!} zz8tU*h8O6E!91s?N?9P_ttvq5IFxZB9kt`@6mw=b@Z3P!X@nCeL?uQIG> z8GXe%ay!PoS3kkcmnXbm3|run^Cbku_TW|dt!kyJa3lPlq5!A~?%!;%!~f&p3Y|8# z8Q`{LANMqrWq_&Ax_U6r@Przjx|9 zADF*iiCoyo2G|o2gxg8x{=?=@m?`WbKt9qf?@HZiau+alhQ_1#bc^&y>s|;^ff*VC z3M>93<^bOA=^8nyb}fqkY~?cQ2hQ0XRUg_F73yKT5m4nDRrqDOD|@y4=M zfZcg1R^#*}XaJ1HTBL>GbQPZdI<>OSU0S!vr)E2>rHr|nf+%-hJr+~U7!{6X-0VW` zGVmlbN^U0hBBnB{SvcCuGH37zjyt1m4;5gHE#_v|Kj~l4G8PL}x{4MOVrQx4A4qQg zA_f-aI;LPa-X$5@(GJ#8RZ?_p=k&glW#90$15tg6D&Xn6 z7rqf1K$6y?*NeE~63)~Qyaaa8W3(@zx3d!%T?2p>@8y0vpx#CaOMZ+$zYI@_gXnqz zUeKRY-M(M6fe{wmohWa z9ySjQz2N~mZel9lzcsnNAb?l;o&9A`)oFtNr!>7_M2;|yWi9h*nuS~g^y=$P{ypHZ1*y;WXUX!TpBJ=k!f`%b`(m-q}LVE z+q-{GU3XKir&~k=QNb{yd*+p$!4mwob5|9SY`G#yK`t8SNa`tT== zm)l&8|ESEEDX(BZs@}G~Keky|dlbjVt#I_%rRA%pcQR(NQU41W!plEgwOmQnUVh5; z_M3peI(xc1tFV4G*K|wj-F07;&F$rw+!Jp8YE|!LO75Xtox#5!VBy}q>H22*tgEjg zem1Ri({&S!wK!pB@5jey0AS-|q-|wUtG0pF{(CHCYSpVYC1>8y){ftdKjpQ&WpzOY z?5w|b(o^qUtM+Kyd_m26ddlFj{ng4b^>&;nz;GIxE^B)-J<4)cT@`3{n_Xta@ptIe zc9C^z5AmAN>cv~NM&~Z_mPZ^<~jcMe6I5Y%`4mpg&cWp6A>ynm!)|N2(k*F`%e4Qw`lD$Qo=)UQ1bG2e2ntf4Y=!PRi$+ROO3>b42Vj%(R=3_ zMXt5(OuJ}%PoDlz+=Y=f{A;RJx0CK*m{{?W`|IkX`B-yHqxQ!mfjwy4#Y zu3fuVJ6E8^sj1f;=8vBR|2y*K!KfuFKSS?)Y?utQUqy@K0`r$`rkrUYP#b&H`3b2_ zHZO1v6Tm=V{{(Ze<&U}=FgBfwPHztV))_nSw{zFXF}fBohPisksS|Fo<_6$`SZz9= z`(3Osf?HVbJFO>M(;Yh%@o=6QzE)I(nRK)T_UwJclg$&bhCqB=T)@?!)4^`1vp29G zm1_?^ahS|Ga&hs;RV&>mRq*Sq>fa#T`2BsvJDdW1&!YG=R2v3o@=*G*FQ-A7*2YT{wgl3J-mZ*TB$XM zN&3+-ewHPkMebG-o4I&$@iuz7jKxn(R%rcs&N&OxA0yY*Nv+;eK(lAt+*rJGMmQGl zrAair)?~#O3T*e!+yl8z&R5HZaBhCLLgn_B$UX{H_lvuxJIncxXmERjCubepUsq+7 zhqFoSa57z@Q}AIHc=?17hqv1(sQz76hHYfNsG^;r7j6wzO_fY!()+=Ra_!9Ny%Sc5 zSbQX&kg14%0zh0T>%j%p%IIn+G^g4MNj{EgxVsFC%LlBH%Gs`i<|<7*efRB~tEVTg zr@H&Bx+*RZ#eV+0&8^ zf>G<`*k765hsX5YzMeP3tciB~U0<)q5B{AV@8|G7f==dvG87KDJ~?7B?1i6WSLmj&fssDHIv3z3#enqunmCcGX#YWn)p`}<5c^HD-1Vnm9=*dCenGK z{H7Z$?i52Dh>fbAD2!<$9nhjy?Gf*iK5w-^93Xf^0wtgepg}^spO;GASYy0~s(Ni$ z1h3AgmB*@p5etL5>UiCS=MPy;t-A;!L`>UvHImxfT_QWc8XZQ0B~S>Q1qEsB$5r$`g(S_uEmsNv%|zPjvI~R; z002-SCoJ8)bcP57RI&|h%#2YKqX>#JIKiTX5MH9N1-0o^)+=aX1b+cT=r#UCkL!<< zWFrlGwAp{yKpQj!*X|qS+3by5n+fSg3w?kIn4u79rpz{{TZ53&!C(OiJx{@{IO$s0 zXZQPJaF)d!-RUcCqj?V}0ACtc;^&RDy%kOMQM#k?KW$QH;ILgfO9^P`ZV{w|^aJ%k z`l2Rj=Jkf!9z=6_hgAoJU;cTZpx6wGQ*s+NG`Q`$@=EGxScrCQ(?EFCrfH~G6Nwz& zD<}N=THZ?QpECrN#z3mgqUMkaSjp2bXbDg6*g<8eBfWq5J`)R_FCGDJC3h5WS9dI9!MmtfT_1j~*>Qxan>-*yLlrMWUy6`s2_ zC?wec{T<-6v6>2GxCU^i#S8|BX8HFX;u#cUuj#7FmxG$>qx8Xy)D*wHfsWl*x`2WE z&qnc$;08PGFb&Xs?pdNMr2pGH+_kK{65_kr6U*n*KCFf1s;qu33=lF@?Ic>idZ2E+ z4@6r?SB_Lh7oi8ZT~uYD{!1?;U}iTJZ!W1m4H zKd)a*>}kGzFKC?_X>GleQMi2O3ef404WOiq{w|{@4PZHZfR)VzO^wHV_*Et%)E1(* zpbbBp^&lwEQd?$J9HTK?<_0j4gxTQRd@7L3blb`4P%hz`KR3+i;dNZYSS}^fM z;Z%zd{uiz7GzO`y@Dtb42wr`8Z@8DW9|9V3yo~P*+xdWW1T04wq1DDyxHt8SQRU1; z9B7`h@s_+0_g@NR=0`s9W&=5?h;wepQFH+!cd>pEv&x>ZGs2& zrCgLx%wOB9tHy#65*sNDAX`l^(IEuuj0sEl9%cxG%{B0X`LEaCj(xeNTZQ?;HDhqg zzA2ZXkI^bXz`#Gr_aNV?rl*jiM{)$}RP3A=F3u)HSCWn0P=z*y3AZ0{FhP-h8B^Aw zX2#J)vcTrXvWN*V>OyA4T^AFq$=4rl;A~~HL)WX{Za2_hr=p zl42=uJYx|!Y_o z0)}B2(5xPU$EEFgsIs>AsQ2M|Wg=wU)&-8KFQfe68qNnS-v)K$h3`cC{E6w+;GP5B z2*WY~$O@^OVhR2ZhygzXbg~x+s*$3t_a(>uq_U_E-p^;`i$VbyE9DQUxQ&pNcD4r{ zEZ`l@Hn2F@Pa_3vLJROIUkP1F1TTo%=$Fp z9iCIXBv#;Jyq>aC81ccw&&`_S-+3jppR0o!Mt)l168D=HYV?F~o}-+eWxPbxd9jTi zm-vAK$sLBG4UZe}0}DH2br9%o2DMw^V?D4&ghI)0{%5V!6-!R=0|bGgE0xfUZP+1T+CWGK-enhzl@+NSWti*p*bmM32Mx3SbGKru9yTvkO9} zY@*u;cHM-vG0~7AAtF@S%xvL7W*e3ewyUd!QqgGV z>NkKUJ7uA+QQs!{us9U_Lw#nh-U|E(DiMCYwy&BCpu~^`$f5@8m@IModNpj}V}e*T z6e4BUaeeh#wXq;3fDtj3&xl((x{V0s?_RN*84x`yLnn9;&5&qN{;eMHdN^Nr?_eGo zg8^@*M@?{$p~Y8NN{Lvj=PXgiP5K)3=tNwCh#1HwfUn24iM!UMZmR0`X~~iYt8Xwk zLRAd_xKYTub2(F}OuS6X#lGCO2qV{@M_}ZFzfOrxBS|`Av;G_~;vI=BkiHw)I+*Cl z&klJE6*Sa^wJ2Nw3i57w&p6-UIG9Y6ujUs+Z^>8Xrr&Sh02pTh4mfx<2#Ts0p^L89a}shOpA*wa!a&QY54DVjLbUC=xdrCP z3seP6}bg9Sd{qdE3 z$`>H+wn!Yc%Tz-iQC+M$u@6)-DHUibppXdy`)x9D`fmSY=|GOPgO;CqKjInVn`Jvu ziu3njx?xhdZT)bp$S0dn_}8sqvr=&LdB@Zj4!q#5>Q_u8Zd&gg-Gt5<^o6Jd};0_b^Q zvN8~^Q>?zEF^P9wdQt;Py?`!pjQ%bK*f?;g=!o{Y)S8q(G`O^#uijA`SM8FxHD0A! zBO4D~h*pL%m%v)4CH(dCbXtJrkxQx&l1aI60(!B81X~{bjAt)Bu7r=FA(M!XQM&YJ zI{cEv)P|3tveHllSqfl&CB@%nM+SBb{Rf2OD%KETMQIDPDzYnaAz{@}39D)R7#36o z$MlGhDI*oc#v!5iJ)6LP(jW_VmLsn0X$xe;iZ90RhuXg^y<68!&t6JWx<7|<341TV z(Z)p=L`vW&ae%GZ63sKg)1*AMXWXU<&zVS#S0t41m#R8CMa3=Jj2^**1*Z(rVbSPV zhLkHzH~6Z~wUfr1%V9o7S|KB3L1akMWt+ej(KKDtoX$#h3u)2QVY?CkEyPt}F%S*X zrhZo`2incsz{HJc&+TA8q#kn>*A&UzU)k2UQILj3K!hoUXCI+^UML0QDFb&N7EJU} zof_unE7G4{1BW3Ec;UrmLPRS27G;C>6j)3yD7ZNU z8_L41auS=goDlM%1RJ5W>SeS!5$OdNwVP+IFViVWrcbXLO&;@3-s#H2Cbwpl5j8WH zI3EJ>(ZXgdyHKA52nIT0>U-AtkvlYrp}SHovGR33vrh^^_B*MNu=44d>4<@hj0q&; zfI+@T5S{xk$DM$QW`BGna*v7&#t;? zc-1em@k(B3sS%$C{Ku!*E~@Fs1?q9oMov3p5h4TQ(_O3*2IJ5A2B$>~E}60p?&-a; ziAV&^%i&n|>s5t;$Vpo_5J64~n$O^C3IQphVV(5k4W!1R1v3^>wbcPq05{Q(e>qb? z@>OdKb(*vc>r+l%8=^xdr?+6T3br3km^e}na3nl3!Ckm1c-rSUik^r||8H!*V0$&c z)|ubP+&)Da2OPO#xO zuYv-vup4)Dn=j+EdCK4#+FrcFom9K z^C>A!VnMNssZWbx=Uy ze5aKf8U4LA6PET!WG(aTFPf%-qAuR6vemf_$A9JAyG5;FwJauyp51>DR0->jbbi!z;1J2Zw| zn-RkdFG5|!!7%#yFVc@B7hp4)#_(U|1XQ=H(qJMT0q+uIUIYTk+%TA0h3}s)r>tK8SH#~D7~^HyM@c4{zlI!VmqpYNxhlN}OP;@IQydoe)=5Cbl8NP^-6WnZwcgvTZKdl8!dx(hyq=wc z!F(9UM&BTjzZ2RmGniIq^X6d!B-iSU4xO+)?Bn=wD~hvK=LR{~0hMIeNte{wlNUK< zj$NlEC_w!6B?v*SB^zi^nI^{5R3kEk#{1F-nnx$BBp-dio#ujxKZDLDIHBfoUgJiA z20*QWQW6V8gRYEcv9=>Qv^4{n&gI@|2N%80T4RIq(3n+wP+`QkH&r6osZvk_D9d<0 z4=(UHQzGW=faTjUV@I4zLx8)qctn#)<4*%f6840QDUp!x${>IiC5jJ2vLEM@NycQ((a1A(o zPIgktXiX^GkO&PDJp#{qTUpJ?I22$P!RifY!f-1hdl`WCmvbn1!ZuWGRSmEt3(c4| z12z2d_^^Tc<$-^FKRAc>`GEa-+?34AH3lu&erp00K^JGM*R4SUDU*DC4JQV`1RjG4 zmfVx=>eQH!WV3wWD(9h*qBC%=O#wTAOzhh6uoSFgqtZb~W0#u6?`riBa621u_m`_rT&xT9icrF9B$i4EgmNL$beV;~i>lSW+%9Eju9 zE#0F{DnZi!z{kXSqiTQIkpFYauM} zW>TzKK#CEQR1qgqhg|*}Ed;6{o{D!u0G!A@GMUPMERnq&;`7aKxDLa{2%9Dvf)g#8 z{VC3r2cX5`+CgYxV#;X>;S0ORTU&Yb#*s`09zhHgl$lc~3U)~mv~D5Q_XeB48kibb{2pY>0$X zz5sNCk&@L>Pc(1AuP`*QBQcM>|hNogA2`j#a^%ic3U&w zAXR_G+@8 zsrwKZx!j^gM_L@rI4q8abdHg9{0x-5KHQa5jBaw3_aj%q0$F|iCYVQl&N^5Rhc19O zB*`qELn>LsUhjo_8VaLKHFRL17ZjW3vwE2h%2F?|Q^cntAe2zkZ5(|wi3CcIKCn{! z(3{^77%JJ9R?<4p3JdZM+Gyb91g_22DKk?0@9=U3-u=G9hOq^)k85UlxOOdTgU*rP zW9ZW{#l>68JHE?drqk}bNl+%P&|y*?biPMPK@~UA!@>NO%ky%|j5h3&Gp9ERS3p~N z^#>goqR^o3l1kM*2N+N&k81*ds#zTD$L`&a2&=3I1iv|klg}al>_bKp+z=SZd5w^( z!IH$!V?9*JbDu^vV_N-Y9ws*<)^vD7q!89iK$JvA@nB-$Ou>s+^ux3Rhw_88C5;7+ zchw&p1v=g&iL=U!!1g?eKNbuOImF7_P)LG$^1oSIgGB0a=L0eJuE^aOmhun6Hz2;w z=?$J+MsEJp9IPBII$#VG&wm__=K4WMJ~z}+lHc*&g_;1A_>Ifw$8dw4Dc-U9(}qk* zhFZWY#HNEeYUo!)DTx!UAVyDCw_%ac-(X;rtLs05h0Mv5@r5SH&dcx&Uc;>cn7b3= zUft^7T*_e_aZX8w(~7*LTU*~wb89~C{2n}nmHv#ef9 znq-2QtMUmUbe=WPD3K|w-0Vn)PJ|EX^S1_&dL*)BsBGVOV7^AFK$W9Av8&o3pe#gH{B#?C+u=dU|bwaUq_PAnX>pHF}&G!9Ze}m2GU(I$oYps-m=gtN>|Sjj7srtM`~9R9PsXPfP|tslMJl`lYl6^DLOv8Y zjKoe!iiQd)*$7=5w(JUn6uk_mJFf2yTYKc4bJ4UPV+oi7b4xCq^&4DH)ec|1j0c+D z2`L`_+$){3S30{4wVA@gq-_fkpqN2Y%X3Bc+D5q&t7>;cQqm+a-ZmL2Cl~mHGf{#_KK3u``kRh+ zp{L~B5xdcE@3AZWmKj0?{+nG5pQdbQNyi8fAzz!K zzd$^YTi!J27G|Bl0GNVa_?^pnJUoj^86T$Qnik#7(TfwpOVBv(jsb6^YX+|P`i8Nk z2VsdcEoSU|%X69su)X+j6d%VO4b@Yc5yRTq>deih;v^gdK44r_;B+?WM9{+xLlCDB zmAcG1V5<~{Z;@$b3*bT0$>6i#|Eht3LDD@Y&gS}9Lukp74rYTZyZ{zsV$hI%2(L4D z4IO1XOD=}rnnU-6z<$v*woQ1pwO;3)6uC=QX8TKw2?=?@Q9vG=$@S0>GCs^Q9&<)h zeB|4|--)L-1TnH>G%e%0w+4rfEUJm= zeeuv-j%OUeQ$9?c6-Yt;n}i3a8)0S^bJOPZ=By{DuC)NMRe0#Wp7*6>#S>P+Jy z6n|jUa4ZV0ul=Gd$HiW4p72sV2Z8b1{d!l4}7b2PncXv4m zXWc={4L72wfIB9>x0C(Hmy&Daj*WJn2^L+_*trS>PJLOW_(pvNw;fXjzZYwn`xSf- zHWTV_zj3~<1DgeRvXAB&-;cdq5aYsxar8Hi!nwRpkjUA*QaDwZmk1>-jxuzInV6_z z=0fyq-$!rDkAU}KzaXXH9A|+2Mr#3`G%_g1Ezmt$tcd8Bl$`X z7_*z}*Malb;b%-99e-Bedy+d+GZ<`s{tJ_>J|Zv<@9D1qa>mRLE-Pbn-i9v>TmO)& z?Y;K;v@kOae22YZ6U0is<+DkBM|f~;_+N+p#?0`Y{HI)PWN~1#tKyj;o0xD0ac(r- zO2Ek-RaGmr79UW|!iZRi$CIlcB_Ekb9_?xi9E7mM$8pm5^HzZN7}{Tm`ExoLcN#L0 zYVS`3Y$(Q?S-vo4(Dc6nc*B}THr-YF(+gn^cYxo%yY2w^;I|{u5`=|u1D^-Ix2>f3 z!E?ByjIHnQO`_2+ps%UO$fhiT+}sd5f#H2CB<@hkbU0>i*^uBZd>e_gbh~+k;e09- zr&fmkrg?DN-t!ZnzNP2Oypg<5z-=0MbVM%Qa%{ob8&;HjvjJLxiE`<)H?4yN_L##9At z{4C@2o!oCn`zHgG4}2e$Q^DVxwF=;@>a1b%f$rk`IPA%=rbT9Bb?0d|-3eg!Crjb% zsd$Pa`HenjH^pN%#Thn92mR!Gg{*0Nr;VSnd(xDdBUu37;K=HQh5Ig8aLXWna5EFM zI`hDX;`3OL1G4NLUQdx#_ptx!-=LkP*Mv`SI`;4DUv%>C059Rgzfq*SkPV?Pd(h-iq%Q;_94i zOXa}Aimg6xTvSMx(W(KQsx~dVIA&DJKh*N?;iw z>6oFE7r#79M6)?56|BCi80@Hz%qJ1CIy;TT(Hy9gO)-e`;O{)G1zTMcc$21NO(;q$ zrtJmqCs7Y|Z7H=$6Z>O8u{sP1oAKBQUPJ$7iH$Mx8Hm;a8j#M@2pP3ze1l|Wk(qbr zI5qXozBP|bnzDMZ&rhiFoj0@Kaxr62+d=|F+mknw6zdgQ;#Mx)HQit^r-Cb0LVX7W zNmwOSr^VbbmD3P=;?w=-i5^t#=)I(5&+oG)FBjoxNy2V#i)99^c)M{U*DKA=;B3{x ziR>XkNWY&(MmRVKzFZL94B_P3ir!LP!F@dVYJzliFaoCBynN8pn8zmKzgsY^owx>% z{-N9jQ2#fJ_@*AlrVjtrSMJfUwI^c#4}h|sLzECnylOWMN>{GasW>*77?I>=EOrC8 zf2OvlrH8QG%HP}E<_?<%@?EL;sL|S6FE_)}Y+9-+Ms%UFJ~WKNh-fOMHHJP`3K}}m z|JK)_&jHxx14-B}G^up$YJ`$K?Ay)XpM6E^La@by@s{!Hc?XeVuW?XdFqPYkeXw4J zR1~VHcPpbPKeeB~Jyoa{{NOjWzsBFavYop`$zI>|0`XH#iaFnP$mq7%9uz7qrU@q$ zI5m*b2Ud{7*TPjK`g-xE0*y*q%sc7B+-!PQCNHN!Q2SD} zu0U5^8V#Lpx`Zk2BprRII=v9a?a!5vfr~R86}CY|-=|I(0M}H6X z62>ZumW%4Ob`{;^H9}?1uI)B zW-4GRSrb4=dd`nvYV6!If<$PMN5#+MZ^7V+#G2RigCUG2?ME1RLNMAM8%=`GlEDl) z&7R{2WF@(v;`~M&T%9PD^__C|ihyTu`mG=d*e<|ctHjd3&)ohQ!7GF&GeXokH~7P} zNAyJ0Ok~kEkeL;zrp0Iho<=%^LO>JaWgi@8ndY@nqu0H-&ruPhsf7oBV{&wl#{3yW zl^ecTD&aXUiwu^3ls0(TP%&9Tj0%D~1Nc^a%2(?fh+vp26$W;;DK6yEm;iHbC9phD zfN^?|J%*q=T~OP{aQz^SkAKfqs{)A~O5znO7-#`qY5Td|%+?JCr)r%`>2ajhgU*-g z4-3^6V(i%!TQutILMGQI!lqbB#*j-?gOF~}M!A5BTARSE>xYFobhw;9z#39*f)B;X z4=)8ezLo`A0=IbSI)#)tF&C8P2jc;(7yo((ZbX;IFPmEGg>LnX3!u6gCQ8LSNcPQT z_9N0FSU}__%xQc>ma-r=7)xB8bkOh+)Z|~Y@Zv;L`vGZ3x^T{_;Gl1YZ00y%bDRC+ zh3(a&T1GKL($$v;@rh{sy(#Q{C*7O?dA_Zu(uSV~ZBr`L0ZdHvQkLol3G z*o`5F)pp|}Rl1Ua!Y2c&Nw5T|b*3VSH$CWIA550Kt!cx@>!m*3@9J`KiKeZ~tK3hu z1wT83uAZ73MGZD(G+g-Lx|UJtnO=4UElVSORWfQx!>MsI>A~R~z*dU;4JuEE*)<;9 zZXLjU0P=Kw^fa#MMy#4fM(@@H1N zElnoGZW2x3T-VZzUS#Bic+P<4(bJn^1he zHUb*C7W4cQ$%nGWwMB}IyS zcrA(wO<$wZs?F#6HKAa8D8kWaEDCAe->K`(4~!!(HdIY+uUfAm^lS)eZnQCyA1 zFx#RILp*-Vz76>E;mpIC(G0rk(J7YzWk+H`P40*1m*vCJCE23q%Puo#MXZ4IXY%$h z_}~jXYdG3CY_PD%7d$FDD?$GqW_cG5HVQqvqed++sucxz!i+ zfFQAt>m>VDXh*2emu>^FR)78nSOH<8RfNOVR1u|$Ww+_`btfTBOv-i{c_u|1@xHw| z*jezTbt92{6k}zTMjCWaDMu~9ri>D681A0CX4+EJ6Nx^PVMX4!(&_Ap+W}P#&if-OC&f4{Whu!veQu98iK{vRTZCDKd?Rbo=p-H;1`G5{O--ftZ_iU% z21&~f0D_kJu>&zm5Qsq!lo;%fg-of2t@C5*YE+r5;FS@4gQ=%7!MH^iiN2kO7qFk5 zJ&NF^f}T}~Qu3JjoxYw92KGr3%Gc`gpZpu9pf4xLa#6xwiO1U&X(uPA4;RVuWq`&F zAZgU8aWnhgTt0ufUFM_Zrt=K>JVsX*+W;(y^x1vV&RQ!H=&m{dn0rEj1V`g)is+s( zEZZLV>NK*1Dy{7Y7=Q{8TGII_mve@U)9#|Nd;jd zL}MhJ2@gM#GeAxvJowI<%H6+CJvPHqER-bVw3q(MzU9@XySsHMSV1YE)rX|J-PSTeK@l7SmZBq_CHX`?PUkM`^8*u4lO zv>LGQ(`@+UXrvp}>Je~#uDm0-`Mm;WEbE+~@YRy^uNU{fp=U?yG7<(6LZ6)sB5#s^ zVA>st8)toOW+SaCgC-bgj~7EM|8?ivcl7<)$417BQ^~7-he&evRwk}LtlCvIPO10IvDvn_A|O~JFtZ6Q}7OKd|Go)3w4o3%ew!n5-r82KK?{|tM!m){ru;nI(>E`={>p|#oYHljN%53-WN}ac!>)1 z*jSc7ak1b!^C~iJx2C-K)}bTUa9|>Qx|APu3Z{D2~mxdY!gcohq zly#Hts$Gw-`Cgdyhk`Hm>C)pd>XA>u0+ank%;=TlaqgvyIgwaG5=;Xj59=D^AYi(Y9dE+uPg2zw)~P zudM9bS_QW!hQ^e+A`Bc7y9V)-f@QGJh2mu`&DYb!+HcGfD=Nl{k3lyNoDUE#Q|XEo zSN`>mZ1_*y#LdJw?hqe|i`a-X(cJ!TgeZeSD64_D1pXRB#(=ZP`p`Np^H7gnasL+R zAyH-9VvE08SNwM+C@5r;FRjBwRq$!f1K2pQuDE&*KQLa)!)<|IWy zq@ty5`ezc_k*%=N1t<{6&!_IMLc!!TLe3C;MYg+pWBf&OIt>M_Pc(+Uwk-5@ny*9k z7{O@az_6_}x_17N4#uvbWxt%``?u6M3RKSzvbcbG{qy0vdg|vrS3r)=Wy71I;4rVt zmBuSXc8P3&Ewpu|YPE)z^jJPglt0}Z1s?BHv`qBrD_nvej~UO2yFop5RJ9ftsLh&o zjnoxG6BS?exELLdq=H^)-F?Vda<04fng^Rw{UcWUiLI@G2ZTOUS+UenSp!ZXUZ4!& z9&{lZAQ|_MZjZtRYR~9WoTMRk$&<#Iz8dfI#0W`UX*lp!?XPqjVpvMtV_L2REHfv8 z*@AEqq9S?=Nnlx(@M-rYB_LS`c`GUI-KO2#l0*I;R#&HbmAiW97bMU{cc+UmjS=^R zOFFfU3)ie>~74TG;8+J9w*!xBWZY!X8wRT5p9U(P3K!t zZs*1kVr8L^*dTHHvo9JQ5PKU=hxV`{x|i3@lw+Fya_pd%MKzcuhyY4EnzE|Npm>TNuzn5*h&DhXeqC<$qi?`cJ{g*3j-B zU-LhV{Ti%)J)_Q-E`QL(!UP=-t1OhQP(bwa#^+WIeThX_VYTsQnXT?rQr*O;BhCb&qFqmrZe&(B zTsl4o;6H!p;3~%1Y{sS)XENotyO@gF@8vVuWf-{$?=HSkfj2VNc;^bdGas%tr2D2?m=8zGTq|u=0LqYxfMz?UVJTPO$ETx`sTzHAw5S>1A z(OhOOErf_f6aVTRct=4XIzNNvE23DYDifwV7y+2*r_dF}CabdGCN*!NpZ2@{9mX$0 zT*n|_PED=O@Bxpnj$3NZ=Vn-VuyFDHru!Z{>HB?oxV&3)V2f*oi8$sIPGSbTgwzwr z6zZ8r**nlwJp3ghe0+{u0it+_E0xw0cQ}xEkmfNQDUci8Opuq8Ti#Rm)Vl@MOkpi} z37X0bLW@xX-LMbf0*Vd=D4~QV(;lVTM^|s6rBsK4jR=Dbte-`KoYXJkOO|C)0xt^) zzm-_HR%+q3#r>Mym!3@kMDQ!2~@?1O>KfCYDazB+-`BJZ4k zzF2bAtaS!EzR4B)g};w`{Q5-1IWMINr<>D6)Ycfu+~UJ-u`9$=@d&KqO9ow{mTnDl z8HT1?VnL(Pm(5n4%jM6~AkH8h4}rPxzlI@jSu74-&v!aLa9R|H0C`0hCb&^-I*2(= z-iGIa|LVuDLK6C@q-@lbbB`t^T}f7vOdWFK!TUrC*4DJ;cme@<=&OJhHFo&eMFuXe zRl%bw&AYX*OGU%Oqs4@PbiE#afnbIz^p|xW-`baB<*uO&H`l@;kdVla3V!N1UMH0i z^h!pxsUtC!Sn2>}QHA1Ej9e?40Mq``wcsyBVESA0>xSzpxNt@I!|5V$zPO#l;oh_1 zAm}z}0l~9jAjrHS@W!=X9;n!euF4*OXm6==t%Ea;(ja@5i@A}_rA`unt=cR=!);u3 zTr=Fod5((MIvx-QN=$lOnMt2kt&l-r9YW*&)mOPM0Y+-F$cA;{0M@tS-`k9^#apxH z@e`rl4E`RqPGn&A|8 zjTB?wA_Sn9UF+1lD>0Wzz)pu1dbK}GpFXx;!6e-Y)Te&>r|D?Yow3r@Xv}$xOi_eQ zpmmYyK&{HN)b$_fy^qP@dW$b&_Q=|J9&xXB+$ZkSS)!>hqPP~CEJT_X)d3XZpuTlk z7Q`rLjukJ!62y%fZR<-z44(Sqod>1R{;V9dn5$VB_vr)F-{-MFWh}B>V^lqx_7CzL z*Vf_&Pr!urf|njNqgCl|znugH+E@c@VjmB7crP3)bEO|;G9@%noNMY@LM>DXEGbTEv&>=xKs7E7F%z61P?}YTo+|} z=-@OnW zfjB(F#}cOgg(Hyq1r1YI1$L?PGUG`Q1q5nqGY8R;A9il~)|ny7JSj*rTM0rLm6@he zJ^EP&)VwL+N_;?&2t{Pp?0$2FCqhGg9OF-s5uKO{J!t0b>@8YkCn9O@yrZ{GWd90?n3sLcbkoU?i@DN8#irhLm8Owamr#)9IW zB|S@Zhf_1p(u* zUv-mj$CH@Yo;2eZ(r1f|FZR~Mb^}-ahTig? zYNSv7=+5&QCmCl{(0M>2n~LO9E^N$!v!#@kEL|Wy zwFSVQU?3y}!CdkpSQml_xj-uxxr!3_WAn+(9;c)8rIe98tVDy)ak)YzOuvzMI0K0~ zCel(3N%=)JqNCXWv?OvfBt;kyU`s>Xp3R@!3@F`3Bg|5&{I0&;w8jPVQ=tp6fyC3K*wW_(|8RtH08 zaa#A*3faiNDiy2Vu1jUX!jb~v{hELyp+YeeFmnJ2{La=-oQ$nEqW#FaxY zRenU9uCXgv<1YiMd=>a(hk_(lVcf$UTsg3*KY$^3jSg;_reG+0(@r;J`73g=r=C#> z+~Dq^?6oHfn-t=+T+x?2JBzNsv z8mR{l6t4vtJGASF-P3?u3iwRu%^D4#$+Cj9dDs5;W*Q@u_b+o8uG?T>1wk(!d^{uB z4MqVsj|ATJiEmur$^suzoovaFU`nTv%U(SqfD}fJk4odGjs1~K#I#JG?Fg!xN1d!J z)Cg8|KAcJmO&SfqOMU(Z5si*?GasZXKFm07aMjA$r-?+k-e0q!BN7adkPR~j6Ndf3 z-aB9UdJG)+XD_}rjeObAUs_T(WY8LRXLALm)(g+m8T_CBmQMRJyVR!tOQ%iH0RR~O z$4~SB3&8*PEFaO3w%?LK>b+7&=?0g=3*)?&4X9_px!dgLU?ao2CWI&^+i3QZY3!IO zHI?0eztLWyPb$ooOfV3GAnMT6z5A$)3Qa<_VG}Lm9%08uP$frv1x)AG4M*{T{<_-o4;pJX@EXWaZ@QWoed67E0kstbGG{y(GJm zqLt6lLs?wuRJviqwq>KCSvX1khVec4yY`^A=hXAZ6We!iOmkurZ4~~L={wfk%Mg`| zo11wrtVd{efYRXh3GJ0zax=O6kd+H874=cePSJJa-U~X#5LbB1lzS+y zrJf}%ZHvFU<5z}BbB#h{yfd*;rgrV>bIQRbUR>M2)vi|lb}=?;vp>-lgnNE1L3jO3TdrEb_H=Uhy&&zy0$Q#jp+ z<&GYm+Eqp!eckTpgPoN*^{Xn;N70LlY4|KfB;9`oHU*_eMS*KTuzSC+RAy`2c>#!4Dz@ zE!LwOLzE`P&#@NgN{yE&HYf&I?ux`S8D$g8D1xdx*dt3GBZGIR67VoAldUsgW85lt zmxZ9!qV_s~nsW|lYd1@phO+zPnznI*K6SQ$jc6~cubtvLtzDom?}iYC)zfgKH3}6@ zJQZ~I1r2(@%)UA(Maf(|C4@Ay@Po6rJdD*a+<1R6He4c&A{fHYqZ=c7?{3%F-S7BC z^3a&oQ9uui1gP1wJg26JUMs72i?+~u6rUL$tZIV>FVrWkOe zBZ5N=9uTQ&S1X64d8JAltDH;W>bCj${kQ2;0e%Cbn^&Stxe_SI81Q$ceUAv^&z_p3 z!$ZF`y9zOnsG?faZxkMFh@74|ha#Xro%Dy;04l^6kN@dk(_qTFO|PDl`{wz^T!h`g zba{4{&d`{#27Gk-$L8&v7Ewkju#!agTX(c<=OdC^BG48KN8GGcN1bV!wo_nySGj2{ zzs3*>!FR?Kj#R5_h6T2<_`>u%I zEB7Hx(_ZXbm8MVs7*;&)#J<_jazBo)k?%g#Up~?~e9^lG-@F#f zD}-}~1s@y`k!`#<{<+_Z+XMKcuHILp%vLsfygF8(3d^0GbW+yE?xrn^3}wp>xxHY~ zF&25&%qA%@rdN7~WhXL@cP782zsJ|d$@o{?xT0swZfFo842oIe{m1r$nsX@T`W)kW zkEIbBw*`ZEbuzQ$q##c~b703v>JK{CxGYD_ZUj?9#tKEXo+1Ho?x$;Dq67kV^o0ikQFK*T_`7DO_lmR;Sw^U1LF+ zNx_{%h|B@-0G^v<=Hd>kV?=-wVd!S&CdKg#hz9dRD)xyW0Rg&BALzHV;4ovMx>ILX zjPyc{AEZmNL@YEp!bfpZg{9`Gynm7eHPJ+__?dfQE|U!k-KWXFOMKxF1U^Ot(<46{ z5FXf#cK`^RZR#vqS!aCTr~lM_hz!-$;Aj>ojsI#qv3woa|5JMiU+z*@8Y%{vv$56R zNZ0$gBaQgFpTlS;6Lf8uKWwyn>s&qpcbc+2R6&EH2nHLiWFm5e;Xc8QMR^GtQOA(R zqZsT+gtT$&=LXVADrLKE9T2P|4jZw}nX|RwX0-)E#%WW0D~=%G3~Ym-vzgALX;eX^ zHYinV5T=#|OVd8qJLnmlQap5C9!V&74uHv$6VQ?D!A zqF6uN1$gjE_+J;{hrb z{)7AvP?45)T(ftE+01?`zUt0^ki!~7EkFhUXcPP2#N$q;&JO=1 z6Q=*h{0#TE^HFO`-)CL_#8P52HM3rqtoQBvV(i*h`;v*f&0a|k3$Y*(MM0@V3P?@4 zzwe$mfCNBDyBytGq~Cgr#QuTrfiHE{ByHAQlNf7C`dr5L?W7cAZ}n8SqET&Mo=Lln zDw@<+zEel@)bt-(`Zp~V^3w}`!_aT-R4;qo+T4)F&*bf>#z14MR{?swm*90RMOD+4 zn(mQ0axX(B{S;3+HK|ll+cp1}x3>rC0cFLWKh(gCi2T*Vv)XK&hWGCpDU~1uAg-gk zk*XO`PbYW*7~PxXFK_}8_EN4*mQm!1xiT|=+`V2vc*~Ns{`KO^l}RIBwQ$^u#DLOz z(BC$rsg3(9fx9#7V|{vJ{UlqDn$2%^$(u9k9Vnm;uzf^XFKh|I1snTL2dhZD#`=Q` z@bLbt(@Wl1q))|6C>yqox#k`+n$a#{d)Gl7RA<-*;}a7TRA;WR)ss%OA*ULwlxhCp zAf@W$!>cML`6`VGR(yHOM05L~%=llK)6AMHR<)JDU1ssB#6fG6>NvX`I+-%Tqz**Y z0=m*l0!CfHD%Ktl(6~6OLXIU=!J{##KGZlSRDfRk3{6&xLTu375<7@s2u9}sNto19 zqViqgvyg9xBs#eDM4b(y69rB};d#RzuOC|YruyF?^=>7-%$Y+jkiG)GoV{nBv_#f% zQkOBgzTdC(PxgJ?-ahGG-rniq>)=ESF!zQg`TU-Efk&1b?52cTJwHeMC%0u(FN#8Y zKC^mF3G4cmsl7VNa&i#9{noiyskR6D&ICANd+RT(*mZ$bM|gsCb+D+XvIe@PH6HV| zn#??jrcQqWWwSUPS+Ev<+sj#3kBi%BL{iR)dqJ?f&Q!JX2sw2oOzG08Y9w(#!|O@k zC|eM#SyQ4%8fD<4LDR*9($e;Alt!bIE$ND@X=argM#w*7DJ(vX0(pXUyDGOMrEm?n zkE&1|l#3ya<^vRbZV%B0;3Z%oVmIba(cH-k4emO z2?F#`K<-KB5~-T7&!wGDDp{gZ|`Rx){WTRqm~o!Xe8R33PB2VYHr1G=uDpZfv% zXiZ7iEKar5cM_j!)c7zho_h}+3_`hD(H!U{&?zYP9VuG?TA~CD@&hdPhngrT2mt9O zj8fS9$&wR9BcBOTr_5&DWLtvs3+2{vuWtYbAFb#CD@p~F{=DKX;j`oSdUk)GI{w_g zo(^?weS+85?pd16a>@D0OW)b=?d!digW(R z%S}4ooacw{hpnO1TNIB<40A*QK1}ofCim3zs}z8WXv@(_p6QskaOHOajj22o&I*XE zqWB*WTe3Y1E#02*pl3jxfCgd!h>$v|a0gPDGqsYtjpCnU$^YrzR!(0u{H>)KJ%3f( zhd_MK0pJW?18-J8_e-RJtL;)F5ehBkO8K|F!PT3TbGun|-z&2ZP5ExeM0yn!Q8-4H z{0B>>Ei=Zf=wdl#Xq>?)L|WScQP2gZD0`X^oX42-XCXkz(8xjt3o*<{dV2}TTm0B{ z1C9<~LCAY#Nz#DeyH0L8dcmAjNiz^=_Q`2P5q9WpTP*C&b3Iu$x6o?Cc3Q*=bu>`l z#YF$YqPbVdt$e0n%V3U?lP?MOepP_<4h?h^mLElO-*S#8%@Ud{@E$=GA$XDo!~o-b zz>z)4?kYzV29S#-vJt4Y{Z%8=qVG&PzARz)rd}g9XM34u6}=u6s~keZ9?4u@P0vXN zth_p#Jf|ko5S7{B-oB`_NC&}CaiGbHi+(uGzh2Ng%~CJ{jmU3u*Z3>?LUf}9oy!ir zdy-V6vUHNLv(w~kqE52*)N>J8^0?3gGQ*yBOLyb;4X;y;x_9%d7!N z14Z|_~O6_Y|DL4l~m#hM8L$8v4D}25OSI zdSIRdxc&r?39EojJvtOS4vA3f;Nlt$C!Bbq`@*1G)R-vgC1>wRq{x_WtdvLyugq z*kQq}OIS^;yva<(4@tep1Q=EvIA(Q1b7c{klCp-5jn5yjUImpXk?$KtB6|F&{npy~wU^HBj1?1igLO#S3$f z1XfnV5PWA?U4qjTETMEeQPDcbC<4QNUSrMOWo+o{2n5&fzz_+|jkux@f=7wvS`i5( zY8k9dy>i0Qkxgo=2^xVI0&kbURqCa7Cp8}?xb{we2a+4QqIOZF0R(w|oi9QBsNybi zlr{67&oOs~bOCl`yNIAMXYP}!U#TVZ>j{`IhsN7QfR{2xU zkDjN1Y47y4Prbd#ecRSjd?jhWPk>jCci@ zhs8geba42kU=M1YEo%&m9<;0u4?j zw?Gj@p-qU_u$#i~OcoWt0Ur{r%!UZG9hwTj!w|~Hli3Xbo|v?eYSQtG$Cr@r8WBuBxn+RQi~#5}yq$uaNM#FM|3omrRowYYRq+xAVnF?P4w&Mr@NsV~Xa| zHxUL8!YD!0<`nXUaUWr!plhw@3A&mLuIRl84uF*0rWq!eBSoVx(phAbDj5-%sHNyc z!+w4^gK|a@swT)J`dM6pLHmMe{$V*Y^9{EHh(Mp)8cU@Ch!8HcZ~!B*&GIiaK91%{ zP3T|no(s2+)beH7t*&|_v>0=~`lRiVnt5|l9j8|~yO}<8n!12!u@fk7E0(duH?FYd zN7-k0Y9`4Q1Ij8#_kBX{Y+*8K!}z!&qL$3pgP01=7nYTUQ;*9;!{*jVQN^TKu06Cp z9M@A*AOwuy0o{+H{vGF~kOQWy%VHgP0w{-(l?}@edlJG&<6*$()vuvFG60Blk|1YeuX~@h6&F_~}->0S!0w}$R@f*r}@UoYB?$R8m zomp??T^vv{^$gMGt3#Alxi|JXR~y63uS@wxyK(aqlH=DD(*xsoW%ia}a^0S3n_Mmr z){3Ll@y?(?g@`**a-w$DD>#mw|_rw(tNT6>6~sco$65aCEL) zQd+hcZbL9;n0^`uL=KXGCL_2p)CrHlBsmh4G4oh1GNxFy-7;K`W#VNdA8bA8tNlF* zQM&)H(=r0|++Z!aB~Pou6st$+d)H$WmNp44Sut@E ztU_^JCelf>fTW6}qtXBL)L0*OH)FRR?sD@&={Lx5gDJYNjsyE8(EKD2y3+-J^HMav zmf3ue%(I0#@sb+K;#nmBcJX)Z{%9xmym&?t2jGYgE9~dD-R!KUt+W7vd9vB?ZYZ| z+CAn^Ub)TNk!an7 zG?h2`!3@3w3$9uz?n(TOXfzkA+>%XB!r9?U6?>kzaW3(}j5c=|AZ1z3O#g1~tD}WD zh8QpDFoM0Lo*5TO_%#?#N>WZ;o1ehiF{PKT(XC`R>qT>!kOPe1Jx?2c@uk51SwsLs zkE4Vr5sY+$((N8FP;qpv#)=Xd{pta(*qfO--6fah4A6*h6(2L zzgH*Dvr#-s4unP8$1Bd3UoapnDtmUtQDh4gVtp-S{p`&LD8wr?yrTE9@!rlO|GY$Q zZ_rK4*c1yppSh88LRNP!<9xn)-Dbx{*>|G$ulPGneSCi{gbz=dCIj~dpn8`UjhWg_ zhqETNF9zxrErasB4R|+jIa$m#hBJLDPN87He$11h=Tb9|3~qlGvGv(ieMSG%BBU85 zf;P>^ku>V55~G_7vWRM9&03G<1wQXM$S2>=i;_6YX0-lm@pnZ-3CQ(qYp#rMnt0`P ze~$;__V7}s8(Za$|0T1AbmYflDhLF+i(vdElG|>DEsfhl4{k`K@DM>^gC9q3!&4kV zG7QZ>ncJvqZPhr7R(!uTbyPu%nMW;?GFY(njfbvjSwEP17G(G2bcinybmrL7FKlfL z#m&CgZ)5lXQ122DU#tw?lul6ALaAu{99~WzOA}q#ks&k*(;vshz0;VqqM2!q;xR)L zC!5ZpEtVFN3>K6i*eJTq$m>@dTxPf!4~r)Jc$n`>b$_TKM@+uwG?PrfM^YzqgBiPU z?xJ{zvDF|&K;dEXz>UgH53g;%ko+#G?ErdL%1a%Tx3$8rhwTEWwhJ_Qv0PE0OoqgK zr4ZYdbY}@bu_gHjgJSh~z5#{cPl6e~-1t%vC$Y#*OtU+9{vmf<aXjCGz?(ls0%dwIfz4jS61IW)gTiKuX% z!GQyL;OTk)NV71c1(5eGkn(>*scwp&=R66(`t=OLIrkUwjfTbB?V|W8IO7{HeFU^q z_jFqjdc&LU<1u2~5|>)--4I}+I&v^*S1ZZym0$7vAz6ohV1}PFbc~}x{g2AmjOB)3 zK&-j%E^Jo2?#)%mG_AJsKE@Kh-x+aaL)v@h#Y}@9J zZQHhOr(@em$LQEb$LS z$w^VB+Dm>WrCyvr67x{@nfu9(J1U&_%txlSVj7HaU~T?$nbIfLScctu9}TaWduU#4 zOLGP9BGB4;4cVGuislr;z3vB(pK(vs&KB8&u8_STTL+3u`tRqQVx}`CE-pS*^%gws z>pAPZNY70MM-ME#a)-E*uY>D_Ku_jUZ>^P1G6(0cljrHBQL*3b&B*F8$r9nk6E$S1 zUl?@{XUon&M=x*oiO}PiF}O)w z9)^C+6`7_MMlMzb160I}t4>E94GeGbY9*JNk}uZpr-z1Et0anGjFEEC=X^Pj{=<%D zZLugZIN?&_`o?wsbB!fLHJO^0TQDKr?;36PJL?8gqL7^j2ruLImy{AK68=2SKB|KU zmh(E^R>iWbr;60^7?UQAN-cX!U3WcHvwms)+vVGMJ9eIVJR1j1eIp3kkSzyj5JLkl zJ0BjokgS8qwd_D$$f;N_sd^n|Q^s58sKpRYie%ByH;)&Oex{|_hzo635*L*ET$MNg z5K3-Snk(R6av1!rzU`4$vA&if7daXTXro#zhxT0g(V8ynkd(LI>2ta;btu>`uxY-9 z>VJ!Z7ES@nptt)IZP&Dm6`g`Zqg;Xx0x1(U~_H1fvJG{yZB zzv?q#4PDkHY)pn2=Tw&1!89x(B+~@A(g7WoZeIaCqW5vOc^H{X zT+kRl%t$N0&Goa=BkQb}WY%F$3x5mqzldwL%In}*P4oOZ{G2!9{t z;d_cyq|{WT;0n$VlU#xr_2$^;2_z_P@{;e=4;x3)taAp4-ySATq+x;RsZZ`1-7IOP ztnFf~_hBnzc8~rQtT5O~4k9>34E8n6hOzM98AI~Q=kt13Y!R=np+?|K7&4|xIRLd& zM3r=P?&|68=;iEv=H+#|MJWJ4!a$tpAi^sJ?OVm|!4W1qc-oDz}D<=B8%G z94I#U^noK4Qdf`Qn)pgFwV6)$^8e3){Z8_y-r!2;;12ubNgZeWmN(PV+Snlq-iX6PL z9tf~@gyskqI;khGW0;65mq-@Nfj{7G&UOTr@k^Lxk~443Z?p)hTird~1D*fcUO0Qd zuaq6X+uZTs8yheAbj|)t`nWSkSOIO{STvTi=n@Ni z-v=b9i>2wAQ%^m{>N(r_x|^`f`+K6fA{Qx;S(m!*)5Ndgq7H0)5}QZ8xLGTaMW*@? zqu<+EIs8DXByT}`9h687vf&=S?POKumBRLip1B#n{++~*GjjdOa4Bd12lu6Upe4{X ztx1)WE1_>))Ac)F%pu^-z;602(6me-EMF6L&6b&!lD`1UHc>)uLR>FsaRun>Y~R+? zcD5o}DQG`UfgL*ap;AMZC8MN)ETzFVPu1T<=MKX1qnZMj0+E(+rUzAkZ`1iQF*z#I z8=w!M$yyhS_48@047lEv_>f|fw@x3)?N=F4YrRG43h%RD+qA!6tQPE61j%wkwrp&l z?t(3vr3MUjKbJxmtQs#ZeU()xkX>v){i~^uWH~k580NX3V*ZhuAEvi@Jl+|ppg!OC z$V+0{y_2W$xk>6_ySZ{x$!~GnkC#KG@l^%3%oL`z?CgilGAGslPvYba-H3~~0(MV}l z(L6G@aG)~%;UJawm|Uq7e@HJxAEKa}oGdY4<9bItU}H|J_nu4|#+U|FRkc@=oIvgN zoa|i+@2xCoV}YebGaDw3<5UaZWZS-xZkp$UU-+sLWSp~v*$%m&9lHu!zwh2O_GG^1 zy4jOO6%Xl?y+?Tfee1~Z3EkbiF!AF8?U@40V|$U`oO(%^I?K6-E>igsahdc2z4t;y z@h0FRYQVE-6p!i>X;R_ajf_Fk_Z4Jc-MVzF`J5^ogFtqob&7t`YMV}n+!4$oJo3u$ z-&n0kUa;yWcc7SFYxJZX9YB4a5j~|_jDF6Tam^2!!4Oyh>sFM_=LNMqj~@?En+1Oh z1}hB|Iz%m`aHF7p1YnWB(^=fyUnZi|*^TJZ(>!x%G#1jv?Qx$X+9Jn9T_>Hhu@qdI z5u|T84nIv5o$MF$*SG;UCwQ=EuE-mR(URlS_vYF93b*~x+7Z;?Bo-;s={eb==))87 z=($Q4S&WSErgf0gqvhmIpLz%DzNvo8?j30Es82Vdr2F%h`L- z^C*JqT-kvgh@5@V34)GQx={7h;W$fRg49R5_wV16oAbxfy%*Y!Z`Wvdi8(z3sWa=@ zW8vR9P)LlWyhWh$nwqHoVp7?4A0ALX1|7QDT=VD{~|H@Tn zG?e}m{`GsV-&F=r;!$f{eH;m30?$l`lvylt{0&8kY7GuoalL3gs}4|`nGHc5_r%zCM?T`6F^gOPmaSY2=R6#J5R za?HIZ>nBRs_-z?7PGa7yM<)oS4n15O!6rj28&8PtBS|f5^8nOH43;m@c;;{Q!x#1PSc6e4b3*py$F**ENjhI9@X@eZN6}(w4#$dwTU7aN;;X_r%N9Y?|`K7 z*265qEyIcBu${o##vts}{$6`tRzv4=2$Y?`>jGPu(sk4|g4j+fVvA*pnE*zttq5 z4JWus*qGu!Tyc|VK#_j$fxPYhjc5Xv(}HF7d2#a*4p(l=d6Gu)=pL}YY?Zbh+{`L2 zPTCbfC;vM%;VfSqvs1k4R8vjuv8tGOw*^EA)Ut_En!yak?Vbds<@upLc^=LU!E?|_ z6E0WVaU)3C2O;=jW1O11ZLHcv+W3Wo27efpX+DBbLZkWb^WW&jS2{1wu3iED{EjV< z`)-k6pO$##jsmrf7drLn{)+CI7ddms@_ilxU8vkIL!nC>g?e##0F*d>fZd#7GV+HM zt~J)pcwLwy5!^-*Q)vf-+`Q`_^B&)GG?uXG)bad)b(wAPhbwZJ)juzK;6e^M^`!QZ zyg2ba`bR$p)&B(JIKa>*B#e1b)@)?MNHB=izGRK$m`}%e=D?Vx^aYz6oih#J!?}?< z(;8xoHG>pw?=iU)#7aM`A*w?($sL`ym9M)kiKl2O^Ga%_o+Df<--TJ=99mT`dR_#-E&cU0%bf9>ScO z-2bdI#?_u_sqp3e*7na?v=Ilv`DcVgd2MTd}dwY3uck$RmnDx)(3a*PvOG|n+KC0KhK!>JbXRBg_H&Q@2A;kU-He+ z`*`!wA01hx-}XIqk}XC}M8Z#t9(;<$aS+lAa|aWOageCWG7TY&>fb#YSuJviywM!W z?8)`q8zs){U>^y4B(D#fezk*5)Pq3rDZAHP+s*vL76FiJ!WAO6GjC_8N$prF)Y4cwZR4acp>Gz5>1W~b875b^L;{4tzXTas~?Y>K*&^} z{A?UwOtDC+@esFravDN&I!}}#9P^Pl41<-{BsEP7Pr4IDZYA~3OD32*7>``%Cr?U- z%4%HBBR)wmPpZ|#mV_OS9C4l`Cm@zV{jHWTmNaaW34sGP7{Mz6lP+;Pax6HAfN-PL z^cjwtrHEU|MGRXMQ79|~UuF6%9Z77CLgxge>F<=C_c-F7H69AtCrQDi{Uu>2zd+oL zv?6Ul63kWhd)_flvNOMwZ9uN0Unwk^AuUSEQJn^2H6%1a5|H-63=kp>o}t>w3q(V`)(!&Y#U z`8S8UKnS0ANG&g9sO#%U3tr#zAe1i=N5`ua5KrE>p!i0Y_=i)~-8A*Cmc?=JBtc?H zOIZ+2jX`IDJ-`sJfa>0^v7H3xgC0r;I-bgZ_cI*;lSe!+DR_Mip3F8KdZ_bc;N^Z| zu z^IKC79TMVA3Gp9Swlk}Z_-J__cnvUIjDZb|Yj6TMLX;j}|8sNV zht!aU?&9r3TA-w;1PACwm@=J3)&7m)XbM%_pN2GIC6PgaB8BRY5HjMFP^`pE)4#d> z{hfrn{8%1@iv9RIG1GNd>(8FaczsPAYYN{gB2;T_8-jEk=MaZSG=>Ap&E0PU4P8zE z#G_qahH}i4@JVbSQF7$-d5ogij@xQZ5vRNLX!Q%#s6S>4_PJ09rhlZAG6mGDhvS5W zv|c*fq+t2nN@iHdUi-dfjOIv5%Jk^ZDFt4=SL+7h`Sd|Y8&Z4Z$edqTk5QXQ&hphB_=2D2;0F^szOlD6Z;Ph%IGQr}AWriG#bfmBmlNF6 zqWg`HO=u4$bm2~b=K9x{G*|+|RZ{ZTwpKs!bWMZ{bw+;!=j%@J*9Iw1wO7WGFeB&* zj&S>-2aL~Nygh@p^`QX$@+{gDlVFC35dyJ-rSQOzcR*d?od#W*uB~Z-GQr#)9Q{&0 zt#PSiA-#F|K5eW~Zt*K9%d~AmhN9Ydwt~}y@z~u!KeLCosK6snlcv3(*8_@b*n4|# z_t(0kzTqGVUtoz#iju6nL={VQoRNf@aPWI#l&q3Fo@lsUGylof`X33mVlZM5t5u;Y zM`M@%ZbubN8(BdB2ekHhHO_bf8*dmSiNtlU6ljEWVOAE(Yf*nd=H9VeYew!|9a9#O z{0_V=vd3GVKfiu=wjTV3HF3@NOsC9Jt<%U&KrM#3D)hp1=r6;CH{e&vss>CCaZ?6J zV<9uVw{PtJN}9m0<$DEzA@R*BjPAVE%LiIE-VfHSTsLbsZJ>HtCMGYVLgSfpUyIM` zUgw~5-*a?{14Sc~pm=jtW8HA;4;wq%n4EZfki_P*c82|-7dNNZW-q3S#aTPdZ>RX?YMv$4$yBflZE3`#~iv{b;nW?&4en;Y>Qns81YR0= zpK96yCOZtZIs(qf@LXdEu744~KuL{TwU z_KtZO`EnP*){5DwtpkKk+h7FP=HMC&Q20VMiAl7$75h3sQNf$;V*bks>RI}E7skxt zNUWG&AjPSd=pE%MfN8$JDPh=z^W+}R_~}Urv+DY$>jyB#!l zf2;UE%mis}4Fqimq~`S@)523G(MhhP4HDXwEg=^DfLeTf zPnGn5S1o(7t;4bIqGdx2(_QZO{3FVWkWM%0w8Ec)vW87VG4Odz!mMC>TdXnX)Q zP6@ZRC|mz^GQ*2!C?3#?hDFOjmatm6X#ehwBn4Sm?-dr4MH^|_nE=~30-w_mmsV-{ z)$RziHb??JLz~@Y`A-Hq}652JGa4Q$oE=wtFuF#LBC%uyTF>}P!BvoYE7eD9D;l{g!%b>@)kEa z&z0$o5p+IeXQ5x7wEQf%0@(M(#5!PvadFq~FEh%8Zj$Bd#z}bWz6aFiavbU#Dti95 z3~SNO*c#ap-5$GGH~PX3>`sBH`$D@lsO_7I*I|gG;&V}U5jG)_Bf{$tL_|~& zR9>%WplzsRXt{TA;f*8Qiz@NLtf@Tdvii(ZvVnh2Q1Il4DztI_6nu!fL0kBqvWoDm ziRAxd?UD`iqNlQy=Y~@+{vn@+K_q%lX2B8qwxgFQ+o$A*Ru@f@VsTy%aeA`9K|Bg8 zlg#DiUw#C5*BGc=H$n-IjfyZD~Cl!?^=pI4{gY zsD|21fkf=i2ma9{y=!!)XfT9XR!A|KH1PH9F(D%t9DvLec)Y*w$8(%hbZRkv^mO;7 zHhoW^K;5;h?n{BV?b&=sL4#bzmC8g9)lM1vI=u`#rmlS5Xmq~)r~teKYq|bk+xCRhMoLWWvAs~PnaOy~vg-_j(ECQmSwxkr5TWfW zzEVa8*-!IoCyi9H>AFDMI|K)f1f%U8AboqfHqOM*$^x58pLf8CS1C!2t%N58=rW zVKZUDd#}5)ag}B~pIk?QuHFuUxs&8|be-(6#noF!8~%1X$Um6Al~Xx{pUgscEZfHw z`7iCm{I{SZw_)guh)gOpdWPlk1aAzTaf-TQ2K&8)A1!YWseCj{dHHWd_b^-#UR26qEq zscNE}N}l46fByenvBm2Z_$YpNG;P1H|NYLUgOQ2#H=xA%fA&nxVuWA=nBc*0JjLwP zko|Xc(rD;0l*#1Y{4wqh9W#ua7AFO-w{<{0>dQG!+OwpeL((Jf7iaQ0(3Vbhgp~f0 zt%!n)CcZb^B7X|V@-6%?XN%$kWfr%v0Kf?;03h(c-GTl8p3~mR)Xd4u)WFor zU)tYvK`zwKJOd#%DjP<0%CoK3wcYOaE!!wKw>IhxeMcxVCdh(wZr@o!( zgp`W57OmZTlEm>nhwYbX_*Ca7viRrF1#%TUw|cZfv3u>&BbU+r6uhBH0>;cbry4vr#DIu=Zux|^%M5{6INd;M{8mZ>iWH(A5GnSI(e#}FV5fu z=f|q!Ff9fJ*WhGY&`zexit4l2tyTH)qUD=~6a*;Gz)+>E+_(ZSIBt$nLMtEX~{vP~~2wJh4lRw4rYS zk-#Z*{GJcwC3$mx5yxO?lw9>AtWt z?M61Q*B@8q5j{O0t78!#KJPbB7T=ux{;u6lr(an`XQWREt2$u*z3W712c$_wPAnZ@ zJQFIf2BHWT`dC6M)6Sy;O?u)0)otI_P$B=+Jqda0*HWVfN%YwDJycnBSXtN>^b zkw{6PfHlhBNyQe)Eq**Iz^b(tFy)eNsn{>gw1OJQXR_0LA+Cd(EMxe2rwYx}zZm(V z8-d*eZo#5rczPi|A7Lvrc`^~gZ|^Y+^kdI>A;K!xu52Q7FSrxY0>Z2ygV@2-nZO-? z(h;rA&v~Lba`)TnaB6mRd-jjKU^BnJ*G`TM&4+p9VO~D}oaH&-;FaAJLK{uH^VlDR z8z2DBpBlodg44Jd^I_Zgl2>U;O@vuKT6%IBEGOZB?c`|M9x?)W zN!hTBn4NK?+=I5oh)YASMAq?eqI&!-gygZ`*fg&3G`}bWACk>3ZrlifapY8dNqT^| zO!p!jC6raN0YfizwDTeaO-34l`4j}bLuu&tI+dfZC(2q6Luhw|=}Ov3oPH-50}>YM zcMJQS3rGb5qc}0_#urC{5$Xx!{QN~XJQ*~(>2Vj%$u z7qIOFr0*Hgb1T>MC)03hvf-;*@hjGw;9SN8dW&rU!lYtn!Z9 z7gv9Ui)#dmGcQegNn-Fan_%sr5sPU1Dl|%)p+aUfvQsB;Xg{({k3v+2V__Mc8tEX* zTU2HE6S!T~%$9+Cx*Gl?=w7E8VL)G#Yc#mt{`1aaYSM^%L4ph_zMj2u8CJfA z8;e1OZ40&@2t+#-*0oxY7bT^gTr_=RN4XiccBcG;FU3G;fWHzm%ZXD#L`_gqMFxOp zW*C3$7mx7PPq^?Kjx#d1?nx~puLw2U$IUV0!^`EVg7DxcqHDzx+#LI|= zn`Fm3Wn5;yEJ78#RuB~$k-Dxz+Bp~G8&S13&}AEl*PBJInCBAfyg{iT3NloiD4``w za#2VHiv?LBlovjBvkCb?&0G@(SAw0n5~K-`0PQTix)il;+Xf-nT323qpCiN)jMr+; zBV#V08UR6z#a4lGzq^a@q@Hq{#@oFg_nR#-c}LL6S;DJhvK?(IJFWQ0xVk#5z^2#G zTqutUQM??6g=bp>x{z$4Y>^IRGX;MpQwSouqk*41B!w7=nD>#l`=bTiZb3pe2Df1S znAb_;i*K|DjN79~_+}tKK~}Hu8&A-0G>=$G%yj$=e)4elWY59hf*$go#8u}x0W1l1 zpe;6#hwVnixgczB3(+Ig!g4VjL%I}qL0RD=D_Qw0MjUhX+?_BUzOZjSMl-ss&bqRy z-}hWiR*d<9oc)oMwxiB&(RA^rnE5sE;5pcOPkfKVak!`*M|C<;sM&UgVUb6NukRAZ z39#`xa<^&ir-B6AgET7Qv*-iG>vr1&o>Ca9c^ON9n9Q4Ds|dY8`Wj{bs*-+^EsW1w zu0F$Phy0~7wG=J3y5a{hfpRFNNf8@=MXj{{X}iKmP9Tn|)MsY{@HLX!I7^g82oDf( zJbBJEOi}13fzI!E_JBp#KO}rJsPaXp@}Si zH%s9|b|WM;0LvC0_8`ejaJO-kt%N7}sg66?uIL%Gkl6Yc`D?te)qbObM&fYjxy*2T zEg4NK9e-#c4f>9a;(**Kp_g||6MKF|t@jGh2q`ULp5x@^+n&lwtk?CXjEwMV=_;TK z!6P199z(UYmN3K=?W*k9P;iGGV-Eo@3e&V_HTyw$^;zs`#uriZ-{+X1jKOI`E+bDm8nesrH{*M1c!gH!7NtBkft~queZy06 zZ^DPrWtIM|^dzLpAl`kqcuS{!#yJ3SQi&lC8bY1cW73mCz1ot4ih$0$j>y20Y^hLX z$c&66xr{*Rjwn{Y*xbr~>9foY> zn?gNoNG({@rKm}!5ap}$1<#r&mEB!0=EN3(T(^RbV~gLj`YJ7?rDfPLF>wQA9KS-b zLiBqY+_%S8z*mJT=H_jY&!iqXSb5`0aef<*aL((raKd)Q^etw5Z+`U}am(=W$`yIu zfD5JVgqN}u&-EvdNk}pU&Fz1`6Zitq>)8&#kc#t9Mdv~IeO$~t9f(u{zcN!5Z;cDX zV1boHaI*RQ-CAv6r;wpSyGAM6$x!Cjfg1M3ej9E%75$@ADVddk7#-#d%q3+ihOSKT zRVS#J?Valvu5;MO51?oq##Q0^jviC1#>&nFi$1!`&K1sXIm4JS-*=9uYgcg^k_^vU z5;kK5l&E&&X`43ym5#~Q@fgy}ye0jUA1rKTW~9QE01GMi(aoTnp)h`yJ7poYan<4R zOQIX7mxy1&g~>Rkz~*S!wwwspC-Nm*p@0v@eh9#`KT|D|K9U2Y7#c; zA_4$5^Z)?+|M_0p*~;TT4VrH-;X(V|H<+-xpu(rzm2+Yb7N0{bcX+)$eXa7UXY0z9 zWd1uZP8MA!Id+Hfag&RqtS}|tS&Jh2Sbaa+~&ia>p-I7=Oz=3dbvyoepl|x8}IUf;f zene!_p)`l_Y01i_SAekkKG{h;>`$0cZPAJxb_fPNVS#-2X-1#Mc!ZL;af z993on<47L&?qp`FaAZP-Q4S>c56PS-jY|ZZjbU$_k55p1XXjbw;w&_6)vLm&UIW$7 zvR?oQah?p%T>l*~k33_Aaj0Idx-vcmJ3; z3D|m|1T);=>A;E8Oy_rzNd8<7@4AlQ_rd0eALCct#eG413(iJ~INN%LOh$|dWnOuQ z;IZ-9?CB!Y+CnP$8V7o?`@Ha-_x0sAZ0>EjB8fA47wA0S*NsVHuDQCdUhP0#c6#sl z#=pg`A+NvpMeWRi1SI+dxk7Qc7U)r3ht}1&vvYa>x!S^`F~=< z`ib;l(E}EU3XFq==9+~3na)oUT!TRe3;3-Ru(UeWdCC3t{}x-DG74S2&u9!coCH}ctVB+ElU&|zTX zNQF^wUq5xRnAd=AzwyI;{@Qldu6t=t>x)c__+_~Socz@wGBf#FK@hFhWXXAYnw;cT z#iIe8CD`0k{z#GdB49O-f7KXtQgX|445=?tjrb#M$#S~6_c`^aW4-O;*bdBlbuJ2_ z{i{6d_^+(od=TqmUT*b0n1+F8h4n7?%YQ91+YKt!MtkT}E%u*)Oj#k^>`~C>{UnhE zk*~@Q1qQ>uuJJddE=3bowkzQup5eat800HSqc7Q!+;Bshf|73un7r=J|#ri9cU#FbAtQ^6itT`qNwg!lqztX?@Vgv4e=nUb;4b3aR3shKz@<@bIx7 zb0mk{er^p9D!fRe|9R(_($w7Li@zW+5O7Pm%Cz(_al8i^{M zA!p-IOA?LTN#lp=*ENj$&swsyAOVeQ(9J4T_ErzcA3q&;lg_vTSm0+gzo#HQ>ypP_ zNwW(_wGp)pf~Md!-T9+TZy~wcqV$-dD}2zz&EBHHVF%6+jB{8~g~HgISy5^v7SH40 zg}h8X)s6B*S*qlz%glPm^NaR)Gk(w|#t8|#TipCV-tm7|- zx%QUox=UOQ=g;(Q(bhwy&3=>|+538exvrV(SqT5;F{OK@`taGVG5&Z>xj#x@Lzf`b z&96+#Wl%=!R117N2q~ErzN{=Oh|kMLOQw%gkVn|z-P)_qBZjV(kNXbo<{1n%SPZ`Lsn2wn=u%u%-Ip_R~9-Xv5C~^)tZO@ zfEQKg`*%gmYH}YWmjYD;mAC!^3y8R9MiQ`$ScBo^N;E5LnRbS{6iaCkan=O80uRcD5k<4ylBgU8z{)M4 zi4X5rCb!^S&b{gHAJsM72xA`LdPz_Wb?QOac9X0Y=`eAT7j~%)-o>jI5 zx=LRIPuVbrNQ{{1zvkf^w?f+3%n8J$`K9kt%P|Rf8*_}I2693FfkN4;4VlMk5)tc- zkfiv!(3w%IGe5c~=-emD$2lcP?PYFGd~AtqlifcWacUizz@W0k(x&N1q8*W6R@hM{ zhc`;**VKHV>=)X$MUE}M`=uJ%?~)^$Xc{}p0T%@kq2lLdOf~cC=N#Ak5hx@ffv17u`pO1W>%M5Q6Ol~Q>K*{3c5c{GzNGl6UsW~XXW2}{V=*s;A4F#+BPJ_B zh*^K{<+Z9PpPBPT4HP@4PSYW+j-OCx_7n)!ELc{i==?ptgO#XjO6&oamuN)Zw?{0) zBFVt*=>L{HzA_<|PLb&O(nR3+`|>k%QXf*d!$_@4_4&(Zml!C?-)U!n;1Qdc>U*92%FRnyXhu#l?40-4s)(FXtjCB z*8Mz?l7?&lpzquYR>82GLER&+=&0E&J>QZI7)>RwV|-#-0_v?U`>1IqicD*sSEUwQ zFlnXkMxmIfZ3Dg4p{}pDjM(~wI69xHt_@8s5VTdw8#sZCKa@XGw--Zqq#T{av?J56 zlWi&G1NQX3WYTA0>N+p(pYmMYAUe%5{DzK{D*_bSQxDp^9vN&1WrF)5+v!Y3-0CD8 z6u9|H!Lc#etUmylnvrNE;}YmGeu*5zgQc5ml_t)i3{o7T%|+9YOQZ#IXn_*jaNs7n zBWfw*ShA2?b7rYLAZDcSG;7!LDZgAsQYI3sc6%1|JTzN%^kesTr;!dZRM3Pn&V24g zvk{mcwCTJ6%3Q0oONdSQS~q{F{E{*^a;rM)3iO3RH1u6!Y-xL6H9jD?<2qIu*9EMd z3?}Es-$6(s^Ja7tIzr_#Vs(O*k%a8&XT1P?QmdG3(n$}q&S1o5|cL2Rp#KQ`vQ1C!CXEO5Kr6Yo7<#;FO`vJpNV_Gc`>G>6vTA zfvRTUC2%resx^$_IH&8oM1fElb{f#Nxn)k$Hw~e$NSBO*n?~0sQWzw#XDwv$$)=N- z*$3L#zBN02x*Lt&LqJ+B5*96HQS{AR#_}k*zv_?}NDwpd-e*FHu~;6sN-(U{y{*E! z;T-6Q>MT?_NYm7(UIpI=E*H$K=$7r2K~1y(FOL!{>z`M%!e*G|TW$v6)G6%cd)(w3 ztbP=LxFcwEZ1H^zZtFEH=F`xk(loMmyFHlwO)8<4+DRAcdTpZblg`)&@_3s&*In7d zwe2V?#%lceSYt#!#eBMa-)~s6Qi{{*a&agOCgLv^R)&CWSK*6Dggb$DpP|EeY%(G3 z?p4mMktmS)F-KgdA`?8r>hNdhT7GF&Git+)%4K+!RHdPTUc1aJm-alBjqzKC2Pbpy z!->FTijq2lUdK#cjo(YcbuB=93tZzCYf7fksE&kY{B~c?1oR^b4U_$qq^VdbswURP z17Tf!I|70Jfqm$bd@m{M`2cNC1)U`-B%a5CVV?%5kA=hCk(DW*gveU7KpV_1-5F73*r0apyOkLIr~q7O%5$~i8w zVIl2I?Y8IamvI9C6H2GPasF?+7JL}^u)|r_5#*X%4+xN!kD)eR^imo$0YPM?Y05^%Oz3l6!At`?-&&SGm~UJb-=0%$B1xd031Cs{TQk~KmKICnaovL006oFi*nW3#=zFd#l+IU^4ob~XJl*kKf6}3aRbuBOvqt3 zzEMO^iX#ib+u)3ogxwYP$W0SVkjb)=lwD6(S7kJ+$Q)x6)6c$1C-0C`n|rotiDcJr zo7p@#EKst^;c$`7yOB-p132_8bD7TJ1tT%QL#ZOfrTOy0A0BlVu4ZCW@g|Raz`sg? ze1hVGibW`G8P$qpGZQ2Y^m%^u=c{|~4(I7KzfukGJnz1@FK1vEbF(Ik*Rw*0>x zNQb-!y3khCzfz=?0x%;fP#~jVm$Y}TMs#Mo%C}r&-dCSzu5*3kz*KF6MRPtf;yLZN zZ(n_QIA^UJ6Qrb%luz_=Z|)SWA>&Qf{{ zCl1Y4Zl1k+z&hFVERaOx0^O|?yKq0I9uL{0uMcx_Dy&^E{rzW=uVrm>udX`v!c6eIn+U|ec=QUTv(mO4TayJ-l`522 z8e|9c$uFl>!{}%T<>j@q1B)|wWf~&8|FahK(^I5A&tU!_Sz;%Cd?MoBB*bk4t}TnL zhdFgB<-u$`$(gs+Y<3kfOGn~P{h$hFjko0O)8s`awIsG&c+BHvOuDZnD=&I-;`An< zE-;;r^a*8ck*sY+--nQsl1A$dqKV-5{A8$NVU`6`PDiJ*Kx42?0td(%@&Lb1Ey`t> z$_>#dRTt*L=){XjjBPM=>&AtaUD^g^u#pL-lwJHsi%yj7Hq^slM`=lLGLfIpy@Txj zN<|QCrI3k4nJD=sy@zNsJ17lVITj?{hW4#<;e=(!odkOjLv6cO0g>QuXD1nN+Ep6` z9!B$2Cuc1e*(FF*y=2XdH5Twz^=~tMT?H8@C+*TVU1kEFexbvr)IofRrqj$0*`}4g zTJf};U)cT$OhS;lzj&3PJEhFWJ2FpSJ_3ioOn^V2ZzJf`Y6Ep-8MTq#+D_e6up?k` zxp5u$a^X6UhV2rJo2JC7kk!H>n*+G2ZEtXj`mZC0ni0z-iJekw;9eR;EbE`sjjXFO=%klTuIV=4a+ORiJpd(Je4nnvL$gv5-XNnWi~vSXnL{`O@{&sj^k z&^rv(b`#*x;0&&e5XHInIVn!}7uowuffcrvYtf|O_iU8(t0&7#O?(_AHBMLU#HSl) zpncjY+eOZ&g4y}nK()zH`Z+k&kugOyXdAbUDi#FKPatsR*WWTdy4Q#xk!lgVDCv*T zi%=sYSOmwPHR|RIM@4B;a26ZFm!??dv}Kd9mpGwL_R>|HrNg`yB-|dl&Dk;P)yuc} zUeohsspI4+PeTp>C|&D_gR*#0CGdu#*`~T*rjEpGv0>xC<7h&>OCuLXuNsw3?>K|@ z;c88C0)Qs*yig{9F?Rt&EgYY5$n|{jvyj>n$20ekxFJTr-fpkQ%YC1Fx+_<7FsSC2 z+tz8>Z1>mM!$DxHZ)O|PosN}S$Fbcb+o6bvbb=O%=L;2=4)%WF51!!#8-i=$5=x4% zAHHs6{10>YM?d5^#Y`>3YllemLF}R=6y);&OU8>N%$a5*YEavym6}&kC^Kn!`nt}E zbaQHs*+*z-!8N`ywHL%i-Wunb&wD6T5#bz#Rpj#}w6W?TB;m@=1y`D@11pW3c}h*W zQbj0^v#rHDdztHTQc^$9QT|yk`bxbudd*BP;Yi{0T+!v2@+E_W>?=r)c^)x3BI8SD zVeZ%boOq0|TgPig)@Vy4=DUQH8!28^S~mYX+m0D?c~|s~Hn65;S8VS|7*nF>vVnHM zOS5V^BF5aQEt2}VY&AYFO~R#fg}Nxryg7zJ#|fE-#`EJwgvq>VMOaaaqUQD&ZbbMq#JVHTzE{+;Aw zQ`)bz=xT12R!1tgg;F^th0-0*(0=y3ZEwD?^z(X24g2h&z;jHhiiv%9g4?AF3W<8% zuh5Vn9<>A6buf6%63r#6j2Fq1Q#0VrU)bSaC+5FFC+E!Uk zVTcL7=SD+xpDAJf69g(GL{J!?DyO!_b=A_Az{cI=E6-G}Gwrv^j`ycWs|u?tWC5Xz zAvjar-(ldTdIbTx(Qq~1Us;>h);~n_8phJ+-D+*FwTp{Acd}3#Mw6Juv1+W)>f#eN zzuCsywU!%K%Sw93lnEX?GSS)-6q!Ba)uPP*5h}8UySc^B7t|)0MIkHn?AB;s71~IZ zk&<4qtzS)s)KhKeRcQSC{m$y=NmtI4JvgDI53jEI z%E^)G%^pNU3fbo=?HslPi*4!29hu|m=~uNhd={yODVfE)@r%|`z5lsrt240q96ytM zEbu@;9RJ;-{m>L_O^p6eIuN6(Aa}rlUG;uKDS?Bc;NQRU5V zmj46&5>kiM?E5_E=~V__w`mIyWm2@F?@w%bp^VmdB#Eym z(I}6R=egh&zM%^oE81s;%1qV#t&OC4lsqRhP!X(KygeW!y_aa?{@YT)v$dgt`TH}5 z^lZF;yb(_rK8+R59tr_@F43^1JsG`nPSkRu!g^l-1D@IXW-kiE>+lmsbR2$U|AGSAZX;yk z<|_{u<*FgTF)4NLs5?o}rZ!kwBRZG**R%ie?7FouGAo{A_g*Zg8Bc>#+Wf{Dk21-l z>u3)95as8_0)Rd=$+O&$L`V;xf6D?r9^#6@Z$P6dPQ-t(`3NH|Mj$_6(ykax)VTm&TlWpFUQ@i<`ERTeM_BOyy12~~8Xu?oY6oqG&$KV(g}rLpKP1qNQHBP{5n2TbyqVqd za-<=PqUk_%+#&IXu>e&LJ`w+E7a?Dp1dkA^IxU6aFcuV5l~AoHW?EP6mMf;vq;D6m z?~x^&uampC^Y=?Cy)AE@Z9ly!u{H$43N58Oo&ufuvPlEHKtF7ck$_ksVeHBM=5)1Y zaiTh8py9XRcilD=?c~lH1sAop^oF#UOf4+7lgX8m@6DOpPhI(JdXbU z`C4%RKFY3tU4rKnnZAVvwaztq;f+5rt2Js;A$UR)r95|`3kzK!iUyjNwaK*`Teazp z%pUh@(`tbGDFamFISxooz=AIw;@{!QWe^Wh72`TNA`&+|z^atk{cMIoWi=WSA7_TF z1zeZ5_AaHk#b@lhm}9`)duiIHz3mI3ProJVPIV~T-Jbb}ow$k>C0XCA`#tBIMh zaL~ofLOi7y3c@fS+FNJhr#TvLSj}N@g|lN(%qmLj4HcCouVt{h z#+Y7PbkN*NJ$2r?u^59cv)nmChq z0`-Jt3Xf0>$up$~k!#Z-9LsNp6Ti9VnCxt9sQSCTjYRGjGCV3rWhKc1C|1>x+h9QRnWobvsP z{-(zC7x_HFfJ#LS77oCZ@p1{L+~RdTu|-<`-HNwLN+^0pIP%EFh-$c28(SON-#EFC zqPK_pdIYTs!i)M#`M^7~@F$;yJ*_hSkn(UF-Y`4<@Am#JxEU7E7*nN+A+MtARyG@o zNP!O15`jCzr}-3%lz5?Pwgm0VCzppqmXgFgN@BEe#qtSHvvtGTq_1AJGlxbY8Jf1g zYeXPr6&To;g*?@1kyuX12rF_?AYbgN1vkBZTPF%UT`E^KPwK8&7ULw^5lu5iKI<*_ zG~*E&D(`h5gE%r&QC6zBIuLm>6%ef&RepX#knKkhO0a|yICP}k`TRhSB|&SU$-e{D zn@pup&LXQ(ca;PJSBtJjep+G7Uyvj+!*&+2uN=|cKX7DzeOmc*-1|J$6p3IASgY+` zd;>0;HDhX->u9q_%_t&ssku{3%g__Y6eGVJRDuIijQ#D;`G0e71zU*r-ma zY}$4^>$W_^qN*hFMIXY~*cqZ`RhxC!Z>qk#;BR8%#nT%0Vu9dx*5q9ixahDa z=c00{Xrmd2?5r$6mg#{ZOG|@N0agFgju>P^TcJB%bTDDiAFN2Ak8Z+A9l6~7y;+6uZ^T z-?>QA45mjAzQz!4mVAUS2`?BE#y`LI)L26L`WGo&8S_q=?q(YxF&4_Yz0elww}z?B!5@-keU{pXuzc zTB2WfqSEeqNK8i9PVYH3fvZ4TAT?0}-f}@V)ZJ(P=Vn>BSphEi$u-@6Hp_pRZ~lM4 z@Bg#1aZHnty1(L`o4Lix7CT|}wX+yH(a zC7p23cRVE@!>UC!QS#h%R8Q7+8U0AMJYBZ!#93)3!;x~5UA8?Ks&jSd)y>N7N}BiB zO-)U%0Seex9DB3|yYm{#P8B5tmZPz3p6TcM$4+e(lRah1%1)-U7A!yP(8X|Jr@=`2 zVQXuRv~#peI+2YiA>UvPhzTyT@v!y%>0WqVPrD0tQ-9kQw;e2~Bg&PBs6rCELB7uJ?j6x`fb~p;p!-A9gFR!~=JXbSI8Au|I zQLx^C)p3f5@|&<&xl-N4%R7dDHI(?eKKP`fvG|XwdxM{Y39n7)a?EdzRDW10X{3Xy zFJOZ<`(?2vbOR?u#YGST7YJko3%p_%DE^VMds!jf$eeTCk~SNRzhaHfs`8hy*1S(q z9An6aaxSqx!0F^qNWT43NB|QIV<>XfJ&hchqdx;xtyc;QdeY@TBEVEgcoGgT+^)CQ2OmGoOA6bi2PVxL&nWGBW#XcUI&pwm=cOb) zM`TR=B&7rK;-ze?48im#kbyF!$RoLVuM9@S-{f?ra&SRM{fxQPhR6cbD9VE3eF}>@ zhO-~LZW_jbev8kUxCcTss{lMW)Sf|5bw!x!Mbq+9azjm2n>ijkb>%X(L z@60P*I+$@gTkIW5oNWqp0QvBuFVw^J1hglIvb=8AwtBiS)|qN6Df|xa;b=Hlq7PYNI)=Kro>aWrvu^!Pct{Fw=e+Zaav^6fD+7(nt^n&ava&>}APYCd|A-!RKU zFXE3^q_!+Jl6F`kx5)Oi_wzC{)oYcy%i<6R6Dk?qT1z+E4r@_x9GQ1sSd2lj7{A-n zEzh`BA&)A-`1j>wXuI+%yLusL+v3s2%eh7rL5AFtzPi#zLoG$dWpLv`JfUd(2+}-W zl0!|tlt$2b)Ur~bDt5i>MQ)Wo*5Bbm`_kU?tf}n9A(5t4XJRnawit6Ga)Gm|4^%@Z4JB!N!{&%BbzTgDM0~JG8FNgu!yQr>KMc;9 z_HZ3Q<2`nvb$!pkzbnvBN9n|fZcxOVbd^CTSYfYRtJ%BF@Yxq3EoZDCQ>d^5!yAxl zMycG#Rlo~yRf=fhgoi#N%GRjI$m|58>I@9pg|v&zuqg`E^ZFfirhMHW$HZ+WIw);r z@-&4-aQg^={_2@V--_C5&TQWv$a&_!q^0K!G^L!H{H}8gUWTq5v57$W23|Wif7tS7 z#A!g@&f@c>v3<4G3nxqL7%5bDaxY%hEn{v75(&%1(@)L~R(!>2h0q3hyGgCm_Nql=AZym{-WMTHnb?VgB{An9+Nf^i1crnhdiK&M zqF+mjc4`06D~u%3<9+m|hwii-%cw_EaoNuVQmf)HA}gJn=3t2FHSHw6#Zwpw-1o4G zTHsalhI}Wc8O^{{g6sqFtFK?H3N~~+K&U1^5Fti{*1Czi@j_gtST2|Z`rkw9iyKO;&-=0w(O#Zh#llC5B_r&!XfK3}yNmJUV62 z`VBnQv@2fMFBFfbJAvPtOIhKqf;VG(cNz1fn3cD5+Ak?kz~YC;!V;d zooj^+_l=6>Hcw^W%0r)9m*5h$7W8H&upnhNMIth9RMm5m))ov41t(pjqzVE6Sv!wm z`iZv-ktTuRXD^qF?8?LFzbTB&fw^r5o|TuD{r;oqqEx zg)y!bmwT<4KCKL<2>KzfjJ+WkI7FUU*xpD~LC8Ccg5XH_?%@f*kk)8^o(f|0JGZ2} zpw$Wi2DuSa5G>EQ)|Z&YE5|JU{yxH#{L+xw*Cc4ukCoj(aJ2L-tRe zb?!UE8snu|Dy%iQ(GXUBIkM9uH;-UFIr}SmY1RY13uAhIgu-7?YG9uW+u3Dyhg{$r zH6jUW1dHw@3_qQ7@>mwjIEY;V0S=Y34<0cDN?W5P>WCg^_k}WLM%t88RIJf+mYT`8 zJdJX2_4*2j)+pL*b7K>%XuP}4`WSNvqet;em7J=YoW?Ek=8S(8{KL^v{bPJi!{veW}rhnbMIWqb=y&5p#N!%qS&e;e4 z(@dlUhj615fYGq+NKl6dU93aTJT$!Y;3}q;7BE%I~SKVgNbV*eviQnr!SO5PYGQhIZkI zU!JqQ4WiLYQ703Halls^aEGQ@@-3J^dVVS<=Jnv|dy6umtW?$go%7|z>Bp=$d3%2T zxqo-Q1=*>st=E|r=gSm&XCJwL*kO8dGh|)1cAEqOnfoXGls6Cgl$Q~<=r?8FYIGC% z^z<(yEw{ZuQd};xX9I?-knnf$P>esIS8uo8`8fJ?$<&f_7s_VO zYh*cZIm*^3m)6X*mM^2DaEMbXFKLkx*ama+lk5VXMU4eA&~bHcB?0ob1JN@5kUDkx z;Fo{S9QO&H=hglmkPkujkt>Qj2E3c~H@chpJeBY@<|T3F>;O z3+j${HGVRjqf5MOmiP@AO9&^3_#DEZMLX~it}Mo4G_?ad z=en?Ni~$MY!L`ZiNI`cnRoOz!gq+B~+lIOpkc1kBb2B;o2D5P2b{LcA+`F}4WRseu zL4_0um0PwhsG7$#D>G~!c0*|LvwCHh|K@-BjuZTLeR6y8?Ioy7DRa}^WQMplxH#5Q zC|xdMgtfGSZhC`ZSwhQd4EMCL#A}}gDp7#Bun@{0GB2NfC}|IVh~#hglb~*-;LuTUK@e=cs=r=u^PF@Y{OLsuc(9`uxPE)wv5`6(7dkUVG;nGp6 z<;3~d6w=Oxfg6YblbUQd5%>8U8oB@K1Uo8cfvB(PE6#-(@VA@&h%l0^>o2^H_>Q!> zEb@>s-)se3H6fgIcKyO8J{{dH4BU%R;1sw!@U%$AdZzxL3riJzC0=ES zKXIKfF(FH7YT@9IYTksjhpg*|;Hy@~nK`ZkcwmT^sh0~iK&YTj{AoTDoy#=z%;c^} zQlM7MI_iZmD{*JOiyve)oiz!Dzq^|msg>mAp6XP2P=!opnrwo@^zu2cg7NJWkVvo^ zGw8PKIf^w3EOJ>HEjw8Mlq4e>Z6jsa*loYPqbW7G$zS8gYy=AZdjE1Y^eErfqWII~x>kYxGEM=cZi&q)38QR?TTo`ncxVYJ&&ZvwHIaf$N ziR-z;VL2XG%#&1@$FQ<2g#33Ew;Y8fP=`F7rLyZn;|A$e(;@U1T#tgzmuvWH-|vC) z+XQm(S42;)H>Es5E(0LKnszKv2-IiZ+IXCAb!hztvQ)e&#NLwnSJG6p@%usfdolx==?y#GnA^SE{lx_4*~i=4d3zin zewk$g^oq&7H|+TyGqnZ)9YH`Q+%@%bD_Ny+!a~2lKK)`2iiywzL7}CGWf^i`IZb(? zHto~SzE8x(MUj|C0zjZ0wF+|Z5l)6%5*W6ri-#hLfinM=iDVCIeHh2o+1w=}>aVwa zD8m_2;ttIN#mnStng-iHMO;c=rDj%sHfH25n8S~C0ObDhiESjgTHkzW%kJ5EU4yxb z^Q2%Tx!i1MdooGx5k_;jcPy`JS5YvBGwERG_^nPlVsUJ$# zzUU7nt0rw#1-QPx)9TJ~WXMH?0k^~Q({WhqpEoDgp#CupSwX_&U*qeRorQan82(j> zqY0a0Lo!oOPtW#T-}W$(lwmOIq<=X$ox-MJ@-a+utcsHocL9zAOhR+O$TTP6MjkQ9>ppY^#o4rfD{<97DYbA)A=1wbWPw%?2 zCMKV-+joOqbWU!^cdKO>S~Itf_;gHMLZrNU8L!lwOwN?YlSIkIz1MWBJIBY_x#$~V zN0-_y7Z1m6C(PTlaX7>{)RPaGL%(@so)-#K6a}yWQL1-YIb~Nwnj^Z z*zTkTUTrkmmr6Bv5zq`%_mDiG)4Si@2uu!eeL`dUZJMqVxk#(VV`gWtBf24&EtYW4 zGsAWG2yC^|V+VO881~iWZK_k5Wwya*Gy({~D3a-STLYPf)>G5$h6gV;G=hpm=V^V; zjIQ}b6_X=OP`h{fW#H)K#SF8$^?5mPdGj;?29i7D8RMj*tp6!hO_}ty#w0LW{Q!mk zVclM-!GJEF>XN+8mWEPnMbQ6vzA>02X$vha_r1VEm0e|;Stt~}@ zeEd_*5qwo3BN3XF>cs=mneVRc)uF&3Y49>BkB71xq@O{)co@<&hCP)C6(mSY{LPGP zqj9qD=*)$)|GmWztBEV{hAx#4S%_%7lRoN19U+}1T)-CeON$LFM$Q*cH`C*4=q7A0 z;1x$EiM0b+6-dJqvyd?emEIjs$-iz&QM8x+2v1*?D16`9sARHuKX{w{$HA`O2}DC) zTjd(yucPNZPz@moLV5GJaRMcTxw|9RS@cJD1@er^9cmLs zg7#?H%vJL%%B|aQw{h2vPDFLNdZIR~0*Jb$cV_e!u%!2j$xiMwrd7I=!m#-nIbU6xq@_iBh2tK(&mYmh!y6baXM)Ie_{A*i#O?@MP zLMr4)-uqS}=YoUXLz_CY{!fvD;_w`b3FRYby@;Sp$+rNdp+{A;2a80Zj*|8`ezIH(0~se$pR;9BCI-w^D!8B|CSXW`HI1{CY3$W8^a7SWW=4kfX!Je#oeEySNJbLj?VsPghsrCluG zr^Gsh{KPT!G5Kp>*w8U+M8xA3j0QQ&EkfhR!VMc!h8$7+TF3&vjDv_HYuB&<$j#P`j^as4~2(C8kF7U9}ky zY_J+~jT^#w?}rH7*CP zMv+1Wsl4g{k~)`INp5Mv{Gkk4sdEX{AD1zm#2N^Rk@@9ZtIVd#fPqkwUH*TXxN6T4 zzr?+iO$^kv)&k`_^n^-3RW=ajHb+sAaYHo$zr)r~Kox(bzZBzL6eoo4iBr=Jv_aF| zFNyhWgC`E~-@#}=^>{TPvX+cigv7%WP(ND zkTTtXd=WDROZ;^k-3Pwk2B4dTfPwURAXTY_LO35~0>|akl8B^1WYPp17I=RhHyUjgA0*88AhQ zlL%{;!U};rlp$!?d6|9dXR-vL$`4q0l^D2eU4(R$WTpx6)Nna|8RjS2U@qnBHuG)z zHvMrGy6-j$)68UPX6MSu($~wp5&(T;E1X`_uF2QoGA@)0=OJMfW7tyYCAeLhv%BUa zWF^ynuj%U!uu^=JbnT$SVa}g_(U6v$z34T|hoWDLgYEZXo)^XeX;)X!slp9{<}+iW z+OQ0$60UkzA`D3rDnFWaM*LyfI<%wsr?!p#g1$0TJjX*M&!hM!z%>Wb?k+C#UJZaEK|NR#{-e5LC0#`@7>=|OJ!47)$%UNB z%6*{BOtxOzH$j`Z9ryKkd+zJZ7$TiainySuRAu|B@~?h!Bac{6u_0b2Vq1C-R--8* zrk2}&BjR_H-IQqbXN*)wjIx;iDPwE6AI2BUiI0kS8>gZ~7n6T^ z7D4>e<5kg$VXz74am-RtH6C@7(-pNnzpR$kqNyEK#FkF+zn)V!;fVz9zTM)7pgp9C zUv-4Me%tXKG85mJPAQ(BtcmMdkWyk>RYD^TwH5f;&{OwPGH_bq9T6#8?&QD-`bZ<> z;=hUB8=yTzhTHQ)zb}w$%$ z_7l4mY%dFnr`o|?yHSFsqS$d7%sQBB2=!Zl&hfe8B8%jbiB9$^T05OQO>b+fSVar& zKviVj9i(yWvu)OKXB+^{B_~>UWmhGq_!e0QZ+5OUUzHx7|L36o!58o@K1@}4FhlPt zG>&5EGz@;(`&KwSrT-C<^4MyOmVz_(+Kx?3yR#B_-iq&2R_ZG3rT56KZxl1|_J{`cMvV;#% z2P}z0)B1PNrT!s8oTwj|J_3ELEzex%&bo=x@N+5)RZbSR>DR}z)3>FqSvEm349Ag~ z&p>c17(!K&7Ina%4}m^jx!RBqoSeQ?Yurfq>zZmYIOq(e-_i`nh6g$?PcgqrNd-{B zxv#oDy`FE*zqX35dGp!lUvs#T#gG8<@xdj>;Fikmn0}AL0~aK%O`o=v7np{H+^Mo# z?fs7we%TSMR60Gp=2`{HR$M)mp7cModlPCDRASq93ClDrprFFmG$nc355YLRkdd}g zlxQ!E9EMW#c-yQLcGr2Z{hTh{R!9fu$^BqrBW`W67W459(73Qmo^H_zZTcx$i}NKm zIcxm@f^^u2XIID?`nY+v4dQ?|yKLxnFCM23jfIBhtYXb%;}~y~&vq%&TU#mJS`83K zm^TxIi;L+9SysNT&3p_ObjvmNe8OL+6WVT>$fr#qR6w44f*&q1)sj+_fK5O!{6XO zMyEyhWChymkP$|5;c21^pf%;$)p);q@JNWDa%;`l`&IR3cl1eYJ?Bn!)b$lx4+&7% z27Z|@&pNCAuyd)2z?Ycf$nu~9_e4GRt+8$uHo&WIBBy(!0{0%F= za>_6izft$qkE+kX_z8&FOdEY;jvM2Q1j{KI5Ho`TC45j4+ec2%LT_8$s!IM6bKQXb zQF@yhW>Va*yE>?ouux~`W|9xgOiOfZ zXBnwvgk_>Q$%=Pwyx7BDpDb*BwA@>NzV^D9c*WOFgoSm~RkxP`NXt1<#UX>21HNPs zvq{Orrdt_A2H=YW%BeTIC67~roE>W0#PKqVc04Y(-B1M25yCo7VSN;Ev@2jIJ@bWx zlkwn(ILl-+kjc(jd4LIs-h2#5W%ZELP?G7m&oKSBLrQ-gg>=mH_@1ossYYn0=Pt5s zI$nKmr)<08x-aLjJ8S)Cac1msQrUpL)2TiBS`x%_X=*pjAA;zl#_SG8V1 z8}5t*Gt4#4ip<0@mxIm7R5YsBxzn3Mpt!i83^EK*PNnau-SyReh`)IDj0N|?Hl`Fw ztvZ139RS<4Y&n7vUPXjg10v+8q#;A1C{sHREH z8_w;;;<> zDQ$4<-@V@75B&P9sMU=05)k|pw73+P#XN{!4YZ_`Y1R zG8JD+#Nr zY?j`Ftump7^C0cQ_8sY%nxFX0xIgJ5Yw08EX-l7)Ue&^RIZ2vB(x~77d9E0$b~($)!=%86n27;Yjl%gOAGjW{?JY# z8I&;GA2R>sdMzO5Rb=T17)Lk4;il6FgK0`2`99z`!qs5SbXp|zGHmFPov`ZwNfDg~ zzDG16KCzxxv0~n<5OyXUY5vv8wRVNgznZNq_hCIM=g57oABmeT+{13=pwwke4J3Fj zyG&rMI}y=`G2yTrtGYqO@0rx5?d2$Wyj~rN2p!nATeL#a#naHHwdI&$s$4i6^nkR6 zE>&u%I8v?s1sTvC6c1g9n<6QSp)agrp9_J`t=<|}Sf0{{<95f~nw5Iwm7Wfd_BWeP z0HR!v$J6@-yQ2$!u{PUG4&VENqk^!5xsDqy7*TLF7!0^0h5{_h)~r3ny{`RO;YS$d zJIP5^FfY{H{%=v`?Br(>XpivU;Lf8u``TVaUL@gt2ilwO%=govzA{E^gQZTUNjH9{ zi<2IQabdh_XuYGVMR4%YSEI|F^^)AvCl{>Xy{cgKqg@d>w?_~-^GC0g2w)#aS64a@ z+WojY1EO+kPEWDYjwY)Ux!VVZOGIMJFlAUQ!TTb3q+tbZq*@{lCZqHOq_ zNfyRa-d7d=lPW1lAO1(r!bie~E~OP*rk7lCY+kE{_$MTynQOGl=l36wG3}wj6#3Fs z!M^+=Mdahv9s>3-x!A0TWqd1_rgQNI^2I@sYqBk_9m0n>Q*&8sKrr13qXUCc-(T*= zT>HSjVw?h@YT7%D_!LVk`5eUhKUk+1nYFzkG}ww0@ZhA!&K$}vK;?`6jq`VLT}yB| z&?!4(7;glU^?mif{g(k{TvKc?DUvPaLVx;fh;oA5yG5A}WBCfG5!HKC;PXhSQI3Tt ze7#{ZZ*v#2=@4eFibiUazwomxX;#=2dS<|;1%ce{ z@(!o@3TkrF)c^gN+ZKN5)3}Ss(W(1ojnjf0O@zqlFl0C}r*0 zi5y9v^#h8`uy*qP+?ospX^T8Lu+nOE=7l+iT#^h!kq|bLKih_qO51G?6QehK-qbCA zHKt`t)?CA5fi;i!t-$0PNfZ5F;l3HtA;!QLQiut~Y7h#ZUbN`PKQyXr{-KwF(dju< zypxB)vba~K_Rl2M$GKw)K5I`%Q&OR6)WT`mX@SCDaiy4U*o!$>I8Qvl!8Ht=n#~ss zbI{I%A{3T4Zo~rZ($(iNr!iyA`jYXn~>i#}kKAN}c0#wke$sz5H+&d(B(qGWgmiipDXus*DOcV|G z_VD8E64@;DoiHf51IGr8Tw=Jj_KC0BujdVwQ!4+tV)Hq{I1-*m6fF)JbK)uEu`5Y( z;4QiO3qm%@_Wo9uTL>O4u(TSv5J()PQVaz4OJbIK9dzs)K?a?LR<*#*fdsq?7mLvB zXG)|f9;I`A*s&SCK$NI5-+B|F2po-)Li0S;ocd@Djbm@|E*MR>IVvW;~#cRlcUcq4T_GL6>nbUZxf(CKf6 z!%i0$FIA$Ix~qqagM03J>`F}}>$*fj#4u2+_Q zYv+G1+i^ucFP-LEZ0p(-mupORZ5`P+k%5v(+Nh-<=?h<4UBlAkL_}gM!b{3GFkdNP zgg2A&$LO)WrY9b3STZ~y$H&z%BM;?kQ#yTr-^oYttNs)Xh}6q-$42{1Xyb()eBPmQOn^BSdvG2!!wv4z|EzA%NVQc~)I zL5LqY0}m(3y~vlW0hFvfaSAB8Ycyj*Rx{0nfC@t>F*`F>m@H0zx)&2tPA{SyK2IJY z!Ghu=7rfh1}M?tJDmESU8^$<*o>Wv(5P7UUs`f#1KliQv1$R8QIW8M`G)Hi8X&6>$+)hbZZ zVy6&O{@#DZgl9bpFpp~Pm2dxKkMrU9Dc=8MpxG?liVg9n&G#7t2#E2&yFYVr{NIw9 zV)dVvzaPoWm7YK)vbZRo#{!VZ^rw`c%O$S5yO~6kF~_Q;(d@;h%Tr6; zi2kM+6jZrHlYK3^4CFbnY$xs3qv6QsVRPnmY0W~_O-`dV^bRTOZuDgFW179Hjs0s? zt*{=-0N*yf?*??!F!tiTOvy#MHb{%M{pEUk(c&Nx3y>N9HLHxN6jX?np&{_kuYUZN z=|;}CX-S(j2+hw{ATd^sauN<>e`HLoBXYZqY``7)eCgEy*1<1pTU$=jl$U`D!yVMTq+h z_6zewEXT>`9i4|=Cuta8R_ka}Uj@>5=CJwfrK^v=0hIK*g^^86)Mdu*GaS6ba4VGs$032g@Q9+>0iO_MF(;hdnqa4I=WBTx*RT%#}^ zg9R=5v)l1c{5s2bSZpo<}K|i;1w)n2-XoO zKoX)YF1H}fwYSh1{v=WHAVuN46Tnux=oK%q&9<~@FT+lyu1S~}e{t)et`nq}WiIe; zIJPD@7n#j2mKo2um=#WQtHAJr3=OU5-xk8$XwcUvNLL%XIO?+-n)V;n*4fn+B5hs^ z^`#iv=i>^}OoWWL{SMIeZ~oGzCeEpLd)$Zm1OP7Kr4p;0rX1^5&ASvxg37g(wW)ye zg@)k<2y1eT`3^6Y4ergW7{ZY!Al@LzEa#f=l7OCT=tpXkOt6zy&j?t!Emi|cGG(Xk z9?2y-DI6Abm*U4F=JWVgnoiB>iEqPh_j8kiIP;iXmtVwIed5 zmbt(MmfB(BDaG-Jsn*&a>I25-&-!A-0I>QKngB}jI-rMJ8g69Z`>F8c+9Nz_V!=V- zSMS*08Yq%ni3A*g{CBwTGAob;4Qo|UHZS$qw09f6i9aG=u^&+N74Ag9*Lh~wz=qMq z!hZw|H~1H{ljqe_1*7PL|0Zu`*7zpJ#dGi+!V2(BD$hd?tiTY}KUlZ=D}hKF0~Lk~ zkztik1I_5`5lycCvO{c4?VaD<6`W6K*hfIA2q$oYjlwB5u8thpt3EGT0aD~z zwE}yJMBC3CoXmkF@$b=aYU(lL8*y*X(*ZpIt84fuoCKoHXtzR*!JeEy*}F zQLKPCiw{b}l%xix1tS%i_akZto|$8{1D@TGdFNTBKd(^Csx7aRJ0k|;D%>~XwsQ%l z?tsJD*8FH^HB0EJ7xLEI7E|q(kmrsINlrtml=`VkSR@V($wzis5e6iHDBCMGkoN2b zw2OdiQ^=WQVs(bWtsBYY>^6q1?*lXr9UfK}NY)gGd1H={`LLSg3iwL8oY{dpE*64BKJkeox@TDV)5 zT$V9^m;6%aRz67T8o4#@;bP1KMjIGK&PS6$o@1UuoMVoGxMe0>5W83HIp%&>35Hbi zH(K0GmqkT1JQ)459lUSA`IsrgEfVH6qc_X0MPz#53U-BNo!$<_UElrv)W85lvl()Y zqLdP9>8L4WBegd!ojGNALDj@y@^!9P}Q3 z$RK>nB))6(Fb^VMPy7M~A}?n>%EO8iBred6`fjZ~#}jFJOWVQ|wI1hlydls-2e|`Q zl;Aga#v-n(cy9EyCor@Uw6_z@|Ga#<9g!uSH?$nM-a6v#2(&n-!%lj~{?Ko@>gr63 zgs6KjT5zZc(nx|1)2#|U^QA{5Q7RDg^j9Ys`_U0EX4 zqv^H20HYrUHD`WvpFL5kZ5jg^Jz%e6z+usNmO#2b^LqMEO6qG4MN{I>)SbakhJp2e zvI`?S8yf>#^Ef|Pf|sI|*=371gj zOW)hKYTXTZy#zVw?%Qq*6-!j_k`rp4Ac|BLzf-kypwI)gU%-W2WXPG=rGSEbp zRz-yrkaYEunuEKs$Z=prR?Pwi05;>UQBgn>$eqJ2TtDETs z{|UQf+8I?Cjzd$QZp#7I{7T&*W1B!xX3*8FC-q|vtclpslCW~m8fGUTRL7hXpwZ`D zAz6$PE^44A)*&MTy(DD`7pY9-75I4&sv~8EgRrl35FXhBiaX}3FEr=(BE_uJB_s0b zAXz}PsrU0iO*YM&8yb-IYbedUwi{j=`{Aw4v@+WmFhOO$dSpruP;eU-!cjSbXr(~} zWdv!w#|B(>UqIZ6<%Xp0*dYXB8`|#%B)BYwaeT6!rI6*1^8RY>3(KtPVDSOgO;Be; zbFQg3-4wKu-|SDO{d;_&>irCBSs_O6s0S1ru%;NaSru1(Zyzpsw&xM0C~pLnY7 zxb-Nt%>2RTvZfZdqAkDGw0p;O`^4J>WmD;?M^y!kc#3vs=A;I9phEs4)vl(!r$`AZ zB4gtLfx3Pp;`(Joy@>97PG5Tl6)p_}w-JHU)sIg;u2mRn!X?78yOV?G3WoL* zvQR*UwhrQHWO@R(KY?5W2?T`mpMm@n(LV^E|A*eAqG0zE%0J#+4o0e9_z}x$MLZ0{ zMV4Fqvliv+R4@@j4HOQ>+!cBIJqe=L#@*uK?k|jsWC-bo?EIQXA|a?mgQJO;EJ?zd^L^$5L1x8E-hqXkyN_1D?@iEmw+8w;}o2-@oSDqhs!| zDmNxQ@Q!WylH!2 zW$5CJjSiKk^Ln79)Vc+M z%KeKLfgiH%i*Lk$Wld~E1m#XrqEhkTbL$OlPb|V??xgU4vGtB^q5w&-=4souZTD&0 zwr$(CjnlSm+qP}n-k$xi`^?BWvMkk-}$us%J@c^=$5*U2Hj+c<8ray{H8{`CU0*k zR2BrW#~UtHR}CBuP4@8S#1n+2BPcHklHA=feW)#72MH;L^5pwa>BN!gl3_On_1_mo zH^wi+{Fiz$i1>f0_(ry_HdeO!M!&K#OI5RGgB99mrUsr7xh`^W!%_Z4|7rjdS+EY( z^DjB{P%+ZeYC^@tSiLTJvA$hUYxUIk=r3*`oCsw`*B`l#@B`E^Dg=5hzr z`sW`Lq-@o5C&c^3FJ+SkiZKDAbfJM*nJ>E6y`T`x!Y@Dsc3Q!3jlnW_ucRwGllakHG@5IESuS;kYjV<GUpf{ zU#CL$)@@q8I~4U`X7Ju1po#EytU7Odd31SwjS%e1E-|{`>-~It2PZL{g3tQ6m|za` zk#nUHlYV@Df>|`YM|RT|lz%=G$K97CBYI=}F!;@n9`DA< zO|%3LF;s%|MpoUL zCh$lhLK>9RVpeT^x2SE1Sk?cy0Hgdj@ahtO}C1+g@H#Cf}?Ij!yJ3`JUd1 zCv4U_%_13Eul|h84gk#7lx#*NzFrFlTO?>x9-TOChZH7U>3Y)N9il`Ht%RwE-3B?Rt|{#?*ri|3hQC59 zCyHzwDF=lL*R_QCrdl2Fn+o~cnr!u9*Qq>+f+rb~RcSGim?R*I3rF!gLJ2QpK2j=@ zeU;g^vgWFCV~imY+%3qw{8;lkuy%`9N&b3poL5GtP6Sch1=TF)&f0GKK?{)6YO7vu z%KZM!-b=8k?3Etl6cG&Ki=jxFGpC&C1pC3~t)z0k95}+3r3lsoT2F}ggqLkaRF~`Q^c+$3^g6gIE#YG##Qv^;n1Y};lZ;wd4Q5HZp6vPbDv5JgY{-5 zcZ+f4o?_GX>koxlNTJ6E-^^KsK4G9;r>4PbRWSBRH6@ z?!l?3d?s1_a$SWDQfl4qjM83{zRHNDB9}fmy=}u#m7A`Y+?txwW1v=Y;Lq zVcpuP+u6J)H0Y|g4c-Gh^8yPSV(MXWUHzS^SSl-~KC~sauGPs|eS2Z?9lZd=O|2cN zI}j8%Xy$Ld4avL~iZ+bt@ox?UEZ?03l`s=M@*4$KCuQudyLrui2*@rpLNe|8sL!%9VesJo7FWiD;MsE90dglnwBPe z>_n_bsk))*;vanmT*h2Uj2`W%$ap+d-dFbV*rlkOS!ieC`{$L}UtovPp1Wx(fXy+G zmjmHmqT-4)=&&?8=!o!!0rsOCOlMw&EQ9lPS3P|j+K*L8Pf~BICZ)^np)Lq(^J`rEntQBnbFl3 z=HPD*x_FS_x^k{4SFW*ez8ZKk`s;>o6Lqz2(y-CfZHNU(Tv^^lNV5C3xA$SfC1~g@ zN^b43qnVo&Hf?qR!O2eJ3CCQ;mcf6mvw5@z-e4ZU$&=J{4gFBi@t_p}#8R>>O$v7W zXNsfv)$AoMB{7;+FAYtjt-kKhPp?^;O5)xdIKJo+p8j3$Igu4>2HehhZRhfQFbdkVrahmVK8owO%c;8LF}8bDd;O%eqz5A|vDHd(~ z4e21UGf?w3pkYTwfbxCm7XTaQoHyHG(6!0m7>ZEGN8ADAp7W2#EL%IU$<4gohX@l? zD_u+pq(RF=x%iW393DqK?h)FNZ`Vk0m{r$KlG7Bf<%5AzEz0~%^4fzT07>F38PBbk z1qE!ox3<&c8*40YFx|Iq&2MAe0h}WkSVWq1n{*6oq!`C(q8ZxKvEZJ|-bI?i-z_G@ zA23ke`8vbRmPm$~>^wq2=t^>M2S71Ohq^cZ%xdJ*le0G&5exx#QgP|bT`|zCeB9Y= zcd${b^L}nxrB`;=+dyVgQHgNBegQtOv>^){#w#%HB_^!asD`*A-UlPbCEmJ9%Nnu5 zn%QU;{!}FfMTtwjgouNrYoM?#p^+$N8MN<7u{c)cfV$`;&8;vT1u&$$clnU2ivIC< zA!``~;$A9;*bnMvh=B&KwJ7RI_X*PTy>5N?5)1X z8eCU!tlL#jwM|X_)0dKm@{KV+RS5Sy3R;{ zx!k%YgqAxhJ|HNY^J2lAaaM!MwrS8Eo|GwD(2W+a;GDqR4lCzIfVfloab!&Lg1%+W z6?6X$z9x!tJea0hU`heKv|@j{AvQ*wE?w!(Ba1-Fh>9N3-8M@2#|9vq%r`J)^3Y ztRh}sIrI>LuUsleEL3DY1cg75A%(aw$l5LU{t}h7VL~-JV8g}Z$mn=HkIn)=jCs=u zFdT;7$QW~*sNCh+JM5Ss^&GQNjaKruTG5PBpB4K&L@JJi-Zc9-NTXzd-dbt8{&HYH zq&AY(QmMeQis9tRwT-75=9;g24Sk!goRup349G8NMl}|iQS&k)8{2YueY{tV4;MS~ zL5Fv+_e>z30MCxDFpV*bx_M$Yfu88aN8u2p%-xc*N$`N|&iZu{8no-^?2Pg=S1wP} zU%)5C^156R@gnqa9^T?+ST6GknlAK7Bm!BupOES22F2ozT21uf?SzK71@n2|-}`4? zeLf5~OtDbKY^4{6_X$2NNC?7HigyhdS)uoGzBg4QvV{Pe`KnQ#=B>C9Nn#!E&>G)Y zl)Q*&_7?@&34EHlOiWYk93LZ`bE+g5s7+jG7iEn4UW~u8*@*g6os&)0B;pc{nM0uw z_h;s8-}}0yoghR-aEjha(j7;a{@aQ_h-~Yjv3H02M$=esj(~>s&n2U3@lSgd2MJ~E zQL%b6yiRaUN}2O`FV%g>$9D3@@&+HrsdJja(+H0`AVkv;D?2<1!Dwd##hNwO$S3{Z zcSVRaYk^5Rr}<4adSp$YsEi9Hw~VHBc--77Dz-&dlk+(_%f|VT-LrU zUu7%;oXD+|J)T~On!bNtfoy&oA~J#9o0S$xj^IvpG^HXKmjY}uV-;eDl93zq@ZA@x(6s!p zg(fpaXC%~CGkGPo;6u0@=NfRtX_Y@;vOTF7(fKk&A6{i zXZnw$DVzjXQB3_xs@Jv43Jy!ex8`lQyPr2s9^5%MdY_eZZh6U`{oNWBGz5jXt&X=L zf$C64?^{2F@G|nqCptU1aNuT5!AtAG0>I?72r+!7f1-UwMmpY91^!${E#Z9Xl=&+3 zMeo^^q|7-k?&ztK)1jO&N}3nFV*W?4wwW_ zOng+{cuHaHh2+wM7wcF(8YkSUvbChss4 zJyC=n_3JlplLY7RRs3j_GL~NBfm0kZ+zcB-ebBd})J-m`3_~8Rapm0e-f0 z!kcgLm#FCZ8?=h{zopFF#?eXN>OZdJ5!PDF0qgyiF25Un9Csbd+KLEQuhyzHJ~-xC zT2|<`Kc8e{RU;YLeDsE~M4tc*)tFC_mkYlVb!9c?{Zz>RozviA`Rl9K(LSL$`5!G}d6+N5`ChsIIx$FqQvN7ppSMuWl@ z(^5d?Z;a#4jd>afA8&dxYUeJ6@?W|lAf7{krAECY0t)wfn%8txsDvYhJT=DnGg$H_ z;3#08;Ix$8=A;PJVA5(3P52Lok1Ls4!D-94yy?hGMcT=kM0dgUIms6cHe0iua(DYb zl}Tpv)M(s(Zqbc6|2z>S`(j3T%!Vn|<}RB(HXeW`Y$iH7-#21+qDVg6%skwac0piz zI8%5?QItD^c#|g$$JLesya(v;DER0mO{ehuWJymwrTpHikcKsjeU^Ks5(*1F?RNh9 z6@etrQ>;_EvNAt!wk|qxJi!Q3rt{3xBm%E>q@6aAv~g~4C17yCsdDZT&@nwv9%e2g zq7&p7$rugIdnGav7)E~1#J&_FezMKdmkG~(elxMF&s7>N1OL4MumgB}(PAKUr%@0o z6?1(9=wrry2c{t=tFM*|-u)wjdMHKZetriQkY`>DwJPP_KCps!A7w7lNE|gzbU95V zzbWBBjLhfW*PEw@cB>!>F=2VEGg#kRAlV4=kD`7eey<@VSM_y`AK@NTr<(+BIl3n? zC&0r?6t_}7MdNA$lqco@K|*qlz$C~AA}^E#s2jHIk>>T9T40WWhU1GOGpABG{&@ow z{izVa2nLoargW}5by%eZV}lQVWLAhCSrCfwxw7LgDlo&b zy}7AR>XgQpg*vzF zpgYCb#HPE?DvXTUDl4jTF$P-cbB`I!R-qC+$CqM~F2k{Rv(|BG7M+hrqy93AF@cnH z*-BQOe$$b@fk>b9ek&YI73WZ|#l1Oc8P^W8`A~;WHt5Ek$+@EMwkR3tF^99ua+VW9 zi1Yu6FF-3Qc^E3$VlZd?-e?UJK-Rgr&rs z1Ws6~MdqtbgQ9DqRL9;fbFFzG{?-g!oEl99HpIp^hCUm7zhgnU?vE)^wb~$p(@JtB zl9iJ@z9BQq>z6p%pgAsBXWK}%a>%?;_8O-8SDR*yzW!{BNZM zZ!|FaV;r>hgT~v~1&j-!?PKIVe%V^fOV78%$Hb29D3}?0ABIe{I{tXA!Pr<5-MV5s3ecp?A5id3Nv#`;4D=y zjr2))Ll6*ChnOk$kPw7_3O9*e)TE1g^4Vn=Q zi19`ul@1M*oHRo{nlwXXn#4-UnsUEv>O|5Fm0gax-GcOnG#gB*DW-_ay)Qsx+$SCk zYFW&(W8e4^Lza%#(33Iwo3MeE89`0_fZa#o;GRS zx8an9{xJa;)4bDA8V26KfC^ztmLB`c!9P@G`~mp8vaYCZWzeoZ6FEG-{ubg_dIdn*gw(O|D@-xY?#3zPT}GX0 z?DsSPM41ZM7CVD(2s9=OES;ry1h~uTP?^B~aGkXvTq9y=qk{uKOAg&i*Q zZ#69l>$3WrAqkhf?0O)uEA(~QYP`9Be}<_Q-h1spOB>Rc+t0tf6Lq&lSG!?WRVe1$ z#I%9A6EMc0d~NhgWafOq8ItTn;961d>j3E|;lw#Gk7F;O0M_Zhm$L;pYBcK$$q2fV z?q&D&CcgazE?zS#2yc0|)HCMo54?0HPpDF(7PF7~QPrK+>Qrfi6z+;E2CKC_TT&dC zHnm}B*KxD?8_}u%ghh?_#GF8y?K4oM_T2BFlULE_n*>Mi=x1Fa(mZ&ECV=@$y3}Xk z7bL@08zC4(5Xuo7V|IsnIl=x-qk+9(h0sB;XSdD6Z=~x_p80*bAYyi-tcP% zF|=tn#)Lr!So0P--i>CRI#j~5*JYL@25$iVvVs#hxLDGX)2}n zK~n8;!5s%&D87aF-#8S5MoS zR^%zya6kfm4A}?n{h*69kOjbmeBpw!BHe;6d%*-gFKk&*!(|KE!ah5YejtA~(Z_F( zZH_~+ecup8+)WHC*ZzYhYNpU%l0+aQ}12ECT)NMCXCg|)uxlQmf!tiXJe^x&lI^!MO189#){lIpia%xbehIshqa zNYL$PFd}yJFBlMpX8gFE&~K&h6dX{44QF*_1hUNtZe}VbG8)i2WYU!xZk1Fh@YLB; z-(n2RRS=0gZ_TDdyG%O;f;WdPcY5sqjU7;u($GBZG&1wge8-M<{YUqmYfjQ#R<_?^_Qn#H=q zr$hhZ_9zLV{3q6oWHh1du9ZgP!sfaSBORL;>Xs+%Wfxlei15b~N!tiWK{Y(w$@7Z4 z?j^_DtB(~1I?2mdA%`Yl>cvB4h7-y)g}CJ>VD=qGz4aH%t0{s0HCSRouhR^-$1RJR zzfugFPyeBAd~CXfwst}rHd3l74UCRzvk+uXcN7f!2CqAW3?^r-@GlG2>!-%e1OZ)Y zX8GN*DYO*u-4Db22Bzzg5ASY+#ivv@7k7d-54#Y618=Y7UwkTTZBthL?Z-1wj zV5p-%o{|-Fef;6!pqbK~cDP6Xi!1^5KMdwaqOZf9{}%a!5YB0Yzi#{^_WwoXTbVol zXLW2#UE2156~6036`mGQTvKyZ2dFjFri0H9#AQwrE|M>oWPLA$6eK}n-**QiB1uSI zCh?0r;yh01(2o7Vg#DouyOATloWrSkq4F1{+a#eW@FEgEU0?32TlLv0H$s#;a{DgU z6r|dqfg>k7vEd*KQ?Ya=WQ>&5b)hSY@vPLa>_9RlbqH6LjC<5-wWrU>?f790-mS8!RJoUO4MJs7J|5DPzJxp!xX!yK z&Ru&f;fAf1_X~$E4wXz+D`@@5-~`tNdsrh6mHh~ zA3e@%-c0Lzz@70j*6%Bsm^^h;McL*byVWRGdF<|H2HQ(4ZkUcS)U9;yIy^Gnxc-yV zmW3MF-hdiLEy&TtZMH;Gqq&#bgFa%8RYg6_=VtjdEAs3(>l{~={S+;eN*_f-yCD;R zU4l#h^|qqE8kh5kP{##7U)ETx+;?Zer1wXB&_G&APZS3jr-olzH+sMooW7~kV-Vbwh$gc zWCJ@t5reR^2Uoe;7=yo`Yiu~Wn+e59vK|V$R1+x{e)jqLj2Z@tv#ct2E=+5MZd3K} zX$A_%FF0t@M+cfXS`{xWJ8W^a+9kpK88Gj>=75F=zqW*lT9}y_`aBhJW3c0nMNFbf z-`;*PuRwN7Qsg=_Pz13dCSnOw7C3`2E$;sdz>S$0q~ zUcb`X$5b};LPEraSwk#X*Da4@snNsc`q!#+lME7TDMF6cMf>8M}X=d)Ud3e^KrOL7G1Et)^A^! zT|gfoX<@tpz1?7jf9VdVkqa9;fcbb|M;3)EG7qChd((vRU;s&S{V!Vepd9-KR)HZG z>Ii`@Aj;*C3vH=*Uxo(x#%pQ(lK*t(4QOflVS!&`EQ^mEnW@VQ5+Ob0*0-$Lg#55K z?YY@j;XQ2_;fk7h1^otjE>NTjCpM2knINv6>UcfSjfP>oc_Uxhrhi{s-`igTw5p;?BSe-VM!GD zHS(ek#w*#pej`A^<@hH+J3~MS*K;sP?p@AtWpHY)lVzZor;|FYN*wjCIrg{01t2~5 zu}o^MUm4);Ka5^!=d5H)c&e~w>H!Mx#15HwT69LL%!Iu*Abas=bU03Rjh+A@J>c96 zMnJE0ZuxS#(l!Z&4juv*Ru`284ta>y%WO+NkuPv^D{!8=z>L`V&AOFpgG7*NGf?FT zpoOD~*3HJ?F&J1J(>Uj;wV#VL)cR${d!d*z{>PXsoD$DJO1@24WtoTA_AQ)DrkQc^hHE=au^e;wLug-T>?jcG zsNm`-VCrb0n(PQ0Of$4*w6o}=GiA>U9;`|@g=hb`66J*N9`G9BE05RY2I!^{5~&i? z6mpYf%(gL)WQm0x-dl}!NGdZ*m#y}0w=Slb-9(B_C71&o_>NYPtY<%LORa4Q^Kf=ZK({1Ho>;c3&^WZgh})pj_3%?SRQ`KT+=|ia1OVQUSSO4= z#qpZEgQSXF`k$U^y0&{0@aqwk{SNQ^AMUWDvA%=hf1IK!HEY`qR`~yHd^FM%7e&nK zZ=~ws&K6;);7bRt^?|yD^oli3i6F8hL|px5)^`+$oljl;hIY$M9BvJGddG~bL?jfR zHP1yGnM=5-LzO{zE9ILpOK$8mq-oO)+Kg0WeU!oL6F_oa$wzbAKW5 z{xNa>+L&VedKwtm+K}P!Hc_T6M5@ejDKnB_W;C=QOeXgMF3I8CEr5_tN5Q`Q#mk?9 zB^vD^Ci$JTn9xWqM5M&6gAdjRPzt9+ja%7vfnT{gu@K$5-|Y)`NH^=@grqDod**Yp zf7GHyAP5oFmSD~%k|l&oD8kOYo!x|tEzCghp_3D};`=kY`KwzZ(H~UWZ}#P}fTJ!6+X)N} z5UxnDjugv>I*=p3gL^Yb{s}GCbFajuk!_bc(+Xph@hH#ksXkIa-~jS+X=AY5Ip`mF zL&|byI1tID4DA4Sb=V88JXjsQe_{ftCkrNg8XJ@4!7Ml8=6CETlt_{|BegAQ&-DcG zDK7}FNfUMmd7g6hoQXykh$rkZOyCZISN_Je100j zDTInIU)Y|oaSIUhk8M&o$6H`LP%!MhCus43^JJh)F1K`kV=wBVavxPnZ=W6PE%#;M zORm1%aIumGycxKI9&rJR9FHXE@rNVY;eu&HfEBDy040V>84f{ht4(0XS$r!Nw8_d) zJ5sF-JHSUnY@ENN4JQjXq0w~if(ti=l_?Q;wP6k%)SP~2Hq0vQl*l+x=x36L0U66N zKueoQGz_RwZ8V;$(kqIrYX@e7tf`R}2fvwh4%?yGxv{Jfg{<|5*ueoH9E86ujX@CwM(KUtP-qG)>{?CvXtE<5}(ZO9(0 zEpn6-tvlghqC)R)TO1_e0)45hrfx>aM9F?IFMUatMuwyG5w*CK47vD5`mF87~T+g?xRvDD8wib~F$gJV%Kb)x*=R zQ)1$Q*}5SK)@F7M!Uo`F-gU&awlw4Fe2h+wq+}e;RmDX0kVsbE=X?6Y;AgoWUeK)P zb0s5w2@mL%KrhrvNKY-KcvTySn+1JUE(Ue5RQ%fRPaCGg2ZZD|ZlGsDO&Ghr`Q9aJ zSx=?bYNS>OU!yeEm#60tOYp)Ui#Y5cFTj8R`7*X2PS^b=9`I?VQ&qy*lJ2=FP(=T= z48#-30J_NHqK#BqTV&+-6iYbfLQUIN&n>Cj9=rKuUE+aw?^ILDgM?4^#mH_wLG({$ zkhtYP-`a6@5swjGc*0|%eS0CB7EkQ(qLkgslXP^*nSWIQ(sBUO+UY-m9fkYbB060z z?@@;abI!L?OZ0Kq(L`JSSqq1u!gxD3Ku1_=G%9{iYHnkwQ0rLR3*L_mcTy7=Fwe21 z#$A7Ta#3`3DKR;Y{yY5;#9jNUWPJ@RChqc|1I*^N!p_~@+WO6de11N@Lg}k*X-8ld z#C!UjTj+bUF7ZNo1>S$2IyY%+?{@~$r@0z#eJcQUFJ=Gk+An7OIe=PqYo>Cg!5P^I zUOyg-@rPVzJe)PsmRzSeJTzpo3?VVl;ab?c^2KjF#7&oS*clFz~T7FyB z|6%t!n%TPk_N*y2$^R(9?q4OSLrqL$r9UIG#X4$;#hd{wz8h7sP}ltPl6v=1u$ z<7xVeNHMmyrRg0;>|nw^6U(%Ad(M|&w7^PZDlTv@sC^eQYbuXoJ%IScon{pmgJY&M z$Z`~5FX%p`=0c}R>QPkMywSOtJ|kgv%~5k;N~xxS1KT(m<>&acHWwDcS|v75Y1j|X z{cZ2#^Y+S4lnMvu3WsBT-#=biKfd^3-Je#fkW0}E?J=1X*?CJ1(jG>2v*Au zSl^f{5I3Ujyf_~8jzL2T?6Yu&%qFg5L+O(%t&_Z)R}OL@A+q}_ID~N-a4g)%sIcH9 z+afjCOAfLtpDT>dCxNf30RUWUL=Nt*`(Podq8zS**^eMH!3W-Q_I;1PV3=u8T z2u_;7W{4H$q;o8t5EOutf$_%orqX*b@Lejc9J;uRKZ3&)a42uprrjL_W48YoN1_)H zW=^WhS2wG$OZU$<0OK>u_C6q7@7P*kFvFO>Sx^zV30erKS_X5w9^fLRS-7DyKUnX3 zIR@oP;jLngq24?)0J+WY)Ee7$OcCODq9^@2>SZ54{S~$RG1fo+P9)=>mHX22-bmU_ zP^lxAt>l#>&MpQ&9*52hTVW+;Tl?*zsyH?t1sy@~0AEUPz$O}WL^$7a=OG5sqFH4E z%w%r~-gNc-euLCPyxY&`5O5Y{QV?a_ zu;f|=ntoNg<1W-7RBKQ{NRdhT{0B#+8i!2i2zw~j-elBg+z67Ys?vj!*{E`I-I5|G z8G=1uk>ay;6ft%~@-`xhYy^vXPd}rC2LgyAA!tr`fs{s%MTzB-GZ}<7s)F&rT}f>^ zU!xF009)WpcC7mmLJ=p%rIDc7Dt9>yFwa&1b5#?V;XuHxR7^ccWYYCVr+1y@a56Yi zva8%v6qk192A3AtU$Tsb@g7=DpbdBk-FUpPfdf1igE=ncs#FYG7@gdo{|5gP#hn64 zl(7%TDh;u1p$?YaveYQeL74iS(6(O>Rj4ACG8odSE~%DhN-Z3H=b%PeC&WkU3z07* z51Wlc1vL~4BwL^Rp}~m!nsf8{?f&d?|MJXg(q0A<+UvwYLj<%%mv`0`JY)o$HWHOC zsuLDihf-k$R;Qb+->{V>zv=F4%r18PEgn8#8S(3fjG*)9YvJ?#`TTlBaMfOh)HbJY z9MrEK6pgtc#`R_A{!1=~Or+p)yZ~w$e@@#jX({iJh@8b>=;`WUVQp&aNKn^XeI_?g zc#2_5*5Lvuo?2wIVgMnayPful{Eo@g>31Gbh1IjoDe~*w>ptdlT}i#EHy$w08GO2V zVRa6z*b{i@4dhA$RO*KAA9n}kM^Oj0-loJOaI;eg-3VYP@$k#6TOAR@J<=r#U(7@T zYO-E6JNRUFmw{G)Z&-T91hR%ZcjDu_{R5QClK+&Y9rpY@>g3+mhE`0{tM(y9U`jil z+JV#TpR6m27z)IGkwcGfOt4uCIPlb)v;+Kvc?FkJi~^9q$5XH#jp<`PRwHJh&uSD7 zxRY$Z#5Z%sT?XTur&=eR_J9y$qkij9eO)sLWXv4Cmig$xrG|=xo~y4 zAM=0#61j}3j89>`r_}XNG`NvofkIcfW)725`RqxrH}ySCmR<}euB7H{;h^IFSf{;J zweWDnM~s4M#pDL!t|Be|)gS!^9;n({9>~dbDt>tL!i=`{W(|HTp_~M9rz>WPEF?qNyC{Qn-402Y$M3O}1{7z2lQ9+t7k6 zl)1G4j_edyd+X~Wb0En3V>>!`rjun_EO!025br1;3j+#-LQ|Uk%j1c4&BXDS$$HK` z!I%m@-D)zauwm86;b;y-sr&cNCJlyHY~lg`5b_c>UqbX^uy5FhWl(+i&3rCc5kg+D z0x$7F69v+Ar(z`K+Cp-Ng3kIZ*fOu6!-md#vJ(el=%tv-|ev?9D{fEcM?kI7sQ3}zY{agHvj+3OtOk~m%`~jBZwr>{9Y^1tkzpQH8s(3KPl-5J!W@!bSLm|cP9D}ni|T9TGUR9_sX%Ad0r;czc_e7&H^GoA4 zHC{!-eQamz@s1BE05LnZXeW`d{;GD~BCS(HVi~~&kz^7FEX+!KMK{BSfTT2_e^x)L z_w|d~+?J_6gZm=B%RydnkQHVXqDD;jFWIp-qN!SfplYv}Tp1g&V=J()L7rK0k*Nvw2t-dMi;ZvUUvh`8l)1ZdzV=Skwtm87I4sf>Jq6qH}gZ^c2GA*JIf( z!Hq0uC+sdc#y^gEuh94%5VW|b;rc_X;Rgkhg=ANX-;e!qv0~5}% z8I0^TO{2h)6oo$>lNCqOU{)1s0xvddjcz7eF-wjd;V;iTZ6?k(lB!Bc^2+_eV#WQ! zdFZ!6wk?{TkQ_0Kt+s~+I5xAT&zv1hqXLJs{eb(_> zC+Ps7RSyR=4^72dXH0u}8Yip|Swrx45}m;f+{-+&y(PjpLq*b25-}H0O-M8bk4px( zM6}<5w&6XSo%)ysz9GbaMBNmRvS0fpTLs=9bYbV-u=wQXuLNw2E^XGg5HM@0ZFaZV z1fuXnds^eq`QwmC7ikL+s_BT(Y`H$Lx>iiO?jE( z1{@)xQOa3yoblg;EsItzRbj~TG#(VGjGp+-*tlvfU#aTGZS}wsmLb=mUU-A&gOB@r zL6p0TlsVRI#L27X=~4?(nAr!+F9u*^&ViRo-c{#5FRt)#GyHG7{>0&2;XR(1>fq{K zFSwqjt>d+P^Xew(ho~BX2n_OxjjsxZAdIyHTRO%E{pr0mW24k0_WS&0r70EEHNy8_LzZ_BdN)6KnuElK|M3!U?j@v#q+I((d zP7@yYW*b)k?sKr_A^4z#!ggVKi0XN}qNG{tpRm9mP zLc!7ClS#b6=AFuVG^6{PMJAps9v^GQkylVj>74Ek!Py53j5(TL7XCQ+qbm>M0k5ML zejOsvpMMf($2II);13-&bS9*!c5L>;qaP+n_SZw*x1XUYtR92f+ z+}l`T5f1+@>q=!-_AyDc4QgjzX1Ca?=l4Xz681%Z_tTv08wB|uOp4t69;np)`(u)6 zPblUC%RY)bC^UXuMpr(_k2;JpV2+dTh-a>p#IeGc!qm)3htjSDfi&wV#xSH9 zyy&-IkLS%8}_ADqF$Oo0n@buGxuC2P^oE0~4k^8+<0F$E-_J+5c%9UY9qdE9ul+PMXQ>%Xvic)vY zhX1v{uh?1hkv&Bn%Y*xD+y&UK%w4Oz)H>T$hLp!{xxFa?;8=2T>_i3P+Yk-VdR;+pX|LcOU%Ccg-$ywDc0g?{$EMyL%D{JvKO>$Xv~MXs zG>TfounLgGncGsa=6`2M2!Gvvzzk%s(A39pN~R@##mQYAoZtEdWpm zQ`~*WO3Cy#+e)kEy2Z>R1WjL>B_}G~Dng1?E=u?}P0e8{k*&mn^KGu!>7(yQc7{k~ z#GNO#Em*0jA{!v;_rv|??!yNj2@~vJH_TuV*Wl9+h=HadNQt8JlQlf-=MVfJZG;g+ zuBE)0gJuBHo?1K)KmYbA13fVe0HkOl^uU{%83&1miJ=njs?F#GBH)M7ZZ@Yv9lCqo z+)Evl%s)u(Fvk)ExdgWYvppDG{E1Kk_VvW5Dj*$ahcHbi53%iejbHa@Ia0j*BP? z)IUjeA;SH9_DV}A*}Fa&w;7}non}bfJA}CWi&rH*1d@(1vcg!&T-4I+1#vh@`AFdw z8uQ()x0#IvTJUc+)E3iTtIvDqba;;K@ZXe1HEZ^#33M*;1><+mQ_R$#+jWPFig_wM zg&5sXXxrZs3|&9gsdW7l3CvbLZwyYV5I`ZSC!#AB8TJ}yHXQUP-ro+|gRl2RsSLQ? zBu2?G)VA3V%Qq%%5(nqAZbSMc-;=x!1YcRvY>>rB%Ux!7pc2}~S{qfqBdI>gsoRf* zl~(9Q{~Al$(A-lC%v7bMRlR8VT-(NB{?Hlp#<5ttNN<`8q+xMZ z31f;jFDRTf_IzcJ$gCIASbf-e`K|is_|8P)9ejLel|5wsqhJXN=Q@!ZPC{P+jYZsf>Czg*5MStIZQ3`N7_3Yfhv!(XFNKla z;s6D4^atdw$%||MnwPx#`!~5X!D(8OR5^c0k!tdmEHT}9hW92{=qXxRI@enU5p_~ZGdi1a|pOil(2f0gMk2EsC6tzla zP>kVEy7r$LI4nXOxbrm+_MbkLony9f@I- z);weGrXTmmUy{@$Y*1ymY--h8)h*EgM#{^Bz^)iGV?h~8SSn%m=vCHWekEpOsY|fm zm8(dH0_n4^oj%CEsfbV}8SnZ}MeIqE;>>LNw2%YJ>?!qOSv2yG4hDJ%0wAdGKlV$@ zz7d)0e0PdNcJ|-mOP|Iwx_VL8P~y%*O!1LcimS0e2kzz)k${-e7r{N+!9G%-$_cyq z%UXfn7*oaAD|#%AWZ9Sy_!K)B`>Bgze_c5TZ3EMm1NPSQ(o|xRsP4b--wm96O=VA` z0_!@H7bv7xJ^o|}$EcA=%SsEUN#1Y#g@`q{Z-$Uv5xRu|&=B1m!dN6je__2$VHFNg zn$R%bJP1Di5}~hf5zkSOj+Q6D9wA;$KoXJ>**?%LnL`CaJ%VmuO5ty|t&H-BdC^Gu z6i&j7qObeNgK{S8@Z_$_kb*c!GvX3Dqxg06q|-?|gS1C8&4w0}woVlAzk-j}Pn|jr zL7T=F6#1-;k2sPAaDcdte1~Uv75wrI>Di%O4Z@ca?1{1IU~W7fGwZ(={_HP@!N|!x zSoe_v=**`<M_(m(xfL4v`AW3FX=%0&BfW<0byWo2>9`Xm2+1mnhCs0_)NJ?Fyw7v zJxUq#r^lt*9mxVnBm(**o?eWd zy&qv;S8B9pT$m4z{S=(HIE&bJ>}aH$`?rxWvyDJVU~{V;A*d_)O9V@lEuXJ#YiVnK zxroGO*%B1zlyi6!-E>m5=NjpxEGbwytD!U;LIUX|Q2``189RqV)d1AU18>JEvdy^^=pCU&F0B)K}93SzJ>6}v1j(Oc<3Ji`j> z0ns3^*ye&lIzd3N4uY5o8>@+$YUc>iL+6~xqzo|?p?eB0Uat3YP#K&phAlX`**-gX zzXw`xNE}T;VReij%{X{@&yYLjTxC*W11l$Y==isMpo+)dVXh6Bq(6)q45m>;{6bUABC9)_5CKsuC%$!Av<=rk#Swege&&1~&JByc! zNl#7~I?#w37xDe1FbA$p!5!pQP_;SJ53~dD#@ca1E*m=(oMFoVh{1>2L$DmJshf!w zr2DuocRaZ5zwt0`ySNcuXo0Ep>v%+LqOUPqj0yzLhGjB_#hIq@DK(wJu`NEXT7rtp z#yCF|M+}>pxmY7-a`CVD|9w;rEG$Wr{dY#@(E2Zi$$z4wiKVf#vAvy{rTM@3c*A4u zv^Acv_e@Quqyu7$)!>8wQW!}$l0uP1nX#DA+@sAj1Qb9RfePUOsDN}w_50oFg@*wE zoY>go)g`Gw7X|XqJ?>+N7dE&4foU4!>nT02x{W5I$$MgBhE1Q0F)DF{C>p&sZ}`dK z0IVP{D$XVaBrDu4R!(DbjnezUqaSb3dt#MGH$)SStYPYdGcfe*)evAVjpxKBx7gvEHOqEmjNzr#=J*?>R(Caqh;5h=6Z~>uRe?>%ymFbC*f)UiTF@mOTQJZwi2Q~nMx{%#)WgbV~z zp3G4~_#My`$9fn?J_J3bj5NRk#pjk%)R(5#w_#87clBW`(@uEO0Sq9pW`5W3o&1f8 zulC>At_%1%`YxY$;?-U*BYZAlL$?OocQNZ_KX16$FT1W`=r-Onqjw*~Y@NM0L-BfH z&){e3_;epZZ2)lOFME4B&tB+c{#Vj3z3e=G;QC#AuXP_s_?m7G19YE9g7z#x0r>R; ztXDqQu%kAA;rvw?K6}S%KX&fwJg*-;A(Rh(WbeB7dIneMKZbVS(+7f{t_I3q_wWIr zc#P0@UU%Bs-w+UkI4?)b+;$$$vDB~!OU3YONBz0GaP<1j)z^rHUWOoETo!QM5HDx$ zu@G=w4D{^3YQyFM_UOL2@n7q}Iq=Z%;18_BU_I^YKJ2}Mp77*)Mjr$k31Pk%5|O#8 zxv%3KX0G6k0l=ONDf~ewf^z*OQNkv|ArI!U2WR)(Aa6}GfNvLgWYuiA{$=`PC(D%4 zY8A)?DH}N=B#|k?2*R2V%aTi(>Ce zFOj%t0b}e#j!%j$0_EfI@S4soqWzO2b|(Wv8nelfy7QVzd z%7*y0NB;zq%0C%*q<`sf-vlgnG={Lf$19hVf40RN&|#oNBH>N~os)5k%6bu^DLU9i{cj#uzv6ZWPvXf-#~_>t3|*VpIyIcaMBo zF|NTHJY7K|3L0h8W67sFA?@KO(mdEVGG;n_I1I!0HSj$)#q7jso}&DSLFpsO!Z-;0 z2w+xcfHK2Qvu9~3kkZ{_Iiy{!t7Bo8n7(BoXC;A}Xq zSdg#;IyaPESE@{Yw9q|t`?jjUc?d7TH2CKx2v&2FO%X2WA;bE1ECquTq&6Ke)}j`J zUV;W)gd27CtiOumt{$c$qB;DX7~`+Qh-_7Xd44Da&LmXG`8H4~GSlf>w-v^`ILDzP zw&?;Ta=S6Y7Zgctlk&|y)o7d|-4@!EP*sODd>e)3Dhq@|7~;L3tnG*$3wr=Bs4Ru%eg&i6cDp;I3y*@i*Bg?J6!rn^-GN6kiu(N8x`G&eBis0J|)id{rgz0<% z+PxP<;~Z=y$HX*SwG#u}k`tsif}xC8r>2Y!&h$S)C1sHo8RJP4Q>w(cR;1_(ON7;fmb zG7m)#WS6LaVUco}=fxjPxmcGX7~q_09EI3m5?GsI2~-v_I5*kaiwmTNpDPKvB%S9@ z3NspVkyN@vjgsZQ4c3Ipnb&zU@p9%XACZewxGbsbH-%z9&b89=sVEK3%&sV=b5ggc zT!lp!nX!cI4pko{*3_0+%RscT$VDB&37e^pl-T5ZK(VkublPB>FQb^j%InctTG@(Q zJyD?5_6LY}<+0Hw=VD%kpwG0=1b&$yBqjkVnL7ehns z;XYL~d}K;e^+iJcFVqYVIi%SF|#w=nk7pKWMwqS=Ryh=6@}2U1-V7I4g7Xy5EJx$0g!*uNi6(?W_}51I_!!%cgI%&k zH@{CL*4AbQ#nnL;mAMRT^9mCOa38;~Zv3`WRu^)M5|1UjYzL<8JOc++^BFi@iYS>x zm@H`@I#k=FMT?0RDo?dl(9oB-QH(Tts`2&^&Xn}16cF=h%T*Q>2WsW=hmpJ76tY)` za2n)pyyZnSOI?UVhf>)!bE`8KS?7IJLHa|HGUy|G@!_4K{*u1Li4d;GcAN#h*+?_y z(mM=+z$xdZF4?tIjhbATHXHU0X<^WcFF0=^VO8QK1P>fJ(a_|ZC(Tu?9=2`Z&kj@e zRe>jC9#XSaF|5(o3vlPC&O2+Xmgdzvu{4rwAF8x)1kC-VxVF_YX@t1raEmN#b4y~A z?HLl0E$uVx(A=-JrIdT0eL4fOh_DHEVl|eb1imgOQl$~=&;SZ5ucRx;Kw)Xn7|Yh> z$E!^i?y->yE!*Jr9XHiayW~MQA@B*O{vya-O~iJl);pDKmVW>l zk{$ucYG%&rKkC?!=V+xGMOA6d14!EYmjHma^m%tL+Amx0@7$P%{AXBi-4+Ya@0o1+ zW7Tk<>hDriT z){+Kiqv27^XUS#(@Qb5sr? zoeRwwWH#N(9;@G4*lt}1p+fBHUCdT5$&AxjlZn)0fTb&5n*nS2OG?<@!x`idh`Llo z6coJ{E%ae%O}#e6$6GvPL#wQ8!@XBIMjBk7hYA1^##Dt6443k}`Pq1SgJDA$1Pq># zpRfg9*~D%k=k67XbAt7^ud9nF1)Q(D-;nI)n=%CDd40s@z}g)EFvC!2`FCOvYYg%f zAE)PsW&~G3gsRx&>B1}VZE0FdeE_p+E-dEfttCm^YsjE>DHOqT2U(OOy~<5+Fz)z| z2Ne{je$7KYhbcBu6@f`2RUY?1D)gjYfz8MXAQk4*51qZnTdS(059vYDH7< zj8J5@{kZ&GKnZaSM0I!sD1XoeF!`(M6b7n9!dpI3n&D{r1W3jvMS}ANWvplIQ?dg~ z^AkF~%YJnx<)(#sJsNTeE)4;fCZO=U5zt@|%(^@m4KaHhfl=47HZ}nYZpCCC1F#7v z?*vjY?eiuQ*!l`DJ-O%JKW2tds$!gJMP_Wl&)g+d5c<@Pr1%^s2F;xL$_x2Cd~K&J zs!$dgsqDVG4c~$1_x0z)2->IwY9(q@{*+B<0`NMSv@1u52cMRQDjFZ=9U?uD7s00S z!H$%B?@T9p@eL{D^2n=@y`k}yuAeE^fcfYHZRhTE7hyNwf9bXeIpzUHL$NjYxhxws zX-2jzz6z=-7)F`!6D_=};Pg2VPRKnr3Df^ko2Zjh#sX~L!%EWHm?W%ElS?wO3(;2% zl=JJ6{I0xpo&fcIlkeE8m3{HavZ@2WY?9dJ#FI@kZFW3z{xbEeE+F{U#4r-E&{QjG zT-J842i3G2i95#|3qpJKmS3@+@(@6#|FM+ak8?Lh-~cmQ99{S%ficMrpZc6)fNCx# zU%#s_bptD^F=eZa!MkacFNC38Bg+=@d`R}vv}k}Z@jWYWXDsP<&WVf^q6=&T$zB&; z0pjdE@|L}~@Yxj9tao!vjhFCN)yvVYjAbiQh6| zbMKSFs=VY4MZ2MZGc=Db=Z`q~N zyOgz~OGF8o9%bA9#~^T9H*G=NzBY$)73!)xsBN#*{ehcSdp%Jtfj@~~8fGhmjPr!n zMj9;_v&k@)r8PsqVXb|k(_H)xXB2xAzPEsk2oBEBeX zhFo+{=xYs57jaf~grw9SnhKV;#z(dBFN96(h^RK0gjPv)gR;oaiu4I)bI?bc3c+;v~z1oma(w1DaG6?)Q z2Y{ipn`YA?E=#^uszQ;uKxpsb#b{yL4cMfJw9qe!)R)!KJZHQJY4g{pS>;oTm`N=f zEoDm~h##IHaT#WZVLSe2D(DQTEmx?Ji&OurB#B3-Z>LqD&WKgjqBd3J-{pU1Iv}im z6;h2NZ+C`V1;{l#aqUQ#yIZTNl7kIsp*gRjd&eNTME=MvT5}J_1`P0OjRi7TfsZF- zY8=4i5k-uZU;n}MP6`pz;T|vsD7QTg`FGfHL_su|Y~fn`rNs$C(7*>yk@${oXK!PX z{OniC)(0x5bd_(@3z7A@UfgXNS1rWkI&pJME5-8$65CKZ89g8>nSZswL{G(?A|R3W zpd=}fYG9CNYuW-fOyOeL_i)??e#5cThrE|<8BnVuEs)Xn7*{W*pjHVQ(pX6q-Di}c zqXw>p<%gdZYPXErsGv-3N0zj*P^YeUO6;sB8lwk)@7i!^61vDV@y0B8Py&7xWo;+r znNUCck*!M#%_|XBvG ze&(GnU0E9Wk-gH|xQaRww9hm=L3uSdE=n|AmNsJzpFpY=z?7RXR!ny&-8I*IMIp$gGfZuTZv-MqM&p?RA{tp`fjA~@Bp>EV8TQ8-%1nV)A{FY$zvx&55i!`CSZJ!L@#4m?{B%;d zx1mI_;#uKRRjPV|dvh__K)1IZsN4i)^~V;K#v_@h8bOF!>IXcsIzwO8#6do{M0%Bq z%imTXHH@r9U$>rO1MZosPrj&foGjqkC+iwL>1Co1QqQk-A$_vhtnhBvhI8!wPiO0>EHh)THHck zrzQB8poByCFVW(Eu3+sQO-vn4P5yHe`=1=8x~=??7{X7kJ|k#>Q>~rncG(Mw9BV{} z2Kx0lqd1~aLIb-=lyTM$Y`og{UCxHfS7LCLN(GwKp@)arX~xdR2}Y=B2jZ7uMZeU? z{lie0K4CO_6_LE*bn@XlFmlh)E~89_#ve+L1mLuKlfWJOeZk=lqY7B)0SpvqiPQ#n z1GaLYLvLVGZQ+qXIpnfq9+~jY*;dMj|0Ck}K3H)oO~v zKyw+Q=#o^JShJKlMSXB7&1}HA0B3E~Zig0{RVa`osrz6B8<2gE#2V#EW9#?_)Ve|h z|5G8PYb_((a}93!l8kL^l%1v;gJ$o=*B zMg*=myPY7ij0WhYeWFfRA@pucnW6nGc1LlC^N|W<~d)<^qh@{LeSrXy#waqWO5iDL)DSVgD+G$V9n@CnJTxx`(MAJ5Qsa|YVlzi zfRh70Vf78zT*;7eS33qhg>tSK(szS*|2cvaMh8udi>`D;b#R>_uLX}7g&~i1H5(r5 zaOvyZU=yg7&&ZUb4nME2Kt%a>SDO_V{^Al5Pq<--DXav`K7*%{gpZoFg)(!4%3)=nz5~_88ZZ-ZJVuHVhgP zpk@PgUIK=k!-oVW{l(2@N&m)@kB~*rM#7#xqmj2}^pe%6=vQ2!Sx|&`C&i2kSuwCa z=#=?mq_rc3Effu}**aYH#xF~t7;NBt~N7##YHbE-awat0^h z38HKdtjzK!oaMklrE5U#PlVym$G?gKV|Nqmw~Mm5f7>V<3Q(_BLi4&x$p|h!iI5C)N*+}#^XJO163Nig845=RN6 zNg`!oleWq`wE0?Q(~Vlqs(z@ectzVLVSDloLCs{fu}m0QTN9nAixCwmu$-K-^m3p! zB(J0mv?_dTIlWZ(Rcu^5v1NLe^B1cj%~Y&Q{_8ei!m8S4ry-RGchd{Msk^^^<9E#| z_>S_rRi2?wayg<#Zr@7P-yzm!E9$KkVyaej+zsmrzBa0rGhM#eq4Qk`&5W}KQ}GAp z0=9NBSgDe(<58Zz>%#Q=v`t=7(hMPM8LLWnY}C5sHhrqY3B|B3pBC2JTVq|^yuNsC zU7ZKoHIuVIZSc<+ZBu<2_d1oF4Urae4e_ci&HORLa zXKWgsCfM|yEk}4^_U|mwL{pAwQIIcNt5qpk&;v_G;_YB0aQlGY@h!55~9Chk!L zVuzp6s$Nggc0e~xp=KIn+Ee;>f;bTE&~3fCzKb`87Hpq#jh0y+FDiL@pg(5>oqwGq zxd~^H%`9tndNE(R1go@jYjJ%!mgu|UxifTzInKGHs9@QjkypU{9v7`%3#A(DX87n% z6_l>ad{*3s)S$S)Ue=k!zwzX4k(^%0B2Xt?afdcC7%#s67yh~u%e-6gpZHb$U;FB2TCzrAe42Kgo=Wi^_M|=C> z5werx;Ss70YGF!0lN1+}6ai<61|7hErxPvYm~0RJ4S4nsNs9b`l(+w9P)j=#Q}=&S z%tt{mc8~$4`xUi=Rif%Rb{M$*A*j6hVpSDOyg~5Z>rhruCH$H4VcPu~lbMc6km>gF z$bSQ2dpb~E{xnh8zbTN^&@81>M$e_#YU}$utMo!xyg2sHJ$uaA#%uQ$d*$-J_z8}P z!5Pat!%w&~Xh|_S*(E`LD=shiHT9z-GE)gawdwri#$~w;c6XI>9$0Jx%)VqBs-2s* zVkh|<72>@xz{E`OgMI=n4Rv*)FX-cJWybguZSwVd;?dX!v(U19o~p_q|Bn1vqkwE* zPCD{U4eF~SiaZAFslGOv`~UhP|2_i1KOFJ@`(XWh|A$9x?_la^_#Y3I|N0fc|Enhk zzi^>42mru5{Qsn8|F53^Kf%03T{`ND4Q2OCJsgv+mGGr-N}v@TDowh>mK_(YV0|ni zoXCU3BQay~cbE8`l)N=5bu~&PwfD*QynXpngo4&u+d4n_Ub&>1)W$ryoOb@yr^V_u zWb>|L+pP}kBPmk7YLRhBwDh3n=x-BCD&zz3u2t;;$Rb?*rlTR(J|4{pEC!U8gE8wK zp^zlA!n|92$Re(+%eFGC*a}yewu)NA*LZfXu_R}b)MGZ}52Q*XGFF3QXaL#P>>$j_ z`{}FEC1Wxf1a&@13D{e(yXdAke5q|8HRRP#@o{5*;8c+%Ts)^#iBx2qYY|)ikekyn zs#bH@6e=~!w3Xq7mtCzKhghU0MXP=W!@$ow0D;BqBe0Gl2jLcnBwJNOqJ__Wpq{UX zu8X^;5gR|jV1w4XtsdB=o!GWlb102^StN8gxJ@Fa0T(}u4OBUU7Qs`T9(3|nc_>%A z2!T$la86DNpHXr-Ah(2A2o4uFgRs1T<^WApk@ZhT&pHKWd8zaGzR@3Iya1m02e*vP z2RC;HCnd4JlJ-f$99dxYana$qhJAZta0hUA<&#uxh+S!8B>x05pb?9S-i(OvhYhj< zS(nDWrwlNDKQ722Aw)4j$9Sn%*ywb;wq`%fg$1D>st9^(k*&Sd-Yb{LCiCG;YYg3p zM*>|r&xK2$Lxh9GXFd7L(=IXU`oQ)+10X#{3J=pa0Tjsy;A4=6qXU)^Bg}FEZ2kK{ zOfeQEBTAZa(>mFe90P^9F1F!Aex)^kB1aaSnkCS|LFY^mm;0t9CGZe8p}T6@?<16O zYaZBPzffq&rIUXa;u-#!;gi*zkk{QVCd0;5!Z* zDcy6j{fQSEpxuIOx7&DKmo3^kk~Y8k)$`r#Hj_33(5s01gQU@G?BX?>VS%>5mYI5p zF<+{<6Duv7cKJ4o9&XHpf9Bu|vHAq^t+7CRT5wQ|SX~Bb$IEbc1pakM@ViR>n-`%h zx%X_exdY40_F2Gu)Tr|0%KIHD+d2qXE;)dE40FdfXlv4)t+VeRBE{U@OzV+(=A_1& z>g45S>ptMmrc4j0*ZtG)M1i7j}0}VuacNPSE%JcA9#v`(QMHH|!`p zDAqt+5L}koY>slG5d6w5@f+_El{8) z05Lok#3>?*$*W)?BPCqG&DfS12d3Gn0y(-@&|ahisc*5{%dAMukY6L2cz;1!jw>i} z8f=HVFp~-bKmJe_%F^}ek<+o1e7f_-nOMaif>K}vjxYQFUex~;?qmA@Te?vGuSMO_ z^w0k-pEQjXgc>G*5q-@iYERuYfMeL2b)*;wfCyY=i+IJ4f=D%cO?rLu+fM{!RH=~( zM|e`y82BwNt_;@2My9hfMW!we%JPS=$ZC;^ML>p~I?#mh z0E0Dxw&vBpXPqD2{nc{Y8ZXI%t-0DY7wED%h5zpf2m4=NSpEYir_=pU6#CDE|22Ix zOPl}LKAd1#J8icS1RfBmUw;CJ8xE2Ro&%agUI_cGwon@K2yZa6W@etHAU_3It45gr#UXH zE2+m3ti51Xo=ubH0$q7YnDU1CJ2$D-)?JA+7~%ojyj2t)ro&=OX+1YbwHB6W=Ofcrrmu!xHOth&MT{SmWJH0Gr6-WzYWF+w!u&$&L!{NgGp zHKo!&@c3=?@DYYTr=M+JHw!2h!IJg~_NG;FB44Gu#nyL-|4n^KvO%*3;g~?<+wT2v z_;vCOvU*vjzjtw5MShXyr$Hw0jjyhrR#!WhXPTzIhMq>RPfQLC)|V^Y4@OF*2PA%V zkWDd}x~F2qf;h>TSxtJaOo%6j%#s;^8e`VVkfLhp!#*$s?2tB76c~9z2ux96#m64= z$p8)X<%^O~yXwuo8X}&Tac8gx&rL{%o||{P5`fQ&@a?uCW4N2lsy?<5U0rpwjg$U& zIDI-~6%&J}y`lW+XqvCNa;b)*F=zQEo7aT9)(yyEpgE6$dqQi%j$z-D7Rnnk#@wdJ zVAU_LQTgg4!w0{?L3;w5k3S|`vv)JcU`puRb)x@qAYy~Jj*D?f`sMoTnU#q|T{2R` zh8i`gx_X0zho*sII5h^>H^f)xsYipk*{xt!ZxTzd-!EjAA$}cjs>y>`kjxj$6*iv- z_H4v_j&Z*hQ&Tnd$(tO4Yy*LGoL!wPSNzi;5vdN^l}1!mMnp{vTOp{S7`m_-5b`~j zvw)4mbz}<{_}RaRsROqzel)#2I0o@-P)VExX6X3-0(I{0t;St09?`Lmg}|X=QhObK zJx3>{xclG|v38|Sle12W9RX1D+m5WmDT6vh=YA6auH9)1@C{uXY!+DC$ceAKH;+A1 zJ)gaxpULCq_4CgO=vEhIgLu*f_SYw{PzXc^2T{`T#9yz`9HlWvd`r>rV7taA> z;<1RBU_U`s(Bul02|j_Er1`I@RWH|;Ors(hOu%b#^8G1oEh-jUUPn@KKv!LjfOB1_ z@PIl7m7{MG9^c)2+44=p8O_ zoZ`?cx*-=4CsG0TUd~Ln8j7V)Jy4!C80)P$m zlb2W6!8;FL(|IyBZAA7FSn2|Jao|ZVfsF11t|S6EQ=`e^H8E=gm6Tn@U;Ap=rIRmT z5-DgF!94e+)(Nc*@_wEt<$=6UgOj(vD zI2qF-gJIr&yjgeTN*(YrVv;Jk6&hRMf{TeKqZ{3f^XB=Lja1VcIyEu^0B2|U=rJ4N zqsr6et}M)=cL2@&MSw^jHPo0k4W~VCke>$6024-Y+LH@XYWV8~Ah3gESZ2^_&ML-T zp<%@P>d_B|8p{Y~>8L>uJ9LfCLV`W?nlH3twwq4t8 zuT}M}G!q)!OG@l0wu*54PjCX)^MeA%MAX#6&i*!TJ3r`QhhM)(*z`Uw%v z2A(|+n~5ItdB)kWZ-`c0B=+o;TIf+RV-zpV5I_uLG>GRb8VWeeAqWND5@`(Sp#}Ff z4Y(e`@yYQUJQ}HV^VB&1toeo2C|GIPglLWe^2FaLhjD?%JZFf_5+2qT`gEd`C5Xt)} z70$(rU83YEB@XtWln5Dme#=I=_`F{`4((pY4qJnlei7btjK?DUwUzrmX)}2b5ZsYV zBL`Ph^?MHX-e6l$&M?_(gT%83p6+-X-{m8#>@3U2HF(Rl1;fB)6*@s7#&Fe@r+hYo zv}g|*yzf_Kyg6$P+NNjNF~oDP$91`~UeK}?9Rt*|(HQG|KEn3b5O6b3JrwTdedFfj z{TB_xVvK}AY3hkBYZImg2h&C;bw~?@+B!QYFd3_#V#9D zF2ln<)dE`y1=!`|;}rAs=et z`s9Ly2N^B11f9Wm@Fb>@+5 z2Ej%FeLb(CZ}Dd9Z&5+hf2bvmZJ7*5c8QA0)ib?8T#P=#(8)jFAqcuFqE|_7Ge&*a z+%Pcn_r0A(J;7!U3%bVR^q=kz%al5kiwyZY`kr;RYPnLO14FseX$-np5u6>JQ^o}T zIYFTNVr(PdzY0*3+i@vDeQL{~tE|7zef>38|ck?ZJ*z1jy00V(h)}&@U zv+mr*P$O|oX*r-G^RH~HKP*^Qpp{9K85I{KKP34|*8FQFaWEZa#<)M00T`Sv*>#Bw zEYRN=Xg#^Dn6rhP(HoXq%mdCN&ePqMTUss}o41=@xbit55mA*yFTWaH+mFdZrh;`) z#a|>YP1*{~zn1q1dv}Kj07cyB;WZHKs=WlcmGgSBZ&6#VJi5EydL1xy0q8%2E-+kj zL$mgCl}B=ITwUQj0!WgZsm#OL;mw{>#a$q?;=G>n9((z$L$$)1E^QZU*1}>X+WIJ` zumucS-%~}}G()E~G*;d#Y81a~H_g#f?-0xcD=S)p1zY0$TG)Wtrj<*Fd>VfUnI6%W z>3WcGgl##L$+ZxrJLktpn6@1eS=o?kUZ;gNz-FSID@;c}!8z6jr7!zh_2nxn61$2> z)Hr0d>n4t~Sh?108$z@OHcGYd3g64$i5G&N{?Ua1*C4FmRRh^Q0QLmN|A)>|p}WDP zJT0u-m0+O2?8k}Gct*jOL-Gqho&hbp}0jf&o0y}Hu#ut!-5(wlG2Ucj5Mb$&A?W^ zHQTCWBxD04*?y47NR4G@a_L6bNcAMYWP~f|5_q7oA|NQvvbVzaBdzZ{AYHl^zVC4; zKip59V(@(L<)AOwz;Lf++$gdU`zJ|VLl@3^&#j%>RLOu;s6&8Wk)wTgm=l>H%00I} zEle^%|3L|h2U-wMtcu(a&`+`iUBl&=YrsZgS|cj97gvZTyJU$I)WhJCkhsOxhpKrxcP>%(5R z9MMPCk`c4d!s3l}Zf-0Af{mO(+ywpr`_ZEtU#~UdeO-c%IA_N-CQXxtqYp@@X=5r92*S+*`GK64NH zsun)FZ0d#QTdv1OM(S!VyD8rUo~q|D2w84_#adTXb@jF*&6X~ic4kx;q6&6itr@42 z3O-O!W*VSfS|;60{fIqx7Ai4C_nv{~xkw(h3-m(`xcVg{ELMqchC4Ua6mA3#wgqQ9 zZ8l4_(p;XKC^8+%2QwLhz1Mc3l*8&bBt^>q2*-3;6IwyDUb(KN6jiP!8@o_P8eX4G zq+lG3fyFb(`+9%gRNeW08C2SCc9q&q#f(lVTz`7z_VbUdqX9g6=I-~sq5A|NnfCRH z-HSkCCBHSJ?P#>b+HUEsq!59M)cp_y#z-Jxz1k)cosC@G|OeN?KA#3Zg4yc1zM0tK0Ki8 zqYJYZuJJ4F`(nZdw2my3NA;$UpJcbsa#MY+<7bM?;I`N2Nvrd*NZiQ?=|-G^z=eT= zGun1D-dY7F7Fv0`|Mr(RhFqGaHb8hwR3u3K4Af3Tpv~x)Ljj2wS9QWaWL0^ZqUe11ej1JkZ#VM5AQtl>6BAGm5G5=?r|p%r#REb9&$$D6_`#q&1#3GF#dIC0!NjDRBWwO*Eyi(fu}pOl*d zM_tu32Z88D5rU{G)6ma3-kngCf)+N*@vV-mb=yWQ*aXrQa^ZlnpRNK&;SngRSoQk}t` zb{j8H6053wKu+}94cV)wjxC77Q2^ah?npSgC*gRlz?S3Hmizf}8$h(5#=ZcOFbKl3 zBQ%sA)Abq!zx}I=Q57Mbzrd*3Te6&esfqQDOyDpLPQpg~|{J1>J3Cux;*vIy|gh1lf!#1gdD_F;U<%wv~=5wUG$ zDADtcPP}LX4R@wul>U6Rj=C|RxGdU+}McdRxHU9c6{ zMskXRP5{xey8zgDoPQfV%x>ytPKo-_Yl##9jN~R)MCxJ+ z6VHhetBqun?_AzS^2t1J$`~Rw-C|&~nCa7%#s_&%Y!trMW`Hm}(*>-jvYUa;g&>ro zrlzJkizyJu(une;?qsQrs;(<5pPcK;sw>2{?nSJYTE@0k2MhOLvjv*O#0_9~!t%{_ zGz@}kUjFW1uC}hHd{LQ8?9Jcs&7PH!M8km11tv*;`9)yrN$RXkT8%w{mVwaiP97BE zgu}h}`IVLQjLN6u5t_w9(t*Uq4Ub4jmbhh#sNl@lfWvDQWndU6BYl^&o)^t;he&Bl zEy`SrRAS!}z2vHZpVAG6_~Ph0*M)}0Y_=jKI7Yk=Z-f4wZ5BjEn0Jj;;c~G2z3Qxj zSnM4SCixpO6d*!r9IVv5vZjp2A@`bt?9fsT3)b2xJ_**5v+ESSAbHP`#p=~Zkei0p zLK&eIt)aorE!RC8$7SmYK?G`atK}DG%~ns0Qgg5hk5$`G9~5*XC$ma2X{9F<&FPXV z3oOlwnL7a8*nr`CDui^&7x^+kLqh~F(4(ws%8TT;#4oM%=I41vTm>-kD)+%wx5h?b z7a>cp7(xMb>$oI-;E^IY0;|VG1OSt{pgy&FN51}_z;5G-A-M^%I61O^L4Tg=Q z{Do;i+5-mS`CF=aD0LuFY82N+pCH_=Vnv@xT;v(<&199Omr80|fKlT=2KGkz!J6Mc zf}SM_kHFS^5vOl)4Ruq$xnw?{jW56;R~|Z-aT8nMB3H(0f14@%gV%s&ObN76Egzi| zqvQCtFKO!gK8$!i6%7OyV~l7uFp?TqJ+-hlxyJaE^?@^lu|WGMqT)~8OqXA_|>35Oa6k}4DC>@&uhkuX`ysDcFeM-%%0Xx_?dAnw(Q_xf^1xskpGFw)Qr>XtLohj z?>Gzs_1e>AePZ?a2w+buYDOXAJbZ!7B#B5n<`>%KO)F6lOHC}(%-Cx!3N{M&RNo!K zNbf4EUBJ4>MNnUuATKC>+Jg_z{Te;qD_;{h)Kq5jQJAVN77`An~%<_rLI(&3Ane6k%L6X%oz;L}uB6h2Vp+E|IZ`{(f)turRrVbcN3^V>n!U%Z!mN%Fw zEt#80BfNU_Rz)LMwv%})({(}C8GAH&XE3ib%W0w27L#P@0nn$UrjAO!*lqLNB5=g9c=atQrxOruZyZ zZf@L4vvj$HX@P&2>C9rfX1AG^IpV8C_R@79C z|MAW1^W^Qo+Az$}N{r}KB&7+FDyI%fKzH?vB)h(%{crViZ$WDW@?wz59A;q~;W)}P zi>(8E+--?`4Y)HI9|3JhrnXbr3m45I#U%PwZ~n8bn#_tX>Ys2(b z?#WJv^h-^bN`qqPY$f;{IFBd?q<@ShMt+V=2(*Q&*^AJc?%5Qa9$GFXo3A)9Qdqjk zVpN|%EtYCGwhQ2N%o6dQfc4Ma_U&1m%@6d=K(eA|=zt3yop1onoynXXBLlmzSN2HQ zQW)lU09G_;ZbGa_?)0ljrShFQ8KULW92!N-Mqx4Wh^B%rtfIT84I-|rIGaPb)lbDj z7)6fQpth+E`<3QU+8~TRmNY%uOTULUBeD9CoPFEMa1G>!B-yb^9ZMSR+K)w6hk*1E z1KPvezZy@y3^{&F1tX!wFo)4I7+Gq7rnC6;(tu24?>k=hDjv(!&s}F@T;zXH{4NDi zsUiED<1gcCXJ1idA306~ta2cP3B@9PHFTk#sjFQUwFn;A;D)+)^T_r=+ z6n#>(usQVPdo+i2Uv(IY?wxW{jtxD_cBK`tk7B*Uc*P5(8SzQ1_oP4pkuTP0$Re

      $LVW3aH8huHV+D3YLuj_$qxH|%>H8KC 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%0Dd)@cVq%dN0`L%VT6RH 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 z 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 z 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
      (`*5>A+H^B~> z(bf;B&3w_*)APTAy9ypS{8Rs3q>aC>MvFG*sjc6kY~Y4+(AMNoW@wABmVh-V&;r~kk3ZASTor%! z`5$d8b+s~qeh>WzcC5?cg=_)t-Md$`yWj!pE94#cqaKhvuKf#f7x=r+e^NW)n*RX} z=sTgmp#6g!pg%(22_9q23Era|wE10>1MFz?(bl3JqcMe8*C3kzYTO0>klm}vc~kQ4 z-WI`Mo3{X;K_g_H<1^s62IV%+iI_{8h}%`fu6zK6f$xK&<2oy+#Qb1yO< zetGoVxfP6!u9lEYe=+n_P^TdKi=eJS`fm9aC|Lei;J-*gE}>3APX&DxG$`0r!O;pX zQjkli1FZkuj*yEE4w zZ!iW_sb9F#cz3-s_nbNR-1GY1xhv!SrPAiJ44Y+V#N1ypJbFsse;OB}?wSyJR~(Fu zS}>TxSAHqPv+oFT<(A^*Zai?WkI$Yx`)e|{tC4eh9D62X&X1(MeP7z8e@eS_RmSHL z8QYf07?@`m7Re)B#v3^`yUS82Uhm-=$%RzQ`*fWeNgnhYaf!=JRlSN*T~(#)CeBQGs=W6R!S^y0ll*$B)Z=zp}Bh zvCNBi>v)z|V(Sx4PpMiW^<3(RUix6K;K$!e(#ISZqXFv!V?rP2|H82knm+N57b{K1 z-{FPU?cx(=ol}n;yE!br_u*6?(8t0geav<-)5WenCgF67zRZ&X2M-=B^zs31^qf~3 zcpEiU@C9nZr+->KBW5`Ku@JSAm(1TgSQ~Q!ywgjcxT2w

      o@{ZDn5U6&|RYAPXAx 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

      +3M24ZU#4*L5E@Z@4nSW@98m(8A|i?L*pN37Zi7 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

      q^~X+%wU=F&VYr(po&T;E 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�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 z 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ν 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∈>n)eLB$?*yd1_}A0)FI=p+q>N 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%0AA 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%0AHiMG3) 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�o8(`R}CM?dh+jq`B6NA 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 z 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 hWJW4F(iS5Fvn__^CXA&i}OKkuEg_Du4A%E+7 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�H9kMxYZ-?&DwMxfbsOm<}dtF5bm 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 delta 251029 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ξgBOj#__VewK^2llB0Gexb#V@gBWt-Nfkxl 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 z

        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 zⅅ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

        OhCOXV9wDJy(et#YyD8);-OQ>+`S(JTpW7)1 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 w15D80pXxg0b- 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 z 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 diff --git a/Lib/fractions.py b/Lib/fractions.py index 60b0728..9aabab3 100644 --- a/Lib/fractions.py +++ b/Lib/fractions.py @@ -484,10 +484,14 @@ class Fraction(numbers.Rational): return Fraction(a._numerator ** power, a._denominator ** power, _normalize=False) - else: + elif a._numerator >= 0: return Fraction(a._denominator ** -power, a._numerator ** -power, _normalize=False) + else: + return Fraction((-a._denominator) ** -power, + (-a._numerator) ** -power, + _normalize=False) else: # A fractional power will generally produce an # irrational number. diff --git a/Lib/functools.py b/Lib/functools.py index 214523c..60cf3c4 100644 --- a/Lib/functools.py +++ b/Lib/functools.py @@ -516,14 +516,16 @@ def _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo): last = root[PREV] link = [last, root, key, result] last[NEXT] = root[PREV] = cache[key] = link - full = (len(cache) >= maxsize) + # Use the __len__() method instead of the len() function + # which could potentially be wrapped in an lru_cache itself. + full = (cache.__len__() >= maxsize) misses += 1 return result def cache_info(): """Report cache statistics""" with lock: - return _CacheInfo(hits, misses, maxsize, len(cache)) + return _CacheInfo(hits, misses, maxsize, cache.__len__()) def cache_clear(): """Clear the cache and cache statistics""" diff --git a/Lib/gettext.py b/Lib/gettext.py index 101378f..57d2c74 100644 --- a/Lib/gettext.py +++ b/Lib/gettext.py @@ -59,55 +59,147 @@ __all__ = ['NullTranslations', 'GNUTranslations', 'Catalog', _default_localedir = os.path.join(sys.base_prefix, 'share', 'locale') +# Expression parsing for plural form selection. +# +# The gettext library supports a small subset of C syntax. The only +# incompatible difference is that integer literals starting with zero are +# decimal. +# +# https://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms +# http://git.savannah.gnu.org/cgit/gettext.git/tree/gettext-runtime/intl/plural.y + +_token_pattern = re.compile(r""" + (?P[ \t]+) | # spaces and horizontal tabs + (?P[0-9]+\b) | # decimal integer + (?Pn\b) | # only n is allowed + (?P[()]) | + (?P[-*/%+?:]|[>, + # <=, >=, ==, !=, &&, ||, + # ? : + # unary and bitwise ops + # not allowed + (?P\w+|.) # invalid token + """, re.VERBOSE|re.DOTALL) + +def _tokenize(plural): + for mo in re.finditer(_token_pattern, plural): + kind = mo.lastgroup + if kind == 'WHITESPACES': + continue + value = mo.group(kind) + if kind == 'INVALID': + raise ValueError('invalid token in plural form: %s' % value) + yield value + yield '' + +def _error(value): + if value: + return ValueError('unexpected token in plural form: %s' % value) + else: + return ValueError('unexpected end of plural form') + +_binary_ops = ( + ('||',), + ('&&',), + ('==', '!='), + ('<', '>', '<=', '>='), + ('+', '-'), + ('*', '/', '%'), +) +_binary_ops = {op: i for i, ops in enumerate(_binary_ops, 1) for op in ops} +_c2py_ops = {'||': 'or', '&&': 'and', '/': '//'} + +def _parse(tokens, priority=-1): + result = '' + nexttok = next(tokens) + while nexttok == '!': + result += 'not ' + nexttok = next(tokens) + + if nexttok == '(': + sub, nexttok = _parse(tokens) + result = '%s(%s)' % (result, sub) + if nexttok != ')': + raise ValueError('unbalanced parenthesis in plural form') + elif nexttok == 'n': + result = '%s%s' % (result, nexttok) + else: + try: + value = int(nexttok, 10) + except ValueError: + raise _error(nexttok) from None + result = '%s%d' % (result, value) + nexttok = next(tokens) + + j = 100 + while nexttok in _binary_ops: + i = _binary_ops[nexttok] + if i < priority: + break + # Break chained comparisons + if i in (3, 4) and j in (3, 4): # '==', '!=', '<', '>', '<=', '>=' + result = '(%s)' % result + # Replace some C operators by their Python equivalents + op = _c2py_ops.get(nexttok, nexttok) + right, nexttok = _parse(tokens, i + 1) + result = '%s %s %s' % (result, op, right) + j = i + if j == priority == 4: # '<', '>', '<=', '>=' + result = '(%s)' % result + + if nexttok == '?' and priority <= 0: + if_true, nexttok = _parse(tokens, 0) + if nexttok != ':': + raise _error(nexttok) + if_false, nexttok = _parse(tokens) + result = '%s if %s else %s' % (if_true, result, if_false) + if priority == 0: + result = '(%s)' % result + + return result, nexttok + +def _as_int(n): + try: + i = round(n) + except TypeError: + raise TypeError('Plural value must be an integer, got %s' % + (n.__class__.__name__,)) from None + return n def c2py(plural): """Gets a C expression as used in PO files for plural forms and returns a - Python lambda function that implements an equivalent expression. + Python function that implements an equivalent expression. """ - # Security check, allow only the "n" identifier - import token, tokenize - tokens = tokenize.generate_tokens(io.StringIO(plural).readline) - try: - danger = [x for x in tokens if x[0] == token.NAME and x[1] != 'n'] - except tokenize.TokenError: - raise ValueError('plural forms expression error, maybe unbalanced parenthesis') - else: - if danger: - raise ValueError('plural forms expression could be dangerous') - - # Replace some C operators by their Python equivalents - plural = plural.replace('&&', ' and ') - plural = plural.replace('||', ' or ') - - expr = re.compile(r'\!([^=])') - plural = expr.sub(' not \\1', plural) - - # Regular expression and replacement function used to transform - # "a?b:c" to "b if a else c". - expr = re.compile(r'(.*?)\?(.*?):(.*)') - def repl(x): - return "(%s if %s else %s)" % (x.group(2), x.group(1), - expr.sub(repl, x.group(3))) - - # Code to transform the plural expression, taking care of parentheses - stack = [''] - for c in plural: - if c == '(': - stack.append('') - elif c == ')': - if len(stack) == 1: - # Actually, we never reach this code, because unbalanced - # parentheses get caught in the security check at the - # beginning. - raise ValueError('unbalanced parenthesis in plural form') - s = expr.sub(repl, stack.pop()) - stack[-1] += '(%s)' % s - else: - stack[-1] += c - plural = expr.sub(repl, stack.pop()) - - return eval('lambda n: int(%s)' % plural) + if len(plural) > 1000: + raise ValueError('plural form expression is too long') + try: + result, nexttok = _parse(_tokenize(plural)) + if nexttok: + raise _error(nexttok) + + depth = 0 + for c in result: + if c == '(': + depth += 1 + if depth > 20: + # Python compiler limit is about 90. + # The most complex example has 2. + raise ValueError('plural form expression is too complex') + elif c == ')': + depth -= 1 + + ns = {'_as_int': _as_int} + exec('''if True: + def func(n): + if not isinstance(n, int): + n = _as_int(n) + return int(%s) + ''' % result, ns) + return ns['func'] + except RecursionError: + # Recursion error can be raised in _parse() or exec(). + raise ValueError('plural form expression is too complex') def _expand_lang(loc): diff --git a/Lib/http/client.py b/Lib/http/client.py index 350313e..352c101 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -136,7 +136,7 @@ _MAXHEADERS = 100 # # VCHAR defined in http://tools.ietf.org/html/rfc5234#appendix-B.1 -# the patterns for both name and value are more leniant than RFC +# the patterns for both name and value are more lenient than RFC # definitions to allow for backwards compatibility _is_legal_header_name = re.compile(rb'[^:\s][^:\r\n]*').fullmatch _is_illegal_header_value = re.compile(rb'\n(?![ \t])|\r(?![ \t\n])').search @@ -935,7 +935,8 @@ class HTTPConnection: if message_body is not None: self.send(message_body) - def putrequest(self, method, url, skip_host=0, skip_accept_encoding=0): + def putrequest(self, method, url, skip_host=False, + skip_accept_encoding=False): """Send a request to the server. `method' specifies an HTTP request method, e.g. 'GET'. diff --git a/Lib/http/cookiejar.py b/Lib/http/cookiejar.py index 265ccf9..6d4572a 100644 --- a/Lib/http/cookiejar.py +++ b/Lib/http/cookiejar.py @@ -120,7 +120,7 @@ def time2netscape(t=None): dt = datetime.datetime.utcnow() else: dt = datetime.datetime.utcfromtimestamp(t) - return "%s %02d-%s-%04d %02d:%02d:%02d GMT" % ( + return "%s, %02d-%s-%04d %02d:%02d:%02d GMT" % ( DAYS[dt.weekday()], dt.day, MONTHS[dt.month-1], dt.year, dt.hour, dt.minute, dt.second) @@ -833,7 +833,7 @@ class CookiePolicy: May also modify cookies, though this is probably a bad idea. The subclass DefaultCookiePolicy defines the standard rules for Netscape - and RFC 2965 cookies -- override that if you want a customised policy. + and RFC 2965 cookies -- override that if you want a customized policy. """ def set_ok(self, cookie, request): diff --git a/Lib/idlelib/Bindings.py b/Lib/idlelib/Bindings.py index ab25ff1..e19a279 100644 --- a/Lib/idlelib/Bindings.py +++ b/Lib/idlelib/Bindings.py @@ -69,6 +69,8 @@ menudefs = [ ('shell', [ ('_View Last Restart', '<>'), ('_Restart Shell', '<>'), + None, + ('_Interrupt Execution', '<>'), ]), ('debug', [ ('_Go to File/Line', '<>'), diff --git a/Lib/idlelib/CallTipWindow.py b/Lib/idlelib/CallTipWindow.py index 8e68a76..9eec175 100644 --- a/Lib/idlelib/CallTipWindow.py +++ b/Lib/idlelib/CallTipWindow.py @@ -9,7 +9,7 @@ HIDE_VIRTUAL_EVENT_NAME = "<>" HIDE_SEQUENCES = ("", "") CHECKHIDE_VIRTUAL_EVENT_NAME = "<>" CHECKHIDE_SEQUENCES = ("", "") -CHECKHIDE_TIME = 100 # miliseconds +CHECKHIDE_TIME = 100 # milliseconds MARK_RIGHT = "calltipwindowregion_right" diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index 00d5005..72905c1 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -1,6 +1,36 @@ +What's New in IDLE 3.5.3? +========================= +*Release date: 2017-01-01?* + +- Issue #15308: Add 'interrupt execution' (^C) to Shell menu. + Patch by Roger Serwy, updated by Bayard Randel. + +- Issue #27922: Stop IDLE tests from 'flashing' gui widgets on the screen. + +- Add version to title of IDLE help window. + +- Issue #25564: In section on IDLE -- console differences, mention that + using exec means that __builtins__ is defined for each statement. + +- Issue #27714: text_textview and test_autocomplete now pass when re-run + in the same process. This occurs when test_idle fails when run with the + -w option but without -jn. Fix warning from test_config. + +- Issue #25507: IDLE no longer runs buggy code because of its tkinter imports. + Users must include the same imports required to run directly in Python. + +- Issue #27452: add line counter and crc to IDLE configHandler test dump. + +- Issue #27365: Allow non-ascii chars in IDLE NEWS.txt, for contributor names. + +- Issue #27245: IDLE: Cleanly delete custom themes and key bindings. + Previously, when IDLE was started from a console or by import, a cascade + of warnings was emitted. Patch by Serhiy Storchaka. + + What's New in IDLE 3.5.2? ========================= -*Release date: 2016-06-30?* +*Release date: 2016-06-26* - Issue #5124: Paste with text selected now replaces the selection on X11. This matches how paste works on Windows, Mac, most modern Linux apps, @@ -184,7 +214,7 @@ What's New in IDLE 3.5.0? Changes are written to HOME/.idlerc/config-extensions.cfg. Original patch by Tal Einat. -- Issue #16233: A module browser (File : Class Browser, Alt+C) requires a +- Issue #16233: A module browser (File : Class Browser, Alt+C) requires an editor window with a filename. When Class Browser is requested otherwise, from a shell, output window, or 'Untitled' editor, Idle no longer displays an error box. It now pops up an Open Module box (Alt+M). If a valid name @@ -285,7 +315,7 @@ What's New in IDLE 3.3.0? - Issue # 12510: Attempt to get certain tool tips no longer crashes IDLE. Erroneous tool tips have been corrected. Default added for callables. -- Issue10365: File open dialog now works instead of crashing even when +- Issue #10365: File open dialog now works instead of crashing even when parent window is closed while dialog is open. - Issue 14876: use user-selected font for highlight configuration. @@ -321,18 +351,18 @@ What's New in IDLE 3.2.1? - Issue #1028: Ctrl-space binding to show completions was causing IDLE to exit. Tk < 8.5 was sending invalid Unicode null; replaced with valid null. -- toggle failing on Tk 8.5, causing IDLE exits and strange selection - behavior. Issue 4676. Improve selection extension behaviour. +- Issue #4676: toggle failing on Tk 8.5, causing IDLE exits and strange selection + behavior. Improve selection extension behaviour. -- toggle non-functional when NumLock set on Windows. Issue 3851. +- Issue #3851: toggle non-functional when NumLock set on Windows. What's New in IDLE 3.1b1? ========================= *Release date: 06-May-09* -- Use of 'filter' in keybindingDialog.py was causing custom key assignment to - fail. Patch 5707 amaury.forgeotdarc. +- Issue #5707: Use of 'filter' in keybindingDialog.py was causing custom key assignment to + fail. Patch by Amaury Forgeot d'Arc. - Issue #4815: Offer conversion to UTF-8 if source files have no encoding declaration and are not encoded in UTF-8. @@ -347,664 +377,6 @@ What's New in IDLE 3.1b1? - Issue #2665: On Windows, an IDLE installation upgraded from an old version would not start if a custom theme was defined. - -What's New in IDLE 2.7? (UNRELEASED, but merged into 3.1 releases above.) -======================= -*Release date: XX-XXX-2010* - -- idle.py modified and simplified to better support developing experimental - versions of IDLE which are not installed in the standard location. - -- OutputWindow/PyShell right click menu "Go to file/line" wasn't working with - file paths containing spaces. Bug 5559. - -- Windows: Version string for the .chm help file changed, file not being - accessed Patch 5783 Guilherme Polo - -- Allow multiple IDLE GUI/subprocess pairs to exist simultaneously. Thanks to - David Scherer for suggesting the use of an ephemeral port for the GUI. - Patch 1529142 Weeble. - -- Remove port spec from run.py and fix bug where subprocess fails to - extract port from command line when warnings are present. - -- Tk 8.5 Text widget requires 'wordprocessor' tabstyle attr to handle - mixed space/tab properly. Issue 5129, patch by Guilherme Polo. - -- Issue #3549: On MacOS the preferences menu was not present - -- IDLE would print a "Unhandled server exception!" message when internal - debugging is enabled. - -- Issue #4455: IDLE failed to display the windows list when two windows have - the same title. - -- Issue #4383: When IDLE cannot make the connection to its subprocess, it would - fail to properly display the error message. - -- help() was not paging to the shell. Issue1650. - -- CodeContext was not importing. - -- Corrected two 3.0 compatibility errors reported by Mark Summerfield: - http://mail.python.org/pipermail/python-3000/2007-December/011491.html - -- Shell was not colorizing due to bug introduced at r57998, Bug 1586. - -- Issue #1585: IDLE uses non-existent xrange() function. - -- Windows EOL sequence not converted correctly, encoding error. - Caused file save to fail. Bug 1130. - -- IDLE converted to Python 3000 syntax. - -- Strings became Unicode. - -- CallTips module now uses the inspect module to produce the argspec. - -- IDLE modules now use absolute import instead of implied relative import. - -- atexit call replaces sys.exitfunc. The functionality of delete-exitfunc flag - in config-main.cfg remains unchanged: if set, registered exit functions will - be cleared before IDLE exits. - - -What's New in IDLE 2.6 -====================== -*Release date: 01-Oct-2008*, merged into 3.0 releases detailed above (3.0rc2) - -- Issue #2665: On Windows, an IDLE installation upgraded from an old version - would not start if a custom theme was defined. - -- Home / Control-A toggles between left margin and end of leading white - space. issue1196903, patch by Jeff Shute. - -- Improved AutoCompleteWindow logic. issue2062, patch by Tal Einat. - -- Autocompletion of filenames now support alternate separators, e.g. the - '/' char on Windows. issue2061 Patch by Tal Einat. - -- Configured selection highlighting colors were ignored; updating highlighting - in the config dialog would cause non-Python files to be colored as if they - were Python source; improve use of ColorDelagator. Patch 1334. Tal Einat. - -- ScriptBinding event handlers weren't returning 'break'. Patch 2050, Tal Einat - -- There was an error on exit if no sys.exitfunc was defined. Issue 1647. - -- Could not open files in .idlerc directory if latter was hidden on Windows. - Issue 1743, Issue 1862. - -- Configure Dialog: improved layout for keybinding. Patch 1457 Tal Einat. - -- tabpage.py updated: tabbedPages.py now supports multiple dynamic rows - of tabs. Patch 1612746 Tal Einat. - -- Add confirmation dialog before printing. Patch 1717170 Tal Einat. - -- Show paste position if > 80 col. Patch 1659326 Tal Einat. - -- Update cursor color without restarting. Patch 1725576 Tal Einat. - -- Allow keyboard interrupt only when user code is executing in subprocess. - Patch 1225 Tal Einat (reworked from IDLE-Spoon). - -- configDialog cleanup. Patch 1730217 Tal Einat. - -- textView cleanup. Patch 1718043 Tal Einat. - -- Clean up EditorWindow close. - -- Patch 1693258: Fix for duplicate "preferences" menu-OS X. Backport of r56204. - -- OSX: Avoid crash for those versions of Tcl/Tk which don't have a console - -- Bug in idlelib.MultiCall: Options dialog was crashing IDLE if there was an - option in config-extensions w/o a value. Patch #1672481, Tal Einat - -- Corrected some bugs in AutoComplete. Also, Page Up/Down in ACW implemented; - mouse and cursor selection in ACWindow implemented; double Tab inserts - current selection and closes ACW (similar to double-click and Return); scroll - wheel now works in ACW. Added AutoComplete instructions to IDLE Help. - -- AutoCompleteWindow moved below input line, will move above if there - isn't enough space. Patch 1621265 Tal Einat - -- Calltips now 'handle' tuples in the argument list (display '' :) - Suggested solution by Christos Georgiou, Bug 791968. - -- Add 'raw' support to configHandler. Patch 1650174 Tal Einat. - -- Avoid hang when encountering a duplicate in a completion list. Bug 1571112. - -- Patch #1362975: Rework CodeContext indentation algorithm to - avoid hard-coding pixel widths. - -- Bug #813342: Start the IDLE subprocess with -Qnew if the parent - is started with that option. - -- Honor the "Cancel" action in the save dialog (Debian bug #299092) - -- Some syntax errors were being caught by tokenize during the tabnanny - check, resulting in obscure error messages. Do the syntax check - first. Bug 1562716, 1562719 - -- IDLE's version number takes a big jump to match the version number of - the Python release of which it's a part. - - -What's New in IDLE 1.2? -======================= -*Release date: 19-SEP-2006* - -- File menu hotkeys: there were three 'p' assignments. Reassign the - 'Save Copy As' and 'Print' hotkeys to 'y' and 't'. Change the - Shell hotkey from 's' to 'l'. - -- IDLE honors new quit() and exit() commands from site.py Quitter() object. - Patch 1540892, Jim Jewett - -- The 'with' statement is now a Code Context block opener. - Patch 1540851, Jim Jewett - -- Retrieval of previous shell command was not always preserving indentation - (since 1.2a1) Patch 1528468 Tal Einat. - -- Changing tokenize (39046) to detect dedent broke tabnanny check (since 1.2a1) - -- ToggleTab dialog was setting indent to 8 even if cancelled (since 1.2a1). - -- When used w/o subprocess, all exceptions were preceded by an error - message claiming they were IDLE internal errors (since 1.2a1). - -- Bug #1525817: Don't truncate short lines in IDLE's tool tips. - -- Bug #1517990: IDLE keybindings on MacOS X now work correctly - -- Bug #1517996: IDLE now longer shows the default Tk menu when a - path browser, class browser or debugger is the frontmost window on MacOS X - -- EditorWindow.test() was failing. Bug 1417598 - -- EditorWindow failed when used stand-alone if sys.ps1 not set. - Bug 1010370 Dave Florek - -- Tooltips failed on new-syle class __init__ args. Bug 1027566 Loren Guthrie - -- Avoid occasional failure to detect closing paren properly. - Patch 1407280 Tal Einat - -- Rebinding Tab key was inserting 'tab' instead of 'Tab'. Bug 1179168. - -- Colorizer now handles # correctly, also unicode strings and - 'as' keyword in comment directly following import command. Closes 1325071. - Patch 1479219 Tal Einat - -- Patch #1162825: Support non-ASCII characters in IDLE window titles. - -- Source file f.flush() after writing; trying to avoid lossage if user - kills GUI. - -- Options / Keys / Advanced dialog made functional. Also, allow binding - of 'movement' keys. - -- 'syntax' patch adds improved calltips and a new class attribute listbox. - MultiCall module allows binding multiple actions to an event. - Patch 906702 Noam Raphael - -- Better indentation after first line of string continuation. - IDLEfork Patch 681992, Noam Raphael - -- Fixed CodeContext alignment problem, following suggestion from Tal Einat. - -- Increased performance in CodeContext extension Patch 936169 Noam Raphael - -- Mac line endings were incorrect when pasting code from some browsers - when using X11 and the Fink distribution. Python Bug 1263656. - -- when cursor is on a previous command retrieves that command. Instead - of replacing the input line, the previous command is now appended to the - input line. Indentation is preserved, and undo is enabled. - Patch 1196917 Jeff Shute - -- Clarify "tab/space" Error Dialog and "Tab Width" Dialog associated with - the Untabify command. - -- Corrected "tab/space" Error Dialog to show correct menu for Untabify. - Patch 1196980 Jeff Shute - -- New files are colorized by default, and colorizing is removed when - saving as non-Python files. Patch 1196895 Jeff Shute - Closes Python Bugs 775012 and 800432, partial fix IDLEfork 763524 - -- Improve subprocess link error notification. - -- run.py: use Queue's blocking feature instead of sleeping in the main - loop. Patch # 1190163 Michiel de Hoon - -- Add config-main option to make the 'history' feature non-cyclic. - Default remains cyclic. Python Patch 914546 Noam Raphael. - -- Removed ability to configure tabs indent from Options dialog. This 'feature' - has never worked and no one has complained. It is still possible to set a - default tabs (v. spaces) indent 'manually' via config-main.def (or to turn on - tabs for the current EditorWindow via the Format menu) but IDLE will - encourage indentation via spaces. - -- Enable setting the indentation width using the Options dialog. - Bug # 783877 - -- Add keybindings for del-word-left and del-word-right. - -- Discourage using an indent width other than 8 when using tabs to indent - Python code. - -- Restore use of EditorWindow.set_indentation_params(), was dead code since - Autoindent was merged into EditorWindow. This allows IDLE to conform to the - indentation width of a loaded file. (But it still will not switch to tabs - even if the file uses tabs.) Any change in indent width is local to that - window. - -- Add Tabnanny check before Run/F5, not just when Checking module. - -- If an extension can't be loaded, print warning and skip it instead of - erroring out. - -- Improve error handling when .idlerc can't be created (warn and exit). - -- The GUI was hanging if the shell window was closed while a raw_input() - was pending. Restored the quit() of the readline() mainloop(). - http://mail.python.org/pipermail/idle-dev/2004-December/002307.html - -- The remote procedure call module rpc.py can now access data attributes of - remote registered objects. Changes to these attributes are local, however. - - -What's New in IDLE 1.1? -======================= -*Release date: 30-NOV-2004* - -- On OpenBSD, terminating IDLE with ctrl-c from the command line caused a - stuck subprocess MainThread because only the SocketThread was exiting. - -- Saving a Keyset w/o making changes (by using the "Save as New Custom Key Set" - button) caused IDLE to fail on restart (no new keyset was created in - config-keys.cfg). Also true for Theme/highlights. Python Bug 1064535. - -- A change to the linecache.py API caused IDLE to exit when an exception was - raised while running without the subprocess (-n switch). Python Bug 1063840. - -- When paragraph reformat width was made configurable, a bug was - introduced that caused reformatting of comment blocks to ignore how - far the block was indented, effectively adding the indentation width - to the reformat width. This has been repaired, and the reformat - width is again a bound on the total width of reformatted lines. - -- Improve keyboard focus binding, especially in Windows menu. Improve - window raising, especially in the Windows menu and in the debugger. - IDLEfork 763524. - -- If user passes a non-existent filename on the commandline, just - open a new file, don't raise a dialog. IDLEfork 854928. - -- EditorWindow.py was not finding the .chm help file on Windows. Typo - at Rev 1.54. Python Bug 990954 - -- checking sys.platform for substring 'win' was breaking IDLE docs on Mac - (darwin). Also, Mac Safari browser requires full file:// URIs. SF 900580. - -- Redirect the warning stream to the shell during the ScriptBinding check of - user code and format the warning similarly to an exception for both that - check and for runtime warnings raised in the subprocess. - -- CodeContext hint pane visibility state is now persistent across sessions. - The pane no longer appears in the shell window. Added capability to limit - extensions to shell window or editor windows. Noam Raphael addition - to Patch 936169. - -- Paragraph reformat width is now a configurable parameter in the - Options GUI. - -- New Extension: CodeContext. Provides block structuring hints for code - which has scrolled above an edit window. Patch 936169 Noam Raphael. - -- If nulls somehow got into the strings in recent-files.lst - EditorWindow.update_recent_files_list() was failing. Python Bug 931336. - -- If the normal background is changed via Configure/Highlighting, it will - update immediately, thanks to the previously mentioned patch by Nigel Rowe. - -- Add a highlight theme for builtin keywords. Python Patch 805830 Nigel Rowe - This also fixed IDLEfork bug [ 693418 ] Normal text background color not - refreshed and Python bug [897872 ] Unknown color name on HP-UX - -- rpc.py:SocketIO - Large modules were generating large pickles when downloaded - to the execution server. The return of the OK response from the subprocess - initialization was interfering and causing the sending socket to be not - ready. Add an IO ready test to fix this. Moved the polling IO ready test - into pollpacket(). - -- Fix typo in rpc.py, s/b "pickle.PicklingError" not "pickle.UnpicklingError". - -- Added a Tk error dialog to run.py inform the user if the subprocess can't - connect to the user GUI process. Added a timeout to the GUI's listening - socket. Added Tk error dialogs to PyShell.py to announce a failure to bind - the port or connect to the subprocess. Clean up error handling during - connection initiation phase. This is an update of Python Patch 778323. - -- Print correct exception even if source file changed since shell was - restarted. IDLEfork Patch 869012 Noam Raphael - -- Keybindings with the Shift modifier now work correctly. So do bindings which - use the Space key. Limit unmodified user keybindings to the function keys. - Python Bug 775353, IDLEfork Bugs 755647, 761557 - -- After an exception, run.py was not setting the exception vector. Noam - Raphael suggested correcting this so pdb's postmortem pm() would work. - IDLEfork Patch 844675 - -- IDLE now does not fail to save the file anymore if the Tk buffer is not a - Unicode string, yet eol_convention is. Python Bugs 774680, 788378 - -- IDLE didn't start correctly when Python was installed in "Program Files" on - W2K and XP. Python Bugs 780451, 784183 - -- config-main.def documentation incorrectly referred to idle- instead of - config- filenames. SF 782759 Also added note about .idlerc location. - - -What's New in IDLE 1.0? -======================= -*Release date: 29-Jul-2003* - -- Added a banner to the shell discussing warnings possibly raised by personal - firewall software. Added same comment to README.txt. - -- Calltip error when docstring was None Python Bug 775541 - -- Updated extend.txt, help.txt, and config-extensions.def to correctly - reflect the current status of the configuration system. Python Bug 768469 - -- Fixed: Call Tip Trimming May Loop Forever. Python Patch 769142 (Daniels) - -- Replaced apply(f, args, kwds) with f(*args, **kwargs) to improve performance - Python Patch 768187 - -- Break or continue statements outside a loop were causing IDLE crash - Python Bug 767794 - -- Convert Unicode strings from readline to IOBinding.encoding. Also set - sys.std{in|out|err}.encoding, for both the local and the subprocess case. - SF IDLEfork patch 682347. - -- Extend AboutDialog.ViewFile() to support file encodings. Make the CREDITS - file Latin-1. - -- Updated the About dialog to reflect re-integration into Python. Provide - buttons to display Python's NEWS, License, and Credits, plus additional - buttons for IDLE's README and NEWS. - -- TextViewer() now has a third parameter which allows inserting text into the - viewer instead of reading from a file. - -- (Created the .../Lib/idlelib directory in the Python CVS, which is a clone of - IDLEfork modified to install in the Python environment. The code in the - interrupt module has been moved to thread.interrupt_main(). ) - -- Printing the Shell window was failing if it was not saved first SF 748975 - -- When using the Search in Files dialog, if the user had a selection - highlighted in his Editor window, insert it into the dialog search field. - -- The Python Shell entry was disappearing from the Windows menu. - -- Update the Windows file list when a file name change occurs - -- Change to File / Open Module: always pop up the dialog, using the current - selection as the default value. This is easier to use habitually. - -- Avoided a problem with starting the subprocess when 'localhost' doesn't - resolve to the user's loopback interface. SF 747772 - -- Fixed an issue with highlighted errors never de-colorizing. SF 747677. Also - improved notification of Tabnanny Token Error. - -- File / New will by default save in the directory of the Edit window from - which it was initiated. SF 748973 Guido van Rossum patch. - - -What's New in IDLEfork 0.9b1? -============================= -*Release date: 02-Jun-2003* - -- The current working directory of the execution environment (and shell - following completion of execution) is now that of the module being run. - -- Added the delete-exitfunc option to config-main.def. (This option is not - included in the Options dialog.) Setting this to True (the default) will - cause IDLE to not run sys.exitfunc/atexit when the subprocess exits. - -- IDLE now preserves the line ending codes when editing a file produced on - a different platform. SF 661759, SF 538584 - -- Reduced default editor font size to 10 point and increased window height - to provide a better initial impression on Windows. - -- Options / Fonts/Tabs / Set Base Editor Font: List box was not highlighting - the default font when first installed on Windows. SF 661676 - -- Added Autosave feature: when user runs code from edit window, if the file - has been modified IDLE will silently save it if Autosave is enabled. The - option is set in the Options dialog, and the default is to prompt the - user to save the file. SF 661318 Bruce Sherwood patch. - -- Improved the RESTART annotation in the shell window when the user restarts - the shell while it is generating output. Also improved annotation when user - repeatedly hammers the Ctrl-F6 restart. - -- Allow IDLE to run when not installed and cwd is not the IDLE directory - SF Patch 686254 "Run IDLEfork from any directory without set-up" - Raphael - -- When a module is run from an EditorWindow: if its directory is not in - sys.path, prepend it. This allows the module to import other modules in - the same directory. Do the same for a script run from the command line. - -- Correctly restart the subprocess if it is running user code and the user - attempts to run some other module or restarts the shell. Do the same if - the link is broken and it is possible to restart the subprocess and re- - connect to the GUI. SF RFE 661321. - -- Improved exception reporting when running commands or scripts from the - command line. - -- Added a -n command line switch to start IDLE without the subprocess. - Removed the Shell menu when running in that mode. Updated help messages. - -- Added a comment to the shell startup header to indicate when IDLE is not - using the subprocess. - -- Restore the ability to run without the subprocess. This can be important for - some platforms or configurations. (Running without the subprocess allows the - debugger to trace through parts of IDLE itself, which may or may not be - desirable, depending on your point of view. In addition, the traditional - reload/import tricks must be use if user source code is changed.) This is - helpful for developing IDLE using IDLE, because one instance can be used to - edit the code and a separate instance run to test changes. (Multiple - concurrent IDLE instances with subprocesses is a future feature) - -- Improve the error message a user gets when saving a file with non-ASCII - characters and no source encoding is specified. Done by adding a dialog - 'EncodingMessage', which contains the line to add in a fixed-font entry - widget, and which has a button to add that line to the file automatically. - Also, add a configuration option 'EditorWindow/encoding', which has three - possible values: none, utf-8, and locale. None is the default: IDLE will show - this dialog when non-ASCII characters are encountered. utf-8 means that files - with non-ASCII characters are saved as utf-8-with-bom. locale means that - files are saved in the locale's encoding; the dialog is only displayed if the - source contains characters outside the locale's charset. SF 710733 - Loewis - -- Improved I/O response by tweaking the wait parameter in various - calls to signal.signal(). - -- Implemented a threaded subprocess which allows interrupting a pass - loop in user code using the 'interrupt' extension. User code runs - in MainThread, while the RPCServer is handled by SockThread. This is - necessary because Windows doesn't support signals. - -- Implemented the 'interrupt' extension module, which allows a subthread - to raise a KeyboardInterrupt in the main thread. - -- Attempting to save the shell raised an error related to saving - breakpoints, which are not implemented in the shell - -- Provide a correct message when 'exit' or 'quit' are entered at the - IDLE command prompt SF 695861 - -- Eliminate extra blank line in shell output caused by not flushing - stdout when user code ends with an unterminated print. SF 695861 - -- Moved responsibility for exception formatting (i.e. pruning IDLE internal - calls) out of rpc.py into the client and server. - -- Exit IDLE cleanly even when doing subprocess I/O - -- Handle subprocess interrupt with an RPC message. - -- Restart the subprocess if it terminates itself. (VPython programs do that) - -- Support subclassing of exceptions, including in the shell, by moving the - exception formatting to the subprocess. - - -What's New in IDLEfork 0.9 Alpha 2? -=================================== -*Release date: 27-Jan-2003* - -- Updated INSTALL.txt to claify use of the python2 rpm. - -- Improved formatting in IDLE Help. - -- Run menu: Replace "Run Script" with "Run Module". - -- Code encountering an unhandled exception under the debugger now shows - the correct traceback, with IDLE internal levels pruned out. - -- If an exception occurs entirely in IDLE, don't prune the IDLE internal - modules from the traceback displayed. - -- Class Browser and Path Browser now use Alt-Key-2 for vertical zoom. - -- IDLE icons will now install correctly even when setup.py is run from the - build directory - -- Class Browser now compatible with Python2.3 version of pyclbr.py - -- Left cursor move in presence of selected text now moves from left end - of the selection. - -- Add Meta keybindings to "IDLE Classic Windows" to handle reversed - Alt/Meta on some Linux distros. - -- Change default: IDLE now starts with Python Shell. - -- Removed the File Path from the Additional Help Sources scrolled list. - -- Add capability to access Additional Help Sources on the web if the - Help File Path begins with //http or www. (Otherwise local path is - validated, as before.) - -- Additional Help Sources were not being posted on the Help menu in the - order entered. Implement sorting the list by [HelpFiles] 'option' - number. - -- Add Browse button to New Help Source dialog. Arrange to start in - Python/Doc if platform is Windows, otherwise start in current directory. - -- Put the Additional Help Sources directly on the Help menu instead of in - an Extra Help cascade menu. Rearrange the Help menu so the Additional - Help Sources come last. Update help.txt appropriately. - -- Fix Tk root pop-ups in configSectionNameDialog.py and configDialog.py - -- Uniform capitalization in General tab of ConfigDialog, update the doc string. - -- Fix bug in ConfigDialog where SaveAllChangedConfig() was unexpectedly - deleting Additional Help Sources from the user's config file. - -- Make configHelpSourceEdit OK button the default and bind - -- Fix Tk root pop-ups in configHelpSourceEdit: error dialogs not attached - to parents. - -- Use os.startfile() to open both Additional Help and Python Help on the - Windows platform. The application associated with the file type will act as - the viewer. Windows help files (.chm) are now supported via the - Settings/General/Additional Help facility. - -- If Python Help files are installed locally on Linux, use them instead of - accessing python.org. - -- Make the methods for finding the Python help docs more robust, and make - them work in the installed configuration, also. - -- On the Save Before Run dialog, make the OK button the default. One - less mouse action! - -- Add a method: EditorWindow.get_geometry() for future use in implementing - window location persistence. - -- Removed the "Help/Advice" menu entry. Thanks, David! We'll remember! - -- Change the "Classic Windows" theme's paste key to be . - -- Rearrange the Shell menu to put Stack Viewer entries adjacent. - -- Add the ability to restart the subprocess interpreter from the shell window; - add an associated menu entry "Shell/Restart" with binding Control-F6. Update - IDLE help. - -- Upon a restart, annotate the shell window with a "restart boundary". Add a - shell window menu "Shell/View Restart" with binding F6 to jump to the most - recent restart boundary. - -- Add Shell menu to Python Shell; change "Settings" to "Options". - -- Remove incorrect comment in setup.py: IDLEfork is now installed as a package. - -- Add INSTALL.txt, HISTORY.txt, NEWS.txt to installed configuration. - -- In installer text, fix reference to Visual Python, should be VPython. - Properly credit David Scherer. - -- Modified idle, idle.py, idle.pyw to improve exception handling. - - -What's New in IDLEfork 0.9 Alpha 1? -=================================== -*Release date: 31-Dec-2002* - -- First release of major new functionality. For further details refer to - Idle-dev and/or the Sourceforge CVS. - -- Adapted to the Mac platform. - -- Overhauled the IDLE startup options and revised the idle -h help message, - which provides details of command line usage. - -- Multiple bug fixes and usability enhancements. - -- Introduced the new RPC implementation, which includes a debugger. The output - of user code is to the shell, and the shell may be used to inspect the - environment after the run has finished. (In version 0.8.1 the shell - environment was separate from the environment of the user code.) - -- Introduced the configuration GUI and a new About dialog. - -- Removed David Scherer's Remote Procedure Call code and replaced with Guido - van Rossum's. GvR code has support for the IDLE debugger and uses the shell - to inspect the environment of code Run from an Edit window. Files removed: - ExecBinding.py, loader.py, protocol.py, Remote.py, spawn.py - --------------------------------------------------------------------- -Refer to HISTORY.txt for additional information on earlier releases. --------------------------------------------------------------------- +------------------------------------------------------------------------ +Refer to NEWS2x.txt and HISTORY.txt for information on earlier releases. +------------------------------------------------------------------------ diff --git a/Lib/idlelib/NEWS2x.txt b/Lib/idlelib/NEWS2x.txt new file mode 100644 index 0000000..6751ca5 --- /dev/null +++ b/Lib/idlelib/NEWS2x.txt @@ -0,0 +1,660 @@ +What's New in IDLE 2.7? (Merged into 3.1 before 2.7 release.) +======================= +*Release date: XX-XXX-2010* + +- idle.py modified and simplified to better support developing experimental + versions of IDLE which are not installed in the standard location. + +- OutputWindow/PyShell right click menu "Go to file/line" wasn't working with + file paths containing spaces. Bug 5559. + +- Windows: Version string for the .chm help file changed, file not being + accessed Patch 5783 Guilherme Polo + +- Allow multiple IDLE GUI/subprocess pairs to exist simultaneously. Thanks to + David Scherer for suggesting the use of an ephemeral port for the GUI. + Patch 1529142 Weeble. + +- Remove port spec from run.py and fix bug where subprocess fails to + extract port from command line when warnings are present. + +- Tk 8.5 Text widget requires 'wordprocessor' tabstyle attr to handle + mixed space/tab properly. Issue 5129, patch by Guilherme Polo. + +- Issue #3549: On MacOS the preferences menu was not present + +- IDLE would print a "Unhandled server exception!" message when internal + debugging is enabled. + +- Issue #4455: IDLE failed to display the windows list when two windows have + the same title. + +- Issue #4383: When IDLE cannot make the connection to its subprocess, it would + fail to properly display the error message. + +- help() was not paging to the shell. Issue1650. + +- CodeContext was not importing. + +- Corrected two 3.0 compatibility errors reported by Mark Summerfield: + http://mail.python.org/pipermail/python-3000/2007-December/011491.html + +- Shell was not colorizing due to bug introduced at r57998, Bug 1586. + +- Issue #1585: IDLE uses non-existent xrange() function. + +- Windows EOL sequence not converted correctly, encoding error. + Caused file save to fail. Bug 1130. + +- IDLE converted to Python 3000 syntax. + +- Strings became Unicode. + +- CallTips module now uses the inspect module to produce the argspec. + +- IDLE modules now use absolute import instead of implied relative import. + +- atexit call replaces sys.exitfunc. The functionality of delete-exitfunc flag + in config-main.cfg remains unchanged: if set, registered exit functions will + be cleared before IDLE exits. + + +What's New in IDLE 2.6 +====================== +*Release date: 01-Oct-2008*, merged into 3.0 releases detailed above (3.0rc2) + +- Issue #2665: On Windows, an IDLE installation upgraded from an old version + would not start if a custom theme was defined. + +- Home / Control-A toggles between left margin and end of leading white + space. issue1196903, patch by Jeff Shute. + +- Improved AutoCompleteWindow logic. issue2062, patch by Tal Einat. + +- Autocompletion of filenames now support alternate separators, e.g. the + '/' char on Windows. issue2061 Patch by Tal Einat. + +- Configured selection highlighting colors were ignored; updating highlighting + in the config dialog would cause non-Python files to be colored as if they + were Python source; improve use of ColorDelagator. Patch 1334. Tal Einat. + +- ScriptBinding event handlers weren't returning 'break'. Patch 2050, Tal Einat + +- There was an error on exit if no sys.exitfunc was defined. Issue 1647. + +- Could not open files in .idlerc directory if latter was hidden on Windows. + Issue 1743, Issue 1862. + +- Configure Dialog: improved layout for keybinding. Patch 1457 Tal Einat. + +- tabpage.py updated: tabbedPages.py now supports multiple dynamic rows + of tabs. Patch 1612746 Tal Einat. + +- Add confirmation dialog before printing. Patch 1717170 Tal Einat. + +- Show paste position if > 80 col. Patch 1659326 Tal Einat. + +- Update cursor color without restarting. Patch 1725576 Tal Einat. + +- Allow keyboard interrupt only when user code is executing in subprocess. + Patch 1225 Tal Einat (reworked from IDLE-Spoon). + +- configDialog cleanup. Patch 1730217 Tal Einat. + +- textView cleanup. Patch 1718043 Tal Einat. + +- Clean up EditorWindow close. + +- Patch 1693258: Fix for duplicate "preferences" menu-OS X. Backport of r56204. + +- OSX: Avoid crash for those versions of Tcl/Tk which don't have a console + +- Bug in idlelib.MultiCall: Options dialog was crashing IDLE if there was an + option in config-extensions w/o a value. Patch #1672481, Tal Einat + +- Corrected some bugs in AutoComplete. Also, Page Up/Down in ACW implemented; + mouse and cursor selection in ACWindow implemented; double Tab inserts + current selection and closes ACW (similar to double-click and Return); scroll + wheel now works in ACW. Added AutoComplete instructions to IDLE Help. + +- AutoCompleteWindow moved below input line, will move above if there + isn't enough space. Patch 1621265 Tal Einat + +- Calltips now 'handle' tuples in the argument list (display '' :) + Suggested solution by Christos Georgiou, Bug 791968. + +- Add 'raw' support to configHandler. Patch 1650174 Tal Einat. + +- Avoid hang when encountering a duplicate in a completion list. Bug 1571112. + +- Patch #1362975: Rework CodeContext indentation algorithm to + avoid hard-coding pixel widths. + +- Bug #813342: Start the IDLE subprocess with -Qnew if the parent + is started with that option. + +- Honor the "Cancel" action in the save dialog (Debian bug #299092) + +- Some syntax errors were being caught by tokenize during the tabnanny + check, resulting in obscure error messages. Do the syntax check + first. Bug 1562716, 1562719 + +- IDLE's version number takes a big jump to match the version number of + the Python release of which it's a part. + + +What's New in IDLE 1.2? +======================= +*Release date: 19-SEP-2006* + +- File menu hotkeys: there were three 'p' assignments. Reassign the + 'Save Copy As' and 'Print' hotkeys to 'y' and 't'. Change the + Shell hotkey from 's' to 'l'. + +- IDLE honors new quit() and exit() commands from site.py Quitter() object. + Patch 1540892, Jim Jewett + +- The 'with' statement is now a Code Context block opener. + Patch 1540851, Jim Jewett + +- Retrieval of previous shell command was not always preserving indentation + (since 1.2a1) Patch 1528468 Tal Einat. + +- Changing tokenize (39046) to detect dedent broke tabnanny check (since 1.2a1) + +- ToggleTab dialog was setting indent to 8 even if cancelled (since 1.2a1). + +- When used w/o subprocess, all exceptions were preceded by an error + message claiming they were IDLE internal errors (since 1.2a1). + +- Bug #1525817: Don't truncate short lines in IDLE's tool tips. + +- Bug #1517990: IDLE keybindings on MacOS X now work correctly + +- Bug #1517996: IDLE now longer shows the default Tk menu when a + path browser, class browser or debugger is the frontmost window on MacOS X + +- EditorWindow.test() was failing. Bug 1417598 + +- EditorWindow failed when used stand-alone if sys.ps1 not set. + Bug 1010370 Dave Florek + +- Tooltips failed on new-syle class __init__ args. Bug 1027566 Loren Guthrie + +- Avoid occasional failure to detect closing paren properly. + Patch 1407280 Tal Einat + +- Rebinding Tab key was inserting 'tab' instead of 'Tab'. Bug 1179168. + +- Colorizer now handles # correctly, also unicode strings and + 'as' keyword in comment directly following import command. Closes 1325071. + Patch 1479219 Tal Einat + +- Patch #1162825: Support non-ASCII characters in IDLE window titles. + +- Source file f.flush() after writing; trying to avoid lossage if user + kills GUI. + +- Options / Keys / Advanced dialog made functional. Also, allow binding + of 'movement' keys. + +- 'syntax' patch adds improved calltips and a new class attribute listbox. + MultiCall module allows binding multiple actions to an event. + Patch 906702 Noam Raphael + +- Better indentation after first line of string continuation. + IDLEfork Patch 681992, Noam Raphael + +- Fixed CodeContext alignment problem, following suggestion from Tal Einat. + +- Increased performance in CodeContext extension Patch 936169 Noam Raphael + +- Mac line endings were incorrect when pasting code from some browsers + when using X11 and the Fink distribution. Python Bug 1263656. + +- when cursor is on a previous command retrieves that command. Instead + of replacing the input line, the previous command is now appended to the + input line. Indentation is preserved, and undo is enabled. + Patch 1196917 Jeff Shute + +- Clarify "tab/space" Error Dialog and "Tab Width" Dialog associated with + the Untabify command. + +- Corrected "tab/space" Error Dialog to show correct menu for Untabify. + Patch 1196980 Jeff Shute + +- New files are colorized by default, and colorizing is removed when + saving as non-Python files. Patch 1196895 Jeff Shute + Closes Python Bugs 775012 and 800432, partial fix IDLEfork 763524 + +- Improve subprocess link error notification. + +- run.py: use Queue's blocking feature instead of sleeping in the main + loop. Patch # 1190163 Michiel de Hoon + +- Add config-main option to make the 'history' feature non-cyclic. + Default remains cyclic. Python Patch 914546 Noam Raphael. + +- Removed ability to configure tabs indent from Options dialog. This 'feature' + has never worked and no one has complained. It is still possible to set a + default tabs (v. spaces) indent 'manually' via config-main.def (or to turn on + tabs for the current EditorWindow via the Format menu) but IDLE will + encourage indentation via spaces. + +- Enable setting the indentation width using the Options dialog. + Bug # 783877 + +- Add keybindings for del-word-left and del-word-right. + +- Discourage using an indent width other than 8 when using tabs to indent + Python code. + +- Restore use of EditorWindow.set_indentation_params(), was dead code since + Autoindent was merged into EditorWindow. This allows IDLE to conform to the + indentation width of a loaded file. (But it still will not switch to tabs + even if the file uses tabs.) Any change in indent width is local to that + window. + +- Add Tabnanny check before Run/F5, not just when Checking module. + +- If an extension can't be loaded, print warning and skip it instead of + erroring out. + +- Improve error handling when .idlerc can't be created (warn and exit). + +- The GUI was hanging if the shell window was closed while a raw_input() + was pending. Restored the quit() of the readline() mainloop(). + http://mail.python.org/pipermail/idle-dev/2004-December/002307.html + +- The remote procedure call module rpc.py can now access data attributes of + remote registered objects. Changes to these attributes are local, however. + + +What's New in IDLE 1.1? +======================= +*Release date: 30-NOV-2004* + +- On OpenBSD, terminating IDLE with ctrl-c from the command line caused a + stuck subprocess MainThread because only the SocketThread was exiting. + +- Saving a Keyset w/o making changes (by using the "Save as New Custom Key Set" + button) caused IDLE to fail on restart (no new keyset was created in + config-keys.cfg). Also true for Theme/highlights. Python Bug 1064535. + +- A change to the linecache.py API caused IDLE to exit when an exception was + raised while running without the subprocess (-n switch). Python Bug 1063840. + +- When paragraph reformat width was made configurable, a bug was + introduced that caused reformatting of comment blocks to ignore how + far the block was indented, effectively adding the indentation width + to the reformat width. This has been repaired, and the reformat + width is again a bound on the total width of reformatted lines. + +- Improve keyboard focus binding, especially in Windows menu. Improve + window raising, especially in the Windows menu and in the debugger. + IDLEfork 763524. + +- If user passes a non-existent filename on the commandline, just + open a new file, don't raise a dialog. IDLEfork 854928. + +- EditorWindow.py was not finding the .chm help file on Windows. Typo + at Rev 1.54. Python Bug 990954 + +- checking sys.platform for substring 'win' was breaking IDLE docs on Mac + (darwin). Also, Mac Safari browser requires full file:// URIs. SF 900580. + +- Redirect the warning stream to the shell during the ScriptBinding check of + user code and format the warning similarly to an exception for both that + check and for runtime warnings raised in the subprocess. + +- CodeContext hint pane visibility state is now persistent across sessions. + The pane no longer appears in the shell window. Added capability to limit + extensions to shell window or editor windows. Noam Raphael addition + to Patch 936169. + +- Paragraph reformat width is now a configurable parameter in the + Options GUI. + +- New Extension: CodeContext. Provides block structuring hints for code + which has scrolled above an edit window. Patch 936169 Noam Raphael. + +- If nulls somehow got into the strings in recent-files.lst + EditorWindow.update_recent_files_list() was failing. Python Bug 931336. + +- If the normal background is changed via Configure/Highlighting, it will + update immediately, thanks to the previously mentioned patch by Nigel Rowe. + +- Add a highlight theme for builtin keywords. Python Patch 805830 Nigel Rowe + This also fixed IDLEfork bug [ 693418 ] Normal text background color not + refreshed and Python bug [897872 ] Unknown color name on HP-UX + +- rpc.py:SocketIO - Large modules were generating large pickles when downloaded + to the execution server. The return of the OK response from the subprocess + initialization was interfering and causing the sending socket to be not + ready. Add an IO ready test to fix this. Moved the polling IO ready test + into pollpacket(). + +- Fix typo in rpc.py, s/b "pickle.PicklingError" not "pickle.UnpicklingError". + +- Added a Tk error dialog to run.py inform the user if the subprocess can't + connect to the user GUI process. Added a timeout to the GUI's listening + socket. Added Tk error dialogs to PyShell.py to announce a failure to bind + the port or connect to the subprocess. Clean up error handling during + connection initiation phase. This is an update of Python Patch 778323. + +- Print correct exception even if source file changed since shell was + restarted. IDLEfork Patch 869012 Noam Raphael + +- Keybindings with the Shift modifier now work correctly. So do bindings which + use the Space key. Limit unmodified user keybindings to the function keys. + Python Bug 775353, IDLEfork Bugs 755647, 761557 + +- After an exception, run.py was not setting the exception vector. Noam + Raphael suggested correcting this so pdb's postmortem pm() would work. + IDLEfork Patch 844675 + +- IDLE now does not fail to save the file anymore if the Tk buffer is not a + Unicode string, yet eol_convention is. Python Bugs 774680, 788378 + +- IDLE didn't start correctly when Python was installed in "Program Files" on + W2K and XP. Python Bugs 780451, 784183 + +- config-main.def documentation incorrectly referred to idle- instead of + config- filenames. SF 782759 Also added note about .idlerc location. + + +What's New in IDLE 1.0? +======================= +*Release date: 29-Jul-2003* + +- Added a banner to the shell discussing warnings possibly raised by personal + firewall software. Added same comment to README.txt. + +- Calltip error when docstring was None Python Bug 775541 + +- Updated extend.txt, help.txt, and config-extensions.def to correctly + reflect the current status of the configuration system. Python Bug 768469 + +- Fixed: Call Tip Trimming May Loop Forever. Python Patch 769142 (Daniels) + +- Replaced apply(f, args, kwds) with f(*args, **kwargs) to improve performance + Python Patch 768187 + +- Break or continue statements outside a loop were causing IDLE crash + Python Bug 767794 + +- Convert Unicode strings from readline to IOBinding.encoding. Also set + sys.std{in|out|err}.encoding, for both the local and the subprocess case. + SF IDLEfork patch 682347. + +- Extend AboutDialog.ViewFile() to support file encodings. Make the CREDITS + file Latin-1. + +- Updated the About dialog to reflect re-integration into Python. Provide + buttons to display Python's NEWS, License, and Credits, plus additional + buttons for IDLE's README and NEWS. + +- TextViewer() now has a third parameter which allows inserting text into the + viewer instead of reading from a file. + +- (Created the .../Lib/idlelib directory in the Python CVS, which is a clone of + IDLEfork modified to install in the Python environment. The code in the + interrupt module has been moved to thread.interrupt_main(). ) + +- Printing the Shell window was failing if it was not saved first SF 748975 + +- When using the Search in Files dialog, if the user had a selection + highlighted in his Editor window, insert it into the dialog search field. + +- The Python Shell entry was disappearing from the Windows menu. + +- Update the Windows file list when a file name change occurs + +- Change to File / Open Module: always pop up the dialog, using the current + selection as the default value. This is easier to use habitually. + +- Avoided a problem with starting the subprocess when 'localhost' doesn't + resolve to the user's loopback interface. SF 747772 + +- Fixed an issue with highlighted errors never de-colorizing. SF 747677. Also + improved notification of Tabnanny Token Error. + +- File / New will by default save in the directory of the Edit window from + which it was initiated. SF 748973 Guido van Rossum patch. + + +What's New in IDLEfork 0.9b1? +============================= +*Release date: 02-Jun-2003* + +- The current working directory of the execution environment (and shell + following completion of execution) is now that of the module being run. + +- Added the delete-exitfunc option to config-main.def. (This option is not + included in the Options dialog.) Setting this to True (the default) will + cause IDLE to not run sys.exitfunc/atexit when the subprocess exits. + +- IDLE now preserves the line ending codes when editing a file produced on + a different platform. SF 661759, SF 538584 + +- Reduced default editor font size to 10 point and increased window height + to provide a better initial impression on Windows. + +- Options / Fonts/Tabs / Set Base Editor Font: List box was not highlighting + the default font when first installed on Windows. SF 661676 + +- Added Autosave feature: when user runs code from edit window, if the file + has been modified IDLE will silently save it if Autosave is enabled. The + option is set in the Options dialog, and the default is to prompt the + user to save the file. SF 661318 Bruce Sherwood patch. + +- Improved the RESTART annotation in the shell window when the user restarts + the shell while it is generating output. Also improved annotation when user + repeatedly hammers the Ctrl-F6 restart. + +- Allow IDLE to run when not installed and cwd is not the IDLE directory + SF Patch 686254 "Run IDLEfork from any directory without set-up" - Raphael + +- When a module is run from an EditorWindow: if its directory is not in + sys.path, prepend it. This allows the module to import other modules in + the same directory. Do the same for a script run from the command line. + +- Correctly restart the subprocess if it is running user code and the user + attempts to run some other module or restarts the shell. Do the same if + the link is broken and it is possible to restart the subprocess and re- + connect to the GUI. SF RFE 661321. + +- Improved exception reporting when running commands or scripts from the + command line. + +- Added a -n command line switch to start IDLE without the subprocess. + Removed the Shell menu when running in that mode. Updated help messages. + +- Added a comment to the shell startup header to indicate when IDLE is not + using the subprocess. + +- Restore the ability to run without the subprocess. This can be important for + some platforms or configurations. (Running without the subprocess allows the + debugger to trace through parts of IDLE itself, which may or may not be + desirable, depending on your point of view. In addition, the traditional + reload/import tricks must be use if user source code is changed.) This is + helpful for developing IDLE using IDLE, because one instance can be used to + edit the code and a separate instance run to test changes. (Multiple + concurrent IDLE instances with subprocesses is a future feature) + +- Improve the error message a user gets when saving a file with non-ASCII + characters and no source encoding is specified. Done by adding a dialog + 'EncodingMessage', which contains the line to add in a fixed-font entry + widget, and which has a button to add that line to the file automatically. + Also, add a configuration option 'EditorWindow/encoding', which has three + possible values: none, utf-8, and locale. None is the default: IDLE will show + this dialog when non-ASCII characters are encountered. utf-8 means that files + with non-ASCII characters are saved as utf-8-with-bom. locale means that + files are saved in the locale's encoding; the dialog is only displayed if the + source contains characters outside the locale's charset. SF 710733 - Loewis + +- Improved I/O response by tweaking the wait parameter in various + calls to signal.signal(). + +- Implemented a threaded subprocess which allows interrupting a pass + loop in user code using the 'interrupt' extension. User code runs + in MainThread, while the RPCServer is handled by SockThread. This is + necessary because Windows doesn't support signals. + +- Implemented the 'interrupt' extension module, which allows a subthread + to raise a KeyboardInterrupt in the main thread. + +- Attempting to save the shell raised an error related to saving + breakpoints, which are not implemented in the shell + +- Provide a correct message when 'exit' or 'quit' are entered at the + IDLE command prompt SF 695861 + +- Eliminate extra blank line in shell output caused by not flushing + stdout when user code ends with an unterminated print. SF 695861 + +- Moved responsibility for exception formatting (i.e. pruning IDLE internal + calls) out of rpc.py into the client and server. + +- Exit IDLE cleanly even when doing subprocess I/O + +- Handle subprocess interrupt with an RPC message. + +- Restart the subprocess if it terminates itself. (VPython programs do that) + +- Support subclassing of exceptions, including in the shell, by moving the + exception formatting to the subprocess. + + +What's New in IDLEfork 0.9 Alpha 2? +=================================== +*Release date: 27-Jan-2003* + +- Updated INSTALL.txt to claify use of the python2 rpm. + +- Improved formatting in IDLE Help. + +- Run menu: Replace "Run Script" with "Run Module". + +- Code encountering an unhandled exception under the debugger now shows + the correct traceback, with IDLE internal levels pruned out. + +- If an exception occurs entirely in IDLE, don't prune the IDLE internal + modules from the traceback displayed. + +- Class Browser and Path Browser now use Alt-Key-2 for vertical zoom. + +- IDLE icons will now install correctly even when setup.py is run from the + build directory + +- Class Browser now compatible with Python2.3 version of pyclbr.py + +- Left cursor move in presence of selected text now moves from left end + of the selection. + +- Add Meta keybindings to "IDLE Classic Windows" to handle reversed + Alt/Meta on some Linux distros. + +- Change default: IDLE now starts with Python Shell. + +- Removed the File Path from the Additional Help Sources scrolled list. + +- Add capability to access Additional Help Sources on the web if the + Help File Path begins with //http or www. (Otherwise local path is + validated, as before.) + +- Additional Help Sources were not being posted on the Help menu in the + order entered. Implement sorting the list by [HelpFiles] 'option' + number. + +- Add Browse button to New Help Source dialog. Arrange to start in + Python/Doc if platform is Windows, otherwise start in current directory. + +- Put the Additional Help Sources directly on the Help menu instead of in + an Extra Help cascade menu. Rearrange the Help menu so the Additional + Help Sources come last. Update help.txt appropriately. + +- Fix Tk root pop-ups in configSectionNameDialog.py and configDialog.py + +- Uniform capitalization in General tab of ConfigDialog, update the doc string. + +- Fix bug in ConfigDialog where SaveAllChangedConfig() was unexpectedly + deleting Additional Help Sources from the user's config file. + +- Make configHelpSourceEdit OK button the default and bind + +- Fix Tk root pop-ups in configHelpSourceEdit: error dialogs not attached + to parents. + +- Use os.startfile() to open both Additional Help and Python Help on the + Windows platform. The application associated with the file type will act as + the viewer. Windows help files (.chm) are now supported via the + Settings/General/Additional Help facility. + +- If Python Help files are installed locally on Linux, use them instead of + accessing python.org. + +- Make the methods for finding the Python help docs more robust, and make + them work in the installed configuration, also. + +- On the Save Before Run dialog, make the OK button the default. One + less mouse action! + +- Add a method: EditorWindow.get_geometry() for future use in implementing + window location persistence. + +- Removed the "Help/Advice" menu entry. Thanks, David! We'll remember! + +- Change the "Classic Windows" theme's paste key to be . + +- Rearrange the Shell menu to put Stack Viewer entries adjacent. + +- Add the ability to restart the subprocess interpreter from the shell window; + add an associated menu entry "Shell/Restart" with binding Control-F6. Update + IDLE help. + +- Upon a restart, annotate the shell window with a "restart boundary". Add a + shell window menu "Shell/View Restart" with binding F6 to jump to the most + recent restart boundary. + +- Add Shell menu to Python Shell; change "Settings" to "Options". + +- Remove incorrect comment in setup.py: IDLEfork is now installed as a package. + +- Add INSTALL.txt, HISTORY.txt, NEWS.txt to installed configuration. + +- In installer text, fix reference to Visual Python, should be VPython. + Properly credit David Scherer. + +- Modified idle, idle.py, idle.pyw to improve exception handling. + + +What's New in IDLEfork 0.9 Alpha 1? +=================================== +*Release date: 31-Dec-2002* + +- First release of major new functionality. For further details refer to + Idle-dev and/or the Sourceforge CVS. + +- Adapted to the Mac platform. + +- Overhauled the IDLE startup options and revised the idle -h help message, + which provides details of command line usage. + +- Multiple bug fixes and usability enhancements. + +- Introduced the new RPC implementation, which includes a debugger. The output + of user code is to the shell, and the shell may be used to inspect the + environment after the run has finished. (In version 0.8.1 the shell + environment was separate from the environment of the user code.) + +- Introduced the configuration GUI and a new About dialog. + +- Removed David Scherer's Remote Procedure Call code and replaced with Guido + van Rossum's. GvR code has support for the IDLE debugger and uses the shell + to inspect the environment of code Run from an Edit window. Files removed: + ExecBinding.py, loader.py, protocol.py, Remote.py, spawn.py + +-------------------------------------------------------------------- +Refer to HISTORY.txt for additional information on earlier releases. +-------------------------------------------------------------------- diff --git a/Lib/idlelib/ParenMatch.py b/Lib/idlelib/ParenMatch.py index 19bad8c..47e10f3 100644 --- a/Lib/idlelib/ParenMatch.py +++ b/Lib/idlelib/ParenMatch.py @@ -9,7 +9,7 @@ from idlelib.HyperParser import HyperParser from idlelib.configHandler import idleConf _openers = {')':'(',']':'[','}':'{'} -CHECK_DELAY = 100 # miliseconds +CHECK_DELAY = 100 # milliseconds class ParenMatch: """Highlight matching parentheses diff --git a/Lib/idlelib/README.txt b/Lib/idlelib/README.txt index 7bf74c0..ff44504 100644 --- a/Lib/idlelib/README.txt +++ b/Lib/idlelib/README.txt @@ -16,7 +16,7 @@ and omissions and lag behind changes in idlelib. IDLELIB FILES -Implemetation files not in IDLE MENU are marked (nim). +Implementation files not in IDLE MENU are marked (nim). Deprecated files and objects are listed separately as the end. Startup @@ -161,14 +161,15 @@ Edit Show surrounding parens # ParenMatch (& Hyperparser) Shell # PyShell - View Last Restart # PyShell.? - Restart Shell # PyShell.? + View Last Restart # PyShell.PyShell.view_restart_mark + Restart Shell # PyShell.PyShell.restart_shell + Interrupt Execution # pyshell.PyShell.cancel_callback Debug (Shell only) Go to File/Line - Debugger # Debugger, RemoteDebugger - Stack Viewer # StackViewer - Auto-open Stack Viewer # StackViewer + Debugger # Debugger, RemoteDebugger, PyShell.toggle_debuger + Stack Viewer # StackViewer, PyShell.open_stack_viewer + Auto-open Stack Viewer # StackViewer Format (Editor only) Indent Region diff --git a/Lib/idlelib/aboutDialog.py b/Lib/idlelib/aboutDialog.py index 0457c43..a8f75d2 100644 --- a/Lib/idlelib/aboutDialog.py +++ b/Lib/idlelib/aboutDialog.py @@ -145,5 +145,7 @@ class AboutDialog(Toplevel): self.destroy() if __name__ == '__main__': + import unittest + unittest.main('idlelib.idle_test.test_helpabout', verbosity=2, exit=False) from idlelib.idle_test.htest import run run(AboutDialog) diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py index b702253..5f5bd36 100644 --- a/Lib/idlelib/configDialog.py +++ b/Lib/idlelib/configDialog.py @@ -751,6 +751,7 @@ class ConfigDialog(Toplevel): if not tkMessageBox.askyesno( 'Delete Key Set', delmsg % keySetName, parent=self): return + self.DeactivateCurrentConfig() #remove key set from config idleConf.userCfg['keys'].remove_section(keySetName) if keySetName in self.changedItems['keys']: @@ -769,7 +770,8 @@ class ConfigDialog(Toplevel): self.keysAreBuiltin.set(idleConf.defaultCfg['main'].Get('Keys', 'default')) self.builtinKeys.set(idleConf.defaultCfg['main'].Get('Keys', 'name')) #user can't back out of these changes, they must be applied now - self.Apply() + self.SaveAllChangedConfigs() + self.ActivateConfigChanges() self.SetKeysType() def DeleteCustomTheme(self): @@ -778,6 +780,7 @@ class ConfigDialog(Toplevel): if not tkMessageBox.askyesno( 'Delete Theme', delmsg % themeName, parent=self): return + self.DeactivateCurrentConfig() #remove theme from config idleConf.userCfg['highlight'].remove_section(themeName) if themeName in self.changedItems['highlight']: @@ -796,7 +799,8 @@ class ConfigDialog(Toplevel): self.themeIsBuiltin.set(idleConf.defaultCfg['main'].Get('Theme', 'default')) self.builtinTheme.set(idleConf.defaultCfg['main'].Get('Theme', 'name')) #user can't back out of these changes, they must be applied now - self.Apply() + self.SaveAllChangedConfigs() + self.ActivateConfigChanges() self.SetThemeType() def GetColour(self): diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py index 8ac1f60..8954488 100644 --- a/Lib/idlelib/configHandler.py +++ b/Lib/idlelib/configHandler.py @@ -740,21 +740,32 @@ class IdleConf: idleConf = IdleConf() # TODO Revise test output, write expanded unittest -### module test +# if __name__ == '__main__': + from zlib import crc32 + line, crc = 0, 0 + + def sprint(obj): + global line, crc + txt = str(obj) + line += 1 + crc = crc32(txt.encode(encoding='utf-8'), crc) + print(txt) + #print('***', line, crc, '***') # uncomment for diagnosis + def dumpCfg(cfg): - print('\n', cfg, '\n') - for key in cfg: + print('\n', cfg, '\n') # has variable '0xnnnnnnnn' addresses + for key in sorted(cfg.keys()): sections = cfg[key].sections() - print(key) - print(sections) + sprint(key) + sprint(sections) for section in sections: options = cfg[key].options(section) - print(section) - print(options) + sprint(section) + sprint(options) for option in options: - print(option, '=', cfg[key].Get(section, option)) + sprint(option + ' = ' + cfg[key].Get(section, option)) + dumpCfg(idleConf.defaultCfg) dumpCfg(idleConf.userCfg) - print(idleConf.userCfg['main'].Get('Theme', 'name')) - #print idleConf.userCfg['highlight'].GetDefHighlight('Foo','normal') + print('\nlines = ', line, ', crc = ', crc, sep='') diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html index 6f739c4..ffc03c4 100644 --- a/Lib/idlelib/help.html +++ b/Lib/idlelib/help.html @@ -6,7 +6,7 @@ - 25.5. IDLE — Python 3.5.1 documentation + 25.5. IDLE — Python 3.5.2 documentation @@ -14,7 +14,7 @@ - + @@ -60,11 +60,26 @@ style="vertical-align: middle; margin-top: -1px"/>

      1. Python »
      2. - 3.5.1 Documentation » + 3.5.2 Documentation »
      3. +
      4. + + + + + | +
      5. +

        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

      @@ -240,6 +255,8 @@ line.
      Scroll the shell window to the last Shell restart.
      Restart Shell
      Restart the shell to clean the environment.
      +
      Interrupt Execution
      +
      Stop a running program.
      @@ -492,12 +509,12 @@ executed in the Tk namespace, so this file is not useful for importing functions to be used from IDLE’s Python shell.

      25.5.3.1. Command line usage¶

      -
      idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ...
      +
      idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ...
       
       -c command  run command in the shell window
       -d          enable debugger and open shell window
       -e          open editor window
      --h          print help message with legal combinatios and exit
      +-h          print help message with legal combinations and exit
       -i          open shell window
       -r file     run file in shell window
       -s          run $IDLESTARTUP or $PYTHONSTARTUP first, in shell window
      @@ -526,10 +543,12 @@ objects that get input from and send output to the Shell window.
       When this window has the focus, it controls the keyboard and screen.
       This is normally transparent, but functions that directly access the keyboard
       and screen will not work.  If sys is reset with importlib.reload(sys),
      -IDLE’s changes are lost and things li ke input, raw_input, and
      +IDLE’s changes are lost and things like input, raw_input, and
       print will not work correctly.

      With IDLE’s Shell, one enters, edits, and recalls complete statements. -Some consoles only work with a single physical line at a time.

      +Some consoles only work with a single physical line at a time. IDLE uses +exec to run each statement. As a result, '__builtins__' is always +defined for each statement.

      25.5.3.3. Running without a subprocess¶

      @@ -647,26 +666,14 @@ are currently:

      Next topic

      25.6. Other Graphical User Interface Packages

      -

      This Page

      - - - - +
      +

      This Page

      + +
      @@ -690,11 +697,26 @@ are currently:

      style="vertical-align: middle; margin-top: -1px"/>
    1. Python »
    2. - 3.5.1 Documentation » + 3.5.2 Documentation »
    3. +
    4. + + + + + | +
    5. +
      diff --git a/Lib/idlelib/help.py b/Lib/idlelib/help.py index d0c59c5..a7008e9 100644 --- a/Lib/idlelib/help.py +++ b/Lib/idlelib/help.py @@ -26,6 +26,7 @@ show_idlehelp - Create HelpWindow. Called in EditorWindow.help_dialog. """ from html.parser import HTMLParser from os.path import abspath, dirname, isdir, isfile, join +from platform import python_version from tkinter import Tk, Toplevel, Frame, Text, Scrollbar, Menu, Menubutton from tkinter import font as tkfont from idlelib.configHandler import idleConf @@ -265,7 +266,7 @@ def show_idlehelp(parent): if not isfile(filename): # try copy_strip, present message return - HelpWindow(parent, filename, 'IDLE Help') + HelpWindow(parent, filename, 'IDLE Help (%s)' % python_version()) if __name__ == '__main__': from idlelib.idle_test.htest import run diff --git a/Lib/idlelib/idle.py b/Lib/idlelib/idle.py index a249557..141534d 100644 --- a/Lib/idlelib/idle.py +++ b/Lib/idlelib/idle.py @@ -1,11 +1,13 @@ import os.path import sys -# If we are working on a development version of IDLE, we need to prepend the -# parent of this idlelib dir to sys.path. Otherwise, importing idlelib gets -# the version installed with the Python used to call this module: +# Enable running IDLE with idlelib in a non-standard location. +# This was once used to run development versions of IDLE. +# Because PEP 434 declared idle.py a public interface, +# removal should require deprecation. idlelib_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -sys.path.insert(0, idlelib_dir) +if idlelib_dir not in sys.path: + sys.path.insert(0, idlelib_dir) -import idlelib.PyShell -idlelib.PyShell.main() +from idlelib.PyShell import main # This is subject to change +main() diff --git a/Lib/idlelib/idle_test/test_autocomplete.py b/Lib/idlelib/idle_test/test_autocomplete.py index e4493d1..5fc899d 100644 --- a/Lib/idlelib/idle_test/test_autocomplete.py +++ b/Lib/idlelib/idle_test/test_autocomplete.py @@ -4,7 +4,6 @@ from tkinter import Tk, Text import idlelib.AutoComplete as ac import idlelib.AutoCompleteWindow as acw -import idlelib.macosxSupport as mac from idlelib.idle_test.mock_idle import Func from idlelib.idle_test.mock_tk import Event @@ -27,7 +26,6 @@ class AutoCompleteTest(unittest.TestCase): def setUpClass(cls): requires('gui') cls.root = Tk() - mac.setupApp(cls.root, None) cls.text = Text(cls.root) cls.editor = DummyEditwin(cls.root, cls.text) diff --git a/Lib/idlelib/idle_test/test_configdialog.py b/Lib/idlelib/idle_test/test_configdialog.py index b063601..5c09790 100644 --- a/Lib/idlelib/idle_test/test_configdialog.py +++ b/Lib/idlelib/idle_test/test_configdialog.py @@ -15,6 +15,7 @@ class ConfigDialogTest(unittest.TestCase): @classmethod def setUpClass(cls): cls.root = Tk() + cls.root.withdraw() macosx._initializeTkVariantTests(cls.root) @classmethod diff --git a/Lib/idlelib/idle_test/test_editmenu.py b/Lib/idlelib/idle_test/test_editmenu.py index 50317a9..a258e29 100644 --- a/Lib/idlelib/idle_test/test_editmenu.py +++ b/Lib/idlelib/idle_test/test_editmenu.py @@ -16,6 +16,7 @@ class PasteTest(unittest.TestCase): @classmethod def setUpClass(cls): cls.root = root = tk.Tk() + root.withdraw() PyShell.fix_x11_paste(root) cls.text = tk.Text(root) cls.entry = tk.Entry(root) diff --git a/Lib/idlelib/idle_test/test_formatparagraph.py b/Lib/idlelib/idle_test/test_formatparagraph.py index e5561d8..b6eb2f3 100644 --- a/Lib/idlelib/idle_test/test_formatparagraph.py +++ b/Lib/idlelib/idle_test/test_formatparagraph.py @@ -159,7 +159,7 @@ class FindTest(unittest.TestCase): class ReformatFunctionTest(unittest.TestCase): """Test the reformat_paragraph function without the editor window.""" - def test_reformat_paragrah(self): + def test_reformat_paragraph(self): Equal = self.assertEqual reform = fp.reformat_paragraph hw = "O hello world" diff --git a/Lib/idlelib/idle_test/test_help_about.py b/Lib/idlelib/idle_test/test_help_about.py new file mode 100644 index 0000000..d0a0127 --- /dev/null +++ b/Lib/idlelib/idle_test/test_help_about.py @@ -0,0 +1,52 @@ +'''Test idlelib.help_about. + +Coverage: +''' +from idlelib import aboutDialog as help_about +from idlelib import textView as textview +from idlelib.idle_test.mock_idle import Func +from idlelib.idle_test.mock_tk import Mbox +import unittest + +About = help_about.AboutDialog +class Dummy_about_dialog(): + # Dummy class for testing file display functions. + idle_credits = About.ShowIDLECredits + idle_readme = About.ShowIDLEAbout + idle_news = About.ShowIDLENEWS + # Called by the above + display_file_text = About.display_file_text + + +class DisplayFileTest(unittest.TestCase): + "Test that .txt files are found and properly decoded." + dialog = Dummy_about_dialog() + + @classmethod + def setUpClass(cls): + cls.orig_mbox = textview.tkMessageBox + cls.orig_view = textview.view_text + cls.mbox = Mbox() + cls.view = Func() + textview.tkMessageBox = cls.mbox + textview.view_text = cls.view + cls.About = Dummy_about_dialog() + + @classmethod + def tearDownClass(cls): + textview.tkMessageBox = cls.orig_mbox + textview.view_text = cls.orig_view + + def test_file_isplay(self): + for handler in (self.dialog.idle_credits, + self.dialog.idle_readme, + self.dialog.idle_news): + self.mbox.showerror.message = '' + self.view.called = False + handler() + self.assertEqual(self.mbox.showerror.message, '') + self.assertEqual(self.view.called, True) + + +if __name__ == '__main__': + unittest.main(verbosity=2) diff --git a/Lib/idlelib/idle_test/test_hyperparser.py b/Lib/idlelib/idle_test/test_hyperparser.py index edfc783..9ce3f2c 100644 --- a/Lib/idlelib/idle_test/test_hyperparser.py +++ b/Lib/idlelib/idle_test/test_hyperparser.py @@ -37,6 +37,7 @@ class HyperParserTest(unittest.TestCase): def setUpClass(cls): requires('gui') cls.root = Tk() + cls.root.withdraw() cls.text = Text(cls.root) cls.editwin = DummyEditwin(cls.text) diff --git a/Lib/idlelib/idle_test/test_idlehistory.py b/Lib/idlelib/idle_test/test_idlehistory.py index d7c3d70..6e7c6c3 100644 --- a/Lib/idlelib/idle_test/test_idlehistory.py +++ b/Lib/idlelib/idle_test/test_idlehistory.py @@ -68,6 +68,7 @@ class FetchTest(unittest.TestCase): def setUpClass(cls): requires('gui') cls.root = tk.Tk() + cls.root.withdraw() def setUp(self): self.text = text = TextWrapper(self.root) diff --git a/Lib/idlelib/idle_test/test_textview.py b/Lib/idlelib/idle_test/test_textview.py index 02d1472..5d2e600 100644 --- a/Lib/idlelib/idle_test/test_textview.py +++ b/Lib/idlelib/idle_test/test_textview.py @@ -20,16 +20,16 @@ from idlelib.idle_test.mock_tk import Mbox def setUpModule(): global root root = Tk() + root.withdraw() def tearDownModule(): - global root, TV - del TV + global root root.update_idletasks() - root.destroy() # pyflakes falsely sees root as undefined + root.destroy() # Pyflakes falsely sees root as undefined. del root -class TV(tv.TextViewer): # used by TextViewTest +class TV(tv.TextViewer): # Used in TextViewTest. transient = Func() grab_set = Func() wait_window = Func() @@ -60,8 +60,8 @@ class TextViewTest(unittest.TestCase): view.destroy = Func() view.Ok() self.assertTrue(view.destroy.called) - del view.destroy # unmask real function - view.destroy + del view.destroy # Unmask real function. + view.destroy() class textviewTest(unittest.TestCase): @@ -77,9 +77,10 @@ class textviewTest(unittest.TestCase): del cls.orig_mbox def test_view_text(self): - # If modal True, tkinter will error with 'can't invoke "event" command' + # If modal True, get tk error 'can't invoke "event" command'. view = tv.view_text(root, 'Title', 'test text', modal=False) self.assertIsInstance(view, tv.TextViewer) + view.Ok() def test_view_file(self): test_dir = os.path.dirname(__file__) diff --git a/Lib/idlelib/idle_test/test_widgetredir.py b/Lib/idlelib/idle_test/test_widgetredir.py index c68dfcc..baa975d 100644 --- a/Lib/idlelib/idle_test/test_widgetredir.py +++ b/Lib/idlelib/idle_test/test_widgetredir.py @@ -15,6 +15,7 @@ class InitCloseTest(unittest.TestCase): def setUpClass(cls): requires('gui') cls.root = Tk() + cls.root.withdraw() cls.text = Text(cls.root) @classmethod @@ -44,6 +45,7 @@ class WidgetRedirectorTest(unittest.TestCase): def setUpClass(cls): requires('gui') cls.root = Tk() + cls.root.withdraw() cls.text = Text(cls.root) @classmethod diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py index 595e7bc..28ce420 100644 --- a/Lib/idlelib/run.py +++ b/Lib/idlelib/run.py @@ -19,6 +19,12 @@ from idlelib import IOBinding import __main__ +for mod in ('simpledialog', 'messagebox', 'font', + 'dialog', 'filedialog', 'commondialog', + 'colorchooser'): + delattr(tkinter, mod) + del sys.modules['tkinter.' + mod] + LOCALHOST = '127.0.0.1' import warnings diff --git a/Lib/idlelib/textView.py b/Lib/idlelib/textView.py index 01b2d8f..12ac319 100644 --- a/Lib/idlelib/textView.py +++ b/Lib/idlelib/textView.py @@ -76,6 +76,10 @@ def view_file(parent, title, filename, encoding=None, modal=True): tkMessageBox.showerror(title='File Load Error', message='Unable to load file %r .' % filename, parent=parent) + except UnicodeDecodeError as err: + tkMessageBox.showerror(title='Unicode Decode Error', + message=str(err), + parent=parent) else: return view_text(parent, title, contents, modal) diff --git a/Lib/imaplib.py b/Lib/imaplib.py index 4e8a4bb..2f7e933 100644 --- a/Lib/imaplib.py +++ b/Lib/imaplib.py @@ -411,7 +411,7 @@ class IMAP4: self.literal = _Authenticator(authobject).process typ, dat = self._simple_command('AUTHENTICATE', mech) if typ != 'OK': - raise self.error(dat[-1]) + raise self.error(dat[-1].decode('utf-8', 'replace')) self.state = 'AUTH' return typ, dat diff --git a/Lib/imp.py b/Lib/imp.py index f6fff44..e264391 100644 --- a/Lib/imp.py +++ b/Lib/imp.py @@ -266,8 +266,8 @@ def find_module(name, path=None): raise TypeError("'name' must be a str, not {}".format(type(name))) elif not isinstance(path, (type(None), list)): # Backwards-compatibility - raise RuntimeError("'list' must be None or a list, " - "not {}".format(type(name))) + raise RuntimeError("'path' must be None or a list, " + "not {}".format(type(path))) if path is None: if is_builtin(name): diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 9788828..e54d691 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -21,15 +21,22 @@ work. One should use importlib as the public-facing version of this module. # anything specified at the class level. # Bootstrap-related code ###################################################### - -_CASE_INSENSITIVE_PLATFORMS = 'win', 'cygwin', 'darwin' +_CASE_INSENSITIVE_PLATFORMS_STR_KEY = 'win', +_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY = 'cygwin', 'darwin' +_CASE_INSENSITIVE_PLATFORMS = (_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY + + _CASE_INSENSITIVE_PLATFORMS_STR_KEY) def _make_relax_case(): if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS): + if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS_STR_KEY): + key = 'PYTHONCASEOK' + else: + key = b'PYTHONCASEOK' + def _relax_case(): """True if filenames must be checked case-insensitively.""" - return b'PYTHONCASEOK' in _os.environ + return key in _os.environ else: def _relax_case(): """True if filenames must be checked case-insensitively.""" @@ -223,6 +230,7 @@ _code_type = type(_write_atomic.__code__) # Python 3.5b1 3330 (PEP 448: Additional Unpacking Generalizations) # Python 3.5b2 3340 (fix dictionary display evaluation order #11205) # Python 3.5b2 3350 (add GET_YIELD_FROM_ITER opcode #24400) +# Python 3.5.2 3351 (fix BUILD_MAP_UNPACK_WITH_CALL opcode #27286) # # MAGIC must change whenever the bytecode emitted by the compiler may no # longer be understood by older implementations of the eval loop (usually @@ -231,7 +239,7 @@ _code_type = type(_write_atomic.__code__) # Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array # in PC/launcher.c must also be updated. -MAGIC_NUMBER = (3350).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3351).to_bytes(2, 'little') + b'\r\n' _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c _PYCACHE = '__pycache__' diff --git a/Lib/importlib/util.py b/Lib/importlib/util.py index 4525b3f..e1fa07a 100644 --- a/Lib/importlib/util.py +++ b/Lib/importlib/util.py @@ -241,7 +241,7 @@ class _LazyModule(types.ModuleType): if id(self) != id(sys.modules[original_name]): msg = ('module object for {!r} substituted in sys.modules ' 'during a lazy load') - raise ValueError(msg.format(original_name)) + raise ValueError(msg.format(original_name)) # Update after loading since that's what would happen in an eager # loading situation. self.__dict__.update(attrs_updated) diff --git a/Lib/inspect.py b/Lib/inspect.py index e830eb6..6b9e0b0 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -171,9 +171,8 @@ def isfunction(object): def isgeneratorfunction(object): """Return true if the object is a user-defined generator function. - Generator function objects provides same attributes as functions. - - See help(isfunction) for attributes listing.""" + Generator function objects provide the same attributes as functions. + See help(isfunction) for a list of attributes.""" return bool((isfunction(object) or ismethod(object)) and object.__code__.co_flags & CO_GENERATOR) @@ -208,10 +207,10 @@ def iscoroutine(object): return isinstance(object, types.CoroutineType) def isawaitable(object): - """Return true is object can be passed to an ``await`` expression.""" + """Return true if object can be passed to an ``await`` expression.""" return (isinstance(object, types.CoroutineType) or isinstance(object, types.GeneratorType) and - object.gi_code.co_flags & CO_ITERABLE_COROUTINE or + bool(object.gi_code.co_flags & CO_ITERABLE_COROUTINE) or isinstance(object, collections.abc.Awaitable)) def istraceback(object): @@ -1153,6 +1152,8 @@ def getargvalues(frame): return ArgInfo(args, varargs, varkw, frame.f_locals) def formatannotation(annotation, base_module=None): + if getattr(annotation, '__module__', None) == 'typing': + return repr(annotation).replace('typing.', '') if isinstance(annotation, type): if annotation.__module__ in ('builtins', base_module): return annotation.__qualname__ @@ -1415,7 +1416,7 @@ def getframeinfo(frame, context=1): except OSError: lines = index = None else: - start = max(start, 1) + start = max(start, 0) start = max(0, min(start, len(lines) - context)) lines = lines[start:start+context] index = lineno - 1 - start diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py index 2612657..1118b0e 100644 --- a/Lib/json/__init__.py +++ b/Lib/json/__init__.py @@ -152,7 +152,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, ``default(obj)`` is a function that should return a serializable version of obj or raise TypeError. The default simply raises TypeError. - If *sort_keys* is ``True`` (default: ``False``), then the output of + If *sort_keys* is true (default: ``False``), then the output of dictionaries will be sorted by key. To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the @@ -214,7 +214,7 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, ``default(obj)`` is a function that should return a serializable version of obj or raise TypeError. The default simply raises TypeError. - If *sort_keys* is ``True`` (default: ``False``), then the output of + If *sort_keys* is true (default: ``False``), then the output of dictionaries will be sorted by key. To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the @@ -297,7 +297,7 @@ def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, for JSON integers (e.g. float). ``parse_constant``, if specified, will be called with one of the - following strings: -Infinity, Infinity, NaN, null, true, false. + following strings: -Infinity, Infinity, NaN. This can be used to raise an exception if invalid JSON numbers are encountered. diff --git a/Lib/lib2to3/Grammar.txt b/Lib/lib2to3/Grammar.txt index c954669..60503dd 100644 --- a/Lib/lib2to3/Grammar.txt +++ b/Lib/lib2to3/Grammar.txt @@ -138,15 +138,26 @@ subscript: test | [test] ':' [test] [sliceop] sliceop: ':' [test] exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] testlist: test (',' test)* [','] -dictsetmaker: ( (test ':' test (comp_for | (',' test ':' test)* [','])) | - (test (comp_for | (',' test)* [','])) ) +dictsetmaker: ( ((test ':' test | '**' expr) + (comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (comp_for | (',' (test | star_expr))* [','])) ) classdef: 'class' NAME ['(' [arglist] ')'] ':' suite -arglist: (argument ',')* (argument [','] - |'*' test (',' argument)* [',' '**' test] - |'**' test) -argument: test [comp_for] | test '=' test # Really [keyword '='] test +arglist: argument (',' argument)* [','] + +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguments are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [comp_for] | + test '=' test | + '**' expr | + star_expr ) comp_iter: comp_for | comp_if comp_for: 'for' exprlist 'in' testlist_safe [comp_iter] diff --git a/Lib/lib2to3/fixer_base.py b/Lib/lib2to3/fixer_base.py index 1ce62fe..df581a4 100644 --- a/Lib/lib2to3/fixer_base.py +++ b/Lib/lib2to3/fixer_base.py @@ -4,7 +4,6 @@ """Base class for fixers (optional, but recommended).""" # Python imports -import logging import itertools # Local imports diff --git a/Lib/lib2to3/fixes/fix_apply.py b/Lib/lib2to3/fixes/fix_apply.py index 81a46dc..826ec8c 100644 --- a/Lib/lib2to3/fixes/fix_apply.py +++ b/Lib/lib2to3/fixes/fix_apply.py @@ -34,6 +34,17 @@ class FixApply(fixer_base.BaseFix): func = results["func"] args = results["args"] kwds = results.get("kwds") + # I feel like we should be able to express this logic in the + # PATTERN above but I don't know how to do it so... + if args: + if args.type == self.syms.star_expr: + return # Make no change. + if (args.type == self.syms.argument and + args.children[0].value == '**'): + return # Make no change. + if kwds and (kwds.type == self.syms.argument and + kwds.children[0].value == '**'): + return # Make no change. prefix = node.prefix func = func.clone() if (func.type not in (token.NAME, syms.atom) and diff --git a/Lib/lib2to3/fixes/fix_callable.py b/Lib/lib2to3/fixes/fix_callable.py deleted file mode 100644 index 4c92b9c..0000000 --- a/Lib/lib2to3/fixes/fix_callable.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright 2007 Google, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -"""Fixer for callable(). - -This converts callable(obj) into isinstance(obj, collections.Callable), adding a -collections import if needed.""" - -# Local imports -from lib2to3 import fixer_base -from lib2to3.fixer_util import Call, Name, String, Attr, touch_import - -class FixCallable(fixer_base.BaseFix): - BM_compatible = True - - order = "pre" - - # Ignore callable(*args) or use of keywords. - # Either could be a hint that the builtin callable() is not being used. - PATTERN = """ - power< 'callable' - trailer< lpar='(' - ( not(arglist | argument) any ','> ) - rpar=')' > - after=any* - > - """ - - def transform(self, node, results): - func = results['func'] - - touch_import(None, 'collections', node=node) - - args = [func.clone(), String(', ')] - args.extend(Attr(Name('collections'), Name('Callable'))) - return Call(Name('isinstance'), args, prefix=node.prefix) diff --git a/Lib/lib2to3/fixes/fix_intern.py b/Lib/lib2to3/fixes/fix_intern.py index fb2973c..a852330 100644 --- a/Lib/lib2to3/fixes/fix_intern.py +++ b/Lib/lib2to3/fixes/fix_intern.py @@ -25,6 +25,16 @@ class FixIntern(fixer_base.BaseFix): """ def transform(self, node, results): + if results: + # I feel like we should be able to express this logic in the + # PATTERN above but I don't know how to do it so... + obj = results['obj'] + if obj: + if obj.type == self.syms.star_expr: + return # Make no change. + if (obj.type == self.syms.argument and + obj.children[0].value == '**'): + return # Make no change. names = ('sys', 'intern') new = ImportAndCall(node, results, names) touch_import(None, 'sys', node) diff --git a/Lib/lib2to3/fixes/fix_reload.py b/Lib/lib2to3/fixes/fix_reload.py index 1855357..5bec7d5 100644 --- a/Lib/lib2to3/fixes/fix_reload.py +++ b/Lib/lib2to3/fixes/fix_reload.py @@ -22,6 +22,16 @@ class FixReload(fixer_base.BaseFix): """ def transform(self, node, results): + if results: + # I feel like we should be able to express this logic in the + # PATTERN above but I don't know how to do it so... + obj = results['obj'] + if obj: + if obj.type == self.syms.star_expr: + return # Make no change. + if (obj.type == self.syms.argument and + obj.children[0].value == '**'): + return # Make no change. names = ('imp', 'reload') new = ImportAndCall(node, results, names) touch_import(None, 'imp', node) diff --git a/Lib/lib2to3/pgen2/driver.py b/Lib/lib2to3/pgen2/driver.py index 3ccc69d..a27b9cb 100644 --- a/Lib/lib2to3/pgen2/driver.py +++ b/Lib/lib2to3/pgen2/driver.py @@ -106,16 +106,19 @@ class Driver(object): return self.parse_tokens(tokens, debug) +def _generate_pickle_name(gt): + head, tail = os.path.splitext(gt) + if tail == ".txt": + tail = "" + return head + tail + ".".join(map(str, sys.version_info)) + ".pickle" + + def load_grammar(gt="Grammar.txt", gp=None, save=True, force=False, logger=None): """Load the grammar (maybe from a pickle).""" if logger is None: logger = logging.getLogger() - if gp is None: - head, tail = os.path.splitext(gt) - if tail == ".txt": - tail = "" - gp = head + tail + ".".join(map(str, sys.version_info)) + ".pickle" + gp = _generate_pickle_name(gt) if gp is None else gp if force or not _newer(gp, gt): logger.info("Generating grammar tables from %s", gt) g = pgen.generate_grammar(gt) @@ -124,7 +127,7 @@ def load_grammar(gt="Grammar.txt", gp=None, try: g.dump(gp) except OSError as e: - logger.info("Writing failed:"+str(e)) + logger.info("Writing failed: %s", e) else: g = grammar.Grammar() g.load(gp) diff --git a/Lib/lib2to3/pgen2/grammar.py b/Lib/lib2to3/pgen2/grammar.py index b4481d1..321e25e 100644 --- a/Lib/lib2to3/pgen2/grammar.py +++ b/Lib/lib2to3/pgen2/grammar.py @@ -13,6 +13,7 @@ fallback token code OP, but the parser needs the actual token code. """ # Python imports +import collections import pickle # Local imports @@ -85,9 +86,21 @@ class Grammar(object): self.start = 256 def dump(self, filename): - """Dump the grammar tables to a pickle file.""" + """Dump the grammar tables to a pickle file. + + dump() recursively changes all dict to OrderedDict, so the pickled file + is not exactly the same as what was passed in to dump(). load() uses the + pickled file to create the tables, but only changes OrderedDict to dict + at the top level; it does not recursively change OrderedDict to dict. + So, the loaded tables are different from the original tables that were + passed to load() in that some of the OrderedDict (from the pickled file) + are not changed back to dict. For parsing, this has no effect on + performance because OrderedDict uses dict's __getitem__ with nothing in + between. + """ with open(filename, "wb") as f: - pickle.dump(self.__dict__, f, 2) + d = _make_deterministic(self.__dict__) + pickle.dump(d, f, 2) def load(self, filename): """Load the grammar tables from a pickle file.""" @@ -124,6 +137,17 @@ class Grammar(object): print("start", self.start) +def _make_deterministic(top): + if isinstance(top, dict): + return collections.OrderedDict( + sorted(((k, _make_deterministic(v)) for k, v in top.items()))) + if isinstance(top, list): + return [_make_deterministic(e) for e in top] + if isinstance(top, tuple): + return tuple(_make_deterministic(e) for e in top) + return top + + # Map from operator to number (since tokenize doesn't do this) opmap_raw = """ diff --git a/Lib/lib2to3/pgen2/pgen.py b/Lib/lib2to3/pgen2/pgen.py index 2c51eef..b0cbd16 100644 --- a/Lib/lib2to3/pgen2/pgen.py +++ b/Lib/lib2to3/pgen2/pgen.py @@ -39,7 +39,7 @@ class ParserGenerator(object): states = [] for state in dfa: arcs = [] - for label, next in state.arcs.items(): + for label, next in sorted(state.arcs.items()): arcs.append((self.make_label(c, label), dfa.index(next))) if state.isfinal: arcs.append((0, dfa.index(state))) @@ -52,7 +52,7 @@ class ParserGenerator(object): def make_first(self, c, name): rawfirst = self.first[name] first = {} - for label in rawfirst: + for label in sorted(rawfirst): ilabel = self.make_label(c, label) ##assert ilabel not in first # XXX failed on <> ... != first[ilabel] = 1 @@ -192,7 +192,7 @@ class ParserGenerator(object): for label, next in nfastate.arcs: if label is not None: addclosure(next, arcs.setdefault(label, {})) - for label, nfaset in arcs.items(): + for label, nfaset in sorted(arcs.items()): for st in states: if st.nfaset == nfaset: break @@ -222,7 +222,7 @@ class ParserGenerator(object): print("Dump of DFA for", name) for i, state in enumerate(dfa): print(" State", i, state.isfinal and "(final)" or "") - for label, next in state.arcs.items(): + for label, next in sorted(state.arcs.items()): print(" %s -> %d" % (label, dfa.index(next))) def simplify_dfa(self, dfa): diff --git a/Lib/lib2to3/tests/support.py b/Lib/lib2to3/tests/support.py index 6f2d214..0897177 100644 --- a/Lib/lib2to3/tests/support.py +++ b/Lib/lib2to3/tests/support.py @@ -11,13 +11,13 @@ from textwrap import dedent # Local imports from lib2to3 import pytree, refactor -from lib2to3.pgen2 import driver +from lib2to3.pgen2 import driver as pgen2_driver test_dir = os.path.dirname(__file__) proj_dir = os.path.normpath(os.path.join(test_dir, "..")) grammar_path = os.path.join(test_dir, "..", "Grammar.txt") -grammar = driver.load_grammar(grammar_path) -driver = driver.Driver(grammar, convert=pytree.convert) +grammar = pgen2_driver.load_grammar(grammar_path) +driver = pgen2_driver.Driver(grammar, convert=pytree.convert) def parse_string(string): return driver.parse_string(reformat(string), debug=True) diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py index 06b0033..640dcef 100644 --- a/Lib/lib2to3/tests/test_fixers.py +++ b/Lib/lib2to3/tests/test_fixers.py @@ -260,6 +260,10 @@ class Test_apply(FixerTestCase): s = """apply(f, *args)""" self.unchanged(s) + def test_unchanged_6b(self): + s = """apply(f, **kwds)""" + self.unchanged(s) + def test_unchanged_7(self): s = """apply(func=f, args=args, kwds=kwds)""" self.unchanged(s) @@ -2920,98 +2924,6 @@ class Test_unicode(FixerTestCase): a = f + r"""r'\\\u20ac\U0001d121\\u20ac'""" self.check(b, a) -class Test_callable(FixerTestCase): - fixer = "callable" - - def test_prefix_preservation(self): - b = """callable( x)""" - a = """import collections\nisinstance( x, collections.Callable)""" - self.check(b, a) - - b = """if callable(x): pass""" - a = """import collections -if isinstance(x, collections.Callable): pass""" - self.check(b, a) - - def test_callable_call(self): - b = """callable(x)""" - a = """import collections\nisinstance(x, collections.Callable)""" - self.check(b, a) - - def test_global_import(self): - b = """ -def spam(foo): - callable(foo)"""[1:] - a = """ -import collections -def spam(foo): - isinstance(foo, collections.Callable)"""[1:] - self.check(b, a) - - b = """ -import collections -def spam(foo): - callable(foo)"""[1:] - # same output if it was already imported - self.check(b, a) - - b = """ -from collections import * -def spam(foo): - callable(foo)"""[1:] - a = """ -from collections import * -import collections -def spam(foo): - isinstance(foo, collections.Callable)"""[1:] - self.check(b, a) - - b = """ -do_stuff() -do_some_other_stuff() -assert callable(do_stuff)"""[1:] - a = """ -import collections -do_stuff() -do_some_other_stuff() -assert isinstance(do_stuff, collections.Callable)"""[1:] - self.check(b, a) - - b = """ -if isinstance(do_stuff, Callable): - assert callable(do_stuff) - do_stuff(do_stuff) - if not callable(do_stuff): - exit(1) - else: - assert callable(do_stuff) -else: - assert not callable(do_stuff)"""[1:] - a = """ -import collections -if isinstance(do_stuff, Callable): - assert isinstance(do_stuff, collections.Callable) - do_stuff(do_stuff) - if not isinstance(do_stuff, collections.Callable): - exit(1) - else: - assert isinstance(do_stuff, collections.Callable) -else: - assert not isinstance(do_stuff, collections.Callable)"""[1:] - self.check(b, a) - - def test_callable_should_not_change(self): - a = """callable(*x)""" - self.unchanged(a) - - a = """callable(x, y)""" - self.unchanged(a) - - a = """callable(x, kw=y)""" - self.unchanged(a) - - a = """callable()""" - self.unchanged(a) class Test_filter(FixerTestCase): fixer = "filter" diff --git a/Lib/lib2to3/tests/test_parser.py b/Lib/lib2to3/tests/test_parser.py index b533c01..e4a0194 100644 --- a/Lib/lib2to3/tests/test_parser.py +++ b/Lib/lib2to3/tests/test_parser.py @@ -6,8 +6,6 @@ parts of the grammar we've changed, we also make sure we can parse the test_grammar.py files from both Python 2 and Python 3. """ -from __future__ import with_statement - # Testing imports from . import support from .support import driver, test_dir @@ -15,12 +13,15 @@ from test.support import verbose # Python imports import os +import shutil +import subprocess import sys +import tempfile import unittest import warnings -import subprocess # Local imports +from lib2to3.pgen2 import driver as pgen2_driver from lib2to3.pgen2 import tokenize from ..pgen2.parse import ParseError from lib2to3.pygram import python_symbols as syms @@ -35,6 +36,71 @@ class TestDriver(support.TestCase): self.assertEqual(t.children[1].children[0].type, syms.print_stmt) +class TestPgen2Caching(support.TestCase): + def test_load_grammar_from_txt_file(self): + pgen2_driver.load_grammar(support.grammar_path, save=False, force=True) + + def test_load_grammar_from_pickle(self): + # Make a copy of the grammar file in a temp directory we are + # guaranteed to be able to write to. + tmpdir = tempfile.mkdtemp() + try: + grammar_copy = os.path.join( + tmpdir, os.path.basename(support.grammar_path)) + shutil.copy(support.grammar_path, grammar_copy) + pickle_name = pgen2_driver._generate_pickle_name(grammar_copy) + + pgen2_driver.load_grammar(grammar_copy, save=True, force=True) + self.assertTrue(os.path.exists(pickle_name)) + + os.unlink(grammar_copy) # Only the pickle remains... + pgen2_driver.load_grammar(grammar_copy, save=False, force=False) + finally: + shutil.rmtree(tmpdir) + + @unittest.skipIf(sys.executable is None, 'sys.executable required') + def test_load_grammar_from_subprocess(self): + tmpdir = tempfile.mkdtemp() + tmpsubdir = os.path.join(tmpdir, 'subdir') + try: + os.mkdir(tmpsubdir) + grammar_base = os.path.basename(support.grammar_path) + grammar_copy = os.path.join(tmpdir, grammar_base) + grammar_sub_copy = os.path.join(tmpsubdir, grammar_base) + shutil.copy(support.grammar_path, grammar_copy) + shutil.copy(support.grammar_path, grammar_sub_copy) + pickle_name = pgen2_driver._generate_pickle_name(grammar_copy) + pickle_sub_name = pgen2_driver._generate_pickle_name( + grammar_sub_copy) + self.assertNotEqual(pickle_name, pickle_sub_name) + + # Generate a pickle file from this process. + pgen2_driver.load_grammar(grammar_copy, save=True, force=True) + self.assertTrue(os.path.exists(pickle_name)) + + # Generate a new pickle file in a subprocess with a most likely + # different hash randomization seed. + sub_env = dict(os.environ) + sub_env['PYTHONHASHSEED'] = 'random' + subprocess.check_call( + [sys.executable, '-c', """ +from lib2to3.pgen2 import driver as pgen2_driver +pgen2_driver.load_grammar(%r, save=True, force=True) + """ % (grammar_sub_copy,)], + env=sub_env) + self.assertTrue(os.path.exists(pickle_sub_name)) + + with open(pickle_name, 'rb') as pickle_f_1, \ + open(pickle_sub_name, 'rb') as pickle_f_2: + self.assertEqual( + pickle_f_1.read(), pickle_f_2.read(), + msg='Grammar caches generated using different hash seeds' + ' were not identical.') + finally: + shutil.rmtree(tmpdir) + + + class GrammarTest(support.TestCase): def validate(self, code): support.parse_string(code) @@ -142,6 +208,41 @@ class TestRaiseChanges(GrammarTest): self.invalid_syntax("raise E from") +# Modelled after Lib/test/test_grammar.py:TokenTests.test_funcdef issue2292 +# and Lib/test/text_parser.py test_list_displays, test_set_displays, +# test_dict_displays, test_argument_unpacking, ... changes. +class TestUnpackingGeneralizations(GrammarTest): + def test_mid_positional_star(self): + self.validate("""func(1, *(2, 3), 4)""") + + def test_double_star_dict_literal(self): + self.validate("""func(**{'eggs':'scrambled', 'spam':'fried'})""") + + def test_double_star_dict_literal_after_keywords(self): + self.validate("""func(spam='fried', **{'eggs':'scrambled'})""") + + def test_list_display(self): + self.validate("""[*{2}, 3, *[4]]""") + + def test_set_display(self): + self.validate("""{*{2}, 3, *[4]}""") + + def test_dict_display_1(self): + self.validate("""{**{}}""") + + def test_dict_display_2(self): + self.validate("""{**{}, 3:4, **{5:6, 7:8}}""") + + def test_argument_unpacking_1(self): + self.validate("""f(a, *b, *c, d)""") + + def test_argument_unpacking_2(self): + self.validate("""f(**a, **b)""") + + def test_argument_unpacking_3(self): + self.validate("""f(2, *a, *b, **b, **c, **d)""") + + # Adapted from Python 3's Lib/test/test_grammar.py:GrammarTests.testFuncdef class TestFunctionAnnotations(GrammarTest): def test_1(self): diff --git a/Lib/lib2to3/tests/test_refactor.py b/Lib/lib2to3/tests/test_refactor.py index f30c1e8..8563001 100644 --- a/Lib/lib2to3/tests/test_refactor.py +++ b/Lib/lib2to3/tests/test_refactor.py @@ -9,6 +9,7 @@ import os import codecs import operator import io +import re import tempfile import shutil import unittest @@ -226,8 +227,8 @@ from __future__ import print_function""" actually_write=False) # Testing that it logged this message when write=False was passed is # sufficient to see that it did not bail early after "No changes". - message_regex = r"Not writing changes to .*%s%s" % ( - os.sep, os.path.basename(test_file)) + message_regex = r"Not writing changes to .*%s" % \ + re.escape(os.sep + os.path.basename(test_file)) for message in debug_messages: if "Not writing changes" in message: self.assertRegex(message, message_regex) diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index a7bd890..22744e1 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2001-2015 by Vinay Sajip. All Rights Reserved. +# Copyright 2001-2016 by Vinay Sajip. All Rights Reserved. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, @@ -18,7 +18,7 @@ Logging package for Python. Based on PEP 282 and comments thereto in comp.lang.python. -Copyright (C) 2001-2015 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2016 Vinay Sajip. All Rights Reserved. To use, simply 'import logging' and log away! """ @@ -129,8 +129,9 @@ def getLevelName(level): Otherwise, the string "Level %s" % level is returned. """ - # See Issue #22386 for the reason for this convoluted expression - return _levelToName.get(level, _nameToLevel.get(level, ("Level %s" % level))) + # See Issues #22386 and #27937 for why it's this way + return (_levelToName.get(level) or _nameToLevel.get(level) or + "Level %s" % level) def addLevelName(level, levelName): """ diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py index c9f8217..c39a56f 100644 --- a/Lib/logging/handlers.py +++ b/Lib/logging/handlers.py @@ -1,4 +1,4 @@ -# Copyright 2001-2015 by Vinay Sajip. All Rights Reserved. +# Copyright 2001-2016 by Vinay Sajip. All Rights Reserved. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, @@ -18,7 +18,7 @@ Additional handlers for the logging package for Python. The core package is based on PEP 282 and comments thereto in comp.lang.python. -Copyright (C) 2001-2015 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2016 Vinay Sajip. All Rights Reserved. To use, simply 'import logging.handlers' and log away! """ @@ -1366,7 +1366,6 @@ if threading: """ self.queue = queue self.handlers = handlers - self._stop = threading.Event() self._thread = None self.respect_handler_level = respect_handler_level @@ -1387,7 +1386,7 @@ if threading: LogRecords to process. """ self._thread = t = threading.Thread(target=self._monitor) - t.setDaemon(True) + t.daemon = True t.start() def prepare(self , record): @@ -1426,20 +1425,9 @@ if threading: """ q = self.queue has_task_done = hasattr(q, 'task_done') - while not self._stop.isSet(): - try: - record = self.dequeue(True) - if record is self._sentinel: - break - self.handle(record) - if has_task_done: - q.task_done() - except queue.Empty: - pass - # There might still be records in the queue. while True: try: - record = self.dequeue(False) + record = self.dequeue(True) if record is self._sentinel: break self.handle(record) @@ -1466,7 +1454,6 @@ if threading: Note that if you don't call this before your application exits, there may be some records still left on the queue, which won't be processed. """ - self._stop.set() self.enqueue_sentinel() self._thread.join() self._thread = None diff --git a/Lib/mailcap.py b/Lib/mailcap.py index 97e3035..bd0fc09 100644 --- a/Lib/mailcap.py +++ b/Lib/mailcap.py @@ -1,9 +1,19 @@ """Mailcap file handling. See RFC 1524.""" import os +import warnings __all__ = ["getcaps","findmatch"] + +def lineno_sort_key(entry): + # Sort in ascending order, with unspecified entries at the end + if 'lineno' in entry: + return 0, entry['lineno'] + else: + return 1, 0 + + # Part 1: top-level interface. def getcaps(): @@ -17,13 +27,14 @@ def getcaps(): """ caps = {} + lineno = 0 for mailcap in listmailcapfiles(): try: fp = open(mailcap, 'r') except OSError: continue with fp: - morecaps = readmailcapfile(fp) + morecaps, lineno = _readmailcapfile(fp, lineno) for key, value in morecaps.items(): if not key in caps: caps[key] = value @@ -49,8 +60,15 @@ def listmailcapfiles(): # Part 2: the parser. - def readmailcapfile(fp): + """Read a mailcap file and return a dictionary keyed by MIME type.""" + warnings.warn('readmailcapfile is deprecated, use getcaps instead', + DeprecationWarning, 2) + caps, _ = _readmailcapfile(fp, None) + return caps + + +def _readmailcapfile(fp, lineno): """Read a mailcap file and return a dictionary keyed by MIME type. Each MIME type is mapped to an entry consisting of a list of @@ -76,6 +94,9 @@ def readmailcapfile(fp): key, fields = parseline(line) if not (key and fields): continue + if lineno is not None: + fields['lineno'] = lineno + lineno += 1 # Normalize the key types = key.split('/') for j in range(len(types)): @@ -86,7 +107,7 @@ def readmailcapfile(fp): caps[key].append(fields) else: caps[key] = [fields] - return caps + return caps, lineno def parseline(line): """Parse one entry in a mailcap file and return a dictionary. @@ -165,6 +186,7 @@ def lookup(caps, MIMEtype, key=None): entries = entries + caps[MIMEtype] if key is not None: entries = [e for e in entries if key in e] + entries = sorted(entries, key=lineno_sort_key) return entries def subst(field, MIMEtype, filename, plist=[]): diff --git a/Lib/multiprocessing/context.py b/Lib/multiprocessing/context.py index 63849f9..115d4bf 100644 --- a/Lib/multiprocessing/context.py +++ b/Lib/multiprocessing/context.py @@ -195,7 +195,7 @@ class BaseContext(object): def get_start_method(self, allow_none=False): return self._name - def set_start_method(self, method=None): + def set_start_method(self, method, force=False): raise ValueError('cannot set start method of concrete context') def _check_available(self): diff --git a/Lib/multiprocessing/managers.py b/Lib/multiprocessing/managers.py index c559b55..b175470 100644 --- a/Lib/multiprocessing/managers.py +++ b/Lib/multiprocessing/managers.py @@ -275,7 +275,7 @@ class Server(object): try: send(msg) except Exception as e: - send(('#UNSERIALIZABLE', repr(msg))) + send(('#UNSERIALIZABLE', format_exc())) except Exception as e: util.info('exception in thread serving %r', threading.current_thread().name) diff --git a/Lib/multiprocessing/spawn.py b/Lib/multiprocessing/spawn.py index 4d76951..392c159 100644 --- a/Lib/multiprocessing/spawn.py +++ b/Lib/multiprocessing/spawn.py @@ -218,7 +218,7 @@ def prepare(data): process.ORIGINAL_DIR = data['orig_dir'] if 'start_method' in data: - set_start_method(data['start_method']) + set_start_method(data['start_method'], force=True) if 'init_main_from_name' in data: _fixup_main_from_name(data['init_main_from_name']) diff --git a/Lib/os.py b/Lib/os.py index b4c651d..011285e 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -537,13 +537,13 @@ if {open, stat} <= supports_dir_fd and {listdir, stat} <= supports_fd: dirs.append(name) else: nondirs.append(name) - except FileNotFoundError: + except OSError: try: # Add dangling symlinks, ignore disappeared files if st.S_ISLNK(stat(name, dir_fd=topfd, follow_symlinks=False) .st_mode): nondirs.append(name) - except FileNotFoundError: + except OSError: continue if topdown: diff --git a/Lib/pdb.py b/Lib/pdb.py index b11ac0a..4797265 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -134,6 +134,8 @@ line_prefix = '\n-> ' # Probably a better default class Pdb(bdb.Bdb, cmd.Cmd): + _previous_sigint_handler = None + def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None, nosigint=False): bdb.Bdb.__init__(self, skip=skip) @@ -187,8 +189,6 @@ class Pdb(bdb.Bdb, cmd.Cmd): self.message("\nProgram interrupted. (Use 'cont' to resume).") self.set_step() self.set_trace(frame) - # restore previous signal handler - signal.signal(signal.SIGINT, self._previous_sigint_handler) def reset(self): bdb.Bdb.reset(self) @@ -337,6 +337,10 @@ class Pdb(bdb.Bdb, cmd.Cmd): (expr, newvalue, oldvalue)) def interaction(self, frame, traceback): + # Restore the previous signal handler at the Pdb prompt. + if Pdb._previous_sigint_handler: + signal.signal(signal.SIGINT, Pdb._previous_sigint_handler) + Pdb._previous_sigint_handler = None if self.setup(frame, traceback): # no interaction desired at this time (happens if .pdbrc contains # a command like "continue") @@ -1037,7 +1041,7 @@ class Pdb(bdb.Bdb, cmd.Cmd): """ if not self.nosigint: try: - self._previous_sigint_handler = \ + Pdb._previous_sigint_handler = \ signal.signal(signal.SIGINT, self.sigint_handler) except ValueError: # ValueError happens when do_continue() is invoked from diff --git a/Lib/pickle.py b/Lib/pickle.py index 7760425..040ecb2 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -529,7 +529,11 @@ class _Pickler: self.save(pid, save_persistent_id=False) self.write(BINPERSID) else: - self.write(PERSID + str(pid).encode("ascii") + b'\n') + try: + self.write(PERSID + str(pid).encode("ascii") + b'\n') + except UnicodeEncodeError: + raise PicklingError( + "persistent IDs in protocol 0 must be ASCII strings") def save_reduce(self, func, args, state=None, listitems=None, dictitems=None, obj=None): @@ -1075,7 +1079,11 @@ class _Unpickler: dispatch[FRAME[0]] = load_frame def load_persid(self): - pid = self.readline()[:-1].decode("ascii") + try: + pid = self.readline()[:-1].decode("ascii") + except UnicodeDecodeError: + raise UnpicklingError( + "persistent IDs in protocol 0 must be ASCII strings") self.append(self.persistent_load(pid)) dispatch[PERSID[0]] = load_persid diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py index 97726a9..81d418d 100644 --- a/Lib/pkgutil.py +++ b/Lib/pkgutil.py @@ -45,7 +45,7 @@ def read_code(stream): def walk_packages(path=None, prefix='', onerror=None): - """Yields (module_loader, name, ispkg) for all modules recursively + """Yields (module_finder, name, ispkg) for all modules recursively on path, or, if path is None, all accessible modules. 'path' should be either None or a list of paths to look for @@ -102,7 +102,7 @@ def walk_packages(path=None, prefix='', onerror=None): def iter_modules(path=None, prefix=''): - """Yields (module_loader, name, ispkg) for all submodules on path, + """Yields (module_finder, name, ispkg) for all submodules on path, or, if path is None, all top-level modules on sys.path. 'path' should be either None or a list of paths to look for @@ -184,10 +184,10 @@ def _import_imp(): imp = importlib.import_module('imp') class ImpImporter: - """PEP 302 Importer that wraps Python's "classic" import algorithm + """PEP 302 Finder that wraps Python's "classic" import algorithm - ImpImporter(dirname) produces a PEP 302 importer that searches that - directory. ImpImporter(None) produces a PEP 302 importer that searches + ImpImporter(dirname) produces a PEP 302 finder that searches that + directory. ImpImporter(None) produces a PEP 302 finder that searches the current sys.path, plus any modules that are frozen or built-in. Note that ImpImporter does not currently support being used by placement @@ -395,9 +395,9 @@ except ImportError: def get_importer(path_item): - """Retrieve a PEP 302 importer for the given path item + """Retrieve a finder for the given path item - The returned importer is cached in sys.path_importer_cache + The returned finder is cached in sys.path_importer_cache if it was newly created by a path hook. The cache (or part of it) can be cleared manually if a @@ -419,16 +419,16 @@ def get_importer(path_item): def iter_importers(fullname=""): - """Yield PEP 302 importers for the given module name + """Yield finders for the given module name - If fullname contains a '.', the importers will be for the package + If fullname contains a '.', the finders will be for the package containing fullname, otherwise they will be all registered top level - importers (i.e. those on both sys.meta_path and sys.path_hooks). + finders (i.e. those on both sys.meta_path and sys.path_hooks). If the named module is in a package, that package is imported as a side effect of invoking this function. - If no module name is specified, all top level importers are produced. + If no module name is specified, all top level finders are produced. """ if fullname.startswith('.'): msg = "Relative module name {!r} not supported".format(fullname) @@ -448,7 +448,7 @@ def iter_importers(fullname=""): def get_loader(module_or_name): - """Get a PEP 302 "loader" object for module_or_name + """Get a "loader" object for module_or_name Returns None if the module cannot be found or imported. If the named module is not already imported, its containing package @@ -472,7 +472,7 @@ def get_loader(module_or_name): def find_loader(fullname): - """Find a PEP 302 "loader" object for fullname + """Find a "loader" object for fullname This is a backwards compatibility wrapper around importlib.util.find_spec that converts most failures to ImportError diff --git a/Lib/platform.py b/Lib/platform.py index d58494c..3e726a7 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -61,7 +61,7 @@ # though # 0.5.2 - fixed uname() to return '' instead of 'unknown' in all # return values (the system uname command tends to return -# 'unknown' instead of just leaving the field emtpy) +# 'unknown' instead of just leaving the field empty) # 0.5.1 - included code for slackware dist; added exception handlers # to cover up situations where platforms don't have os.popen # (e.g. Mac) or fail on socket.gethostname(); fixed libc @@ -498,65 +498,6 @@ _WIN32_SERVER_RELEASES = { (6, None): "post2012ServerR2", } -def _get_real_winver(maj, min, build): - if maj < 6 or (maj == 6 and min < 2): - return maj, min, build - - from ctypes import (c_buffer, POINTER, byref, create_unicode_buffer, - Structure, WinDLL) - from ctypes.wintypes import DWORD, HANDLE - - class VS_FIXEDFILEINFO(Structure): - _fields_ = [ - ("dwSignature", DWORD), - ("dwStrucVersion", DWORD), - ("dwFileVersionMS", DWORD), - ("dwFileVersionLS", DWORD), - ("dwProductVersionMS", DWORD), - ("dwProductVersionLS", DWORD), - ("dwFileFlagsMask", DWORD), - ("dwFileFlags", DWORD), - ("dwFileOS", DWORD), - ("dwFileType", DWORD), - ("dwFileSubtype", DWORD), - ("dwFileDateMS", DWORD), - ("dwFileDateLS", DWORD), - ] - - kernel32 = WinDLL('kernel32') - version = WinDLL('version') - - # We will immediately double the length up to MAX_PATH, but the - # path may be longer, so we retry until the returned string is - # shorter than our buffer. - name_len = actual_len = 130 - while actual_len == name_len: - name_len *= 2 - name = create_unicode_buffer(name_len) - actual_len = kernel32.GetModuleFileNameW(HANDLE(kernel32._handle), - name, len(name)) - if not actual_len: - return maj, min, build - - size = version.GetFileVersionInfoSizeW(name, None) - if not size: - return maj, min, build - - ver_block = c_buffer(size) - if (not version.GetFileVersionInfoW(name, None, size, ver_block) or - not ver_block): - return maj, min, build - - pvi = POINTER(VS_FIXEDFILEINFO)() - if not version.VerQueryValueW(ver_block, "", byref(pvi), byref(DWORD())): - return maj, min, build - - maj = pvi.contents.dwProductVersionMS >> 16 - min = pvi.contents.dwProductVersionMS & 0xFFFF - build = pvi.contents.dwProductVersionLS >> 16 - - return maj, min, build - def win32_ver(release='', version='', csd='', ptype=''): try: from sys import getwindowsversion @@ -568,7 +509,7 @@ def win32_ver(release='', version='', csd='', ptype=''): from _winreg import OpenKeyEx, QueryValueEx, CloseKey, HKEY_LOCAL_MACHINE winver = getwindowsversion() - maj, min, build = _get_real_winver(*winver[:3]) + maj, min, build = winver._platform_version or winver[:3] version = '{0}.{1}.{2}'.format(maj, min, build) release = (_WIN32_CLIENT_RELEASES.get((maj, min)) or @@ -586,7 +527,7 @@ def win32_ver(release='', version='', csd='', ptype=''): csd = 'SP' + csd[13:] # VER_NT_SERVER = 3 - if getattr(winver, 'product', None) == 3: + if getattr(winver, 'product_type', None) == 3: release = (_WIN32_SERVER_RELEASES.get((maj, min)) or _WIN32_SERVER_RELEASES.get((maj, None)) or release) diff --git a/Lib/plistlib.py b/Lib/plistlib.py index b66639c..2502b39 100644 --- a/Lib/plistlib.py +++ b/Lib/plistlib.py @@ -918,7 +918,7 @@ class _BinaryPlistWriter (object): self._write_size(0x50, len(value)) except UnicodeEncodeError: t = value.encode('utf-16be') - self._write_size(0x60, len(value)) + self._write_size(0x60, len(t) // 2) self._fp.write(t) diff --git a/Lib/posixpath.py b/Lib/posixpath.py index 7bb4d59..d9f3f99 100644 --- a/Lib/posixpath.py +++ b/Lib/posixpath.py @@ -193,6 +193,7 @@ def ismount(path): parent = join(path, b'..') else: parent = join(path, '..') + parent = realpath(parent) try: s2 = os.lstat(parent) except OSError: diff --git a/Lib/pstats.py b/Lib/pstats.py index e1ec355..d861413 100644 --- a/Lib/pstats.py +++ b/Lib/pstats.py @@ -574,7 +574,10 @@ if __name__ == '__main__': def do_add(self, line): if self.stats: - self.stats.add(line) + try: + self.stats.add(line) + except IOError as e: + print("Failed to load statistics for %s: %s" % (line, e), file=self.stream) else: print("No statistics object is loaded.", file=self.stream) return 0 diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 3ca08c9..0d0d0ab 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -28,7 +28,7 @@ to a file named ".html". Module docs for core modules are assumed to be in - http://docs.python.org/X.Y/library/ + https://docs.python.org/X.Y/library/ This can be overridden by setting the PYTHONDOCS environment variable to a different URL or to a local directory containing the Library @@ -395,6 +395,7 @@ class Doc: docloc = os.environ.get("PYTHONDOCS", self.PYTHONDOCS) + basedir = os.path.normcase(basedir) if (isinstance(object, type(os)) and (object.__name__ in ('errno', 'exceptions', 'gc', 'imp', 'marshal', 'posix', 'signal', 'sys', @@ -402,7 +403,7 @@ class Doc: (file.startswith(basedir) and not file.startswith(os.path.join(basedir, 'site-packages')))) and object.__name__ not in ('xml.etree', 'test.pydoc_mod')): - if docloc.startswith("http://"): + if docloc.startswith(("http://", "https://")): docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__.lower()) else: docloc = os.path.join(docloc, object.__name__.lower() + ".html") diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py index d6f1366..141a999 100644 --- a/Lib/pydoc_data/topics.py +++ b/Lib/pydoc_data/topics.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Autogenerated by Sphinx on Sat Jun 25 14:08:44 2016 +# Autogenerated by Sphinx on Sun Jan 1 22:05:59 2017 topics = {'assert': u'\nThe "assert" statement\n**********************\n\nAssert statements are a convenient way to insert debugging assertions\ninto a program:\n\n assert_stmt ::= "assert" expression ["," expression]\n\nThe simple form, "assert expression", is equivalent to\n\n if __debug__:\n if not expression: raise AssertionError\n\nThe extended form, "assert expression1, expression2", is equivalent to\n\n if __debug__:\n if not expression1: raise AssertionError(expression2)\n\nThese equivalences assume that "__debug__" and "AssertionError" refer\nto the built-in variables with those names. In the current\nimplementation, the built-in variable "__debug__" is "True" under\nnormal circumstances, "False" when optimization is requested (command\nline option -O). The current code generator emits no code for an\nassert statement when optimization is requested at compile time. Note\nthat it is unnecessary to include the source code for the expression\nthat failed in the error message; it will be displayed as part of the\nstack trace.\n\nAssignments to "__debug__" are illegal. The value for the built-in\nvariable is determined when the interpreter starts.\n', 'assignment': u'\nAssignment statements\n*********************\n\nAssignment statements are used to (re)bind names to values and to\nmodify attributes or items of mutable objects:\n\n assignment_stmt ::= (target_list "=")+ (starred_expression | yield_expression)\n target_list ::= target ("," target)* [","]\n target ::= identifier\n | "(" target_list ")"\n | "[" [target_list] "]"\n | attributeref\n | subscription\n | slicing\n | "*" target\n\n(See section *Primaries* for the syntax definitions for\n*attributeref*, *subscription*, and *slicing*.)\n\nAn assignment statement evaluates the expression list (remember that\nthis can be a single expression or a comma-separated list, the latter\nyielding a tuple) and assigns the single resulting object to each of\nthe target lists, from left to right.\n\nAssignment is defined recursively depending on the form of the target\n(list). When a target is part of a mutable object (an attribute\nreference, subscription or slicing), the mutable object must\nultimately perform the assignment and decide about its validity, and\nmay raise an exception if the assignment is unacceptable. The rules\nobserved by various types and the exceptions raised are given with the\ndefinition of the object types (see section *The standard type\nhierarchy*).\n\nAssignment of an object to a target list, optionally enclosed in\nparentheses or square brackets, is recursively defined as follows.\n\n* If the target list is empty: The object must also be an empty\n iterable.\n\n* If the target list is a single target in parentheses: The object\n is assigned to that target.\n\n* If the target list is a comma-separated list of targets, or a\n single target in square brackets: The object must be an iterable\n with the same number of items as there are targets in the target\n list, and the items are assigned, from left to right, to the\n corresponding targets.\n\n * If the target list contains one target prefixed with an\n asterisk, called a "starred" target: The object must be an\n iterable with at least as many items as there are targets in the\n target list, minus one. The first items of the iterable are\n assigned, from left to right, to the targets before the starred\n target. The final items of the iterable are assigned to the\n targets after the starred target. A list of the remaining items\n in the iterable is then assigned to the starred target (the list\n can be empty).\n\n * Else: The object must be an iterable with the same number of\n items as there are targets in the target list, and the items are\n assigned, from left to right, to the corresponding targets.\n\nAssignment of an object to a single target is recursively defined as\nfollows.\n\n* If the target is an identifier (name):\n\n * If the name does not occur in a "global" or "nonlocal" statement\n in the current code block: the name is bound to the object in the\n current local namespace.\n\n * Otherwise: the name is bound to the object in the global\n namespace or the outer namespace determined by "nonlocal",\n respectively.\n\n The name is rebound if it was already bound. This may cause the\n reference count for the object previously bound to the name to reach\n zero, causing the object to be deallocated and its destructor (if it\n has one) to be called.\n\n* If the target is an attribute reference: The primary expression in\n the reference is evaluated. It should yield an object with\n assignable attributes; if this is not the case, "TypeError" is\n raised. That object is then asked to assign the assigned object to\n the given attribute; if it cannot perform the assignment, it raises\n an exception (usually but not necessarily "AttributeError").\n\n Note: If the object is a class instance and the attribute reference\n occurs on both sides of the assignment operator, the RHS expression,\n "a.x" can access either an instance attribute or (if no instance\n attribute exists) a class attribute. The LHS target "a.x" is always\n set as an instance attribute, creating it if necessary. Thus, the\n two occurrences of "a.x" do not necessarily refer to the same\n attribute: if the RHS expression refers to a class attribute, the\n LHS creates a new instance attribute as the target of the\n assignment:\n\n class Cls:\n x = 3 # class variable\n inst = Cls()\n inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3\n\n This description does not necessarily apply to descriptor\n attributes, such as properties created with "property()".\n\n* If the target is a subscription: The primary expression in the\n reference is evaluated. It should yield either a mutable sequence\n object (such as a list) or a mapping object (such as a dictionary).\n Next, the subscript expression is evaluated.\n\n If the primary is a mutable sequence object (such as a list), the\n subscript must yield an integer. If it is negative, the sequence\'s\n length is added to it. The resulting value must be a nonnegative\n integer less than the sequence\'s length, and the sequence is asked\n to assign the assigned object to its item with that index. If the\n index is out of range, "IndexError" is raised (assignment to a\n subscripted sequence cannot add new items to a list).\n\n If the primary is a mapping object (such as a dictionary), the\n subscript must have a type compatible with the mapping\'s key type,\n and the mapping is then asked to create a key/datum pair which maps\n the subscript to the assigned object. This can either replace an\n existing key/value pair with the same key value, or insert a new\n key/value pair (if no key with the same value existed).\n\n For user-defined objects, the "__setitem__()" method is called with\n appropriate arguments.\n\n* If the target is a slicing: The primary expression in the\n reference is evaluated. It should yield a mutable sequence object\n (such as a list). The assigned object should be a sequence object\n of the same type. Next, the lower and upper bound expressions are\n evaluated, insofar they are present; defaults are zero and the\n sequence\'s length. The bounds should evaluate to integers. If\n either bound is negative, the sequence\'s length is added to it. The\n resulting bounds are clipped to lie between zero and the sequence\'s\n length, inclusive. Finally, the sequence object is asked to replace\n the slice with the items of the assigned sequence. The length of\n the slice may be different from the length of the assigned sequence,\n thus changing the length of the target sequence, if the target\n sequence allows it.\n\n**CPython implementation detail:** In the current implementation, the\nsyntax for targets is taken to be the same as for expressions, and\ninvalid syntax is rejected during the code generation phase, causing\nless detailed error messages.\n\nAlthough the definition of assignment implies that overlaps between\nthe left-hand side and the right-hand side are \'simultaneous\' (for\nexample "a, b = b, a" swaps two variables), overlaps *within* the\ncollection of assigned-to variables occur left-to-right, sometimes\nresulting in confusion. For instance, the following program prints\n"[0, 2]":\n\n x = [0, 1]\n i = 0\n i, x[i] = 1, 2 # i is updated, then x[i] is updated\n print(x)\n\nSee also: **PEP 3132** - Extended Iterable Unpacking\n\n The specification for the "*target" feature.\n\n\nAugmented assignment statements\n===============================\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n augtarget ::= identifier | attributeref | subscription | slicing\n augop ::= "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**="\n | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions of the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like "x += 1" can be rewritten as\n"x = x + 1" to achieve a similar, but not exactly equal effect. In the\naugmented version, "x" is only evaluated once. Also, when possible,\nthe actual operation is performed *in-place*, meaning that rather than\ncreating a new object and assigning that to the target, the old object\nis modified instead.\n\nUnlike normal assignments, augmented assignments evaluate the left-\nhand side *before* evaluating the right-hand side. For example, "a[i]\n+= f(x)" first looks-up "a[i]", then it evaluates "f(x)" and performs\nthe addition, and lastly, it writes the result back to "a[i]".\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same *caveat about\nclass and instance attributes* applies as for regular assignments.\n', 'atom-identifiers': u'\nIdentifiers (Names)\n*******************\n\nAn identifier occurring as an atom is a name. See section\n*Identifiers and keywords* for lexical definition and section *Naming\nand binding* for documentation of naming and binding.\n\nWhen the name is bound to an object, evaluation of the atom yields\nthat object. When a name is not bound, an attempt to evaluate it\nraises a "NameError" exception.\n\n**Private name mangling:** When an identifier that textually occurs in\na class definition begins with two or more underscore characters and\ndoes not end in two or more underscores, it is considered a *private\nname* of that class. Private names are transformed to a longer form\nbefore code is generated for them. The transformation inserts the\nclass name, with leading underscores removed and a single underscore\ninserted, in front of the name. For example, the identifier "__spam"\noccurring in a class named "Ham" will be transformed to "_Ham__spam".\nThis transformation is independent of the syntactical context in which\nthe identifier is used. If the transformed name is extremely long\n(longer than 255 characters), implementation defined truncation may\nhappen. If the class name consists only of underscores, no\ntransformation is done.\n', @@ -16,15 +16,15 @@ topics = {'assert': u'\nThe "assert" statement\n**********************\n\nAssert 'booleans': u'\nBoolean operations\n******************\n\n or_test ::= and_test | or_test "or" and_test\n and_test ::= not_test | and_test "and" not_test\n not_test ::= comparison | "not" not_test\n\nIn the context of Boolean operations, and also when expressions are\nused by control flow statements, the following values are interpreted\nas false: "False", "None", numeric zero of all types, and empty\nstrings and containers (including strings, tuples, lists,\ndictionaries, sets and frozensets). All other values are interpreted\nas true. User-defined objects can customize their truth value by\nproviding a "__bool__()" method.\n\nThe operator "not" yields "True" if its argument is false, "False"\notherwise.\n\nThe expression "x and y" first evaluates *x*; if *x* is false, its\nvalue is returned; otherwise, *y* is evaluated and the resulting value\nis returned.\n\nThe expression "x or y" first evaluates *x*; if *x* is true, its value\nis returned; otherwise, *y* is evaluated and the resulting value is\nreturned.\n\n(Note that neither "and" nor "or" restrict the value and type they\nreturn to "False" and "True", but rather return the last evaluated\nargument. This is sometimes useful, e.g., if "s" is a string that\nshould be replaced by a default value if it is empty, the expression\n"s or \'foo\'" yields the desired value. Because "not" has to create a\nnew value, it returns a boolean value regardless of the type of its\nargument (for example, "not \'foo\'" produces "False" rather than "\'\'".)\n', 'break': u'\nThe "break" statement\n*********************\n\n break_stmt ::= "break"\n\n"break" may only occur syntactically nested in a "for" or "while"\nloop, but not nested in a function or class definition within that\nloop.\n\nIt terminates the nearest enclosing loop, skipping the optional "else"\nclause if the loop has one.\n\nIf a "for" loop is terminated by "break", the loop control target\nkeeps its current value.\n\nWhen "break" passes control out of a "try" statement with a "finally"\nclause, that "finally" clause is executed before really leaving the\nloop.\n', 'callable-types': u'\nEmulating callable objects\n**************************\n\nobject.__call__(self[, args...])\n\n Called when the instance is "called" as a function; if this method\n is defined, "x(arg1, arg2, ...)" is a shorthand for\n "x.__call__(arg1, arg2, ...)".\n', - 'calls': u'\nCalls\n*****\n\nA call calls a callable object (e.g., a *function*) with a possibly\nempty series of *arguments*:\n\n call ::= primary "(" [argument_list [","] | comprehension] ")"\n argument_list ::= positional_arguments ["," starred_and_keywords]\n ["," keywords_arguments]\n | starred_and_keywords ["," keywords_arguments]\n | keywords_arguments\n positional_arguments ::= ["*"] expression ("," ["*"] expression)*\n starred_and_keywords ::= ("*" expression | keyword_item)\n ("," "*" expression | "," keyword_item)*\n keywords_arguments ::= (keyword_item | "**" expression)\n ("," keyword_item | "**" expression)*\n keyword_item ::= identifier "=" expression\n\nAn optional trailing comma may be present after the positional and\nkeyword arguments but does not affect the semantics.\n\nThe primary must evaluate to a callable object (user-defined\nfunctions, built-in functions, methods of built-in objects, class\nobjects, methods of class instances, and all objects having a\n"__call__()" method are callable). All argument expressions are\nevaluated before the call is attempted. Please refer to section\n*Function definitions* for the syntax of formal *parameter* lists.\n\nIf keyword arguments are present, they are first converted to\npositional arguments, as follows. First, a list of unfilled slots is\ncreated for the formal parameters. If there are N positional\narguments, they are placed in the first N slots. Next, for each\nkeyword argument, the identifier is used to determine the\ncorresponding slot (if the identifier is the same as the first formal\nparameter name, the first slot is used, and so on). If the slot is\nalready filled, a "TypeError" exception is raised. Otherwise, the\nvalue of the argument is placed in the slot, filling it (even if the\nexpression is "None", it fills the slot). When all arguments have\nbeen processed, the slots that are still unfilled are filled with the\ncorresponding default value from the function definition. (Default\nvalues are calculated, once, when the function is defined; thus, a\nmutable object such as a list or dictionary used as default value will\nbe shared by all calls that don\'t specify an argument value for the\ncorresponding slot; this should usually be avoided.) If there are any\nunfilled slots for which no default value is specified, a "TypeError"\nexception is raised. Otherwise, the list of filled slots is used as\nthe argument list for the call.\n\n**CPython implementation detail:** An implementation may provide\nbuilt-in functions whose positional parameters do not have names, even\nif they are \'named\' for the purpose of documentation, and which\ntherefore cannot be supplied by keyword. In CPython, this is the case\nfor functions implemented in C that use "PyArg_ParseTuple()" to parse\ntheir arguments.\n\nIf there are more positional arguments than there are formal parameter\nslots, a "TypeError" exception is raised, unless a formal parameter\nusing the syntax "*identifier" is present; in this case, that formal\nparameter receives a tuple containing the excess positional arguments\n(or an empty tuple if there were no excess positional arguments).\n\nIf any keyword argument does not correspond to a formal parameter\nname, a "TypeError" exception is raised, unless a formal parameter\nusing the syntax "**identifier" is present; in this case, that formal\nparameter receives a dictionary containing the excess keyword\narguments (using the keywords as keys and the argument values as\ncorresponding values), or a (new) empty dictionary if there were no\nexcess keyword arguments.\n\nIf the syntax "*expression" appears in the function call, "expression"\nmust evaluate to an *iterable*. Elements from these iterables are\ntreated as if they were additional positional arguments. For the call\n"f(x1, x2, *y, x3, x4)", if *y* evaluates to a sequence *y1*, ...,\n*yM*, this is equivalent to a call with M+4 positional arguments *x1*,\n*x2*, *y1*, ..., *yM*, *x3*, *x4*.\n\nA consequence of this is that although the "*expression" syntax may\nappear *after* explicit keyword arguments, it is processed *before*\nthe keyword arguments (and any "**expression" arguments -- see below).\nSo:\n\n >>> def f(a, b):\n ... print(a, b)\n ...\n >>> f(b=1, *(2,))\n 2 1\n >>> f(a=1, *(2,))\n Traceback (most recent call last):\n File "", line 1, in ?\n TypeError: f() got multiple values for keyword argument \'a\'\n >>> f(1, *(2,))\n 1 2\n\nIt is unusual for both keyword arguments and the "*expression" syntax\nto be used in the same call, so in practice this confusion does not\narise.\n\nIf the syntax "**expression" appears in the function call,\n"expression" must evaluate to a *mapping*, the contents of which are\ntreated as additional keyword arguments. If a keyword is already\npresent (as an explicit keyword argument, or from another unpacking),\na "TypeError" exception is raised.\n\nFormal parameters using the syntax "*identifier" or "**identifier"\ncannot be used as positional argument slots or as keyword argument\nnames.\n\nChanged in version 3.5: Function calls accept any number of "*" and\n"**" unpackings, positional arguments may follow iterable unpackings\n("*"), and keyword arguments may follow dictionary unpackings ("**").\nOriginally proposed by **PEP 448**.\n\nA call always returns some value, possibly "None", unless it raises an\nexception. How this value is computed depends on the type of the\ncallable object.\n\nIf it is---\n\na user-defined function:\n The code block for the function is executed, passing it the\n argument list. The first thing the code block will do is bind the\n formal parameters to the arguments; this is described in section\n *Function definitions*. When the code block executes a "return"\n statement, this specifies the return value of the function call.\n\na built-in function or method:\n The result is up to the interpreter; see *Built-in Functions* for\n the descriptions of built-in functions and methods.\n\na class object:\n A new instance of that class is returned.\n\na class instance method:\n The corresponding user-defined function is called, with an argument\n list that is one longer than the argument list of the call: the\n instance becomes the first argument.\n\na class instance:\n The class must define a "__call__()" method; the effect is then the\n same as if that method was called.\n', - 'class': u'\nClass definitions\n*****************\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n classdef ::= [decorators] "class" classname [inheritance] ":" suite\n inheritance ::= "(" [argument_list] ")"\n classname ::= identifier\n\nA class definition is an executable statement. The inheritance list\nusually gives a list of base classes (see *Customizing class creation*\nfor more advanced uses), so each item in the list should evaluate to a\nclass object which allows subclassing. Classes without an inheritance\nlist inherit, by default, from the base class "object"; hence,\n\n class Foo:\n pass\n\nis equivalent to\n\n class Foo(object):\n pass\n\nThe class\'s suite is then executed in a new execution frame (see\n*Naming and binding*), using a newly created local namespace and the\noriginal global namespace. (Usually, the suite contains mostly\nfunction definitions.) When the class\'s suite finishes execution, its\nexecution frame is discarded but its local namespace is saved. [4] A\nclass object is then created using the inheritance list for the base\nclasses and the saved local namespace for the attribute dictionary.\nThe class name is bound to this class object in the original local\nnamespace.\n\nClass creation can be customized heavily using *metaclasses*.\n\nClasses can also be decorated: just like when decorating functions,\n\n @f1(arg)\n @f2\n class Foo: pass\n\nis equivalent to\n\n class Foo: pass\n Foo = f1(arg)(f2(Foo))\n\nThe evaluation rules for the decorator expressions are the same as for\nfunction decorators. The result must be a class object, which is then\nbound to the class name.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass attributes; they are shared by instances. Instance attributes\ncan be set in a method with "self.name = value". Both class and\ninstance attributes are accessible through the notation ""self.name"",\nand an instance attribute hides a class attribute with the same name\nwhen accessed in this way. Class attributes can be used as defaults\nfor instance attributes, but using mutable values there can lead to\nunexpected results. *Descriptors* can be used to create instance\nvariables with different implementation details.\n\nSee also: **PEP 3115** - Metaclasses in Python 3 **PEP 3129** -\n Class Decorators\n', - 'comparisons': u'\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation. Also unlike C, expressions like "a < b < c" have the\ninterpretation that is conventional in mathematics:\n\n comparison ::= or_expr ( comp_operator or_expr )*\n comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="\n | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: "True" or "False".\n\nComparisons can be chained arbitrarily, e.g., "x < y <= z" is\nequivalent to "x < y and y <= z", except that "y" is evaluated only\nonce (but in both cases "z" is not evaluated at all when "x < y" is\nfound to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then "a op1 b op2 c ... y\nopN z" is equivalent to "a op1 b and b op2 c and ... y opN z", except\nthat each expression is evaluated at most once.\n\nNote that "a op1 b op2 c" doesn\'t imply any kind of comparison between\n*a* and *c*, so that, e.g., "x < y > z" is perfectly legal (though\nperhaps not pretty).\n\n\nValue comparisons\n=================\n\nThe operators "<", ">", "==", ">=", "<=", and "!=" compare the values\nof two objects. The objects do not need to have the same type.\n\nChapter *Objects, values and types* states that objects have a value\n(in addition to type and identity). The value of an object is a\nrather abstract notion in Python: For example, there is no canonical\naccess method for an object\'s value. Also, there is no requirement\nthat the value of an object should be constructed in a particular way,\ne.g. comprised of all its data attributes. Comparison operators\nimplement a particular notion of what the value of an object is. One\ncan think of them as defining the value of an object indirectly, by\nmeans of their comparison implementation.\n\nBecause all types are (direct or indirect) subtypes of "object", they\ninherit the default comparison behavior from "object". Types can\ncustomize their comparison behavior by implementing *rich comparison\nmethods* like "__lt__()", described in *Basic customization*.\n\nThe default behavior for equality comparison ("==" and "!=") is based\non the identity of the objects. Hence, equality comparison of\ninstances with the same identity results in equality, and equality\ncomparison of instances with different identities results in\ninequality. A motivation for this default behavior is the desire that\nall objects should be reflexive (i.e. "x is y" implies "x == y").\n\nA default order comparison ("<", ">", "<=", and ">=") is not provided;\nan attempt raises "TypeError". A motivation for this default behavior\nis the lack of a similar invariant as for equality.\n\nThe behavior of the default equality comparison, that instances with\ndifferent identities are always unequal, may be in contrast to what\ntypes will need that have a sensible definition of object value and\nvalue-based equality. Such types will need to customize their\ncomparison behavior, and in fact, a number of built-in types have done\nthat.\n\nThe following list describes the comparison behavior of the most\nimportant built-in types.\n\n* Numbers of built-in numeric types (*Numeric Types --- int, float,\n complex*) and of the standard library types "fractions.Fraction" and\n "decimal.Decimal" can be compared within and across their types,\n with the restriction that complex numbers do not support order\n comparison. Within the limits of the types involved, they compare\n mathematically (algorithmically) correct without loss of precision.\n\n The not-a-number values "float(\'NaN\')" and "Decimal(\'NaN\')" are\n special. They are identical to themselves ("x is x" is true) but\n are not equal to themselves ("x == x" is false). Additionally,\n comparing any number to a not-a-number value will return "False".\n For example, both "3 < float(\'NaN\')" and "float(\'NaN\') < 3" will\n return "False".\n\n* Binary sequences (instances of "bytes" or "bytearray") can be\n compared within and across their types. They compare\n lexicographically using the numeric values of their elements.\n\n* Strings (instances of "str") compare lexicographically using the\n numerical Unicode code points (the result of the built-in function\n "ord()") of their characters. [3]\n\n Strings and binary sequences cannot be directly compared.\n\n* Sequences (instances of "tuple", "list", or "range") can be\n compared only within each of their types, with the restriction that\n ranges do not support order comparison. Equality comparison across\n these types results in unequality, and ordering comparison across\n these types raises "TypeError".\n\n Sequences compare lexicographically using comparison of\n corresponding elements, whereby reflexivity of the elements is\n enforced.\n\n In enforcing reflexivity of elements, the comparison of collections\n assumes that for a collection element "x", "x == x" is always true.\n Based on that assumption, element identity is compared first, and\n element comparison is performed only for distinct elements. This\n approach yields the same result as a strict element comparison\n would, if the compared elements are reflexive. For non-reflexive\n elements, the result is different than for strict element\n comparison, and may be surprising: The non-reflexive not-a-number\n values for example result in the following comparison behavior when\n used in a list:\n\n >>> nan = float(\'NaN\')\n >>> nan is nan\n True\n >>> nan == nan\n False <-- the defined non-reflexive behavior of NaN\n >>> [nan] == [nan]\n True <-- list enforces reflexivity and tests identity first\n\n Lexicographical comparison between built-in collections works as\n follows:\n\n * For two collections to compare equal, they must be of the same\n type, have the same length, and each pair of corresponding\n elements must compare equal (for example, "[1,2] == (1,2)" is\n false because the type is not the same).\n\n * Collections that support order comparison are ordered the same\n as their first unequal elements (for example, "[1,2,x] <= [1,2,y]"\n has the same value as "x <= y"). If a corresponding element does\n not exist, the shorter collection is ordered first (for example,\n "[1,2] < [1,2,3]" is true).\n\n* Mappings (instances of "dict") compare equal if and only if they\n have equal *(key, value)* pairs. Equality comparison of the keys and\n elements enforces reflexivity.\n\n Order comparisons ("<", ">", "<=", and ">=") raise "TypeError".\n\n* Sets (instances of "set" or "frozenset") can be compared within\n and across their types.\n\n They define order comparison operators to mean subset and superset\n tests. Those relations do not define total orderings (for example,\n the two sets "{1,2}" and "{2,3}" are not equal, nor subsets of one\n another, nor supersets of one another). Accordingly, sets are not\n appropriate arguments for functions which depend on total ordering\n (for example, "min()", "max()", and "sorted()" produce undefined\n results given a list of sets as inputs).\n\n Comparison of sets enforces reflexivity of its elements.\n\n* Most other built-in types have no comparison methods implemented,\n so they inherit the default comparison behavior.\n\nUser-defined classes that customize their comparison behavior should\nfollow some consistency rules, if possible:\n\n* Equality comparison should be reflexive. In other words, identical\n objects should compare equal:\n\n "x is y" implies "x == y"\n\n* Comparison should be symmetric. In other words, the following\n expressions should have the same result:\n\n "x == y" and "y == x"\n\n "x != y" and "y != x"\n\n "x < y" and "y > x"\n\n "x <= y" and "y >= x"\n\n* Comparison should be transitive. The following (non-exhaustive)\n examples illustrate that:\n\n "x > y and y > z" implies "x > z"\n\n "x < y and y <= z" implies "x < z"\n\n* Inverse comparison should result in the boolean negation. In other\n words, the following expressions should have the same result:\n\n "x == y" and "not x != y"\n\n "x < y" and "not x >= y" (for total ordering)\n\n "x > y" and "not x <= y" (for total ordering)\n\n The last two expressions apply to totally ordered collections (e.g.\n to sequences, but not to sets or mappings). See also the\n "total_ordering()" decorator.\n\nPython does not enforce these consistency rules. In fact, the\nnot-a-number values are an example for not following these rules.\n\n\nMembership test operations\n==========================\n\nThe operators "in" and "not in" test for membership. "x in s"\nevaluates to true if *x* is a member of *s*, and false otherwise. "x\nnot in s" returns the negation of "x in s". All built-in sequences\nand set types support this as well as dictionary, for which "in" tests\nwhether the dictionary has a given key. For container types such as\nlist, tuple, set, frozenset, dict, or collections.deque, the\nexpression "x in y" is equivalent to "any(x is e or x == e for e in\ny)".\n\nFor the string and bytes types, "x in y" is true if and only if *x* is\na substring of *y*. An equivalent test is "y.find(x) != -1". Empty\nstrings are always considered to be a substring of any other string,\nso """ in "abc"" will return "True".\n\nFor user-defined classes which define the "__contains__()" method, "x\nin y" is true if and only if "y.__contains__(x)" is true.\n\nFor user-defined classes which do not define "__contains__()" but do\ndefine "__iter__()", "x in y" is true if some value "z" with "x == z"\nis produced while iterating over "y". If an exception is raised\nduring the iteration, it is as if "in" raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n"__getitem__()", "x in y" is true if and only if there is a non-\nnegative integer index *i* such that "x == y[i]", and all lower\ninteger indices do not raise "IndexError" exception. (If any other\nexception is raised, it is as if "in" raised that exception).\n\nThe operator "not in" is defined to have the inverse true value of\n"in".\n\n\nIdentity comparisons\n====================\n\nThe operators "is" and "is not" test for object identity: "x is y" is\ntrue if and only if *x* and *y* are the same object. "x is not y"\nyields the inverse truth value. [4]\n', - 'compound': u'\nCompound statements\n*******************\n\nCompound statements contain (groups of) other statements; they affect\nor control the execution of those other statements in some way. In\ngeneral, compound statements span multiple lines, although in simple\nincarnations a whole compound statement may be contained in one line.\n\nThe "if", "while" and "for" statements implement traditional control\nflow constructs. "try" specifies exception handlers and/or cleanup\ncode for a group of statements, while the "with" statement allows the\nexecution of initialization and finalization code around a block of\ncode. Function and class definitions are also syntactically compound\nstatements.\n\nA compound statement consists of one or more \'clauses.\' A clause\nconsists of a header and a \'suite.\' The clause headers of a\nparticular compound statement are all at the same indentation level.\nEach clause header begins with a uniquely identifying keyword and ends\nwith a colon. A suite is a group of statements controlled by a\nclause. A suite can be one or more semicolon-separated simple\nstatements on the same line as the header, following the header\'s\ncolon, or it can be one or more indented statements on subsequent\nlines. Only the latter form of a suite can contain nested compound\nstatements; the following is illegal, mostly because it wouldn\'t be\nclear to which "if" clause a following "else" clause would belong:\n\n if test1: if test2: print(x)\n\nAlso note that the semicolon binds tighter than the colon in this\ncontext, so that in the following example, either all or none of the\n"print()" calls are executed:\n\n if x < y < z: print(x); print(y); print(z)\n\nSummarizing:\n\n compound_stmt ::= if_stmt\n | while_stmt\n | for_stmt\n | try_stmt\n | with_stmt\n | funcdef\n | classdef\n | async_with_stmt\n | async_for_stmt\n | async_funcdef\n suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT\n statement ::= stmt_list NEWLINE | compound_stmt\n stmt_list ::= simple_stmt (";" simple_stmt)* [";"]\n\nNote that statements always end in a "NEWLINE" possibly followed by a\n"DEDENT". Also note that optional continuation clauses always begin\nwith a keyword that cannot start a statement, thus there are no\nambiguities (the \'dangling "else"\' problem is solved in Python by\nrequiring nested "if" statements to be indented).\n\nThe formatting of the grammar rules in the following sections places\neach clause on a separate line for clarity.\n\n\nThe "if" statement\n==================\n\nThe "if" statement is used for conditional execution:\n\n if_stmt ::= "if" expression ":" suite\n ( "elif" expression ":" suite )*\n ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the "if" statement is executed or evaluated).\nIf all expressions are false, the suite of the "else" clause, if\npresent, is executed.\n\n\nThe "while" statement\n=====================\n\nThe "while" statement is used for repeated execution as long as an\nexpression is true:\n\n while_stmt ::= "while" expression ":" suite\n ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the "else" clause, if present, is executed\nand the loop terminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite. A "continue" statement\nexecuted in the first suite skips the rest of the suite and goes back\nto testing the expression.\n\n\nThe "for" statement\n===================\n\nThe "for" statement is used to iterate over the elements of a sequence\n(such as a string, tuple or list) or other iterable object:\n\n for_stmt ::= "for" target_list "in" expression_list ":" suite\n ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject. An iterator is created for the result of the\n"expression_list". The suite is then executed once for each item\nprovided by the iterator, in the order returned by the iterator. Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments (see *Assignment statements*), and then the suite is\nexecuted. When the items are exhausted (which is immediately when the\nsequence is empty or an iterator raises a "StopIteration" exception),\nthe suite in the "else" clause, if present, is executed, and the loop\nterminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite. A "continue" statement\nexecuted in the first suite skips the rest of the suite and continues\nwith the next item, or with the "else" clause if there is no next\nitem.\n\nThe for-loop makes assignments to the variables(s) in the target list.\nThis overwrites all previous assignments to those variables including\nthose made in the suite of the for-loop:\n\n for i in range(10):\n print(i)\n i = 5 # this will not affect the for-loop\n # because i will be overwritten with the next\n # index in the range\n\nNames in the target list are not deleted when the loop is finished,\nbut if the sequence is empty, they will not have been assigned to at\nall by the loop. Hint: the built-in function "range()" returns an\niterator of integers suitable to emulate the effect of Pascal\'s "for i\n:= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, 2]".\n\nNote: There is a subtlety when the sequence is being modified by the\n loop (this can only occur for mutable sequences, i.e. lists). An\n internal counter is used to keep track of which item is used next,\n and this is incremented on each iteration. When this counter has\n reached the length of the sequence the loop terminates. This means\n that if the suite deletes the current (or a previous) item from the\n sequence, the next item will be skipped (since it gets the index of\n the current item which has already been treated). Likewise, if the\n suite inserts an item in the sequence before the current item, the\n current item will be treated again the next time through the loop.\n This can lead to nasty bugs that can be avoided by making a\n temporary copy using a slice of the whole sequence, e.g.,\n\n for x in a[:]:\n if x < 0: a.remove(x)\n\n\nThe "try" statement\n===================\n\nThe "try" statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n try_stmt ::= try1_stmt | try2_stmt\n try1_stmt ::= "try" ":" suite\n ("except" [expression ["as" identifier]] ":" suite)+\n ["else" ":" suite]\n ["finally" ":" suite]\n try2_stmt ::= "try" ":" suite\n "finally" ":" suite\n\nThe "except" clause(s) specify one or more exception handlers. When no\nexception occurs in the "try" clause, no exception handler is\nexecuted. When an exception occurs in the "try" suite, a search for an\nexception handler is started. This search inspects the except clauses\nin turn until one is found that matches the exception. An expression-\nless except clause, if present, must be last; it matches any\nexception. For an except clause with an expression, that expression\nis evaluated, and the clause matches the exception if the resulting\nobject is "compatible" with the exception. An object is compatible\nwith an exception if it is the class or a base class of the exception\nobject or a tuple containing an item compatible with the exception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire "try" statement raised\nthe exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified after the "as" keyword in that except clause, if\npresent, and the except clause\'s suite is executed. All except\nclauses must have an executable block. When the end of this block is\nreached, execution continues normally after the entire try statement.\n(This means that if two nested handlers exist for the same exception,\nand the exception occurs in the try clause of the inner handler, the\nouter handler will not handle the exception.)\n\nWhen an exception has been assigned using "as target", it is cleared\nat the end of the except clause. This is as if\n\n except E as N:\n foo\n\nwas translated to\n\n except E as N:\n try:\n foo\n finally:\n del N\n\nThis means the exception must be assigned to a different name to be\nable to refer to it after the except clause. Exceptions are cleared\nbecause with the traceback attached to them, they form a reference\ncycle with the stack frame, keeping all locals in that frame alive\nuntil the next garbage collection occurs.\n\nBefore an except clause\'s suite is executed, details about the\nexception are stored in the "sys" module and can be accessed via\n"sys.exc_info()". "sys.exc_info()" returns a 3-tuple consisting of the\nexception class, the exception instance and a traceback object (see\nsection *The standard type hierarchy*) identifying the point in the\nprogram where the exception occurred. "sys.exc_info()" values are\nrestored to their previous values (before the call) when returning\nfrom a function that handled an exception.\n\nThe optional "else" clause is executed if and when control flows off\nthe end of the "try" clause. [2] Exceptions in the "else" clause are\nnot handled by the preceding "except" clauses.\n\nIf "finally" is present, it specifies a \'cleanup\' handler. The "try"\nclause is executed, including any "except" and "else" clauses. If an\nexception occurs in any of the clauses and is not handled, the\nexception is temporarily saved. The "finally" clause is executed. If\nthere is a saved exception it is re-raised at the end of the "finally"\nclause. If the "finally" clause raises another exception, the saved\nexception is set as the context of the new exception. If the "finally"\nclause executes a "return" or "break" statement, the saved exception\nis discarded:\n\n >>> def f():\n ... try:\n ... 1/0\n ... finally:\n ... return 42\n ...\n >>> f()\n 42\n\nThe exception information is not available to the program during\nexecution of the "finally" clause.\n\nWhen a "return", "break" or "continue" statement is executed in the\n"try" suite of a "try"..."finally" statement, the "finally" clause is\nalso executed \'on the way out.\' A "continue" statement is illegal in\nthe "finally" clause. (The reason is a problem with the current\nimplementation --- this restriction may be lifted in the future).\n\nThe return value of a function is determined by the last "return"\nstatement executed. Since the "finally" clause always executes, a\n"return" statement executed in the "finally" clause will always be the\nlast one executed:\n\n >>> def foo():\n ... try:\n ... return \'try\'\n ... finally:\n ... return \'finally\'\n ...\n >>> foo()\n \'finally\'\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the "raise" statement to\ngenerate exceptions may be found in section *The raise statement*.\n\n\nThe "with" statement\n====================\n\nThe "with" statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section *With Statement\nContext Managers*). This allows common "try"..."except"..."finally"\nusage patterns to be encapsulated for convenient reuse.\n\n with_stmt ::= "with" with_item ("," with_item)* ":" suite\n with_item ::= expression ["as" target]\n\nThe execution of the "with" statement with one "item" proceeds as\nfollows:\n\n1. The context expression (the expression given in the "with_item")\n is evaluated to obtain a context manager.\n\n2. The context manager\'s "__exit__()" is loaded for later use.\n\n3. The context manager\'s "__enter__()" method is invoked.\n\n4. If a target was included in the "with" statement, the return\n value from "__enter__()" is assigned to it.\n\n Note: The "with" statement guarantees that if the "__enter__()"\n method returns without an error, then "__exit__()" will always be\n called. Thus, if an error occurs during the assignment to the\n target list, it will be treated the same as an error occurring\n within the suite would be. See step 6 below.\n\n5. The suite is executed.\n\n6. The context manager\'s "__exit__()" method is invoked. If an\n exception caused the suite to be exited, its type, value, and\n traceback are passed as arguments to "__exit__()". Otherwise, three\n "None" arguments are supplied.\n\n If the suite was exited due to an exception, and the return value\n from the "__exit__()" method was false, the exception is reraised.\n If the return value was true, the exception is suppressed, and\n execution continues with the statement following the "with"\n statement.\n\n If the suite was exited for any reason other than an exception, the\n return value from "__exit__()" is ignored, and execution proceeds\n at the normal location for the kind of exit that was taken.\n\nWith more than one item, the context managers are processed as if\nmultiple "with" statements were nested:\n\n with A() as a, B() as b:\n suite\n\nis equivalent to\n\n with A() as a:\n with B() as b:\n suite\n\nChanged in version 3.1: Support for multiple context expressions.\n\nSee also: **PEP 343** - The "with" statement\n\n The specification, background, and examples for the Python "with"\n statement.\n\n\nFunction definitions\n====================\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n funcdef ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n decorators ::= decorator+\n decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n dotted_name ::= identifier ("." identifier)*\n parameter_list ::= (defparameter ",")*\n | "*" [parameter] ("," defparameter)* ["," "**" parameter]\n | "**" parameter\n | defparameter [","] )\n parameter ::= identifier [":" expression]\n defparameter ::= parameter ["=" expression]\n funcname ::= identifier\n\nA function definition is an executable statement. Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function). This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition. The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object. Multiple decorators are applied in\nnested fashion. For example, the following code\n\n @f1(arg)\n @f2\n def func(): pass\n\nis equivalent to\n\n def func(): pass\n func = f1(arg)(f2(func))\n\nWhen one or more *parameters* have the form *parameter* "="\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted. If a parameter has a default value, all following\nparameters up until the ""*"" must also have a default value --- this\nis a syntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated from left to right when the\nfunction definition is executed.** This means that the expression is\nevaluated once, when the function is defined, and that the same "pre-\ncomputed" value is used for each call. This is especially important\nto understand when a default parameter is a mutable object, such as a\nlist or a dictionary: if the function modifies the object (e.g. by\nappending an item to a list), the default value is in effect modified.\nThis is generally not what was intended. A way around this is to use\n"None" as the default, and explicitly test for it in the body of the\nfunction, e.g.:\n\n def whats_on_the_telly(penguin=None):\n if penguin is None:\n penguin = []\n penguin.append("property of the zoo")\n return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values. If the form\n""*identifier"" is present, it is initialized to a tuple receiving any\nexcess positional parameters, defaulting to the empty tuple. If the\nform ""**identifier"" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary. Parameters after ""*"" or ""*identifier"" are\nkeyword-only parameters and may only be passed used keyword arguments.\n\nParameters may have annotations of the form "": expression"" following\nthe parameter name. Any parameter may have an annotation even those\nof the form "*identifier" or "**identifier". Functions may have\n"return" annotation of the form ""-> expression"" after the parameter\nlist. These annotations can be any valid Python expression and are\nevaluated when the function definition is executed. Annotations may\nbe evaluated in a different order than they appear in the source code.\nThe presence of annotations does not change the semantics of a\nfunction. The annotation values are available as values of a\ndictionary keyed by the parameters\' names in the "__annotations__"\nattribute of the function object.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions. This uses lambda\nexpressions, described in section *Lambdas*. Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a ""def"" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression. The ""def"" form is actually more powerful since it\nallows the execution of multiple statements and annotations.\n\n**Programmer\'s note:** Functions are first-class objects. A ""def""\nstatement executed inside a function definition defines a local\nfunction that can be returned or passed around. Free variables used\nin the nested function can access the local variables of the function\ncontaining the def. See section *Naming and binding* for details.\n\nSee also: **PEP 3107** - Function Annotations\n\n The original specification for function annotations.\n\n\nClass definitions\n=================\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n classdef ::= [decorators] "class" classname [inheritance] ":" suite\n inheritance ::= "(" [argument_list] ")"\n classname ::= identifier\n\nA class definition is an executable statement. The inheritance list\nusually gives a list of base classes (see *Customizing class creation*\nfor more advanced uses), so each item in the list should evaluate to a\nclass object which allows subclassing. Classes without an inheritance\nlist inherit, by default, from the base class "object"; hence,\n\n class Foo:\n pass\n\nis equivalent to\n\n class Foo(object):\n pass\n\nThe class\'s suite is then executed in a new execution frame (see\n*Naming and binding*), using a newly created local namespace and the\noriginal global namespace. (Usually, the suite contains mostly\nfunction definitions.) When the class\'s suite finishes execution, its\nexecution frame is discarded but its local namespace is saved. [4] A\nclass object is then created using the inheritance list for the base\nclasses and the saved local namespace for the attribute dictionary.\nThe class name is bound to this class object in the original local\nnamespace.\n\nClass creation can be customized heavily using *metaclasses*.\n\nClasses can also be decorated: just like when decorating functions,\n\n @f1(arg)\n @f2\n class Foo: pass\n\nis equivalent to\n\n class Foo: pass\n Foo = f1(arg)(f2(Foo))\n\nThe evaluation rules for the decorator expressions are the same as for\nfunction decorators. The result must be a class object, which is then\nbound to the class name.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass attributes; they are shared by instances. Instance attributes\ncan be set in a method with "self.name = value". Both class and\ninstance attributes are accessible through the notation ""self.name"",\nand an instance attribute hides a class attribute with the same name\nwhen accessed in this way. Class attributes can be used as defaults\nfor instance attributes, but using mutable values there can lead to\nunexpected results. *Descriptors* can be used to create instance\nvariables with different implementation details.\n\nSee also: **PEP 3115** - Metaclasses in Python 3 **PEP 3129** -\n Class Decorators\n\n\nCoroutines\n==========\n\nNew in version 3.5.\n\n\nCoroutine function definition\n-----------------------------\n\n async_funcdef ::= [decorators] "async" "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n\nExecution of Python coroutines can be suspended and resumed at many\npoints (see *coroutine*). In the body of a coroutine, any "await" and\n"async" identifiers become reserved keywords; "await" expressions,\n"async for" and "async with" can only be used in coroutine bodies.\n\nFunctions defined with "async def" syntax are always coroutine\nfunctions, even if they do not contain "await" or "async" keywords.\n\nIt is a "SyntaxError" to use "yield" expressions in "async def"\ncoroutines.\n\nAn example of a coroutine function:\n\n async def func(param1, param2):\n do_stuff()\n await some_coroutine()\n\n\nThe "async for" statement\n-------------------------\n\n async_for_stmt ::= "async" for_stmt\n\nAn *asynchronous iterable* is able to call asynchronous code in its\n*iter* implementation, and *asynchronous iterator* can call\nasynchronous code in its *next* method.\n\nThe "async for" statement allows convenient iteration over\nasynchronous iterators.\n\nThe following code:\n\n async for TARGET in ITER:\n BLOCK\n else:\n BLOCK2\n\nIs semantically equivalent to:\n\n iter = (ITER)\n iter = type(iter).__aiter__(iter)\n running = True\n while running:\n try:\n TARGET = await type(iter).__anext__(iter)\n except StopAsyncIteration:\n running = False\n else:\n BLOCK\n else:\n BLOCK2\n\nSee also "__aiter__()" and "__anext__()" for details.\n\nIt is a "SyntaxError" to use "async for" statement outside of an\n"async def" function.\n\n\nThe "async with" statement\n--------------------------\n\n async_with_stmt ::= "async" with_stmt\n\nAn *asynchronous context manager* is a *context manager* that is able\nto suspend execution in its *enter* and *exit* methods.\n\nThe following code:\n\n async with EXPR as VAR:\n BLOCK\n\nIs semantically equivalent to:\n\n mgr = (EXPR)\n aexit = type(mgr).__aexit__\n aenter = type(mgr).__aenter__(mgr)\n exc = True\n\n VAR = await aenter\n try:\n BLOCK\n except:\n if not await aexit(mgr, *sys.exc_info()):\n raise\n else:\n await aexit(mgr, None, None, None)\n\nSee also "__aenter__()" and "__aexit__()" for details.\n\nIt is a "SyntaxError" to use "async with" statement outside of an\n"async def" function.\n\nSee also: **PEP 492** - Coroutines with async and await syntax\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack unless\n there is a "finally" clause which happens to raise another\n exception. That new exception causes the old one to be lost.\n\n[2] Currently, control "flows off the end" except in the case of\n an exception or the execution of a "return", "continue", or\n "break" statement.\n\n[3] A string literal appearing as the first statement in the\n function body is transformed into the function\'s "__doc__"\n attribute and therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n body is transformed into the namespace\'s "__doc__" item and\n therefore the class\'s *docstring*.\n', + 'calls': u'\nCalls\n*****\n\nA call calls a callable object (e.g., a *function*) with a possibly\nempty series of *arguments*:\n\n call ::= primary "(" [argument_list [","] | comprehension] ")"\n argument_list ::= positional_arguments ["," starred_and_keywords]\n ["," keywords_arguments]\n | starred_and_keywords ["," keywords_arguments]\n | keywords_arguments\n positional_arguments ::= ["*"] expression ("," ["*"] expression)*\n starred_and_keywords ::= ("*" expression | keyword_item)\n ("," "*" expression | "," keyword_item)*\n keywords_arguments ::= (keyword_item | "**" expression)\n ("," keyword_item | "," "**" expression)*\n keyword_item ::= identifier "=" expression\n\nAn optional trailing comma may be present after the positional and\nkeyword arguments but does not affect the semantics.\n\nThe primary must evaluate to a callable object (user-defined\nfunctions, built-in functions, methods of built-in objects, class\nobjects, methods of class instances, and all objects having a\n"__call__()" method are callable). All argument expressions are\nevaluated before the call is attempted. Please refer to section\n*Function definitions* for the syntax of formal *parameter* lists.\n\nIf keyword arguments are present, they are first converted to\npositional arguments, as follows. First, a list of unfilled slots is\ncreated for the formal parameters. If there are N positional\narguments, they are placed in the first N slots. Next, for each\nkeyword argument, the identifier is used to determine the\ncorresponding slot (if the identifier is the same as the first formal\nparameter name, the first slot is used, and so on). If the slot is\nalready filled, a "TypeError" exception is raised. Otherwise, the\nvalue of the argument is placed in the slot, filling it (even if the\nexpression is "None", it fills the slot). When all arguments have\nbeen processed, the slots that are still unfilled are filled with the\ncorresponding default value from the function definition. (Default\nvalues are calculated, once, when the function is defined; thus, a\nmutable object such as a list or dictionary used as default value will\nbe shared by all calls that don\'t specify an argument value for the\ncorresponding slot; this should usually be avoided.) If there are any\nunfilled slots for which no default value is specified, a "TypeError"\nexception is raised. Otherwise, the list of filled slots is used as\nthe argument list for the call.\n\n**CPython implementation detail:** An implementation may provide\nbuilt-in functions whose positional parameters do not have names, even\nif they are \'named\' for the purpose of documentation, and which\ntherefore cannot be supplied by keyword. In CPython, this is the case\nfor functions implemented in C that use "PyArg_ParseTuple()" to parse\ntheir arguments.\n\nIf there are more positional arguments than there are formal parameter\nslots, a "TypeError" exception is raised, unless a formal parameter\nusing the syntax "*identifier" is present; in this case, that formal\nparameter receives a tuple containing the excess positional arguments\n(or an empty tuple if there were no excess positional arguments).\n\nIf any keyword argument does not correspond to a formal parameter\nname, a "TypeError" exception is raised, unless a formal parameter\nusing the syntax "**identifier" is present; in this case, that formal\nparameter receives a dictionary containing the excess keyword\narguments (using the keywords as keys and the argument values as\ncorresponding values), or a (new) empty dictionary if there were no\nexcess keyword arguments.\n\nIf the syntax "*expression" appears in the function call, "expression"\nmust evaluate to an *iterable*. Elements from these iterables are\ntreated as if they were additional positional arguments. For the call\n"f(x1, x2, *y, x3, x4)", if *y* evaluates to a sequence *y1*, ...,\n*yM*, this is equivalent to a call with M+4 positional arguments *x1*,\n*x2*, *y1*, ..., *yM*, *x3*, *x4*.\n\nA consequence of this is that although the "*expression" syntax may\nappear *after* explicit keyword arguments, it is processed *before*\nthe keyword arguments (and any "**expression" arguments -- see below).\nSo:\n\n >>> def f(a, b):\n ... print(a, b)\n ...\n >>> f(b=1, *(2,))\n 2 1\n >>> f(a=1, *(2,))\n Traceback (most recent call last):\n File "", line 1, in ?\n TypeError: f() got multiple values for keyword argument \'a\'\n >>> f(1, *(2,))\n 1 2\n\nIt is unusual for both keyword arguments and the "*expression" syntax\nto be used in the same call, so in practice this confusion does not\narise.\n\nIf the syntax "**expression" appears in the function call,\n"expression" must evaluate to a *mapping*, the contents of which are\ntreated as additional keyword arguments. If a keyword is already\npresent (as an explicit keyword argument, or from another unpacking),\na "TypeError" exception is raised.\n\nFormal parameters using the syntax "*identifier" or "**identifier"\ncannot be used as positional argument slots or as keyword argument\nnames.\n\nChanged in version 3.5: Function calls accept any number of "*" and\n"**" unpackings, positional arguments may follow iterable unpackings\n("*"), and keyword arguments may follow dictionary unpackings ("**").\nOriginally proposed by **PEP 448**.\n\nA call always returns some value, possibly "None", unless it raises an\nexception. How this value is computed depends on the type of the\ncallable object.\n\nIf it is---\n\na user-defined function:\n The code block for the function is executed, passing it the\n argument list. The first thing the code block will do is bind the\n formal parameters to the arguments; this is described in section\n *Function definitions*. When the code block executes a "return"\n statement, this specifies the return value of the function call.\n\na built-in function or method:\n The result is up to the interpreter; see *Built-in Functions* for\n the descriptions of built-in functions and methods.\n\na class object:\n A new instance of that class is returned.\n\na class instance method:\n The corresponding user-defined function is called, with an argument\n list that is one longer than the argument list of the call: the\n instance becomes the first argument.\n\na class instance:\n The class must define a "__call__()" method; the effect is then the\n same as if that method was called.\n', + 'class': u'\nClass definitions\n*****************\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n classdef ::= [decorators] "class" classname [inheritance] ":" suite\n inheritance ::= "(" [argument_list] ")"\n classname ::= identifier\n\nA class definition is an executable statement. The inheritance list\nusually gives a list of base classes (see *Customizing class creation*\nfor more advanced uses), so each item in the list should evaluate to a\nclass object which allows subclassing. Classes without an inheritance\nlist inherit, by default, from the base class "object"; hence,\n\n class Foo:\n pass\n\nis equivalent to\n\n class Foo(object):\n pass\n\nThe class\'s suite is then executed in a new execution frame (see\n*Naming and binding*), using a newly created local namespace and the\noriginal global namespace. (Usually, the suite contains mostly\nfunction definitions.) When the class\'s suite finishes execution, its\nexecution frame is discarded but its local namespace is saved. [4] A\nclass object is then created using the inheritance list for the base\nclasses and the saved local namespace for the attribute dictionary.\nThe class name is bound to this class object in the original local\nnamespace.\n\nClass creation can be customized heavily using *metaclasses*.\n\nClasses can also be decorated: just like when decorating functions,\n\n @f1(arg)\n @f2\n class Foo: pass\n\nis roughly equivalent to\n\n class Foo: pass\n Foo = f1(arg)(f2(Foo))\n\nThe evaluation rules for the decorator expressions are the same as for\nfunction decorators. The result is then bound to the class name.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass attributes; they are shared by instances. Instance attributes\ncan be set in a method with "self.name = value". Both class and\ninstance attributes are accessible through the notation ""self.name"",\nand an instance attribute hides a class attribute with the same name\nwhen accessed in this way. Class attributes can be used as defaults\nfor instance attributes, but using mutable values there can lead to\nunexpected results. *Descriptors* can be used to create instance\nvariables with different implementation details.\n\nSee also: **PEP 3115** - Metaclasses in Python 3 **PEP 3129** -\n Class Decorators\n', + 'comparisons': u'\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation. Also unlike C, expressions like "a < b < c" have the\ninterpretation that is conventional in mathematics:\n\n comparison ::= or_expr ( comp_operator or_expr )*\n comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="\n | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: "True" or "False".\n\nComparisons can be chained arbitrarily, e.g., "x < y <= z" is\nequivalent to "x < y and y <= z", except that "y" is evaluated only\nonce (but in both cases "z" is not evaluated at all when "x < y" is\nfound to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then "a op1 b op2 c ... y\nopN z" is equivalent to "a op1 b and b op2 c and ... y opN z", except\nthat each expression is evaluated at most once.\n\nNote that "a op1 b op2 c" doesn\'t imply any kind of comparison between\n*a* and *c*, so that, e.g., "x < y > z" is perfectly legal (though\nperhaps not pretty).\n\n\nValue comparisons\n=================\n\nThe operators "<", ">", "==", ">=", "<=", and "!=" compare the values\nof two objects. The objects do not need to have the same type.\n\nChapter *Objects, values and types* states that objects have a value\n(in addition to type and identity). The value of an object is a\nrather abstract notion in Python: For example, there is no canonical\naccess method for an object\'s value. Also, there is no requirement\nthat the value of an object should be constructed in a particular way,\ne.g. comprised of all its data attributes. Comparison operators\nimplement a particular notion of what the value of an object is. One\ncan think of them as defining the value of an object indirectly, by\nmeans of their comparison implementation.\n\nBecause all types are (direct or indirect) subtypes of "object", they\ninherit the default comparison behavior from "object". Types can\ncustomize their comparison behavior by implementing *rich comparison\nmethods* like "__lt__()", described in *Basic customization*.\n\nThe default behavior for equality comparison ("==" and "!=") is based\non the identity of the objects. Hence, equality comparison of\ninstances with the same identity results in equality, and equality\ncomparison of instances with different identities results in\ninequality. A motivation for this default behavior is the desire that\nall objects should be reflexive (i.e. "x is y" implies "x == y").\n\nA default order comparison ("<", ">", "<=", and ">=") is not provided;\nan attempt raises "TypeError". A motivation for this default behavior\nis the lack of a similar invariant as for equality.\n\nThe behavior of the default equality comparison, that instances with\ndifferent identities are always unequal, may be in contrast to what\ntypes will need that have a sensible definition of object value and\nvalue-based equality. Such types will need to customize their\ncomparison behavior, and in fact, a number of built-in types have done\nthat.\n\nThe following list describes the comparison behavior of the most\nimportant built-in types.\n\n* Numbers of built-in numeric types (*Numeric Types --- int, float,\n complex*) and of the standard library types "fractions.Fraction" and\n "decimal.Decimal" can be compared within and across their types,\n with the restriction that complex numbers do not support order\n comparison. Within the limits of the types involved, they compare\n mathematically (algorithmically) correct without loss of precision.\n\n The not-a-number values "float(\'NaN\')" and "Decimal(\'NaN\')" are\n special. They are identical to themselves ("x is x" is true) but\n are not equal to themselves ("x == x" is false). Additionally,\n comparing any number to a not-a-number value will return "False".\n For example, both "3 < float(\'NaN\')" and "float(\'NaN\') < 3" will\n return "False".\n\n* Binary sequences (instances of "bytes" or "bytearray") can be\n compared within and across their types. They compare\n lexicographically using the numeric values of their elements.\n\n* Strings (instances of "str") compare lexicographically using the\n numerical Unicode code points (the result of the built-in function\n "ord()") of their characters. [3]\n\n Strings and binary sequences cannot be directly compared.\n\n* Sequences (instances of "tuple", "list", or "range") can be\n compared only within each of their types, with the restriction that\n ranges do not support order comparison. Equality comparison across\n these types results in unequality, and ordering comparison across\n these types raises "TypeError".\n\n Sequences compare lexicographically using comparison of\n corresponding elements, whereby reflexivity of the elements is\n enforced.\n\n In enforcing reflexivity of elements, the comparison of collections\n assumes that for a collection element "x", "x == x" is always true.\n Based on that assumption, element identity is compared first, and\n element comparison is performed only for distinct elements. This\n approach yields the same result as a strict element comparison\n would, if the compared elements are reflexive. For non-reflexive\n elements, the result is different than for strict element\n comparison, and may be surprising: The non-reflexive not-a-number\n values for example result in the following comparison behavior when\n used in a list:\n\n >>> nan = float(\'NaN\')\n >>> nan is nan\n True\n >>> nan == nan\n False <-- the defined non-reflexive behavior of NaN\n >>> [nan] == [nan]\n True <-- list enforces reflexivity and tests identity first\n\n Lexicographical comparison between built-in collections works as\n follows:\n\n * For two collections to compare equal, they must be of the same\n type, have the same length, and each pair of corresponding\n elements must compare equal (for example, "[1,2] == (1,2)" is\n false because the type is not the same).\n\n * Collections that support order comparison are ordered the same\n as their first unequal elements (for example, "[1,2,x] <= [1,2,y]"\n has the same value as "x <= y"). If a corresponding element does\n not exist, the shorter collection is ordered first (for example,\n "[1,2] < [1,2,3]" is true).\n\n* Mappings (instances of "dict") compare equal if and only if they\n have equal *(key, value)* pairs. Equality comparison of the keys and\n elements enforces reflexivity.\n\n Order comparisons ("<", ">", "<=", and ">=") raise "TypeError".\n\n* Sets (instances of "set" or "frozenset") can be compared within\n and across their types.\n\n They define order comparison operators to mean subset and superset\n tests. Those relations do not define total orderings (for example,\n the two sets "{1,2}" and "{2,3}" are not equal, nor subsets of one\n another, nor supersets of one another). Accordingly, sets are not\n appropriate arguments for functions which depend on total ordering\n (for example, "min()", "max()", and "sorted()" produce undefined\n results given a list of sets as inputs).\n\n Comparison of sets enforces reflexivity of its elements.\n\n* Most other built-in types have no comparison methods implemented,\n so they inherit the default comparison behavior.\n\nUser-defined classes that customize their comparison behavior should\nfollow some consistency rules, if possible:\n\n* Equality comparison should be reflexive. In other words, identical\n objects should compare equal:\n\n "x is y" implies "x == y"\n\n* Comparison should be symmetric. In other words, the following\n expressions should have the same result:\n\n "x == y" and "y == x"\n\n "x != y" and "y != x"\n\n "x < y" and "y > x"\n\n "x <= y" and "y >= x"\n\n* Comparison should be transitive. The following (non-exhaustive)\n examples illustrate that:\n\n "x > y and y > z" implies "x > z"\n\n "x < y and y <= z" implies "x < z"\n\n* Inverse comparison should result in the boolean negation. In other\n words, the following expressions should have the same result:\n\n "x == y" and "not x != y"\n\n "x < y" and "not x >= y" (for total ordering)\n\n "x > y" and "not x <= y" (for total ordering)\n\n The last two expressions apply to totally ordered collections (e.g.\n to sequences, but not to sets or mappings). See also the\n "total_ordering()" decorator.\n\nPython does not enforce these consistency rules. In fact, the\nnot-a-number values are an example for not following these rules.\n\n\nMembership test operations\n==========================\n\nThe operators "in" and "not in" test for membership. "x in s"\nevaluates to true if *x* is a member of *s*, and false otherwise. "x\nnot in s" returns the negation of "x in s". All built-in sequences\nand set types support this as well as dictionary, for which "in" tests\nwhether the dictionary has a given key. For container types such as\nlist, tuple, set, frozenset, dict, or collections.deque, the\nexpression "x in y" is equivalent to "any(x is e or x == e for e in\ny)".\n\nFor the string and bytes types, "x in y" is true if and only if *x* is\na substring of *y*. An equivalent test is "y.find(x) != -1". Empty\nstrings are always considered to be a substring of any other string,\nso """ in "abc"" will return "True".\n\nFor user-defined classes which define the "__contains__()" method, "x\nin y" is true if and only if "y.__contains__(x)" is true.\n\nFor user-defined classes which do not define "__contains__()" but do\ndefine "__iter__()", "x in y" is true if some value "z" with "x == z"\nis produced while iterating over "y". If an exception is raised\nduring the iteration, it is as if "in" raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n"__getitem__()", "x in y" is true if and only if there is a non-\nnegative integer index *i* such that "x == y[i]", and all lower\ninteger indices do not raise "IndexError" exception. (If any other\nexception is raised, it is as if "in" raised that exception).\n\nThe operator "not in" is defined to have the inverse true value of\n"in".\n\n\nIdentity comparisons\n====================\n\nThe operators "is" and "is not" test for object identity: "x is y" is\ntrue if and only if *x* and *y* are the same object. Object identity\nis determined using the "id()" function. "x is not y" yields the\ninverse truth value. [4]\n', + 'compound': u'\nCompound statements\n*******************\n\nCompound statements contain (groups of) other statements; they affect\nor control the execution of those other statements in some way. In\ngeneral, compound statements span multiple lines, although in simple\nincarnations a whole compound statement may be contained in one line.\n\nThe "if", "while" and "for" statements implement traditional control\nflow constructs. "try" specifies exception handlers and/or cleanup\ncode for a group of statements, while the "with" statement allows the\nexecution of initialization and finalization code around a block of\ncode. Function and class definitions are also syntactically compound\nstatements.\n\nA compound statement consists of one or more \'clauses.\' A clause\nconsists of a header and a \'suite.\' The clause headers of a\nparticular compound statement are all at the same indentation level.\nEach clause header begins with a uniquely identifying keyword and ends\nwith a colon. A suite is a group of statements controlled by a\nclause. A suite can be one or more semicolon-separated simple\nstatements on the same line as the header, following the header\'s\ncolon, or it can be one or more indented statements on subsequent\nlines. Only the latter form of a suite can contain nested compound\nstatements; the following is illegal, mostly because it wouldn\'t be\nclear to which "if" clause a following "else" clause would belong:\n\n if test1: if test2: print(x)\n\nAlso note that the semicolon binds tighter than the colon in this\ncontext, so that in the following example, either all or none of the\n"print()" calls are executed:\n\n if x < y < z: print(x); print(y); print(z)\n\nSummarizing:\n\n compound_stmt ::= if_stmt\n | while_stmt\n | for_stmt\n | try_stmt\n | with_stmt\n | funcdef\n | classdef\n | async_with_stmt\n | async_for_stmt\n | async_funcdef\n suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT\n statement ::= stmt_list NEWLINE | compound_stmt\n stmt_list ::= simple_stmt (";" simple_stmt)* [";"]\n\nNote that statements always end in a "NEWLINE" possibly followed by a\n"DEDENT". Also note that optional continuation clauses always begin\nwith a keyword that cannot start a statement, thus there are no\nambiguities (the \'dangling "else"\' problem is solved in Python by\nrequiring nested "if" statements to be indented).\n\nThe formatting of the grammar rules in the following sections places\neach clause on a separate line for clarity.\n\n\nThe "if" statement\n==================\n\nThe "if" statement is used for conditional execution:\n\n if_stmt ::= "if" expression ":" suite\n ( "elif" expression ":" suite )*\n ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the "if" statement is executed or evaluated).\nIf all expressions are false, the suite of the "else" clause, if\npresent, is executed.\n\n\nThe "while" statement\n=====================\n\nThe "while" statement is used for repeated execution as long as an\nexpression is true:\n\n while_stmt ::= "while" expression ":" suite\n ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the "else" clause, if present, is executed\nand the loop terminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite. A "continue" statement\nexecuted in the first suite skips the rest of the suite and goes back\nto testing the expression.\n\n\nThe "for" statement\n===================\n\nThe "for" statement is used to iterate over the elements of a sequence\n(such as a string, tuple or list) or other iterable object:\n\n for_stmt ::= "for" target_list "in" expression_list ":" suite\n ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject. An iterator is created for the result of the\n"expression_list". The suite is then executed once for each item\nprovided by the iterator, in the order returned by the iterator. Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments (see *Assignment statements*), and then the suite is\nexecuted. When the items are exhausted (which is immediately when the\nsequence is empty or an iterator raises a "StopIteration" exception),\nthe suite in the "else" clause, if present, is executed, and the loop\nterminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite. A "continue" statement\nexecuted in the first suite skips the rest of the suite and continues\nwith the next item, or with the "else" clause if there is no next\nitem.\n\nThe for-loop makes assignments to the variables(s) in the target list.\nThis overwrites all previous assignments to those variables including\nthose made in the suite of the for-loop:\n\n for i in range(10):\n print(i)\n i = 5 # this will not affect the for-loop\n # because i will be overwritten with the next\n # index in the range\n\nNames in the target list are not deleted when the loop is finished,\nbut if the sequence is empty, they will not have been assigned to at\nall by the loop. Hint: the built-in function "range()" returns an\niterator of integers suitable to emulate the effect of Pascal\'s "for i\n:= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, 2]".\n\nNote: There is a subtlety when the sequence is being modified by the\n loop (this can only occur for mutable sequences, i.e. lists). An\n internal counter is used to keep track of which item is used next,\n and this is incremented on each iteration. When this counter has\n reached the length of the sequence the loop terminates. This means\n that if the suite deletes the current (or a previous) item from the\n sequence, the next item will be skipped (since it gets the index of\n the current item which has already been treated). Likewise, if the\n suite inserts an item in the sequence before the current item, the\n current item will be treated again the next time through the loop.\n This can lead to nasty bugs that can be avoided by making a\n temporary copy using a slice of the whole sequence, e.g.,\n\n for x in a[:]:\n if x < 0: a.remove(x)\n\n\nThe "try" statement\n===================\n\nThe "try" statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n try_stmt ::= try1_stmt | try2_stmt\n try1_stmt ::= "try" ":" suite\n ("except" [expression ["as" identifier]] ":" suite)+\n ["else" ":" suite]\n ["finally" ":" suite]\n try2_stmt ::= "try" ":" suite\n "finally" ":" suite\n\nThe "except" clause(s) specify one or more exception handlers. When no\nexception occurs in the "try" clause, no exception handler is\nexecuted. When an exception occurs in the "try" suite, a search for an\nexception handler is started. This search inspects the except clauses\nin turn until one is found that matches the exception. An expression-\nless except clause, if present, must be last; it matches any\nexception. For an except clause with an expression, that expression\nis evaluated, and the clause matches the exception if the resulting\nobject is "compatible" with the exception. An object is compatible\nwith an exception if it is the class or a base class of the exception\nobject or a tuple containing an item compatible with the exception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire "try" statement raised\nthe exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified after the "as" keyword in that except clause, if\npresent, and the except clause\'s suite is executed. All except\nclauses must have an executable block. When the end of this block is\nreached, execution continues normally after the entire try statement.\n(This means that if two nested handlers exist for the same exception,\nand the exception occurs in the try clause of the inner handler, the\nouter handler will not handle the exception.)\n\nWhen an exception has been assigned using "as target", it is cleared\nat the end of the except clause. This is as if\n\n except E as N:\n foo\n\nwas translated to\n\n except E as N:\n try:\n foo\n finally:\n del N\n\nThis means the exception must be assigned to a different name to be\nable to refer to it after the except clause. Exceptions are cleared\nbecause with the traceback attached to them, they form a reference\ncycle with the stack frame, keeping all locals in that frame alive\nuntil the next garbage collection occurs.\n\nBefore an except clause\'s suite is executed, details about the\nexception are stored in the "sys" module and can be accessed via\n"sys.exc_info()". "sys.exc_info()" returns a 3-tuple consisting of the\nexception class, the exception instance and a traceback object (see\nsection *The standard type hierarchy*) identifying the point in the\nprogram where the exception occurred. "sys.exc_info()" values are\nrestored to their previous values (before the call) when returning\nfrom a function that handled an exception.\n\nThe optional "else" clause is executed if and when control flows off\nthe end of the "try" clause. [2] Exceptions in the "else" clause are\nnot handled by the preceding "except" clauses.\n\nIf "finally" is present, it specifies a \'cleanup\' handler. The "try"\nclause is executed, including any "except" and "else" clauses. If an\nexception occurs in any of the clauses and is not handled, the\nexception is temporarily saved. The "finally" clause is executed. If\nthere is a saved exception it is re-raised at the end of the "finally"\nclause. If the "finally" clause raises another exception, the saved\nexception is set as the context of the new exception. If the "finally"\nclause executes a "return" or "break" statement, the saved exception\nis discarded:\n\n >>> def f():\n ... try:\n ... 1/0\n ... finally:\n ... return 42\n ...\n >>> f()\n 42\n\nThe exception information is not available to the program during\nexecution of the "finally" clause.\n\nWhen a "return", "break" or "continue" statement is executed in the\n"try" suite of a "try"..."finally" statement, the "finally" clause is\nalso executed \'on the way out.\' A "continue" statement is illegal in\nthe "finally" clause. (The reason is a problem with the current\nimplementation --- this restriction may be lifted in the future).\n\nThe return value of a function is determined by the last "return"\nstatement executed. Since the "finally" clause always executes, a\n"return" statement executed in the "finally" clause will always be the\nlast one executed:\n\n >>> def foo():\n ... try:\n ... return \'try\'\n ... finally:\n ... return \'finally\'\n ...\n >>> foo()\n \'finally\'\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the "raise" statement to\ngenerate exceptions may be found in section *The raise statement*.\n\n\nThe "with" statement\n====================\n\nThe "with" statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section *With Statement\nContext Managers*). This allows common "try"..."except"..."finally"\nusage patterns to be encapsulated for convenient reuse.\n\n with_stmt ::= "with" with_item ("," with_item)* ":" suite\n with_item ::= expression ["as" target]\n\nThe execution of the "with" statement with one "item" proceeds as\nfollows:\n\n1. The context expression (the expression given in the "with_item")\n is evaluated to obtain a context manager.\n\n2. The context manager\'s "__exit__()" is loaded for later use.\n\n3. The context manager\'s "__enter__()" method is invoked.\n\n4. If a target was included in the "with" statement, the return\n value from "__enter__()" is assigned to it.\n\n Note: The "with" statement guarantees that if the "__enter__()"\n method returns without an error, then "__exit__()" will always be\n called. Thus, if an error occurs during the assignment to the\n target list, it will be treated the same as an error occurring\n within the suite would be. See step 6 below.\n\n5. The suite is executed.\n\n6. The context manager\'s "__exit__()" method is invoked. If an\n exception caused the suite to be exited, its type, value, and\n traceback are passed as arguments to "__exit__()". Otherwise, three\n "None" arguments are supplied.\n\n If the suite was exited due to an exception, and the return value\n from the "__exit__()" method was false, the exception is reraised.\n If the return value was true, the exception is suppressed, and\n execution continues with the statement following the "with"\n statement.\n\n If the suite was exited for any reason other than an exception, the\n return value from "__exit__()" is ignored, and execution proceeds\n at the normal location for the kind of exit that was taken.\n\nWith more than one item, the context managers are processed as if\nmultiple "with" statements were nested:\n\n with A() as a, B() as b:\n suite\n\nis equivalent to\n\n with A() as a:\n with B() as b:\n suite\n\nChanged in version 3.1: Support for multiple context expressions.\n\nSee also: **PEP 343** - The "with" statement\n\n The specification, background, and examples for the Python "with"\n statement.\n\n\nFunction definitions\n====================\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n funcdef ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n decorators ::= decorator+\n decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n dotted_name ::= identifier ("." identifier)*\n parameter_list ::= (defparameter ",")*\n | "*" [parameter] ("," defparameter)* ["," "**" parameter]\n | "**" parameter\n | defparameter [","] )\n parameter ::= identifier [":" expression]\n defparameter ::= parameter ["=" expression]\n funcname ::= identifier\n\nA function definition is an executable statement. Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function). This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition. The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object. Multiple decorators are applied in\nnested fashion. For example, the following code\n\n @f1(arg)\n @f2\n def func(): pass\n\nis roughly equivalent to\n\n def func(): pass\n func = f1(arg)(f2(func))\n\nexcept that the original function is not temporarily bound to the name\n"func".\n\nWhen one or more *parameters* have the form *parameter* "="\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted. If a parameter has a default value, all following\nparameters up until the ""*"" must also have a default value --- this\nis a syntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated from left to right when the\nfunction definition is executed.** This means that the expression is\nevaluated once, when the function is defined, and that the same "pre-\ncomputed" value is used for each call. This is especially important\nto understand when a default parameter is a mutable object, such as a\nlist or a dictionary: if the function modifies the object (e.g. by\nappending an item to a list), the default value is in effect modified.\nThis is generally not what was intended. A way around this is to use\n"None" as the default, and explicitly test for it in the body of the\nfunction, e.g.:\n\n def whats_on_the_telly(penguin=None):\n if penguin is None:\n penguin = []\n penguin.append("property of the zoo")\n return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values. If the form\n""*identifier"" is present, it is initialized to a tuple receiving any\nexcess positional parameters, defaulting to the empty tuple. If the\nform ""**identifier"" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary. Parameters after ""*"" or ""*identifier"" are\nkeyword-only parameters and may only be passed used keyword arguments.\n\nParameters may have annotations of the form "": expression"" following\nthe parameter name. Any parameter may have an annotation even those\nof the form "*identifier" or "**identifier". Functions may have\n"return" annotation of the form ""-> expression"" after the parameter\nlist. These annotations can be any valid Python expression and are\nevaluated when the function definition is executed. Annotations may\nbe evaluated in a different order than they appear in the source code.\nThe presence of annotations does not change the semantics of a\nfunction. The annotation values are available as values of a\ndictionary keyed by the parameters\' names in the "__annotations__"\nattribute of the function object.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions. This uses lambda\nexpressions, described in section *Lambdas*. Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a ""def"" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression. The ""def"" form is actually more powerful since it\nallows the execution of multiple statements and annotations.\n\n**Programmer\'s note:** Functions are first-class objects. A ""def""\nstatement executed inside a function definition defines a local\nfunction that can be returned or passed around. Free variables used\nin the nested function can access the local variables of the function\ncontaining the def. See section *Naming and binding* for details.\n\nSee also: **PEP 3107** - Function Annotations\n\n The original specification for function annotations.\n\n\nClass definitions\n=================\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n classdef ::= [decorators] "class" classname [inheritance] ":" suite\n inheritance ::= "(" [argument_list] ")"\n classname ::= identifier\n\nA class definition is an executable statement. The inheritance list\nusually gives a list of base classes (see *Customizing class creation*\nfor more advanced uses), so each item in the list should evaluate to a\nclass object which allows subclassing. Classes without an inheritance\nlist inherit, by default, from the base class "object"; hence,\n\n class Foo:\n pass\n\nis equivalent to\n\n class Foo(object):\n pass\n\nThe class\'s suite is then executed in a new execution frame (see\n*Naming and binding*), using a newly created local namespace and the\noriginal global namespace. (Usually, the suite contains mostly\nfunction definitions.) When the class\'s suite finishes execution, its\nexecution frame is discarded but its local namespace is saved. [4] A\nclass object is then created using the inheritance list for the base\nclasses and the saved local namespace for the attribute dictionary.\nThe class name is bound to this class object in the original local\nnamespace.\n\nClass creation can be customized heavily using *metaclasses*.\n\nClasses can also be decorated: just like when decorating functions,\n\n @f1(arg)\n @f2\n class Foo: pass\n\nis roughly equivalent to\n\n class Foo: pass\n Foo = f1(arg)(f2(Foo))\n\nThe evaluation rules for the decorator expressions are the same as for\nfunction decorators. The result is then bound to the class name.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass attributes; they are shared by instances. Instance attributes\ncan be set in a method with "self.name = value". Both class and\ninstance attributes are accessible through the notation ""self.name"",\nand an instance attribute hides a class attribute with the same name\nwhen accessed in this way. Class attributes can be used as defaults\nfor instance attributes, but using mutable values there can lead to\nunexpected results. *Descriptors* can be used to create instance\nvariables with different implementation details.\n\nSee also: **PEP 3115** - Metaclasses in Python 3 **PEP 3129** -\n Class Decorators\n\n\nCoroutines\n==========\n\nNew in version 3.5.\n\n\nCoroutine function definition\n-----------------------------\n\n async_funcdef ::= [decorators] "async" "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n\nExecution of Python coroutines can be suspended and resumed at many\npoints (see *coroutine*). In the body of a coroutine, any "await" and\n"async" identifiers become reserved keywords; "await" expressions,\n"async for" and "async with" can only be used in coroutine bodies.\n\nFunctions defined with "async def" syntax are always coroutine\nfunctions, even if they do not contain "await" or "async" keywords.\n\nIt is a "SyntaxError" to use "yield" expressions in "async def"\ncoroutines.\n\nAn example of a coroutine function:\n\n async def func(param1, param2):\n do_stuff()\n await some_coroutine()\n\n\nThe "async for" statement\n-------------------------\n\n async_for_stmt ::= "async" for_stmt\n\nAn *asynchronous iterable* is able to call asynchronous code in its\n*iter* implementation, and *asynchronous iterator* can call\nasynchronous code in its *next* method.\n\nThe "async for" statement allows convenient iteration over\nasynchronous iterators.\n\nThe following code:\n\n async for TARGET in ITER:\n BLOCK\n else:\n BLOCK2\n\nIs semantically equivalent to:\n\n iter = (ITER)\n iter = type(iter).__aiter__(iter)\n running = True\n while running:\n try:\n TARGET = await type(iter).__anext__(iter)\n except StopAsyncIteration:\n running = False\n else:\n BLOCK\n else:\n BLOCK2\n\nSee also "__aiter__()" and "__anext__()" for details.\n\nIt is a "SyntaxError" to use "async for" statement outside of an\n"async def" function.\n\n\nThe "async with" statement\n--------------------------\n\n async_with_stmt ::= "async" with_stmt\n\nAn *asynchronous context manager* is a *context manager* that is able\nto suspend execution in its *enter* and *exit* methods.\n\nThe following code:\n\n async with EXPR as VAR:\n BLOCK\n\nIs semantically equivalent to:\n\n mgr = (EXPR)\n aexit = type(mgr).__aexit__\n aenter = type(mgr).__aenter__(mgr)\n exc = True\n\n VAR = await aenter\n try:\n BLOCK\n except:\n if not await aexit(mgr, *sys.exc_info()):\n raise\n else:\n await aexit(mgr, None, None, None)\n\nSee also "__aenter__()" and "__aexit__()" for details.\n\nIt is a "SyntaxError" to use "async with" statement outside of an\n"async def" function.\n\nSee also: **PEP 492** - Coroutines with async and await syntax\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack unless\n there is a "finally" clause which happens to raise another\n exception. That new exception causes the old one to be lost.\n\n[2] Currently, control "flows off the end" except in the case of\n an exception or the execution of a "return", "continue", or\n "break" statement.\n\n[3] A string literal appearing as the first statement in the\n function body is transformed into the function\'s "__doc__"\n attribute and therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n body is transformed into the namespace\'s "__doc__" item and\n therefore the class\'s *docstring*.\n', 'context-managers': u'\nWith Statement Context Managers\n*******************************\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a "with" statement. The context manager\nhandles the entry into, and the exit from, the desired runtime context\nfor the execution of the block of code. Context managers are normally\ninvoked using the "with" statement (described in section *The with\nstatement*), but can also be used by directly invoking their methods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n Enter the runtime context related to this object. The "with"\n statement will bind this method\'s return value to the target(s)\n specified in the "as" clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n Exit the runtime context related to this object. The parameters\n describe the exception that caused the context to be exited. If the\n context was exited without an exception, all three arguments will\n be "None".\n\n If an exception is supplied, and the method wishes to suppress the\n exception (i.e., prevent it from being propagated), it should\n return a true value. Otherwise, the exception will be processed\n normally upon exit from this method.\n\n Note that "__exit__()" methods should not reraise the passed-in\n exception; this is the caller\'s responsibility.\n\nSee also: **PEP 343** - The "with" statement\n\n The specification, background, and examples for the Python "with"\n statement.\n', 'continue': u'\nThe "continue" statement\n************************\n\n continue_stmt ::= "continue"\n\n"continue" may only occur syntactically nested in a "for" or "while"\nloop, but not nested in a function or class definition or "finally"\nclause within that loop. It continues with the next cycle of the\nnearest enclosing loop.\n\nWhen "continue" passes control out of a "try" statement with a\n"finally" clause, that "finally" clause is executed before really\nstarting the next loop cycle.\n', 'conversions': u'\nArithmetic conversions\n**********************\n\nWhen a description of an arithmetic operator below uses the phrase\n"the numeric arguments are converted to a common type," this means\nthat the operator implementation for built-in types works as follows:\n\n* If either argument is a complex number, the other is converted to\n complex;\n\n* otherwise, if either argument is a floating point number, the\n other is converted to floating point;\n\n* otherwise, both must be integers and no conversion is necessary.\n\nSome additional rules apply for certain operators (e.g., a string as a\nleft argument to the \'%\' operator). Extensions must define their own\nconversion behavior.\n', - 'customization': u'\nBasic customization\n*******************\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. "__new__()" is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of "__new__()" should be the new object instance (usually an\n instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s "__new__()" method using\n "super(currentclass, cls).__new__(cls[, ...])" with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If "__new__()" returns an instance of *cls*, then the new\n instance\'s "__init__()" method will be invoked like\n "__init__(self[, ...])", where *self* is the new instance and the\n remaining arguments are the same as were passed to "__new__()".\n\n If "__new__()" does not return an instance of *cls*, then the new\n instance\'s "__init__()" method will not be invoked.\n\n "__new__()" is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called after the instance has been created (by "__new__()"), but\n before it is returned to the caller. The arguments are those\n passed to the class constructor expression. If a base class has an\n "__init__()" method, the derived class\'s "__init__()" method, if\n any, must explicitly call it to ensure proper initialization of the\n base class part of the instance; for example:\n "BaseClass.__init__(self, [args...])".\n\n Because "__new__()" and "__init__()" work together in constructing\n objects ("__new__()" to create it, and "__init__()" to customise\n it), no non-"None" value may be returned by "__init__()"; doing so\n will cause a "TypeError" to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a "__del__()" method, the\n derived class\'s "__del__()" method, if any, must explicitly call it\n to ensure proper deletion of the base class part of the instance.\n Note that it is possible (though not recommended!) for the\n "__del__()" method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n "__del__()" methods are called for objects that still exist when\n the interpreter exits.\n\n Note: "del x" doesn\'t directly call "x.__del__()" --- the former\n decrements the reference count for "x" by one, and the latter is\n only called when "x"\'s reference count reaches zero. Some common\n situations that may prevent the reference count of an object from\n going to zero include: circular references between objects (e.g.,\n a doubly-linked list or a tree data structure with parent and\n child pointers); a reference to the object on the stack frame of\n a function that caught an exception (the traceback stored in\n "sys.exc_info()[2]" keeps the stack frame alive); or a reference\n to the object on the stack frame that raised an unhandled\n exception in interactive mode (the traceback stored in\n "sys.last_traceback" keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the second can be resolved by freeing the reference to the\n traceback object when it is no longer useful, and the third can\n be resolved by storing "None" in "sys.last_traceback". Circular\n references which are garbage are detected and cleaned up when the\n cyclic garbage collector is enabled (it\'s on by default). Refer\n to the documentation for the "gc" module for more information\n about this topic.\n\n Warning: Due to the precarious circumstances under which\n "__del__()" methods are invoked, exceptions that occur during\n their execution are ignored, and a warning is printed to\n "sys.stderr" instead. Also, when "__del__()" is invoked in\n response to a module being deleted (e.g., when execution of the\n program is done), other globals referenced by the "__del__()"\n method may already have been deleted or in the process of being\n torn down (e.g. the import machinery shutting down). For this\n reason, "__del__()" methods should do the absolute minimum needed\n to maintain external invariants. Starting with version 1.5,\n Python guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the "__del__()" method is called.\n\nobject.__repr__(self)\n\n Called by the "repr()" built-in function to compute the "official"\n string representation of an object. If at all possible, this\n should look like a valid Python expression that could be used to\n recreate an object with the same value (given an appropriate\n environment). If this is not possible, a string of the form\n "<...some useful description...>" should be returned. The return\n value must be a string object. If a class defines "__repr__()" but\n not "__str__()", then "__repr__()" is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by "str(object)" and the built-in functions "format()" and\n "print()" to compute the "informal" or nicely printable string\n representation of an object. The return value must be a *string*\n object.\n\n This method differs from "object.__repr__()" in that there is no\n expectation that "__str__()" return a valid Python expression: a\n more convenient or concise representation can be used.\n\n The default implementation defined by the built-in type "object"\n calls "object.__repr__()".\n\nobject.__bytes__(self)\n\n Called by "bytes()" to compute a byte-string representation of an\n object. This should return a "bytes" object.\n\nobject.__format__(self, format_spec)\n\n Called by the "format()" built-in function (and by extension, the\n "str.format()" method of class "str") to produce a "formatted"\n string representation of an object. The "format_spec" argument is a\n string that contains a description of the formatting options\n desired. The interpretation of the "format_spec" argument is up to\n the type implementing "__format__()", however most classes will\n either delegate formatting to one of the built-in types, or use a\n similar formatting option syntax.\n\n See *Format Specification Mini-Language* for a description of the\n standard formatting syntax.\n\n The return value must be a string object.\n\n Changed in version 3.4: The __format__ method of "object" itself\n raises a "TypeError" if passed any non-empty string.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n These are the so-called "rich comparison" methods. The\n correspondence between operator symbols and method names is as\n follows: "xy" calls\n "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n\n A rich comparison method may return the singleton "NotImplemented"\n if it does not implement the operation for a given pair of\n arguments. By convention, "False" and "True" are returned for a\n successful comparison. However, these methods can return any value,\n so if the comparison operator is used in a Boolean context (e.g.,\n in the condition of an "if" statement), Python will call "bool()"\n on the value to determine if the result is true or false.\n\n By default, "__ne__()" delegates to "__eq__()" and inverts the\n result unless it is "NotImplemented". There are no other implied\n relationships among the comparison operators, for example, the\n truth of "(x.__hash__".\n\n If a class that does not override "__eq__()" wishes to suppress\n hash support, it should include "__hash__ = None" in the class\n definition. A class which defines its own "__hash__()" that\n explicitly raises a "TypeError" would be incorrectly identified as\n hashable by an "isinstance(obj, collections.Hashable)" call.\n\n Note: By default, the "__hash__()" values of str, bytes and\n datetime objects are "salted" with an unpredictable random value.\n Although they remain constant within an individual Python\n process, they are not predictable between repeated invocations of\n Python.This is intended to provide protection against a denial-\n of-service caused by carefully-chosen inputs that exploit the\n worst case performance of a dict insertion, O(n^2) complexity.\n See http://www.ocert.org/advisories/ocert-2011-003.html for\n details.Changing hash values affects the iteration order of\n dicts, sets and other mappings. Python has never made guarantees\n about this ordering (and it typically varies between 32-bit and\n 64-bit builds).See also "PYTHONHASHSEED".\n\n Changed in version 3.3: Hash randomization is enabled by default.\n\nobject.__bool__(self)\n\n Called to implement truth value testing and the built-in operation\n "bool()"; should return "False" or "True". When this method is not\n defined, "__len__()" is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither "__len__()" nor "__bool__()", all its instances are\n considered true.\n', - 'debugger': u'\n"pdb" --- The Python Debugger\n*****************************\n\n**Source code:** Lib/pdb.py\n\n======================================================================\n\nThe module "pdb" defines an interactive source code debugger for\nPython programs. It supports setting (conditional) breakpoints and\nsingle stepping at the source line level, inspection of stack frames,\nsource code listing, and evaluation of arbitrary Python code in the\ncontext of any stack frame. It also supports post-mortem debugging\nand can be called under program control.\n\nThe debugger is extensible -- it is actually defined as the class\n"Pdb". This is currently undocumented but easily understood by reading\nthe source. The extension interface uses the modules "bdb" and "cmd".\n\nThe debugger\'s prompt is "(Pdb)". Typical usage to run a program under\ncontrol of the debugger is:\n\n >>> import pdb\n >>> import mymodule\n >>> pdb.run(\'mymodule.test()\')\n > (0)?()\n (Pdb) continue\n > (1)?()\n (Pdb) continue\n NameError: \'spam\'\n > (1)?()\n (Pdb)\n\nChanged in version 3.3: Tab-completion via the "readline" module is\navailable for commands and command arguments, e.g. the current global\nand local names are offered as arguments of the "p" command.\n\n"pdb.py" can also be invoked as a script to debug other scripts. For\nexample:\n\n python3 -m pdb myscript.py\n\nWhen invoked as a script, pdb will automatically enter post-mortem\ndebugging if the program being debugged exits abnormally. After post-\nmortem debugging (or after normal exit of the program), pdb will\nrestart the program. Automatic restarting preserves pdb\'s state (such\nas breakpoints) and in most cases is more useful than quitting the\ndebugger upon program\'s exit.\n\nNew in version 3.2: "pdb.py" now accepts a "-c" option that executes\ncommands as if given in a ".pdbrc" file, see *Debugger Commands*.\n\nThe typical usage to break into the debugger from a running program is\nto insert\n\n import pdb; pdb.set_trace()\n\nat the location you want to break into the debugger. You can then\nstep through the code following this statement, and continue running\nwithout the debugger using the "continue" command.\n\nThe typical usage to inspect a crashed program is:\n\n >>> import pdb\n >>> import mymodule\n >>> mymodule.test()\n Traceback (most recent call last):\n File "", line 1, in ?\n File "./mymodule.py", line 4, in test\n test2()\n File "./mymodule.py", line 3, in test2\n print(spam)\n NameError: spam\n >>> pdb.pm()\n > ./mymodule.py(3)test2()\n -> print(spam)\n (Pdb)\n\nThe module defines the following functions; each enters the debugger\nin a slightly different way:\n\npdb.run(statement, globals=None, locals=None)\n\n Execute the *statement* (given as a string or a code object) under\n debugger control. The debugger prompt appears before any code is\n executed; you can set breakpoints and type "continue", or you can\n step through the statement using "step" or "next" (all these\n commands are explained below). The optional *globals* and *locals*\n arguments specify the environment in which the code is executed; by\n default the dictionary of the module "__main__" is used. (See the\n explanation of the built-in "exec()" or "eval()" functions.)\n\npdb.runeval(expression, globals=None, locals=None)\n\n Evaluate the *expression* (given as a string or a code object)\n under debugger control. When "runeval()" returns, it returns the\n value of the expression. Otherwise this function is similar to\n "run()".\n\npdb.runcall(function, *args, **kwds)\n\n Call the *function* (a function or method object, not a string)\n with the given arguments. When "runcall()" returns, it returns\n whatever the function call returned. The debugger prompt appears\n as soon as the function is entered.\n\npdb.set_trace()\n\n Enter the debugger at the calling stack frame. This is useful to\n hard-code a breakpoint at a given point in a program, even if the\n code is not otherwise being debugged (e.g. when an assertion\n fails).\n\npdb.post_mortem(traceback=None)\n\n Enter post-mortem debugging of the given *traceback* object. If no\n *traceback* is given, it uses the one of the exception that is\n currently being handled (an exception must be being handled if the\n default is to be used).\n\npdb.pm()\n\n Enter post-mortem debugging of the traceback found in\n "sys.last_traceback".\n\nThe "run*" functions and "set_trace()" are aliases for instantiating\nthe "Pdb" class and calling the method of the same name. If you want\nto access further features, you have to do this yourself:\n\nclass class pdb.Pdb(completekey=\'tab\', stdin=None, stdout=None, skip=None, nosigint=False)\n\n "Pdb" is the debugger class.\n\n The *completekey*, *stdin* and *stdout* arguments are passed to the\n underlying "cmd.Cmd" class; see the description there.\n\n The *skip* argument, if given, must be an iterable of glob-style\n module name patterns. The debugger will not step into frames that\n originate in a module that matches one of these patterns. [1]\n\n By default, Pdb sets a handler for the SIGINT signal (which is sent\n when the user presses "Ctrl-C" on the console) when you give a\n "continue" command. This allows you to break into the debugger\n again by pressing "Ctrl-C". If you want Pdb not to touch the\n SIGINT handler, set *nosigint* tot true.\n\n Example call to enable tracing with *skip*:\n\n import pdb; pdb.Pdb(skip=[\'django.*\']).set_trace()\n\n New in version 3.1: The *skip* argument.\n\n New in version 3.2: The *nosigint* argument. Previously, a SIGINT\n handler was never set by Pdb.\n\n run(statement, globals=None, locals=None)\n runeval(expression, globals=None, locals=None)\n runcall(function, *args, **kwds)\n set_trace()\n\n See the documentation for the functions explained above.\n\n\nDebugger Commands\n=================\n\nThe commands recognized by the debugger are listed below. Most\ncommands can be abbreviated to one or two letters as indicated; e.g.\n"h(elp)" means that either "h" or "help" can be used to enter the help\ncommand (but not "he" or "hel", nor "H" or "Help" or "HELP").\nArguments to commands must be separated by whitespace (spaces or\ntabs). Optional arguments are enclosed in square brackets ("[]") in\nthe command syntax; the square brackets must not be typed.\nAlternatives in the command syntax are separated by a vertical bar\n("|").\n\nEntering a blank line repeats the last command entered. Exception: if\nthe last command was a "list" command, the next 11 lines are listed.\n\nCommands that the debugger doesn\'t recognize are assumed to be Python\nstatements and are executed in the context of the program being\ndebugged. Python statements can also be prefixed with an exclamation\npoint ("!"). This is a powerful way to inspect the program being\ndebugged; it is even possible to change a variable or call a function.\nWhen an exception occurs in such a statement, the exception name is\nprinted but the debugger\'s state is not changed.\n\nThe debugger supports *aliases*. Aliases can have parameters which\nallows one a certain level of adaptability to the context under\nexamination.\n\nMultiple commands may be entered on a single line, separated by ";;".\n(A single ";" is not used as it is the separator for multiple commands\nin a line that is passed to the Python parser.) No intelligence is\napplied to separating the commands; the input is split at the first\n";;" pair, even if it is in the middle of a quoted string.\n\nIf a file ".pdbrc" exists in the user\'s home directory or in the\ncurrent directory, it is read in and executed as if it had been typed\nat the debugger prompt. This is particularly useful for aliases. If\nboth files exist, the one in the home directory is read first and\naliases defined there can be overridden by the local file.\n\nChanged in version 3.2: ".pdbrc" can now contain commands that\ncontinue debugging, such as "continue" or "next". Previously, these\ncommands had no effect.\n\nh(elp) [command]\n\n Without argument, print the list of available commands. With a\n *command* as argument, print help about that command. "help pdb"\n displays the full documentation (the docstring of the "pdb"\n module). Since the *command* argument must be an identifier, "help\n exec" must be entered to get help on the "!" command.\n\nw(here)\n\n Print a stack trace, with the most recent frame at the bottom. An\n arrow indicates the current frame, which determines the context of\n most commands.\n\nd(own) [count]\n\n Move the current frame *count* (default one) levels down in the\n stack trace (to a newer frame).\n\nu(p) [count]\n\n Move the current frame *count* (default one) levels up in the stack\n trace (to an older frame).\n\nb(reak) [([filename:]lineno | function) [, condition]]\n\n With a *lineno* argument, set a break there in the current file.\n With a *function* argument, set a break at the first executable\n statement within that function. The line number may be prefixed\n with a filename and a colon, to specify a breakpoint in another\n file (probably one that hasn\'t been loaded yet). The file is\n searched on "sys.path". Note that each breakpoint is assigned a\n number to which all the other breakpoint commands refer.\n\n If a second argument is present, it is an expression which must\n evaluate to true before the breakpoint is honored.\n\n Without argument, list all breaks, including for each breakpoint,\n the number of times that breakpoint has been hit, the current\n ignore count, and the associated condition if any.\n\ntbreak [([filename:]lineno | function) [, condition]]\n\n Temporary breakpoint, which is removed automatically when it is\n first hit. The arguments are the same as for "break".\n\ncl(ear) [filename:lineno | bpnumber [bpnumber ...]]\n\n With a *filename:lineno* argument, clear all the breakpoints at\n this line. With a space separated list of breakpoint numbers, clear\n those breakpoints. Without argument, clear all breaks (but first\n ask confirmation).\n\ndisable [bpnumber [bpnumber ...]]\n\n Disable the breakpoints given as a space separated list of\n breakpoint numbers. Disabling a breakpoint means it cannot cause\n the program to stop execution, but unlike clearing a breakpoint, it\n remains in the list of breakpoints and can be (re-)enabled.\n\nenable [bpnumber [bpnumber ...]]\n\n Enable the breakpoints specified.\n\nignore bpnumber [count]\n\n Set the ignore count for the given breakpoint number. If count is\n omitted, the ignore count is set to 0. A breakpoint becomes active\n when the ignore count is zero. When non-zero, the count is\n decremented each time the breakpoint is reached and the breakpoint\n is not disabled and any associated condition evaluates to true.\n\ncondition bpnumber [condition]\n\n Set a new *condition* for the breakpoint, an expression which must\n evaluate to true before the breakpoint is honored. If *condition*\n is absent, any existing condition is removed; i.e., the breakpoint\n is made unconditional.\n\ncommands [bpnumber]\n\n Specify a list of commands for breakpoint number *bpnumber*. The\n commands themselves appear on the following lines. Type a line\n containing just "end" to terminate the commands. An example:\n\n (Pdb) commands 1\n (com) p some_variable\n (com) end\n (Pdb)\n\n To remove all commands from a breakpoint, type commands and follow\n it immediately with "end"; that is, give no commands.\n\n With no *bpnumber* argument, commands refers to the last breakpoint\n set.\n\n You can use breakpoint commands to start your program up again.\n Simply use the continue command, or step, or any other command that\n resumes execution.\n\n Specifying any command resuming execution (currently continue,\n step, next, return, jump, quit and their abbreviations) terminates\n the command list (as if that command was immediately followed by\n end). This is because any time you resume execution (even with a\n simple next or step), you may encounter another breakpoint--which\n could have its own command list, leading to ambiguities about which\n list to execute.\n\n If you use the \'silent\' command in the command list, the usual\n message about stopping at a breakpoint is not printed. This may be\n desirable for breakpoints that are to print a specific message and\n then continue. If none of the other commands print anything, you\n see no sign that the breakpoint was reached.\n\ns(tep)\n\n Execute the current line, stop at the first possible occasion\n (either in a function that is called or on the next line in the\n current function).\n\nn(ext)\n\n Continue execution until the next line in the current function is\n reached or it returns. (The difference between "next" and "step"\n is that "step" stops inside a called function, while "next"\n executes called functions at (nearly) full speed, only stopping at\n the next line in the current function.)\n\nunt(il) [lineno]\n\n Without argument, continue execution until the line with a number\n greater than the current one is reached.\n\n With a line number, continue execution until a line with a number\n greater or equal to that is reached. In both cases, also stop when\n the current frame returns.\n\n Changed in version 3.2: Allow giving an explicit line number.\n\nr(eturn)\n\n Continue execution until the current function returns.\n\nc(ont(inue))\n\n Continue execution, only stop when a breakpoint is encountered.\n\nj(ump) lineno\n\n Set the next line that will be executed. Only available in the\n bottom-most frame. This lets you jump back and execute code again,\n or jump forward to skip code that you don\'t want to run.\n\n It should be noted that not all jumps are allowed -- for instance\n it is not possible to jump into the middle of a "for" loop or out\n of a "finally" clause.\n\nl(ist) [first[, last]]\n\n List source code for the current file. Without arguments, list 11\n lines around the current line or continue the previous listing.\n With "." as argument, list 11 lines around the current line. With\n one argument, list 11 lines around at that line. With two\n arguments, list the given range; if the second argument is less\n than the first, it is interpreted as a count.\n\n The current line in the current frame is indicated by "->". If an\n exception is being debugged, the line where the exception was\n originally raised or propagated is indicated by ">>", if it differs\n from the current line.\n\n New in version 3.2: The ">>" marker.\n\nll | longlist\n\n List all source code for the current function or frame.\n Interesting lines are marked as for "list".\n\n New in version 3.2.\n\na(rgs)\n\n Print the argument list of the current function.\n\np expression\n\n Evaluate the *expression* in the current context and print its\n value.\n\n Note: "print()" can also be used, but is not a debugger command\n --- this executes the Python "print()" function.\n\npp expression\n\n Like the "p" command, except the value of the expression is pretty-\n printed using the "pprint" module.\n\nwhatis expression\n\n Print the type of the *expression*.\n\nsource expression\n\n Try to get source code for the given object and display it.\n\n New in version 3.2.\n\ndisplay [expression]\n\n Display the value of the expression if it changed, each time\n execution stops in the current frame.\n\n Without expression, list all display expressions for the current\n frame.\n\n New in version 3.2.\n\nundisplay [expression]\n\n Do not display the expression any more in the current frame.\n Without expression, clear all display expressions for the current\n frame.\n\n New in version 3.2.\n\ninteract\n\n Start an interative interpreter (using the "code" module) whose\n global namespace contains all the (global and local) names found in\n the current scope.\n\n New in version 3.2.\n\nalias [name [command]]\n\n Create an alias called *name* that executes *command*. The command\n must *not* be enclosed in quotes. Replaceable parameters can be\n indicated by "%1", "%2", and so on, while "%*" is replaced by all\n the parameters. If no command is given, the current alias for\n *name* is shown. If no arguments are given, all aliases are listed.\n\n Aliases may be nested and can contain anything that can be legally\n typed at the pdb prompt. Note that internal pdb commands *can* be\n overridden by aliases. Such a command is then hidden until the\n alias is removed. Aliasing is recursively applied to the first\n word of the command line; all other words in the line are left\n alone.\n\n As an example, here are two useful aliases (especially when placed\n in the ".pdbrc" file):\n\n # Print instance variables (usage "pi classInst")\n alias pi for k in %1.__dict__.keys(): print("%1.",k,"=",%1.__dict__[k])\n # Print instance variables in self\n alias ps pi self\n\nunalias name\n\n Delete the specified alias.\n\n! statement\n\n Execute the (one-line) *statement* in the context of the current\n stack frame. The exclamation point can be omitted unless the first\n word of the statement resembles a debugger command. To set a\n global variable, you can prefix the assignment command with a\n "global" statement on the same line, e.g.:\n\n (Pdb) global list_options; list_options = [\'-l\']\n (Pdb)\n\nrun [args ...]\nrestart [args ...]\n\n Restart the debugged Python program. If an argument is supplied,\n it is split with "shlex" and the result is used as the new\n "sys.argv". History, breakpoints, actions and debugger options are\n preserved. "restart" is an alias for "run".\n\nq(uit)\n\n Quit from the debugger. The program being executed is aborted.\n\n-[ Footnotes ]-\n\n[1] Whether a frame is considered to originate in a certain module\n is determined by the "__name__" in the frame globals.\n', + 'customization': u'\nBasic customization\n*******************\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. "__new__()" is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of "__new__()" should be the new object instance (usually an\n instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s "__new__()" method using\n "super(currentclass, cls).__new__(cls[, ...])" with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If "__new__()" returns an instance of *cls*, then the new\n instance\'s "__init__()" method will be invoked like\n "__init__(self[, ...])", where *self* is the new instance and the\n remaining arguments are the same as were passed to "__new__()".\n\n If "__new__()" does not return an instance of *cls*, then the new\n instance\'s "__init__()" method will not be invoked.\n\n "__new__()" is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called after the instance has been created (by "__new__()"), but\n before it is returned to the caller. The arguments are those\n passed to the class constructor expression. If a base class has an\n "__init__()" method, the derived class\'s "__init__()" method, if\n any, must explicitly call it to ensure proper initialization of the\n base class part of the instance; for example:\n "BaseClass.__init__(self, [args...])".\n\n Because "__new__()" and "__init__()" work together in constructing\n objects ("__new__()" to create it, and "__init__()" to customize\n it), no non-"None" value may be returned by "__init__()"; doing so\n will cause a "TypeError" to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a "__del__()" method, the\n derived class\'s "__del__()" method, if any, must explicitly call it\n to ensure proper deletion of the base class part of the instance.\n Note that it is possible (though not recommended!) for the\n "__del__()" method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n "__del__()" methods are called for objects that still exist when\n the interpreter exits.\n\n Note: "del x" doesn\'t directly call "x.__del__()" --- the former\n decrements the reference count for "x" by one, and the latter is\n only called when "x"\'s reference count reaches zero. Some common\n situations that may prevent the reference count of an object from\n going to zero include: circular references between objects (e.g.,\n a doubly-linked list or a tree data structure with parent and\n child pointers); a reference to the object on the stack frame of\n a function that caught an exception (the traceback stored in\n "sys.exc_info()[2]" keeps the stack frame alive); or a reference\n to the object on the stack frame that raised an unhandled\n exception in interactive mode (the traceback stored in\n "sys.last_traceback" keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the second can be resolved by freeing the reference to the\n traceback object when it is no longer useful, and the third can\n be resolved by storing "None" in "sys.last_traceback". Circular\n references which are garbage are detected and cleaned up when the\n cyclic garbage collector is enabled (it\'s on by default). Refer\n to the documentation for the "gc" module for more information\n about this topic.\n\n Warning: Due to the precarious circumstances under which\n "__del__()" methods are invoked, exceptions that occur during\n their execution are ignored, and a warning is printed to\n "sys.stderr" instead. Also, when "__del__()" is invoked in\n response to a module being deleted (e.g., when execution of the\n program is done), other globals referenced by the "__del__()"\n method may already have been deleted or in the process of being\n torn down (e.g. the import machinery shutting down). For this\n reason, "__del__()" methods should do the absolute minimum needed\n to maintain external invariants. Starting with version 1.5,\n Python guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the "__del__()" method is called.\n\nobject.__repr__(self)\n\n Called by the "repr()" built-in function to compute the "official"\n string representation of an object. If at all possible, this\n should look like a valid Python expression that could be used to\n recreate an object with the same value (given an appropriate\n environment). If this is not possible, a string of the form\n "<...some useful description...>" should be returned. The return\n value must be a string object. If a class defines "__repr__()" but\n not "__str__()", then "__repr__()" is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by "str(object)" and the built-in functions "format()" and\n "print()" to compute the "informal" or nicely printable string\n representation of an object. The return value must be a *string*\n object.\n\n This method differs from "object.__repr__()" in that there is no\n expectation that "__str__()" return a valid Python expression: a\n more convenient or concise representation can be used.\n\n The default implementation defined by the built-in type "object"\n calls "object.__repr__()".\n\nobject.__bytes__(self)\n\n Called by "bytes()" to compute a byte-string representation of an\n object. This should return a "bytes" object.\n\nobject.__format__(self, format_spec)\n\n Called by the "format()" built-in function (and by extension, the\n "str.format()" method of class "str") to produce a "formatted"\n string representation of an object. The "format_spec" argument is a\n string that contains a description of the formatting options\n desired. The interpretation of the "format_spec" argument is up to\n the type implementing "__format__()", however most classes will\n either delegate formatting to one of the built-in types, or use a\n similar formatting option syntax.\n\n See *Format Specification Mini-Language* for a description of the\n standard formatting syntax.\n\n The return value must be a string object.\n\n Changed in version 3.4: The __format__ method of "object" itself\n raises a "TypeError" if passed any non-empty string.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n These are the so-called "rich comparison" methods. The\n correspondence between operator symbols and method names is as\n follows: "xy" calls\n "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n\n A rich comparison method may return the singleton "NotImplemented"\n if it does not implement the operation for a given pair of\n arguments. By convention, "False" and "True" are returned for a\n successful comparison. However, these methods can return any value,\n so if the comparison operator is used in a Boolean context (e.g.,\n in the condition of an "if" statement), Python will call "bool()"\n on the value to determine if the result is true or false.\n\n By default, "__ne__()" delegates to "__eq__()" and inverts the\n result unless it is "NotImplemented". There are no other implied\n relationships among the comparison operators, for example, the\n truth of "(x.__hash__".\n\n If a class that does not override "__eq__()" wishes to suppress\n hash support, it should include "__hash__ = None" in the class\n definition. A class which defines its own "__hash__()" that\n explicitly raises a "TypeError" would be incorrectly identified as\n hashable by an "isinstance(obj, collections.Hashable)" call.\n\n Note: By default, the "__hash__()" values of str, bytes and\n datetime objects are "salted" with an unpredictable random value.\n Although they remain constant within an individual Python\n process, they are not predictable between repeated invocations of\n Python.This is intended to provide protection against a denial-\n of-service caused by carefully-chosen inputs that exploit the\n worst case performance of a dict insertion, O(n^2) complexity.\n See http://www.ocert.org/advisories/ocert-2011-003.html for\n details.Changing hash values affects the iteration order of\n dicts, sets and other mappings. Python has never made guarantees\n about this ordering (and it typically varies between 32-bit and\n 64-bit builds).See also "PYTHONHASHSEED".\n\n Changed in version 3.3: Hash randomization is enabled by default.\n\nobject.__bool__(self)\n\n Called to implement truth value testing and the built-in operation\n "bool()"; should return "False" or "True". When this method is not\n defined, "__len__()" is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither "__len__()" nor "__bool__()", all its instances are\n considered true.\n', + 'debugger': u'\n"pdb" --- The Python Debugger\n*****************************\n\n**Source code:** Lib/pdb.py\n\n======================================================================\n\nThe module "pdb" defines an interactive source code debugger for\nPython programs. It supports setting (conditional) breakpoints and\nsingle stepping at the source line level, inspection of stack frames,\nsource code listing, and evaluation of arbitrary Python code in the\ncontext of any stack frame. It also supports post-mortem debugging\nand can be called under program control.\n\nThe debugger is extensible -- it is actually defined as the class\n"Pdb". This is currently undocumented but easily understood by reading\nthe source. The extension interface uses the modules "bdb" and "cmd".\n\nThe debugger\'s prompt is "(Pdb)". Typical usage to run a program under\ncontrol of the debugger is:\n\n >>> import pdb\n >>> import mymodule\n >>> pdb.run(\'mymodule.test()\')\n > (0)?()\n (Pdb) continue\n > (1)?()\n (Pdb) continue\n NameError: \'spam\'\n > (1)?()\n (Pdb)\n\nChanged in version 3.3: Tab-completion via the "readline" module is\navailable for commands and command arguments, e.g. the current global\nand local names are offered as arguments of the "p" command.\n\n"pdb.py" can also be invoked as a script to debug other scripts. For\nexample:\n\n python3 -m pdb myscript.py\n\nWhen invoked as a script, pdb will automatically enter post-mortem\ndebugging if the program being debugged exits abnormally. After post-\nmortem debugging (or after normal exit of the program), pdb will\nrestart the program. Automatic restarting preserves pdb\'s state (such\nas breakpoints) and in most cases is more useful than quitting the\ndebugger upon program\'s exit.\n\nNew in version 3.2: "pdb.py" now accepts a "-c" option that executes\ncommands as if given in a ".pdbrc" file, see *Debugger Commands*.\n\nThe typical usage to break into the debugger from a running program is\nto insert\n\n import pdb; pdb.set_trace()\n\nat the location you want to break into the debugger. You can then\nstep through the code following this statement, and continue running\nwithout the debugger using the "continue" command.\n\nThe typical usage to inspect a crashed program is:\n\n >>> import pdb\n >>> import mymodule\n >>> mymodule.test()\n Traceback (most recent call last):\n File "", line 1, in ?\n File "./mymodule.py", line 4, in test\n test2()\n File "./mymodule.py", line 3, in test2\n print(spam)\n NameError: spam\n >>> pdb.pm()\n > ./mymodule.py(3)test2()\n -> print(spam)\n (Pdb)\n\nThe module defines the following functions; each enters the debugger\nin a slightly different way:\n\npdb.run(statement, globals=None, locals=None)\n\n Execute the *statement* (given as a string or a code object) under\n debugger control. The debugger prompt appears before any code is\n executed; you can set breakpoints and type "continue", or you can\n step through the statement using "step" or "next" (all these\n commands are explained below). The optional *globals* and *locals*\n arguments specify the environment in which the code is executed; by\n default the dictionary of the module "__main__" is used. (See the\n explanation of the built-in "exec()" or "eval()" functions.)\n\npdb.runeval(expression, globals=None, locals=None)\n\n Evaluate the *expression* (given as a string or a code object)\n under debugger control. When "runeval()" returns, it returns the\n value of the expression. Otherwise this function is similar to\n "run()".\n\npdb.runcall(function, *args, **kwds)\n\n Call the *function* (a function or method object, not a string)\n with the given arguments. When "runcall()" returns, it returns\n whatever the function call returned. The debugger prompt appears\n as soon as the function is entered.\n\npdb.set_trace()\n\n Enter the debugger at the calling stack frame. This is useful to\n hard-code a breakpoint at a given point in a program, even if the\n code is not otherwise being debugged (e.g. when an assertion\n fails).\n\npdb.post_mortem(traceback=None)\n\n Enter post-mortem debugging of the given *traceback* object. If no\n *traceback* is given, it uses the one of the exception that is\n currently being handled (an exception must be being handled if the\n default is to be used).\n\npdb.pm()\n\n Enter post-mortem debugging of the traceback found in\n "sys.last_traceback".\n\nThe "run*" functions and "set_trace()" are aliases for instantiating\nthe "Pdb" class and calling the method of the same name. If you want\nto access further features, you have to do this yourself:\n\nclass class pdb.Pdb(completekey=\'tab\', stdin=None, stdout=None, skip=None, nosigint=False)\n\n "Pdb" is the debugger class.\n\n The *completekey*, *stdin* and *stdout* arguments are passed to the\n underlying "cmd.Cmd" class; see the description there.\n\n The *skip* argument, if given, must be an iterable of glob-style\n module name patterns. The debugger will not step into frames that\n originate in a module that matches one of these patterns. [1]\n\n By default, Pdb sets a handler for the SIGINT signal (which is sent\n when the user presses "Ctrl-C" on the console) when you give a\n "continue" command. This allows you to break into the debugger\n again by pressing "Ctrl-C". If you want Pdb not to touch the\n SIGINT handler, set *nosigint* to true.\n\n Example call to enable tracing with *skip*:\n\n import pdb; pdb.Pdb(skip=[\'django.*\']).set_trace()\n\n New in version 3.1: The *skip* argument.\n\n New in version 3.2: The *nosigint* argument. Previously, a SIGINT\n handler was never set by Pdb.\n\n run(statement, globals=None, locals=None)\n runeval(expression, globals=None, locals=None)\n runcall(function, *args, **kwds)\n set_trace()\n\n See the documentation for the functions explained above.\n\n\nDebugger Commands\n=================\n\nThe commands recognized by the debugger are listed below. Most\ncommands can be abbreviated to one or two letters as indicated; e.g.\n"h(elp)" means that either "h" or "help" can be used to enter the help\ncommand (but not "he" or "hel", nor "H" or "Help" or "HELP").\nArguments to commands must be separated by whitespace (spaces or\ntabs). Optional arguments are enclosed in square brackets ("[]") in\nthe command syntax; the square brackets must not be typed.\nAlternatives in the command syntax are separated by a vertical bar\n("|").\n\nEntering a blank line repeats the last command entered. Exception: if\nthe last command was a "list" command, the next 11 lines are listed.\n\nCommands that the debugger doesn\'t recognize are assumed to be Python\nstatements and are executed in the context of the program being\ndebugged. Python statements can also be prefixed with an exclamation\npoint ("!"). This is a powerful way to inspect the program being\ndebugged; it is even possible to change a variable or call a function.\nWhen an exception occurs in such a statement, the exception name is\nprinted but the debugger\'s state is not changed.\n\nThe debugger supports *aliases*. Aliases can have parameters which\nallows one a certain level of adaptability to the context under\nexamination.\n\nMultiple commands may be entered on a single line, separated by ";;".\n(A single ";" is not used as it is the separator for multiple commands\nin a line that is passed to the Python parser.) No intelligence is\napplied to separating the commands; the input is split at the first\n";;" pair, even if it is in the middle of a quoted string.\n\nIf a file ".pdbrc" exists in the user\'s home directory or in the\ncurrent directory, it is read in and executed as if it had been typed\nat the debugger prompt. This is particularly useful for aliases. If\nboth files exist, the one in the home directory is read first and\naliases defined there can be overridden by the local file.\n\nChanged in version 3.2: ".pdbrc" can now contain commands that\ncontinue debugging, such as "continue" or "next". Previously, these\ncommands had no effect.\n\nh(elp) [command]\n\n Without argument, print the list of available commands. With a\n *command* as argument, print help about that command. "help pdb"\n displays the full documentation (the docstring of the "pdb"\n module). Since the *command* argument must be an identifier, "help\n exec" must be entered to get help on the "!" command.\n\nw(here)\n\n Print a stack trace, with the most recent frame at the bottom. An\n arrow indicates the current frame, which determines the context of\n most commands.\n\nd(own) [count]\n\n Move the current frame *count* (default one) levels down in the\n stack trace (to a newer frame).\n\nu(p) [count]\n\n Move the current frame *count* (default one) levels up in the stack\n trace (to an older frame).\n\nb(reak) [([filename:]lineno | function) [, condition]]\n\n With a *lineno* argument, set a break there in the current file.\n With a *function* argument, set a break at the first executable\n statement within that function. The line number may be prefixed\n with a filename and a colon, to specify a breakpoint in another\n file (probably one that hasn\'t been loaded yet). The file is\n searched on "sys.path". Note that each breakpoint is assigned a\n number to which all the other breakpoint commands refer.\n\n If a second argument is present, it is an expression which must\n evaluate to true before the breakpoint is honored.\n\n Without argument, list all breaks, including for each breakpoint,\n the number of times that breakpoint has been hit, the current\n ignore count, and the associated condition if any.\n\ntbreak [([filename:]lineno | function) [, condition]]\n\n Temporary breakpoint, which is removed automatically when it is\n first hit. The arguments are the same as for "break".\n\ncl(ear) [filename:lineno | bpnumber [bpnumber ...]]\n\n With a *filename:lineno* argument, clear all the breakpoints at\n this line. With a space separated list of breakpoint numbers, clear\n those breakpoints. Without argument, clear all breaks (but first\n ask confirmation).\n\ndisable [bpnumber [bpnumber ...]]\n\n Disable the breakpoints given as a space separated list of\n breakpoint numbers. Disabling a breakpoint means it cannot cause\n the program to stop execution, but unlike clearing a breakpoint, it\n remains in the list of breakpoints and can be (re-)enabled.\n\nenable [bpnumber [bpnumber ...]]\n\n Enable the breakpoints specified.\n\nignore bpnumber [count]\n\n Set the ignore count for the given breakpoint number. If count is\n omitted, the ignore count is set to 0. A breakpoint becomes active\n when the ignore count is zero. When non-zero, the count is\n decremented each time the breakpoint is reached and the breakpoint\n is not disabled and any associated condition evaluates to true.\n\ncondition bpnumber [condition]\n\n Set a new *condition* for the breakpoint, an expression which must\n evaluate to true before the breakpoint is honored. If *condition*\n is absent, any existing condition is removed; i.e., the breakpoint\n is made unconditional.\n\ncommands [bpnumber]\n\n Specify a list of commands for breakpoint number *bpnumber*. The\n commands themselves appear on the following lines. Type a line\n containing just "end" to terminate the commands. An example:\n\n (Pdb) commands 1\n (com) p some_variable\n (com) end\n (Pdb)\n\n To remove all commands from a breakpoint, type commands and follow\n it immediately with "end"; that is, give no commands.\n\n With no *bpnumber* argument, commands refers to the last breakpoint\n set.\n\n You can use breakpoint commands to start your program up again.\n Simply use the continue command, or step, or any other command that\n resumes execution.\n\n Specifying any command resuming execution (currently continue,\n step, next, return, jump, quit and their abbreviations) terminates\n the command list (as if that command was immediately followed by\n end). This is because any time you resume execution (even with a\n simple next or step), you may encounter another breakpoint\u2014which\n could have its own command list, leading to ambiguities about which\n list to execute.\n\n If you use the \'silent\' command in the command list, the usual\n message about stopping at a breakpoint is not printed. This may be\n desirable for breakpoints that are to print a specific message and\n then continue. If none of the other commands print anything, you\n see no sign that the breakpoint was reached.\n\ns(tep)\n\n Execute the current line, stop at the first possible occasion\n (either in a function that is called or on the next line in the\n current function).\n\nn(ext)\n\n Continue execution until the next line in the current function is\n reached or it returns. (The difference between "next" and "step"\n is that "step" stops inside a called function, while "next"\n executes called functions at (nearly) full speed, only stopping at\n the next line in the current function.)\n\nunt(il) [lineno]\n\n Without argument, continue execution until the line with a number\n greater than the current one is reached.\n\n With a line number, continue execution until a line with a number\n greater or equal to that is reached. In both cases, also stop when\n the current frame returns.\n\n Changed in version 3.2: Allow giving an explicit line number.\n\nr(eturn)\n\n Continue execution until the current function returns.\n\nc(ont(inue))\n\n Continue execution, only stop when a breakpoint is encountered.\n\nj(ump) lineno\n\n Set the next line that will be executed. Only available in the\n bottom-most frame. This lets you jump back and execute code again,\n or jump forward to skip code that you don\'t want to run.\n\n It should be noted that not all jumps are allowed -- for instance\n it is not possible to jump into the middle of a "for" loop or out\n of a "finally" clause.\n\nl(ist) [first[, last]]\n\n List source code for the current file. Without arguments, list 11\n lines around the current line or continue the previous listing.\n With "." as argument, list 11 lines around the current line. With\n one argument, list 11 lines around at that line. With two\n arguments, list the given range; if the second argument is less\n than the first, it is interpreted as a count.\n\n The current line in the current frame is indicated by "->". If an\n exception is being debugged, the line where the exception was\n originally raised or propagated is indicated by ">>", if it differs\n from the current line.\n\n New in version 3.2: The ">>" marker.\n\nll | longlist\n\n List all source code for the current function or frame.\n Interesting lines are marked as for "list".\n\n New in version 3.2.\n\na(rgs)\n\n Print the argument list of the current function.\n\np expression\n\n Evaluate the *expression* in the current context and print its\n value.\n\n Note: "print()" can also be used, but is not a debugger command\n --- this executes the Python "print()" function.\n\npp expression\n\n Like the "p" command, except the value of the expression is pretty-\n printed using the "pprint" module.\n\nwhatis expression\n\n Print the type of the *expression*.\n\nsource expression\n\n Try to get source code for the given object and display it.\n\n New in version 3.2.\n\ndisplay [expression]\n\n Display the value of the expression if it changed, each time\n execution stops in the current frame.\n\n Without expression, list all display expressions for the current\n frame.\n\n New in version 3.2.\n\nundisplay [expression]\n\n Do not display the expression any more in the current frame.\n Without expression, clear all display expressions for the current\n frame.\n\n New in version 3.2.\n\ninteract\n\n Start an interactive interpreter (using the "code" module) whose\n global namespace contains all the (global and local) names found in\n the current scope.\n\n New in version 3.2.\n\nalias [name [command]]\n\n Create an alias called *name* that executes *command*. The command\n must *not* be enclosed in quotes. Replaceable parameters can be\n indicated by "%1", "%2", and so on, while "%*" is replaced by all\n the parameters. If no command is given, the current alias for\n *name* is shown. If no arguments are given, all aliases are listed.\n\n Aliases may be nested and can contain anything that can be legally\n typed at the pdb prompt. Note that internal pdb commands *can* be\n overridden by aliases. Such a command is then hidden until the\n alias is removed. Aliasing is recursively applied to the first\n word of the command line; all other words in the line are left\n alone.\n\n As an example, here are two useful aliases (especially when placed\n in the ".pdbrc" file):\n\n # Print instance variables (usage "pi classInst")\n alias pi for k in %1.__dict__.keys(): print("%1.",k,"=",%1.__dict__[k])\n # Print instance variables in self\n alias ps pi self\n\nunalias name\n\n Delete the specified alias.\n\n! statement\n\n Execute the (one-line) *statement* in the context of the current\n stack frame. The exclamation point can be omitted unless the first\n word of the statement resembles a debugger command. To set a\n global variable, you can prefix the assignment command with a\n "global" statement on the same line, e.g.:\n\n (Pdb) global list_options; list_options = [\'-l\']\n (Pdb)\n\nrun [args ...]\nrestart [args ...]\n\n Restart the debugged Python program. If an argument is supplied,\n it is split with "shlex" and the result is used as the new\n "sys.argv". History, breakpoints, actions and debugger options are\n preserved. "restart" is an alias for "run".\n\nq(uit)\n\n Quit from the debugger. The program being executed is aborted.\n\n-[ Footnotes ]-\n\n[1] Whether a frame is considered to originate in a certain module\n is determined by the "__name__" in the frame globals.\n', 'del': u'\nThe "del" statement\n*******************\n\n del_stmt ::= "del" target_list\n\nDeletion is recursively defined very similar to the way assignment is\ndefined. Rather than spelling it out in full details, here are some\nhints.\n\nDeletion of a target list recursively deletes each target, from left\nto right.\n\nDeletion of a name removes the binding of that name from the local or\nglobal namespace, depending on whether the name occurs in a "global"\nstatement in the same code block. If the name is unbound, a\n"NameError" exception will be raised.\n\nDeletion of attribute references, subscriptions and slicings is passed\nto the primary object involved; deletion of a slicing is in general\nequivalent to assignment of an empty slice of the right type (but even\nthis is determined by the sliced object).\n\nChanged in version 3.2: Previously it was illegal to delete a name\nfrom the local namespace if it occurs as a free variable in a nested\nblock.\n', 'dict': u'\nDictionary displays\n*******************\n\nA dictionary display is a possibly empty series of key/datum pairs\nenclosed in curly braces:\n\n dict_display ::= "{" [key_datum_list | dict_comprehension] "}"\n key_datum_list ::= key_datum ("," key_datum)* [","]\n key_datum ::= expression ":" expression | "**" or_expr\n dict_comprehension ::= expression ":" expression comp_for\n\nA dictionary display yields a new dictionary object.\n\nIf a comma-separated sequence of key/datum pairs is given, they are\nevaluated from left to right to define the entries of the dictionary:\neach key object is used as a key into the dictionary to store the\ncorresponding datum. This means that you can specify the same key\nmultiple times in the key/datum list, and the final dictionary\'s value\nfor that key will be the last one given.\n\nA double asterisk "**" denotes *dictionary unpacking*. Its operand\nmust be a *mapping*. Each mapping item is added to the new\ndictionary. Later values replace values already set by earlier\nkey/datum pairs and earlier dictionary unpackings.\n\nNew in version 3.5: Unpacking into dictionary displays, originally\nproposed by **PEP 448**.\n\nA dict comprehension, in contrast to list and set comprehensions,\nneeds two expressions separated with a colon followed by the usual\n"for" and "if" clauses. When the comprehension is run, the resulting\nkey and value elements are inserted in the new dictionary in the order\nthey are produced.\n\nRestrictions on the types of the key values are listed earlier in\nsection *The standard type hierarchy*. (To summarize, the key type\nshould be *hashable*, which excludes all mutable objects.) Clashes\nbetween duplicate keys are not detected; the last datum (textually\nrightmost in the display) stored for a given key value prevails.\n', 'dynamic-features': u'\nInteraction with dynamic features\n*********************************\n\nName resolution of free variables occurs at runtime, not at compile\ntime. This means that the following code will print 42:\n\n i = 10\n def f():\n print(i)\n i = 42\n f()\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nThe "eval()" and "exec()" functions do not have access to the full\nenvironment for resolving names. Names may be resolved in the local\nand global namespaces of the caller. Free variables are not resolved\nin the nearest enclosing namespace, but in the global namespace. [1]\nThe "exec()" and "eval()" functions have optional arguments to\noverride the global and local namespace. If only one namespace is\nspecified, it is used for both.\n', @@ -34,8 +34,8 @@ topics = {'assert': u'\nThe "assert" statement\n**********************\n\nAssert 'exprlists': u'\nExpression lists\n****************\n\n expression_list ::= expression ( "," expression )* [","]\n starred_list ::= starred_item ( "," starred_item )* [","]\n starred_expression ::= expression | ( starred_item "," )* [starred_item]\n starred_item ::= expression | "*" or_expr\n\nExcept when part of a list or set display, an expression list\ncontaining at least one comma yields a tuple. The length of the tuple\nis the number of expressions in the list. The expressions are\nevaluated from left to right.\n\nAn asterisk "*" denotes *iterable unpacking*. Its operand must be an\n*iterable*. The iterable is expanded into a sequence of items, which\nare included in the new tuple, list, or set, at the site of the\nunpacking.\n\nNew in version 3.5: Iterable unpacking in expression lists, originally\nproposed by **PEP 448**.\n\nThe trailing comma is required only to create a single tuple (a.k.a. a\n*singleton*); it is optional in all other cases. A single expression\nwithout a trailing comma doesn\'t create a tuple, but rather yields the\nvalue of that expression. (To create an empty tuple, use an empty pair\nof parentheses: "()".)\n', 'floating': u'\nFloating point literals\n***********************\n\nFloating point literals are described by the following lexical\ndefinitions:\n\n floatnumber ::= pointfloat | exponentfloat\n pointfloat ::= [intpart] fraction | intpart "."\n exponentfloat ::= (intpart | pointfloat) exponent\n intpart ::= digit+\n fraction ::= "." digit+\n exponent ::= ("e" | "E") ["+" | "-"] digit+\n\nNote that the integer and exponent parts are always interpreted using\nradix 10. For example, "077e010" is legal, and denotes the same number\nas "77e10". The allowed range of floating point literals is\nimplementation-dependent. Some examples of floating point literals:\n\n 3.14 10. .001 1e100 3.14e-10 0e0\n\nNote that numeric literals do not include a sign; a phrase like "-1"\nis actually an expression composed of the unary operator "-" and the\nliteral "1".\n', 'for': u'\nThe "for" statement\n*******************\n\nThe "for" statement is used to iterate over the elements of a sequence\n(such as a string, tuple or list) or other iterable object:\n\n for_stmt ::= "for" target_list "in" expression_list ":" suite\n ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject. An iterator is created for the result of the\n"expression_list". The suite is then executed once for each item\nprovided by the iterator, in the order returned by the iterator. Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments (see *Assignment statements*), and then the suite is\nexecuted. When the items are exhausted (which is immediately when the\nsequence is empty or an iterator raises a "StopIteration" exception),\nthe suite in the "else" clause, if present, is executed, and the loop\nterminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite. A "continue" statement\nexecuted in the first suite skips the rest of the suite and continues\nwith the next item, or with the "else" clause if there is no next\nitem.\n\nThe for-loop makes assignments to the variables(s) in the target list.\nThis overwrites all previous assignments to those variables including\nthose made in the suite of the for-loop:\n\n for i in range(10):\n print(i)\n i = 5 # this will not affect the for-loop\n # because i will be overwritten with the next\n # index in the range\n\nNames in the target list are not deleted when the loop is finished,\nbut if the sequence is empty, they will not have been assigned to at\nall by the loop. Hint: the built-in function "range()" returns an\niterator of integers suitable to emulate the effect of Pascal\'s "for i\n:= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, 2]".\n\nNote: There is a subtlety when the sequence is being modified by the\n loop (this can only occur for mutable sequences, i.e. lists). An\n internal counter is used to keep track of which item is used next,\n and this is incremented on each iteration. When this counter has\n reached the length of the sequence the loop terminates. This means\n that if the suite deletes the current (or a previous) item from the\n sequence, the next item will be skipped (since it gets the index of\n the current item which has already been treated). Likewise, if the\n suite inserts an item in the sequence before the current item, the\n current item will be treated again the next time through the loop.\n This can lead to nasty bugs that can be avoided by making a\n temporary copy using a slice of the whole sequence, e.g.,\n\n for x in a[:]:\n if x < 0: a.remove(x)\n', - 'formatstrings': u'\nFormat String Syntax\n********************\n\nThe "str.format()" method and the "Formatter" class share the same\nsyntax for format strings (although in the case of "Formatter",\nsubclasses can define their own format string syntax).\n\nFormat strings contain "replacement fields" surrounded by curly braces\n"{}". Anything that is not contained in braces is considered literal\ntext, which is copied unchanged to the output. If you need to include\na brace character in the literal text, it can be escaped by doubling:\n"{{" and "}}".\n\nThe grammar for a replacement field is as follows:\n\n replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"\n field_name ::= arg_name ("." attribute_name | "[" element_index "]")*\n arg_name ::= [identifier | integer]\n attribute_name ::= identifier\n element_index ::= integer | index_string\n index_string ::= +\n conversion ::= "r" | "s" | "a"\n format_spec ::= \n\nIn less formal terms, the replacement field can start with a\n*field_name* that specifies the object whose value is to be formatted\nand inserted into the output instead of the replacement field. The\n*field_name* is optionally followed by a *conversion* field, which is\npreceded by an exclamation point "\'!\'", and a *format_spec*, which is\npreceded by a colon "\':\'". These specify a non-default format for the\nreplacement value.\n\nSee also the *Format Specification Mini-Language* section.\n\nThe *field_name* itself begins with an *arg_name* that is either a\nnumber or a keyword. If it\'s a number, it refers to a positional\nargument, and if it\'s a keyword, it refers to a named keyword\nargument. If the numerical arg_names in a format string are 0, 1, 2,\n... in sequence, they can all be omitted (not just some) and the\nnumbers 0, 1, 2, ... will be automatically inserted in that order.\nBecause *arg_name* is not quote-delimited, it is not possible to\nspecify arbitrary dictionary keys (e.g., the strings "\'10\'" or\n"\':-]\'") within a format string. The *arg_name* can be followed by any\nnumber of index or attribute expressions. An expression of the form\n"\'.name\'" selects the named attribute using "getattr()", while an\nexpression of the form "\'[index]\'" does an index lookup using\n"__getitem__()".\n\nChanged in version 3.1: The positional argument specifiers can be\nomitted, so "\'{} {}\'" is equivalent to "\'{0} {1}\'".\n\nSome simple format string examples:\n\n "First, thou shalt count to {0}" # References first positional argument\n "Bring me a {}" # Implicitly references the first positional argument\n "From {} to {}" # Same as "From {0} to {1}"\n "My quest is {name}" # References keyword argument \'name\'\n "Weight in tons {0.weight}" # \'weight\' attribute of first positional arg\n "Units destroyed: {players[0]}" # First element of keyword argument \'players\'.\n\nThe *conversion* field causes a type coercion before formatting.\nNormally, the job of formatting a value is done by the "__format__()"\nmethod of the value itself. However, in some cases it is desirable to\nforce a type to be formatted as a string, overriding its own\ndefinition of formatting. By converting the value to a string before\ncalling "__format__()", the normal formatting logic is bypassed.\n\nThree conversion flags are currently supported: "\'!s\'" which calls\n"str()" on the value, "\'!r\'" which calls "repr()" and "\'!a\'" which\ncalls "ascii()".\n\nSome examples:\n\n "Harold\'s a clever {0!s}" # Calls str() on the argument first\n "Bring out the holy {name!r}" # Calls repr() on the argument first\n "More {!a}" # Calls ascii() on the argument first\n\nThe *format_spec* field contains a specification of how the value\nshould be presented, including such details as field width, alignment,\npadding, decimal precision and so on. Each value type can define its\nown "formatting mini-language" or interpretation of the *format_spec*.\n\nMost built-in types support a common formatting mini-language, which\nis described in the next section.\n\nA *format_spec* field can also include nested replacement fields\nwithin it. These nested replacement fields may contain a field name,\nconversion flag and format specification, but deeper nesting is not\nallowed. The replacement fields within the format_spec are\nsubstituted before the *format_spec* string is interpreted. This\nallows the formatting of a value to be dynamically specified.\n\nSee the *Format examples* section for some examples.\n\n\nFormat Specification Mini-Language\n==================================\n\n"Format specifications" are used within replacement fields contained\nwithin a format string to define how individual values are presented\n(see *Format String Syntax*). They can also be passed directly to the\nbuilt-in "format()" function. Each formattable type may define how\nthe format specification is to be interpreted.\n\nMost built-in types implement the following options for format\nspecifications, although some of the formatting options are only\nsupported by the numeric types.\n\nA general convention is that an empty format string ("""") produces\nthe same result as if you had called "str()" on the value. A non-empty\nformat string typically modifies the result.\n\nThe general form of a *standard format specifier* is:\n\n format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]\n fill ::= \n align ::= "<" | ">" | "=" | "^"\n sign ::= "+" | "-" | " "\n width ::= integer\n precision ::= integer\n type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"\n\nIf a valid *align* value is specified, it can be preceded by a *fill*\ncharacter that can be any character and defaults to a space if\nomitted. It is not possible to use a literal curly brace (""{"" or\n""}"") as the *fill* character when using the "str.format()" method.\nHowever, it is possible to insert a curly brace with a nested\nreplacement field. This limitation doesn\'t affect the "format()"\nfunction.\n\nThe meaning of the various alignment options is as follows:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | "\'<\'" | Forces the field to be left-aligned within the available |\n | | space (this is the default for most objects). |\n +-----------+------------------------------------------------------------+\n | "\'>\'" | Forces the field to be right-aligned within the available |\n | | space (this is the default for numbers). |\n +-----------+------------------------------------------------------------+\n | "\'=\'" | Forces the padding to be placed after the sign (if any) |\n | | but before the digits. This is used for printing fields |\n | | in the form \'+000000120\'. This alignment option is only |\n | | valid for numeric types. It becomes the default when \'0\' |\n | | immediately precedes the field width. |\n +-----------+------------------------------------------------------------+\n | "\'^\'" | Forces the field to be centered within the available |\n | | space. |\n +-----------+------------------------------------------------------------+\n\nNote that unless a minimum field width is defined, the field width\nwill always be the same size as the data to fill it, so that the\nalignment option has no meaning in this case.\n\nThe *sign* option is only valid for number types, and can be one of\nthe following:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | "\'+\'" | indicates that a sign should be used for both positive as |\n | | well as negative numbers. |\n +-----------+------------------------------------------------------------+\n | "\'-\'" | indicates that a sign should be used only for negative |\n | | numbers (this is the default behavior). |\n +-----------+------------------------------------------------------------+\n | space | indicates that a leading space should be used on positive |\n | | numbers, and a minus sign on negative numbers. |\n +-----------+------------------------------------------------------------+\n\nThe "\'#\'" option causes the "alternate form" to be used for the\nconversion. The alternate form is defined differently for different\ntypes. This option is only valid for integer, float, complex and\nDecimal types. For integers, when binary, octal, or hexadecimal output\nis used, this option adds the prefix respective "\'0b\'", "\'0o\'", or\n"\'0x\'" to the output value. For floats, complex and Decimal the\nalternate form causes the result of the conversion to always contain a\ndecimal-point character, even if no digits follow it. Normally, a\ndecimal-point character appears in the result of these conversions\nonly if a digit follows it. In addition, for "\'g\'" and "\'G\'"\nconversions, trailing zeros are not removed from the result.\n\nThe "\',\'" option signals the use of a comma for a thousands separator.\nFor a locale aware separator, use the "\'n\'" integer presentation type\ninstead.\n\nChanged in version 3.1: Added the "\',\'" option (see also **PEP 378**).\n\n*width* is a decimal integer defining the minimum field width. If not\nspecified, then the field width will be determined by the content.\n\nWhen no explicit alignment is given, preceding the *width* field by a\nzero ("\'0\'") character enables sign-aware zero-padding for numeric\ntypes. This is equivalent to a *fill* character of "\'0\'" with an\n*alignment* type of "\'=\'".\n\nThe *precision* is a decimal number indicating how many digits should\nbe displayed after the decimal point for a floating point value\nformatted with "\'f\'" and "\'F\'", or before and after the decimal point\nfor a floating point value formatted with "\'g\'" or "\'G\'". For non-\nnumber types the field indicates the maximum field size - in other\nwords, how many characters will be used from the field content. The\n*precision* is not allowed for integer values.\n\nFinally, the *type* determines how the data should be presented.\n\nThe available string presentation types are:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | "\'s\'" | String format. This is the default type for strings and |\n | | may be omitted. |\n +-----------+------------------------------------------------------------+\n | None | The same as "\'s\'". |\n +-----------+------------------------------------------------------------+\n\nThe available integer presentation types are:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | "\'b\'" | Binary format. Outputs the number in base 2. |\n +-----------+------------------------------------------------------------+\n | "\'c\'" | Character. Converts the integer to the corresponding |\n | | unicode character before printing. |\n +-----------+------------------------------------------------------------+\n | "\'d\'" | Decimal Integer. Outputs the number in base 10. |\n +-----------+------------------------------------------------------------+\n | "\'o\'" | Octal format. Outputs the number in base 8. |\n +-----------+------------------------------------------------------------+\n | "\'x\'" | Hex format. Outputs the number in base 16, using lower- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | "\'X\'" | Hex format. Outputs the number in base 16, using upper- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | "\'n\'" | Number. This is the same as "\'d\'", except that it uses the |\n | | current locale setting to insert the appropriate number |\n | | separator characters. |\n +-----------+------------------------------------------------------------+\n | None | The same as "\'d\'". |\n +-----------+------------------------------------------------------------+\n\nIn addition to the above presentation types, integers can be formatted\nwith the floating point presentation types listed below (except "\'n\'"\nand None). When doing so, "float()" is used to convert the integer to\na floating point number before formatting.\n\nThe available presentation types for floating point and decimal values\nare:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | "\'e\'" | Exponent notation. Prints the number in scientific |\n | | notation using the letter \'e\' to indicate the exponent. |\n | | The default precision is "6". |\n +-----------+------------------------------------------------------------+\n | "\'E\'" | Exponent notation. Same as "\'e\'" except it uses an upper |\n | | case \'E\' as the separator character. |\n +-----------+------------------------------------------------------------+\n | "\'f\'" | Fixed point. Displays the number as a fixed-point number. |\n | | The default precision is "6". |\n +-----------+------------------------------------------------------------+\n | "\'F\'" | Fixed point. Same as "\'f\'", but converts "nan" to "NAN" |\n | | and "inf" to "INF". |\n +-----------+------------------------------------------------------------+\n | "\'g\'" | General format. For a given precision "p >= 1", this |\n | | rounds the number to "p" significant digits and then |\n | | formats the result in either fixed-point format or in |\n | | scientific notation, depending on its magnitude. The |\n | | precise rules are as follows: suppose that the result |\n | | formatted with presentation type "\'e\'" and precision "p-1" |\n | | would have exponent "exp". Then if "-4 <= exp < p", the |\n | | number is formatted with presentation type "\'f\'" and |\n | | precision "p-1-exp". Otherwise, the number is formatted |\n | | with presentation type "\'e\'" and precision "p-1". In both |\n | | cases insignificant trailing zeros are removed from the |\n | | significand, and the decimal point is also removed if |\n | | there are no remaining digits following it. Positive and |\n | | negative infinity, positive and negative zero, and nans, |\n | | are formatted as "inf", "-inf", "0", "-0" and "nan" |\n | | respectively, regardless of the precision. A precision of |\n | | "0" is treated as equivalent to a precision of "1". The |\n | | default precision is "6". |\n +-----------+------------------------------------------------------------+\n | "\'G\'" | General format. Same as "\'g\'" except switches to "\'E\'" if |\n | | the number gets too large. The representations of infinity |\n | | and NaN are uppercased, too. |\n +-----------+------------------------------------------------------------+\n | "\'n\'" | Number. This is the same as "\'g\'", except that it uses the |\n | | current locale setting to insert the appropriate number |\n | | separator characters. |\n +-----------+------------------------------------------------------------+\n | "\'%\'" | Percentage. Multiplies the number by 100 and displays in |\n | | fixed ("\'f\'") format, followed by a percent sign. |\n +-----------+------------------------------------------------------------+\n | None | Similar to "\'g\'", except that fixed-point notation, when |\n | | used, has at least one digit past the decimal point. The |\n | | default precision is as high as needed to represent the |\n | | particular value. The overall effect is to match the |\n | | output of "str()" as altered by the other format |\n | | modifiers. |\n +-----------+------------------------------------------------------------+\n\n\nFormat examples\n===============\n\nThis section contains examples of the "str.format()" syntax and\ncomparison with the old "%"-formatting.\n\nIn most of the cases the syntax is similar to the old "%"-formatting,\nwith the addition of the "{}" and with ":" used instead of "%". For\nexample, "\'%03.2f\'" can be translated to "\'{:03.2f}\'".\n\nThe new format syntax also supports new and different options, shown\nin the follow examples.\n\nAccessing arguments by position:\n\n >>> \'{0}, {1}, {2}\'.format(\'a\', \'b\', \'c\')\n \'a, b, c\'\n >>> \'{}, {}, {}\'.format(\'a\', \'b\', \'c\') # 3.1+ only\n \'a, b, c\'\n >>> \'{2}, {1}, {0}\'.format(\'a\', \'b\', \'c\')\n \'c, b, a\'\n >>> \'{2}, {1}, {0}\'.format(*\'abc\') # unpacking argument sequence\n \'c, b, a\'\n >>> \'{0}{1}{0}\'.format(\'abra\', \'cad\') # arguments\' indices can be repeated\n \'abracadabra\'\n\nAccessing arguments by name:\n\n >>> \'Coordinates: {latitude}, {longitude}\'.format(latitude=\'37.24N\', longitude=\'-115.81W\')\n \'Coordinates: 37.24N, -115.81W\'\n >>> coord = {\'latitude\': \'37.24N\', \'longitude\': \'-115.81W\'}\n >>> \'Coordinates: {latitude}, {longitude}\'.format(**coord)\n \'Coordinates: 37.24N, -115.81W\'\n\nAccessing arguments\' attributes:\n\n >>> c = 3-5j\n >>> (\'The complex number {0} is formed from the real part {0.real} \'\n ... \'and the imaginary part {0.imag}.\').format(c)\n \'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.\'\n >>> class Point:\n ... def __init__(self, x, y):\n ... self.x, self.y = x, y\n ... def __str__(self):\n ... return \'Point({self.x}, {self.y})\'.format(self=self)\n ...\n >>> str(Point(4, 2))\n \'Point(4, 2)\'\n\nAccessing arguments\' items:\n\n >>> coord = (3, 5)\n >>> \'X: {0[0]}; Y: {0[1]}\'.format(coord)\n \'X: 3; Y: 5\'\n\nReplacing "%s" and "%r":\n\n >>> "repr() shows quotes: {!r}; str() doesn\'t: {!s}".format(\'test1\', \'test2\')\n "repr() shows quotes: \'test1\'; str() doesn\'t: test2"\n\nAligning the text and specifying a width:\n\n >>> \'{:<30}\'.format(\'left aligned\')\n \'left aligned \'\n >>> \'{:>30}\'.format(\'right aligned\')\n \' right aligned\'\n >>> \'{:^30}\'.format(\'centered\')\n \' centered \'\n >>> \'{:*^30}\'.format(\'centered\') # use \'*\' as a fill char\n \'***********centered***********\'\n\nReplacing "%+f", "%-f", and "% f" and specifying a sign:\n\n >>> \'{:+f}; {:+f}\'.format(3.14, -3.14) # show it always\n \'+3.140000; -3.140000\'\n >>> \'{: f}; {: f}\'.format(3.14, -3.14) # show a space for positive numbers\n \' 3.140000; -3.140000\'\n >>> \'{:-f}; {:-f}\'.format(3.14, -3.14) # show only the minus -- same as \'{:f}; {:f}\'\n \'3.140000; -3.140000\'\n\nReplacing "%x" and "%o" and converting the value to different bases:\n\n >>> # format also supports binary numbers\n >>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)\n \'int: 42; hex: 2a; oct: 52; bin: 101010\'\n >>> # with 0x, 0o, or 0b as prefix:\n >>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)\n \'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010\'\n\nUsing the comma as a thousands separator:\n\n >>> \'{:,}\'.format(1234567890)\n \'1,234,567,890\'\n\nExpressing a percentage:\n\n >>> points = 19\n >>> total = 22\n >>> \'Correct answers: {:.2%}\'.format(points/total)\n \'Correct answers: 86.36%\'\n\nUsing type-specific formatting:\n\n >>> import datetime\n >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)\n >>> \'{:%Y-%m-%d %H:%M:%S}\'.format(d)\n \'2010-07-04 12:15:58\'\n\nNesting arguments and more complex examples:\n\n >>> for align, text in zip(\'<^>\', [\'left\', \'center\', \'right\']):\n ... \'{0:{fill}{align}16}\'.format(text, fill=align, align=align)\n ...\n \'left<<<<<<<<<<<<\'\n \'^^^^^center^^^^^\'\n \'>>>>>>>>>>>right\'\n >>>\n >>> octets = [192, 168, 0, 1]\n >>> \'{:02X}{:02X}{:02X}{:02X}\'.format(*octets)\n \'C0A80001\'\n >>> int(_, 16)\n 3232235521\n >>>\n >>> width = 5\n >>> for num in range(5,12): #doctest: +NORMALIZE_WHITESPACE\n ... for base in \'dXob\':\n ... print(\'{0:{width}{base}}\'.format(num, base=base, width=width), end=\' \')\n ... print()\n ...\n 5 5 5 101\n 6 6 6 110\n 7 7 7 111\n 8 8 10 1000\n 9 9 11 1001\n 10 A 12 1010\n 11 B 13 1011\n', - 'function': u'\nFunction definitions\n********************\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n funcdef ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n decorators ::= decorator+\n decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n dotted_name ::= identifier ("." identifier)*\n parameter_list ::= (defparameter ",")*\n | "*" [parameter] ("," defparameter)* ["," "**" parameter]\n | "**" parameter\n | defparameter [","] )\n parameter ::= identifier [":" expression]\n defparameter ::= parameter ["=" expression]\n funcname ::= identifier\n\nA function definition is an executable statement. Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function). This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition. The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object. Multiple decorators are applied in\nnested fashion. For example, the following code\n\n @f1(arg)\n @f2\n def func(): pass\n\nis equivalent to\n\n def func(): pass\n func = f1(arg)(f2(func))\n\nWhen one or more *parameters* have the form *parameter* "="\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted. If a parameter has a default value, all following\nparameters up until the ""*"" must also have a default value --- this\nis a syntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated from left to right when the\nfunction definition is executed.** This means that the expression is\nevaluated once, when the function is defined, and that the same "pre-\ncomputed" value is used for each call. This is especially important\nto understand when a default parameter is a mutable object, such as a\nlist or a dictionary: if the function modifies the object (e.g. by\nappending an item to a list), the default value is in effect modified.\nThis is generally not what was intended. A way around this is to use\n"None" as the default, and explicitly test for it in the body of the\nfunction, e.g.:\n\n def whats_on_the_telly(penguin=None):\n if penguin is None:\n penguin = []\n penguin.append("property of the zoo")\n return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values. If the form\n""*identifier"" is present, it is initialized to a tuple receiving any\nexcess positional parameters, defaulting to the empty tuple. If the\nform ""**identifier"" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary. Parameters after ""*"" or ""*identifier"" are\nkeyword-only parameters and may only be passed used keyword arguments.\n\nParameters may have annotations of the form "": expression"" following\nthe parameter name. Any parameter may have an annotation even those\nof the form "*identifier" or "**identifier". Functions may have\n"return" annotation of the form ""-> expression"" after the parameter\nlist. These annotations can be any valid Python expression and are\nevaluated when the function definition is executed. Annotations may\nbe evaluated in a different order than they appear in the source code.\nThe presence of annotations does not change the semantics of a\nfunction. The annotation values are available as values of a\ndictionary keyed by the parameters\' names in the "__annotations__"\nattribute of the function object.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions. This uses lambda\nexpressions, described in section *Lambdas*. Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a ""def"" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression. The ""def"" form is actually more powerful since it\nallows the execution of multiple statements and annotations.\n\n**Programmer\'s note:** Functions are first-class objects. A ""def""\nstatement executed inside a function definition defines a local\nfunction that can be returned or passed around. Free variables used\nin the nested function can access the local variables of the function\ncontaining the def. See section *Naming and binding* for details.\n\nSee also: **PEP 3107** - Function Annotations\n\n The original specification for function annotations.\n', + 'formatstrings': u'\nFormat String Syntax\n********************\n\nThe "str.format()" method and the "Formatter" class share the same\nsyntax for format strings (although in the case of "Formatter",\nsubclasses can define their own format string syntax).\n\nFormat strings contain "replacement fields" surrounded by curly braces\n"{}". Anything that is not contained in braces is considered literal\ntext, which is copied unchanged to the output. If you need to include\na brace character in the literal text, it can be escaped by doubling:\n"{{" and "}}".\n\nThe grammar for a replacement field is as follows:\n\n replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"\n field_name ::= arg_name ("." attribute_name | "[" element_index "]")*\n arg_name ::= [identifier | integer]\n attribute_name ::= identifier\n element_index ::= integer | index_string\n index_string ::= +\n conversion ::= "r" | "s" | "a"\n format_spec ::= \n\nIn less formal terms, the replacement field can start with a\n*field_name* that specifies the object whose value is to be formatted\nand inserted into the output instead of the replacement field. The\n*field_name* is optionally followed by a *conversion* field, which is\npreceded by an exclamation point "\'!\'", and a *format_spec*, which is\npreceded by a colon "\':\'". These specify a non-default format for the\nreplacement value.\n\nSee also the *Format Specification Mini-Language* section.\n\nThe *field_name* itself begins with an *arg_name* that is either a\nnumber or a keyword. If it\'s a number, it refers to a positional\nargument, and if it\'s a keyword, it refers to a named keyword\nargument. If the numerical arg_names in a format string are 0, 1, 2,\n... in sequence, they can all be omitted (not just some) and the\nnumbers 0, 1, 2, ... will be automatically inserted in that order.\nBecause *arg_name* is not quote-delimited, it is not possible to\nspecify arbitrary dictionary keys (e.g., the strings "\'10\'" or\n"\':-]\'") within a format string. The *arg_name* can be followed by any\nnumber of index or attribute expressions. An expression of the form\n"\'.name\'" selects the named attribute using "getattr()", while an\nexpression of the form "\'[index]\'" does an index lookup using\n"__getitem__()".\n\nChanged in version 3.1: The positional argument specifiers can be\nomitted, so "\'{} {}\'" is equivalent to "\'{0} {1}\'".\n\nSome simple format string examples:\n\n "First, thou shalt count to {0}" # References first positional argument\n "Bring me a {}" # Implicitly references the first positional argument\n "From {} to {}" # Same as "From {0} to {1}"\n "My quest is {name}" # References keyword argument \'name\'\n "Weight in tons {0.weight}" # \'weight\' attribute of first positional arg\n "Units destroyed: {players[0]}" # First element of keyword argument \'players\'.\n\nThe *conversion* field causes a type coercion before formatting.\nNormally, the job of formatting a value is done by the "__format__()"\nmethod of the value itself. However, in some cases it is desirable to\nforce a type to be formatted as a string, overriding its own\ndefinition of formatting. By converting the value to a string before\ncalling "__format__()", the normal formatting logic is bypassed.\n\nThree conversion flags are currently supported: "\'!s\'" which calls\n"str()" on the value, "\'!r\'" which calls "repr()" and "\'!a\'" which\ncalls "ascii()".\n\nSome examples:\n\n "Harold\'s a clever {0!s}" # Calls str() on the argument first\n "Bring out the holy {name!r}" # Calls repr() on the argument first\n "More {!a}" # Calls ascii() on the argument first\n\nThe *format_spec* field contains a specification of how the value\nshould be presented, including such details as field width, alignment,\npadding, decimal precision and so on. Each value type can define its\nown "formatting mini-language" or interpretation of the *format_spec*.\n\nMost built-in types support a common formatting mini-language, which\nis described in the next section.\n\nA *format_spec* field can also include nested replacement fields\nwithin it. These nested replacement fields may contain a field name,\nconversion flag and format specification, but deeper nesting is not\nallowed. The replacement fields within the format_spec are\nsubstituted before the *format_spec* string is interpreted. This\nallows the formatting of a value to be dynamically specified.\n\nSee the *Format examples* section for some examples.\n\n\nFormat Specification Mini-Language\n==================================\n\n"Format specifications" are used within replacement fields contained\nwithin a format string to define how individual values are presented\n(see *Format String Syntax*). They can also be passed directly to the\nbuilt-in "format()" function. Each formattable type may define how\nthe format specification is to be interpreted.\n\nMost built-in types implement the following options for format\nspecifications, although some of the formatting options are only\nsupported by the numeric types.\n\nA general convention is that an empty format string ("""") produces\nthe same result as if you had called "str()" on the value. A non-empty\nformat string typically modifies the result.\n\nThe general form of a *standard format specifier* is:\n\n format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]\n fill ::= \n align ::= "<" | ">" | "=" | "^"\n sign ::= "+" | "-" | " "\n width ::= integer\n precision ::= integer\n type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"\n\nIf a valid *align* value is specified, it can be preceded by a *fill*\ncharacter that can be any character and defaults to a space if\nomitted. It is not possible to use a literal curly brace (""{"" or\n""}"") as the *fill* character when using the "str.format()" method.\nHowever, it is possible to insert a curly brace with a nested\nreplacement field. This limitation doesn\'t affect the "format()"\nfunction.\n\nThe meaning of the various alignment options is as follows:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | "\'<\'" | Forces the field to be left-aligned within the available |\n | | space (this is the default for most objects). |\n +-----------+------------------------------------------------------------+\n | "\'>\'" | Forces the field to be right-aligned within the available |\n | | space (this is the default for numbers). |\n +-----------+------------------------------------------------------------+\n | "\'=\'" | Forces the padding to be placed after the sign (if any) |\n | | but before the digits. This is used for printing fields |\n | | in the form \'+000000120\'. This alignment option is only |\n | | valid for numeric types. It becomes the default when \'0\' |\n | | immediately precedes the field width. |\n +-----------+------------------------------------------------------------+\n | "\'^\'" | Forces the field to be centered within the available |\n | | space. |\n +-----------+------------------------------------------------------------+\n\nNote that unless a minimum field width is defined, the field width\nwill always be the same size as the data to fill it, so that the\nalignment option has no meaning in this case.\n\nThe *sign* option is only valid for number types, and can be one of\nthe following:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | "\'+\'" | indicates that a sign should be used for both positive as |\n | | well as negative numbers. |\n +-----------+------------------------------------------------------------+\n | "\'-\'" | indicates that a sign should be used only for negative |\n | | numbers (this is the default behavior). |\n +-----------+------------------------------------------------------------+\n | space | indicates that a leading space should be used on positive |\n | | numbers, and a minus sign on negative numbers. |\n +-----------+------------------------------------------------------------+\n\nThe "\'#\'" option causes the "alternate form" to be used for the\nconversion. The alternate form is defined differently for different\ntypes. This option is only valid for integer, float, complex and\nDecimal types. For integers, when binary, octal, or hexadecimal output\nis used, this option adds the prefix respective "\'0b\'", "\'0o\'", or\n"\'0x\'" to the output value. For floats, complex and Decimal the\nalternate form causes the result of the conversion to always contain a\ndecimal-point character, even if no digits follow it. Normally, a\ndecimal-point character appears in the result of these conversions\nonly if a digit follows it. In addition, for "\'g\'" and "\'G\'"\nconversions, trailing zeros are not removed from the result.\n\nThe "\',\'" option signals the use of a comma for a thousands separator.\nFor a locale aware separator, use the "\'n\'" integer presentation type\ninstead.\n\nChanged in version 3.1: Added the "\',\'" option (see also **PEP 378**).\n\n*width* is a decimal integer defining the minimum field width. If not\nspecified, then the field width will be determined by the content.\n\nWhen no explicit alignment is given, preceding the *width* field by a\nzero ("\'0\'") character enables sign-aware zero-padding for numeric\ntypes. This is equivalent to a *fill* character of "\'0\'" with an\n*alignment* type of "\'=\'".\n\nThe *precision* is a decimal number indicating how many digits should\nbe displayed after the decimal point for a floating point value\nformatted with "\'f\'" and "\'F\'", or before and after the decimal point\nfor a floating point value formatted with "\'g\'" or "\'G\'". For non-\nnumber types the field indicates the maximum field size - in other\nwords, how many characters will be used from the field content. The\n*precision* is not allowed for integer values.\n\nFinally, the *type* determines how the data should be presented.\n\nThe available string presentation types are:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | "\'s\'" | String format. This is the default type for strings and |\n | | may be omitted. |\n +-----------+------------------------------------------------------------+\n | None | The same as "\'s\'". |\n +-----------+------------------------------------------------------------+\n\nThe available integer presentation types are:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | "\'b\'" | Binary format. Outputs the number in base 2. |\n +-----------+------------------------------------------------------------+\n | "\'c\'" | Character. Converts the integer to the corresponding |\n | | unicode character before printing. |\n +-----------+------------------------------------------------------------+\n | "\'d\'" | Decimal Integer. Outputs the number in base 10. |\n +-----------+------------------------------------------------------------+\n | "\'o\'" | Octal format. Outputs the number in base 8. |\n +-----------+------------------------------------------------------------+\n | "\'x\'" | Hex format. Outputs the number in base 16, using lower- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | "\'X\'" | Hex format. Outputs the number in base 16, using upper- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | "\'n\'" | Number. This is the same as "\'d\'", except that it uses the |\n | | current locale setting to insert the appropriate number |\n | | separator characters. |\n +-----------+------------------------------------------------------------+\n | None | The same as "\'d\'". |\n +-----------+------------------------------------------------------------+\n\nIn addition to the above presentation types, integers can be formatted\nwith the floating point presentation types listed below (except "\'n\'"\nand "None"). When doing so, "float()" is used to convert the integer\nto a floating point number before formatting.\n\nThe available presentation types for floating point and decimal values\nare:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | "\'e\'" | Exponent notation. Prints the number in scientific |\n | | notation using the letter \'e\' to indicate the exponent. |\n | | The default precision is "6". |\n +-----------+------------------------------------------------------------+\n | "\'E\'" | Exponent notation. Same as "\'e\'" except it uses an upper |\n | | case \'E\' as the separator character. |\n +-----------+------------------------------------------------------------+\n | "\'f\'" | Fixed point. Displays the number as a fixed-point number. |\n | | The default precision is "6". |\n +-----------+------------------------------------------------------------+\n | "\'F\'" | Fixed point. Same as "\'f\'", but converts "nan" to "NAN" |\n | | and "inf" to "INF". |\n +-----------+------------------------------------------------------------+\n | "\'g\'" | General format. For a given precision "p >= 1", this |\n | | rounds the number to "p" significant digits and then |\n | | formats the result in either fixed-point format or in |\n | | scientific notation, depending on its magnitude. The |\n | | precise rules are as follows: suppose that the result |\n | | formatted with presentation type "\'e\'" and precision "p-1" |\n | | would have exponent "exp". Then if "-4 <= exp < p", the |\n | | number is formatted with presentation type "\'f\'" and |\n | | precision "p-1-exp". Otherwise, the number is formatted |\n | | with presentation type "\'e\'" and precision "p-1". In both |\n | | cases insignificant trailing zeros are removed from the |\n | | significand, and the decimal point is also removed if |\n | | there are no remaining digits following it. Positive and |\n | | negative infinity, positive and negative zero, and nans, |\n | | are formatted as "inf", "-inf", "0", "-0" and "nan" |\n | | respectively, regardless of the precision. A precision of |\n | | "0" is treated as equivalent to a precision of "1". The |\n | | default precision is "6". |\n +-----------+------------------------------------------------------------+\n | "\'G\'" | General format. Same as "\'g\'" except switches to "\'E\'" if |\n | | the number gets too large. The representations of infinity |\n | | and NaN are uppercased, too. |\n +-----------+------------------------------------------------------------+\n | "\'n\'" | Number. This is the same as "\'g\'", except that it uses the |\n | | current locale setting to insert the appropriate number |\n | | separator characters. |\n +-----------+------------------------------------------------------------+\n | "\'%\'" | Percentage. Multiplies the number by 100 and displays in |\n | | fixed ("\'f\'") format, followed by a percent sign. |\n +-----------+------------------------------------------------------------+\n | None | Similar to "\'g\'", except that fixed-point notation, when |\n | | used, has at least one digit past the decimal point. The |\n | | default precision is as high as needed to represent the |\n | | particular value. The overall effect is to match the |\n | | output of "str()" as altered by the other format |\n | | modifiers. |\n +-----------+------------------------------------------------------------+\n\n\nFormat examples\n===============\n\nThis section contains examples of the "str.format()" syntax and\ncomparison with the old "%"-formatting.\n\nIn most of the cases the syntax is similar to the old "%"-formatting,\nwith the addition of the "{}" and with ":" used instead of "%". For\nexample, "\'%03.2f\'" can be translated to "\'{:03.2f}\'".\n\nThe new format syntax also supports new and different options, shown\nin the follow examples.\n\nAccessing arguments by position:\n\n >>> \'{0}, {1}, {2}\'.format(\'a\', \'b\', \'c\')\n \'a, b, c\'\n >>> \'{}, {}, {}\'.format(\'a\', \'b\', \'c\') # 3.1+ only\n \'a, b, c\'\n >>> \'{2}, {1}, {0}\'.format(\'a\', \'b\', \'c\')\n \'c, b, a\'\n >>> \'{2}, {1}, {0}\'.format(*\'abc\') # unpacking argument sequence\n \'c, b, a\'\n >>> \'{0}{1}{0}\'.format(\'abra\', \'cad\') # arguments\' indices can be repeated\n \'abracadabra\'\n\nAccessing arguments by name:\n\n >>> \'Coordinates: {latitude}, {longitude}\'.format(latitude=\'37.24N\', longitude=\'-115.81W\')\n \'Coordinates: 37.24N, -115.81W\'\n >>> coord = {\'latitude\': \'37.24N\', \'longitude\': \'-115.81W\'}\n >>> \'Coordinates: {latitude}, {longitude}\'.format(**coord)\n \'Coordinates: 37.24N, -115.81W\'\n\nAccessing arguments\' attributes:\n\n >>> c = 3-5j\n >>> (\'The complex number {0} is formed from the real part {0.real} \'\n ... \'and the imaginary part {0.imag}.\').format(c)\n \'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.\'\n >>> class Point:\n ... def __init__(self, x, y):\n ... self.x, self.y = x, y\n ... def __str__(self):\n ... return \'Point({self.x}, {self.y})\'.format(self=self)\n ...\n >>> str(Point(4, 2))\n \'Point(4, 2)\'\n\nAccessing arguments\' items:\n\n >>> coord = (3, 5)\n >>> \'X: {0[0]}; Y: {0[1]}\'.format(coord)\n \'X: 3; Y: 5\'\n\nReplacing "%s" and "%r":\n\n >>> "repr() shows quotes: {!r}; str() doesn\'t: {!s}".format(\'test1\', \'test2\')\n "repr() shows quotes: \'test1\'; str() doesn\'t: test2"\n\nAligning the text and specifying a width:\n\n >>> \'{:<30}\'.format(\'left aligned\')\n \'left aligned \'\n >>> \'{:>30}\'.format(\'right aligned\')\n \' right aligned\'\n >>> \'{:^30}\'.format(\'centered\')\n \' centered \'\n >>> \'{:*^30}\'.format(\'centered\') # use \'*\' as a fill char\n \'***********centered***********\'\n\nReplacing "%+f", "%-f", and "% f" and specifying a sign:\n\n >>> \'{:+f}; {:+f}\'.format(3.14, -3.14) # show it always\n \'+3.140000; -3.140000\'\n >>> \'{: f}; {: f}\'.format(3.14, -3.14) # show a space for positive numbers\n \' 3.140000; -3.140000\'\n >>> \'{:-f}; {:-f}\'.format(3.14, -3.14) # show only the minus -- same as \'{:f}; {:f}\'\n \'3.140000; -3.140000\'\n\nReplacing "%x" and "%o" and converting the value to different bases:\n\n >>> # format also supports binary numbers\n >>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)\n \'int: 42; hex: 2a; oct: 52; bin: 101010\'\n >>> # with 0x, 0o, or 0b as prefix:\n >>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)\n \'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010\'\n\nUsing the comma as a thousands separator:\n\n >>> \'{:,}\'.format(1234567890)\n \'1,234,567,890\'\n\nExpressing a percentage:\n\n >>> points = 19\n >>> total = 22\n >>> \'Correct answers: {:.2%}\'.format(points/total)\n \'Correct answers: 86.36%\'\n\nUsing type-specific formatting:\n\n >>> import datetime\n >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)\n >>> \'{:%Y-%m-%d %H:%M:%S}\'.format(d)\n \'2010-07-04 12:15:58\'\n\nNesting arguments and more complex examples:\n\n >>> for align, text in zip(\'<^>\', [\'left\', \'center\', \'right\']):\n ... \'{0:{fill}{align}16}\'.format(text, fill=align, align=align)\n ...\n \'left<<<<<<<<<<<<\'\n \'^^^^^center^^^^^\'\n \'>>>>>>>>>>>right\'\n >>>\n >>> octets = [192, 168, 0, 1]\n >>> \'{:02X}{:02X}{:02X}{:02X}\'.format(*octets)\n \'C0A80001\'\n >>> int(_, 16)\n 3232235521\n >>>\n >>> width = 5\n >>> for num in range(5,12): #doctest: +NORMALIZE_WHITESPACE\n ... for base in \'dXob\':\n ... print(\'{0:{width}{base}}\'.format(num, base=base, width=width), end=\' \')\n ... print()\n ...\n 5 5 5 101\n 6 6 6 110\n 7 7 7 111\n 8 8 10 1000\n 9 9 11 1001\n 10 A 12 1010\n 11 B 13 1011\n', + 'function': u'\nFunction definitions\n********************\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n funcdef ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n decorators ::= decorator+\n decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n dotted_name ::= identifier ("." identifier)*\n parameter_list ::= (defparameter ",")*\n | "*" [parameter] ("," defparameter)* ["," "**" parameter]\n | "**" parameter\n | defparameter [","] )\n parameter ::= identifier [":" expression]\n defparameter ::= parameter ["=" expression]\n funcname ::= identifier\n\nA function definition is an executable statement. Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function). This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition. The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object. Multiple decorators are applied in\nnested fashion. For example, the following code\n\n @f1(arg)\n @f2\n def func(): pass\n\nis roughly equivalent to\n\n def func(): pass\n func = f1(arg)(f2(func))\n\nexcept that the original function is not temporarily bound to the name\n"func".\n\nWhen one or more *parameters* have the form *parameter* "="\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted. If a parameter has a default value, all following\nparameters up until the ""*"" must also have a default value --- this\nis a syntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated from left to right when the\nfunction definition is executed.** This means that the expression is\nevaluated once, when the function is defined, and that the same "pre-\ncomputed" value is used for each call. This is especially important\nto understand when a default parameter is a mutable object, such as a\nlist or a dictionary: if the function modifies the object (e.g. by\nappending an item to a list), the default value is in effect modified.\nThis is generally not what was intended. A way around this is to use\n"None" as the default, and explicitly test for it in the body of the\nfunction, e.g.:\n\n def whats_on_the_telly(penguin=None):\n if penguin is None:\n penguin = []\n penguin.append("property of the zoo")\n return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values. If the form\n""*identifier"" is present, it is initialized to a tuple receiving any\nexcess positional parameters, defaulting to the empty tuple. If the\nform ""**identifier"" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary. Parameters after ""*"" or ""*identifier"" are\nkeyword-only parameters and may only be passed used keyword arguments.\n\nParameters may have annotations of the form "": expression"" following\nthe parameter name. Any parameter may have an annotation even those\nof the form "*identifier" or "**identifier". Functions may have\n"return" annotation of the form ""-> expression"" after the parameter\nlist. These annotations can be any valid Python expression and are\nevaluated when the function definition is executed. Annotations may\nbe evaluated in a different order than they appear in the source code.\nThe presence of annotations does not change the semantics of a\nfunction. The annotation values are available as values of a\ndictionary keyed by the parameters\' names in the "__annotations__"\nattribute of the function object.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions. This uses lambda\nexpressions, described in section *Lambdas*. Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a ""def"" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression. The ""def"" form is actually more powerful since it\nallows the execution of multiple statements and annotations.\n\n**Programmer\'s note:** Functions are first-class objects. A ""def""\nstatement executed inside a function definition defines a local\nfunction that can be returned or passed around. Free variables used\nin the nested function can access the local variables of the function\ncontaining the def. See section *Naming and binding* for details.\n\nSee also: **PEP 3107** - Function Annotations\n\n The original specification for function annotations.\n', 'global': u'\nThe "global" statement\n**********************\n\n global_stmt ::= "global" identifier ("," identifier)*\n\nThe "global" statement is a declaration which holds for the entire\ncurrent code block. It means that the listed identifiers are to be\ninterpreted as globals. It would be impossible to assign to a global\nvariable without "global", although free variables may refer to\nglobals without being declared global.\n\nNames listed in a "global" statement must not be used in the same code\nblock textually preceding that "global" statement.\n\nNames listed in a "global" statement must not be defined as formal\nparameters or in a "for" loop control target, "class" definition,\nfunction definition, or "import" statement.\n\n**CPython implementation detail:** The current implementation does not\nenforce the two restrictions, but programs should not abuse this\nfreedom, as future implementations may enforce them or silently change\nthe meaning of the program.\n\n**Programmer\'s note:** the "global" is a directive to the parser. It\napplies only to code parsed at the same time as the "global"\nstatement. In particular, a "global" statement contained in a string\nor code object supplied to the built-in "exec()" function does not\naffect the code block *containing* the function call, and code\ncontained in such a string is unaffected by "global" statements in the\ncode containing the function call. The same applies to the "eval()"\nand "compile()" functions.\n', 'id-classes': u'\nReserved classes of identifiers\n*******************************\n\nCertain classes of identifiers (besides keywords) have special\nmeanings. These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n"_*"\n Not imported by "from module import *". The special identifier "_"\n is used in the interactive interpreter to store the result of the\n last evaluation; it is stored in the "builtins" module. When not\n in interactive mode, "_" has no special meaning and is not defined.\n See section *The import statement*.\n\n Note: The name "_" is often used in conjunction with\n internationalization; refer to the documentation for the\n "gettext" module for more information on this convention.\n\n"__*__"\n System-defined names. These names are defined by the interpreter\n and its implementation (including the standard library). Current\n system names are discussed in the *Special method names* section\n and elsewhere. More will likely be defined in future versions of\n Python. *Any* use of "__*__" names, in any context, that does not\n follow explicitly documented use, is subject to breakage without\n warning.\n\n"__*"\n Class-private names. Names in this category, when used within the\n context of a class definition, are re-written to use a mangled form\n to help avoid name clashes between "private" attributes of base and\n derived classes. See section *Identifiers (Names)*.\n', 'identifiers': u'\nIdentifiers and keywords\n************************\n\nIdentifiers (also referred to as *names*) are described by the\nfollowing lexical definitions.\n\nThe syntax of identifiers in Python is based on the Unicode standard\nannex UAX-31, with elaboration and changes as defined below; see also\n**PEP 3131** for further details.\n\nWithin the ASCII range (U+0001..U+007F), the valid characters for\nidentifiers are the same as in Python 2.x: the uppercase and lowercase\nletters "A" through "Z", the underscore "_" and, except for the first\ncharacter, the digits "0" through "9".\n\nPython 3.0 introduces additional characters from outside the ASCII\nrange (see **PEP 3131**). For these characters, the classification\nuses the version of the Unicode Character Database as included in the\n"unicodedata" module.\n\nIdentifiers are unlimited in length. Case is significant.\n\n identifier ::= xid_start xid_continue*\n id_start ::= \n id_continue ::= \n xid_start ::= \n xid_continue ::= \n\nThe Unicode category codes mentioned above stand for:\n\n* *Lu* - uppercase letters\n\n* *Ll* - lowercase letters\n\n* *Lt* - titlecase letters\n\n* *Lm* - modifier letters\n\n* *Lo* - other letters\n\n* *Nl* - letter numbers\n\n* *Mn* - nonspacing marks\n\n* *Mc* - spacing combining marks\n\n* *Nd* - decimal numbers\n\n* *Pc* - connector punctuations\n\n* *Other_ID_Start* - explicit list of characters in PropList.txt to\n support backwards compatibility\n\n* *Other_ID_Continue* - likewise\n\nAll identifiers are converted into the normal form NFKC while parsing;\ncomparison of identifiers is based on NFKC.\n\nA non-normative HTML file listing all valid identifier characters for\nUnicode 4.1 can be found at https://www.dcl.hpi.uni-\npotsdam.de/home/loewis/table-3131.html.\n\n\nKeywords\n========\n\nThe following identifiers are used as reserved words, or *keywords* of\nthe language, and cannot be used as ordinary identifiers. They must\nbe spelled exactly as written here:\n\n False class finally is return\n None continue for lambda try\n True def from nonlocal while\n and del global not with\n as elif if or yield\n assert else import pass\n break except in raise\n\n\nReserved classes of identifiers\n===============================\n\nCertain classes of identifiers (besides keywords) have special\nmeanings. These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n"_*"\n Not imported by "from module import *". The special identifier "_"\n is used in the interactive interpreter to store the result of the\n last evaluation; it is stored in the "builtins" module. When not\n in interactive mode, "_" has no special meaning and is not defined.\n See section *The import statement*.\n\n Note: The name "_" is often used in conjunction with\n internationalization; refer to the documentation for the\n "gettext" module for more information on this convention.\n\n"__*__"\n System-defined names. These names are defined by the interpreter\n and its implementation (including the standard library). Current\n system names are discussed in the *Special method names* section\n and elsewhere. More will likely be defined in future versions of\n Python. *Any* use of "__*__" names, in any context, that does not\n follow explicitly documented use, is subject to breakage without\n warning.\n\n"__*"\n Class-private names. Names in this category, when used within the\n context of a class definition, are re-written to use a mangled form\n to help avoid name clashes between "private" attributes of base and\n derived classes. See section *Identifiers (Names)*.\n', @@ -44,7 +44,7 @@ topics = {'assert': u'\nThe "assert" statement\n**********************\n\nAssert 'import': u'\nThe "import" statement\n**********************\n\n import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )*\n | "from" relative_module "import" identifier ["as" name]\n ( "," identifier ["as" name] )*\n | "from" relative_module "import" "(" identifier ["as" name]\n ( "," identifier ["as" name] )* [","] ")"\n | "from" module "import" "*"\n module ::= (identifier ".")* identifier\n relative_module ::= "."* module | "."+\n name ::= identifier\n\nThe basic import statement (no "from" clause) is executed in two\nsteps:\n\n1. find a module, loading and initializing it if necessary\n\n2. define a name or names in the local namespace for the scope\n where the "import" statement occurs.\n\nWhen the statement contains multiple clauses (separated by commas) the\ntwo steps are carried out separately for each clause, just as though\nthe clauses had been separated out into individual import statements.\n\nThe details of the first step, finding and loading modules are\ndescribed in greater detail in the section on the *import system*,\nwhich also describes the various types of packages and modules that\ncan be imported, as well as all the hooks that can be used to\ncustomize the import system. Note that failures in this step may\nindicate either that the module could not be located, *or* that an\nerror occurred while initializing the module, which includes execution\nof the module\'s code.\n\nIf the requested module is retrieved successfully, it will be made\navailable in the local namespace in one of three ways:\n\n* If the module name is followed by "as", then the name following\n "as" is bound directly to the imported module.\n\n* If no other name is specified, and the module being imported is a\n top level module, the module\'s name is bound in the local namespace\n as a reference to the imported module\n\n* If the module being imported is *not* a top level module, then the\n name of the top level package that contains the module is bound in\n the local namespace as a reference to the top level package. The\n imported module must be accessed using its full qualified name\n rather than directly\n\nThe "from" form uses a slightly more complex process:\n\n1. find the module specified in the "from" clause, loading and\n initializing it if necessary;\n\n2. for each of the identifiers specified in the "import" clauses:\n\n 1. check if the imported module has an attribute by that name\n\n 2. if not, attempt to import a submodule with that name and then\n check the imported module again for that attribute\n\n 3. if the attribute is not found, "ImportError" is raised.\n\n 4. otherwise, a reference to that value is stored in the local\n namespace, using the name in the "as" clause if it is present,\n otherwise using the attribute name\n\nExamples:\n\n import foo # foo imported and bound locally\n import foo.bar.baz # foo.bar.baz imported, foo bound locally\n import foo.bar.baz as fbb # foo.bar.baz imported and bound as fbb\n from foo.bar import baz # foo.bar.baz imported and bound as baz\n from foo import attr # foo imported and foo.attr bound as attr\n\nIf the list of identifiers is replaced by a star ("\'*\'"), all public\nnames defined in the module are bound in the local namespace for the\nscope where the "import" statement occurs.\n\nThe *public names* defined by a module are determined by checking the\nmodule\'s namespace for a variable named "__all__"; if defined, it must\nbe a sequence of strings which are names defined or imported by that\nmodule. The names given in "__all__" are all considered public and\nare required to exist. If "__all__" is not defined, the set of public\nnames includes all names found in the module\'s namespace which do not\nbegin with an underscore character ("\'_\'"). "__all__" should contain\nthe entire public API. It is intended to avoid accidentally exporting\nitems that are not part of the API (such as library modules which were\nimported and used within the module).\n\nThe wild card form of import --- "from module import *" --- is only\nallowed at the module level. Attempting to use it in class or\nfunction definitions will raise a "SyntaxError".\n\nWhen specifying what module to import you do not have to specify the\nabsolute name of the module. When a module or package is contained\nwithin another package it is possible to make a relative import within\nthe same top package without having to mention the package name. By\nusing leading dots in the specified module or package after "from" you\ncan specify how high to traverse up the current package hierarchy\nwithout specifying exact names. One leading dot means the current\npackage where the module making the import exists. Two dots means up\none package level. Three dots is up two levels, etc. So if you execute\n"from . import mod" from a module in the "pkg" package then you will\nend up importing "pkg.mod". If you execute "from ..subpkg2 import mod"\nfrom within "pkg.subpkg1" you will import "pkg.subpkg2.mod". The\nspecification for relative imports is contained within **PEP 328**.\n\n"importlib.import_module()" is provided to support applications that\ndetermine dynamically the modules to be loaded.\n\n\nFuture statements\n=================\n\nA *future statement* is a directive to the compiler that a particular\nmodule should be compiled using syntax or semantics that will be\navailable in a specified future release of Python where the feature\nbecomes standard.\n\nThe future statement is intended to ease migration to future versions\nof Python that introduce incompatible changes to the language. It\nallows use of the new features on a per-module basis before the\nrelease in which the feature becomes standard.\n\n future_statement ::= "from" "__future__" "import" feature ["as" name]\n ("," feature ["as" name])*\n | "from" "__future__" "import" "(" feature ["as" name]\n ("," feature ["as" name])* [","] ")"\n feature ::= identifier\n name ::= identifier\n\nA future statement must appear near the top of the module. The only\nlines that can appear before a future statement are:\n\n* the module docstring (if any),\n\n* comments,\n\n* blank lines, and\n\n* other future statements.\n\nThe features recognized by Python 3.0 are "absolute_import",\n"division", "generators", "unicode_literals", "print_function",\n"nested_scopes" and "with_statement". They are all redundant because\nthey are always enabled, and only kept for backwards compatibility.\n\nA future statement is recognized and treated specially at compile\ntime: Changes to the semantics of core constructs are often\nimplemented by generating different code. It may even be the case\nthat a new feature introduces new incompatible syntax (such as a new\nreserved word), in which case the compiler may need to parse the\nmodule differently. Such decisions cannot be pushed off until\nruntime.\n\nFor any given release, the compiler knows which feature names have\nbeen defined, and raises a compile-time error if a future statement\ncontains a feature not known to it.\n\nThe direct runtime semantics are the same as for any import statement:\nthere is a standard module "__future__", described later, and it will\nbe imported in the usual way at the time the future statement is\nexecuted.\n\nThe interesting runtime semantics depend on the specific feature\nenabled by the future statement.\n\nNote that there is nothing special about the statement:\n\n import __future__ [as name]\n\nThat is not a future statement; it\'s an ordinary import statement with\nno special semantics or syntax restrictions.\n\nCode compiled by calls to the built-in functions "exec()" and\n"compile()" that occur in a module "M" containing a future statement\nwill, by default, use the new syntax or semantics associated with the\nfuture statement. This can be controlled by optional arguments to\n"compile()" --- see the documentation of that function for details.\n\nA future statement typed at an interactive interpreter prompt will\ntake effect for the rest of the interpreter session. If an\ninterpreter is started with the *-i* option, is passed a script name\nto execute, and the script includes a future statement, it will be in\neffect in the interactive session started after the script is\nexecuted.\n\nSee also: **PEP 236** - Back to the __future__\n\n The original proposal for the __future__ mechanism.\n', 'in': u'\nMembership test operations\n**************************\n\nThe operators "in" and "not in" test for membership. "x in s"\nevaluates to true if *x* is a member of *s*, and false otherwise. "x\nnot in s" returns the negation of "x in s". All built-in sequences\nand set types support this as well as dictionary, for which "in" tests\nwhether the dictionary has a given key. For container types such as\nlist, tuple, set, frozenset, dict, or collections.deque, the\nexpression "x in y" is equivalent to "any(x is e or x == e for e in\ny)".\n\nFor the string and bytes types, "x in y" is true if and only if *x* is\na substring of *y*. An equivalent test is "y.find(x) != -1". Empty\nstrings are always considered to be a substring of any other string,\nso """ in "abc"" will return "True".\n\nFor user-defined classes which define the "__contains__()" method, "x\nin y" is true if and only if "y.__contains__(x)" is true.\n\nFor user-defined classes which do not define "__contains__()" but do\ndefine "__iter__()", "x in y" is true if some value "z" with "x == z"\nis produced while iterating over "y". If an exception is raised\nduring the iteration, it is as if "in" raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n"__getitem__()", "x in y" is true if and only if there is a non-\nnegative integer index *i* such that "x == y[i]", and all lower\ninteger indices do not raise "IndexError" exception. (If any other\nexception is raised, it is as if "in" raised that exception).\n\nThe operator "not in" is defined to have the inverse true value of\n"in".\n', 'integers': u'\nInteger literals\n****************\n\nInteger literals are described by the following lexical definitions:\n\n integer ::= decimalinteger | octinteger | hexinteger | bininteger\n decimalinteger ::= nonzerodigit digit* | "0"+\n nonzerodigit ::= "1"..."9"\n digit ::= "0"..."9"\n octinteger ::= "0" ("o" | "O") octdigit+\n hexinteger ::= "0" ("x" | "X") hexdigit+\n bininteger ::= "0" ("b" | "B") bindigit+\n octdigit ::= "0"..."7"\n hexdigit ::= digit | "a"..."f" | "A"..."F"\n bindigit ::= "0" | "1"\n\nThere is no limit for the length of integer literals apart from what\ncan be stored in available memory.\n\nNote that leading zeros in a non-zero decimal number are not allowed.\nThis is for disambiguation with C-style octal literals, which Python\nused before version 3.0.\n\nSome examples of integer literals:\n\n 7 2147483647 0o177 0b100110111\n 3 79228162514264337593543950336 0o377 0xdeadbeef\n', - 'lambda': u'\nLambdas\n*******\n\n lambda_expr ::= "lambda" [parameter_list]: expression\n lambda_expr_nocond ::= "lambda" [parameter_list]: expression_nocond\n\nLambda expressions (sometimes called lambda forms) are used to create\nanonymous functions. The expression "lambda arguments: expression"\nyields a function object. The unnamed object behaves like a function\nobject defined with\n\n def (arguments):\n return expression\n\nSee section *Function definitions* for the syntax of parameter lists.\nNote that functions created with lambda expressions cannot contain\nstatements or annotations.\n', + 'lambda': u'\nLambdas\n*******\n\n lambda_expr ::= "lambda" [parameter_list]: expression\n lambda_expr_nocond ::= "lambda" [parameter_list]: expression_nocond\n\nLambda expressions (sometimes called lambda forms) are used to create\nanonymous functions. The expression "lambda arguments: expression"\nyields a function object. The unnamed object behaves like a function\nobject defined with:\n\n def (arguments):\n return expression\n\nSee section *Function definitions* for the syntax of parameter lists.\nNote that functions created with lambda expressions cannot contain\nstatements or annotations.\n', 'lists': u'\nList displays\n*************\n\nA list display is a possibly empty series of expressions enclosed in\nsquare brackets:\n\n list_display ::= "[" [starred_list | comprehension] "]"\n\nA list display yields a new list object, the contents being specified\nby either a list of expressions or a comprehension. When a comma-\nseparated list of expressions is supplied, its elements are evaluated\nfrom left to right and placed into the list object in that order.\nWhen a comprehension is supplied, the list is constructed from the\nelements resulting from the comprehension.\n', 'naming': u'\nNaming and binding\n******************\n\n\nBinding of names\n================\n\n*Names* refer to objects. Names are introduced by name binding\noperations.\n\nThe following constructs bind names: formal parameters to functions,\n"import" statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, "for" loop header, or after\n"as" in a "with" statement or "except" clause. The "import" statement\nof the form "from ... import *" binds all names defined in the\nimported module, except those beginning with an underscore. This form\nmay only be used at the module level.\n\nA target occurring in a "del" statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name).\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name is bound in a block, it is a local variable of that block,\nunless declared as "nonlocal" or "global". If a name is bound at the\nmodule level, it is a global variable. (The variables of the module\ncode block are local and global.) If a variable is used in a code\nblock but not defined there, it is a *free variable*.\n\nEach occurrence of a name in the program text refers to the *binding*\nof that name established by the following name resolution rules.\n\n\nResolution of names\n===================\n\nA *scope* defines the visibility of a name within a block. If a local\nvariable is defined in a block, its scope includes that block. If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name.\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope. The set of all such scopes visible to a code block\nis called the block\'s *environment*.\n\nWhen a name is not found at all, a "NameError" exception is raised. If\nthe current scope is a function scope, and the name refers to a local\nvariable that has not yet been bound to a value at the point where the\nname is used, an "UnboundLocalError" exception is raised.\n"UnboundLocalError" is a subclass of "NameError".\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block. This can lead to errors when a name is used within a\nblock before it is bound. This rule is subtle. Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block. The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the "global" statement occurs within a block, all uses of the name\nspecified in the statement refer to the binding of that name in the\ntop-level namespace. Names are resolved in the top-level namespace by\nsearching the global namespace, i.e. the namespace of the module\ncontaining the code block, and the builtins namespace, the namespace\nof the module "builtins". The global namespace is searched first. If\nthe name is not found there, the builtins namespace is searched. The\n"global" statement must precede all uses of the name.\n\nThe "global" statement has the same scope as a name binding operation\nin the same block. If the nearest enclosing scope for a free variable\ncontains a global statement, the free variable is treated as a global.\n\nThe "nonlocal" statement causes corresponding names to refer to\npreviously bound variables in the nearest enclosing function scope.\n"SyntaxError" is raised at compile time if the given name does not\nexist in any enclosing function scope.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported. The main module for a script is always called\n"__main__".\n\nClass definition blocks and arguments to "exec()" and "eval()" are\nspecial in the context of name resolution. A class definition is an\nexecutable statement that may use and define names. These references\nfollow the normal rules for name resolution with an exception that\nunbound local variables are looked up in the global namespace. The\nnamespace of the class definition becomes the attribute dictionary of\nthe class. The scope of names defined in a class block is limited to\nthe class block; it does not extend to the code blocks of methods --\nthis includes comprehensions and generator expressions since they are\nimplemented using a function scope. This means that the following\nwill fail:\n\n class A:\n a = 42\n b = list(a + i for i in range(10))\n\n\nBuiltins and restricted execution\n=================================\n\nThe builtins namespace associated with the execution of a code block\nis actually found by looking up the name "__builtins__" in its global\nnamespace; this should be a dictionary or a module (in the latter case\nthe module\'s dictionary is used). By default, when in the "__main__"\nmodule, "__builtins__" is the built-in module "builtins"; when in any\nother module, "__builtins__" is an alias for the dictionary of the\n"builtins" module itself. "__builtins__" can be set to a user-created\ndictionary to create a weak form of restricted execution.\n\n**CPython implementation detail:** Users should not touch\n"__builtins__"; it is strictly an implementation detail. Users\nwanting to override values in the builtins namespace should "import"\nthe "builtins" module and modify its attributes appropriately.\n\n\nInteraction with dynamic features\n=================================\n\nName resolution of free variables occurs at runtime, not at compile\ntime. This means that the following code will print 42:\n\n i = 10\n def f():\n print(i)\n i = 42\n f()\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nThe "eval()" and "exec()" functions do not have access to the full\nenvironment for resolving names. Names may be resolved in the local\nand global namespaces of the caller. Free variables are not resolved\nin the nearest enclosing namespace, but in the global namespace. [1]\nThe "exec()" and "eval()" functions have optional arguments to\noverride the global and local namespace. If only one namespace is\nspecified, it is used for both.\n', 'nonlocal': u'\nThe "nonlocal" statement\n************************\n\n nonlocal_stmt ::= "nonlocal" identifier ("," identifier)*\n\nThe "nonlocal" statement causes the listed identifiers to refer to\npreviously bound variables in the nearest enclosing scope excluding\nglobals. This is important because the default behavior for binding is\nto search the local namespace first. The statement allows\nencapsulated code to rebind variables outside of the local scope\nbesides the global (module) scope.\n\nNames listed in a "nonlocal" statement, unlike those listed in a\n"global" statement, must refer to pre-existing bindings in an\nenclosing scope (the scope in which a new binding should be created\ncannot be determined unambiguously).\n\nNames listed in a "nonlocal" statement must not collide with pre-\nexisting bindings in the local scope.\n\nSee also: **PEP 3104** - Access to Names in Outer Scopes\n\n The specification for the "nonlocal" statement.\n', @@ -59,19 +59,19 @@ topics = {'assert': u'\nThe "assert" statement\n**********************\n\nAssert 'sequence-types': u'\nEmulating container types\n*************************\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well. The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which "0 <= k < N" where\n*N* is the length of the sequence, or slice objects, which define a\nrange of items. It is also recommended that mappings provide the\nmethods "keys()", "values()", "items()", "get()", "clear()",\n"setdefault()", "pop()", "popitem()", "copy()", and "update()"\nbehaving similar to those for Python\'s standard dictionary objects.\nThe "collections" module provides a "MutableMapping" abstract base\nclass to help create those methods from a base set of "__getitem__()",\n"__setitem__()", "__delitem__()", and "keys()". Mutable sequences\nshould provide methods "append()", "count()", "index()", "extend()",\n"insert()", "pop()", "remove()", "reverse()" and "sort()", like Python\nstandard list objects. Finally, sequence types should implement\naddition (meaning concatenation) and multiplication (meaning\nrepetition) by defining the methods "__add__()", "__radd__()",\n"__iadd__()", "__mul__()", "__rmul__()" and "__imul__()" described\nbelow; they should not define other numerical operators. It is\nrecommended that both mappings and sequences implement the\n"__contains__()" method to allow efficient use of the "in" operator;\nfor mappings, "in" should search the mapping\'s keys; for sequences, it\nshould search through the values. It is further recommended that both\nmappings and sequences implement the "__iter__()" method to allow\nefficient iteration through the container; for mappings, "__iter__()"\nshould be the same as "keys()"; for sequences, it should iterate\nthrough the values.\n\nobject.__len__(self)\n\n Called to implement the built-in function "len()". Should return\n the length of the object, an integer ">=" 0. Also, an object that\n doesn\'t define a "__bool__()" method and whose "__len__()" method\n returns zero is considered to be false in a Boolean context.\n\nobject.__length_hint__(self)\n\n Called to implement "operator.length_hint()". Should return an\n estimated length for the object (which may be greater or less than\n the actual length). The length must be an integer ">=" 0. This\n method is purely an optimization and is never required for\n correctness.\n\n New in version 3.4.\n\nNote: Slicing is done exclusively with the following three methods.\n A call like\n\n a[1:2] = b\n\n is translated to\n\n a[slice(1, 2, None)] = b\n\n and so forth. Missing slice items are always filled in with "None".\n\nobject.__getitem__(self, key)\n\n Called to implement evaluation of "self[key]". For sequence types,\n the accepted keys should be integers and slice objects. Note that\n the special interpretation of negative indexes (if the class wishes\n to emulate a sequence type) is up to the "__getitem__()" method. If\n *key* is of an inappropriate type, "TypeError" may be raised; if of\n a value outside the set of indexes for the sequence (after any\n special interpretation of negative values), "IndexError" should be\n raised. For mapping types, if *key* is missing (not in the\n container), "KeyError" should be raised.\n\n Note: "for" loops expect that an "IndexError" will be raised for\n illegal indexes to allow proper detection of the end of the\n sequence.\n\nobject.__missing__(self, key)\n\n Called by "dict"."__getitem__()" to implement "self[key]" for dict\n subclasses when key is not in the dictionary.\n\nobject.__setitem__(self, key, value)\n\n Called to implement assignment to "self[key]". Same note as for\n "__getitem__()". This should only be implemented for mappings if\n the objects support changes to the values for keys, or if new keys\n can be added, or for sequences if elements can be replaced. The\n same exceptions should be raised for improper *key* values as for\n the "__getitem__()" method.\n\nobject.__delitem__(self, key)\n\n Called to implement deletion of "self[key]". Same note as for\n "__getitem__()". This should only be implemented for mappings if\n the objects support removal of keys, or for sequences if elements\n can be removed from the sequence. The same exceptions should be\n raised for improper *key* values as for the "__getitem__()" method.\n\nobject.__iter__(self)\n\n This method is called when an iterator is required for a container.\n This method should return a new iterator object that can iterate\n over all the objects in the container. For mappings, it should\n iterate over the keys of the container.\n\n Iterator objects also need to implement this method; they are\n required to return themselves. For more information on iterator\n objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n Called (if present) by the "reversed()" built-in to implement\n reverse iteration. It should return a new iterator object that\n iterates over all the objects in the container in reverse order.\n\n If the "__reversed__()" method is not provided, the "reversed()"\n built-in will fall back to using the sequence protocol ("__len__()"\n and "__getitem__()"). Objects that support the sequence protocol\n should only provide "__reversed__()" if they can provide an\n implementation that is more efficient than the one provided by\n "reversed()".\n\nThe membership test operators ("in" and "not in") are normally\nimplemented as an iteration through a sequence. However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n Called to implement membership test operators. Should return true\n if *item* is in *self*, false otherwise. For mapping objects, this\n should consider the keys of the mapping rather than the values or\n the key-item pairs.\n\n For objects that don\'t define "__contains__()", the membership test\n first tries iteration via "__iter__()", then the old sequence\n iteration protocol via "__getitem__()", see *this section in the\n language reference*.\n', 'shifting': u'\nShifting operations\n*******************\n\nThe shifting operations have lower priority than the arithmetic\noperations:\n\n shift_expr ::= a_expr | shift_expr ( "<<" | ">>" ) a_expr\n\nThese operators accept integers as arguments. They shift the first\nargument to the left or right by the number of bits given by the\nsecond argument.\n\nA right shift by *n* bits is defined as floor division by "pow(2,n)".\nA left shift by *n* bits is defined as multiplication with "pow(2,n)".\n\nNote: In the current implementation, the right-hand operand is\n required to be at most "sys.maxsize". If the right-hand operand is\n larger than "sys.maxsize" an "OverflowError" exception is raised.\n', 'slicings': u'\nSlicings\n********\n\nA slicing selects a range of items in a sequence object (e.g., a\nstring, tuple or list). Slicings may be used as expressions or as\ntargets in assignment or "del" statements. The syntax for a slicing:\n\n slicing ::= primary "[" slice_list "]"\n slice_list ::= slice_item ("," slice_item)* [","]\n slice_item ::= expression | proper_slice\n proper_slice ::= [lower_bound] ":" [upper_bound] [ ":" [stride] ]\n lower_bound ::= expression\n upper_bound ::= expression\n stride ::= expression\n\nThere is ambiguity in the formal syntax here: anything that looks like\nan expression list also looks like a slice list, so any subscription\ncan be interpreted as a slicing. Rather than further complicating the\nsyntax, this is disambiguated by defining that in this case the\ninterpretation as a subscription takes priority over the\ninterpretation as a slicing (this is the case if the slice list\ncontains no proper slice).\n\nThe semantics for a slicing are as follows. The primary is indexed\n(using the same "__getitem__()" method as normal subscription) with a\nkey that is constructed from the slice list, as follows. If the slice\nlist contains at least one comma, the key is a tuple containing the\nconversion of the slice items; otherwise, the conversion of the lone\nslice item is the key. The conversion of a slice item that is an\nexpression is that expression. The conversion of a proper slice is a\nslice object (see section *The standard type hierarchy*) whose\n"start", "stop" and "step" attributes are the values of the\nexpressions given as lower bound, upper bound and stride,\nrespectively, substituting "None" for missing expressions.\n', - 'specialattrs': u'\nSpecial Attributes\n******************\n\nThe implementation adds a few special read-only attributes to several\nobject types, where they are relevant. Some of these are not reported\nby the "dir()" built-in function.\n\nobject.__dict__\n\n A dictionary or other mapping object used to store an object\'s\n (writable) attributes.\n\ninstance.__class__\n\n The class to which a class instance belongs.\n\nclass.__bases__\n\n The tuple of base classes of a class object.\n\nclass.__name__\n\n The name of the class or type.\n\nclass.__qualname__\n\n The *qualified name* of the class or type.\n\n New in version 3.3.\n\nclass.__mro__\n\n This attribute is a tuple of classes that are considered when\n looking for base classes during method resolution.\n\nclass.mro()\n\n This method can be overridden by a metaclass to customize the\n method resolution order for its instances. It is called at class\n instantiation, and its result is stored in "__mro__".\n\nclass.__subclasses__()\n\n Each class keeps a list of weak references to its immediate\n subclasses. This method returns a list of all those references\n still alive. Example:\n\n >>> int.__subclasses__()\n []\n\n-[ Footnotes ]-\n\n[1] Additional information on these special methods may be found\n in the Python Reference Manual (*Basic customization*).\n\n[2] As a consequence, the list "[1, 2]" is considered equal to\n "[1.0, 2.0]", and similarly for tuples.\n\n[3] They must have since the parser can\'t tell the type of the\n operands.\n\n[4] Cased characters are those with general category property\n being one of "Lu" (Letter, uppercase), "Ll" (Letter, lowercase),\n or "Lt" (Letter, titlecase).\n\n[5] To format only a tuple you should therefore provide a\n singleton tuple whose only element is the tuple to be formatted.\n', - 'specialnames': u'\nSpecial method names\n********************\n\nA class can implement certain operations that are invoked by special\nsyntax (such as arithmetic operations or subscripting and slicing) by\ndefining methods with special names. This is Python\'s approach to\n*operator overloading*, allowing classes to define their own behavior\nwith respect to language operators. For instance, if a class defines\na method named "__getitem__()", and "x" is an instance of this class,\nthen "x[i]" is roughly equivalent to "type(x).__getitem__(x, i)".\nExcept where mentioned, attempts to execute an operation raise an\nexception when no appropriate method is defined (typically\n"AttributeError" or "TypeError").\n\nWhen implementing a class that emulates any built-in type, it is\nimportant that the emulation only be implemented to the degree that it\nmakes sense for the object being modelled. For example, some\nsequences may work well with retrieval of individual elements, but\nextracting a slice may not make sense. (One example of this is the\n"NodeList" interface in the W3C\'s Document Object Model.)\n\n\nBasic customization\n===================\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. "__new__()" is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of "__new__()" should be the new object instance (usually an\n instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s "__new__()" method using\n "super(currentclass, cls).__new__(cls[, ...])" with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If "__new__()" returns an instance of *cls*, then the new\n instance\'s "__init__()" method will be invoked like\n "__init__(self[, ...])", where *self* is the new instance and the\n remaining arguments are the same as were passed to "__new__()".\n\n If "__new__()" does not return an instance of *cls*, then the new\n instance\'s "__init__()" method will not be invoked.\n\n "__new__()" is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called after the instance has been created (by "__new__()"), but\n before it is returned to the caller. The arguments are those\n passed to the class constructor expression. If a base class has an\n "__init__()" method, the derived class\'s "__init__()" method, if\n any, must explicitly call it to ensure proper initialization of the\n base class part of the instance; for example:\n "BaseClass.__init__(self, [args...])".\n\n Because "__new__()" and "__init__()" work together in constructing\n objects ("__new__()" to create it, and "__init__()" to customise\n it), no non-"None" value may be returned by "__init__()"; doing so\n will cause a "TypeError" to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a "__del__()" method, the\n derived class\'s "__del__()" method, if any, must explicitly call it\n to ensure proper deletion of the base class part of the instance.\n Note that it is possible (though not recommended!) for the\n "__del__()" method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n "__del__()" methods are called for objects that still exist when\n the interpreter exits.\n\n Note: "del x" doesn\'t directly call "x.__del__()" --- the former\n decrements the reference count for "x" by one, and the latter is\n only called when "x"\'s reference count reaches zero. Some common\n situations that may prevent the reference count of an object from\n going to zero include: circular references between objects (e.g.,\n a doubly-linked list or a tree data structure with parent and\n child pointers); a reference to the object on the stack frame of\n a function that caught an exception (the traceback stored in\n "sys.exc_info()[2]" keeps the stack frame alive); or a reference\n to the object on the stack frame that raised an unhandled\n exception in interactive mode (the traceback stored in\n "sys.last_traceback" keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the second can be resolved by freeing the reference to the\n traceback object when it is no longer useful, and the third can\n be resolved by storing "None" in "sys.last_traceback". Circular\n references which are garbage are detected and cleaned up when the\n cyclic garbage collector is enabled (it\'s on by default). Refer\n to the documentation for the "gc" module for more information\n about this topic.\n\n Warning: Due to the precarious circumstances under which\n "__del__()" methods are invoked, exceptions that occur during\n their execution are ignored, and a warning is printed to\n "sys.stderr" instead. Also, when "__del__()" is invoked in\n response to a module being deleted (e.g., when execution of the\n program is done), other globals referenced by the "__del__()"\n method may already have been deleted or in the process of being\n torn down (e.g. the import machinery shutting down). For this\n reason, "__del__()" methods should do the absolute minimum needed\n to maintain external invariants. Starting with version 1.5,\n Python guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the "__del__()" method is called.\n\nobject.__repr__(self)\n\n Called by the "repr()" built-in function to compute the "official"\n string representation of an object. If at all possible, this\n should look like a valid Python expression that could be used to\n recreate an object with the same value (given an appropriate\n environment). If this is not possible, a string of the form\n "<...some useful description...>" should be returned. The return\n value must be a string object. If a class defines "__repr__()" but\n not "__str__()", then "__repr__()" is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by "str(object)" and the built-in functions "format()" and\n "print()" to compute the "informal" or nicely printable string\n representation of an object. The return value must be a *string*\n object.\n\n This method differs from "object.__repr__()" in that there is no\n expectation that "__str__()" return a valid Python expression: a\n more convenient or concise representation can be used.\n\n The default implementation defined by the built-in type "object"\n calls "object.__repr__()".\n\nobject.__bytes__(self)\n\n Called by "bytes()" to compute a byte-string representation of an\n object. This should return a "bytes" object.\n\nobject.__format__(self, format_spec)\n\n Called by the "format()" built-in function (and by extension, the\n "str.format()" method of class "str") to produce a "formatted"\n string representation of an object. The "format_spec" argument is a\n string that contains a description of the formatting options\n desired. The interpretation of the "format_spec" argument is up to\n the type implementing "__format__()", however most classes will\n either delegate formatting to one of the built-in types, or use a\n similar formatting option syntax.\n\n See *Format Specification Mini-Language* for a description of the\n standard formatting syntax.\n\n The return value must be a string object.\n\n Changed in version 3.4: The __format__ method of "object" itself\n raises a "TypeError" if passed any non-empty string.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n These are the so-called "rich comparison" methods. The\n correspondence between operator symbols and method names is as\n follows: "xy" calls\n "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n\n A rich comparison method may return the singleton "NotImplemented"\n if it does not implement the operation for a given pair of\n arguments. By convention, "False" and "True" are returned for a\n successful comparison. However, these methods can return any value,\n so if the comparison operator is used in a Boolean context (e.g.,\n in the condition of an "if" statement), Python will call "bool()"\n on the value to determine if the result is true or false.\n\n By default, "__ne__()" delegates to "__eq__()" and inverts the\n result unless it is "NotImplemented". There are no other implied\n relationships among the comparison operators, for example, the\n truth of "(x.__hash__".\n\n If a class that does not override "__eq__()" wishes to suppress\n hash support, it should include "__hash__ = None" in the class\n definition. A class which defines its own "__hash__()" that\n explicitly raises a "TypeError" would be incorrectly identified as\n hashable by an "isinstance(obj, collections.Hashable)" call.\n\n Note: By default, the "__hash__()" values of str, bytes and\n datetime objects are "salted" with an unpredictable random value.\n Although they remain constant within an individual Python\n process, they are not predictable between repeated invocations of\n Python.This is intended to provide protection against a denial-\n of-service caused by carefully-chosen inputs that exploit the\n worst case performance of a dict insertion, O(n^2) complexity.\n See http://www.ocert.org/advisories/ocert-2011-003.html for\n details.Changing hash values affects the iteration order of\n dicts, sets and other mappings. Python has never made guarantees\n about this ordering (and it typically varies between 32-bit and\n 64-bit builds).See also "PYTHONHASHSEED".\n\n Changed in version 3.3: Hash randomization is enabled by default.\n\nobject.__bool__(self)\n\n Called to implement truth value testing and the built-in operation\n "bool()"; should return "False" or "True". When this method is not\n defined, "__len__()" is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither "__len__()" nor "__bool__()", all its instances are\n considered true.\n\n\nCustomizing attribute access\n============================\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of "x.name") for\nclass instances.\n\nobject.__getattr__(self, name)\n\n Called when an attribute lookup has not found the attribute in the\n usual places (i.e. it is not an instance attribute nor is it found\n in the class tree for "self"). "name" is the attribute name. This\n method should return the (computed) attribute value or raise an\n "AttributeError" exception.\n\n Note that if the attribute is found through the normal mechanism,\n "__getattr__()" is not called. (This is an intentional asymmetry\n between "__getattr__()" and "__setattr__()".) This is done both for\n efficiency reasons and because otherwise "__getattr__()" would have\n no way to access other attributes of the instance. Note that at\n least for instance variables, you can fake total control by not\n inserting any values in the instance attribute dictionary (but\n instead inserting them in another object). See the\n "__getattribute__()" method below for a way to actually get total\n control over attribute access.\n\nobject.__getattribute__(self, name)\n\n Called unconditionally to implement attribute accesses for\n instances of the class. If the class also defines "__getattr__()",\n the latter will not be called unless "__getattribute__()" either\n calls it explicitly or raises an "AttributeError". This method\n should return the (computed) attribute value or raise an\n "AttributeError" exception. In order to avoid infinite recursion in\n this method, its implementation should always call the base class\n method with the same name to access any attributes it needs, for\n example, "object.__getattribute__(self, name)".\n\n Note: This method may still be bypassed when looking up special\n methods as the result of implicit invocation via language syntax\n or built-in functions. See *Special method lookup*.\n\nobject.__setattr__(self, name, value)\n\n Called when an attribute assignment is attempted. This is called\n instead of the normal mechanism (i.e. store the value in the\n instance dictionary). *name* is the attribute name, *value* is the\n value to be assigned to it.\n\n If "__setattr__()" wants to assign to an instance attribute, it\n should call the base class method with the same name, for example,\n "object.__setattr__(self, name, value)".\n\nobject.__delattr__(self, name)\n\n Like "__setattr__()" but for attribute deletion instead of\n assignment. This should only be implemented if "del obj.name" is\n meaningful for the object.\n\nobject.__dir__(self)\n\n Called when "dir()" is called on the object. A sequence must be\n returned. "dir()" converts the returned sequence to a list and\n sorts it.\n\n\nImplementing Descriptors\n------------------------\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in an\n*owner* class (the descriptor must be in either the owner\'s class\ndictionary or in the class dictionary for one of its parents). In the\nexamples below, "the attribute" refers to the attribute whose name is\nthe key of the property in the owner class\' "__dict__".\n\nobject.__get__(self, instance, owner)\n\n Called to get the attribute of the owner class (class attribute\n access) or of an instance of that class (instance attribute\n access). *owner* is always the owner class, while *instance* is the\n instance that the attribute was accessed through, or "None" when\n the attribute is accessed through the *owner*. This method should\n return the (computed) attribute value or raise an "AttributeError"\n exception.\n\nobject.__set__(self, instance, value)\n\n Called to set the attribute on an instance *instance* of the owner\n class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n Called to delete the attribute on an instance *instance* of the\n owner class.\n\nThe attribute "__objclass__" is interpreted by the "inspect" module as\nspecifying the class where this object was defined (setting this\nappropriately can assist in runtime introspection of dynamic class\nattributes). For callables, it may indicate that an instance of the\ngiven type (or a subclass) is expected or required as the first\npositional argument (for example, CPython sets this attribute for\nunbound methods that are implemented in C).\n\n\nInvoking Descriptors\n--------------------\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol: "__get__()", "__set__()", and\n"__delete__()". If any of those methods are defined for an object, it\nis said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, "a.x" has a\nlookup chain starting with "a.__dict__[\'x\']", then\n"type(a).__dict__[\'x\']", and continuing through the base classes of\n"type(a)" excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead. Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called.\n\nThe starting point for descriptor invocation is a binding, "a.x". How\nthe arguments are assembled depends on "a":\n\nDirect Call\n The simplest and least common call is when user code directly\n invokes a descriptor method: "x.__get__(a)".\n\nInstance Binding\n If binding to an object instance, "a.x" is transformed into the\n call: "type(a).__dict__[\'x\'].__get__(a, type(a))".\n\nClass Binding\n If binding to a class, "A.x" is transformed into the call:\n "A.__dict__[\'x\'].__get__(None, A)".\n\nSuper Binding\n If "a" is an instance of "super", then the binding "super(B,\n obj).m()" searches "obj.__class__.__mro__" for the base class "A"\n immediately preceding "B" and then invokes the descriptor with the\n call: "A.__dict__[\'m\'].__get__(obj, obj.__class__)".\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined. A descriptor can define\nany combination of "__get__()", "__set__()" and "__delete__()". If it\ndoes not define "__get__()", then accessing the attribute will return\nthe descriptor object itself unless there is a value in the object\'s\ninstance dictionary. If the descriptor defines "__set__()" and/or\n"__delete__()", it is a data descriptor; if it defines neither, it is\na non-data descriptor. Normally, data descriptors define both\n"__get__()" and "__set__()", while non-data descriptors have just the\n"__get__()" method. Data descriptors with "__set__()" and "__get__()"\ndefined always override a redefinition in an instance dictionary. In\ncontrast, non-data descriptors can be overridden by instances.\n\nPython methods (including "staticmethod()" and "classmethod()") are\nimplemented as non-data descriptors. Accordingly, instances can\nredefine and override methods. This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe "property()" function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n---------\n\nBy default, instances of classes have a dictionary for attribute\nstorage. This wastes space for objects having very few instance\nvariables. The space consumption can become acute when creating large\nnumbers of instances.\n\nThe default can be overridden by defining *__slots__* in a class\ndefinition. The *__slots__* declaration takes a sequence of instance\nvariables and reserves just enough space in each instance to hold a\nvalue for each variable. Space is saved because *__dict__* is not\ncreated for each instance.\n\nobject.__slots__\n\n This class variable can be assigned a string, iterable, or sequence\n of strings with variable names used by instances. *__slots__*\n reserves space for the declared variables and prevents the\n automatic creation of *__dict__* and *__weakref__* for each\n instance.\n\n\nNotes on using *__slots__*\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n attribute of that class will always be accessible, so a *__slots__*\n definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n variables not listed in the *__slots__* definition. Attempts to\n assign to an unlisted variable name raises "AttributeError". If\n dynamic assignment of new variables is desired, then add\n "\'__dict__\'" to the sequence of strings in the *__slots__*\n declaration.\n\n* Without a *__weakref__* variable for each instance, classes\n defining *__slots__* do not support weak references to its\n instances. If weak reference support is needed, then add\n "\'__weakref__\'" to the sequence of strings in the *__slots__*\n declaration.\n\n* *__slots__* are implemented at the class level by creating\n descriptors (*Implementing Descriptors*) for each variable name. As\n a result, class attributes cannot be used to set default values for\n instance variables defined by *__slots__*; otherwise, the class\n attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n where it is defined. As a result, subclasses will have a *__dict__*\n unless they also define *__slots__* (which must only contain names\n of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the\n instance variable defined by the base class slot is inaccessible\n (except by retrieving its descriptor directly from the base class).\n This renders the meaning of the program undefined. In the future, a\n check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n "variable-length" built-in types such as "int", "bytes" and "tuple".\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings\n may also be used; however, in the future, special meaning may be\n assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n *__slots__*.\n\n\nCustomizing class creation\n==========================\n\nBy default, classes are constructed using "type()". The class body is\nexecuted in a new namespace and the class name is bound locally to the\nresult of "type(name, bases, namespace)".\n\nThe class creation process can be customised by passing the\n"metaclass" keyword argument in the class definition line, or by\ninheriting from an existing class that included such an argument. In\nthe following example, both "MyClass" and "MySubclass" are instances\nof "Meta":\n\n class Meta(type):\n pass\n\n class MyClass(metaclass=Meta):\n pass\n\n class MySubclass(MyClass):\n pass\n\nAny other keyword arguments that are specified in the class definition\nare passed through to all metaclass operations described below.\n\nWhen a class definition is executed, the following steps occur:\n\n* the appropriate metaclass is determined\n\n* the class namespace is prepared\n\n* the class body is executed\n\n* the class object is created\n\n\nDetermining the appropriate metaclass\n-------------------------------------\n\nThe appropriate metaclass for a class definition is determined as\nfollows:\n\n* if no bases and no explicit metaclass are given, then "type()" is\n used\n\n* if an explicit metaclass is given and it is *not* an instance of\n "type()", then it is used directly as the metaclass\n\n* if an instance of "type()" is given as the explicit metaclass, or\n bases are defined, then the most derived metaclass is used\n\nThe most derived metaclass is selected from the explicitly specified\nmetaclass (if any) and the metaclasses (i.e. "type(cls)") of all\nspecified base classes. The most derived metaclass is one which is a\nsubtype of *all* of these candidate metaclasses. If none of the\ncandidate metaclasses meets that criterion, then the class definition\nwill fail with "TypeError".\n\n\nPreparing the class namespace\n-----------------------------\n\nOnce the appropriate metaclass has been identified, then the class\nnamespace is prepared. If the metaclass has a "__prepare__" attribute,\nit is called as "namespace = metaclass.__prepare__(name, bases,\n**kwds)" (where the additional keyword arguments, if any, come from\nthe class definition).\n\nIf the metaclass has no "__prepare__" attribute, then the class\nnamespace is initialised as an empty "dict()" instance.\n\nSee also: **PEP 3115** - Metaclasses in Python 3000\n\n Introduced the "__prepare__" namespace hook\n\n\nExecuting the class body\n------------------------\n\nThe class body is executed (approximately) as "exec(body, globals(),\nnamespace)". The key difference from a normal call to "exec()" is that\nlexical scoping allows the class body (including any methods) to\nreference names from the current and outer scopes when the class\ndefinition occurs inside a function.\n\nHowever, even when the class definition occurs inside the function,\nmethods defined inside the class still cannot see names defined at the\nclass scope. Class variables must be accessed through the first\nparameter of instance or class methods, and cannot be accessed at all\nfrom static methods.\n\n\nCreating the class object\n-------------------------\n\nOnce the class namespace has been populated by executing the class\nbody, the class object is created by calling "metaclass(name, bases,\nnamespace, **kwds)" (the additional keywords passed here are the same\nas those passed to "__prepare__").\n\nThis class object is the one that will be referenced by the zero-\nargument form of "super()". "__class__" is an implicit closure\nreference created by the compiler if any methods in a class body refer\nto either "__class__" or "super". This allows the zero argument form\nof "super()" to correctly identify the class being defined based on\nlexical scoping, while the class or instance that was used to make the\ncurrent call is identified based on the first argument passed to the\nmethod.\n\nAfter the class object is created, it is passed to the class\ndecorators included in the class definition (if any) and the resulting\nobject is bound in the local namespace as the defined class.\n\nWhen a new class is created by "type.__new__", the object provided as\nthe namespace parameter is copied to a standard Python dictionary and\nthe original object is discarded. The new copy becomes the "__dict__"\nattribute of the class object.\n\nSee also: **PEP 3135** - New super\n\n Describes the implicit "__class__" closure reference\n\n\nMetaclass example\n-----------------\n\nThe potential uses for metaclasses are boundless. Some ideas that have\nbeen explored include logging, interface checking, automatic\ndelegation, automatic property creation, proxies, frameworks, and\nautomatic resource locking/synchronization.\n\nHere is an example of a metaclass that uses an\n"collections.OrderedDict" to remember the order that class variables\nare defined:\n\n class OrderedClass(type):\n\n @classmethod\n def __prepare__(metacls, name, bases, **kwds):\n return collections.OrderedDict()\n\n def __new__(cls, name, bases, namespace, **kwds):\n result = type.__new__(cls, name, bases, dict(namespace))\n result.members = tuple(namespace)\n return result\n\n class A(metaclass=OrderedClass):\n def one(self): pass\n def two(self): pass\n def three(self): pass\n def four(self): pass\n\n >>> A.members\n (\'__module__\', \'one\', \'two\', \'three\', \'four\')\n\nWhen the class definition for *A* gets executed, the process begins\nwith calling the metaclass\'s "__prepare__()" method which returns an\nempty "collections.OrderedDict". That mapping records the methods and\nattributes of *A* as they are defined within the body of the class\nstatement. Once those definitions are executed, the ordered dictionary\nis fully populated and the metaclass\'s "__new__()" method gets\ninvoked. That method builds the new type and it saves the ordered\ndictionary keys in an attribute called "members".\n\n\nCustomizing instance and subclass checks\n========================================\n\nThe following methods are used to override the default behavior of the\n"isinstance()" and "issubclass()" built-in functions.\n\nIn particular, the metaclass "abc.ABCMeta" implements these methods in\norder to allow the addition of Abstract Base Classes (ABCs) as\n"virtual base classes" to any class or type (including built-in\ntypes), including other ABCs.\n\nclass.__instancecheck__(self, instance)\n\n Return true if *instance* should be considered a (direct or\n indirect) instance of *class*. If defined, called to implement\n "isinstance(instance, class)".\n\nclass.__subclasscheck__(self, subclass)\n\n Return true if *subclass* should be considered a (direct or\n indirect) subclass of *class*. If defined, called to implement\n "issubclass(subclass, class)".\n\nNote that these methods are looked up on the type (metaclass) of a\nclass. They cannot be defined as class methods in the actual class.\nThis is consistent with the lookup of special methods that are called\non instances, only in this case the instance is itself a class.\n\nSee also: **PEP 3119** - Introducing Abstract Base Classes\n\n Includes the specification for customizing "isinstance()" and\n "issubclass()" behavior through "__instancecheck__()" and\n "__subclasscheck__()", with motivation for this functionality in\n the context of adding Abstract Base Classes (see the "abc"\n module) to the language.\n\n\nEmulating callable objects\n==========================\n\nobject.__call__(self[, args...])\n\n Called when the instance is "called" as a function; if this method\n is defined, "x(arg1, arg2, ...)" is a shorthand for\n "x.__call__(arg1, arg2, ...)".\n\n\nEmulating container types\n=========================\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well. The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which "0 <= k < N" where\n*N* is the length of the sequence, or slice objects, which define a\nrange of items. It is also recommended that mappings provide the\nmethods "keys()", "values()", "items()", "get()", "clear()",\n"setdefault()", "pop()", "popitem()", "copy()", and "update()"\nbehaving similar to those for Python\'s standard dictionary objects.\nThe "collections" module provides a "MutableMapping" abstract base\nclass to help create those methods from a base set of "__getitem__()",\n"__setitem__()", "__delitem__()", and "keys()". Mutable sequences\nshould provide methods "append()", "count()", "index()", "extend()",\n"insert()", "pop()", "remove()", "reverse()" and "sort()", like Python\nstandard list objects. Finally, sequence types should implement\naddition (meaning concatenation) and multiplication (meaning\nrepetition) by defining the methods "__add__()", "__radd__()",\n"__iadd__()", "__mul__()", "__rmul__()" and "__imul__()" described\nbelow; they should not define other numerical operators. It is\nrecommended that both mappings and sequences implement the\n"__contains__()" method to allow efficient use of the "in" operator;\nfor mappings, "in" should search the mapping\'s keys; for sequences, it\nshould search through the values. It is further recommended that both\nmappings and sequences implement the "__iter__()" method to allow\nefficient iteration through the container; for mappings, "__iter__()"\nshould be the same as "keys()"; for sequences, it should iterate\nthrough the values.\n\nobject.__len__(self)\n\n Called to implement the built-in function "len()". Should return\n the length of the object, an integer ">=" 0. Also, an object that\n doesn\'t define a "__bool__()" method and whose "__len__()" method\n returns zero is considered to be false in a Boolean context.\n\nobject.__length_hint__(self)\n\n Called to implement "operator.length_hint()". Should return an\n estimated length for the object (which may be greater or less than\n the actual length). The length must be an integer ">=" 0. This\n method is purely an optimization and is never required for\n correctness.\n\n New in version 3.4.\n\nNote: Slicing is done exclusively with the following three methods.\n A call like\n\n a[1:2] = b\n\n is translated to\n\n a[slice(1, 2, None)] = b\n\n and so forth. Missing slice items are always filled in with "None".\n\nobject.__getitem__(self, key)\n\n Called to implement evaluation of "self[key]". For sequence types,\n the accepted keys should be integers and slice objects. Note that\n the special interpretation of negative indexes (if the class wishes\n to emulate a sequence type) is up to the "__getitem__()" method. If\n *key* is of an inappropriate type, "TypeError" may be raised; if of\n a value outside the set of indexes for the sequence (after any\n special interpretation of negative values), "IndexError" should be\n raised. For mapping types, if *key* is missing (not in the\n container), "KeyError" should be raised.\n\n Note: "for" loops expect that an "IndexError" will be raised for\n illegal indexes to allow proper detection of the end of the\n sequence.\n\nobject.__missing__(self, key)\n\n Called by "dict"."__getitem__()" to implement "self[key]" for dict\n subclasses when key is not in the dictionary.\n\nobject.__setitem__(self, key, value)\n\n Called to implement assignment to "self[key]". Same note as for\n "__getitem__()". This should only be implemented for mappings if\n the objects support changes to the values for keys, or if new keys\n can be added, or for sequences if elements can be replaced. The\n same exceptions should be raised for improper *key* values as for\n the "__getitem__()" method.\n\nobject.__delitem__(self, key)\n\n Called to implement deletion of "self[key]". Same note as for\n "__getitem__()". This should only be implemented for mappings if\n the objects support removal of keys, or for sequences if elements\n can be removed from the sequence. The same exceptions should be\n raised for improper *key* values as for the "__getitem__()" method.\n\nobject.__iter__(self)\n\n This method is called when an iterator is required for a container.\n This method should return a new iterator object that can iterate\n over all the objects in the container. For mappings, it should\n iterate over the keys of the container.\n\n Iterator objects also need to implement this method; they are\n required to return themselves. For more information on iterator\n objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n Called (if present) by the "reversed()" built-in to implement\n reverse iteration. It should return a new iterator object that\n iterates over all the objects in the container in reverse order.\n\n If the "__reversed__()" method is not provided, the "reversed()"\n built-in will fall back to using the sequence protocol ("__len__()"\n and "__getitem__()"). Objects that support the sequence protocol\n should only provide "__reversed__()" if they can provide an\n implementation that is more efficient than the one provided by\n "reversed()".\n\nThe membership test operators ("in" and "not in") are normally\nimplemented as an iteration through a sequence. However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n Called to implement membership test operators. Should return true\n if *item* is in *self*, false otherwise. For mapping objects, this\n should consider the keys of the mapping rather than the values or\n the key-item pairs.\n\n For objects that don\'t define "__contains__()", the membership test\n first tries iteration via "__iter__()", then the old sequence\n iteration protocol via "__getitem__()", see *this section in the\n language reference*.\n\n\nEmulating numeric types\n=======================\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__matmul__(self, other)\nobject.__truediv__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations ("+", "-", "*", "@", "/", "//", "%", "divmod()",\n "pow()", "**", "<<", ">>", "&", "^", "|"). For instance, to\n evaluate the expression "x + y", where *x* is an instance of a\n class that has an "__add__()" method, "x.__add__(y)" is called.\n The "__divmod__()" method should be the equivalent to using\n "__floordiv__()" and "__mod__()"; it should not be related to\n "__truediv__()". Note that "__pow__()" should be defined to accept\n an optional third argument if the ternary version of the built-in\n "pow()" function is to be supported.\n\n If one of those methods does not support the operation with the\n supplied arguments, it should return "NotImplemented".\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rmatmul__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations ("+", "-", "*", "@", "/", "//", "%", "divmod()",\n "pow()", "**", "<<", ">>", "&", "^", "|") with reflected (swapped)\n operands. These functions are only called if the left operand does\n not support the corresponding operation and the operands are of\n different types. [2] For instance, to evaluate the expression "x -\n y", where *y* is an instance of a class that has an "__rsub__()"\n method, "y.__rsub__(x)" is called if "x.__sub__(y)" returns\n *NotImplemented*.\n\n Note that ternary "pow()" will not try calling "__rpow__()" (the\n coercion rules would become too complicated).\n\n Note: If the right operand\'s type is a subclass of the left\n operand\'s type and that subclass provides the reflected method\n for the operation, this method will be called before the left\n operand\'s non-reflected method. This behavior allows subclasses\n to override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__imatmul__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n These methods are called to implement the augmented arithmetic\n assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", "**=",\n "<<=", ">>=", "&=", "^=", "|="). These methods should attempt to\n do the operation in-place (modifying *self*) and return the result\n (which could be, but does not have to be, *self*). If a specific\n method is not defined, the augmented assignment falls back to the\n normal methods. For instance, if *x* is an instance of a class\n with an "__iadd__()" method, "x += y" is equivalent to "x =\n x.__iadd__(y)" . Otherwise, "x.__add__(y)" and "y.__radd__(x)" are\n considered, as with the evaluation of "x + y". In certain\n situations, augmented assignment can result in unexpected errors\n (see *Why does a_tuple[i] += [\'item\'] raise an exception when the\n addition works?*), but this behavior is in fact part of the data\n model.\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n Called to implement the unary arithmetic operations ("-", "+",\n "abs()" and "~").\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__float__(self)\nobject.__round__(self[, n])\n\n Called to implement the built-in functions "complex()", "int()",\n "float()" and "round()". Should return a value of the appropriate\n type.\n\nobject.__index__(self)\n\n Called to implement "operator.index()", and whenever Python needs\n to losslessly convert the numeric object to an integer object (such\n as in slicing, or in the built-in "bin()", "hex()" and "oct()"\n functions). Presence of this method indicates that the numeric\n object is an integer type. Must return an integer.\n\n Note: In order to have a coherent integer type class, when\n "__index__()" is defined "__int__()" should also be defined, and\n both should return the same value.\n\n\nWith Statement Context Managers\n===============================\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a "with" statement. The context manager\nhandles the entry into, and the exit from, the desired runtime context\nfor the execution of the block of code. Context managers are normally\ninvoked using the "with" statement (described in section *The with\nstatement*), but can also be used by directly invoking their methods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n Enter the runtime context related to this object. The "with"\n statement will bind this method\'s return value to the target(s)\n specified in the "as" clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n Exit the runtime context related to this object. The parameters\n describe the exception that caused the context to be exited. If the\n context was exited without an exception, all three arguments will\n be "None".\n\n If an exception is supplied, and the method wishes to suppress the\n exception (i.e., prevent it from being propagated), it should\n return a true value. Otherwise, the exception will be processed\n normally upon exit from this method.\n\n Note that "__exit__()" methods should not reraise the passed-in\n exception; this is the caller\'s responsibility.\n\nSee also: **PEP 343** - The "with" statement\n\n The specification, background, and examples for the Python "with"\n statement.\n\n\nSpecial method lookup\n=====================\n\nFor custom classes, implicit invocations of special methods are only\nguaranteed to work correctly if defined on an object\'s type, not in\nthe object\'s instance dictionary. That behaviour is the reason why\nthe following code raises an exception:\n\n >>> class C:\n ... pass\n ...\n >>> c = C()\n >>> c.__len__ = lambda: 5\n >>> len(c)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: object of type \'C\' has no len()\n\nThe rationale behind this behaviour lies with a number of special\nmethods such as "__hash__()" and "__repr__()" that are implemented by\nall objects, including type objects. If the implicit lookup of these\nmethods used the conventional lookup process, they would fail when\ninvoked on the type object itself:\n\n >>> 1 .__hash__() == hash(1)\n True\n >>> int.__hash__() == hash(int)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: descriptor \'__hash__\' of \'int\' object needs an argument\n\nIncorrectly attempting to invoke an unbound method of a class in this\nway is sometimes referred to as \'metaclass confusion\', and is avoided\nby bypassing the instance when looking up special methods:\n\n >>> type(1).__hash__(1) == hash(1)\n True\n >>> type(int).__hash__(int) == hash(int)\n True\n\nIn addition to bypassing any instance attributes in the interest of\ncorrectness, implicit special method lookup generally also bypasses\nthe "__getattribute__()" method even of the object\'s metaclass:\n\n >>> class Meta(type):\n ... def __getattribute__(*args):\n ... print("Metaclass getattribute invoked")\n ... return type.__getattribute__(*args)\n ...\n >>> class C(object, metaclass=Meta):\n ... def __len__(self):\n ... return 10\n ... def __getattribute__(*args):\n ... print("Class getattribute invoked")\n ... return object.__getattribute__(*args)\n ...\n >>> c = C()\n >>> c.__len__() # Explicit lookup via instance\n Class getattribute invoked\n 10\n >>> type(c).__len__(c) # Explicit lookup via type\n Metaclass getattribute invoked\n 10\n >>> len(c) # Implicit lookup\n 10\n\nBypassing the "__getattribute__()" machinery in this fashion provides\nsignificant scope for speed optimisations within the interpreter, at\nthe cost of some flexibility in the handling of special methods (the\nspecial method *must* be set on the class object itself in order to be\nconsistently invoked by the interpreter).\n', - 'string-methods': u'\nString Methods\n**************\n\nStrings implement all of the *common* sequence operations, along with\nthe additional methods described below.\n\nStrings also support two styles of string formatting, one providing a\nlarge degree of flexibility and customization (see "str.format()",\n*Format String Syntax* and *Custom String Formatting*) and the other\nbased on C "printf" style formatting that handles a narrower range of\ntypes and is slightly harder to use correctly, but is often faster for\nthe cases it can handle (*printf-style String Formatting*).\n\nThe *Text Processing Services* section of the standard library covers\na number of other modules that provide various text related utilities\n(including regular expression support in the "re" module).\n\nstr.capitalize()\n\n Return a copy of the string with its first character capitalized\n and the rest lowercased.\n\nstr.casefold()\n\n Return a casefolded copy of the string. Casefolded strings may be\n used for caseless matching.\n\n Casefolding is similar to lowercasing but more aggressive because\n it is intended to remove all case distinctions in a string. For\n example, the German lowercase letter "\'\xdf\'" is equivalent to ""ss"".\n Since it is already lowercase, "lower()" would do nothing to "\'\xdf\'";\n "casefold()" converts it to ""ss"".\n\n The casefolding algorithm is described in section 3.13 of the\n Unicode Standard.\n\n New in version 3.3.\n\nstr.center(width[, fillchar])\n\n Return centered in a string of length *width*. Padding is done\n using the specified *fillchar* (default is an ASCII space). The\n original string is returned if *width* is less than or equal to\n "len(s)".\n\nstr.count(sub[, start[, end]])\n\n Return the number of non-overlapping occurrences of substring *sub*\n in the range [*start*, *end*]. Optional arguments *start* and\n *end* are interpreted as in slice notation.\n\nstr.encode(encoding="utf-8", errors="strict")\n\n Return an encoded version of the string as a bytes object. Default\n encoding is "\'utf-8\'". *errors* may be given to set a different\n error handling scheme. The default for *errors* is "\'strict\'",\n meaning that encoding errors raise a "UnicodeError". Other possible\n values are "\'ignore\'", "\'replace\'", "\'xmlcharrefreplace\'",\n "\'backslashreplace\'" and any other name registered via\n "codecs.register_error()", see section *Error Handlers*. For a list\n of possible encodings, see section *Standard Encodings*.\n\n Changed in version 3.1: Support for keyword arguments added.\n\nstr.endswith(suffix[, start[, end]])\n\n Return "True" if the string ends with the specified *suffix*,\n otherwise return "False". *suffix* can also be a tuple of suffixes\n to look for. With optional *start*, test beginning at that\n position. With optional *end*, stop comparing at that position.\n\nstr.expandtabs(tabsize=8)\n\n Return a copy of the string where all tab characters are replaced\n by one or more spaces, depending on the current column and the\n given tab size. Tab positions occur every *tabsize* characters\n (default is 8, giving tab positions at columns 0, 8, 16 and so on).\n To expand the string, the current column is set to zero and the\n string is examined character by character. If the character is a\n tab ("\\t"), one or more space characters are inserted in the result\n until the current column is equal to the next tab position. (The\n tab character itself is not copied.) If the character is a newline\n ("\\n") or return ("\\r"), it is copied and the current column is\n reset to zero. Any other character is copied unchanged and the\n current column is incremented by one regardless of how the\n character is represented when printed.\n\n >>> \'01\\t012\\t0123\\t01234\'.expandtabs()\n \'01 012 0123 01234\'\n >>> \'01\\t012\\t0123\\t01234\'.expandtabs(4)\n \'01 012 0123 01234\'\n\nstr.find(sub[, start[, end]])\n\n Return the lowest index in the string where substring *sub* is\n found within the slice "s[start:end]". Optional arguments *start*\n and *end* are interpreted as in slice notation. Return "-1" if\n *sub* is not found.\n\n Note: The "find()" method should be used only if you need to know\n the position of *sub*. To check if *sub* is a substring or not,\n use the "in" operator:\n\n >>> \'Py\' in \'Python\'\n True\n\nstr.format(*args, **kwargs)\n\n Perform a string formatting operation. The string on which this\n method is called can contain literal text or replacement fields\n delimited by braces "{}". Each replacement field contains either\n the numeric index of a positional argument, or the name of a\n keyword argument. Returns a copy of the string where each\n replacement field is replaced with the string value of the\n corresponding argument.\n\n >>> "The sum of 1 + 2 is {0}".format(1+2)\n \'The sum of 1 + 2 is 3\'\n\n See *Format String Syntax* for a description of the various\n formatting options that can be specified in format strings.\n\nstr.format_map(mapping)\n\n Similar to "str.format(**mapping)", except that "mapping" is used\n directly and not copied to a "dict". This is useful if for example\n "mapping" is a dict subclass:\n\n >>> class Default(dict):\n ... def __missing__(self, key):\n ... return key\n ...\n >>> \'{name} was born in {country}\'.format_map(Default(name=\'Guido\'))\n \'Guido was born in country\'\n\n New in version 3.2.\n\nstr.index(sub[, start[, end]])\n\n Like "find()", but raise "ValueError" when the substring is not\n found.\n\nstr.isalnum()\n\n Return true if all characters in the string are alphanumeric and\n there is at least one character, false otherwise. A character "c"\n is alphanumeric if one of the following returns "True":\n "c.isalpha()", "c.isdecimal()", "c.isdigit()", or "c.isnumeric()".\n\nstr.isalpha()\n\n Return true if all characters in the string are alphabetic and\n there is at least one character, false otherwise. Alphabetic\n characters are those characters defined in the Unicode character\n database as "Letter", i.e., those with general category property\n being one of "Lm", "Lt", "Lu", "Ll", or "Lo". Note that this is\n different from the "Alphabetic" property defined in the Unicode\n Standard.\n\nstr.isdecimal()\n\n Return true if all characters in the string are decimal characters\n and there is at least one character, false otherwise. Decimal\n characters are those from general category "Nd". This category\n includes digit characters, and all characters that can be used to\n form decimal-radix numbers, e.g. U+0660, ARABIC-INDIC DIGIT ZERO.\n\nstr.isdigit()\n\n Return true if all characters in the string are digits and there is\n at least one character, false otherwise. Digits include decimal\n characters and digits that need special handling, such as the\n compatibility superscript digits. Formally, a digit is a character\n that has the property value Numeric_Type=Digit or\n Numeric_Type=Decimal.\n\nstr.isidentifier()\n\n Return true if the string is a valid identifier according to the\n language definition, section *Identifiers and keywords*.\n\n Use "keyword.iskeyword()" to test for reserved identifiers such as\n "def" and "class".\n\nstr.islower()\n\n Return true if all cased characters [4] in the string are lowercase\n and there is at least one cased character, false otherwise.\n\nstr.isnumeric()\n\n Return true if all characters in the string are numeric characters,\n and there is at least one character, false otherwise. Numeric\n characters include digit characters, and all characters that have\n the Unicode numeric value property, e.g. U+2155, VULGAR FRACTION\n ONE FIFTH. Formally, numeric characters are those with the\n property value Numeric_Type=Digit, Numeric_Type=Decimal or\n Numeric_Type=Numeric.\n\nstr.isprintable()\n\n Return true if all characters in the string are printable or the\n string is empty, false otherwise. Nonprintable characters are\n those characters defined in the Unicode character database as\n "Other" or "Separator", excepting the ASCII space (0x20) which is\n considered printable. (Note that printable characters in this\n context are those which should not be escaped when "repr()" is\n invoked on a string. It has no bearing on the handling of strings\n written to "sys.stdout" or "sys.stderr".)\n\nstr.isspace()\n\n Return true if there are only whitespace characters in the string\n and there is at least one character, false otherwise. Whitespace\n characters are those characters defined in the Unicode character\n database as "Other" or "Separator" and those with bidirectional\n property being one of "WS", "B", or "S".\n\nstr.istitle()\n\n Return true if the string is a titlecased string and there is at\n least one character, for example uppercase characters may only\n follow uncased characters and lowercase characters only cased ones.\n Return false otherwise.\n\nstr.isupper()\n\n Return true if all cased characters [4] in the string are uppercase\n and there is at least one cased character, false otherwise.\n\nstr.join(iterable)\n\n Return a string which is the concatenation of the strings in the\n *iterable* *iterable*. A "TypeError" will be raised if there are\n any non-string values in *iterable*, including "bytes" objects.\n The separator between elements is the string providing this method.\n\nstr.ljust(width[, fillchar])\n\n Return the string left justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is an ASCII\n space). The original string is returned if *width* is less than or\n equal to "len(s)".\n\nstr.lower()\n\n Return a copy of the string with all the cased characters [4]\n converted to lowercase.\n\n The lowercasing algorithm used is described in section 3.13 of the\n Unicode Standard.\n\nstr.lstrip([chars])\n\n Return a copy of the string with leading characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or "None", the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a prefix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.lstrip()\n \'spacious \'\n >>> \'www.example.com\'.lstrip(\'cmowz.\')\n \'example.com\'\n\nstatic str.maketrans(x[, y[, z]])\n\n This static method returns a translation table usable for\n "str.translate()".\n\n If there is only one argument, it must be a dictionary mapping\n Unicode ordinals (integers) or characters (strings of length 1) to\n Unicode ordinals, strings (of arbitrary lengths) or None.\n Character keys will then be converted to ordinals.\n\n If there are two arguments, they must be strings of equal length,\n and in the resulting dictionary, each character in x will be mapped\n to the character at the same position in y. If there is a third\n argument, it must be a string, whose characters will be mapped to\n None in the result.\n\nstr.partition(sep)\n\n Split the string at the first occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing the string itself, followed by\n two empty strings.\n\nstr.replace(old, new[, count])\n\n Return a copy of the string with all occurrences of substring *old*\n replaced by *new*. If the optional argument *count* is given, only\n the first *count* occurrences are replaced.\n\nstr.rfind(sub[, start[, end]])\n\n Return the highest index in the string where substring *sub* is\n found, such that *sub* is contained within "s[start:end]".\n Optional arguments *start* and *end* are interpreted as in slice\n notation. Return "-1" on failure.\n\nstr.rindex(sub[, start[, end]])\n\n Like "rfind()" but raises "ValueError" when the substring *sub* is\n not found.\n\nstr.rjust(width[, fillchar])\n\n Return the string right justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is an ASCII\n space). The original string is returned if *width* is less than or\n equal to "len(s)".\n\nstr.rpartition(sep)\n\n Split the string at the last occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing two empty strings, followed by\n the string itself.\n\nstr.rsplit(sep=None, maxsplit=-1)\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit* splits\n are done, the *rightmost* ones. If *sep* is not specified or\n "None", any whitespace string is a separator. Except for splitting\n from the right, "rsplit()" behaves like "split()" which is\n described in detail below.\n\nstr.rstrip([chars])\n\n Return a copy of the string with trailing characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or "None", the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a suffix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.rstrip()\n \' spacious\'\n >>> \'mississippi\'.rstrip(\'ipz\')\n \'mississ\'\n\nstr.split(sep=None, maxsplit=-1)\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit*\n splits are done (thus, the list will have at most "maxsplit+1"\n elements). If *maxsplit* is not specified or "-1", then there is\n no limit on the number of splits (all possible splits are made).\n\n If *sep* is given, consecutive delimiters are not grouped together\n and are deemed to delimit empty strings (for example,\n "\'1,,2\'.split(\',\')" returns "[\'1\', \'\', \'2\']"). The *sep* argument\n may consist of multiple characters (for example,\n "\'1<>2<>3\'.split(\'<>\')" returns "[\'1\', \'2\', \'3\']"). Splitting an\n empty string with a specified separator returns "[\'\']".\n\n For example:\n\n >>> \'1,2,3\'.split(\',\')\n [\'1\', \'2\', \'3\']\n >>> \'1,2,3\'.split(\',\', maxsplit=1)\n [\'1\', \'2,3\']\n >>> \'1,2,,3,\'.split(\',\')\n [\'1\', \'2\', \'\', \'3\', \'\']\n\n If *sep* is not specified or is "None", a different splitting\n algorithm is applied: runs of consecutive whitespace are regarded\n as a single separator, and the result will contain no empty strings\n at the start or end if the string has leading or trailing\n whitespace. Consequently, splitting an empty string or a string\n consisting of just whitespace with a "None" separator returns "[]".\n\n For example:\n\n >>> \'1 2 3\'.split()\n [\'1\', \'2\', \'3\']\n >>> \'1 2 3\'.split(maxsplit=1)\n [\'1\', \'2 3\']\n >>> \' 1 2 3 \'.split()\n [\'1\', \'2\', \'3\']\n\nstr.splitlines([keepends])\n\n Return a list of the lines in the string, breaking at line\n boundaries. Line breaks are not included in the resulting list\n unless *keepends* is given and true.\n\n This method splits on the following line boundaries. In\n particular, the boundaries are a superset of *universal newlines*.\n\n +-------------------------+-------------------------------+\n | Representation | Description |\n +=========================+===============================+\n | "\\n" | Line Feed |\n +-------------------------+-------------------------------+\n | "\\r" | Carriage Return |\n +-------------------------+-------------------------------+\n | "\\r\\n" | Carriage Return + Line Feed |\n +-------------------------+-------------------------------+\n | "\\v" or "\\x0b" | Line Tabulation |\n +-------------------------+-------------------------------+\n | "\\f" or "\\x0c" | Form Feed |\n +-------------------------+-------------------------------+\n | "\\x1c" | File Separator |\n +-------------------------+-------------------------------+\n | "\\x1d" | Group Separator |\n +-------------------------+-------------------------------+\n | "\\x1e" | Record Separator |\n +-------------------------+-------------------------------+\n | "\\x85" | Next Line (C1 Control Code) |\n +-------------------------+-------------------------------+\n | "\\u2028" | Line Separator |\n +-------------------------+-------------------------------+\n | "\\u2029" | Paragraph Separator |\n +-------------------------+-------------------------------+\n\n Changed in version 3.2: "\\v" and "\\f" added to list of line\n boundaries.\n\n For example:\n\n >>> \'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines()\n [\'ab c\', \'\', \'de fg\', \'kl\']\n >>> \'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines(keepends=True)\n [\'ab c\\n\', \'\\n\', \'de fg\\r\', \'kl\\r\\n\']\n\n Unlike "split()" when a delimiter string *sep* is given, this\n method returns an empty list for the empty string, and a terminal\n line break does not result in an extra line:\n\n >>> "".splitlines()\n []\n >>> "One line\\n".splitlines()\n [\'One line\']\n\n For comparison, "split(\'\\n\')" gives:\n\n >>> \'\'.split(\'\\n\')\n [\'\']\n >>> \'Two lines\\n\'.split(\'\\n\')\n [\'Two lines\', \'\']\n\nstr.startswith(prefix[, start[, end]])\n\n Return "True" if string starts with the *prefix*, otherwise return\n "False". *prefix* can also be a tuple of prefixes to look for.\n With optional *start*, test string beginning at that position.\n With optional *end*, stop comparing string at that position.\n\nstr.strip([chars])\n\n Return a copy of the string with the leading and trailing\n characters removed. The *chars* argument is a string specifying the\n set of characters to be removed. If omitted or "None", the *chars*\n argument defaults to removing whitespace. The *chars* argument is\n not a prefix or suffix; rather, all combinations of its values are\n stripped:\n\n >>> \' spacious \'.strip()\n \'spacious\'\n >>> \'www.example.com\'.strip(\'cmowz.\')\n \'example\'\n\n The outermost leading and trailing *chars* argument values are\n stripped from the string. Characters are removed from the leading\n end until reaching a string character that is not contained in the\n set of characters in *chars*. A similar action takes place on the\n trailing end. For example:\n\n >>> comment_string = \'#....... Section 3.2.1 Issue #32 .......\'\n >>> comment_string.strip(\'.#! \')\n \'Section 3.2.1 Issue #32\'\n\nstr.swapcase()\n\n Return a copy of the string with uppercase characters converted to\n lowercase and vice versa. Note that it is not necessarily true that\n "s.swapcase().swapcase() == s".\n\nstr.title()\n\n Return a titlecased version of the string where words start with an\n uppercase character and the remaining characters are lowercase.\n\n For example:\n\n >>> \'Hello world\'.title()\n \'Hello World\'\n\n The algorithm uses a simple language-independent definition of a\n word as groups of consecutive letters. The definition works in\n many contexts but it means that apostrophes in contractions and\n possessives form word boundaries, which may not be the desired\n result:\n\n >>> "they\'re bill\'s friends from the UK".title()\n "They\'Re Bill\'S Friends From The Uk"\n\n A workaround for apostrophes can be constructed using regular\n expressions:\n\n >>> import re\n >>> def titlecase(s):\n ... return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n ... lambda mo: mo.group(0)[0].upper() +\n ... mo.group(0)[1:].lower(),\n ... s)\n ...\n >>> titlecase("they\'re bill\'s friends.")\n "They\'re Bill\'s Friends."\n\nstr.translate(table)\n\n Return a copy of the string in which each character has been mapped\n through the given translation table. The table must be an object\n that implements indexing via "__getitem__()", typically a *mapping*\n or *sequence*. When indexed by a Unicode ordinal (an integer), the\n table object can do any of the following: return a Unicode ordinal\n or a string, to map the character to one or more other characters;\n return "None", to delete the character from the return string; or\n raise a "LookupError" exception, to map the character to itself.\n\n You can use "str.maketrans()" to create a translation map from\n character-to-character mappings in different formats.\n\n See also the "codecs" module for a more flexible approach to custom\n character mappings.\n\nstr.upper()\n\n Return a copy of the string with all the cased characters [4]\n converted to uppercase. Note that "str.upper().isupper()" might be\n "False" if "s" contains uncased characters or if the Unicode\n category of the resulting character(s) is not "Lu" (Letter,\n uppercase), but e.g. "Lt" (Letter, titlecase).\n\n The uppercasing algorithm used is described in section 3.13 of the\n Unicode Standard.\n\nstr.zfill(width)\n\n Return a copy of the string left filled with ASCII "\'0\'" digits to\n make a string of length *width*. A leading sign prefix\n ("\'+\'"/"\'-\'") is handled by inserting the padding *after* the sign\n character rather than before. The original string is returned if\n *width* is less than or equal to "len(s)".\n\n For example:\n\n >>> "42".zfill(5)\n \'00042\'\n >>> "-42".zfill(5)\n \'-0042\'\n', + 'specialattrs': u'\nSpecial Attributes\n******************\n\nThe implementation adds a few special read-only attributes to several\nobject types, where they are relevant. Some of these are not reported\nby the "dir()" built-in function.\n\nobject.__dict__\n\n A dictionary or other mapping object used to store an object\'s\n (writable) attributes.\n\ninstance.__class__\n\n The class to which a class instance belongs.\n\nclass.__bases__\n\n The tuple of base classes of a class object.\n\ndefinition.__name__\n\n The name of the class, function, method, descriptor, or generator\n instance.\n\ndefinition.__qualname__\n\n The *qualified name* of the class, function, method, descriptor, or\n generator instance.\n\n New in version 3.3.\n\nclass.__mro__\n\n This attribute is a tuple of classes that are considered when\n looking for base classes during method resolution.\n\nclass.mro()\n\n This method can be overridden by a metaclass to customize the\n method resolution order for its instances. It is called at class\n instantiation, and its result is stored in "__mro__".\n\nclass.__subclasses__()\n\n Each class keeps a list of weak references to its immediate\n subclasses. This method returns a list of all those references\n still alive. Example:\n\n >>> int.__subclasses__()\n []\n\n-[ Footnotes ]-\n\n[1] Additional information on these special methods may be found\n in the Python Reference Manual (*Basic customization*).\n\n[2] As a consequence, the list "[1, 2]" is considered equal to\n "[1.0, 2.0]", and similarly for tuples.\n\n[3] They must have since the parser can\'t tell the type of the\n operands.\n\n[4] Cased characters are those with general category property\n being one of "Lu" (Letter, uppercase), "Ll" (Letter, lowercase),\n or "Lt" (Letter, titlecase).\n\n[5] To format only a tuple you should therefore provide a\n singleton tuple whose only element is the tuple to be formatted.\n', + 'specialnames': u'\nSpecial method names\n********************\n\nA class can implement certain operations that are invoked by special\nsyntax (such as arithmetic operations or subscripting and slicing) by\ndefining methods with special names. This is Python\'s approach to\n*operator overloading*, allowing classes to define their own behavior\nwith respect to language operators. For instance, if a class defines\na method named "__getitem__()", and "x" is an instance of this class,\nthen "x[i]" is roughly equivalent to "type(x).__getitem__(x, i)".\nExcept where mentioned, attempts to execute an operation raise an\nexception when no appropriate method is defined (typically\n"AttributeError" or "TypeError").\n\nWhen implementing a class that emulates any built-in type, it is\nimportant that the emulation only be implemented to the degree that it\nmakes sense for the object being modelled. For example, some\nsequences may work well with retrieval of individual elements, but\nextracting a slice may not make sense. (One example of this is the\n"NodeList" interface in the W3C\'s Document Object Model.)\n\n\nBasic customization\n===================\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. "__new__()" is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of "__new__()" should be the new object instance (usually an\n instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s "__new__()" method using\n "super(currentclass, cls).__new__(cls[, ...])" with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If "__new__()" returns an instance of *cls*, then the new\n instance\'s "__init__()" method will be invoked like\n "__init__(self[, ...])", where *self* is the new instance and the\n remaining arguments are the same as were passed to "__new__()".\n\n If "__new__()" does not return an instance of *cls*, then the new\n instance\'s "__init__()" method will not be invoked.\n\n "__new__()" is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called after the instance has been created (by "__new__()"), but\n before it is returned to the caller. The arguments are those\n passed to the class constructor expression. If a base class has an\n "__init__()" method, the derived class\'s "__init__()" method, if\n any, must explicitly call it to ensure proper initialization of the\n base class part of the instance; for example:\n "BaseClass.__init__(self, [args...])".\n\n Because "__new__()" and "__init__()" work together in constructing\n objects ("__new__()" to create it, and "__init__()" to customize\n it), no non-"None" value may be returned by "__init__()"; doing so\n will cause a "TypeError" to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a "__del__()" method, the\n derived class\'s "__del__()" method, if any, must explicitly call it\n to ensure proper deletion of the base class part of the instance.\n Note that it is possible (though not recommended!) for the\n "__del__()" method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n "__del__()" methods are called for objects that still exist when\n the interpreter exits.\n\n Note: "del x" doesn\'t directly call "x.__del__()" --- the former\n decrements the reference count for "x" by one, and the latter is\n only called when "x"\'s reference count reaches zero. Some common\n situations that may prevent the reference count of an object from\n going to zero include: circular references between objects (e.g.,\n a doubly-linked list or a tree data structure with parent and\n child pointers); a reference to the object on the stack frame of\n a function that caught an exception (the traceback stored in\n "sys.exc_info()[2]" keeps the stack frame alive); or a reference\n to the object on the stack frame that raised an unhandled\n exception in interactive mode (the traceback stored in\n "sys.last_traceback" keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the second can be resolved by freeing the reference to the\n traceback object when it is no longer useful, and the third can\n be resolved by storing "None" in "sys.last_traceback". Circular\n references which are garbage are detected and cleaned up when the\n cyclic garbage collector is enabled (it\'s on by default). Refer\n to the documentation for the "gc" module for more information\n about this topic.\n\n Warning: Due to the precarious circumstances under which\n "__del__()" methods are invoked, exceptions that occur during\n their execution are ignored, and a warning is printed to\n "sys.stderr" instead. Also, when "__del__()" is invoked in\n response to a module being deleted (e.g., when execution of the\n program is done), other globals referenced by the "__del__()"\n method may already have been deleted or in the process of being\n torn down (e.g. the import machinery shutting down). For this\n reason, "__del__()" methods should do the absolute minimum needed\n to maintain external invariants. Starting with version 1.5,\n Python guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the "__del__()" method is called.\n\nobject.__repr__(self)\n\n Called by the "repr()" built-in function to compute the "official"\n string representation of an object. If at all possible, this\n should look like a valid Python expression that could be used to\n recreate an object with the same value (given an appropriate\n environment). If this is not possible, a string of the form\n "<...some useful description...>" should be returned. The return\n value must be a string object. If a class defines "__repr__()" but\n not "__str__()", then "__repr__()" is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by "str(object)" and the built-in functions "format()" and\n "print()" to compute the "informal" or nicely printable string\n representation of an object. The return value must be a *string*\n object.\n\n This method differs from "object.__repr__()" in that there is no\n expectation that "__str__()" return a valid Python expression: a\n more convenient or concise representation can be used.\n\n The default implementation defined by the built-in type "object"\n calls "object.__repr__()".\n\nobject.__bytes__(self)\n\n Called by "bytes()" to compute a byte-string representation of an\n object. This should return a "bytes" object.\n\nobject.__format__(self, format_spec)\n\n Called by the "format()" built-in function (and by extension, the\n "str.format()" method of class "str") to produce a "formatted"\n string representation of an object. The "format_spec" argument is a\n string that contains a description of the formatting options\n desired. The interpretation of the "format_spec" argument is up to\n the type implementing "__format__()", however most classes will\n either delegate formatting to one of the built-in types, or use a\n similar formatting option syntax.\n\n See *Format Specification Mini-Language* for a description of the\n standard formatting syntax.\n\n The return value must be a string object.\n\n Changed in version 3.4: The __format__ method of "object" itself\n raises a "TypeError" if passed any non-empty string.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n These are the so-called "rich comparison" methods. The\n correspondence between operator symbols and method names is as\n follows: "xy" calls\n "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n\n A rich comparison method may return the singleton "NotImplemented"\n if it does not implement the operation for a given pair of\n arguments. By convention, "False" and "True" are returned for a\n successful comparison. However, these methods can return any value,\n so if the comparison operator is used in a Boolean context (e.g.,\n in the condition of an "if" statement), Python will call "bool()"\n on the value to determine if the result is true or false.\n\n By default, "__ne__()" delegates to "__eq__()" and inverts the\n result unless it is "NotImplemented". There are no other implied\n relationships among the comparison operators, for example, the\n truth of "(x.__hash__".\n\n If a class that does not override "__eq__()" wishes to suppress\n hash support, it should include "__hash__ = None" in the class\n definition. A class which defines its own "__hash__()" that\n explicitly raises a "TypeError" would be incorrectly identified as\n hashable by an "isinstance(obj, collections.Hashable)" call.\n\n Note: By default, the "__hash__()" values of str, bytes and\n datetime objects are "salted" with an unpredictable random value.\n Although they remain constant within an individual Python\n process, they are not predictable between repeated invocations of\n Python.This is intended to provide protection against a denial-\n of-service caused by carefully-chosen inputs that exploit the\n worst case performance of a dict insertion, O(n^2) complexity.\n See http://www.ocert.org/advisories/ocert-2011-003.html for\n details.Changing hash values affects the iteration order of\n dicts, sets and other mappings. Python has never made guarantees\n about this ordering (and it typically varies between 32-bit and\n 64-bit builds).See also "PYTHONHASHSEED".\n\n Changed in version 3.3: Hash randomization is enabled by default.\n\nobject.__bool__(self)\n\n Called to implement truth value testing and the built-in operation\n "bool()"; should return "False" or "True". When this method is not\n defined, "__len__()" is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither "__len__()" nor "__bool__()", all its instances are\n considered true.\n\n\nCustomizing attribute access\n============================\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of "x.name") for\nclass instances.\n\nobject.__getattr__(self, name)\n\n Called when an attribute lookup has not found the attribute in the\n usual places (i.e. it is not an instance attribute nor is it found\n in the class tree for "self"). "name" is the attribute name. This\n method should return the (computed) attribute value or raise an\n "AttributeError" exception.\n\n Note that if the attribute is found through the normal mechanism,\n "__getattr__()" is not called. (This is an intentional asymmetry\n between "__getattr__()" and "__setattr__()".) This is done both for\n efficiency reasons and because otherwise "__getattr__()" would have\n no way to access other attributes of the instance. Note that at\n least for instance variables, you can fake total control by not\n inserting any values in the instance attribute dictionary (but\n instead inserting them in another object). See the\n "__getattribute__()" method below for a way to actually get total\n control over attribute access.\n\nobject.__getattribute__(self, name)\n\n Called unconditionally to implement attribute accesses for\n instances of the class. If the class also defines "__getattr__()",\n the latter will not be called unless "__getattribute__()" either\n calls it explicitly or raises an "AttributeError". This method\n should return the (computed) attribute value or raise an\n "AttributeError" exception. In order to avoid infinite recursion in\n this method, its implementation should always call the base class\n method with the same name to access any attributes it needs, for\n example, "object.__getattribute__(self, name)".\n\n Note: This method may still be bypassed when looking up special\n methods as the result of implicit invocation via language syntax\n or built-in functions. See *Special method lookup*.\n\nobject.__setattr__(self, name, value)\n\n Called when an attribute assignment is attempted. This is called\n instead of the normal mechanism (i.e. store the value in the\n instance dictionary). *name* is the attribute name, *value* is the\n value to be assigned to it.\n\n If "__setattr__()" wants to assign to an instance attribute, it\n should call the base class method with the same name, for example,\n "object.__setattr__(self, name, value)".\n\nobject.__delattr__(self, name)\n\n Like "__setattr__()" but for attribute deletion instead of\n assignment. This should only be implemented if "del obj.name" is\n meaningful for the object.\n\nobject.__dir__(self)\n\n Called when "dir()" is called on the object. A sequence must be\n returned. "dir()" converts the returned sequence to a list and\n sorts it.\n\n\nImplementing Descriptors\n------------------------\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in an\n*owner* class (the descriptor must be in either the owner\'s class\ndictionary or in the class dictionary for one of its parents). In the\nexamples below, "the attribute" refers to the attribute whose name is\nthe key of the property in the owner class\' "__dict__".\n\nobject.__get__(self, instance, owner)\n\n Called to get the attribute of the owner class (class attribute\n access) or of an instance of that class (instance attribute\n access). *owner* is always the owner class, while *instance* is the\n instance that the attribute was accessed through, or "None" when\n the attribute is accessed through the *owner*. This method should\n return the (computed) attribute value or raise an "AttributeError"\n exception.\n\nobject.__set__(self, instance, value)\n\n Called to set the attribute on an instance *instance* of the owner\n class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n Called to delete the attribute on an instance *instance* of the\n owner class.\n\nThe attribute "__objclass__" is interpreted by the "inspect" module as\nspecifying the class where this object was defined (setting this\nappropriately can assist in runtime introspection of dynamic class\nattributes). For callables, it may indicate that an instance of the\ngiven type (or a subclass) is expected or required as the first\npositional argument (for example, CPython sets this attribute for\nunbound methods that are implemented in C).\n\n\nInvoking Descriptors\n--------------------\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol: "__get__()", "__set__()", and\n"__delete__()". If any of those methods are defined for an object, it\nis said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, "a.x" has a\nlookup chain starting with "a.__dict__[\'x\']", then\n"type(a).__dict__[\'x\']", and continuing through the base classes of\n"type(a)" excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead. Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called.\n\nThe starting point for descriptor invocation is a binding, "a.x". How\nthe arguments are assembled depends on "a":\n\nDirect Call\n The simplest and least common call is when user code directly\n invokes a descriptor method: "x.__get__(a)".\n\nInstance Binding\n If binding to an object instance, "a.x" is transformed into the\n call: "type(a).__dict__[\'x\'].__get__(a, type(a))".\n\nClass Binding\n If binding to a class, "A.x" is transformed into the call:\n "A.__dict__[\'x\'].__get__(None, A)".\n\nSuper Binding\n If "a" is an instance of "super", then the binding "super(B,\n obj).m()" searches "obj.__class__.__mro__" for the base class "A"\n immediately preceding "B" and then invokes the descriptor with the\n call: "A.__dict__[\'m\'].__get__(obj, obj.__class__)".\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined. A descriptor can define\nany combination of "__get__()", "__set__()" and "__delete__()". If it\ndoes not define "__get__()", then accessing the attribute will return\nthe descriptor object itself unless there is a value in the object\'s\ninstance dictionary. If the descriptor defines "__set__()" and/or\n"__delete__()", it is a data descriptor; if it defines neither, it is\na non-data descriptor. Normally, data descriptors define both\n"__get__()" and "__set__()", while non-data descriptors have just the\n"__get__()" method. Data descriptors with "__set__()" and "__get__()"\ndefined always override a redefinition in an instance dictionary. In\ncontrast, non-data descriptors can be overridden by instances.\n\nPython methods (including "staticmethod()" and "classmethod()") are\nimplemented as non-data descriptors. Accordingly, instances can\nredefine and override methods. This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe "property()" function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n---------\n\nBy default, instances of classes have a dictionary for attribute\nstorage. This wastes space for objects having very few instance\nvariables. The space consumption can become acute when creating large\nnumbers of instances.\n\nThe default can be overridden by defining *__slots__* in a class\ndefinition. The *__slots__* declaration takes a sequence of instance\nvariables and reserves just enough space in each instance to hold a\nvalue for each variable. Space is saved because *__dict__* is not\ncreated for each instance.\n\nobject.__slots__\n\n This class variable can be assigned a string, iterable, or sequence\n of strings with variable names used by instances. *__slots__*\n reserves space for the declared variables and prevents the\n automatic creation of *__dict__* and *__weakref__* for each\n instance.\n\n\nNotes on using *__slots__*\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n attribute of that class will always be accessible, so a *__slots__*\n definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n variables not listed in the *__slots__* definition. Attempts to\n assign to an unlisted variable name raises "AttributeError". If\n dynamic assignment of new variables is desired, then add\n "\'__dict__\'" to the sequence of strings in the *__slots__*\n declaration.\n\n* Without a *__weakref__* variable for each instance, classes\n defining *__slots__* do not support weak references to its\n instances. If weak reference support is needed, then add\n "\'__weakref__\'" to the sequence of strings in the *__slots__*\n declaration.\n\n* *__slots__* are implemented at the class level by creating\n descriptors (*Implementing Descriptors*) for each variable name. As\n a result, class attributes cannot be used to set default values for\n instance variables defined by *__slots__*; otherwise, the class\n attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n where it is defined. As a result, subclasses will have a *__dict__*\n unless they also define *__slots__* (which must only contain names\n of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the\n instance variable defined by the base class slot is inaccessible\n (except by retrieving its descriptor directly from the base class).\n This renders the meaning of the program undefined. In the future, a\n check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n "variable-length" built-in types such as "int", "bytes" and "tuple".\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings\n may also be used; however, in the future, special meaning may be\n assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n *__slots__*.\n\n\nCustomizing class creation\n==========================\n\nBy default, classes are constructed using "type()". The class body is\nexecuted in a new namespace and the class name is bound locally to the\nresult of "type(name, bases, namespace)".\n\nThe class creation process can be customized by passing the\n"metaclass" keyword argument in the class definition line, or by\ninheriting from an existing class that included such an argument. In\nthe following example, both "MyClass" and "MySubclass" are instances\nof "Meta":\n\n class Meta(type):\n pass\n\n class MyClass(metaclass=Meta):\n pass\n\n class MySubclass(MyClass):\n pass\n\nAny other keyword arguments that are specified in the class definition\nare passed through to all metaclass operations described below.\n\nWhen a class definition is executed, the following steps occur:\n\n* the appropriate metaclass is determined\n\n* the class namespace is prepared\n\n* the class body is executed\n\n* the class object is created\n\n\nDetermining the appropriate metaclass\n-------------------------------------\n\nThe appropriate metaclass for a class definition is determined as\nfollows:\n\n* if no bases and no explicit metaclass are given, then "type()" is\n used\n\n* if an explicit metaclass is given and it is *not* an instance of\n "type()", then it is used directly as the metaclass\n\n* if an instance of "type()" is given as the explicit metaclass, or\n bases are defined, then the most derived metaclass is used\n\nThe most derived metaclass is selected from the explicitly specified\nmetaclass (if any) and the metaclasses (i.e. "type(cls)") of all\nspecified base classes. The most derived metaclass is one which is a\nsubtype of *all* of these candidate metaclasses. If none of the\ncandidate metaclasses meets that criterion, then the class definition\nwill fail with "TypeError".\n\n\nPreparing the class namespace\n-----------------------------\n\nOnce the appropriate metaclass has been identified, then the class\nnamespace is prepared. If the metaclass has a "__prepare__" attribute,\nit is called as "namespace = metaclass.__prepare__(name, bases,\n**kwds)" (where the additional keyword arguments, if any, come from\nthe class definition).\n\nIf the metaclass has no "__prepare__" attribute, then the class\nnamespace is initialised as an empty "dict()" instance.\n\nSee also: **PEP 3115** - Metaclasses in Python 3000\n\n Introduced the "__prepare__" namespace hook\n\n\nExecuting the class body\n------------------------\n\nThe class body is executed (approximately) as "exec(body, globals(),\nnamespace)". The key difference from a normal call to "exec()" is that\nlexical scoping allows the class body (including any methods) to\nreference names from the current and outer scopes when the class\ndefinition occurs inside a function.\n\nHowever, even when the class definition occurs inside the function,\nmethods defined inside the class still cannot see names defined at the\nclass scope. Class variables must be accessed through the first\nparameter of instance or class methods, and cannot be accessed at all\nfrom static methods.\n\n\nCreating the class object\n-------------------------\n\nOnce the class namespace has been populated by executing the class\nbody, the class object is created by calling "metaclass(name, bases,\nnamespace, **kwds)" (the additional keywords passed here are the same\nas those passed to "__prepare__").\n\nThis class object is the one that will be referenced by the zero-\nargument form of "super()". "__class__" is an implicit closure\nreference created by the compiler if any methods in a class body refer\nto either "__class__" or "super". This allows the zero argument form\nof "super()" to correctly identify the class being defined based on\nlexical scoping, while the class or instance that was used to make the\ncurrent call is identified based on the first argument passed to the\nmethod.\n\nAfter the class object is created, it is passed to the class\ndecorators included in the class definition (if any) and the resulting\nobject is bound in the local namespace as the defined class.\n\nWhen a new class is created by "type.__new__", the object provided as\nthe namespace parameter is copied to a standard Python dictionary and\nthe original object is discarded. The new copy becomes the "__dict__"\nattribute of the class object.\n\nSee also: **PEP 3135** - New super\n\n Describes the implicit "__class__" closure reference\n\n\nMetaclass example\n-----------------\n\nThe potential uses for metaclasses are boundless. Some ideas that have\nbeen explored include logging, interface checking, automatic\ndelegation, automatic property creation, proxies, frameworks, and\nautomatic resource locking/synchronization.\n\nHere is an example of a metaclass that uses an\n"collections.OrderedDict" to remember the order that class variables\nare defined:\n\n class OrderedClass(type):\n\n @classmethod\n def __prepare__(metacls, name, bases, **kwds):\n return collections.OrderedDict()\n\n def __new__(cls, name, bases, namespace, **kwds):\n result = type.__new__(cls, name, bases, dict(namespace))\n result.members = tuple(namespace)\n return result\n\n class A(metaclass=OrderedClass):\n def one(self): pass\n def two(self): pass\n def three(self): pass\n def four(self): pass\n\n >>> A.members\n (\'__module__\', \'one\', \'two\', \'three\', \'four\')\n\nWhen the class definition for *A* gets executed, the process begins\nwith calling the metaclass\'s "__prepare__()" method which returns an\nempty "collections.OrderedDict". That mapping records the methods and\nattributes of *A* as they are defined within the body of the class\nstatement. Once those definitions are executed, the ordered dictionary\nis fully populated and the metaclass\'s "__new__()" method gets\ninvoked. That method builds the new type and it saves the ordered\ndictionary keys in an attribute called "members".\n\n\nCustomizing instance and subclass checks\n========================================\n\nThe following methods are used to override the default behavior of the\n"isinstance()" and "issubclass()" built-in functions.\n\nIn particular, the metaclass "abc.ABCMeta" implements these methods in\norder to allow the addition of Abstract Base Classes (ABCs) as\n"virtual base classes" to any class or type (including built-in\ntypes), including other ABCs.\n\nclass.__instancecheck__(self, instance)\n\n Return true if *instance* should be considered a (direct or\n indirect) instance of *class*. If defined, called to implement\n "isinstance(instance, class)".\n\nclass.__subclasscheck__(self, subclass)\n\n Return true if *subclass* should be considered a (direct or\n indirect) subclass of *class*. If defined, called to implement\n "issubclass(subclass, class)".\n\nNote that these methods are looked up on the type (metaclass) of a\nclass. They cannot be defined as class methods in the actual class.\nThis is consistent with the lookup of special methods that are called\non instances, only in this case the instance is itself a class.\n\nSee also: **PEP 3119** - Introducing Abstract Base Classes\n\n Includes the specification for customizing "isinstance()" and\n "issubclass()" behavior through "__instancecheck__()" and\n "__subclasscheck__()", with motivation for this functionality in\n the context of adding Abstract Base Classes (see the "abc"\n module) to the language.\n\n\nEmulating callable objects\n==========================\n\nobject.__call__(self[, args...])\n\n Called when the instance is "called" as a function; if this method\n is defined, "x(arg1, arg2, ...)" is a shorthand for\n "x.__call__(arg1, arg2, ...)".\n\n\nEmulating container types\n=========================\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well. The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which "0 <= k < N" where\n*N* is the length of the sequence, or slice objects, which define a\nrange of items. It is also recommended that mappings provide the\nmethods "keys()", "values()", "items()", "get()", "clear()",\n"setdefault()", "pop()", "popitem()", "copy()", and "update()"\nbehaving similar to those for Python\'s standard dictionary objects.\nThe "collections" module provides a "MutableMapping" abstract base\nclass to help create those methods from a base set of "__getitem__()",\n"__setitem__()", "__delitem__()", and "keys()". Mutable sequences\nshould provide methods "append()", "count()", "index()", "extend()",\n"insert()", "pop()", "remove()", "reverse()" and "sort()", like Python\nstandard list objects. Finally, sequence types should implement\naddition (meaning concatenation) and multiplication (meaning\nrepetition) by defining the methods "__add__()", "__radd__()",\n"__iadd__()", "__mul__()", "__rmul__()" and "__imul__()" described\nbelow; they should not define other numerical operators. It is\nrecommended that both mappings and sequences implement the\n"__contains__()" method to allow efficient use of the "in" operator;\nfor mappings, "in" should search the mapping\'s keys; for sequences, it\nshould search through the values. It is further recommended that both\nmappings and sequences implement the "__iter__()" method to allow\nefficient iteration through the container; for mappings, "__iter__()"\nshould be the same as "keys()"; for sequences, it should iterate\nthrough the values.\n\nobject.__len__(self)\n\n Called to implement the built-in function "len()". Should return\n the length of the object, an integer ">=" 0. Also, an object that\n doesn\'t define a "__bool__()" method and whose "__len__()" method\n returns zero is considered to be false in a Boolean context.\n\nobject.__length_hint__(self)\n\n Called to implement "operator.length_hint()". Should return an\n estimated length for the object (which may be greater or less than\n the actual length). The length must be an integer ">=" 0. This\n method is purely an optimization and is never required for\n correctness.\n\n New in version 3.4.\n\nNote: Slicing is done exclusively with the following three methods.\n A call like\n\n a[1:2] = b\n\n is translated to\n\n a[slice(1, 2, None)] = b\n\n and so forth. Missing slice items are always filled in with "None".\n\nobject.__getitem__(self, key)\n\n Called to implement evaluation of "self[key]". For sequence types,\n the accepted keys should be integers and slice objects. Note that\n the special interpretation of negative indexes (if the class wishes\n to emulate a sequence type) is up to the "__getitem__()" method. If\n *key* is of an inappropriate type, "TypeError" may be raised; if of\n a value outside the set of indexes for the sequence (after any\n special interpretation of negative values), "IndexError" should be\n raised. For mapping types, if *key* is missing (not in the\n container), "KeyError" should be raised.\n\n Note: "for" loops expect that an "IndexError" will be raised for\n illegal indexes to allow proper detection of the end of the\n sequence.\n\nobject.__missing__(self, key)\n\n Called by "dict"."__getitem__()" to implement "self[key]" for dict\n subclasses when key is not in the dictionary.\n\nobject.__setitem__(self, key, value)\n\n Called to implement assignment to "self[key]". Same note as for\n "__getitem__()". This should only be implemented for mappings if\n the objects support changes to the values for keys, or if new keys\n can be added, or for sequences if elements can be replaced. The\n same exceptions should be raised for improper *key* values as for\n the "__getitem__()" method.\n\nobject.__delitem__(self, key)\n\n Called to implement deletion of "self[key]". Same note as for\n "__getitem__()". This should only be implemented for mappings if\n the objects support removal of keys, or for sequences if elements\n can be removed from the sequence. The same exceptions should be\n raised for improper *key* values as for the "__getitem__()" method.\n\nobject.__iter__(self)\n\n This method is called when an iterator is required for a container.\n This method should return a new iterator object that can iterate\n over all the objects in the container. For mappings, it should\n iterate over the keys of the container.\n\n Iterator objects also need to implement this method; they are\n required to return themselves. For more information on iterator\n objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n Called (if present) by the "reversed()" built-in to implement\n reverse iteration. It should return a new iterator object that\n iterates over all the objects in the container in reverse order.\n\n If the "__reversed__()" method is not provided, the "reversed()"\n built-in will fall back to using the sequence protocol ("__len__()"\n and "__getitem__()"). Objects that support the sequence protocol\n should only provide "__reversed__()" if they can provide an\n implementation that is more efficient than the one provided by\n "reversed()".\n\nThe membership test operators ("in" and "not in") are normally\nimplemented as an iteration through a sequence. However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n Called to implement membership test operators. Should return true\n if *item* is in *self*, false otherwise. For mapping objects, this\n should consider the keys of the mapping rather than the values or\n the key-item pairs.\n\n For objects that don\'t define "__contains__()", the membership test\n first tries iteration via "__iter__()", then the old sequence\n iteration protocol via "__getitem__()", see *this section in the\n language reference*.\n\n\nEmulating numeric types\n=======================\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__matmul__(self, other)\nobject.__truediv__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations ("+", "-", "*", "@", "/", "//", "%", "divmod()",\n "pow()", "**", "<<", ">>", "&", "^", "|"). For instance, to\n evaluate the expression "x + y", where *x* is an instance of a\n class that has an "__add__()" method, "x.__add__(y)" is called.\n The "__divmod__()" method should be the equivalent to using\n "__floordiv__()" and "__mod__()"; it should not be related to\n "__truediv__()". Note that "__pow__()" should be defined to accept\n an optional third argument if the ternary version of the built-in\n "pow()" function is to be supported.\n\n If one of those methods does not support the operation with the\n supplied arguments, it should return "NotImplemented".\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rmatmul__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations ("+", "-", "*", "@", "/", "//", "%", "divmod()",\n "pow()", "**", "<<", ">>", "&", "^", "|") with reflected (swapped)\n operands. These functions are only called if the left operand does\n not support the corresponding operation and the operands are of\n different types. [2] For instance, to evaluate the expression "x -\n y", where *y* is an instance of a class that has an "__rsub__()"\n method, "y.__rsub__(x)" is called if "x.__sub__(y)" returns\n *NotImplemented*.\n\n Note that ternary "pow()" will not try calling "__rpow__()" (the\n coercion rules would become too complicated).\n\n Note: If the right operand\'s type is a subclass of the left\n operand\'s type and that subclass provides the reflected method\n for the operation, this method will be called before the left\n operand\'s non-reflected method. This behavior allows subclasses\n to override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__imatmul__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n These methods are called to implement the augmented arithmetic\n assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", "**=",\n "<<=", ">>=", "&=", "^=", "|="). These methods should attempt to\n do the operation in-place (modifying *self*) and return the result\n (which could be, but does not have to be, *self*). If a specific\n method is not defined, the augmented assignment falls back to the\n normal methods. For instance, if *x* is an instance of a class\n with an "__iadd__()" method, "x += y" is equivalent to "x =\n x.__iadd__(y)" . Otherwise, "x.__add__(y)" and "y.__radd__(x)" are\n considered, as with the evaluation of "x + y". In certain\n situations, augmented assignment can result in unexpected errors\n (see *Why does a_tuple[i] += [\'item\'] raise an exception when the\n addition works?*), but this behavior is in fact part of the data\n model.\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n Called to implement the unary arithmetic operations ("-", "+",\n "abs()" and "~").\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__float__(self)\nobject.__round__(self[, n])\n\n Called to implement the built-in functions "complex()", "int()",\n "float()" and "round()". Should return a value of the appropriate\n type.\n\nobject.__index__(self)\n\n Called to implement "operator.index()", and whenever Python needs\n to losslessly convert the numeric object to an integer object (such\n as in slicing, or in the built-in "bin()", "hex()" and "oct()"\n functions). Presence of this method indicates that the numeric\n object is an integer type. Must return an integer.\n\n Note: In order to have a coherent integer type class, when\n "__index__()" is defined "__int__()" should also be defined, and\n both should return the same value.\n\n\nWith Statement Context Managers\n===============================\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a "with" statement. The context manager\nhandles the entry into, and the exit from, the desired runtime context\nfor the execution of the block of code. Context managers are normally\ninvoked using the "with" statement (described in section *The with\nstatement*), but can also be used by directly invoking their methods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n Enter the runtime context related to this object. The "with"\n statement will bind this method\'s return value to the target(s)\n specified in the "as" clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n Exit the runtime context related to this object. The parameters\n describe the exception that caused the context to be exited. If the\n context was exited without an exception, all three arguments will\n be "None".\n\n If an exception is supplied, and the method wishes to suppress the\n exception (i.e., prevent it from being propagated), it should\n return a true value. Otherwise, the exception will be processed\n normally upon exit from this method.\n\n Note that "__exit__()" methods should not reraise the passed-in\n exception; this is the caller\'s responsibility.\n\nSee also: **PEP 343** - The "with" statement\n\n The specification, background, and examples for the Python "with"\n statement.\n\n\nSpecial method lookup\n=====================\n\nFor custom classes, implicit invocations of special methods are only\nguaranteed to work correctly if defined on an object\'s type, not in\nthe object\'s instance dictionary. That behaviour is the reason why\nthe following code raises an exception:\n\n >>> class C:\n ... pass\n ...\n >>> c = C()\n >>> c.__len__ = lambda: 5\n >>> len(c)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: object of type \'C\' has no len()\n\nThe rationale behind this behaviour lies with a number of special\nmethods such as "__hash__()" and "__repr__()" that are implemented by\nall objects, including type objects. If the implicit lookup of these\nmethods used the conventional lookup process, they would fail when\ninvoked on the type object itself:\n\n >>> 1 .__hash__() == hash(1)\n True\n >>> int.__hash__() == hash(int)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: descriptor \'__hash__\' of \'int\' object needs an argument\n\nIncorrectly attempting to invoke an unbound method of a class in this\nway is sometimes referred to as \'metaclass confusion\', and is avoided\nby bypassing the instance when looking up special methods:\n\n >>> type(1).__hash__(1) == hash(1)\n True\n >>> type(int).__hash__(int) == hash(int)\n True\n\nIn addition to bypassing any instance attributes in the interest of\ncorrectness, implicit special method lookup generally also bypasses\nthe "__getattribute__()" method even of the object\'s metaclass:\n\n >>> class Meta(type):\n ... def __getattribute__(*args):\n ... print("Metaclass getattribute invoked")\n ... return type.__getattribute__(*args)\n ...\n >>> class C(object, metaclass=Meta):\n ... def __len__(self):\n ... return 10\n ... def __getattribute__(*args):\n ... print("Class getattribute invoked")\n ... return object.__getattribute__(*args)\n ...\n >>> c = C()\n >>> c.__len__() # Explicit lookup via instance\n Class getattribute invoked\n 10\n >>> type(c).__len__(c) # Explicit lookup via type\n Metaclass getattribute invoked\n 10\n >>> len(c) # Implicit lookup\n 10\n\nBypassing the "__getattribute__()" machinery in this fashion provides\nsignificant scope for speed optimisations within the interpreter, at\nthe cost of some flexibility in the handling of special methods (the\nspecial method *must* be set on the class object itself in order to be\nconsistently invoked by the interpreter).\n', + 'string-methods': u'\nString Methods\n**************\n\nStrings implement all of the *common* sequence operations, along with\nthe additional methods described below.\n\nStrings also support two styles of string formatting, one providing a\nlarge degree of flexibility and customization (see "str.format()",\n*Format String Syntax* and *Custom String Formatting*) and the other\nbased on C "printf" style formatting that handles a narrower range of\ntypes and is slightly harder to use correctly, but is often faster for\nthe cases it can handle (*printf-style String Formatting*).\n\nThe *Text Processing Services* section of the standard library covers\na number of other modules that provide various text related utilities\n(including regular expression support in the "re" module).\n\nstr.capitalize()\n\n Return a copy of the string with its first character capitalized\n and the rest lowercased.\n\nstr.casefold()\n\n Return a casefolded copy of the string. Casefolded strings may be\n used for caseless matching.\n\n Casefolding is similar to lowercasing but more aggressive because\n it is intended to remove all case distinctions in a string. For\n example, the German lowercase letter "\'\xdf\'" is equivalent to ""ss"".\n Since it is already lowercase, "lower()" would do nothing to "\'\xdf\'";\n "casefold()" converts it to ""ss"".\n\n The casefolding algorithm is described in section 3.13 of the\n Unicode Standard.\n\n New in version 3.3.\n\nstr.center(width[, fillchar])\n\n Return centered in a string of length *width*. Padding is done\n using the specified *fillchar* (default is an ASCII space). The\n original string is returned if *width* is less than or equal to\n "len(s)".\n\nstr.count(sub[, start[, end]])\n\n Return the number of non-overlapping occurrences of substring *sub*\n in the range [*start*, *end*]. Optional arguments *start* and\n *end* are interpreted as in slice notation.\n\nstr.encode(encoding="utf-8", errors="strict")\n\n Return an encoded version of the string as a bytes object. Default\n encoding is "\'utf-8\'". *errors* may be given to set a different\n error handling scheme. The default for *errors* is "\'strict\'",\n meaning that encoding errors raise a "UnicodeError". Other possible\n values are "\'ignore\'", "\'replace\'", "\'xmlcharrefreplace\'",\n "\'backslashreplace\'" and any other name registered via\n "codecs.register_error()", see section *Error Handlers*. For a list\n of possible encodings, see section *Standard Encodings*.\n\n Changed in version 3.1: Support for keyword arguments added.\n\nstr.endswith(suffix[, start[, end]])\n\n Return "True" if the string ends with the specified *suffix*,\n otherwise return "False". *suffix* can also be a tuple of suffixes\n to look for. With optional *start*, test beginning at that\n position. With optional *end*, stop comparing at that position.\n\nstr.expandtabs(tabsize=8)\n\n Return a copy of the string where all tab characters are replaced\n by one or more spaces, depending on the current column and the\n given tab size. Tab positions occur every *tabsize* characters\n (default is 8, giving tab positions at columns 0, 8, 16 and so on).\n To expand the string, the current column is set to zero and the\n string is examined character by character. If the character is a\n tab ("\\t"), one or more space characters are inserted in the result\n until the current column is equal to the next tab position. (The\n tab character itself is not copied.) If the character is a newline\n ("\\n") or return ("\\r"), it is copied and the current column is\n reset to zero. Any other character is copied unchanged and the\n current column is incremented by one regardless of how the\n character is represented when printed.\n\n >>> \'01\\t012\\t0123\\t01234\'.expandtabs()\n \'01 012 0123 01234\'\n >>> \'01\\t012\\t0123\\t01234\'.expandtabs(4)\n \'01 012 0123 01234\'\n\nstr.find(sub[, start[, end]])\n\n Return the lowest index in the string where substring *sub* is\n found within the slice "s[start:end]". Optional arguments *start*\n and *end* are interpreted as in slice notation. Return "-1" if\n *sub* is not found.\n\n Note: The "find()" method should be used only if you need to know\n the position of *sub*. To check if *sub* is a substring or not,\n use the "in" operator:\n\n >>> \'Py\' in \'Python\'\n True\n\nstr.format(*args, **kwargs)\n\n Perform a string formatting operation. The string on which this\n method is called can contain literal text or replacement fields\n delimited by braces "{}". Each replacement field contains either\n the numeric index of a positional argument, or the name of a\n keyword argument. Returns a copy of the string where each\n replacement field is replaced with the string value of the\n corresponding argument.\n\n >>> "The sum of 1 + 2 is {0}".format(1+2)\n \'The sum of 1 + 2 is 3\'\n\n See *Format String Syntax* for a description of the various\n formatting options that can be specified in format strings.\n\nstr.format_map(mapping)\n\n Similar to "str.format(**mapping)", except that "mapping" is used\n directly and not copied to a "dict". This is useful if for example\n "mapping" is a dict subclass:\n\n >>> class Default(dict):\n ... def __missing__(self, key):\n ... return key\n ...\n >>> \'{name} was born in {country}\'.format_map(Default(name=\'Guido\'))\n \'Guido was born in country\'\n\n New in version 3.2.\n\nstr.index(sub[, start[, end]])\n\n Like "find()", but raise "ValueError" when the substring is not\n found.\n\nstr.isalnum()\n\n Return true if all characters in the string are alphanumeric and\n there is at least one character, false otherwise. A character "c"\n is alphanumeric if one of the following returns "True":\n "c.isalpha()", "c.isdecimal()", "c.isdigit()", or "c.isnumeric()".\n\nstr.isalpha()\n\n Return true if all characters in the string are alphabetic and\n there is at least one character, false otherwise. Alphabetic\n characters are those characters defined in the Unicode character\n database as "Letter", i.e., those with general category property\n being one of "Lm", "Lt", "Lu", "Ll", or "Lo". Note that this is\n different from the "Alphabetic" property defined in the Unicode\n Standard.\n\nstr.isdecimal()\n\n Return true if all characters in the string are decimal characters\n and there is at least one character, false otherwise. Decimal\n characters are those that can be used to form numbers in base 10,\n e.g. U+0660, ARABIC-INDIC DIGIT ZERO. Formally a decimal character\n is a character in the Unicode General Category "Nd".\n\nstr.isdigit()\n\n Return true if all characters in the string are digits and there is\n at least one character, false otherwise. Digits include decimal\n characters and digits that need special handling, such as the\n compatibility superscript digits. This covers digits which cannot\n be used to form numbers in base 10, like the Kharosthi numbers.\n Formally, a digit is a character that has the property value\n Numeric_Type=Digit or Numeric_Type=Decimal.\n\nstr.isidentifier()\n\n Return true if the string is a valid identifier according to the\n language definition, section *Identifiers and keywords*.\n\n Use "keyword.iskeyword()" to test for reserved identifiers such as\n "def" and "class".\n\nstr.islower()\n\n Return true if all cased characters [4] in the string are lowercase\n and there is at least one cased character, false otherwise.\n\nstr.isnumeric()\n\n Return true if all characters in the string are numeric characters,\n and there is at least one character, false otherwise. Numeric\n characters include digit characters, and all characters that have\n the Unicode numeric value property, e.g. U+2155, VULGAR FRACTION\n ONE FIFTH. Formally, numeric characters are those with the\n property value Numeric_Type=Digit, Numeric_Type=Decimal or\n Numeric_Type=Numeric.\n\nstr.isprintable()\n\n Return true if all characters in the string are printable or the\n string is empty, false otherwise. Nonprintable characters are\n those characters defined in the Unicode character database as\n "Other" or "Separator", excepting the ASCII space (0x20) which is\n considered printable. (Note that printable characters in this\n context are those which should not be escaped when "repr()" is\n invoked on a string. It has no bearing on the handling of strings\n written to "sys.stdout" or "sys.stderr".)\n\nstr.isspace()\n\n Return true if there are only whitespace characters in the string\n and there is at least one character, false otherwise. Whitespace\n characters are those characters defined in the Unicode character\n database as "Other" or "Separator" and those with bidirectional\n property being one of "WS", "B", or "S".\n\nstr.istitle()\n\n Return true if the string is a titlecased string and there is at\n least one character, for example uppercase characters may only\n follow uncased characters and lowercase characters only cased ones.\n Return false otherwise.\n\nstr.isupper()\n\n Return true if all cased characters [4] in the string are uppercase\n and there is at least one cased character, false otherwise.\n\nstr.join(iterable)\n\n Return a string which is the concatenation of the strings in the\n *iterable* *iterable*. A "TypeError" will be raised if there are\n any non-string values in *iterable*, including "bytes" objects.\n The separator between elements is the string providing this method.\n\nstr.ljust(width[, fillchar])\n\n Return the string left justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is an ASCII\n space). The original string is returned if *width* is less than or\n equal to "len(s)".\n\nstr.lower()\n\n Return a copy of the string with all the cased characters [4]\n converted to lowercase.\n\n The lowercasing algorithm used is described in section 3.13 of the\n Unicode Standard.\n\nstr.lstrip([chars])\n\n Return a copy of the string with leading characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or "None", the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a prefix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.lstrip()\n \'spacious \'\n >>> \'www.example.com\'.lstrip(\'cmowz.\')\n \'example.com\'\n\nstatic str.maketrans(x[, y[, z]])\n\n This static method returns a translation table usable for\n "str.translate()".\n\n If there is only one argument, it must be a dictionary mapping\n Unicode ordinals (integers) or characters (strings of length 1) to\n Unicode ordinals, strings (of arbitrary lengths) or "None".\n Character keys will then be converted to ordinals.\n\n If there are two arguments, they must be strings of equal length,\n and in the resulting dictionary, each character in x will be mapped\n to the character at the same position in y. If there is a third\n argument, it must be a string, whose characters will be mapped to\n "None" in the result.\n\nstr.partition(sep)\n\n Split the string at the first occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing the string itself, followed by\n two empty strings.\n\nstr.replace(old, new[, count])\n\n Return a copy of the string with all occurrences of substring *old*\n replaced by *new*. If the optional argument *count* is given, only\n the first *count* occurrences are replaced.\n\nstr.rfind(sub[, start[, end]])\n\n Return the highest index in the string where substring *sub* is\n found, such that *sub* is contained within "s[start:end]".\n Optional arguments *start* and *end* are interpreted as in slice\n notation. Return "-1" on failure.\n\nstr.rindex(sub[, start[, end]])\n\n Like "rfind()" but raises "ValueError" when the substring *sub* is\n not found.\n\nstr.rjust(width[, fillchar])\n\n Return the string right justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is an ASCII\n space). The original string is returned if *width* is less than or\n equal to "len(s)".\n\nstr.rpartition(sep)\n\n Split the string at the last occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing two empty strings, followed by\n the string itself.\n\nstr.rsplit(sep=None, maxsplit=-1)\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit* splits\n are done, the *rightmost* ones. If *sep* is not specified or\n "None", any whitespace string is a separator. Except for splitting\n from the right, "rsplit()" behaves like "split()" which is\n described in detail below.\n\nstr.rstrip([chars])\n\n Return a copy of the string with trailing characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or "None", the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a suffix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.rstrip()\n \' spacious\'\n >>> \'mississippi\'.rstrip(\'ipz\')\n \'mississ\'\n\nstr.split(sep=None, maxsplit=-1)\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit*\n splits are done (thus, the list will have at most "maxsplit+1"\n elements). If *maxsplit* is not specified or "-1", then there is\n no limit on the number of splits (all possible splits are made).\n\n If *sep* is given, consecutive delimiters are not grouped together\n and are deemed to delimit empty strings (for example,\n "\'1,,2\'.split(\',\')" returns "[\'1\', \'\', \'2\']"). The *sep* argument\n may consist of multiple characters (for example,\n "\'1<>2<>3\'.split(\'<>\')" returns "[\'1\', \'2\', \'3\']"). Splitting an\n empty string with a specified separator returns "[\'\']".\n\n For example:\n\n >>> \'1,2,3\'.split(\',\')\n [\'1\', \'2\', \'3\']\n >>> \'1,2,3\'.split(\',\', maxsplit=1)\n [\'1\', \'2,3\']\n >>> \'1,2,,3,\'.split(\',\')\n [\'1\', \'2\', \'\', \'3\', \'\']\n\n If *sep* is not specified or is "None", a different splitting\n algorithm is applied: runs of consecutive whitespace are regarded\n as a single separator, and the result will contain no empty strings\n at the start or end if the string has leading or trailing\n whitespace. Consequently, splitting an empty string or a string\n consisting of just whitespace with a "None" separator returns "[]".\n\n For example:\n\n >>> \'1 2 3\'.split()\n [\'1\', \'2\', \'3\']\n >>> \'1 2 3\'.split(maxsplit=1)\n [\'1\', \'2 3\']\n >>> \' 1 2 3 \'.split()\n [\'1\', \'2\', \'3\']\n\nstr.splitlines([keepends])\n\n Return a list of the lines in the string, breaking at line\n boundaries. Line breaks are not included in the resulting list\n unless *keepends* is given and true.\n\n This method splits on the following line boundaries. In\n particular, the boundaries are a superset of *universal newlines*.\n\n +-------------------------+-------------------------------+\n | Representation | Description |\n +=========================+===============================+\n | "\\n" | Line Feed |\n +-------------------------+-------------------------------+\n | "\\r" | Carriage Return |\n +-------------------------+-------------------------------+\n | "\\r\\n" | Carriage Return + Line Feed |\n +-------------------------+-------------------------------+\n | "\\v" or "\\x0b" | Line Tabulation |\n +-------------------------+-------------------------------+\n | "\\f" or "\\x0c" | Form Feed |\n +-------------------------+-------------------------------+\n | "\\x1c" | File Separator |\n +-------------------------+-------------------------------+\n | "\\x1d" | Group Separator |\n +-------------------------+-------------------------------+\n | "\\x1e" | Record Separator |\n +-------------------------+-------------------------------+\n | "\\x85" | Next Line (C1 Control Code) |\n +-------------------------+-------------------------------+\n | "\\u2028" | Line Separator |\n +-------------------------+-------------------------------+\n | "\\u2029" | Paragraph Separator |\n +-------------------------+-------------------------------+\n\n Changed in version 3.2: "\\v" and "\\f" added to list of line\n boundaries.\n\n For example:\n\n >>> \'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines()\n [\'ab c\', \'\', \'de fg\', \'kl\']\n >>> \'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines(keepends=True)\n [\'ab c\\n\', \'\\n\', \'de fg\\r\', \'kl\\r\\n\']\n\n Unlike "split()" when a delimiter string *sep* is given, this\n method returns an empty list for the empty string, and a terminal\n line break does not result in an extra line:\n\n >>> "".splitlines()\n []\n >>> "One line\\n".splitlines()\n [\'One line\']\n\n For comparison, "split(\'\\n\')" gives:\n\n >>> \'\'.split(\'\\n\')\n [\'\']\n >>> \'Two lines\\n\'.split(\'\\n\')\n [\'Two lines\', \'\']\n\nstr.startswith(prefix[, start[, end]])\n\n Return "True" if string starts with the *prefix*, otherwise return\n "False". *prefix* can also be a tuple of prefixes to look for.\n With optional *start*, test string beginning at that position.\n With optional *end*, stop comparing string at that position.\n\nstr.strip([chars])\n\n Return a copy of the string with the leading and trailing\n characters removed. The *chars* argument is a string specifying the\n set of characters to be removed. If omitted or "None", the *chars*\n argument defaults to removing whitespace. The *chars* argument is\n not a prefix or suffix; rather, all combinations of its values are\n stripped:\n\n >>> \' spacious \'.strip()\n \'spacious\'\n >>> \'www.example.com\'.strip(\'cmowz.\')\n \'example\'\n\n The outermost leading and trailing *chars* argument values are\n stripped from the string. Characters are removed from the leading\n end until reaching a string character that is not contained in the\n set of characters in *chars*. A similar action takes place on the\n trailing end. For example:\n\n >>> comment_string = \'#....... Section 3.2.1 Issue #32 .......\'\n >>> comment_string.strip(\'.#! \')\n \'Section 3.2.1 Issue #32\'\n\nstr.swapcase()\n\n Return a copy of the string with uppercase characters converted to\n lowercase and vice versa. Note that it is not necessarily true that\n "s.swapcase().swapcase() == s".\n\nstr.title()\n\n Return a titlecased version of the string where words start with an\n uppercase character and the remaining characters are lowercase.\n\n For example:\n\n >>> \'Hello world\'.title()\n \'Hello World\'\n\n The algorithm uses a simple language-independent definition of a\n word as groups of consecutive letters. The definition works in\n many contexts but it means that apostrophes in contractions and\n possessives form word boundaries, which may not be the desired\n result:\n\n >>> "they\'re bill\'s friends from the UK".title()\n "They\'Re Bill\'S Friends From The Uk"\n\n A workaround for apostrophes can be constructed using regular\n expressions:\n\n >>> import re\n >>> def titlecase(s):\n ... return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n ... lambda mo: mo.group(0)[0].upper() +\n ... mo.group(0)[1:].lower(),\n ... s)\n ...\n >>> titlecase("they\'re bill\'s friends.")\n "They\'re Bill\'s Friends."\n\nstr.translate(table)\n\n Return a copy of the string in which each character has been mapped\n through the given translation table. The table must be an object\n that implements indexing via "__getitem__()", typically a *mapping*\n or *sequence*. When indexed by a Unicode ordinal (an integer), the\n table object can do any of the following: return a Unicode ordinal\n or a string, to map the character to one or more other characters;\n return "None", to delete the character from the return string; or\n raise a "LookupError" exception, to map the character to itself.\n\n You can use "str.maketrans()" to create a translation map from\n character-to-character mappings in different formats.\n\n See also the "codecs" module for a more flexible approach to custom\n character mappings.\n\nstr.upper()\n\n Return a copy of the string with all the cased characters [4]\n converted to uppercase. Note that "str.upper().isupper()" might be\n "False" if "s" contains uncased characters or if the Unicode\n category of the resulting character(s) is not "Lu" (Letter,\n uppercase), but e.g. "Lt" (Letter, titlecase).\n\n The uppercasing algorithm used is described in section 3.13 of the\n Unicode Standard.\n\nstr.zfill(width)\n\n Return a copy of the string left filled with ASCII "\'0\'" digits to\n make a string of length *width*. A leading sign prefix\n ("\'+\'"/"\'-\'") is handled by inserting the padding *after* the sign\n character rather than before. The original string is returned if\n *width* is less than or equal to "len(s)".\n\n For example:\n\n >>> "42".zfill(5)\n \'00042\'\n >>> "-42".zfill(5)\n \'-0042\'\n', 'strings': u'\nString and Bytes literals\n*************************\n\nString literals are described by the following lexical definitions:\n\n stringliteral ::= [stringprefix](shortstring | longstring)\n stringprefix ::= "r" | "u" | "R" | "U"\n shortstring ::= "\'" shortstringitem* "\'" | \'"\' shortstringitem* \'"\'\n longstring ::= "\'\'\'" longstringitem* "\'\'\'" | \'"""\' longstringitem* \'"""\'\n shortstringitem ::= shortstringchar | stringescapeseq\n longstringitem ::= longstringchar | stringescapeseq\n shortstringchar ::= \n longstringchar ::= \n stringescapeseq ::= "\\" \n\n bytesliteral ::= bytesprefix(shortbytes | longbytes)\n bytesprefix ::= "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"\n shortbytes ::= "\'" shortbytesitem* "\'" | \'"\' shortbytesitem* \'"\'\n longbytes ::= "\'\'\'" longbytesitem* "\'\'\'" | \'"""\' longbytesitem* \'"""\'\n shortbytesitem ::= shortbyteschar | bytesescapeseq\n longbytesitem ::= longbyteschar | bytesescapeseq\n shortbyteschar ::= \n longbyteschar ::= \n bytesescapeseq ::= "\\" \n\nOne syntactic restriction not indicated by these productions is that\nwhitespace is not allowed between the "stringprefix" or "bytesprefix"\nand the rest of the literal. The source character set is defined by\nthe encoding declaration; it is UTF-8 if no encoding declaration is\ngiven in the source file; see section *Encoding declarations*.\n\nIn plain English: Both types of literals can be enclosed in matching\nsingle quotes ("\'") or double quotes ("""). They can also be enclosed\nin matching groups of three single or double quotes (these are\ngenerally referred to as *triple-quoted strings*). The backslash\n("\\") character is used to escape characters that otherwise have a\nspecial meaning, such as newline, backslash itself, or the quote\ncharacter.\n\nBytes literals are always prefixed with "\'b\'" or "\'B\'"; they produce\nan instance of the "bytes" type instead of the "str" type. They may\nonly contain ASCII characters; bytes with a numeric value of 128 or\ngreater must be expressed with escapes.\n\nAs of Python 3.3 it is possible again to prefix string literals with a\n"u" prefix to simplify maintenance of dual 2.x and 3.x codebases.\n\nBoth string and bytes literals may optionally be prefixed with a\nletter "\'r\'" or "\'R\'"; such strings are called *raw strings* and treat\nbackslashes as literal characters. As a result, in string literals,\n"\'\\U\'" and "\'\\u\'" escapes in raw strings are not treated specially.\nGiven that Python 2.x\'s raw unicode literals behave differently than\nPython 3.x\'s the "\'ur\'" syntax is not supported.\n\nNew in version 3.3: The "\'rb\'" prefix of raw bytes literals has been\nadded as a synonym of "\'br\'".\n\nNew in version 3.3: Support for the unicode legacy literal\n("u\'value\'") was reintroduced to simplify the maintenance of dual\nPython 2.x and 3.x codebases. See **PEP 414** for more information.\n\nIn triple-quoted literals, unescaped newlines and quotes are allowed\n(and are retained), except that three unescaped quotes in a row\nterminate the literal. (A "quote" is the character used to open the\nliteral, i.e. either "\'" or """.)\n\nUnless an "\'r\'" or "\'R\'" prefix is present, escape sequences in string\nand bytes literals are interpreted according to rules similar to those\nused by Standard C. The recognized escape sequences are:\n\n+-------------------+-----------------------------------+---------+\n| Escape Sequence | Meaning | Notes |\n+===================+===================================+=========+\n| "\\newline" | Backslash and newline ignored | |\n+-------------------+-----------------------------------+---------+\n| "\\\\" | Backslash ("\\") | |\n+-------------------+-----------------------------------+---------+\n| "\\\'" | Single quote ("\'") | |\n+-------------------+-----------------------------------+---------+\n| "\\"" | Double quote (""") | |\n+-------------------+-----------------------------------+---------+\n| "\\a" | ASCII Bell (BEL) | |\n+-------------------+-----------------------------------+---------+\n| "\\b" | ASCII Backspace (BS) | |\n+-------------------+-----------------------------------+---------+\n| "\\f" | ASCII Formfeed (FF) | |\n+-------------------+-----------------------------------+---------+\n| "\\n" | ASCII Linefeed (LF) | |\n+-------------------+-----------------------------------+---------+\n| "\\r" | ASCII Carriage Return (CR) | |\n+-------------------+-----------------------------------+---------+\n| "\\t" | ASCII Horizontal Tab (TAB) | |\n+-------------------+-----------------------------------+---------+\n| "\\v" | ASCII Vertical Tab (VT) | |\n+-------------------+-----------------------------------+---------+\n| "\\ooo" | Character with octal value *ooo* | (1,3) |\n+-------------------+-----------------------------------+---------+\n| "\\xhh" | Character with hex value *hh* | (2,3) |\n+-------------------+-----------------------------------+---------+\n\nEscape sequences only recognized in string literals are:\n\n+-------------------+-----------------------------------+---------+\n| Escape Sequence | Meaning | Notes |\n+===================+===================================+=========+\n| "\\N{name}" | Character named *name* in the | (4) |\n| | Unicode database | |\n+-------------------+-----------------------------------+---------+\n| "\\uxxxx" | Character with 16-bit hex value | (5) |\n| | *xxxx* | |\n+-------------------+-----------------------------------+---------+\n| "\\Uxxxxxxxx" | Character with 32-bit hex value | (6) |\n| | *xxxxxxxx* | |\n+-------------------+-----------------------------------+---------+\n\nNotes:\n\n1. As in Standard C, up to three octal digits are accepted.\n\n2. Unlike in Standard C, exactly two hex digits are required.\n\n3. In a bytes literal, hexadecimal and octal escapes denote the\n byte with the given value. In a string literal, these escapes\n denote a Unicode character with the given value.\n\n4. Changed in version 3.3: Support for name aliases [1] has been\n added.\n\n5. Exactly four hex digits are required.\n\n6. Any Unicode character can be encoded this way. Exactly eight\n hex digits are required.\n\nUnlike Standard C, all unrecognized escape sequences are left in the\nstring unchanged, i.e., *the backslash is left in the result*. (This\nbehavior is useful when debugging: if an escape sequence is mistyped,\nthe resulting output is more easily recognized as broken.) It is also\nimportant to note that the escape sequences only recognized in string\nliterals fall into the category of unrecognized escapes for bytes\nliterals.\n\nEven in a raw literal, quotes can be escaped with a backslash, but the\nbackslash remains in the result; for example, "r"\\""" is a valid\nstring literal consisting of two characters: a backslash and a double\nquote; "r"\\"" is not a valid string literal (even a raw string cannot\nend in an odd number of backslashes). Specifically, *a raw literal\ncannot end in a single backslash* (since the backslash would escape\nthe following quote character). Note also that a single backslash\nfollowed by a newline is interpreted as those two characters as part\nof the literal, *not* as a line continuation.\n', 'subscriptions': u'\nSubscriptions\n*************\n\nA subscription selects an item of a sequence (string, tuple or list)\nor mapping (dictionary) object:\n\n subscription ::= primary "[" expression_list "]"\n\nThe primary must evaluate to an object that supports subscription\n(lists or dictionaries for example). User-defined objects can support\nsubscription by defining a "__getitem__()" method.\n\nFor built-in objects, there are two types of objects that support\nsubscription:\n\nIf the primary is a mapping, the expression list must evaluate to an\nobject whose value is one of the keys of the mapping, and the\nsubscription selects the value in the mapping that corresponds to that\nkey. (The expression list is a tuple except if it has exactly one\nitem.)\n\nIf the primary is a sequence, the expression (list) must evaluate to\nan integer or a slice (as discussed in the following section).\n\nThe formal syntax makes no special provision for negative indices in\nsequences; however, built-in sequences all provide a "__getitem__()"\nmethod that interprets negative indices by adding the length of the\nsequence to the index (so that "x[-1]" selects the last item of "x").\nThe resulting value must be a nonnegative integer less than the number\nof items in the sequence, and the subscription selects the item whose\nindex is that value (counting from zero). Since the support for\nnegative indices and slicing occurs in the object\'s "__getitem__()"\nmethod, subclasses overriding this method will need to explicitly add\nthat support.\n\nA string\'s items are characters. A character is not a separate data\ntype but a string of exactly one character.\n', 'truth': u'\nTruth Value Testing\n*******************\n\nAny object can be tested for truth value, for use in an "if" or\n"while" condition or as operand of the Boolean operations below. The\nfollowing values are considered false:\n\n* "None"\n\n* "False"\n\n* zero of any numeric type, for example, "0", "0.0", "0j".\n\n* any empty sequence, for example, "\'\'", "()", "[]".\n\n* any empty mapping, for example, "{}".\n\n* instances of user-defined classes, if the class defines a\n "__bool__()" or "__len__()" method, when that method returns the\n integer zero or "bool" value "False". [1]\n\nAll other values are considered true --- so objects of many types are\nalways true.\n\nOperations and built-in functions that have a Boolean result always\nreturn "0" or "False" for false and "1" or "True" for true, unless\notherwise stated. (Important exception: the Boolean operations "or"\nand "and" always return one of their operands.)\n', 'try': u'\nThe "try" statement\n*******************\n\nThe "try" statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n try_stmt ::= try1_stmt | try2_stmt\n try1_stmt ::= "try" ":" suite\n ("except" [expression ["as" identifier]] ":" suite)+\n ["else" ":" suite]\n ["finally" ":" suite]\n try2_stmt ::= "try" ":" suite\n "finally" ":" suite\n\nThe "except" clause(s) specify one or more exception handlers. When no\nexception occurs in the "try" clause, no exception handler is\nexecuted. When an exception occurs in the "try" suite, a search for an\nexception handler is started. This search inspects the except clauses\nin turn until one is found that matches the exception. An expression-\nless except clause, if present, must be last; it matches any\nexception. For an except clause with an expression, that expression\nis evaluated, and the clause matches the exception if the resulting\nobject is "compatible" with the exception. An object is compatible\nwith an exception if it is the class or a base class of the exception\nobject or a tuple containing an item compatible with the exception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire "try" statement raised\nthe exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified after the "as" keyword in that except clause, if\npresent, and the except clause\'s suite is executed. All except\nclauses must have an executable block. When the end of this block is\nreached, execution continues normally after the entire try statement.\n(This means that if two nested handlers exist for the same exception,\nand the exception occurs in the try clause of the inner handler, the\nouter handler will not handle the exception.)\n\nWhen an exception has been assigned using "as target", it is cleared\nat the end of the except clause. This is as if\n\n except E as N:\n foo\n\nwas translated to\n\n except E as N:\n try:\n foo\n finally:\n del N\n\nThis means the exception must be assigned to a different name to be\nable to refer to it after the except clause. Exceptions are cleared\nbecause with the traceback attached to them, they form a reference\ncycle with the stack frame, keeping all locals in that frame alive\nuntil the next garbage collection occurs.\n\nBefore an except clause\'s suite is executed, details about the\nexception are stored in the "sys" module and can be accessed via\n"sys.exc_info()". "sys.exc_info()" returns a 3-tuple consisting of the\nexception class, the exception instance and a traceback object (see\nsection *The standard type hierarchy*) identifying the point in the\nprogram where the exception occurred. "sys.exc_info()" values are\nrestored to their previous values (before the call) when returning\nfrom a function that handled an exception.\n\nThe optional "else" clause is executed if and when control flows off\nthe end of the "try" clause. [2] Exceptions in the "else" clause are\nnot handled by the preceding "except" clauses.\n\nIf "finally" is present, it specifies a \'cleanup\' handler. The "try"\nclause is executed, including any "except" and "else" clauses. If an\nexception occurs in any of the clauses and is not handled, the\nexception is temporarily saved. The "finally" clause is executed. If\nthere is a saved exception it is re-raised at the end of the "finally"\nclause. If the "finally" clause raises another exception, the saved\nexception is set as the context of the new exception. If the "finally"\nclause executes a "return" or "break" statement, the saved exception\nis discarded:\n\n >>> def f():\n ... try:\n ... 1/0\n ... finally:\n ... return 42\n ...\n >>> f()\n 42\n\nThe exception information is not available to the program during\nexecution of the "finally" clause.\n\nWhen a "return", "break" or "continue" statement is executed in the\n"try" suite of a "try"..."finally" statement, the "finally" clause is\nalso executed \'on the way out.\' A "continue" statement is illegal in\nthe "finally" clause. (The reason is a problem with the current\nimplementation --- this restriction may be lifted in the future).\n\nThe return value of a function is determined by the last "return"\nstatement executed. Since the "finally" clause always executes, a\n"return" statement executed in the "finally" clause will always be the\nlast one executed:\n\n >>> def foo():\n ... try:\n ... return \'try\'\n ... finally:\n ... return \'finally\'\n ...\n >>> foo()\n \'finally\'\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the "raise" statement to\ngenerate exceptions may be found in section *The raise statement*.\n', - 'types': u'\nThe standard type hierarchy\n***************************\n\nBelow is a list of the types that are built into Python. Extension\nmodules (written in C, Java, or other languages, depending on the\nimplementation) can define additional types. Future versions of\nPython may add types to the type hierarchy (e.g., rational numbers,\nefficiently stored arrays of integers, etc.), although such additions\nwill often be provided via the standard library instead.\n\nSome of the type descriptions below contain a paragraph listing\n\'special attributes.\' These are attributes that provide access to the\nimplementation and are not intended for general use. Their definition\nmay change in the future.\n\nNone\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name "None". It\n is used to signify the absence of a value in many situations, e.g.,\n it is returned from functions that don\'t explicitly return\n anything. Its truth value is false.\n\nNotImplemented\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name\n "NotImplemented". Numeric methods and rich comparison methods\n should return this value if they do not implement the operation for\n the operands provided. (The interpreter will then try the\n reflected operation, or some other fallback, depending on the\n operator.) Its truth value is true.\n\n See *Implementing the arithmetic operations* for more details.\n\nEllipsis\n This type has a single value. There is a single object with this\n value. This object is accessed through the literal "..." or the\n built-in name "Ellipsis". Its truth value is true.\n\n"numbers.Number"\n These are created by numeric literals and returned as results by\n arithmetic operators and arithmetic built-in functions. Numeric\n objects are immutable; once created their value never changes.\n Python numbers are of course strongly related to mathematical\n numbers, but subject to the limitations of numerical representation\n in computers.\n\n Python distinguishes between integers, floating point numbers, and\n complex numbers:\n\n "numbers.Integral"\n These represent elements from the mathematical set of integers\n (positive and negative).\n\n There are two types of integers:\n\n Integers ("int")\n\n These represent numbers in an unlimited range, subject to\n available (virtual) memory only. For the purpose of shift\n and mask operations, a binary representation is assumed, and\n negative numbers are represented in a variant of 2\'s\n complement which gives the illusion of an infinite string of\n sign bits extending to the left.\n\n Booleans ("bool")\n These represent the truth values False and True. The two\n objects representing the values "False" and "True" are the\n only Boolean objects. The Boolean type is a subtype of the\n integer type, and Boolean values behave like the values 0 and\n 1, respectively, in almost all contexts, the exception being\n that when converted to a string, the strings ""False"" or\n ""True"" are returned, respectively.\n\n The rules for integer representation are intended to give the\n most meaningful interpretation of shift and mask operations\n involving negative integers.\n\n "numbers.Real" ("float")\n These represent machine-level double precision floating point\n numbers. You are at the mercy of the underlying machine\n architecture (and C or Java implementation) for the accepted\n range and handling of overflow. Python does not support single-\n precision floating point numbers; the savings in processor and\n memory usage that are usually the reason for using these are\n dwarfed by the overhead of using objects in Python, so there is\n no reason to complicate the language with two kinds of floating\n point numbers.\n\n "numbers.Complex" ("complex")\n These represent complex numbers as a pair of machine-level\n double precision floating point numbers. The same caveats apply\n as for floating point numbers. The real and imaginary parts of a\n complex number "z" can be retrieved through the read-only\n attributes "z.real" and "z.imag".\n\nSequences\n These represent finite ordered sets indexed by non-negative\n numbers. The built-in function "len()" returns the number of items\n of a sequence. When the length of a sequence is *n*, the index set\n contains the numbers 0, 1, ..., *n*-1. Item *i* of sequence *a* is\n selected by "a[i]".\n\n Sequences also support slicing: "a[i:j]" selects all items with\n index *k* such that *i* "<=" *k* "<" *j*. When used as an\n expression, a slice is a sequence of the same type. This implies\n that the index set is renumbered so that it starts at 0.\n\n Some sequences also support "extended slicing" with a third "step"\n parameter: "a[i:j:k]" selects all items of *a* with index *x* where\n "x = i + n*k", *n* ">=" "0" and *i* "<=" *x* "<" *j*.\n\n Sequences are distinguished according to their mutability:\n\n Immutable sequences\n An object of an immutable sequence type cannot change once it is\n created. (If the object contains references to other objects,\n these other objects may be mutable and may be changed; however,\n the collection of objects directly referenced by an immutable\n object cannot change.)\n\n The following types are immutable sequences:\n\n Strings\n A string is a sequence of values that represent Unicode code\n points. All the code points in the range "U+0000 - U+10FFFF"\n can be represented in a string. Python doesn\'t have a "char"\n type; instead, every code point in the string is represented\n as a string object with length "1". The built-in function\n "ord()" converts a code point from its string form to an\n integer in the range "0 - 10FFFF"; "chr()" converts an\n integer in the range "0 - 10FFFF" to the corresponding length\n "1" string object. "str.encode()" can be used to convert a\n "str" to "bytes" using the given text encoding, and\n "bytes.decode()" can be used to achieve the opposite.\n\n Tuples\n The items of a tuple are arbitrary Python objects. Tuples of\n two or more items are formed by comma-separated lists of\n expressions. A tuple of one item (a \'singleton\') can be\n formed by affixing a comma to an expression (an expression by\n itself does not create a tuple, since parentheses must be\n usable for grouping of expressions). An empty tuple can be\n formed by an empty pair of parentheses.\n\n Bytes\n A bytes object is an immutable array. The items are 8-bit\n bytes, represented by integers in the range 0 <= x < 256.\n Bytes literals (like "b\'abc\'") and the built-in function\n "bytes()" can be used to construct bytes objects. Also,\n bytes objects can be decoded to strings via the "decode()"\n method.\n\n Mutable sequences\n Mutable sequences can be changed after they are created. The\n subscription and slicing notations can be used as the target of\n assignment and "del" (delete) statements.\n\n There are currently two intrinsic mutable sequence types:\n\n Lists\n The items of a list are arbitrary Python objects. Lists are\n formed by placing a comma-separated list of expressions in\n square brackets. (Note that there are no special cases needed\n to form lists of length 0 or 1.)\n\n Byte Arrays\n A bytearray object is a mutable array. They are created by\n the built-in "bytearray()" constructor. Aside from being\n mutable (and hence unhashable), byte arrays otherwise provide\n the same interface and functionality as immutable bytes\n objects.\n\n The extension module "array" provides an additional example of a\n mutable sequence type, as does the "collections" module.\n\nSet types\n These represent unordered, finite sets of unique, immutable\n objects. As such, they cannot be indexed by any subscript. However,\n they can be iterated over, and the built-in function "len()"\n returns the number of items in a set. Common uses for sets are fast\n membership testing, removing duplicates from a sequence, and\n computing mathematical operations such as intersection, union,\n difference, and symmetric difference.\n\n For set elements, the same immutability rules apply as for\n dictionary keys. Note that numeric types obey the normal rules for\n numeric comparison: if two numbers compare equal (e.g., "1" and\n "1.0"), only one of them can be contained in a set.\n\n There are currently two intrinsic set types:\n\n Sets\n These represent a mutable set. They are created by the built-in\n "set()" constructor and can be modified afterwards by several\n methods, such as "add()".\n\n Frozen sets\n These represent an immutable set. They are created by the\n built-in "frozenset()" constructor. As a frozenset is immutable\n and *hashable*, it can be used again as an element of another\n set, or as a dictionary key.\n\nMappings\n These represent finite sets of objects indexed by arbitrary index\n sets. The subscript notation "a[k]" selects the item indexed by "k"\n from the mapping "a"; this can be used in expressions and as the\n target of assignments or "del" statements. The built-in function\n "len()" returns the number of items in a mapping.\n\n There is currently a single intrinsic mapping type:\n\n Dictionaries\n These represent finite sets of objects indexed by nearly\n arbitrary values. The only types of values not acceptable as\n keys are values containing lists or dictionaries or other\n mutable types that are compared by value rather than by object\n identity, the reason being that the efficient implementation of\n dictionaries requires a key\'s hash value to remain constant.\n Numeric types used for keys obey the normal rules for numeric\n comparison: if two numbers compare equal (e.g., "1" and "1.0")\n then they can be used interchangeably to index the same\n dictionary entry.\n\n Dictionaries are mutable; they can be created by the "{...}"\n notation (see section *Dictionary displays*).\n\n The extension modules "dbm.ndbm" and "dbm.gnu" provide\n additional examples of mapping types, as does the "collections"\n module.\n\nCallable types\n These are the types to which the function call operation (see\n section *Calls*) can be applied:\n\n User-defined functions\n A user-defined function object is created by a function\n definition (see section *Function definitions*). It should be\n called with an argument list containing the same number of items\n as the function\'s formal parameter list.\n\n Special attributes:\n\n +---------------------------+---------------------------------+-------------+\n | Attribute | Meaning | |\n +===========================+=================================+=============+\n | "__doc__" | The function\'s documentation | Writable |\n | | string, or "None" if | |\n | | unavailable; not inherited by | |\n | | subclasses | |\n +---------------------------+---------------------------------+-------------+\n | "__name__" | The function\'s name | Writable |\n +---------------------------+---------------------------------+-------------+\n | "__qualname__" | The function\'s *qualified name* | Writable |\n | | New in version 3.3. | |\n +---------------------------+---------------------------------+-------------+\n | "__module__" | The name of the module the | Writable |\n | | function was defined in, or | |\n | | "None" if unavailable. | |\n +---------------------------+---------------------------------+-------------+\n | "__defaults__" | A tuple containing default | Writable |\n | | argument values for those | |\n | | arguments that have defaults, | |\n | | or "None" if no arguments have | |\n | | a default value | |\n +---------------------------+---------------------------------+-------------+\n | "__code__" | The code object representing | Writable |\n | | the compiled function body. | |\n +---------------------------+---------------------------------+-------------+\n | "__globals__" | A reference to the dictionary | Read-only |\n | | that holds the function\'s | |\n | | global variables --- the global | |\n | | namespace of the module in | |\n | | which the function was defined. | |\n +---------------------------+---------------------------------+-------------+\n | "__dict__" | The namespace supporting | Writable |\n | | arbitrary function attributes. | |\n +---------------------------+---------------------------------+-------------+\n | "__closure__" | "None" or a tuple of cells that | Read-only |\n | | contain bindings for the | |\n | | function\'s free variables. | |\n +---------------------------+---------------------------------+-------------+\n | "__annotations__" | A dict containing annotations | Writable |\n | | of parameters. The keys of the | |\n | | dict are the parameter names, | |\n | | and "\'return\'" for the return | |\n | | annotation, if provided. | |\n +---------------------------+---------------------------------+-------------+\n | "__kwdefaults__" | A dict containing defaults for | Writable |\n | | keyword-only parameters. | |\n +---------------------------+---------------------------------+-------------+\n\n Most of the attributes labelled "Writable" check the type of the\n assigned value.\n\n Function objects also support getting and setting arbitrary\n attributes, which can be used, for example, to attach metadata\n to functions. Regular attribute dot-notation is used to get and\n set such attributes. *Note that the current implementation only\n supports function attributes on user-defined functions. Function\n attributes on built-in functions may be supported in the\n future.*\n\n Additional information about a function\'s definition can be\n retrieved from its code object; see the description of internal\n types below.\n\n Instance methods\n An instance method object combines a class, a class instance and\n any callable object (normally a user-defined function).\n\n Special read-only attributes: "__self__" is the class instance\n object, "__func__" is the function object; "__doc__" is the\n method\'s documentation (same as "__func__.__doc__"); "__name__"\n is the method name (same as "__func__.__name__"); "__module__"\n is the name of the module the method was defined in, or "None"\n if unavailable.\n\n Methods also support accessing (but not setting) the arbitrary\n function attributes on the underlying function object.\n\n User-defined method objects may be created when getting an\n attribute of a class (perhaps via an instance of that class), if\n that attribute is a user-defined function object or a class\n method object.\n\n When an instance method object is created by retrieving a user-\n defined function object from a class via one of its instances,\n its "__self__" attribute is the instance, and the method object\n is said to be bound. The new method\'s "__func__" attribute is\n the original function object.\n\n When a user-defined method object is created by retrieving\n another method object from a class or instance, the behaviour is\n the same as for a function object, except that the "__func__"\n attribute of the new instance is not the original method object\n but its "__func__" attribute.\n\n When an instance method object is created by retrieving a class\n method object from a class or instance, its "__self__" attribute\n is the class itself, and its "__func__" attribute is the\n function object underlying the class method.\n\n When an instance method object is called, the underlying\n function ("__func__") is called, inserting the class instance\n ("__self__") in front of the argument list. For instance, when\n "C" is a class which contains a definition for a function "f()",\n and "x" is an instance of "C", calling "x.f(1)" is equivalent to\n calling "C.f(x, 1)".\n\n When an instance method object is derived from a class method\n object, the "class instance" stored in "__self__" will actually\n be the class itself, so that calling either "x.f(1)" or "C.f(1)"\n is equivalent to calling "f(C,1)" where "f" is the underlying\n function.\n\n Note that the transformation from function object to instance\n method object happens each time the attribute is retrieved from\n the instance. In some cases, a fruitful optimization is to\n assign the attribute to a local variable and call that local\n variable. Also notice that this transformation only happens for\n user-defined functions; other callable objects (and all non-\n callable objects) are retrieved without transformation. It is\n also important to note that user-defined functions which are\n attributes of a class instance are not converted to bound\n methods; this *only* happens when the function is an attribute\n of the class.\n\n Generator functions\n A function or method which uses the "yield" statement (see\n section *The yield statement*) is called a *generator function*.\n Such a function, when called, always returns an iterator object\n which can be used to execute the body of the function: calling\n the iterator\'s "iterator.__next__()" method will cause the\n function to execute until it provides a value using the "yield"\n statement. When the function executes a "return" statement or\n falls off the end, a "StopIteration" exception is raised and the\n iterator will have reached the end of the set of values to be\n returned.\n\n Coroutine functions\n A function or method which is defined using "async def" is\n called a *coroutine function*. Such a function, when called,\n returns a *coroutine* object. It may contain "await"\n expressions, as well as "async with" and "async for" statements.\n See also the *Coroutine Objects* section.\n\n Built-in functions\n A built-in function object is a wrapper around a C function.\n Examples of built-in functions are "len()" and "math.sin()"\n ("math" is a standard built-in module). The number and type of\n the arguments are determined by the C function. Special read-\n only attributes: "__doc__" is the function\'s documentation\n string, or "None" if unavailable; "__name__" is the function\'s\n name; "__self__" is set to "None" (but see the next item);\n "__module__" is the name of the module the function was defined\n in or "None" if unavailable.\n\n Built-in methods\n This is really a different disguise of a built-in function, this\n time containing an object passed to the C function as an\n implicit extra argument. An example of a built-in method is\n "alist.append()", assuming *alist* is a list object. In this\n case, the special read-only attribute "__self__" is set to the\n object denoted by *alist*.\n\n Classes\n Classes are callable. These objects normally act as factories\n for new instances of themselves, but variations are possible for\n class types that override "__new__()". The arguments of the\n call are passed to "__new__()" and, in the typical case, to\n "__init__()" to initialize the new instance.\n\n Class Instances\n Instances of arbitrary classes can be made callable by defining\n a "__call__()" method in their class.\n\nModules\n Modules are a basic organizational unit of Python code, and are\n created by the *import system* as invoked either by the "import"\n statement (see "import"), or by calling functions such as\n "importlib.import_module()" and built-in "__import__()". A module\n object has a namespace implemented by a dictionary object (this is\n the dictionary referenced by the "__globals__" attribute of\n functions defined in the module). Attribute references are\n translated to lookups in this dictionary, e.g., "m.x" is equivalent\n to "m.__dict__["x"]". A module object does not contain the code\n object used to initialize the module (since it isn\'t needed once\n the initialization is done).\n\n Attribute assignment updates the module\'s namespace dictionary,\n e.g., "m.x = 1" is equivalent to "m.__dict__["x"] = 1".\n\n Special read-only attribute: "__dict__" is the module\'s namespace\n as a dictionary object.\n\n **CPython implementation detail:** Because of the way CPython\n clears module dictionaries, the module dictionary will be cleared\n when the module falls out of scope even if the dictionary still has\n live references. To avoid this, copy the dictionary or keep the\n module around while using its dictionary directly.\n\n Predefined (writable) attributes: "__name__" is the module\'s name;\n "__doc__" is the module\'s documentation string, or "None" if\n unavailable; "__file__" is the pathname of the file from which the\n module was loaded, if it was loaded from a file. The "__file__"\n attribute may be missing for certain types of modules, such as C\n modules that are statically linked into the interpreter; for\n extension modules loaded dynamically from a shared library, it is\n the pathname of the shared library file.\n\nCustom classes\n Custom class types are typically created by class definitions (see\n section *Class definitions*). A class has a namespace implemented\n by a dictionary object. Class attribute references are translated\n to lookups in this dictionary, e.g., "C.x" is translated to\n "C.__dict__["x"]" (although there are a number of hooks which allow\n for other means of locating attributes). When the attribute name is\n not found there, the attribute search continues in the base\n classes. This search of the base classes uses the C3 method\n resolution order which behaves correctly even in the presence of\n \'diamond\' inheritance structures where there are multiple\n inheritance paths leading back to a common ancestor. Additional\n details on the C3 MRO used by Python can be found in the\n documentation accompanying the 2.3 release at\n https://www.python.org/download/releases/2.3/mro/.\n\n When a class attribute reference (for class "C", say) would yield a\n class method object, it is transformed into an instance method\n object whose "__self__" attributes is "C". When it would yield a\n static method object, it is transformed into the object wrapped by\n the static method object. See section *Implementing Descriptors*\n for another way in which attributes retrieved from a class may\n differ from those actually contained in its "__dict__".\n\n Class attribute assignments update the class\'s dictionary, never\n the dictionary of a base class.\n\n A class object can be called (see above) to yield a class instance\n (see below).\n\n Special attributes: "__name__" is the class name; "__module__" is\n the module name in which the class was defined; "__dict__" is the\n dictionary containing the class\'s namespace; "__bases__" is a tuple\n (possibly empty or a singleton) containing the base classes, in the\n order of their occurrence in the base class list; "__doc__" is the\n class\'s documentation string, or None if undefined.\n\nClass instances\n A class instance is created by calling a class object (see above).\n A class instance has a namespace implemented as a dictionary which\n is the first place in which attribute references are searched.\n When an attribute is not found there, and the instance\'s class has\n an attribute by that name, the search continues with the class\n attributes. If a class attribute is found that is a user-defined\n function object, it is transformed into an instance method object\n whose "__self__" attribute is the instance. Static method and\n class method objects are also transformed; see above under\n "Classes". See section *Implementing Descriptors* for another way\n in which attributes of a class retrieved via its instances may\n differ from the objects actually stored in the class\'s "__dict__".\n If no class attribute is found, and the object\'s class has a\n "__getattr__()" method, that is called to satisfy the lookup.\n\n Attribute assignments and deletions update the instance\'s\n dictionary, never a class\'s dictionary. If the class has a\n "__setattr__()" or "__delattr__()" method, this is called instead\n of updating the instance dictionary directly.\n\n Class instances can pretend to be numbers, sequences, or mappings\n if they have methods with certain special names. See section\n *Special method names*.\n\n Special attributes: "__dict__" is the attribute dictionary;\n "__class__" is the instance\'s class.\n\nI/O objects (also known as file objects)\n A *file object* represents an open file. Various shortcuts are\n available to create file objects: the "open()" built-in function,\n and also "os.popen()", "os.fdopen()", and the "makefile()" method\n of socket objects (and perhaps by other functions or methods\n provided by extension modules).\n\n The objects "sys.stdin", "sys.stdout" and "sys.stderr" are\n initialized to file objects corresponding to the interpreter\'s\n standard input, output and error streams; they are all open in text\n mode and therefore follow the interface defined by the\n "io.TextIOBase" abstract class.\n\nInternal types\n A few types used internally by the interpreter are exposed to the\n user. Their definitions may change with future versions of the\n interpreter, but they are mentioned here for completeness.\n\n Code objects\n Code objects represent *byte-compiled* executable Python code,\n or *bytecode*. The difference between a code object and a\n function object is that the function object contains an explicit\n reference to the function\'s globals (the module in which it was\n defined), while a code object contains no context; also the\n default argument values are stored in the function object, not\n in the code object (because they represent values calculated at\n run-time). Unlike function objects, code objects are immutable\n and contain no references (directly or indirectly) to mutable\n objects.\n\n Special read-only attributes: "co_name" gives the function name;\n "co_argcount" is the number of positional arguments (including\n arguments with default values); "co_nlocals" is the number of\n local variables used by the function (including arguments);\n "co_varnames" is a tuple containing the names of the local\n variables (starting with the argument names); "co_cellvars" is a\n tuple containing the names of local variables that are\n referenced by nested functions; "co_freevars" is a tuple\n containing the names of free variables; "co_code" is a string\n representing the sequence of bytecode instructions; "co_consts"\n is a tuple containing the literals used by the bytecode;\n "co_names" is a tuple containing the names used by the bytecode;\n "co_filename" is the filename from which the code was compiled;\n "co_firstlineno" is the first line number of the function;\n "co_lnotab" is a string encoding the mapping from bytecode\n offsets to line numbers (for details see the source code of the\n interpreter); "co_stacksize" is the required stack size\n (including local variables); "co_flags" is an integer encoding a\n number of flags for the interpreter.\n\n The following flag bits are defined for "co_flags": bit "0x04"\n is set if the function uses the "*arguments" syntax to accept an\n arbitrary number of positional arguments; bit "0x08" is set if\n the function uses the "**keywords" syntax to accept arbitrary\n keyword arguments; bit "0x20" is set if the function is a\n generator.\n\n Future feature declarations ("from __future__ import division")\n also use bits in "co_flags" to indicate whether a code object\n was compiled with a particular feature enabled: bit "0x2000" is\n set if the function was compiled with future division enabled;\n bits "0x10" and "0x1000" were used in earlier versions of\n Python.\n\n Other bits in "co_flags" are reserved for internal use.\n\n If a code object represents a function, the first item in\n "co_consts" is the documentation string of the function, or\n "None" if undefined.\n\n Frame objects\n Frame objects represent execution frames. They may occur in\n traceback objects (see below).\n\n Special read-only attributes: "f_back" is to the previous stack\n frame (towards the caller), or "None" if this is the bottom\n stack frame; "f_code" is the code object being executed in this\n frame; "f_locals" is the dictionary used to look up local\n variables; "f_globals" is used for global variables;\n "f_builtins" is used for built-in (intrinsic) names; "f_lasti"\n gives the precise instruction (this is an index into the\n bytecode string of the code object).\n\n Special writable attributes: "f_trace", if not "None", is a\n function called at the start of each source code line (this is\n used by the debugger); "f_lineno" is the current line number of\n the frame --- writing to this from within a trace function jumps\n to the given line (only for the bottom-most frame). A debugger\n can implement a Jump command (aka Set Next Statement) by writing\n to f_lineno.\n\n Frame objects support one method:\n\n frame.clear()\n\n This method clears all references to local variables held by\n the frame. Also, if the frame belonged to a generator, the\n generator is finalized. This helps break reference cycles\n involving frame objects (for example when catching an\n exception and storing its traceback for later use).\n\n "RuntimeError" is raised if the frame is currently executing.\n\n New in version 3.4.\n\n Traceback objects\n Traceback objects represent a stack trace of an exception. A\n traceback object is created when an exception occurs. When the\n search for an exception handler unwinds the execution stack, at\n each unwound level a traceback object is inserted in front of\n the current traceback. When an exception handler is entered,\n the stack trace is made available to the program. (See section\n *The try statement*.) It is accessible as the third item of the\n tuple returned by "sys.exc_info()". When the program contains no\n suitable handler, the stack trace is written (nicely formatted)\n to the standard error stream; if the interpreter is interactive,\n it is also made available to the user as "sys.last_traceback".\n\n Special read-only attributes: "tb_next" is the next level in the\n stack trace (towards the frame where the exception occurred), or\n "None" if there is no next level; "tb_frame" points to the\n execution frame of the current level; "tb_lineno" gives the line\n number where the exception occurred; "tb_lasti" indicates the\n precise instruction. The line number and last instruction in\n the traceback may differ from the line number of its frame\n object if the exception occurred in a "try" statement with no\n matching except clause or with a finally clause.\n\n Slice objects\n Slice objects are used to represent slices for "__getitem__()"\n methods. They are also created by the built-in "slice()"\n function.\n\n Special read-only attributes: "start" is the lower bound; "stop"\n is the upper bound; "step" is the step value; each is "None" if\n omitted. These attributes can have any type.\n\n Slice objects support one method:\n\n slice.indices(self, length)\n\n This method takes a single integer argument *length* and\n computes information about the slice that the slice object\n would describe if applied to a sequence of *length* items.\n It returns a tuple of three integers; respectively these are\n the *start* and *stop* indices and the *step* or stride\n length of the slice. Missing or out-of-bounds indices are\n handled in a manner consistent with regular slices.\n\n Static method objects\n Static method objects provide a way of defeating the\n transformation of function objects to method objects described\n above. A static method object is a wrapper around any other\n object, usually a user-defined method object. When a static\n method object is retrieved from a class or a class instance, the\n object actually returned is the wrapped object, which is not\n subject to any further transformation. Static method objects are\n not themselves callable, although the objects they wrap usually\n are. Static method objects are created by the built-in\n "staticmethod()" constructor.\n\n Class method objects\n A class method object, like a static method object, is a wrapper\n around another object that alters the way in which that object\n is retrieved from classes and class instances. The behaviour of\n class method objects upon such retrieval is described above,\n under "User-defined methods". Class method objects are created\n by the built-in "classmethod()" constructor.\n', + 'types': u'\nThe standard type hierarchy\n***************************\n\nBelow is a list of the types that are built into Python. Extension\nmodules (written in C, Java, or other languages, depending on the\nimplementation) can define additional types. Future versions of\nPython may add types to the type hierarchy (e.g., rational numbers,\nefficiently stored arrays of integers, etc.), although such additions\nwill often be provided via the standard library instead.\n\nSome of the type descriptions below contain a paragraph listing\n\'special attributes.\' These are attributes that provide access to the\nimplementation and are not intended for general use. Their definition\nmay change in the future.\n\nNone\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name "None". It\n is used to signify the absence of a value in many situations, e.g.,\n it is returned from functions that don\'t explicitly return\n anything. Its truth value is false.\n\nNotImplemented\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name\n "NotImplemented". Numeric methods and rich comparison methods\n should return this value if they do not implement the operation for\n the operands provided. (The interpreter will then try the\n reflected operation, or some other fallback, depending on the\n operator.) Its truth value is true.\n\n See *Implementing the arithmetic operations* for more details.\n\nEllipsis\n This type has a single value. There is a single object with this\n value. This object is accessed through the literal "..." or the\n built-in name "Ellipsis". Its truth value is true.\n\n"numbers.Number"\n These are created by numeric literals and returned as results by\n arithmetic operators and arithmetic built-in functions. Numeric\n objects are immutable; once created their value never changes.\n Python numbers are of course strongly related to mathematical\n numbers, but subject to the limitations of numerical representation\n in computers.\n\n Python distinguishes between integers, floating point numbers, and\n complex numbers:\n\n "numbers.Integral"\n These represent elements from the mathematical set of integers\n (positive and negative).\n\n There are two types of integers:\n\n Integers ("int")\n\n These represent numbers in an unlimited range, subject to\n available (virtual) memory only. For the purpose of shift\n and mask operations, a binary representation is assumed, and\n negative numbers are represented in a variant of 2\'s\n complement which gives the illusion of an infinite string of\n sign bits extending to the left.\n\n Booleans ("bool")\n These represent the truth values False and True. The two\n objects representing the values "False" and "True" are the\n only Boolean objects. The Boolean type is a subtype of the\n integer type, and Boolean values behave like the values 0 and\n 1, respectively, in almost all contexts, the exception being\n that when converted to a string, the strings ""False"" or\n ""True"" are returned, respectively.\n\n The rules for integer representation are intended to give the\n most meaningful interpretation of shift and mask operations\n involving negative integers.\n\n "numbers.Real" ("float")\n These represent machine-level double precision floating point\n numbers. You are at the mercy of the underlying machine\n architecture (and C or Java implementation) for the accepted\n range and handling of overflow. Python does not support single-\n precision floating point numbers; the savings in processor and\n memory usage that are usually the reason for using these are\n dwarfed by the overhead of using objects in Python, so there is\n no reason to complicate the language with two kinds of floating\n point numbers.\n\n "numbers.Complex" ("complex")\n These represent complex numbers as a pair of machine-level\n double precision floating point numbers. The same caveats apply\n as for floating point numbers. The real and imaginary parts of a\n complex number "z" can be retrieved through the read-only\n attributes "z.real" and "z.imag".\n\nSequences\n These represent finite ordered sets indexed by non-negative\n numbers. The built-in function "len()" returns the number of items\n of a sequence. When the length of a sequence is *n*, the index set\n contains the numbers 0, 1, ..., *n*-1. Item *i* of sequence *a* is\n selected by "a[i]".\n\n Sequences also support slicing: "a[i:j]" selects all items with\n index *k* such that *i* "<=" *k* "<" *j*. When used as an\n expression, a slice is a sequence of the same type. This implies\n that the index set is renumbered so that it starts at 0.\n\n Some sequences also support "extended slicing" with a third "step"\n parameter: "a[i:j:k]" selects all items of *a* with index *x* where\n "x = i + n*k", *n* ">=" "0" and *i* "<=" *x* "<" *j*.\n\n Sequences are distinguished according to their mutability:\n\n Immutable sequences\n An object of an immutable sequence type cannot change once it is\n created. (If the object contains references to other objects,\n these other objects may be mutable and may be changed; however,\n the collection of objects directly referenced by an immutable\n object cannot change.)\n\n The following types are immutable sequences:\n\n Strings\n A string is a sequence of values that represent Unicode code\n points. All the code points in the range "U+0000 - U+10FFFF"\n can be represented in a string. Python doesn\'t have a "char"\n type; instead, every code point in the string is represented\n as a string object with length "1". The built-in function\n "ord()" converts a code point from its string form to an\n integer in the range "0 - 10FFFF"; "chr()" converts an\n integer in the range "0 - 10FFFF" to the corresponding length\n "1" string object. "str.encode()" can be used to convert a\n "str" to "bytes" using the given text encoding, and\n "bytes.decode()" can be used to achieve the opposite.\n\n Tuples\n The items of a tuple are arbitrary Python objects. Tuples of\n two or more items are formed by comma-separated lists of\n expressions. A tuple of one item (a \'singleton\') can be\n formed by affixing a comma to an expression (an expression by\n itself does not create a tuple, since parentheses must be\n usable for grouping of expressions). An empty tuple can be\n formed by an empty pair of parentheses.\n\n Bytes\n A bytes object is an immutable array. The items are 8-bit\n bytes, represented by integers in the range 0 <= x < 256.\n Bytes literals (like "b\'abc\'") and the built-in function\n "bytes()" can be used to construct bytes objects. Also,\n bytes objects can be decoded to strings via the "decode()"\n method.\n\n Mutable sequences\n Mutable sequences can be changed after they are created. The\n subscription and slicing notations can be used as the target of\n assignment and "del" (delete) statements.\n\n There are currently two intrinsic mutable sequence types:\n\n Lists\n The items of a list are arbitrary Python objects. Lists are\n formed by placing a comma-separated list of expressions in\n square brackets. (Note that there are no special cases needed\n to form lists of length 0 or 1.)\n\n Byte Arrays\n A bytearray object is a mutable array. They are created by\n the built-in "bytearray()" constructor. Aside from being\n mutable (and hence unhashable), byte arrays otherwise provide\n the same interface and functionality as immutable bytes\n objects.\n\n The extension module "array" provides an additional example of a\n mutable sequence type, as does the "collections" module.\n\nSet types\n These represent unordered, finite sets of unique, immutable\n objects. As such, they cannot be indexed by any subscript. However,\n they can be iterated over, and the built-in function "len()"\n returns the number of items in a set. Common uses for sets are fast\n membership testing, removing duplicates from a sequence, and\n computing mathematical operations such as intersection, union,\n difference, and symmetric difference.\n\n For set elements, the same immutability rules apply as for\n dictionary keys. Note that numeric types obey the normal rules for\n numeric comparison: if two numbers compare equal (e.g., "1" and\n "1.0"), only one of them can be contained in a set.\n\n There are currently two intrinsic set types:\n\n Sets\n These represent a mutable set. They are created by the built-in\n "set()" constructor and can be modified afterwards by several\n methods, such as "add()".\n\n Frozen sets\n These represent an immutable set. They are created by the\n built-in "frozenset()" constructor. As a frozenset is immutable\n and *hashable*, it can be used again as an element of another\n set, or as a dictionary key.\n\nMappings\n These represent finite sets of objects indexed by arbitrary index\n sets. The subscript notation "a[k]" selects the item indexed by "k"\n from the mapping "a"; this can be used in expressions and as the\n target of assignments or "del" statements. The built-in function\n "len()" returns the number of items in a mapping.\n\n There is currently a single intrinsic mapping type:\n\n Dictionaries\n These represent finite sets of objects indexed by nearly\n arbitrary values. The only types of values not acceptable as\n keys are values containing lists or dictionaries or other\n mutable types that are compared by value rather than by object\n identity, the reason being that the efficient implementation of\n dictionaries requires a key\'s hash value to remain constant.\n Numeric types used for keys obey the normal rules for numeric\n comparison: if two numbers compare equal (e.g., "1" and "1.0")\n then they can be used interchangeably to index the same\n dictionary entry.\n\n Dictionaries are mutable; they can be created by the "{...}"\n notation (see section *Dictionary displays*).\n\n The extension modules "dbm.ndbm" and "dbm.gnu" provide\n additional examples of mapping types, as does the "collections"\n module.\n\nCallable types\n These are the types to which the function call operation (see\n section *Calls*) can be applied:\n\n User-defined functions\n A user-defined function object is created by a function\n definition (see section *Function definitions*). It should be\n called with an argument list containing the same number of items\n as the function\'s formal parameter list.\n\n Special attributes:\n\n +---------------------------+---------------------------------+-------------+\n | Attribute | Meaning | |\n +===========================+=================================+=============+\n | "__doc__" | The function\'s documentation | Writable |\n | | string, or "None" if | |\n | | unavailable; not inherited by | |\n | | subclasses | |\n +---------------------------+---------------------------------+-------------+\n | "__name__" | The function\'s name | Writable |\n +---------------------------+---------------------------------+-------------+\n | "__qualname__" | The function\'s *qualified name* | Writable |\n | | New in version 3.3. | |\n +---------------------------+---------------------------------+-------------+\n | "__module__" | The name of the module the | Writable |\n | | function was defined in, or | |\n | | "None" if unavailable. | |\n +---------------------------+---------------------------------+-------------+\n | "__defaults__" | A tuple containing default | Writable |\n | | argument values for those | |\n | | arguments that have defaults, | |\n | | or "None" if no arguments have | |\n | | a default value | |\n +---------------------------+---------------------------------+-------------+\n | "__code__" | The code object representing | Writable |\n | | the compiled function body. | |\n +---------------------------+---------------------------------+-------------+\n | "__globals__" | A reference to the dictionary | Read-only |\n | | that holds the function\'s | |\n | | global variables --- the global | |\n | | namespace of the module in | |\n | | which the function was defined. | |\n +---------------------------+---------------------------------+-------------+\n | "__dict__" | The namespace supporting | Writable |\n | | arbitrary function attributes. | |\n +---------------------------+---------------------------------+-------------+\n | "__closure__" | "None" or a tuple of cells that | Read-only |\n | | contain bindings for the | |\n | | function\'s free variables. | |\n +---------------------------+---------------------------------+-------------+\n | "__annotations__" | A dict containing annotations | Writable |\n | | of parameters. The keys of the | |\n | | dict are the parameter names, | |\n | | and "\'return\'" for the return | |\n | | annotation, if provided. | |\n +---------------------------+---------------------------------+-------------+\n | "__kwdefaults__" | A dict containing defaults for | Writable |\n | | keyword-only parameters. | |\n +---------------------------+---------------------------------+-------------+\n\n Most of the attributes labelled "Writable" check the type of the\n assigned value.\n\n Function objects also support getting and setting arbitrary\n attributes, which can be used, for example, to attach metadata\n to functions. Regular attribute dot-notation is used to get and\n set such attributes. *Note that the current implementation only\n supports function attributes on user-defined functions. Function\n attributes on built-in functions may be supported in the\n future.*\n\n Additional information about a function\'s definition can be\n retrieved from its code object; see the description of internal\n types below.\n\n Instance methods\n An instance method object combines a class, a class instance and\n any callable object (normally a user-defined function).\n\n Special read-only attributes: "__self__" is the class instance\n object, "__func__" is the function object; "__doc__" is the\n method\'s documentation (same as "__func__.__doc__"); "__name__"\n is the method name (same as "__func__.__name__"); "__module__"\n is the name of the module the method was defined in, or "None"\n if unavailable.\n\n Methods also support accessing (but not setting) the arbitrary\n function attributes on the underlying function object.\n\n User-defined method objects may be created when getting an\n attribute of a class (perhaps via an instance of that class), if\n that attribute is a user-defined function object or a class\n method object.\n\n When an instance method object is created by retrieving a user-\n defined function object from a class via one of its instances,\n its "__self__" attribute is the instance, and the method object\n is said to be bound. The new method\'s "__func__" attribute is\n the original function object.\n\n When a user-defined method object is created by retrieving\n another method object from a class or instance, the behaviour is\n the same as for a function object, except that the "__func__"\n attribute of the new instance is not the original method object\n but its "__func__" attribute.\n\n When an instance method object is created by retrieving a class\n method object from a class or instance, its "__self__" attribute\n is the class itself, and its "__func__" attribute is the\n function object underlying the class method.\n\n When an instance method object is called, the underlying\n function ("__func__") is called, inserting the class instance\n ("__self__") in front of the argument list. For instance, when\n "C" is a class which contains a definition for a function "f()",\n and "x" is an instance of "C", calling "x.f(1)" is equivalent to\n calling "C.f(x, 1)".\n\n When an instance method object is derived from a class method\n object, the "class instance" stored in "__self__" will actually\n be the class itself, so that calling either "x.f(1)" or "C.f(1)"\n is equivalent to calling "f(C,1)" where "f" is the underlying\n function.\n\n Note that the transformation from function object to instance\n method object happens each time the attribute is retrieved from\n the instance. In some cases, a fruitful optimization is to\n assign the attribute to a local variable and call that local\n variable. Also notice that this transformation only happens for\n user-defined functions; other callable objects (and all non-\n callable objects) are retrieved without transformation. It is\n also important to note that user-defined functions which are\n attributes of a class instance are not converted to bound\n methods; this *only* happens when the function is an attribute\n of the class.\n\n Generator functions\n A function or method which uses the "yield" statement (see\n section *The yield statement*) is called a *generator function*.\n Such a function, when called, always returns an iterator object\n which can be used to execute the body of the function: calling\n the iterator\'s "iterator.__next__()" method will cause the\n function to execute until it provides a value using the "yield"\n statement. When the function executes a "return" statement or\n falls off the end, a "StopIteration" exception is raised and the\n iterator will have reached the end of the set of values to be\n returned.\n\n Coroutine functions\n A function or method which is defined using "async def" is\n called a *coroutine function*. Such a function, when called,\n returns a *coroutine* object. It may contain "await"\n expressions, as well as "async with" and "async for" statements.\n See also the *Coroutine Objects* section.\n\n Built-in functions\n A built-in function object is a wrapper around a C function.\n Examples of built-in functions are "len()" and "math.sin()"\n ("math" is a standard built-in module). The number and type of\n the arguments are determined by the C function. Special read-\n only attributes: "__doc__" is the function\'s documentation\n string, or "None" if unavailable; "__name__" is the function\'s\n name; "__self__" is set to "None" (but see the next item);\n "__module__" is the name of the module the function was defined\n in or "None" if unavailable.\n\n Built-in methods\n This is really a different disguise of a built-in function, this\n time containing an object passed to the C function as an\n implicit extra argument. An example of a built-in method is\n "alist.append()", assuming *alist* is a list object. In this\n case, the special read-only attribute "__self__" is set to the\n object denoted by *alist*.\n\n Classes\n Classes are callable. These objects normally act as factories\n for new instances of themselves, but variations are possible for\n class types that override "__new__()". The arguments of the\n call are passed to "__new__()" and, in the typical case, to\n "__init__()" to initialize the new instance.\n\n Class Instances\n Instances of arbitrary classes can be made callable by defining\n a "__call__()" method in their class.\n\nModules\n Modules are a basic organizational unit of Python code, and are\n created by the *import system* as invoked either by the "import"\n statement (see "import"), or by calling functions such as\n "importlib.import_module()" and built-in "__import__()". A module\n object has a namespace implemented by a dictionary object (this is\n the dictionary referenced by the "__globals__" attribute of\n functions defined in the module). Attribute references are\n translated to lookups in this dictionary, e.g., "m.x" is equivalent\n to "m.__dict__["x"]". A module object does not contain the code\n object used to initialize the module (since it isn\'t needed once\n the initialization is done).\n\n Attribute assignment updates the module\'s namespace dictionary,\n e.g., "m.x = 1" is equivalent to "m.__dict__["x"] = 1".\n\n Special read-only attribute: "__dict__" is the module\'s namespace\n as a dictionary object.\n\n **CPython implementation detail:** Because of the way CPython\n clears module dictionaries, the module dictionary will be cleared\n when the module falls out of scope even if the dictionary still has\n live references. To avoid this, copy the dictionary or keep the\n module around while using its dictionary directly.\n\n Predefined (writable) attributes: "__name__" is the module\'s name;\n "__doc__" is the module\'s documentation string, or "None" if\n unavailable; "__file__" is the pathname of the file from which the\n module was loaded, if it was loaded from a file. The "__file__"\n attribute may be missing for certain types of modules, such as C\n modules that are statically linked into the interpreter; for\n extension modules loaded dynamically from a shared library, it is\n the pathname of the shared library file.\n\nCustom classes\n Custom class types are typically created by class definitions (see\n section *Class definitions*). A class has a namespace implemented\n by a dictionary object. Class attribute references are translated\n to lookups in this dictionary, e.g., "C.x" is translated to\n "C.__dict__["x"]" (although there are a number of hooks which allow\n for other means of locating attributes). When the attribute name is\n not found there, the attribute search continues in the base\n classes. This search of the base classes uses the C3 method\n resolution order which behaves correctly even in the presence of\n \'diamond\' inheritance structures where there are multiple\n inheritance paths leading back to a common ancestor. Additional\n details on the C3 MRO used by Python can be found in the\n documentation accompanying the 2.3 release at\n https://www.python.org/download/releases/2.3/mro/.\n\n When a class attribute reference (for class "C", say) would yield a\n class method object, it is transformed into an instance method\n object whose "__self__" attributes is "C". When it would yield a\n static method object, it is transformed into the object wrapped by\n the static method object. See section *Implementing Descriptors*\n for another way in which attributes retrieved from a class may\n differ from those actually contained in its "__dict__".\n\n Class attribute assignments update the class\'s dictionary, never\n the dictionary of a base class.\n\n A class object can be called (see above) to yield a class instance\n (see below).\n\n Special attributes: "__name__" is the class name; "__module__" is\n the module name in which the class was defined; "__dict__" is the\n dictionary containing the class\'s namespace; "__bases__" is a tuple\n (possibly a singleton) containing the base classes, in the order of\n their occurrence in the base class list; "__doc__" is the class\'s\n documentation string, or "None" if undefined.\n\nClass instances\n A class instance is created by calling a class object (see above).\n A class instance has a namespace implemented as a dictionary which\n is the first place in which attribute references are searched.\n When an attribute is not found there, and the instance\'s class has\n an attribute by that name, the search continues with the class\n attributes. If a class attribute is found that is a user-defined\n function object, it is transformed into an instance method object\n whose "__self__" attribute is the instance. Static method and\n class method objects are also transformed; see above under\n "Classes". See section *Implementing Descriptors* for another way\n in which attributes of a class retrieved via its instances may\n differ from the objects actually stored in the class\'s "__dict__".\n If no class attribute is found, and the object\'s class has a\n "__getattr__()" method, that is called to satisfy the lookup.\n\n Attribute assignments and deletions update the instance\'s\n dictionary, never a class\'s dictionary. If the class has a\n "__setattr__()" or "__delattr__()" method, this is called instead\n of updating the instance dictionary directly.\n\n Class instances can pretend to be numbers, sequences, or mappings\n if they have methods with certain special names. See section\n *Special method names*.\n\n Special attributes: "__dict__" is the attribute dictionary;\n "__class__" is the instance\'s class.\n\nI/O objects (also known as file objects)\n A *file object* represents an open file. Various shortcuts are\n available to create file objects: the "open()" built-in function,\n and also "os.popen()", "os.fdopen()", and the "makefile()" method\n of socket objects (and perhaps by other functions or methods\n provided by extension modules).\n\n The objects "sys.stdin", "sys.stdout" and "sys.stderr" are\n initialized to file objects corresponding to the interpreter\'s\n standard input, output and error streams; they are all open in text\n mode and therefore follow the interface defined by the\n "io.TextIOBase" abstract class.\n\nInternal types\n A few types used internally by the interpreter are exposed to the\n user. Their definitions may change with future versions of the\n interpreter, but they are mentioned here for completeness.\n\n Code objects\n Code objects represent *byte-compiled* executable Python code,\n or *bytecode*. The difference between a code object and a\n function object is that the function object contains an explicit\n reference to the function\'s globals (the module in which it was\n defined), while a code object contains no context; also the\n default argument values are stored in the function object, not\n in the code object (because they represent values calculated at\n run-time). Unlike function objects, code objects are immutable\n and contain no references (directly or indirectly) to mutable\n objects.\n\n Special read-only attributes: "co_name" gives the function name;\n "co_argcount" is the number of positional arguments (including\n arguments with default values); "co_nlocals" is the number of\n local variables used by the function (including arguments);\n "co_varnames" is a tuple containing the names of the local\n variables (starting with the argument names); "co_cellvars" is a\n tuple containing the names of local variables that are\n referenced by nested functions; "co_freevars" is a tuple\n containing the names of free variables; "co_code" is a string\n representing the sequence of bytecode instructions; "co_consts"\n is a tuple containing the literals used by the bytecode;\n "co_names" is a tuple containing the names used by the bytecode;\n "co_filename" is the filename from which the code was compiled;\n "co_firstlineno" is the first line number of the function;\n "co_lnotab" is a string encoding the mapping from bytecode\n offsets to line numbers (for details see the source code of the\n interpreter); "co_stacksize" is the required stack size\n (including local variables); "co_flags" is an integer encoding a\n number of flags for the interpreter.\n\n The following flag bits are defined for "co_flags": bit "0x04"\n is set if the function uses the "*arguments" syntax to accept an\n arbitrary number of positional arguments; bit "0x08" is set if\n the function uses the "**keywords" syntax to accept arbitrary\n keyword arguments; bit "0x20" is set if the function is a\n generator.\n\n Future feature declarations ("from __future__ import division")\n also use bits in "co_flags" to indicate whether a code object\n was compiled with a particular feature enabled: bit "0x2000" is\n set if the function was compiled with future division enabled;\n bits "0x10" and "0x1000" were used in earlier versions of\n Python.\n\n Other bits in "co_flags" are reserved for internal use.\n\n If a code object represents a function, the first item in\n "co_consts" is the documentation string of the function, or\n "None" if undefined.\n\n Frame objects\n Frame objects represent execution frames. They may occur in\n traceback objects (see below).\n\n Special read-only attributes: "f_back" is to the previous stack\n frame (towards the caller), or "None" if this is the bottom\n stack frame; "f_code" is the code object being executed in this\n frame; "f_locals" is the dictionary used to look up local\n variables; "f_globals" is used for global variables;\n "f_builtins" is used for built-in (intrinsic) names; "f_lasti"\n gives the precise instruction (this is an index into the\n bytecode string of the code object).\n\n Special writable attributes: "f_trace", if not "None", is a\n function called at the start of each source code line (this is\n used by the debugger); "f_lineno" is the current line number of\n the frame --- writing to this from within a trace function jumps\n to the given line (only for the bottom-most frame). A debugger\n can implement a Jump command (aka Set Next Statement) by writing\n to f_lineno.\n\n Frame objects support one method:\n\n frame.clear()\n\n This method clears all references to local variables held by\n the frame. Also, if the frame belonged to a generator, the\n generator is finalized. This helps break reference cycles\n involving frame objects (for example when catching an\n exception and storing its traceback for later use).\n\n "RuntimeError" is raised if the frame is currently executing.\n\n New in version 3.4.\n\n Traceback objects\n Traceback objects represent a stack trace of an exception. A\n traceback object is created when an exception occurs. When the\n search for an exception handler unwinds the execution stack, at\n each unwound level a traceback object is inserted in front of\n the current traceback. When an exception handler is entered,\n the stack trace is made available to the program. (See section\n *The try statement*.) It is accessible as the third item of the\n tuple returned by "sys.exc_info()". When the program contains no\n suitable handler, the stack trace is written (nicely formatted)\n to the standard error stream; if the interpreter is interactive,\n it is also made available to the user as "sys.last_traceback".\n\n Special read-only attributes: "tb_next" is the next level in the\n stack trace (towards the frame where the exception occurred), or\n "None" if there is no next level; "tb_frame" points to the\n execution frame of the current level; "tb_lineno" gives the line\n number where the exception occurred; "tb_lasti" indicates the\n precise instruction. The line number and last instruction in\n the traceback may differ from the line number of its frame\n object if the exception occurred in a "try" statement with no\n matching except clause or with a finally clause.\n\n Slice objects\n Slice objects are used to represent slices for "__getitem__()"\n methods. They are also created by the built-in "slice()"\n function.\n\n Special read-only attributes: "start" is the lower bound; "stop"\n is the upper bound; "step" is the step value; each is "None" if\n omitted. These attributes can have any type.\n\n Slice objects support one method:\n\n slice.indices(self, length)\n\n This method takes a single integer argument *length* and\n computes information about the slice that the slice object\n would describe if applied to a sequence of *length* items.\n It returns a tuple of three integers; respectively these are\n the *start* and *stop* indices and the *step* or stride\n length of the slice. Missing or out-of-bounds indices are\n handled in a manner consistent with regular slices.\n\n Static method objects\n Static method objects provide a way of defeating the\n transformation of function objects to method objects described\n above. A static method object is a wrapper around any other\n object, usually a user-defined method object. When a static\n method object is retrieved from a class or a class instance, the\n object actually returned is the wrapped object, which is not\n subject to any further transformation. Static method objects are\n not themselves callable, although the objects they wrap usually\n are. Static method objects are created by the built-in\n "staticmethod()" constructor.\n\n Class method objects\n A class method object, like a static method object, is a wrapper\n around another object that alters the way in which that object\n is retrieved from classes and class instances. The behaviour of\n class method objects upon such retrieval is described above,\n under "User-defined methods". Class method objects are created\n by the built-in "classmethod()" constructor.\n', 'typesfunctions': u'\nFunctions\n*********\n\nFunction objects are created by function definitions. The only\noperation on a function object is to call it: "func(argument-list)".\n\nThere are really two flavors of function objects: built-in functions\nand user-defined functions. Both support the same operation (to call\nthe function), but the implementation is different, hence the\ndifferent object types.\n\nSee *Function definitions* for more information.\n', 'typesmapping': u'\nMapping Types --- "dict"\n************************\n\nA *mapping* object maps *hashable* values to arbitrary objects.\nMappings are mutable objects. There is currently only one standard\nmapping type, the *dictionary*. (For other containers see the built-\nin "list", "set", and "tuple" classes, and the "collections" module.)\n\nA dictionary\'s keys are *almost* arbitrary values. Values that are\nnot *hashable*, that is, values containing lists, dictionaries or\nother mutable types (that are compared by value rather than by object\nidentity) may not be used as keys. Numeric types used for keys obey\nthe normal rules for numeric comparison: if two numbers compare equal\n(such as "1" and "1.0") then they can be used interchangeably to index\nthe same dictionary entry. (Note however, that since computers store\nfloating-point numbers as approximations it is usually unwise to use\nthem as dictionary keys.)\n\nDictionaries can be created by placing a comma-separated list of "key:\nvalue" pairs within braces, for example: "{\'jack\': 4098, \'sjoerd\':\n4127}" or "{4098: \'jack\', 4127: \'sjoerd\'}", or by the "dict"\nconstructor.\n\nclass class dict(**kwarg)\nclass class dict(mapping, **kwarg)\nclass class dict(iterable, **kwarg)\n\n Return a new dictionary initialized from an optional positional\n argument and a possibly empty set of keyword arguments.\n\n If no positional argument is given, an empty dictionary is created.\n If a positional argument is given and it is a mapping object, a\n dictionary is created with the same key-value pairs as the mapping\n object. Otherwise, the positional argument must be an *iterable*\n object. Each item in the iterable must itself be an iterable with\n exactly two objects. The first object of each item becomes a key\n in the new dictionary, and the second object the corresponding\n value. If a key occurs more than once, the last value for that key\n becomes the corresponding value in the new dictionary.\n\n If keyword arguments are given, the keyword arguments and their\n values are added to the dictionary created from the positional\n argument. If a key being added is already present, the value from\n the keyword argument replaces the value from the positional\n argument.\n\n To illustrate, the following examples all return a dictionary equal\n to "{"one": 1, "two": 2, "three": 3}":\n\n >>> a = dict(one=1, two=2, three=3)\n >>> b = {\'one\': 1, \'two\': 2, \'three\': 3}\n >>> c = dict(zip([\'one\', \'two\', \'three\'], [1, 2, 3]))\n >>> d = dict([(\'two\', 2), (\'one\', 1), (\'three\', 3)])\n >>> e = dict({\'three\': 3, \'one\': 1, \'two\': 2})\n >>> a == b == c == d == e\n True\n\n Providing keyword arguments as in the first example only works for\n keys that are valid Python identifiers. Otherwise, any valid keys\n can be used.\n\n These are the operations that dictionaries support (and therefore,\n custom mapping types should support too):\n\n len(d)\n\n Return the number of items in the dictionary *d*.\n\n d[key]\n\n Return the item of *d* with key *key*. Raises a "KeyError" if\n *key* is not in the map.\n\n If a subclass of dict defines a method "__missing__()" and *key*\n is not present, the "d[key]" operation calls that method with\n the key *key* as argument. The "d[key]" operation then returns\n or raises whatever is returned or raised by the\n "__missing__(key)" call. No other operations or methods invoke\n "__missing__()". If "__missing__()" is not defined, "KeyError"\n is raised. "__missing__()" must be a method; it cannot be an\n instance variable:\n\n >>> class Counter(dict):\n ... def __missing__(self, key):\n ... return 0\n >>> c = Counter()\n >>> c[\'red\']\n 0\n >>> c[\'red\'] += 1\n >>> c[\'red\']\n 1\n\n The example above shows part of the implementation of\n "collections.Counter". A different "__missing__" method is used\n by "collections.defaultdict".\n\n d[key] = value\n\n Set "d[key]" to *value*.\n\n del d[key]\n\n Remove "d[key]" from *d*. Raises a "KeyError" if *key* is not\n in the map.\n\n key in d\n\n Return "True" if *d* has a key *key*, else "False".\n\n key not in d\n\n Equivalent to "not key in d".\n\n iter(d)\n\n Return an iterator over the keys of the dictionary. This is a\n shortcut for "iter(d.keys())".\n\n clear()\n\n Remove all items from the dictionary.\n\n copy()\n\n Return a shallow copy of the dictionary.\n\n classmethod fromkeys(seq[, value])\n\n Create a new dictionary with keys from *seq* and values set to\n *value*.\n\n "fromkeys()" is a class method that returns a new dictionary.\n *value* defaults to "None".\n\n get(key[, default])\n\n Return the value for *key* if *key* is in the dictionary, else\n *default*. If *default* is not given, it defaults to "None", so\n that this method never raises a "KeyError".\n\n items()\n\n Return a new view of the dictionary\'s items ("(key, value)"\n pairs). See the *documentation of view objects*.\n\n keys()\n\n Return a new view of the dictionary\'s keys. See the\n *documentation of view objects*.\n\n pop(key[, default])\n\n If *key* is in the dictionary, remove it and return its value,\n else return *default*. If *default* is not given and *key* is\n not in the dictionary, a "KeyError" is raised.\n\n popitem()\n\n Remove and return an arbitrary "(key, value)" pair from the\n dictionary.\n\n "popitem()" is useful to destructively iterate over a\n dictionary, as often used in set algorithms. If the dictionary\n is empty, calling "popitem()" raises a "KeyError".\n\n setdefault(key[, default])\n\n If *key* is in the dictionary, return its value. If not, insert\n *key* with a value of *default* and return *default*. *default*\n defaults to "None".\n\n update([other])\n\n Update the dictionary with the key/value pairs from *other*,\n overwriting existing keys. Return "None".\n\n "update()" accepts either another dictionary object or an\n iterable of key/value pairs (as tuples or other iterables of\n length two). If keyword arguments are specified, the dictionary\n is then updated with those key/value pairs: "d.update(red=1,\n blue=2)".\n\n values()\n\n Return a new view of the dictionary\'s values. See the\n *documentation of view objects*.\n\n Dictionaries compare equal if and only if they have the same "(key,\n value)" pairs. Order comparisons (\'<\', \'<=\', \'>=\', \'>\') raise\n "TypeError".\n\nSee also: "types.MappingProxyType" can be used to create a read-only\n view of a "dict".\n\n\nDictionary view objects\n=======================\n\nThe objects returned by "dict.keys()", "dict.values()" and\n"dict.items()" are *view objects*. They provide a dynamic view on the\ndictionary\'s entries, which means that when the dictionary changes,\nthe view reflects these changes.\n\nDictionary views can be iterated over to yield their respective data,\nand support membership tests:\n\nlen(dictview)\n\n Return the number of entries in the dictionary.\n\niter(dictview)\n\n Return an iterator over the keys, values or items (represented as\n tuples of "(key, value)") in the dictionary.\n\n Keys and values are iterated over in an arbitrary order which is\n non-random, varies across Python implementations, and depends on\n the dictionary\'s history of insertions and deletions. If keys,\n values and items views are iterated over with no intervening\n modifications to the dictionary, the order of items will directly\n correspond. This allows the creation of "(value, key)" pairs using\n "zip()": "pairs = zip(d.values(), d.keys())". Another way to\n create the same list is "pairs = [(v, k) for (k, v) in d.items()]".\n\n Iterating views while adding or deleting entries in the dictionary\n may raise a "RuntimeError" or fail to iterate over all entries.\n\nx in dictview\n\n Return "True" if *x* is in the underlying dictionary\'s keys, values\n or items (in the latter case, *x* should be a "(key, value)"\n tuple).\n\nKeys views are set-like since their entries are unique and hashable.\nIf all values are hashable, so that "(key, value)" pairs are unique\nand hashable, then the items view is also set-like. (Values views are\nnot treated as set-like since the entries are generally not unique.)\nFor set-like views, all of the operations defined for the abstract\nbase class "collections.abc.Set" are available (for example, "==",\n"<", or "^").\n\nAn example of dictionary view usage:\n\n >>> dishes = {\'eggs\': 2, \'sausage\': 1, \'bacon\': 1, \'spam\': 500}\n >>> keys = dishes.keys()\n >>> values = dishes.values()\n\n >>> # iteration\n >>> n = 0\n >>> for val in values:\n ... n += val\n >>> print(n)\n 504\n\n >>> # keys and values are iterated over in the same order\n >>> list(keys)\n [\'eggs\', \'bacon\', \'sausage\', \'spam\']\n >>> list(values)\n [2, 1, 1, 500]\n\n >>> # view objects are dynamic and reflect dict changes\n >>> del dishes[\'eggs\']\n >>> del dishes[\'sausage\']\n >>> list(keys)\n [\'spam\', \'bacon\']\n\n >>> # set operations\n >>> keys & {\'eggs\', \'bacon\', \'salad\'}\n {\'bacon\'}\n >>> keys ^ {\'sausage\', \'juice\'}\n {\'juice\', \'sausage\', \'bacon\', \'spam\'}\n', 'typesmethods': u'\nMethods\n*******\n\nMethods are functions that are called using the attribute notation.\nThere are two flavors: built-in methods (such as "append()" on lists)\nand class instance methods. Built-in methods are described with the\ntypes that support them.\n\nIf you access a method (a function defined in a class namespace)\nthrough an instance, you get a special object: a *bound method* (also\ncalled *instance method*) object. When called, it will add the "self"\nargument to the argument list. Bound methods have two special read-\nonly attributes: "m.__self__" is the object on which the method\noperates, and "m.__func__" is the function implementing the method.\nCalling "m(arg-1, arg-2, ..., arg-n)" is completely equivalent to\ncalling "m.__func__(m.__self__, arg-1, arg-2, ..., arg-n)".\n\nLike function objects, bound method objects support getting arbitrary\nattributes. However, since method attributes are actually stored on\nthe underlying function object ("meth.__func__"), setting method\nattributes on bound methods is disallowed. Attempting to set an\nattribute on a method results in an "AttributeError" being raised. In\norder to set a method attribute, you need to explicitly set it on the\nunderlying function object:\n\n >>> class C:\n ... def method(self):\n ... pass\n ...\n >>> c = C()\n >>> c.method.whoami = \'my name is method\' # can\'t set on the method\n Traceback (most recent call last):\n File "", line 1, in \n AttributeError: \'method\' object has no attribute \'whoami\'\n >>> c.method.__func__.whoami = \'my name is method\'\n >>> c.method.whoami\n \'my name is method\'\n\nSee *The standard type hierarchy* for more information.\n', 'typesmodules': u'\nModules\n*******\n\nThe only special operation on a module is attribute access: "m.name",\nwhere *m* is a module and *name* accesses a name defined in *m*\'s\nsymbol table. Module attributes can be assigned to. (Note that the\n"import" statement is not, strictly speaking, an operation on a module\nobject; "import foo" does not require a module object named *foo* to\nexist, rather it requires an (external) *definition* for a module\nnamed *foo* somewhere.)\n\nA special attribute of every module is "__dict__". This is the\ndictionary containing the module\'s symbol table. Modifying this\ndictionary will actually change the module\'s symbol table, but direct\nassignment to the "__dict__" attribute is not possible (you can write\n"m.__dict__[\'a\'] = 1", which defines "m.a" to be "1", but you can\'t\nwrite "m.__dict__ = {}"). Modifying "__dict__" directly is not\nrecommended.\n\nModules built into the interpreter are written like this: "". If loaded from a file, they are written as\n"".\n', - 'typesseq': u'\nSequence Types --- "list", "tuple", "range"\n*******************************************\n\nThere are three basic sequence types: lists, tuples, and range\nobjects. Additional sequence types tailored for processing of *binary\ndata* and *text strings* are described in dedicated sections.\n\n\nCommon Sequence Operations\n==========================\n\nThe operations in the following table are supported by most sequence\ntypes, both mutable and immutable. The "collections.abc.Sequence" ABC\nis provided to make it easier to correctly implement these operations\non custom sequence types.\n\nThis table lists the sequence operations sorted in ascending priority.\nIn the table, *s* and *t* are sequences of the same type, *n*, *i*,\n*j* and *k* are integers and *x* is an arbitrary object that meets any\ntype and value restrictions imposed by *s*.\n\nThe "in" and "not in" operations have the same priorities as the\ncomparison operations. The "+" (concatenation) and "*" (repetition)\noperations have the same priority as the corresponding numeric\noperations.\n\n+----------------------------+----------------------------------+------------+\n| Operation | Result | Notes |\n+============================+==================================+============+\n| "x in s" | "True" if an item of *s* is | (1) |\n| | equal to *x*, else "False" | |\n+----------------------------+----------------------------------+------------+\n| "x not in s" | "False" if an item of *s* is | (1) |\n| | equal to *x*, else "True" | |\n+----------------------------+----------------------------------+------------+\n| "s + t" | the concatenation of *s* and *t* | (6)(7) |\n+----------------------------+----------------------------------+------------+\n| "s * n" or "n * s" | equivalent to adding *s* to | (2)(7) |\n| | itself *n* times | |\n+----------------------------+----------------------------------+------------+\n| "s[i]" | *i*th item of *s*, origin 0 | (3) |\n+----------------------------+----------------------------------+------------+\n| "s[i:j]" | slice of *s* from *i* to *j* | (3)(4) |\n+----------------------------+----------------------------------+------------+\n| "s[i:j:k]" | slice of *s* from *i* to *j* | (3)(5) |\n| | with step *k* | |\n+----------------------------+----------------------------------+------------+\n| "len(s)" | length of *s* | |\n+----------------------------+----------------------------------+------------+\n| "min(s)" | smallest item of *s* | |\n+----------------------------+----------------------------------+------------+\n| "max(s)" | largest item of *s* | |\n+----------------------------+----------------------------------+------------+\n| "s.index(x[, i[, j]])" | index of the first occurrence of | (8) |\n| | *x* in *s* (at or after index | |\n| | *i* and before index *j*) | |\n+----------------------------+----------------------------------+------------+\n| "s.count(x)" | total number of occurrences of | |\n| | *x* in *s* | |\n+----------------------------+----------------------------------+------------+\n\nSequences of the same type also support comparisons. In particular,\ntuples and lists are compared lexicographically by comparing\ncorresponding elements. This means that to compare equal, every\nelement must compare equal and the two sequences must be of the same\ntype and have the same length. (For full details see *Comparisons* in\nthe language reference.)\n\nNotes:\n\n1. While the "in" and "not in" operations are used only for simple\n containment testing in the general case, some specialised sequences\n (such as "str", "bytes" and "bytearray") also use them for\n subsequence testing:\n\n >>> "gg" in "eggs"\n True\n\n2. Values of *n* less than "0" are treated as "0" (which yields an\n empty sequence of the same type as *s*). Note that items in the\n sequence *s* are not copied; they are referenced multiple times.\n This often haunts new Python programmers; consider:\n\n >>> lists = [[]] * 3\n >>> lists\n [[], [], []]\n >>> lists[0].append(3)\n >>> lists\n [[3], [3], [3]]\n\n What has happened is that "[[]]" is a one-element list containing\n an empty list, so all three elements of "[[]] * 3" are references\n to this single empty list. Modifying any of the elements of\n "lists" modifies this single list. You can create a list of\n different lists this way:\n\n >>> lists = [[] for i in range(3)]\n >>> lists[0].append(3)\n >>> lists[1].append(5)\n >>> lists[2].append(7)\n >>> lists\n [[3], [5], [7]]\n\n Further explanation is available in the FAQ entry *How do I create\n a multidimensional list?*.\n\n3. If *i* or *j* is negative, the index is relative to the end of\n the string: "len(s) + i" or "len(s) + j" is substituted. But note\n that "-0" is still "0".\n\n4. The slice of *s* from *i* to *j* is defined as the sequence of\n items with index *k* such that "i <= k < j". If *i* or *j* is\n greater than "len(s)", use "len(s)". If *i* is omitted or "None",\n use "0". If *j* is omitted or "None", use "len(s)". If *i* is\n greater than or equal to *j*, the slice is empty.\n\n5. The slice of *s* from *i* to *j* with step *k* is defined as the\n sequence of items with index "x = i + n*k" such that "0 <= n <\n (j-i)/k". In other words, the indices are "i", "i+k", "i+2*k",\n "i+3*k" and so on, stopping when *j* is reached (but never\n including *j*). If *i* or *j* is greater than "len(s)", use\n "len(s)". If *i* or *j* are omitted or "None", they become "end"\n values (which end depends on the sign of *k*). Note, *k* cannot be\n zero. If *k* is "None", it is treated like "1".\n\n6. Concatenating immutable sequences always results in a new\n object. This means that building up a sequence by repeated\n concatenation will have a quadratic runtime cost in the total\n sequence length. To get a linear runtime cost, you must switch to\n one of the alternatives below:\n\n * if concatenating "str" objects, you can build a list and use\n "str.join()" at the end or else write to an "io.StringIO"\n instance and retrieve its value when complete\n\n * if concatenating "bytes" objects, you can similarly use\n "bytes.join()" or "io.BytesIO", or you can do in-place\n concatenation with a "bytearray" object. "bytearray" objects are\n mutable and have an efficient overallocation mechanism\n\n * if concatenating "tuple" objects, extend a "list" instead\n\n * for other types, investigate the relevant class documentation\n\n7. Some sequence types (such as "range") only support item\n sequences that follow specific patterns, and hence don\'t support\n sequence concatenation or repetition.\n\n8. "index" raises "ValueError" when *x* is not found in *s*. When\n supported, the additional arguments to the index method allow\n efficient searching of subsections of the sequence. Passing the\n extra arguments is roughly equivalent to using "s[i:j].index(x)",\n only without copying any data and with the returned index being\n relative to the start of the sequence rather than the start of the\n slice.\n\n\nImmutable Sequence Types\n========================\n\nThe only operation that immutable sequence types generally implement\nthat is not also implemented by mutable sequence types is support for\nthe "hash()" built-in.\n\nThis support allows immutable sequences, such as "tuple" instances, to\nbe used as "dict" keys and stored in "set" and "frozenset" instances.\n\nAttempting to hash an immutable sequence that contains unhashable\nvalues will result in "TypeError".\n\n\nMutable Sequence Types\n======================\n\nThe operations in the following table are defined on mutable sequence\ntypes. The "collections.abc.MutableSequence" ABC is provided to make\nit easier to correctly implement these operations on custom sequence\ntypes.\n\nIn the table *s* is an instance of a mutable sequence type, *t* is any\niterable object and *x* is an arbitrary object that meets any type and\nvalue restrictions imposed by *s* (for example, "bytearray" only\naccepts integers that meet the value restriction "0 <= x <= 255").\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation | Result | Notes |\n+================================+==================================+=======================+\n| "s[i] = x" | item *i* of *s* is replaced by | |\n| | *x* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j] = t" | slice of *s* from *i* to *j* is | |\n| | replaced by the contents of the | |\n| | iterable *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j]" | same as "s[i:j] = []" | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j:k] = t" | the elements of "s[i:j:k]" are | (1) |\n| | replaced by those of *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j:k]" | removes the elements of | |\n| | "s[i:j:k]" from the list | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.append(x)" | appends *x* to the end of the | |\n| | sequence (same as | |\n| | "s[len(s):len(s)] = [x]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.clear()" | removes all items from "s" (same | (5) |\n| | as "del s[:]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.copy()" | creates a shallow copy of "s" | (5) |\n| | (same as "s[:]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.extend(t)" or "s += t" | extends *s* with the contents of | |\n| | *t* (for the most part the same | |\n| | as "s[len(s):len(s)] = t") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s *= n" | updates *s* with its contents | (6) |\n| | repeated *n* times | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.insert(i, x)" | inserts *x* into *s* at the | |\n| | index given by *i* (same as | |\n| | "s[i:i] = [x]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.pop([i])" | retrieves the item at *i* and | (2) |\n| | also removes it from *s* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.remove(x)" | remove the first item from *s* | (3) |\n| | where "s[i] == x" | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.reverse()" | reverses the items of *s* in | (4) |\n| | place | |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The optional argument *i* defaults to "-1", so that by default\n the last item is removed and returned.\n\n3. "remove" raises "ValueError" when *x* is not found in *s*.\n\n4. The "reverse()" method modifies the sequence in place for\n economy of space when reversing a large sequence. To remind users\n that it operates by side effect, it does not return the reversed\n sequence.\n\n5. "clear()" and "copy()" are included for consistency with the\n interfaces of mutable containers that don\'t support slicing\n operations (such as "dict" and "set")\n\n New in version 3.3: "clear()" and "copy()" methods.\n\n6. The value *n* is an integer, or an object implementing\n "__index__()". Zero and negative values of *n* clear the sequence.\n Items in the sequence are not copied; they are referenced multiple\n times, as explained for "s * n" under *Common Sequence Operations*.\n\n\nLists\n=====\n\nLists are mutable sequences, typically used to store collections of\nhomogeneous items (where the precise degree of similarity will vary by\napplication).\n\nclass class list([iterable])\n\n Lists may be constructed in several ways:\n\n * Using a pair of square brackets to denote the empty list: "[]"\n\n * Using square brackets, separating items with commas: "[a]",\n "[a, b, c]"\n\n * Using a list comprehension: "[x for x in iterable]"\n\n * Using the type constructor: "list()" or "list(iterable)"\n\n The constructor builds a list whose items are the same and in the\n same order as *iterable*\'s items. *iterable* may be either a\n sequence, a container that supports iteration, or an iterator\n object. If *iterable* is already a list, a copy is made and\n returned, similar to "iterable[:]". For example, "list(\'abc\')"\n returns "[\'a\', \'b\', \'c\']" and "list( (1, 2, 3) )" returns "[1, 2,\n 3]". If no argument is given, the constructor creates a new empty\n list, "[]".\n\n Many other operations also produce lists, including the "sorted()"\n built-in.\n\n Lists implement all of the *common* and *mutable* sequence\n operations. Lists also provide the following additional method:\n\n sort(*, key=None, reverse=None)\n\n This method sorts the list in place, using only "<" comparisons\n between items. Exceptions are not suppressed - if any comparison\n operations fail, the entire sort operation will fail (and the\n list will likely be left in a partially modified state).\n\n "sort()" accepts two arguments that can only be passed by\n keyword (*keyword-only arguments*):\n\n *key* specifies a function of one argument that is used to\n extract a comparison key from each list element (for example,\n "key=str.lower"). The key corresponding to each item in the list\n is calculated once and then used for the entire sorting process.\n The default value of "None" means that list items are sorted\n directly without calculating a separate key value.\n\n The "functools.cmp_to_key()" utility is available to convert a\n 2.x style *cmp* function to a *key* function.\n\n *reverse* is a boolean value. If set to "True", then the list\n elements are sorted as if each comparison were reversed.\n\n This method modifies the sequence in place for economy of space\n when sorting a large sequence. To remind users that it operates\n by side effect, it does not return the sorted sequence (use\n "sorted()" to explicitly request a new sorted list instance).\n\n The "sort()" method is guaranteed to be stable. A sort is\n stable if it guarantees not to change the relative order of\n elements that compare equal --- this is helpful for sorting in\n multiple passes (for example, sort by department, then by salary\n grade).\n\n **CPython implementation detail:** While a list is being sorted,\n the effect of attempting to mutate, or even inspect, the list is\n undefined. The C implementation of Python makes the list appear\n empty for the duration, and raises "ValueError" if it can detect\n that the list has been mutated during a sort.\n\n\nTuples\n======\n\nTuples are immutable sequences, typically used to store collections of\nheterogeneous data (such as the 2-tuples produced by the "enumerate()"\nbuilt-in). Tuples are also used for cases where an immutable sequence\nof homogeneous data is needed (such as allowing storage in a "set" or\n"dict" instance).\n\nclass class tuple([iterable])\n\n Tuples may be constructed in a number of ways:\n\n * Using a pair of parentheses to denote the empty tuple: "()"\n\n * Using a trailing comma for a singleton tuple: "a," or "(a,)"\n\n * Separating items with commas: "a, b, c" or "(a, b, c)"\n\n * Using the "tuple()" built-in: "tuple()" or "tuple(iterable)"\n\n The constructor builds a tuple whose items are the same and in the\n same order as *iterable*\'s items. *iterable* may be either a\n sequence, a container that supports iteration, or an iterator\n object. If *iterable* is already a tuple, it is returned\n unchanged. For example, "tuple(\'abc\')" returns "(\'a\', \'b\', \'c\')"\n and "tuple( [1, 2, 3] )" returns "(1, 2, 3)". If no argument is\n given, the constructor creates a new empty tuple, "()".\n\n Note that it is actually the comma which makes a tuple, not the\n parentheses. The parentheses are optional, except in the empty\n tuple case, or when they are needed to avoid syntactic ambiguity.\n For example, "f(a, b, c)" is a function call with three arguments,\n while "f((a, b, c))" is a function call with a 3-tuple as the sole\n argument.\n\n Tuples implement all of the *common* sequence operations.\n\nFor heterogeneous collections of data where access by name is clearer\nthan access by index, "collections.namedtuple()" may be a more\nappropriate choice than a simple tuple object.\n\n\nRanges\n======\n\nThe "range" type represents an immutable sequence of numbers and is\ncommonly used for looping a specific number of times in "for" loops.\n\nclass class range(stop)\nclass class range(start, stop[, step])\n\n The arguments to the range constructor must be integers (either\n built-in "int" or any object that implements the "__index__"\n special method). If the *step* argument is omitted, it defaults to\n "1". If the *start* argument is omitted, it defaults to "0". If\n *step* is zero, "ValueError" is raised.\n\n For a positive *step*, the contents of a range "r" are determined\n by the formula "r[i] = start + step*i" where "i >= 0" and "r[i] <\n stop".\n\n For a negative *step*, the contents of the range are still\n determined by the formula "r[i] = start + step*i", but the\n constraints are "i >= 0" and "r[i] > stop".\n\n A range object will be empty if "r[0]" does not meet the value\n constraint. Ranges do support negative indices, but these are\n interpreted as indexing from the end of the sequence determined by\n the positive indices.\n\n Ranges containing absolute values larger than "sys.maxsize" are\n permitted but some features (such as "len()") may raise\n "OverflowError".\n\n Range examples:\n\n >>> list(range(10))\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n >>> list(range(1, 11))\n [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n >>> list(range(0, 30, 5))\n [0, 5, 10, 15, 20, 25]\n >>> list(range(0, 10, 3))\n [0, 3, 6, 9]\n >>> list(range(0, -10, -1))\n [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]\n >>> list(range(0))\n []\n >>> list(range(1, 0))\n []\n\n Ranges implement all of the *common* sequence operations except\n concatenation and repetition (due to the fact that range objects\n can only represent sequences that follow a strict pattern and\n repetition and concatenation will usually violate that pattern).\n\n start\n\n The value of the *start* parameter (or "0" if the parameter was\n not supplied)\n\n stop\n\n The value of the *stop* parameter\n\n step\n\n The value of the *step* parameter (or "1" if the parameter was\n not supplied)\n\nThe advantage of the "range" type over a regular "list" or "tuple" is\nthat a "range" object will always take the same (small) amount of\nmemory, no matter the size of the range it represents (as it only\nstores the "start", "stop" and "step" values, calculating individual\nitems and subranges as needed).\n\nRange objects implement the "collections.abc.Sequence" ABC, and\nprovide features such as containment tests, element index lookup,\nslicing and support for negative indices (see *Sequence Types ---\nlist, tuple, range*):\n\n>>> r = range(0, 20, 2)\n>>> r\nrange(0, 20, 2)\n>>> 11 in r\nFalse\n>>> 10 in r\nTrue\n>>> r.index(10)\n5\n>>> r[5]\n10\n>>> r[:5]\nrange(0, 10, 2)\n>>> r[-1]\n18\n\nTesting range objects for equality with "==" and "!=" compares them as\nsequences. That is, two range objects are considered equal if they\nrepresent the same sequence of values. (Note that two range objects\nthat compare equal might have different "start", "stop" and "step"\nattributes, for example "range(0) == range(2, 1, 3)" or "range(0, 3,\n2) == range(0, 4, 2)".)\n\nChanged in version 3.2: Implement the Sequence ABC. Support slicing\nand negative indices. Test "int" objects for membership in constant\ntime instead of iterating through all items.\n\nChanged in version 3.3: Define \'==\' and \'!=\' to compare range objects\nbased on the sequence of values they define (instead of comparing\nbased on object identity).\n\nNew in version 3.3: The "start", "stop" and "step" attributes.\n', + 'typesseq': u'\nSequence Types --- "list", "tuple", "range"\n*******************************************\n\nThere are three basic sequence types: lists, tuples, and range\nobjects. Additional sequence types tailored for processing of *binary\ndata* and *text strings* are described in dedicated sections.\n\n\nCommon Sequence Operations\n==========================\n\nThe operations in the following table are supported by most sequence\ntypes, both mutable and immutable. The "collections.abc.Sequence" ABC\nis provided to make it easier to correctly implement these operations\non custom sequence types.\n\nThis table lists the sequence operations sorted in ascending priority.\nIn the table, *s* and *t* are sequences of the same type, *n*, *i*,\n*j* and *k* are integers and *x* is an arbitrary object that meets any\ntype and value restrictions imposed by *s*.\n\nThe "in" and "not in" operations have the same priorities as the\ncomparison operations. The "+" (concatenation) and "*" (repetition)\noperations have the same priority as the corresponding numeric\noperations.\n\n+----------------------------+----------------------------------+------------+\n| Operation | Result | Notes |\n+============================+==================================+============+\n| "x in s" | "True" if an item of *s* is | (1) |\n| | equal to *x*, else "False" | |\n+----------------------------+----------------------------------+------------+\n| "x not in s" | "False" if an item of *s* is | (1) |\n| | equal to *x*, else "True" | |\n+----------------------------+----------------------------------+------------+\n| "s + t" | the concatenation of *s* and *t* | (6)(7) |\n+----------------------------+----------------------------------+------------+\n| "s * n" or "n * s" | equivalent to adding *s* to | (2)(7) |\n| | itself *n* times | |\n+----------------------------+----------------------------------+------------+\n| "s[i]" | *i*th item of *s*, origin 0 | (3) |\n+----------------------------+----------------------------------+------------+\n| "s[i:j]" | slice of *s* from *i* to *j* | (3)(4) |\n+----------------------------+----------------------------------+------------+\n| "s[i:j:k]" | slice of *s* from *i* to *j* | (3)(5) |\n| | with step *k* | |\n+----------------------------+----------------------------------+------------+\n| "len(s)" | length of *s* | |\n+----------------------------+----------------------------------+------------+\n| "min(s)" | smallest item of *s* | |\n+----------------------------+----------------------------------+------------+\n| "max(s)" | largest item of *s* | |\n+----------------------------+----------------------------------+------------+\n| "s.index(x[, i[, j]])" | index of the first occurrence of | (8) |\n| | *x* in *s* (at or after index | |\n| | *i* and before index *j*) | |\n+----------------------------+----------------------------------+------------+\n| "s.count(x)" | total number of occurrences of | |\n| | *x* in *s* | |\n+----------------------------+----------------------------------+------------+\n\nSequences of the same type also support comparisons. In particular,\ntuples and lists are compared lexicographically by comparing\ncorresponding elements. This means that to compare equal, every\nelement must compare equal and the two sequences must be of the same\ntype and have the same length. (For full details see *Comparisons* in\nthe language reference.)\n\nNotes:\n\n1. While the "in" and "not in" operations are used only for simple\n containment testing in the general case, some specialised sequences\n (such as "str", "bytes" and "bytearray") also use them for\n subsequence testing:\n\n >>> "gg" in "eggs"\n True\n\n2. Values of *n* less than "0" are treated as "0" (which yields an\n empty sequence of the same type as *s*). Note that items in the\n sequence *s* are not copied; they are referenced multiple times.\n This often haunts new Python programmers; consider:\n\n >>> lists = [[]] * 3\n >>> lists\n [[], [], []]\n >>> lists[0].append(3)\n >>> lists\n [[3], [3], [3]]\n\n What has happened is that "[[]]" is a one-element list containing\n an empty list, so all three elements of "[[]] * 3" are references\n to this single empty list. Modifying any of the elements of\n "lists" modifies this single list. You can create a list of\n different lists this way:\n\n >>> lists = [[] for i in range(3)]\n >>> lists[0].append(3)\n >>> lists[1].append(5)\n >>> lists[2].append(7)\n >>> lists\n [[3], [5], [7]]\n\n Further explanation is available in the FAQ entry *How do I create\n a multidimensional list?*.\n\n3. If *i* or *j* is negative, the index is relative to the end of\n sequence *s*: "len(s) + i" or "len(s) + j" is substituted. But\n note that "-0" is still "0".\n\n4. The slice of *s* from *i* to *j* is defined as the sequence of\n items with index *k* such that "i <= k < j". If *i* or *j* is\n greater than "len(s)", use "len(s)". If *i* is omitted or "None",\n use "0". If *j* is omitted or "None", use "len(s)". If *i* is\n greater than or equal to *j*, the slice is empty.\n\n5. The slice of *s* from *i* to *j* with step *k* is defined as the\n sequence of items with index "x = i + n*k" such that "0 <= n <\n (j-i)/k". In other words, the indices are "i", "i+k", "i+2*k",\n "i+3*k" and so on, stopping when *j* is reached (but never\n including *j*). When *k* is positive, *i* and *j* are reduced to\n "len(s)" if they are greater. When *k* is negative, *i* and *j* are\n reduced to "len(s) - 1" if they are greater. If *i* or *j* are\n omitted or "None", they become "end" values (which end depends on\n the sign of *k*). Note, *k* cannot be zero. If *k* is "None", it\n is treated like "1".\n\n6. Concatenating immutable sequences always results in a new\n object. This means that building up a sequence by repeated\n concatenation will have a quadratic runtime cost in the total\n sequence length. To get a linear runtime cost, you must switch to\n one of the alternatives below:\n\n * if concatenating "str" objects, you can build a list and use\n "str.join()" at the end or else write to an "io.StringIO"\n instance and retrieve its value when complete\n\n * if concatenating "bytes" objects, you can similarly use\n "bytes.join()" or "io.BytesIO", or you can do in-place\n concatenation with a "bytearray" object. "bytearray" objects are\n mutable and have an efficient overallocation mechanism\n\n * if concatenating "tuple" objects, extend a "list" instead\n\n * for other types, investigate the relevant class documentation\n\n7. Some sequence types (such as "range") only support item\n sequences that follow specific patterns, and hence don\'t support\n sequence concatenation or repetition.\n\n8. "index" raises "ValueError" when *x* is not found in *s*. When\n supported, the additional arguments to the index method allow\n efficient searching of subsections of the sequence. Passing the\n extra arguments is roughly equivalent to using "s[i:j].index(x)",\n only without copying any data and with the returned index being\n relative to the start of the sequence rather than the start of the\n slice.\n\n\nImmutable Sequence Types\n========================\n\nThe only operation that immutable sequence types generally implement\nthat is not also implemented by mutable sequence types is support for\nthe "hash()" built-in.\n\nThis support allows immutable sequences, such as "tuple" instances, to\nbe used as "dict" keys and stored in "set" and "frozenset" instances.\n\nAttempting to hash an immutable sequence that contains unhashable\nvalues will result in "TypeError".\n\n\nMutable Sequence Types\n======================\n\nThe operations in the following table are defined on mutable sequence\ntypes. The "collections.abc.MutableSequence" ABC is provided to make\nit easier to correctly implement these operations on custom sequence\ntypes.\n\nIn the table *s* is an instance of a mutable sequence type, *t* is any\niterable object and *x* is an arbitrary object that meets any type and\nvalue restrictions imposed by *s* (for example, "bytearray" only\naccepts integers that meet the value restriction "0 <= x <= 255").\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation | Result | Notes |\n+================================+==================================+=======================+\n| "s[i] = x" | item *i* of *s* is replaced by | |\n| | *x* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j] = t" | slice of *s* from *i* to *j* is | |\n| | replaced by the contents of the | |\n| | iterable *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j]" | same as "s[i:j] = []" | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j:k] = t" | the elements of "s[i:j:k]" are | (1) |\n| | replaced by those of *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j:k]" | removes the elements of | |\n| | "s[i:j:k]" from the list | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.append(x)" | appends *x* to the end of the | |\n| | sequence (same as | |\n| | "s[len(s):len(s)] = [x]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.clear()" | removes all items from "s" (same | (5) |\n| | as "del s[:]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.copy()" | creates a shallow copy of "s" | (5) |\n| | (same as "s[:]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.extend(t)" or "s += t" | extends *s* with the contents of | |\n| | *t* (for the most part the same | |\n| | as "s[len(s):len(s)] = t") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s *= n" | updates *s* with its contents | (6) |\n| | repeated *n* times | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.insert(i, x)" | inserts *x* into *s* at the | |\n| | index given by *i* (same as | |\n| | "s[i:i] = [x]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.pop([i])" | retrieves the item at *i* and | (2) |\n| | also removes it from *s* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.remove(x)" | remove the first item from *s* | (3) |\n| | where "s[i] == x" | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.reverse()" | reverses the items of *s* in | (4) |\n| | place | |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The optional argument *i* defaults to "-1", so that by default\n the last item is removed and returned.\n\n3. "remove" raises "ValueError" when *x* is not found in *s*.\n\n4. The "reverse()" method modifies the sequence in place for\n economy of space when reversing a large sequence. To remind users\n that it operates by side effect, it does not return the reversed\n sequence.\n\n5. "clear()" and "copy()" are included for consistency with the\n interfaces of mutable containers that don\'t support slicing\n operations (such as "dict" and "set")\n\n New in version 3.3: "clear()" and "copy()" methods.\n\n6. The value *n* is an integer, or an object implementing\n "__index__()". Zero and negative values of *n* clear the sequence.\n Items in the sequence are not copied; they are referenced multiple\n times, as explained for "s * n" under *Common Sequence Operations*.\n\n\nLists\n=====\n\nLists are mutable sequences, typically used to store collections of\nhomogeneous items (where the precise degree of similarity will vary by\napplication).\n\nclass class list([iterable])\n\n Lists may be constructed in several ways:\n\n * Using a pair of square brackets to denote the empty list: "[]"\n\n * Using square brackets, separating items with commas: "[a]",\n "[a, b, c]"\n\n * Using a list comprehension: "[x for x in iterable]"\n\n * Using the type constructor: "list()" or "list(iterable)"\n\n The constructor builds a list whose items are the same and in the\n same order as *iterable*\'s items. *iterable* may be either a\n sequence, a container that supports iteration, or an iterator\n object. If *iterable* is already a list, a copy is made and\n returned, similar to "iterable[:]". For example, "list(\'abc\')"\n returns "[\'a\', \'b\', \'c\']" and "list( (1, 2, 3) )" returns "[1, 2,\n 3]". If no argument is given, the constructor creates a new empty\n list, "[]".\n\n Many other operations also produce lists, including the "sorted()"\n built-in.\n\n Lists implement all of the *common* and *mutable* sequence\n operations. Lists also provide the following additional method:\n\n sort(*, key=None, reverse=None)\n\n This method sorts the list in place, using only "<" comparisons\n between items. Exceptions are not suppressed - if any comparison\n operations fail, the entire sort operation will fail (and the\n list will likely be left in a partially modified state).\n\n "sort()" accepts two arguments that can only be passed by\n keyword (*keyword-only arguments*):\n\n *key* specifies a function of one argument that is used to\n extract a comparison key from each list element (for example,\n "key=str.lower"). The key corresponding to each item in the list\n is calculated once and then used for the entire sorting process.\n The default value of "None" means that list items are sorted\n directly without calculating a separate key value.\n\n The "functools.cmp_to_key()" utility is available to convert a\n 2.x style *cmp* function to a *key* function.\n\n *reverse* is a boolean value. If set to "True", then the list\n elements are sorted as if each comparison were reversed.\n\n This method modifies the sequence in place for economy of space\n when sorting a large sequence. To remind users that it operates\n by side effect, it does not return the sorted sequence (use\n "sorted()" to explicitly request a new sorted list instance).\n\n The "sort()" method is guaranteed to be stable. A sort is\n stable if it guarantees not to change the relative order of\n elements that compare equal --- this is helpful for sorting in\n multiple passes (for example, sort by department, then by salary\n grade).\n\n **CPython implementation detail:** While a list is being sorted,\n the effect of attempting to mutate, or even inspect, the list is\n undefined. The C implementation of Python makes the list appear\n empty for the duration, and raises "ValueError" if it can detect\n that the list has been mutated during a sort.\n\n\nTuples\n======\n\nTuples are immutable sequences, typically used to store collections of\nheterogeneous data (such as the 2-tuples produced by the "enumerate()"\nbuilt-in). Tuples are also used for cases where an immutable sequence\nof homogeneous data is needed (such as allowing storage in a "set" or\n"dict" instance).\n\nclass class tuple([iterable])\n\n Tuples may be constructed in a number of ways:\n\n * Using a pair of parentheses to denote the empty tuple: "()"\n\n * Using a trailing comma for a singleton tuple: "a," or "(a,)"\n\n * Separating items with commas: "a, b, c" or "(a, b, c)"\n\n * Using the "tuple()" built-in: "tuple()" or "tuple(iterable)"\n\n The constructor builds a tuple whose items are the same and in the\n same order as *iterable*\'s items. *iterable* may be either a\n sequence, a container that supports iteration, or an iterator\n object. If *iterable* is already a tuple, it is returned\n unchanged. For example, "tuple(\'abc\')" returns "(\'a\', \'b\', \'c\')"\n and "tuple( [1, 2, 3] )" returns "(1, 2, 3)". If no argument is\n given, the constructor creates a new empty tuple, "()".\n\n Note that it is actually the comma which makes a tuple, not the\n parentheses. The parentheses are optional, except in the empty\n tuple case, or when they are needed to avoid syntactic ambiguity.\n For example, "f(a, b, c)" is a function call with three arguments,\n while "f((a, b, c))" is a function call with a 3-tuple as the sole\n argument.\n\n Tuples implement all of the *common* sequence operations.\n\nFor heterogeneous collections of data where access by name is clearer\nthan access by index, "collections.namedtuple()" may be a more\nappropriate choice than a simple tuple object.\n\n\nRanges\n======\n\nThe "range" type represents an immutable sequence of numbers and is\ncommonly used for looping a specific number of times in "for" loops.\n\nclass class range(stop)\nclass class range(start, stop[, step])\n\n The arguments to the range constructor must be integers (either\n built-in "int" or any object that implements the "__index__"\n special method). If the *step* argument is omitted, it defaults to\n "1". If the *start* argument is omitted, it defaults to "0". If\n *step* is zero, "ValueError" is raised.\n\n For a positive *step*, the contents of a range "r" are determined\n by the formula "r[i] = start + step*i" where "i >= 0" and "r[i] <\n stop".\n\n For a negative *step*, the contents of the range are still\n determined by the formula "r[i] = start + step*i", but the\n constraints are "i >= 0" and "r[i] > stop".\n\n A range object will be empty if "r[0]" does not meet the value\n constraint. Ranges do support negative indices, but these are\n interpreted as indexing from the end of the sequence determined by\n the positive indices.\n\n Ranges containing absolute values larger than "sys.maxsize" are\n permitted but some features (such as "len()") may raise\n "OverflowError".\n\n Range examples:\n\n >>> list(range(10))\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n >>> list(range(1, 11))\n [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n >>> list(range(0, 30, 5))\n [0, 5, 10, 15, 20, 25]\n >>> list(range(0, 10, 3))\n [0, 3, 6, 9]\n >>> list(range(0, -10, -1))\n [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]\n >>> list(range(0))\n []\n >>> list(range(1, 0))\n []\n\n Ranges implement all of the *common* sequence operations except\n concatenation and repetition (due to the fact that range objects\n can only represent sequences that follow a strict pattern and\n repetition and concatenation will usually violate that pattern).\n\n start\n\n The value of the *start* parameter (or "0" if the parameter was\n not supplied)\n\n stop\n\n The value of the *stop* parameter\n\n step\n\n The value of the *step* parameter (or "1" if the parameter was\n not supplied)\n\nThe advantage of the "range" type over a regular "list" or "tuple" is\nthat a "range" object will always take the same (small) amount of\nmemory, no matter the size of the range it represents (as it only\nstores the "start", "stop" and "step" values, calculating individual\nitems and subranges as needed).\n\nRange objects implement the "collections.abc.Sequence" ABC, and\nprovide features such as containment tests, element index lookup,\nslicing and support for negative indices (see *Sequence Types ---\nlist, tuple, range*):\n\n>>> r = range(0, 20, 2)\n>>> r\nrange(0, 20, 2)\n>>> 11 in r\nFalse\n>>> 10 in r\nTrue\n>>> r.index(10)\n5\n>>> r[5]\n10\n>>> r[:5]\nrange(0, 10, 2)\n>>> r[-1]\n18\n\nTesting range objects for equality with "==" and "!=" compares them as\nsequences. That is, two range objects are considered equal if they\nrepresent the same sequence of values. (Note that two range objects\nthat compare equal might have different "start", "stop" and "step"\nattributes, for example "range(0) == range(2, 1, 3)" or "range(0, 3,\n2) == range(0, 4, 2)".)\n\nChanged in version 3.2: Implement the Sequence ABC. Support slicing\nand negative indices. Test "int" objects for membership in constant\ntime instead of iterating through all items.\n\nChanged in version 3.3: Define \'==\' and \'!=\' to compare range objects\nbased on the sequence of values they define (instead of comparing\nbased on object identity).\n\nNew in version 3.3: The "start", "stop" and "step" attributes.\n', 'typesseq-mutable': u'\nMutable Sequence Types\n**********************\n\nThe operations in the following table are defined on mutable sequence\ntypes. The "collections.abc.MutableSequence" ABC is provided to make\nit easier to correctly implement these operations on custom sequence\ntypes.\n\nIn the table *s* is an instance of a mutable sequence type, *t* is any\niterable object and *x* is an arbitrary object that meets any type and\nvalue restrictions imposed by *s* (for example, "bytearray" only\naccepts integers that meet the value restriction "0 <= x <= 255").\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation | Result | Notes |\n+================================+==================================+=======================+\n| "s[i] = x" | item *i* of *s* is replaced by | |\n| | *x* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j] = t" | slice of *s* from *i* to *j* is | |\n| | replaced by the contents of the | |\n| | iterable *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j]" | same as "s[i:j] = []" | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j:k] = t" | the elements of "s[i:j:k]" are | (1) |\n| | replaced by those of *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j:k]" | removes the elements of | |\n| | "s[i:j:k]" from the list | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.append(x)" | appends *x* to the end of the | |\n| | sequence (same as | |\n| | "s[len(s):len(s)] = [x]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.clear()" | removes all items from "s" (same | (5) |\n| | as "del s[:]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.copy()" | creates a shallow copy of "s" | (5) |\n| | (same as "s[:]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.extend(t)" or "s += t" | extends *s* with the contents of | |\n| | *t* (for the most part the same | |\n| | as "s[len(s):len(s)] = t") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s *= n" | updates *s* with its contents | (6) |\n| | repeated *n* times | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.insert(i, x)" | inserts *x* into *s* at the | |\n| | index given by *i* (same as | |\n| | "s[i:i] = [x]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.pop([i])" | retrieves the item at *i* and | (2) |\n| | also removes it from *s* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.remove(x)" | remove the first item from *s* | (3) |\n| | where "s[i] == x" | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.reverse()" | reverses the items of *s* in | (4) |\n| | place | |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The optional argument *i* defaults to "-1", so that by default\n the last item is removed and returned.\n\n3. "remove" raises "ValueError" when *x* is not found in *s*.\n\n4. The "reverse()" method modifies the sequence in place for\n economy of space when reversing a large sequence. To remind users\n that it operates by side effect, it does not return the reversed\n sequence.\n\n5. "clear()" and "copy()" are included for consistency with the\n interfaces of mutable containers that don\'t support slicing\n operations (such as "dict" and "set")\n\n New in version 3.3: "clear()" and "copy()" methods.\n\n6. The value *n* is an integer, or an object implementing\n "__index__()". Zero and negative values of *n* clear the sequence.\n Items in the sequence are not copied; they are referenced multiple\n times, as explained for "s * n" under *Common Sequence Operations*.\n', 'unary': u'\nUnary arithmetic and bitwise operations\n***************************************\n\nAll unary arithmetic and bitwise operations have the same priority:\n\n u_expr ::= power | "-" u_expr | "+" u_expr | "~" u_expr\n\nThe unary "-" (minus) operator yields the negation of its numeric\nargument.\n\nThe unary "+" (plus) operator yields its numeric argument unchanged.\n\nThe unary "~" (invert) operator yields the bitwise inversion of its\ninteger argument. The bitwise inversion of "x" is defined as\n"-(x+1)". It only applies to integral numbers.\n\nIn all three cases, if the argument does not have the proper type, a\n"TypeError" exception is raised.\n', 'while': u'\nThe "while" statement\n*********************\n\nThe "while" statement is used for repeated execution as long as an\nexpression is true:\n\n while_stmt ::= "while" expression ":" suite\n ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the "else" clause, if present, is executed\nand the loop terminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite. A "continue" statement\nexecuted in the first suite skips the rest of the suite and goes back\nto testing the expression.\n', diff --git a/Lib/random.py b/Lib/random.py index 5950735..4efbb0a 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -96,11 +96,13 @@ class Random(_random.Random): None or no argument seeds from current time or from an operating system specific randomness source if available. - For version 2 (the default), all of the bits are used if *a* is a str, - bytes, or bytearray. For version 1, the hash() of *a* is used instead. - If *a* is an int, all bits are used. + For version 2 (the default), all of the bits are used if *a* is a str, + bytes, or bytearray. For version 1 (provided for reproducing random + sequences from older versions of Python), the algorithm for str and + bytes generates a narrower range of seeds. + """ if a is None: @@ -112,6 +114,13 @@ class Random(_random.Random): import time a = int(time.time() * 256) # use fractional seconds + if version == 1 and isinstance(a, (str, bytes)): + x = ord(a[0]) << 7 if a else 0 + for c in a: + x = ((1000003 * x) ^ ord(c)) & 0xFFFFFFFFFFFFFFFF + x ^= len(a) + a = -2 if x == -1 else x + if version == 2: if isinstance(a, (str, bytes, bytearray)): if isinstance(a, str): diff --git a/Lib/runpy.py b/Lib/runpy.py index af6205d..d86f0e4 100644 --- a/Lib/runpy.py +++ b/Lib/runpy.py @@ -98,7 +98,7 @@ def _run_module_code(code, init_globals=None, # may be cleared when the temporary module goes away return mod_globals.copy() -# Helper to get the loader, code and filename for a module +# Helper to get the full name, spec and code for a module def _get_module_details(mod_name, error=ImportError): if mod_name.startswith("."): raise error("Relative module names not supported") @@ -114,6 +114,15 @@ def _get_module_details(mod_name, error=ImportError): if e.name is None or (e.name != pkg_name and not pkg_name.startswith(e.name + ".")): raise + # Warn if the module has already been imported under its normal name + existing = sys.modules.get(mod_name) + if existing is not None and not hasattr(existing, "__path__"): + from warnings import warn + msg = "{mod_name!r} found in sys.modules after import of " \ + "package {pkg_name!r}, but prior to execution of " \ + "{mod_name!r}; this may result in unpredictable " \ + "behaviour".format(mod_name=mod_name, pkg_name=pkg_name) + warn(RuntimeWarning(msg)) try: spec = importlib.util.find_spec(mod_name) @@ -121,7 +130,7 @@ def _get_module_details(mod_name, error=ImportError): # This hack fixes an impedance mismatch between pkgutil and # importlib, where the latter raises other errors for cases where # pkgutil previously raised ImportError - msg = "Error while finding spec for {!r} ({}: {})" + msg = "Error while finding module specification for {!r} ({}: {})" raise error(msg.format(mod_name, type(ex).__name__, ex)) from ex if spec is None: raise error("No module named %s" % mod_name) @@ -253,7 +262,7 @@ def run_path(path_name, init_globals=None, run_name=None): return _run_module_code(code, init_globals, run_name, pkg_name=pkg_name, script_name=fname) else: - # Importer is defined for path, so add it to + # Finder is defined for path, so add it to # the start of sys.path sys.path.insert(0, path_name) try: diff --git a/Lib/selectors.py b/Lib/selectors.py index d8769e3..89680a2 100644 --- a/Lib/selectors.py +++ b/Lib/selectors.py @@ -408,7 +408,11 @@ if hasattr(select, 'epoll'): epoll_events |= select.EPOLLIN if events & EVENT_WRITE: epoll_events |= select.EPOLLOUT - self._epoll.register(key.fd, epoll_events) + try: + self._epoll.register(key.fd, epoll_events) + except BaseException: + super().unregister(fileobj) + raise return key def unregister(self, fileobj): @@ -530,14 +534,18 @@ if hasattr(select, 'kqueue'): def register(self, fileobj, events, data=None): key = super().register(fileobj, events, data) - if events & EVENT_READ: - kev = select.kevent(key.fd, select.KQ_FILTER_READ, - select.KQ_EV_ADD) - self._kqueue.control([kev], 0, 0) - if events & EVENT_WRITE: - kev = select.kevent(key.fd, select.KQ_FILTER_WRITE, - select.KQ_EV_ADD) - self._kqueue.control([kev], 0, 0) + try: + if events & EVENT_READ: + kev = select.kevent(key.fd, select.KQ_FILTER_READ, + select.KQ_EV_ADD) + self._kqueue.control([kev], 0, 0) + if events & EVENT_WRITE: + kev = select.kevent(key.fd, select.KQ_FILTER_WRITE, + select.KQ_EV_ADD) + self._kqueue.control([kev], 0, 0) + except BaseException: + super().unregister(fileobj) + raise return key def unregister(self, fileobj): diff --git a/Lib/shlex.py b/Lib/shlex.py index f083918..ecd2efd 100644 --- a/Lib/shlex.py +++ b/Lib/shlex.py @@ -224,7 +224,7 @@ class shlex: if self.debug >= 2: print("shlex: I see punctuation in word state") self.state = ' ' - if self.token: + if self.token or (self.posix and quoted): break # emit current token else: continue diff --git a/Lib/shutil.py b/Lib/shutil.py index 37124a0..16ca80b 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -10,7 +10,13 @@ import stat import fnmatch import collections import errno -import tarfile + +try: + import zlib + del zlib + _ZLIB_SUPPORTED = True +except ImportError: + _ZLIB_SUPPORTED = False try: import bz2 @@ -64,7 +70,7 @@ class ReadError(OSError): class RegistryError(Exception): """Raised when a registry operation with the archiving - and unpacking registeries fails""" + and unpacking registries fails""" def copyfileobj(fsrc, fdst, length=16*1024): @@ -602,23 +608,22 @@ def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, Returns the output filename. """ - tar_compression = {'gzip': 'gz', None: ''} - compress_ext = {'gzip': '.gz'} - - if _BZ2_SUPPORTED: - tar_compression['bzip2'] = 'bz2' - compress_ext['bzip2'] = '.bz2' - - if _LZMA_SUPPORTED: - tar_compression['xz'] = 'xz' - compress_ext['xz'] = '.xz' - - # flags for compression program, each element of list will be an argument - if compress is not None and compress not in compress_ext: + if compress is None: + tar_compression = '' + elif _ZLIB_SUPPORTED and compress == 'gzip': + tar_compression = 'gz' + elif _BZ2_SUPPORTED and compress == 'bzip2': + tar_compression = 'bz2' + elif _LZMA_SUPPORTED and compress == 'xz': + tar_compression = 'xz' + else: raise ValueError("bad value for 'compress', or compression format not " "supported : {0}".format(compress)) - archive_name = base_name + '.tar' + compress_ext.get(compress, '') + import tarfile # late import for breaking circular dependency + + compress_ext = '.' + tar_compression if compress else '' + archive_name = base_name + '.tar' + compress_ext archive_dir = os.path.dirname(archive_name) if archive_dir and not os.path.exists(archive_dir): @@ -644,7 +649,7 @@ def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, return tarinfo if not dry_run: - tar = tarfile.open(archive_name, 'w|%s' % tar_compression[compress]) + tar = tarfile.open(archive_name, 'w|%s' % tar_compression) try: tar.add(base_dir, filter=_set_uid_gid) finally: @@ -655,13 +660,10 @@ def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): """Create a zip file from all the files under 'base_dir'. - The output zip file will be named 'base_name' + ".zip". Uses either the - "zipfile" Python module (if available) or the InfoZIP "zip" utility - (if installed and found on the default search path). If neither tool is - available, raises ExecError. Returns the name of the output zip - file. + The output zip file will be named 'base_name' + ".zip". Returns the + name of the output zip file. """ - import zipfile + import zipfile # late import for breaking circular dependency zip_filename = base_name + ".zip" archive_dir = os.path.dirname(base_name) @@ -680,9 +682,10 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): with zipfile.ZipFile(zip_filename, "w", compression=zipfile.ZIP_DEFLATED) as zf: path = os.path.normpath(base_dir) - zf.write(path, path) - if logger is not None: - logger.info("adding '%s'", path) + if path != os.curdir: + zf.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) for dirpath, dirnames, filenames in os.walk(base_dir): for name in sorted(dirnames): path = os.path.normpath(os.path.join(dirpath, name)) @@ -699,10 +702,13 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): return zip_filename _ARCHIVE_FORMATS = { - 'gztar': (_make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"), 'tar': (_make_tarball, [('compress', None)], "uncompressed tar file"), - 'zip': (_make_zipfile, [], "ZIP file") - } +} + +if _ZLIB_SUPPORTED: + _ARCHIVE_FORMATS['gztar'] = (_make_tarball, [('compress', 'gzip')], + "gzip'ed tar-file") + _ARCHIVE_FORMATS['zip'] = (_make_zipfile, [], "ZIP file") if _BZ2_SUPPORTED: _ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bzip2')], @@ -751,8 +757,8 @@ def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, """Create an archive file (eg. zip or tar). 'base_name' is the name of the file to create, minus any format-specific - extension; 'format' is the archive format: one of "zip", "tar", "bztar" - or "gztar". + extension; 'format' is the archive format: one of "zip", "tar", "gztar", + "bztar", or "xztar". Or any other registered format. 'root_dir' is a directory that will be the root directory of the archive; ie. we typically chdir into 'root_dir' before creating the @@ -853,7 +859,7 @@ def register_unpack_format(name, extensions, function, extra_args=None, _UNPACK_FORMATS[name] = extensions, function, extra_args, description def unregister_unpack_format(name): - """Removes the pack format from the registery.""" + """Removes the pack format from the registry.""" del _UNPACK_FORMATS[name] def _ensure_directory(path): @@ -865,10 +871,7 @@ def _ensure_directory(path): def _unpack_zipfile(filename, extract_dir): """Unpack zip `filename` to `extract_dir` """ - try: - import zipfile - except ImportError: - raise ReadError('zlib not supported, cannot unpack this archive.') + import zipfile # late import for breaking circular dependency if not zipfile.is_zipfile(filename): raise ReadError("%s is not a zip file" % filename) @@ -902,6 +905,7 @@ def _unpack_zipfile(filename, extract_dir): def _unpack_tarfile(filename, extract_dir): """Unpack tar/tar.gz/tar.bz2/tar.xz `filename` to `extract_dir` """ + import tarfile # late import for breaking circular dependency try: tarobj = tarfile.open(filename) except tarfile.TarError: @@ -913,10 +917,13 @@ def _unpack_tarfile(filename, extract_dir): tarobj.close() _UNPACK_FORMATS = { - 'gztar': (['.tar.gz', '.tgz'], _unpack_tarfile, [], "gzip'ed tar-file"), 'tar': (['.tar'], _unpack_tarfile, [], "uncompressed tar file"), - 'zip': (['.zip'], _unpack_zipfile, [], "ZIP file") - } + 'zip': (['.zip'], _unpack_zipfile, [], "ZIP file"), +} + +if _ZLIB_SUPPORTED: + _UNPACK_FORMATS['gztar'] = (['.tar.gz', '.tgz'], _unpack_tarfile, [], + "gzip'ed tar-file") if _BZ2_SUPPORTED: _UNPACK_FORMATS['bztar'] = (['.tar.bz2', '.tbz2'], _unpack_tarfile, [], @@ -941,10 +948,10 @@ def unpack_archive(filename, extract_dir=None, format=None): `extract_dir` is the name of the target directory, where the archive is unpacked. If not provided, the current working directory is used. - `format` is the archive format: one of "zip", "tar", or "gztar". Or any - other registered format. If not provided, unpack_archive will use the - filename extension and see if an unpacker was registered for that - extension. + `format` is the archive format: one of "zip", "tar", "gztar", "bztar", + or "xztar". Or any other registered format. If not provided, + unpack_archive will use the filename extension and see if an unpacker + was registered for that extension. In case none is found, a ValueError is raised. """ diff --git a/Lib/smtplib.py b/Lib/smtplib.py index dfbf5f9..5b9e665 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -900,7 +900,7 @@ class SMTP: the recipient addresses contain non-ASCII and the server advertises the SMTPUTF8 capability, the policy is cloned with utf8 set to True for the serialization, and SMTPUTF8 and BODY=8BITMIME are asserted on the send. - If the server does not support SMTPUTF8, an SMPTNotSupported error is + If the server does not support SMTPUTF8, an SMTPNotSupported error is raised. Otherwise the generator is called without modifying the policy. diff --git a/Lib/socket.py b/Lib/socket.py index ac2e3dd..a9cab32 100644 --- a/Lib/socket.py +++ b/Lib/socket.py @@ -258,7 +258,7 @@ class socket(_socket.socket): raise _GiveupOnSendfile(err) # not a regular file try: fsize = os.fstat(fileno).st_size - except OSError: + except OSError as err: raise _GiveupOnSendfile(err) # not a regular file if not fsize: return 0 # empty file @@ -519,6 +519,7 @@ else: finally: lsock.close() return (ssock, csock) + __all__.append("socketpair") socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object) Create a pair of socket objects from the sockets returned by the platform diff --git a/Lib/sqlite3/test/dbapi.py b/Lib/sqlite3/test/dbapi.py index 04649fc..7fb8d7e 100644 --- a/Lib/sqlite3/test/dbapi.py +++ b/Lib/sqlite3/test/dbapi.py @@ -122,11 +122,8 @@ class ConnectionTests(unittest.TestCase): def CheckFailedOpen(self): YOU_CANNOT_OPEN_THIS = "/foo/bar/bla/23534/mydb.db" - try: + with self.assertRaises(sqlite.OperationalError): con = sqlite.connect(YOU_CANNOT_OPEN_THIS) - except sqlite.OperationalError: - return - self.fail("should have raised an OperationalError") def CheckClose(self): self.cx.close() @@ -180,6 +177,12 @@ class ConnectionTests(unittest.TestCase): with self.assertRaises(sqlite.OperationalError): cx.execute('insert into test(id) values(1)') + @unittest.skipIf(sqlite.sqlite_version_info >= (3, 3, 1), + 'needs sqlite versions older than 3.3.1') + def CheckSameThreadErrorOnOldVersion(self): + with self.assertRaises(sqlite.NotSupportedError) as cm: + sqlite.connect(':memory:', check_same_thread=False) + self.assertEqual(str(cm.exception), 'shared connections not available') class CursorTests(unittest.TestCase): def setUp(self): @@ -196,22 +199,12 @@ class CursorTests(unittest.TestCase): self.cu.execute("delete from test") def CheckExecuteIllegalSql(self): - try: + with self.assertRaises(sqlite.OperationalError): self.cu.execute("select asdf") - self.fail("should have raised an OperationalError") - except sqlite.OperationalError: - return - except: - self.fail("raised wrong exception") def CheckExecuteTooMuchSql(self): - try: + with self.assertRaises(sqlite.Warning): self.cu.execute("select 5+4; select 4+5") - self.fail("should have raised a Warning") - except sqlite.Warning: - return - except: - self.fail("raised wrong exception") def CheckExecuteTooMuchSql2(self): self.cu.execute("select 5+4; -- foo bar") @@ -226,13 +219,8 @@ class CursorTests(unittest.TestCase): """) def CheckExecuteWrongSqlArg(self): - try: + with self.assertRaises(ValueError): self.cu.execute(42) - self.fail("should have raised a ValueError") - except ValueError: - return - except: - self.fail("raised wrong exception.") def CheckExecuteArgInt(self): self.cu.execute("insert into test(id) values (?)", (42,)) @@ -250,29 +238,25 @@ class CursorTests(unittest.TestCase): row = self.cu.fetchone() self.assertEqual(row[0], "Hu\x00go") + def CheckExecuteNonIterable(self): + with self.assertRaises(ValueError) as cm: + self.cu.execute("insert into test(id) values (?)", 42) + self.assertEqual(str(cm.exception), 'parameters are of unsupported type') + def CheckExecuteWrongNoOfArgs1(self): # too many parameters - try: + with self.assertRaises(sqlite.ProgrammingError): self.cu.execute("insert into test(id) values (?)", (17, "Egon")) - self.fail("should have raised ProgrammingError") - except sqlite.ProgrammingError: - pass def CheckExecuteWrongNoOfArgs2(self): # too little parameters - try: + with self.assertRaises(sqlite.ProgrammingError): self.cu.execute("insert into test(id) values (?)") - self.fail("should have raised ProgrammingError") - except sqlite.ProgrammingError: - pass def CheckExecuteWrongNoOfArgs3(self): # no parameters, parameters are needed - try: + with self.assertRaises(sqlite.ProgrammingError): self.cu.execute("insert into test(id) values (?)") - self.fail("should have raised ProgrammingError") - except sqlite.ProgrammingError: - pass def CheckExecuteParamList(self): self.cu.execute("insert into test(name) values ('foo')") @@ -311,27 +295,18 @@ class CursorTests(unittest.TestCase): def CheckExecuteDictMappingTooLittleArgs(self): self.cu.execute("insert into test(name) values ('foo')") - try: + with self.assertRaises(sqlite.ProgrammingError): self.cu.execute("select name from test where name=:name and id=:id", {"name": "foo"}) - self.fail("should have raised ProgrammingError") - except sqlite.ProgrammingError: - pass def CheckExecuteDictMappingNoArgs(self): self.cu.execute("insert into test(name) values ('foo')") - try: + with self.assertRaises(sqlite.ProgrammingError): self.cu.execute("select name from test where name=:name") - self.fail("should have raised ProgrammingError") - except sqlite.ProgrammingError: - pass def CheckExecuteDictMappingUnnamed(self): self.cu.execute("insert into test(name) values ('foo')") - try: + with self.assertRaises(sqlite.ProgrammingError): self.cu.execute("select name from test where name=?", {"name": "foo"}) - self.fail("should have raised ProgrammingError") - except sqlite.ProgrammingError: - pass def CheckClose(self): self.cu.close() @@ -360,8 +335,7 @@ class CursorTests(unittest.TestCase): def CheckTotalChanges(self): self.cu.execute("insert into test(name) values ('foo')") self.cu.execute("insert into test(name) values ('foo')") - if self.cx.total_changes < 2: - self.fail("total changes reported wrong value") + self.assertLess(2, self.cx.total_changes, msg='total changes reported wrong value') # Checks for executemany: # Sequences are required by the DB-API, iterators @@ -392,32 +366,16 @@ class CursorTests(unittest.TestCase): self.cu.executemany("insert into test(income) values (?)", mygen()) def CheckExecuteManyWrongSqlArg(self): - try: + with self.assertRaises(ValueError): self.cu.executemany(42, [(3,)]) - self.fail("should have raised a ValueError") - except ValueError: - return - except: - self.fail("raised wrong exception.") def CheckExecuteManySelect(self): - try: + with self.assertRaises(sqlite.ProgrammingError): self.cu.executemany("select ?", [(3,)]) - self.fail("should have raised a ProgrammingError") - except sqlite.ProgrammingError: - return - except: - self.fail("raised wrong exception.") def CheckExecuteManyNotIterable(self): - try: + with self.assertRaises(TypeError): self.cu.executemany("insert into test(income) values (?)", 42) - self.fail("should have raised a TypeError") - except TypeError: - return - except Exception as e: - print("raised", e.__class__) - self.fail("raised wrong exception.") def CheckFetchIter(self): # Optional DB-API extension. @@ -494,22 +452,15 @@ class CursorTests(unittest.TestCase): self.assertEqual(self.cu.connection, self.cx) def CheckWrongCursorCallable(self): - try: + with self.assertRaises(TypeError): def f(): pass cur = self.cx.cursor(f) - self.fail("should have raised a TypeError") - except TypeError: - return - self.fail("should have raised a ValueError") def CheckCursorWrongClass(self): class Foo: pass foo = Foo() - try: + with self.assertRaises(TypeError): cur = sqlite.Cursor(foo) - self.fail("should have raised a ValueError") - except TypeError: - pass @unittest.skipUnless(threading, 'This test requires threading.') class ThreadTests(unittest.TestCase): @@ -708,22 +659,21 @@ class ExtensionTests(unittest.TestCase): def CheckScriptSyntaxError(self): con = sqlite.connect(":memory:") cur = con.cursor() - raised = False - try: + with self.assertRaises(sqlite.OperationalError): cur.executescript("create table test(x); asdf; create table test2(x)") - except sqlite.OperationalError: - raised = True - self.assertEqual(raised, True, "should have raised an exception") def CheckScriptErrorNormal(self): con = sqlite.connect(":memory:") cur = con.cursor() - raised = False - try: + with self.assertRaises(sqlite.OperationalError): cur.executescript("create table test(sadfsadfdsa); select foo from hurz;") - except sqlite.OperationalError: - raised = True - self.assertEqual(raised, True, "should have raised an exception") + + def CheckCursorExecutescriptAsBytes(self): + con = sqlite.connect(":memory:") + cur = con.cursor() + with self.assertRaises(ValueError) as cm: + cur.executescript(b"create table test(foo); insert into test(foo) values (5);") + self.assertEqual(str(cm.exception), 'script argument must be unicode.') def CheckConnectionExecute(self): con = sqlite.connect(":memory:") @@ -745,68 +695,37 @@ class ExtensionTests(unittest.TestCase): self.assertEqual(result, 5, "Basic test of Connection.executescript") class ClosedConTests(unittest.TestCase): - def setUp(self): - pass - - def tearDown(self): - pass - def CheckClosedConCursor(self): con = sqlite.connect(":memory:") con.close() - try: + with self.assertRaises(sqlite.ProgrammingError): cur = con.cursor() - self.fail("Should have raised a ProgrammingError") - except sqlite.ProgrammingError: - pass - except: - self.fail("Should have raised a ProgrammingError") def CheckClosedConCommit(self): con = sqlite.connect(":memory:") con.close() - try: + with self.assertRaises(sqlite.ProgrammingError): con.commit() - self.fail("Should have raised a ProgrammingError") - except sqlite.ProgrammingError: - pass - except: - self.fail("Should have raised a ProgrammingError") def CheckClosedConRollback(self): con = sqlite.connect(":memory:") con.close() - try: + with self.assertRaises(sqlite.ProgrammingError): con.rollback() - self.fail("Should have raised a ProgrammingError") - except sqlite.ProgrammingError: - pass - except: - self.fail("Should have raised a ProgrammingError") def CheckClosedCurExecute(self): con = sqlite.connect(":memory:") cur = con.cursor() con.close() - try: + with self.assertRaises(sqlite.ProgrammingError): cur.execute("select 4") - self.fail("Should have raised a ProgrammingError") - except sqlite.ProgrammingError: - pass - except: - self.fail("Should have raised a ProgrammingError") def CheckClosedCreateFunction(self): con = sqlite.connect(":memory:") con.close() def f(x): return 17 - try: + with self.assertRaises(sqlite.ProgrammingError): con.create_function("foo", 1, f) - self.fail("Should have raised a ProgrammingError") - except sqlite.ProgrammingError: - pass - except: - self.fail("Should have raised a ProgrammingError") def CheckClosedCreateAggregate(self): con = sqlite.connect(":memory:") @@ -818,57 +737,31 @@ class ClosedConTests(unittest.TestCase): pass def finalize(self): return 17 - try: + with self.assertRaises(sqlite.ProgrammingError): con.create_aggregate("foo", 1, Agg) - self.fail("Should have raised a ProgrammingError") - except sqlite.ProgrammingError: - pass - except: - self.fail("Should have raised a ProgrammingError") def CheckClosedSetAuthorizer(self): con = sqlite.connect(":memory:") con.close() def authorizer(*args): return sqlite.DENY - try: + with self.assertRaises(sqlite.ProgrammingError): con.set_authorizer(authorizer) - self.fail("Should have raised a ProgrammingError") - except sqlite.ProgrammingError: - pass - except: - self.fail("Should have raised a ProgrammingError") def CheckClosedSetProgressCallback(self): con = sqlite.connect(":memory:") con.close() def progress(): pass - try: + with self.assertRaises(sqlite.ProgrammingError): con.set_progress_handler(progress, 100) - self.fail("Should have raised a ProgrammingError") - except sqlite.ProgrammingError: - pass - except: - self.fail("Should have raised a ProgrammingError") def CheckClosedCall(self): con = sqlite.connect(":memory:") con.close() - try: + with self.assertRaises(sqlite.ProgrammingError): con() - self.fail("Should have raised a ProgrammingError") - except sqlite.ProgrammingError: - pass - except: - self.fail("Should have raised a ProgrammingError") class ClosedCurTests(unittest.TestCase): - def setUp(self): - pass - - def tearDown(self): - pass - def CheckClosed(self): con = sqlite.connect(":memory:") cur = con.cursor() @@ -882,15 +775,103 @@ class ClosedCurTests(unittest.TestCase): else: params = [] - try: + with self.assertRaises(sqlite.ProgrammingError): method = getattr(cur, method_name) - method(*params) - self.fail("Should have raised a ProgrammingError: method " + method_name) - except sqlite.ProgrammingError: - pass - except: - self.fail("Should have raised a ProgrammingError: " + method_name) + + +class SqliteOnConflictTests(unittest.TestCase): + """ + Tests for SQLite's "insert on conflict" feature. + + See https://www.sqlite.org/lang_conflict.html for details. + """ + + def setUp(self): + self.cx = sqlite.connect(":memory:") + self.cu = self.cx.cursor() + self.cu.execute(""" + CREATE TABLE test( + id INTEGER PRIMARY KEY, name TEXT, unique_name TEXT UNIQUE + ); + """) + + def tearDown(self): + self.cu.close() + self.cx.close() + + def CheckOnConflictRollbackWithExplicitTransaction(self): + self.cx.isolation_level = None # autocommit mode + self.cu = self.cx.cursor() + # Start an explicit transaction. + self.cu.execute("BEGIN") + self.cu.execute("INSERT INTO test(name) VALUES ('abort_test')") + self.cu.execute("INSERT OR ROLLBACK INTO test(unique_name) VALUES ('foo')") + with self.assertRaises(sqlite.IntegrityError): + self.cu.execute("INSERT OR ROLLBACK INTO test(unique_name) VALUES ('foo')") + # Use connection to commit. + self.cx.commit() + self.cu.execute("SELECT name, unique_name from test") + # Transaction should have rolled back and nothing should be in table. + self.assertEqual(self.cu.fetchall(), []) + + def CheckOnConflictAbortRaisesWithExplicitTransactions(self): + # Abort cancels the current sql statement but doesn't change anything + # about the current transaction. + self.cx.isolation_level = None # autocommit mode + self.cu = self.cx.cursor() + # Start an explicit transaction. + self.cu.execute("BEGIN") + self.cu.execute("INSERT INTO test(name) VALUES ('abort_test')") + self.cu.execute("INSERT OR ABORT INTO test(unique_name) VALUES ('foo')") + with self.assertRaises(sqlite.IntegrityError): + self.cu.execute("INSERT OR ABORT INTO test(unique_name) VALUES ('foo')") + self.cx.commit() + self.cu.execute("SELECT name, unique_name FROM test") + # Expect the first two inserts to work, third to do nothing. + self.assertEqual(self.cu.fetchall(), [('abort_test', None), (None, 'foo',)]) + + def CheckOnConflictRollbackWithoutTransaction(self): + # Start of implicit transaction + self.cu.execute("INSERT INTO test(name) VALUES ('abort_test')") + self.cu.execute("INSERT OR ROLLBACK INTO test(unique_name) VALUES ('foo')") + with self.assertRaises(sqlite.IntegrityError): + self.cu.execute("INSERT OR ROLLBACK INTO test(unique_name) VALUES ('foo')") + self.cu.execute("SELECT name, unique_name FROM test") + # Implicit transaction is rolled back on error. + self.assertEqual(self.cu.fetchall(), []) + + def CheckOnConflictAbortRaisesWithoutTransactions(self): + # Abort cancels the current sql statement but doesn't change anything + # about the current transaction. + self.cu.execute("INSERT INTO test(name) VALUES ('abort_test')") + self.cu.execute("INSERT OR ABORT INTO test(unique_name) VALUES ('foo')") + with self.assertRaises(sqlite.IntegrityError): + self.cu.execute("INSERT OR ABORT INTO test(unique_name) VALUES ('foo')") + # Make sure all other values were inserted. + self.cu.execute("SELECT name, unique_name FROM test") + self.assertEqual(self.cu.fetchall(), [('abort_test', None), (None, 'foo',)]) + + def CheckOnConflictFail(self): + self.cu.execute("INSERT OR FAIL INTO test(unique_name) VALUES ('foo')") + with self.assertRaises(sqlite.IntegrityError): + self.cu.execute("INSERT OR FAIL INTO test(unique_name) VALUES ('foo')") + self.assertEqual(self.cu.fetchall(), []) + + def CheckOnConflictIgnore(self): + self.cu.execute("INSERT OR IGNORE INTO test(unique_name) VALUES ('foo')") + # Nothing should happen. + self.cu.execute("INSERT OR IGNORE INTO test(unique_name) VALUES ('foo')") + self.cu.execute("SELECT unique_name FROM test") + self.assertEqual(self.cu.fetchall(), [('foo',)]) + + def CheckOnConflictReplace(self): + self.cu.execute("INSERT OR REPLACE INTO test(name, unique_name) VALUES ('Data!', 'foo')") + # There shouldn't be an IntegrityError exception. + self.cu.execute("INSERT OR REPLACE INTO test(name, unique_name) VALUES ('Very different data!', 'foo')") + self.cu.execute("SELECT name, unique_name FROM test") + self.assertEqual(self.cu.fetchall(), [('Very different data!', 'foo')]) + def suite(): module_suite = unittest.makeSuite(ModuleTests, "Check") @@ -901,7 +882,12 @@ def suite(): ext_suite = unittest.makeSuite(ExtensionTests, "Check") closed_con_suite = unittest.makeSuite(ClosedConTests, "Check") closed_cur_suite = unittest.makeSuite(ClosedCurTests, "Check") - return unittest.TestSuite((module_suite, connection_suite, cursor_suite, thread_suite, constructor_suite, ext_suite, closed_con_suite, closed_cur_suite)) + on_conflict_suite = unittest.makeSuite(SqliteOnConflictTests, "Check") + return unittest.TestSuite(( + module_suite, connection_suite, cursor_suite, thread_suite, + constructor_suite, ext_suite, closed_con_suite, closed_cur_suite, + on_conflict_suite, + )) def test(): runner = unittest.TextTestRunner() diff --git a/Lib/sqlite3/test/factory.py b/Lib/sqlite3/test/factory.py index f587596..ced8445 100644 --- a/Lib/sqlite3/test/factory.py +++ b/Lib/sqlite3/test/factory.py @@ -58,9 +58,21 @@ class CursorFactoryTests(unittest.TestCase): self.con.close() def CheckIsInstance(self): - cur = self.con.cursor(factory=MyCursor) + cur = self.con.cursor() + self.assertIsInstance(cur, sqlite.Cursor) + cur = self.con.cursor(MyCursor) + self.assertIsInstance(cur, MyCursor) + cur = self.con.cursor(factory=lambda con: MyCursor(con)) self.assertIsInstance(cur, MyCursor) + def CheckInvalidFactory(self): + # not a callable at all + self.assertRaises(TypeError, self.con.cursor, None) + # invalid callable with not exact one argument + self.assertRaises(TypeError, self.con.cursor, lambda: None) + # invalid callable returning non-cursor + self.assertRaises(TypeError, self.con.cursor, lambda con: None) + class RowFactoryTestsBackwardsCompat(unittest.TestCase): def setUp(self): self.con = sqlite.connect(":memory:") @@ -183,10 +195,12 @@ class RowFactoryTests(unittest.TestCase): def CheckFakeCursorClass(self): # Issue #24257: Incorrect use of PyObject_IsInstance() caused # segmentation fault. + # Issue #27861: Also applies for cursor factory. class FakeCursor(str): __class__ = sqlite.Cursor - cur = self.con.cursor(factory=FakeCursor) - self.assertRaises(TypeError, sqlite.Row, cur, ()) + self.con.row_factory = sqlite.Row + self.assertRaises(TypeError, self.con.cursor, FakeCursor) + self.assertRaises(TypeError, sqlite.Row, FakeCursor(), ()) def tearDown(self): self.con.close() diff --git a/Lib/sqlite3/test/hooks.py b/Lib/sqlite3/test/hooks.py index ede0bec..f8ef4d8 100644 --- a/Lib/sqlite3/test/hooks.py +++ b/Lib/sqlite3/test/hooks.py @@ -25,27 +25,38 @@ import unittest import sqlite3 as sqlite class CollationTests(unittest.TestCase): - def setUp(self): - pass - - def tearDown(self): - pass + def CheckCreateCollationNotString(self): + con = sqlite.connect(":memory:") + with self.assertRaises(TypeError): + con.create_collation(None, lambda x, y: (x > y) - (x < y)) def CheckCreateCollationNotCallable(self): con = sqlite.connect(":memory:") - try: + with self.assertRaises(TypeError) as cm: con.create_collation("X", 42) - self.fail("should have raised a TypeError") - except TypeError as e: - self.assertEqual(e.args[0], "parameter must be callable") + self.assertEqual(str(cm.exception), 'parameter must be callable') def CheckCreateCollationNotAscii(self): con = sqlite.connect(":memory:") - try: + with self.assertRaises(sqlite.ProgrammingError): con.create_collation("collä", lambda x, y: (x > y) - (x < y)) - self.fail("should have raised a ProgrammingError") - except sqlite.ProgrammingError as e: - pass + + def CheckCreateCollationBadUpper(self): + class BadUpperStr(str): + def upper(self): + return None + con = sqlite.connect(":memory:") + mycoll = lambda x, y: -((x > y) - (x < y)) + con.create_collation(BadUpperStr("mycoll"), mycoll) + result = con.execute(""" + select x from ( + select 'a' as x + union + select 'b' as x + ) order by x collate mycoll + """).fetchall() + self.assertEqual(result[0][0], 'b') + self.assertEqual(result[1][0], 'a') @unittest.skipIf(sqlite.sqlite_version_info < (3, 2, 1), 'old SQLite versions crash on this test') @@ -66,15 +77,13 @@ class CollationTests(unittest.TestCase): ) order by x collate mycoll """ result = con.execute(sql).fetchall() - if result[0][0] != "c" or result[1][0] != "b" or result[2][0] != "a": - self.fail("the expected order was not returned") + self.assertEqual(result, [('c',), ('b',), ('a',)], + msg='the expected order was not returned') con.create_collation("mycoll", None) - try: + with self.assertRaises(sqlite.OperationalError) as cm: result = con.execute(sql).fetchall() - self.fail("should have raised an OperationalError") - except sqlite.OperationalError as e: - self.assertEqual(e.args[0].lower(), "no such collation sequence: mycoll") + self.assertEqual(str(cm.exception), 'no such collation sequence: mycoll') def CheckCollationReturnsLargeInteger(self): def mycoll(x, y): @@ -106,8 +115,8 @@ class CollationTests(unittest.TestCase): result = con.execute(""" select x from (select 'a' as x union select 'b' as x) order by x collate mycoll """).fetchall() - if result[0][0] != 'b' or result[1][0] != 'a': - self.fail("wrong collation function is used") + self.assertEqual(result[0][0], 'b') + self.assertEqual(result[1][0], 'a') def CheckDeregisterCollation(self): """ @@ -117,12 +126,9 @@ class CollationTests(unittest.TestCase): con = sqlite.connect(":memory:") con.create_collation("mycoll", lambda x, y: (x > y) - (x < y)) con.create_collation("mycoll", None) - try: + with self.assertRaises(sqlite.OperationalError) as cm: con.execute("select 'a' as x union select 'b' as x order by x collate mycoll") - self.fail("should have raised an OperationalError") - except sqlite.OperationalError as e: - if not e.args[0].startswith("no such collation sequence"): - self.fail("wrong OperationalError raised") + self.assertEqual(str(cm.exception), 'no such collation sequence: mycoll') class ProgressTests(unittest.TestCase): def CheckProgressHandlerUsed(self): diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py index 11adb30..7dd0050 100644 --- a/Lib/sqlite3/test/regression.py +++ b/Lib/sqlite3/test/regression.py @@ -84,9 +84,8 @@ class RegressionTests(unittest.TestCase): cur.execute("select 1 x union select " + str(i)) con.close() + @unittest.skipIf(sqlite.sqlite_version_info < (3, 2, 2), 'needs sqlite 3.2.2 or newer') def CheckOnConflictRollback(self): - if sqlite.sqlite_version_info < (3, 2, 2): - return con = sqlite.connect(":memory:") con.execute("create table foo(x, unique(x) on conflict rollback)") con.execute("insert into foo(x) values (1)") @@ -134,17 +133,11 @@ class RegressionTests(unittest.TestCase): def CheckErrorMsgDecodeError(self): # When porting the module to Python 3.0, the error message about # decoding errors disappeared. This verifies they're back again. - failure = None - try: + with self.assertRaises(sqlite.OperationalError) as cm: self.con.execute("select 'xxx' || ? || 'yyy' colname", (bytes(bytearray([250])),)).fetchone() - failure = "should have raised an OperationalError with detailed description" - except sqlite.OperationalError as e: - msg = e.args[0] - if not msg.startswith("Could not decode to UTF-8 column 'colname' with text 'xxx"): - failure = "OperationalError did not have expected description text" - if failure: - self.fail(failure) + msg = "Could not decode to UTF-8 column 'colname' with text 'xxx" + self.assertIn(msg, str(cm.exception)) def CheckRegisterAdapter(self): """ @@ -153,11 +146,34 @@ class RegressionTests(unittest.TestCase): self.assertRaises(TypeError, sqlite.register_adapter, {}, None) def CheckSetIsolationLevel(self): - """ - See issue 3312. - """ + # See issue 27881. + class CustomStr(str): + def upper(self): + return None + def __del__(self): + con.isolation_level = "" + con = sqlite.connect(":memory:") - setattr(con, "isolation_level", "\xe9") + con.isolation_level = None + for level in "", "DEFERRED", "IMMEDIATE", "EXCLUSIVE": + with self.subTest(level=level): + con.isolation_level = level + con.isolation_level = level.lower() + con.isolation_level = level.capitalize() + con.isolation_level = CustomStr(level) + + # setting isolation_level failure should not alter previous state + con.isolation_level = None + con.isolation_level = "DEFERRED" + pairs = [ + (1, TypeError), (b'', TypeError), ("abc", ValueError), + ("IMMEDIATE\0EXCLUSIVE", ValueError), ("\xe9", ValueError), + ] + for value, exc in pairs: + with self.subTest(level=value): + with self.assertRaises(exc): + con.isolation_level = value + self.assertEqual(con.isolation_level, "DEFERRED") def CheckCursorConstructorCallCheck(self): """ @@ -170,14 +186,8 @@ class RegressionTests(unittest.TestCase): con = sqlite.connect(":memory:") cur = Cursor(con) - try: + with self.assertRaises(sqlite.ProgrammingError): cur.execute("select 4+5").fetchall() - self.fail("should have raised ProgrammingError") - except sqlite.ProgrammingError: - pass - except: - self.fail("should have raised ProgrammingError") - def CheckStrSubclass(self): """ @@ -196,13 +206,8 @@ class RegressionTests(unittest.TestCase): pass con = Connection(":memory:") - try: + with self.assertRaises(sqlite.ProgrammingError): cur = con.cursor() - self.fail("should have raised ProgrammingError") - except sqlite.ProgrammingError: - pass - except: - self.fail("should have raised ProgrammingError") def CheckCursorRegistration(self): """ @@ -223,13 +228,8 @@ class RegressionTests(unittest.TestCase): cur.executemany("insert into foo(x) values (?)", [(3,), (4,), (5,)]) cur.execute("select x from foo") con.rollback() - try: + with self.assertRaises(sqlite.InterfaceError): cur.fetchall() - self.fail("should have raised InterfaceError") - except sqlite.InterfaceError: - pass - except: - self.fail("should have raised InterfaceError") def CheckAutoCommit(self): """ @@ -345,6 +345,37 @@ class RegressionTests(unittest.TestCase): self.assertRaises(ValueError, cur.execute, " \0select 2") self.assertRaises(ValueError, cur.execute, "select 2\0") + def CheckCommitCursorReset(self): + """ + Connection.commit() did reset cursors, which made sqlite3 + to return rows multiple times when fetched from cursors + after commit. See issues 10513 and 23129 for details. + """ + con = sqlite.connect(":memory:") + con.executescript(""" + create table t(c); + create table t2(c); + insert into t values(0); + insert into t values(1); + insert into t values(2); + """) + + self.assertEqual(con.isolation_level, "") + + counter = 0 + for i, row in enumerate(con.execute("select c from t")): + with self.subTest(i=i, row=row): + con.execute("insert into t2(c) values (?)", (i,)) + con.commit() + if counter == 0: + self.assertEqual(row[0], 0) + elif counter == 1: + self.assertEqual(row[0], 1) + elif counter == 2: + self.assertEqual(row[0], 2) + counter += 1 + self.assertEqual(counter, 3, "should have returned exactly three rows") + def suite(): regression_suite = unittest.makeSuite(RegressionTests, "Check") diff --git a/Lib/sqlite3/test/transactions.py b/Lib/sqlite3/test/transactions.py index feb4fa1..a25360a 100644 --- a/Lib/sqlite3/test/transactions.py +++ b/Lib/sqlite3/test/transactions.py @@ -111,39 +111,25 @@ class TransactionTests(unittest.TestCase): res = self.cur2.fetchall() self.assertEqual(len(res), 1) + @unittest.skipIf(sqlite.sqlite_version_info < (3, 2, 2), + 'test hangs on sqlite versions older than 3.2.2') def CheckRaiseTimeout(self): - if sqlite.sqlite_version_info < (3, 2, 2): - # This will fail (hang) on earlier versions of sqlite. - # Determine exact version it was fixed. 3.2.1 hangs. - return self.cur1.execute("create table test(i)") self.cur1.execute("insert into test(i) values (5)") - try: + with self.assertRaises(sqlite.OperationalError): self.cur2.execute("insert into test(i) values (5)") - self.fail("should have raised an OperationalError") - except sqlite.OperationalError: - pass - except: - self.fail("should have raised an OperationalError") + @unittest.skipIf(sqlite.sqlite_version_info < (3, 2, 2), + 'test hangs on sqlite versions older than 3.2.2') def CheckLocking(self): """ This tests the improved concurrency with pysqlite 2.3.4. You needed to roll back con2 before you could commit con1. """ - if sqlite.sqlite_version_info < (3, 2, 2): - # This will fail (hang) on earlier versions of sqlite. - # Determine exact version it was fixed. 3.2.1 hangs. - return self.cur1.execute("create table test(i)") self.cur1.execute("insert into test(i) values (5)") - try: + with self.assertRaises(sqlite.OperationalError): self.cur2.execute("insert into test(i) values (5)") - self.fail("should have raised an OperationalError") - except sqlite.OperationalError: - pass - except: - self.fail("should have raised an OperationalError") # NO self.con2.rollback() HERE!!! self.con1.commit() @@ -159,13 +145,8 @@ class TransactionTests(unittest.TestCase): cur.execute("select 1 union select 2 union select 3") con.rollback() - try: + with self.assertRaises(sqlite.InterfaceError): cur.fetchall() - self.fail("InterfaceError should have been raised") - except sqlite.InterfaceError as e: - pass - except: - self.fail("InterfaceError should have been raised") class SpecialCommandTests(unittest.TestCase): def setUp(self): diff --git a/Lib/sqlite3/test/types.py b/Lib/sqlite3/test/types.py index adad571..6bc8d71 100644 --- a/Lib/sqlite3/test/types.py +++ b/Lib/sqlite3/test/types.py @@ -185,24 +185,14 @@ class DeclTypesTests(unittest.TestCase): def CheckUnsupportedSeq(self): class Bar: pass val = Bar() - try: + with self.assertRaises(sqlite.InterfaceError): self.cur.execute("insert into test(f) values (?)", (val,)) - self.fail("should have raised an InterfaceError") - except sqlite.InterfaceError: - pass - except: - self.fail("should have raised an InterfaceError") def CheckUnsupportedDict(self): class Bar: pass val = Bar() - try: + with self.assertRaises(sqlite.InterfaceError): self.cur.execute("insert into test(f) values (:val)", {"val": val}) - self.fail("should have raised an InterfaceError") - except sqlite.InterfaceError: - pass - except: - self.fail("should have raised an InterfaceError") def CheckBlob(self): # default @@ -284,6 +274,45 @@ class ColNamesTests(unittest.TestCase): self.cur.execute("select * from test where 0 = 1") self.assertEqual(self.cur.description[0][0], "x") + def CheckCursorDescriptionInsert(self): + self.cur.execute("insert into test values (1)") + self.assertIsNone(self.cur.description) + + +@unittest.skipIf(sqlite.sqlite_version_info < (3, 8, 3), "CTEs not supported") +class CommonTableExpressionTests(unittest.TestCase): + + def setUp(self): + self.con = sqlite.connect(":memory:") + self.cur = self.con.cursor() + self.cur.execute("create table test(x foo)") + + def tearDown(self): + self.cur.close() + self.con.close() + + def CheckCursorDescriptionCTESimple(self): + self.cur.execute("with one as (select 1) select * from one") + self.assertIsNotNone(self.cur.description) + self.assertEqual(self.cur.description[0][0], "1") + + def CheckCursorDescriptionCTESMultipleColumns(self): + self.cur.execute("insert into test values(1)") + self.cur.execute("insert into test values(2)") + self.cur.execute("with testCTE as (select * from test) select * from testCTE") + self.assertIsNotNone(self.cur.description) + self.assertEqual(self.cur.description[0][0], "x") + + def CheckCursorDescriptionCTE(self): + self.cur.execute("insert into test values (1)") + self.cur.execute("with bar as (select * from test) select * from test where x = 1") + self.assertIsNotNone(self.cur.description) + self.assertEqual(self.cur.description[0][0], "x") + self.cur.execute("with bar as (select * from test) select * from test where x = 2") + self.assertIsNotNone(self.cur.description) + self.assertEqual(self.cur.description[0][0], "x") + + class ObjectAdaptationTests(unittest.TestCase): def cast(obj): return float(obj) @@ -350,13 +379,10 @@ class DateTimeTests(unittest.TestCase): ts2 = self.cur.fetchone()[0] self.assertEqual(ts, ts2) + @unittest.skipIf(sqlite.sqlite_version_info < (3, 1), + 'the date functions are available on 3.1 or later') def CheckSqlTimestamp(self): - # The date functions are only available in SQLite version 3.1 or later - if sqlite.sqlite_version_info < (3, 1): - return - - # SQLite's current_timestamp uses UTC time, while datetime.datetime.now() uses local time. - now = datetime.datetime.now() + now = datetime.datetime.utcnow() self.cur.execute("insert into test(ts) values (current_timestamp)") self.cur.execute("select ts from test") ts = self.cur.fetchone()[0] @@ -384,7 +410,8 @@ def suite(): adaptation_suite = unittest.makeSuite(ObjectAdaptationTests, "Check") bin_suite = unittest.makeSuite(BinaryConverterTests, "Check") date_suite = unittest.makeSuite(DateTimeTests, "Check") - return unittest.TestSuite((sqlite_type_suite, decltypes_type_suite, colnames_type_suite, adaptation_suite, bin_suite, date_suite)) + cte_suite = unittest.makeSuite(CommonTableExpressionTests, "Check") + return unittest.TestSuite((sqlite_type_suite, decltypes_type_suite, colnames_type_suite, adaptation_suite, bin_suite, date_suite, cte_suite)) def test(): runner = unittest.TextTestRunner() diff --git a/Lib/sqlite3/test/userfunctions.py b/Lib/sqlite3/test/userfunctions.py index 8a4bbab..4075045 100644 --- a/Lib/sqlite3/test/userfunctions.py +++ b/Lib/sqlite3/test/userfunctions.py @@ -162,11 +162,8 @@ class FunctionTests(unittest.TestCase): self.con.close() def CheckFuncErrorOnCreate(self): - try: + with self.assertRaises(sqlite.OperationalError): self.con.create_function("bla", -100, lambda x: 2*x) - self.fail("should have raised an OperationalError") - except sqlite.OperationalError: - pass def CheckFuncRefCount(self): def getfunc(): @@ -231,12 +228,10 @@ class FunctionTests(unittest.TestCase): def CheckFuncException(self): cur = self.con.cursor() - try: + with self.assertRaises(sqlite.OperationalError) as cm: cur.execute("select raiseexception()") cur.fetchone() - self.fail("should have raised OperationalError") - except sqlite.OperationalError as e: - self.assertEqual(e.args[0], 'user-defined function raised exception') + self.assertEqual(str(cm.exception), 'user-defined function raised exception') def CheckParamString(self): cur = self.con.cursor() @@ -312,55 +307,42 @@ class AggregateTests(unittest.TestCase): pass def CheckAggrErrorOnCreate(self): - try: + with self.assertRaises(sqlite.OperationalError): self.con.create_function("bla", -100, AggrSum) - self.fail("should have raised an OperationalError") - except sqlite.OperationalError: - pass def CheckAggrNoStep(self): cur = self.con.cursor() - try: + with self.assertRaises(AttributeError) as cm: cur.execute("select nostep(t) from test") - self.fail("should have raised an AttributeError") - except AttributeError as e: - self.assertEqual(e.args[0], "'AggrNoStep' object has no attribute 'step'") + self.assertEqual(str(cm.exception), "'AggrNoStep' object has no attribute 'step'") def CheckAggrNoFinalize(self): cur = self.con.cursor() - try: + with self.assertRaises(sqlite.OperationalError) as cm: cur.execute("select nofinalize(t) from test") val = cur.fetchone()[0] - self.fail("should have raised an OperationalError") - except sqlite.OperationalError as e: - self.assertEqual(e.args[0], "user-defined aggregate's 'finalize' method raised error") + self.assertEqual(str(cm.exception), "user-defined aggregate's 'finalize' method raised error") def CheckAggrExceptionInInit(self): cur = self.con.cursor() - try: + with self.assertRaises(sqlite.OperationalError) as cm: cur.execute("select excInit(t) from test") val = cur.fetchone()[0] - self.fail("should have raised an OperationalError") - except sqlite.OperationalError as e: - self.assertEqual(e.args[0], "user-defined aggregate's '__init__' method raised error") + self.assertEqual(str(cm.exception), "user-defined aggregate's '__init__' method raised error") def CheckAggrExceptionInStep(self): cur = self.con.cursor() - try: + with self.assertRaises(sqlite.OperationalError) as cm: cur.execute("select excStep(t) from test") val = cur.fetchone()[0] - self.fail("should have raised an OperationalError") - except sqlite.OperationalError as e: - self.assertEqual(e.args[0], "user-defined aggregate's 'step' method raised error") + self.assertEqual(str(cm.exception), "user-defined aggregate's 'step' method raised error") def CheckAggrExceptionInFinalize(self): cur = self.con.cursor() - try: + with self.assertRaises(sqlite.OperationalError) as cm: cur.execute("select excFinalize(t) from test") val = cur.fetchone()[0] - self.fail("should have raised an OperationalError") - except sqlite.OperationalError as e: - self.assertEqual(e.args[0], "user-defined aggregate's 'finalize' method raised error") + self.assertEqual(str(cm.exception), "user-defined aggregate's 'finalize' method raised error") def CheckAggrCheckParamStr(self): cur = self.con.cursor() @@ -433,22 +415,14 @@ class AuthorizerTests(unittest.TestCase): pass def test_table_access(self): - try: + with self.assertRaises(sqlite.DatabaseError) as cm: self.con.execute("select * from t2") - except sqlite.DatabaseError as e: - if not e.args[0].endswith("prohibited"): - self.fail("wrong exception text: %s" % e.args[0]) - return - self.fail("should have raised an exception due to missing privileges") + self.assertIn('prohibited', str(cm.exception)) def test_column_access(self): - try: + with self.assertRaises(sqlite.DatabaseError) as cm: self.con.execute("select c2 from t1") - except sqlite.DatabaseError as e: - if not e.args[0].endswith("prohibited"): - self.fail("wrong exception text: %s" % e.args[0]) - return - self.fail("should have raised an exception due to missing privileges") + self.assertIn('prohibited', str(cm.exception)) class AuthorizerRaiseExceptionTests(AuthorizerTests): @staticmethod diff --git a/Lib/ssl.py b/Lib/ssl.py index 3f5c3c4..e191390 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -51,6 +51,7 @@ The following constants identify various SSL protocol variants: PROTOCOL_SSLv2 PROTOCOL_SSLv3 PROTOCOL_SSLv23 +PROTOCOL_TLS PROTOCOL_TLSv1 PROTOCOL_TLSv1_1 PROTOCOL_TLSv1_2 @@ -128,9 +129,10 @@ from _ssl import _OPENSSL_API_VERSION _IntEnum._convert( '_SSLMethod', __name__, - lambda name: name.startswith('PROTOCOL_'), + lambda name: name.startswith('PROTOCOL_') and name != 'PROTOCOL_SSLv23', source=_ssl) +PROTOCOL_SSLv23 = _SSLMethod.PROTOCOL_SSLv23 = _SSLMethod.PROTOCOL_TLS _PROTOCOL_NAMES = {value: name for name, value in _SSLMethod.__members__.items()} try: @@ -155,36 +157,42 @@ if _ssl.HAS_TLS_UNIQUE: else: CHANNEL_BINDING_TYPES = [] + # Disable weak or insecure ciphers by default # (OpenSSL's default setting is 'DEFAULT:!aNULL:!eNULL') # Enable a better set of ciphers by default # This list has been explicitly chosen to: # * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE) # * Prefer ECDHE over DHE for better performance -# * Prefer any AES-GCM over any AES-CBC for better performance and security +# * Prefer AEAD over CBC for better performance and security +# * Prefer AES-GCM over ChaCha20 because most platforms have AES-NI +# (ChaCha20 needs OpenSSL 1.1.0 or patched 1.0.2) +# * Prefer any AES-GCM and ChaCha20 over any AES-CBC for better +# performance and security # * Then Use HIGH cipher suites as a fallback -# * Then Use 3DES as fallback which is secure but slow -# * Disable NULL authentication, NULL encryption, and MD5 MACs for security -# reasons +# * Disable NULL authentication, NULL encryption, 3DES and MD5 MACs +# for security reasons _DEFAULT_CIPHERS = ( - 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:' - 'DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:!aNULL:' - '!eNULL:!MD5' -) + 'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:' + 'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:' + '!aNULL:!eNULL:!MD5:!3DES' + ) # Restricted and more secure ciphers for the server side # This list has been explicitly chosen to: # * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE) # * Prefer ECDHE over DHE for better performance -# * Prefer any AES-GCM over any AES-CBC for better performance and security +# * Prefer AEAD over CBC for better performance and security +# * Prefer AES-GCM over ChaCha20 because most platforms have AES-NI +# * Prefer any AES-GCM and ChaCha20 over any AES-CBC for better +# performance and security # * Then Use HIGH cipher suites as a fallback -# * Then Use 3DES as fallback which is secure but slow -# * Disable NULL authentication, NULL encryption, MD5 MACs, DSS, and RC4 for -# security reasons +# * Disable NULL authentication, NULL encryption, MD5 MACs, DSS, RC4, and +# 3DES for security reasons _RESTRICTED_SERVER_CIPHERS = ( - 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:' - 'DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:!aNULL:' - '!eNULL:!MD5:!DSS:!RC4' + 'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:' + 'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:' + '!aNULL:!eNULL:!MD5:!DSS:!RC4:!3DES' ) @@ -357,13 +365,13 @@ class SSLContext(_SSLContext): __slots__ = ('protocol', '__weakref__') _windows_cert_stores = ("CA", "ROOT") - def __new__(cls, protocol, *args, **kwargs): + def __new__(cls, protocol=PROTOCOL_TLS, *args, **kwargs): self = _SSLContext.__new__(cls, protocol) if protocol != _SSLv2_IF_EXISTS: self.set_ciphers(_DEFAULT_CIPHERS) return self - def __init__(self, protocol): + def __init__(self, protocol=PROTOCOL_TLS): self.protocol = protocol def wrap_socket(self, sock, server_side=False, @@ -438,7 +446,7 @@ def create_default_context(purpose=Purpose.SERVER_AUTH, *, cafile=None, if not isinstance(purpose, _ASN1Object): raise TypeError(purpose) - context = SSLContext(PROTOCOL_SSLv23) + context = SSLContext(PROTOCOL_TLS) # SSLv2 considered harmful. context.options |= OP_NO_SSLv2 @@ -475,7 +483,7 @@ def create_default_context(purpose=Purpose.SERVER_AUTH, *, cafile=None, context.load_default_certs(purpose) return context -def _create_unverified_context(protocol=PROTOCOL_SSLv23, *, cert_reqs=None, +def _create_unverified_context(protocol=PROTOCOL_TLS, *, cert_reqs=None, check_hostname=False, purpose=Purpose.SERVER_AUTH, certfile=None, keyfile=None, cafile=None, capath=None, cadata=None): @@ -666,7 +674,7 @@ class SSLSocket(socket): def __init__(self, sock=None, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, - ssl_version=PROTOCOL_SSLv23, ca_certs=None, + ssl_version=PROTOCOL_TLS, ca_certs=None, do_handshake_on_connect=True, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None, suppress_ragged_eofs=True, npn_protocols=None, ciphers=None, @@ -1056,7 +1064,7 @@ class SSLSocket(socket): def wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, - ssl_version=PROTOCOL_SSLv23, ca_certs=None, + ssl_version=PROTOCOL_TLS, ca_certs=None, do_handshake_on_connect=True, suppress_ragged_eofs=True, ciphers=None): @@ -1125,7 +1133,7 @@ def PEM_cert_to_DER_cert(pem_cert_string): d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None): +def get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None): """Retrieve the certificate from the server at the specified address, and return it as a PEM-encoded string. If 'ca_certs' is specified, validate the server cert against it. diff --git a/Lib/subprocess.py b/Lib/subprocess.py index d8d6ab2..502e26b 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -7,352 +7,38 @@ # Licensed to PSF under a Contributor Agreement. # See http://www.python.org/2.4/license for licensing details. -r"""subprocess - Subprocesses with accessible I/O streams +r"""Subprocesses with accessible I/O streams This module allows you to spawn processes, connect to their -input/output/error pipes, and obtain their return codes. This module -intends to replace several older modules and functions: - -os.system -os.spawn* - -Information about how the subprocess module can be used to replace these -modules and functions can be found below. - - - -Using the subprocess module -=========================== -This module defines one class called Popen: - -class Popen(args, bufsize=-1, executable=None, - stdin=None, stdout=None, stderr=None, - preexec_fn=None, close_fds=True, shell=False, - cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0, - restore_signals=True, start_new_session=False, pass_fds=()): - - -Arguments are: - -args should be a string, or a sequence of program arguments. The -program to execute is normally the first item in the args sequence or -string, but can be explicitly set by using the executable argument. - -On POSIX, with shell=False (default): In this case, the Popen class -uses os.execvp() to execute the child program. args should normally -be a sequence. A string will be treated as a sequence with the string -as the only item (the program to execute). - -On POSIX, with shell=True: If args is a string, it specifies the -command string to execute through the shell. If args is a sequence, -the first item specifies the command string, and any additional items -will be treated as additional shell arguments. - -On Windows: the Popen class uses CreateProcess() to execute the child -program, which operates on strings. If args is a sequence, it will be -converted to a string using the list2cmdline method. Please note that -not all MS Windows applications interpret the command line the same -way: The list2cmdline is designed for applications using the same -rules as the MS C runtime. - -bufsize will be supplied as the corresponding argument to the io.open() -function when creating the stdin/stdout/stderr pipe file objects: -0 means unbuffered (read & write are one system call and can return short), -1 means line buffered, any other positive value means use a buffer of -approximately that size. A negative bufsize, the default, means the system -default of io.DEFAULT_BUFFER_SIZE will be used. - -stdin, stdout and stderr specify the executed programs' standard -input, standard output and standard error file handles, respectively. -Valid values are PIPE, an existing file descriptor (a positive -integer), an existing file object, and None. PIPE indicates that a -new pipe to the child should be created. With None, no redirection -will occur; the child's file handles will be inherited from the -parent. Additionally, stderr can be STDOUT, which indicates that the -stderr data from the applications should be captured into the same -file handle as for stdout. - -On POSIX, if preexec_fn is set to a callable object, this object will be -called in the child process just before the child is executed. The use -of preexec_fn is not thread safe, using it in the presence of threads -could lead to a deadlock in the child process before the new executable -is executed. - -If close_fds is true, all file descriptors except 0, 1 and 2 will be -closed before the child process is executed. The default for close_fds -varies by platform: Always true on POSIX. True when stdin/stdout/stderr -are None on Windows, false otherwise. - -pass_fds is an optional sequence of file descriptors to keep open between the -parent and child. Providing any pass_fds implicitly sets close_fds to true. - -if shell is true, the specified command will be executed through the -shell. - -If cwd is not None, the current directory will be changed to cwd -before the child is executed. - -On POSIX, if restore_signals is True all signals that Python sets to -SIG_IGN are restored to SIG_DFL in the child process before the exec. -Currently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals. This -parameter does nothing on Windows. - -On POSIX, if start_new_session is True, the setsid() system call will be made -in the child process prior to executing the command. - -If env is not None, it defines the environment variables for the new -process. - -If universal_newlines is False, the file objects stdin, stdout and stderr -are opened as binary files, and no line ending conversion is done. - -If universal_newlines is True, the file objects stdout and stderr are -opened as a text file, but lines may be terminated by any of '\n', -the Unix end-of-line convention, '\r', the old Macintosh convention or -'\r\n', the Windows convention. All of these external representations -are seen as '\n' by the Python program. Also, the newlines attribute -of the file objects stdout, stdin and stderr are not updated by the -communicate() method. - -In either case, the process being communicated with should start up -expecting to receive bytes on its standard input and decode them with -the same encoding they are sent in. - -The startupinfo and creationflags, if given, will be passed to the -underlying CreateProcess() function. They can specify things such as -appearance of the main window and priority for the new process. -(Windows only) - - -This module also defines some shortcut functions: - -call(*popenargs, **kwargs): - Run command with arguments. Wait for command to complete, then - return the returncode attribute. - - The arguments are the same as for the Popen constructor. Example: - - >>> retcode = subprocess.call(["ls", "-l"]) - -check_call(*popenargs, **kwargs): - Run command with arguments. Wait for command to complete. If the - exit code was zero then return, otherwise raise - CalledProcessError. The CalledProcessError object will have the - return code in the returncode attribute. - - The arguments are the same as for the Popen constructor. Example: - - >>> subprocess.check_call(["ls", "-l"]) - 0 - -getstatusoutput(cmd): - Return (status, output) of executing cmd in a shell. - - Execute the string 'cmd' in a shell with 'check_output' and - return a 2-tuple (status, output). Universal newlines mode is used, - meaning that the result with be decoded to a string. - - A trailing newline is stripped from the output. - The exit status for the command can be interpreted - according to the rules for the function 'wait'. Example: - - >>> subprocess.getstatusoutput('ls /bin/ls') - (0, '/bin/ls') - >>> subprocess.getstatusoutput('cat /bin/junk') - (256, 'cat: /bin/junk: No such file or directory') - >>> subprocess.getstatusoutput('/bin/junk') - (256, 'sh: /bin/junk: not found') - -getoutput(cmd): - Return output (stdout or stderr) of executing cmd in a shell. - - Like getstatusoutput(), except the exit status is ignored and the return - value is a string containing the command's output. Example: - - >>> subprocess.getoutput('ls /bin/ls') - '/bin/ls' - -check_output(*popenargs, **kwargs): - Run command with arguments and return its output. - - If the exit code was non-zero it raises a CalledProcessError. The - CalledProcessError object will have the return code in the returncode - attribute and output in the output attribute. - - The arguments are the same as for the Popen constructor. Example: - - >>> output = subprocess.check_output(["ls", "-l", "/dev/null"]) - - There is an additional optional argument, "input", allowing you to - pass a string to the subprocess's stdin. If you use this argument - you may not also use the Popen constructor's "stdin" argument. - - If universal_newlines is set to True, the "input" argument must - be a string rather than bytes, and the return value will be a string. - -Exceptions ----------- -Exceptions raised in the child process, before the new program has -started to execute, will be re-raised in the parent. Additionally, -the exception object will have one extra attribute called -'child_traceback', which is a string containing traceback information -from the child's point of view. - -The most common exception raised is OSError. This occurs, for -example, when trying to execute a non-existent file. Applications -should prepare for OSErrors. - -A ValueError will be raised if Popen is called with invalid arguments. - -Exceptions defined within this module inherit from SubprocessError. -check_call() and check_output() will raise CalledProcessError if the -called process returns a non-zero return code. TimeoutExpired -be raised if a timeout was specified and expired. - - -Security --------- -Unlike some other popen functions, this implementation will never call -/bin/sh implicitly. This means that all characters, including shell -metacharacters, can safely be passed to child processes. - - -Popen objects -============= -Instances of the Popen class have the following methods: - -poll() - Check if child process has terminated. Returns returncode - attribute. - -wait() - Wait for child process to terminate. Returns returncode attribute. - -communicate(input=None) - Interact with process: Send data to stdin. Read data from stdout - and stderr, until end-of-file is reached. Wait for process to - terminate. The optional input argument should be data to be - sent to the child process, or None, if no data should be sent to - the child. If the Popen instance was constructed with universal_newlines - set to True, the input argument should be a string and will be encoded - using the preferred system encoding (see locale.getpreferredencoding); - if universal_newlines is False, the input argument should be a - byte string. - - communicate() returns a tuple (stdout, stderr). - - Note: The data read is buffered in memory, so do not use this - method if the data size is large or unlimited. - -The following attributes are also available: - -stdin - If the stdin argument is PIPE, this attribute is a file object - that provides input to the child process. Otherwise, it is None. - -stdout - If the stdout argument is PIPE, this attribute is a file object - that provides output from the child process. Otherwise, it is - None. - -stderr - If the stderr argument is PIPE, this attribute is file object that - provides error output from the child process. Otherwise, it is - None. - -pid - The process ID of the child process. - -returncode - The child return code. A None value indicates that the process - hasn't terminated yet. A negative value -N indicates that the - child was terminated by signal N (POSIX only). - - -Replacing older functions with the subprocess module -==================================================== -In this section, "a ==> b" means that b can be used as a replacement -for a. - -Note: All functions in this section fail (more or less) silently if -the executed program cannot be found; this module raises an OSError -exception. - -In the following examples, we assume that the subprocess module is -imported with "from subprocess import *". - - -Replacing /bin/sh shell backquote ---------------------------------- -output=`mycmd myarg` -==> -output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0] - - -Replacing shell pipe line -------------------------- -output=`dmesg | grep hda` -==> -p1 = Popen(["dmesg"], stdout=PIPE) -p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) -output = p2.communicate()[0] - - -Replacing os.system() ---------------------- -sts = os.system("mycmd" + " myarg") -==> -p = Popen("mycmd" + " myarg", shell=True) -pid, sts = os.waitpid(p.pid, 0) - -Note: - -* Calling the program through the shell is usually not required. - -* It's easier to look at the returncode attribute than the - exitstatus. - -A more real-world example would look like this: - -try: - retcode = call("mycmd" + " myarg", shell=True) - if retcode < 0: - print("Child was terminated by signal", -retcode, file=sys.stderr) - else: - print("Child returned", retcode, file=sys.stderr) -except OSError as e: - print("Execution failed:", e, file=sys.stderr) - - -Replacing os.spawn* -------------------- -P_NOWAIT example: - -pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg") -==> -pid = Popen(["/bin/mycmd", "myarg"]).pid - - -P_WAIT example: - -retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg") -==> -retcode = call(["/bin/mycmd", "myarg"]) - - -Vector example: - -os.spawnvp(os.P_NOWAIT, path, args) -==> -Popen([path] + args[1:]) - - -Environment example: - -os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env) -==> -Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"}) +input/output/error pipes, and obtain their return codes. + +For a complete description of this module see the Python documentation. + +Main API +======== +run(...): Runs a command, waits for it to complete, then returns a + CompletedProcess instance. +Popen(...): A class for flexibly executing a command in a new process + +Constants +--------- +DEVNULL: Special value that indicates that os.devnull should be used +PIPE: Special value that indicates a pipe should be created +STDOUT: Special value that indicates that stderr should go to stdout + + +Older API +========= +call(...): Runs a command, waits for it to complete, then returns + the return code. +check_call(...): Same as call() but raises CalledProcessError() + if return code is not 0 +check_output(...): Same as check_call() but returns the contents of + stdout instead of a return code +getoutput(...): Runs a command in the shell, waits for it to complete, + then returns the output +getstatusoutput(...): Runs a command in the shell, waits for it to complete, + then returns a (status, output) tuple """ import sys @@ -372,10 +58,11 @@ class SubprocessError(Exception): pass class CalledProcessError(SubprocessError): - """This exception is raised when a process run by check_call() or - check_output() returns a non-zero exit status. - The exit status will be stored in the returncode attribute; - check_output() will also store the output in the output attribute. + """Raised when run() is called with check=True and the process + returns a non-zero exit status. + + Attributes: + cmd, returncode, stdout, stderr, output """ def __init__(self, returncode, cmd, output=None, stderr=None): self.returncode = returncode @@ -401,6 +88,9 @@ class CalledProcessError(SubprocessError): class TimeoutExpired(SubprocessError): """This exception is raised when the timeout expires while waiting for a child process. + + Attributes: + cmd, output, stdout, stderr, timeout """ def __init__(self, cmd, timeout, output=None, stderr=None): self.cmd = cmd @@ -828,7 +518,46 @@ _PLATFORM_DEFAULT_CLOSE_FDS = object() class Popen(object): + """ Execute a child program in a new process. + + For a complete description of the arguments see the Python documentation. + Arguments: + args: A string, or a sequence of program arguments. + + bufsize: supplied as the buffering argument to the open() function when + creating the stdin/stdout/stderr pipe file objects + + executable: A replacement program to execute. + + stdin, stdout and stderr: These specify the executed programs' standard + input, standard output and standard error file handles, respectively. + + preexec_fn: (POSIX only) An object to be called in the child process + just before the child is executed. + + close_fds: Controls closing or inheriting of file descriptors. + + shell: If true, the command will be executed through the shell. + + cwd: Sets the current directory before the child is executed. + + env: Defines the environment variables for the new process. + + universal_newlines: If true, use universal line endings for file + objects stdin, stdout and stderr. + + startupinfo and creationflags (Windows only) + + restore_signals (POSIX only) + + start_new_session (POSIX only) + + pass_fds (POSIX only) + + Attributes: + stdin, stdout, stderr, pid, returncode + """ _child_created = False # Set here since __del__ checks it def __init__(self, args, bufsize=-1, executable=None, @@ -1079,6 +808,8 @@ class Popen(object): def poll(self): + """Check if child process has terminated. Set and return returncode + attribute.""" return self._internal_poll() diff --git a/Lib/tarfile.py b/Lib/tarfile.py index 721f9d7..999a99b 100755 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -1549,7 +1549,9 @@ class TarFile(object): if mode in ("r", "r:*"): # Find out which *open() is appropriate for opening the file. - for comptype in cls.OPEN_METH: + def not_compressed(comptype): + return cls.OPEN_METH[comptype] == 'taropen' + for comptype in sorted(cls.OPEN_METH, key=not_compressed): func = getattr(cls, cls.OPEN_METH[comptype]) if fileobj is not None: saved_pos = fileobj.tell() diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py index 11a6310..9b789c2 100644 --- a/Lib/test/_test_multiprocessing.py +++ b/Lib/test/_test_multiprocessing.py @@ -26,7 +26,7 @@ import test.support.script_helper _multiprocessing = test.support.import_module('_multiprocessing') # Skip tests if sem_open implementation is broken. test.support.import_module('multiprocessing.synchronize') -# import threading after _multiprocessing to raise a more revelant error +# import threading after _multiprocessing to raise a more relevant error # message: "No module named _multiprocessing". _multiprocessing is not compiled # without thread support. import threading @@ -3728,6 +3728,19 @@ class TestStartMethod(unittest.TestCase): self.assertTrue(methods == ['fork', 'spawn'] or methods == ['fork', 'spawn', 'forkserver']) + def test_preload_resources(self): + if multiprocessing.get_start_method() != 'forkserver': + self.skipTest("test only relevant for 'forkserver' method") + name = os.path.join(os.path.dirname(__file__), 'mp_preload.py') + rc, out, err = test.support.script_helper.assert_python_ok(name) + out = out.decode() + err = err.decode() + if out.rstrip() != 'ok' or err != '': + print(out) + print(err) + self.fail("failed spawning forkserver or grandchild") + + # # Check that killing process does not leak named semaphores # diff --git a/Lib/test/allsans.pem b/Lib/test/allsans.pem new file mode 100644 index 0000000..3ee4f59 --- /dev/null +++ b/Lib/test/allsans.pem @@ -0,0 +1,37 @@ +-----BEGIN PRIVATE KEY----- +MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOoy7/QOtTjQ0niE +6uDcTwtkC0R2Tvy1AjVnXohCntZfdzbTGDoYTgXSOLsP8A697jUiJ8VCePGH50xG +Z4DKnAF3a9O3a9nr2pLXb0iY3XOMv+YEBii7CfI+3oxFYgCl0sMgHzDD2ZTVYAsm +DWgLUVsE2gHEccRwrM2tPf2EgR+FAgMBAAECgYEA3qyfyYVSeTrTYxO93x6ZaVMu +A2IZp9zSxMQL9bKiI2GRj+cV2ebSCGbg2btFnD6qBor7FWsmYz+8g6FNN/9sY4az +61rMqMtQvLBe+7L8w70FeTze4qQ4Y1oQri0qD6tBWhDVlpnbI5Py9bkZKD67yVUk +elcEA/5x4PrYXkuqsAECQQD80NjT0mDvaY0JOOaQFSEpMv6QiUA8GGX8Xli7IoKb +tAolPG8rQBa+qSpcWfDMTrWw/aWHuMEEQoP/bVDH9W4FAkEA7SYQbBAKnojZ5A3G +kOHdV7aeivRQxQk/JN8Fb8oKB9Csvpv/BsuGxPKXHdhFa6CBTTsNRtHQw/szPo4l +xMIjgQJAPoMxqibR+0EBM6+TKzteSL6oPXsCnBl4Vk/J5vPgkbmR7KUl4+7j8N8J +b2554TrxKEN/w7CGYZRE6UrRd7ATNQJAWD7Yz41sli+wfPdPU2xo1BHljyl4wMk/ +EPZYbI/PCbdyAH/F935WyQTIjNeEhZc1Zkq6FwdOWw8ns3hrv3rKgQJAHXv1BqUa +czGPIFxX2TNoqtcl6/En4vrxVB1wzsfzkkDAg98kBl7qsF+S3qujSzKikjeaVbI2 +/CyWR2P3yLtOmA== +-----END PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIDcjCCAtugAwIBAgIJAN5dc9TOWjB7MA0GCSqGSIb3DQEBCwUAMF0xCzAJBgNV +BAYTAlhZMRcwFQYDVQQHDA5DYXN0bGUgQW50aHJheDEjMCEGA1UECgwaUHl0aG9u +IFNvZnR3YXJlIEZvdW5kYXRpb24xEDAOBgNVBAMMB2FsbHNhbnMwHhcNMTYwODA1 +MTAyMTExWhcNMjYwODAzMTAyMTExWjBdMQswCQYDVQQGEwJYWTEXMBUGA1UEBwwO +Q2FzdGxlIEFudGhyYXgxIzAhBgNVBAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0 +aW9uMRAwDgYDVQQDDAdhbGxzYW5zMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB +gQDqMu/0DrU40NJ4hOrg3E8LZAtEdk78tQI1Z16IQp7WX3c20xg6GE4F0ji7D/AO +ve41IifFQnjxh+dMRmeAypwBd2vTt2vZ69qS129ImN1zjL/mBAYouwnyPt6MRWIA +pdLDIB8ww9mU1WALJg1oC1FbBNoBxHHEcKzNrT39hIEfhQIDAQABo4IBODCCATQw +ggEwBgNVHREEggEnMIIBI4IHYWxsc2Fuc6AeBgMqAwSgFwwVc29tZSBvdGhlciBp +ZGVudGlmaWVyoDUGBisGAQUCAqArMCmgEBsOS0VSQkVST1MuUkVBTE2hFTAToAMC +AQGhDDAKGwh1c2VybmFtZYEQdXNlckBleGFtcGxlLm9yZ4IPd3d3LmV4YW1wbGUu +b3JnpGcwZTELMAkGA1UEBhMCWFkxFzAVBgNVBAcMDkNhc3RsZSBBbnRocmF4MSMw +IQYDVQQKDBpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjEYMBYGA1UEAwwPZGly +bmFtZSBleGFtcGxlhhdodHRwczovL3d3dy5weXRob24ub3JnL4cEfwAAAYcQAAAA +AAAAAAAAAAAAAAAAAYgEKgMEBTANBgkqhkiG9w0BAQsFAAOBgQAy16h+F+nOmeiT +VWR0fc8F/j6FcadbLseAUaogcC15OGxCl4UYpLV88HBkABOoGCpP155qwWTwOrdG +iYPGJSusf1OnJEbvzFejZf6u078bPd9/ZL4VWLjv+FPGkjd+N+/OaqMvgj8Lu99f +3Y/C4S7YbHxxwff6C6l2Xli+q6gnuQ== +-----END CERTIFICATE----- diff --git a/Lib/test/cfgparser.2 b/Lib/test/cfgparser.2 index 1646de8..cfcfef2 100644 --- a/Lib/test/cfgparser.2 +++ b/Lib/test/cfgparser.2 @@ -129,7 +129,7 @@ # Unix users can map to different SMB User names ; username map = /etc/samba/smbusers -# Using the following line enables you to customise your configuration +# Using the following line enables you to customize your configuration # on a per machine basis. The %m gets replaced with the netbios name # of the machine that is connecting ; include = /etc/samba/smb.conf.%m diff --git a/Lib/test/check_soundcard.vbs b/Lib/test/check_soundcard.vbs deleted file mode 100644 index 8c21852..0000000 --- a/Lib/test/check_soundcard.vbs +++ /dev/null @@ -1,13 +0,0 @@ -rem Check for a working sound-card - exit with 0 if OK, 1 otherwise. -set wmi = GetObject("winmgmts:") -set scs = wmi.InstancesOf("win32_sounddevice") -for each sc in scs - set status = sc.Properties_("Status") - wscript.Echo(sc.Properties_("Name") + "/" + status) - if status = "OK" then - wscript.Quit 0 rem normal exit - end if -next -rem No sound card found - exit with status code of 1 -wscript.Quit 1 - diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py index f5222c7..0860db8 100644 --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -3884,7 +3884,7 @@ class Oddballs(unittest.TestCase): self.assertRaises(TypeError, lambda: as_date >= as_datetime) self.assertRaises(TypeError, lambda: as_datetime >= as_date) - # Neverthelss, comparison should work with the base-class (date) + # Nevertheless, comparison should work with the base-class (date) # projection if use of a date method is forced. self.assertEqual(as_date.__eq__(as_datetime), True) different_day = (as_date.day + 1) % 20 + 1 diff --git a/Lib/test/eintrdata/eintr_tester.py b/Lib/test/eintrdata/eintr_tester.py index 9931a55..e3f1aa5 100644 --- a/Lib/test/eintrdata/eintr_tester.py +++ b/Lib/test/eintrdata/eintr_tester.py @@ -372,7 +372,7 @@ class SignalEINTRTest(EINTRBaseTest): @unittest.skipUnless(hasattr(signal, 'sigwaitinfo'), 'need signal.sigwaitinfo()') def test_sigwaitinfo(self): - # Issue #25277, #25868: give a few miliseconds to the parent process + # Issue #25277, #25868: give a few milliseconds to the parent process # between os.write() and signal.sigwaitinfo() to works around a race # condition self.sleep_time = 0.100 diff --git a/Lib/test/mailcap.txt b/Lib/test/mailcap.txt index f61135d..08a76e6 100644 --- a/Lib/test/mailcap.txt +++ b/Lib/test/mailcap.txt @@ -35,5 +35,5 @@ message/external-body; showexternal %s %{access-type} %{name} %{site} \ text/richtext; shownonascii iso-8859-8 -e richtext -p %s; test=test "`echo \ %{charset} | tr '[A-Z]' '[a-z]'`" = iso-8859-8; copiousoutput -video/mpeg; mpeg_play %s video/*; animate %s +video/mpeg; mpeg_play %s \ No newline at end of file diff --git a/Lib/test/make_ssl_certs.py b/Lib/test/make_ssl_certs.py index 81d04f8..a1f298d 100644 --- a/Lib/test/make_ssl_certs.py +++ b/Lib/test/make_ssl_certs.py @@ -20,7 +20,28 @@ req_template = """ CN = {hostname} [req_x509_extensions] - subjectAltName = DNS:{hostname} + subjectAltName = @san + + [san] + DNS.1 = {hostname} + {extra_san} + + [dir_sect] + C = XY + L = Castle Anthrax + O = Python Software Foundation + CN = dirname example + + [princ_name] + realm = EXP:0, GeneralString:KERBEROS.REALM + principal_name = EXP:1, SEQUENCE:principal_seq + + [principal_seq] + name_type = EXP:0, INTEGER:1 + name_string = EXP:1, SEQUENCE:principals + + [principals] + princ1 = GeneralString:username [ ca ] default_ca = CA_default @@ -67,7 +88,7 @@ req_template = """ here = os.path.abspath(os.path.dirname(__file__)) -def make_cert_key(hostname, sign=False): +def make_cert_key(hostname, sign=False, extra_san=''): print("creating cert for " + hostname) tempnames = [] for i in range(3): @@ -75,8 +96,9 @@ def make_cert_key(hostname, sign=False): tempnames.append(f.name) req_file, cert_file, key_file = tempnames try: + req = req_template.format(hostname=hostname, extra_san=extra_san) with open(req_file, 'w') as f: - f.write(req_template.format(hostname=hostname)) + f.write(req) args = ['req', '-new', '-days', '3650', '-nodes', '-newkey', 'rsa:1024', '-keyout', key_file, '-config', req_file] @@ -120,7 +142,7 @@ def make_ca(): f.write('unique_subject = no') with tempfile.NamedTemporaryFile("w") as t: - t.write(req_template.format(hostname='our-ca-server')) + t.write(req_template.format(hostname='our-ca-server', extra_san='')) t.flush() with tempfile.NamedTemporaryFile() as f: args = ['req', '-new', '-days', '3650', '-extensions', 'v3_ca', '-nodes', @@ -171,6 +193,25 @@ if __name__ == '__main__': f.write(key) f.write(cert) + extra_san = [ + 'otherName.1 = 1.2.3.4;UTF8:some other identifier', + 'otherName.2 = 1.3.6.1.5.2.2;SEQUENCE:princ_name', + 'email.1 = user@example.org', + 'DNS.2 = www.example.org', + # GEN_X400 + 'dirName.1 = dir_sect', + # GEN_EDIPARTY + 'URI.1 = https://www.python.org/', + 'IP.1 = 127.0.0.1', + 'IP.2 = ::1', + 'RID.1 = 1.2.3.4.5', + ] + + cert, key = make_cert_key('allsans', extra_san='\n'.join(extra_san)) + with open('allsans.pem', 'w') as f: + f.write(key) + f.write(cert) + unmake_ca() print("\n\nPlease change the values in test_ssl.py, test_parse_cert function related to notAfter,notBefore and serialNumber") check_call(['openssl','x509','-in','keycert.pem','-dates','-serial','-noout']) diff --git a/Lib/test/mp_preload.py b/Lib/test/mp_preload.py new file mode 100644 index 0000000..5314e8f --- /dev/null +++ b/Lib/test/mp_preload.py @@ -0,0 +1,18 @@ +import multiprocessing + +multiprocessing.Lock() + + +def f(): + print("ok") + + +if __name__ == "__main__": + ctx = multiprocessing.get_context("forkserver") + modname = "test.mp_preload" + # Make sure it's importable + __import__(modname) + ctx.set_forkserver_preload([modname]) + proc = ctx.Process(target=f) + proc.start() + proc.join() diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py index f252a0a..7922b54 100644 --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -2629,6 +2629,35 @@ class AbstractPersistentPicklerTests(unittest.TestCase): self.assertEqual(self.load_false_count, 1) +class AbstractIdentityPersistentPicklerTests(unittest.TestCase): + + def persistent_id(self, obj): + return obj + + def persistent_load(self, pid): + return pid + + def _check_return_correct_type(self, obj, proto): + unpickled = self.loads(self.dumps(obj, proto)) + self.assertIsInstance(unpickled, type(obj)) + self.assertEqual(unpickled, obj) + + def test_return_correct_type(self): + for proto in protocols: + # Protocol 0 supports only ASCII strings. + if proto == 0: + self._check_return_correct_type("abc", 0) + else: + for obj in [b"abc\n", "abc\n", -1, -1.1 * 0.1, str]: + self._check_return_correct_type(obj, proto) + + def test_protocol0_is_ascii_only(self): + non_ascii_str = "\N{EMPTY SET}" + self.assertRaises(pickle.PicklingError, self.dumps, non_ascii_str, 0) + pickled = pickle.PERSID + non_ascii_str.encode('utf-8') + b'\n.' + self.assertRaises(pickle.UnpicklingError, self.loads, pickled) + + class AbstractPicklerUnpicklerObjectTests(unittest.TestCase): pickler_class = None diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index fecfd09..c1d85f6 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -325,9 +325,6 @@ def _create_parser(): group.add_argument('-P', '--pgo', dest='pgo', action='store_true', help='enable Profile Guided Optimization training') - parser.add_argument('args', nargs=argparse.REMAINDER, - help=argparse.SUPPRESS) - return parser def relative_filename(string): @@ -373,15 +370,21 @@ def _parse_args(args, **kwargs): ns.use_resources = [] parser = _create_parser() - parser.parse_args(args=args, namespace=ns) + # Issue #14191: argparse doesn't support "intermixed" positional and + # optional arguments. Use parse_known_args() as workaround. + ns.args = parser.parse_known_args(args=args, namespace=ns)[1] + for arg in ns.args: + if arg.startswith('-'): + parser.error("unrecognized arguments: %s" % arg) + sys.exit(1) if ns.single and ns.fromfile: parser.error("-s and -f don't go together!") - if ns.use_mp and ns.trace: + if ns.use_mp is not None and ns.trace: parser.error("-T and -j don't go together!") - if ns.use_mp and ns.findleaks: + if ns.use_mp is not None and ns.findleaks: parser.error("-l and -j don't go together!") - if ns.use_mp and ns.memlimit: + if ns.use_mp is not None and ns.memlimit: parser.error("-M and -j don't go together!") if ns.failfast and not (ns.verbose or ns.verbose3): parser.error("-G/--failfast needs either -v or -W") @@ -989,7 +992,7 @@ def runtest(test, verbose, quiet, sys.stderr = stream result = runtest_inner(test, verbose, quiet, huntrleaks, display_failure=False, pgo=pgo) - if result[0] == FAILED and not pgo: + if result[0] != PASSED and not pgo: output = stream.getvalue() orig_stderr.write(output) orig_stderr.flush() @@ -1049,7 +1052,7 @@ class saved_test_environment: resources = ('sys.argv', 'cwd', 'sys.stdin', 'sys.stdout', 'sys.stderr', 'os.environ', 'sys.path', 'sys.path_hooks', '__import__', - 'warnings.filters', 'asyncore.socket_map', + 'asyncore.socket_map', 'logging._handlers', 'logging._handlerList', 'sys.gettrace', 'sys.warnoptions', # multiprocessing.process._cleanup() may release ref @@ -1115,12 +1118,6 @@ class saved_test_environment: def restore___import__(self, import_): builtins.__import__ = import_ - def get_warnings_filters(self): - return id(warnings.filters), warnings.filters, warnings.filters[:] - def restore_warnings_filters(self, saved_filters): - warnings.filters = saved_filters[1] - warnings.filters[:] = saved_filters[2] - def get_asyncore_socket_map(self): asyncore = sys.modules.get('asyncore') # XXX Making a copy keeps objects alive until __exit__ gets called. @@ -1258,6 +1255,7 @@ class saved_test_environment: def __exit__(self, exc_type, exc_val, exc_tb): saved_values = self.saved_values del self.saved_values + support.gc_collect() # Some resources use weak references for name, get, restore in self.resource_info(): current = get() original = saved_values.pop(name) @@ -1288,6 +1286,7 @@ def runtest_inner(test, verbose, quiet, else: # Always import it from the test package abstest = 'test.' + test + clear_caches() with saved_test_environment(test, verbose, quiet, pgo=pgo) as environment: start_time = time.time() the_module = importlib.import_module(abstest) @@ -1460,17 +1459,9 @@ def dash_R(the_module, test, indirect_test, huntrleaks): def dash_R_cleanup(fs, ps, pic, zdc, abcs): import gc, copyreg - import _strptime, linecache - import urllib.parse, urllib.request, mimetypes, doctest - import struct, filecmp, collections.abc - from distutils.dir_util import _path_created + import collections.abc from weakref import WeakSet - # Clear the warnings registry, so they can be displayed again - for mod in sys.modules.values(): - if hasattr(mod, '__warningregistry__'): - del mod.__warningregistry__ - # Restore some original values. warnings.filters[:] = fs copyreg.dispatch_table.clear() @@ -1497,6 +1488,22 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs): obj._abc_cache.clear() obj._abc_negative_cache.clear() + clear_caches() + + # Collect cyclic trash and read memory statistics immediately after. + func1 = sys.getallocatedblocks + func2 = sys.gettotalrefcount + gc.collect() + return func1(), func2() + +def clear_caches(): + import gc + + # Clear the warnings registry, so they can be displayed again + for mod in sys.modules.values(): + if hasattr(mod, '__warningregistry__'): + del mod.__warningregistry__ + # Flush standard output, so that buffered data is sent to the OS and # associated Python objects are reclaimed. for stream in (sys.stdout, sys.stderr, sys.__stdout__, sys.__stderr__): @@ -1504,29 +1511,88 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs): stream.flush() # Clear assorted module caches. - _path_created.clear() + # Don't worry about resetting the cache if the module is not loaded + try: + distutils_dir_util = sys.modules['distutils.dir_util'] + except KeyError: + pass + else: + distutils_dir_util._path_created.clear() + re.purge() - _strptime._regex_cache.clear() - urllib.parse.clear_cache() - urllib.request.urlcleanup() - linecache.clearcache() - mimetypes._default_mime_types() - filecmp._cache.clear() - struct._clearcache() - doctest.master = None + try: - import ctypes - except ImportError: - # Don't worry about resetting the cache if ctypes is not supported + _strptime = sys.modules['_strptime'] + except KeyError: + pass + else: + _strptime._regex_cache.clear() + + try: + urllib_parse = sys.modules['urllib.parse'] + except KeyError: + pass + else: + urllib_parse.clear_cache() + + try: + urllib_request = sys.modules['urllib.request'] + except KeyError: + pass + else: + urllib_request.urlcleanup() + + try: + linecache = sys.modules['linecache'] + except KeyError: + pass + else: + linecache.clearcache() + + try: + mimetypes = sys.modules['mimetypes'] + except KeyError: + pass + else: + mimetypes._default_mime_types() + + try: + filecmp = sys.modules['filecmp'] + except KeyError: + pass + else: + filecmp._cache.clear() + + try: + struct = sys.modules['struct'] + except KeyError: + pass + else: + struct._clearcache() + + try: + doctest = sys.modules['doctest'] + except KeyError: + pass + else: + doctest.master = None + + try: + ctypes = sys.modules['ctypes'] + except KeyError: pass else: ctypes._reset_cache() - # Collect cyclic trash and read memory statistics immediately after. - func1 = sys.getallocatedblocks - func2 = sys.gettotalrefcount + try: + typing = sys.modules['typing'] + except KeyError: + pass + else: + for f in typing._cleanups: + f() + gc.collect() - return func1(), func2() def warm_caches(): # char cache diff --git a/Lib/test/ssl_servers.py b/Lib/test/ssl_servers.py index f9d30cf..b99ea45 100644 --- a/Lib/test/ssl_servers.py +++ b/Lib/test/ssl_servers.py @@ -16,7 +16,7 @@ here = os.path.dirname(__file__) HOST = support.HOST CERTFILE = os.path.join(here, 'keycert.pem') -# This one's based on HTTPServer, which is based on SocketServer +# This one's based on HTTPServer, which is based on socketserver class HTTPSServer(_HTTPServer): diff --git a/Lib/test/ssltests.py b/Lib/test/ssltests.py index 9b0ed22..5073ae1 100644 --- a/Lib/test/ssltests.py +++ b/Lib/test/ssltests.py @@ -1,17 +1,32 @@ -# Convenience test module to run all of the SSL-related tests in the +# Convenience test module to run all of the OpenSSL-related tests in the # standard library. +import ssl import sys import subprocess -TESTS = ['test_asyncio', 'test_ftplib', 'test_hashlib', 'test_httplib', - 'test_imaplib', 'test_nntplib', 'test_poplib', 'test_smtplib', - 'test_smtpnet', 'test_urllib2_localnet', 'test_venv'] +TESTS = [ + 'test_asyncio', 'test_ensurepip.py', 'test_ftplib', 'test_hashlib', + 'test_hmac', 'test_httplib', 'test_imaplib', 'test_nntplib', + 'test_poplib', 'test_ssl', 'test_smtplib', 'test_smtpnet', + 'test_urllib2_localnet', 'test_venv', 'test_xmlrpc' +] def run_regrtests(*extra_args): - args = [sys.executable, "-m", "test"] + print(ssl.OPENSSL_VERSION) + args = [ + sys.executable, + '-Werror', '-bb', # turn warnings into exceptions + '-m', 'test', + ] if not extra_args: - args.append("-unetwork") + args.extend([ + '-r', # randomize + '-w', # re-run failed tests with -v + '-u', 'network', # use network + '-u', 'urlfetch', # download test vectors + '-j', '0' # use multiple CPUs + ]) else: args.extend(extra_args) args.extend(TESTS) diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index e124fab..d0d126a 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -89,6 +89,7 @@ __all__ = [ "bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute", "requires_IEEE_754", "skip_unless_xattr", "requires_zlib", "anticipate_failure", "load_package_tests", "detect_api_mismatch", + "requires_multiprocessing_queue", # sys "is_jython", "check_impl_detail", # network @@ -296,6 +297,16 @@ def unload(name): except KeyError: pass +def _force_run(path, func, *args): + try: + return func(*args) + except OSError as err: + if verbose >= 2: + print('%s: %s' % (err.__class__.__name__, err)) + print('re-run %s%r' % (func.__name__, args)) + os.chmod(path, stat.S_IRWXU) + return func(*args) + if sys.platform.startswith("win"): def _waitfor(func, pathname, waitall=False): # Perform the operation @@ -338,7 +349,7 @@ if sys.platform.startswith("win"): def _rmtree(path): def _rmtree_inner(path): - for name in os.listdir(path): + for name in _force_run(path, os.listdir, path): fullname = os.path.join(path, name) try: mode = os.lstat(fullname).st_mode @@ -348,15 +359,36 @@ if sys.platform.startswith("win"): mode = 0 if stat.S_ISDIR(mode): _waitfor(_rmtree_inner, fullname, waitall=True) - os.rmdir(fullname) + _force_run(fullname, os.rmdir, fullname) else: - os.unlink(fullname) + _force_run(fullname, os.unlink, fullname) _waitfor(_rmtree_inner, path, waitall=True) - _waitfor(os.rmdir, path) + _waitfor(lambda p: _force_run(p, os.rmdir, p), path) else: _unlink = os.unlink _rmdir = os.rmdir - _rmtree = shutil.rmtree + + def _rmtree(path): + try: + shutil.rmtree(path) + return + except OSError: + pass + + def _rmtree_inner(path): + for name in _force_run(path, os.listdir, path): + fullname = os.path.join(path, name) + try: + mode = os.lstat(fullname).st_mode + except OSError: + mode = 0 + if stat.S_ISDIR(mode): + _rmtree_inner(fullname) + _force_run(path, os.rmdir, fullname) + else: + _force_run(path, os.unlink, fullname) + _rmtree_inner(path) + os.rmdir(path) def unlink(filename): try: @@ -464,6 +496,7 @@ def _is_gui_available(): try: from tkinter import Tk root = Tk() + root.withdraw() root.update() root.destroy() except Exception as e: @@ -488,12 +521,12 @@ def is_resource_enabled(resource): def requires(resource, msg=None): """Raise ResourceDenied if the specified resource is not available.""" - if resource == 'gui' and not _is_gui_available(): - raise ResourceDenied(_is_gui_available.reason) if not is_resource_enabled(resource): if msg is None: msg = "Use of the %r resource not enabled" % resource raise ResourceDenied(msg) + if resource == 'gui' and not _is_gui_available(): + raise ResourceDenied(_is_gui_available.reason) def _requires_unix_version(sysname, min_version): """Decorator raising SkipTest if the OS is `sysname` and the version is less @@ -900,7 +933,7 @@ def temp_dir(path=None, quiet=False): yield path finally: if dir_created: - shutil.rmtree(path) + rmtree(path) @contextlib.contextmanager def change_cwd(path, quiet=False): @@ -1008,9 +1041,16 @@ def make_bad_fd(): file.close() unlink(TESTFN) -def check_syntax_error(testcase, statement): - testcase.assertRaises(SyntaxError, compile, statement, - '', 'exec') +def check_syntax_error(testcase, statement, *, lineno=None, offset=None): + with testcase.assertRaises(SyntaxError) as cm: + compile(statement, '', 'exec') + err = cm.exception + testcase.assertIsNotNone(err.lineno) + if lineno is not None: + testcase.assertEqual(err.lineno, lineno) + testcase.assertIsNotNone(err.offset) + if offset is not None: + testcase.assertEqual(err.offset, offset) def open_urlresource(url, *args, **kw): import urllib.request, urllib.parse @@ -1349,7 +1389,8 @@ def transient_internet(resource_name, *, timeout=30.0, errnos=()): 500 <= err.code <= 599) or (isinstance(err, urllib.error.URLError) and (("ConnectionRefusedError" in err.reason) or - ("TimeoutError" in err.reason))) or + ("TimeoutError" in err.reason) or + ("EOFError" in err.reason))) or n in captured_errnos): if not verbose: sys.stderr.write(denied.args[0] + "\n") @@ -1729,6 +1770,22 @@ def impl_detail(msg=None, **guards): msg = msg.format(' or '.join(guardnames)) return unittest.skip(msg) +_have_mp_queue = None +def requires_multiprocessing_queue(test): + """Skip decorator for tests that use multiprocessing.Queue.""" + global _have_mp_queue + if _have_mp_queue is None: + import multiprocessing + # Without a functioning shared semaphore implementation attempts to + # instantiate a Queue will result in an ImportError (issue #3770). + try: + multiprocessing.Queue() + _have_mp_queue = True + except ImportError: + _have_mp_queue = False + msg = "requires a functioning shared semaphore implementation" + return test if _have_mp_queue else unittest.skip(msg)(test) + def _parse_guards(guards): # Returns a tuple ({platform_name: run_me}, default_value) if not guards: @@ -2068,6 +2125,9 @@ def strip_python_stderr(stderr): stderr = re.sub(br"\[\d+ refs, \d+ blocks\]\r?\n?", b"", stderr).strip() return stderr +requires_type_collecting = unittest.skipIf(hasattr(sys, 'getcounts'), + 'types are immortal if COUNT_ALLOCS is defined') + def args_from_interpreter_flags(): """Return a list of command-line arguments reproducing the current settings in sys.flags and sys.warnoptions.""" diff --git a/Lib/test/support/script_helper.py b/Lib/test/support/script_helper.py index 9c2e9eb..80889b1 100644 --- a/Lib/test/support/script_helper.py +++ b/Lib/test/support/script_helper.py @@ -73,22 +73,26 @@ def run_python_until_end(*args, **env_vars): # Need to preserve the original environment, for in-place testing of # shared library builds. env = os.environ.copy() + # set TERM='' unless the TERM environment variable is passed explicitly + # see issues #11390 and #18300 + if 'TERM' not in env_vars: + env['TERM'] = '' # But a special flag that can be set to override -- in this case, the # caller is responsible to pass the full environment. if env_vars.pop('__cleanenv', None): env = {} env.update(env_vars) cmd_line.extend(args) - p = subprocess.Popen(cmd_line, stdin=subprocess.PIPE, + proc = subprocess.Popen(cmd_line, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - try: - out, err = p.communicate() - finally: - subprocess._cleanup() - p.stdout.close() - p.stderr.close() - rc = p.returncode + with proc: + try: + out, err = proc.communicate() + finally: + proc.kill() + subprocess._cleanup() + rc = proc.returncode err = strip_python_stderr(err) return _PythonRunResult(rc, out, err), cmd_line diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index f9ee398..4779a13 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -4550,7 +4550,7 @@ class TestNamespace(TestCase): self.assertTrue(ns2 != ns3) self.assertTrue(ns2 != ns4) - def test_equality_returns_notimplemeted(self): + def test_equality_returns_notimplemented(self): # See issue 21481 ns = argparse.Namespace(a=1, b=2) self.assertIs(ns.__eq__(None), NotImplemented) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 482526e..2a21e74 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -38,14 +38,24 @@ typecodes = "ubBhHiIlLfd" if have_long_long: typecodes += 'qQ' -class BadConstructorTest(unittest.TestCase): +class MiscTest(unittest.TestCase): - def test_constructor(self): + def test_bad_constructor(self): self.assertRaises(TypeError, array.array) self.assertRaises(TypeError, array.array, spam=42) self.assertRaises(TypeError, array.array, 'xx') self.assertRaises(ValueError, array.array, 'x') + def test_empty(self): + # Exercise code for handling zero-length arrays + a = array.array('B') + a[:] = a + self.assertEqual(len(a), 0) + self.assertEqual(len(a + a), 0) + self.assertEqual(len(a * 3), 0) + a += a + self.assertEqual(len(a), 0) + # Machine format codes. # diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py index 0807dfb..3f1ec65 100644 --- a/Lib/test/test_asyncio/test_base_events.py +++ b/Lib/test/test_asyncio/test_base_events.py @@ -116,6 +116,13 @@ class BaseEventTests(test_utils.TestCase): self.assertIsNone( base_events._ipaddr_info('::3%lo0', 1, INET6, STREAM, TCP)) + if hasattr(socket, 'SOCK_NONBLOCK'): + self.assertEqual( + None, + base_events._ipaddr_info( + '1.2.3.4', 1, INET, STREAM | socket.SOCK_NONBLOCK, TCP)) + + def test_port_parameter_types(self): # Test obscure kinds of arguments for "port". INET = socket.AF_INET @@ -142,26 +149,6 @@ class BaseEventTests(test_utils.TestCase): (INET, STREAM, TCP, '', ('1.2.3.4', 1)), base_events._ipaddr_info('1.2.3.4', b'1', INET, STREAM, TCP)) - def test_getaddrinfo_servname(self): - INET = socket.AF_INET - STREAM = socket.SOCK_STREAM - TCP = socket.IPPROTO_TCP - - self.assertEqual( - (INET, STREAM, TCP, '', ('1.2.3.4', 80)), - base_events._ipaddr_info('1.2.3.4', 'http', INET, STREAM, TCP)) - - self.assertEqual( - (INET, STREAM, TCP, '', ('1.2.3.4', 80)), - base_events._ipaddr_info('1.2.3.4', b'http', INET, STREAM, TCP)) - - # Raises "service/proto not found". - with self.assertRaises(OSError): - base_events._ipaddr_info('1.2.3.4', 'nonsense', INET, STREAM, TCP) - - with self.assertRaises(OSError): - base_events._ipaddr_info('1.2.3.4', 'nonsense', INET, STREAM, TCP) - @patch_socket def test_ipaddr_info_no_inet_pton(self, m_socket): del m_socket.inet_pton @@ -174,6 +161,7 @@ class BaseEventTests(test_utils.TestCase): class BaseEventLoopTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = base_events.BaseEventLoop() self.loop._selector = mock.Mock() self.loop._selector.select.return_value = () @@ -255,6 +243,11 @@ class BaseEventLoopTests(test_utils.TestCase): self.assertIsInstance(h, asyncio.Handle) self.assertIn(h, self.loop._ready) + def test_call_soon_non_callable(self): + self.loop.set_debug(True) + with self.assertRaisesRegex(TypeError, 'a callable object'): + self.loop.call_soon(1) + def test_call_later(self): def cb(): pass @@ -361,44 +354,21 @@ class BaseEventLoopTests(test_utils.TestCase): # check disabled if debug mode is disabled test_thread(self.loop, False, create_loop=True) - def test_run_once_in_executor_handle(self): - def cb(): - pass - - self.assertRaises( - AssertionError, self.loop.run_in_executor, - None, asyncio.Handle(cb, (), self.loop), ('',)) - self.assertRaises( - AssertionError, self.loop.run_in_executor, - None, asyncio.TimerHandle(10, cb, (), self.loop)) - - def test_run_once_in_executor_cancelled(self): - def cb(): - pass - h = asyncio.Handle(cb, (), self.loop) - h.cancel() - - f = self.loop.run_in_executor(None, h) - self.assertIsInstance(f, asyncio.Future) - self.assertTrue(f.done()) - self.assertIsNone(f.result()) - def test_run_once_in_executor_plain(self): def cb(): pass - h = asyncio.Handle(cb, (), self.loop) f = asyncio.Future(loop=self.loop) executor = mock.Mock() executor.submit.return_value = f self.loop.set_default_executor(executor) - res = self.loop.run_in_executor(None, h) + res = self.loop.run_in_executor(None, cb) self.assertIs(f, res) executor = mock.Mock() executor.submit.return_value = f - res = self.loop.run_in_executor(executor, h) + res = self.loop.run_in_executor(executor, cb) self.assertIs(f, res) self.assertTrue(executor.submit.called) @@ -1014,6 +984,7 @@ class MyDatagramProto(asyncio.DatagramProtocol): class BaseEventLoopWithSelectorTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = asyncio.new_event_loop() self.set_event_loop(self.loop) @@ -1076,6 +1047,41 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): MyProto, 'example.com', 80, sock=object()) self.assertRaises(ValueError, self.loop.run_until_complete, coro) + def test_create_connection_wrong_sock(self): + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + with sock: + coro = self.loop.create_connection(MyProto, sock=sock) + with self.assertRaisesRegex(ValueError, + 'A Stream Socket was expected'): + self.loop.run_until_complete(coro) + + def test_create_server_wrong_sock(self): + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + with sock: + coro = self.loop.create_server(MyProto, sock=sock) + with self.assertRaisesRegex(ValueError, + 'A Stream Socket was expected'): + self.loop.run_until_complete(coro) + + @unittest.skipUnless(hasattr(socket, 'SOCK_NONBLOCK'), + 'no socket.SOCK_NONBLOCK (linux only)') + def test_create_server_stream_bittype(self): + sock = socket.socket( + socket.AF_INET, socket.SOCK_STREAM | socket.SOCK_NONBLOCK) + with sock: + coro = self.loop.create_server(lambda: None, sock=sock) + srv = self.loop.run_until_complete(coro) + srv.close() + self.loop.run_until_complete(srv.wait_closed()) + + def test_create_datagram_endpoint_wrong_sock(self): + sock = socket.socket(socket.AF_INET) + with sock: + coro = self.loop.create_datagram_endpoint(MyProto, sock=sock) + with self.assertRaisesRegex(ValueError, + 'A UDP Socket was expected'): + self.loop.run_until_complete(coro) + def test_create_connection_no_host_port_sock(self): coro = self.loop.create_connection(MyProto) self.assertRaises(ValueError, self.loop.run_until_complete, coro) @@ -1168,10 +1174,10 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): m_socket.getaddrinfo = socket.getaddrinfo sock = m_socket.socket.return_value - self.loop.add_reader = mock.Mock() - self.loop.add_reader._is_coroutine = False - self.loop.add_writer = mock.Mock() - self.loop.add_writer._is_coroutine = False + self.loop._add_reader = mock.Mock() + self.loop._add_reader._is_coroutine = False + self.loop._add_writer = mock.Mock() + self.loop._add_writer._is_coroutine = False coro = self.loop.create_connection(asyncio.Protocol, '1.2.3.4', 80) t, p = self.loop.run_until_complete(coro) @@ -1185,14 +1191,14 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): test_utils.run_briefly(self.loop) # allow transport to close sock.family = socket.AF_INET6 - coro = self.loop.create_connection(asyncio.Protocol, '::2', 80) + coro = self.loop.create_connection(asyncio.Protocol, '::1', 80) t, p = self.loop.run_until_complete(coro) try: - # Without inet_pton we use getaddrinfo, which transforms ('::2', 80) - # to ('::0.0.0.2', 80, 0, 0). The last 0s are flow info, scope id. + # Without inet_pton we use getaddrinfo, which transforms ('::1', 80) + # to ('::1', 80, 0, 0). The last 0s are flow info, scope id. [address] = sock.connect.call_args[0] host, port = address[:2] - self.assertRegex(host, r'::(0\.)*2') + self.assertRegex(host, r'::(0\.)*1') self.assertEqual(port, 80) _, kwargs = m_socket.socket.call_args self.assertEqual(kwargs['family'], m_socket.AF_INET6) @@ -1209,6 +1215,37 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): def test_create_connection_no_inet_pton(self, m_socket): self._test_create_connection_ip_addr(m_socket, False) + @patch_socket + def test_create_connection_service_name(self, m_socket): + m_socket.getaddrinfo = socket.getaddrinfo + sock = m_socket.socket.return_value + + self.loop._add_reader = mock.Mock() + self.loop._add_reader._is_coroutine = False + self.loop._add_writer = mock.Mock() + self.loop._add_writer._is_coroutine = False + + for service, port in ('http', 80), (b'http', 80): + coro = self.loop.create_connection(asyncio.Protocol, + '127.0.0.1', service) + + t, p = self.loop.run_until_complete(coro) + try: + sock.connect.assert_called_with(('127.0.0.1', port)) + _, kwargs = m_socket.socket.call_args + self.assertEqual(kwargs['family'], m_socket.AF_INET) + self.assertEqual(kwargs['type'], m_socket.SOCK_STREAM) + finally: + t.close() + test_utils.run_briefly(self.loop) # allow transport to close + + for service in 'nonsense', b'nonsense': + coro = self.loop.create_connection(asyncio.Protocol, + '127.0.0.1', service) + + with self.assertRaises(OSError): + self.loop.run_until_complete(coro) + def test_create_connection_no_local_addr(self): @asyncio.coroutine def getaddrinfo(host, *args, **kw): @@ -1371,6 +1408,17 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): self.assertRaises(ValueError, self.loop.run_until_complete, f) @patch_socket + def test_create_server_soreuseport_only_defined(self, m_socket): + m_socket.getaddrinfo = socket.getaddrinfo + m_socket.socket.return_value = mock.Mock() + m_socket.SO_REUSEPORT = -1 + + f = self.loop.create_server( + MyProto, '0.0.0.0', 0, reuse_port=True) + + self.assertRaises(ValueError, self.loop.run_until_complete, f) + + @patch_socket def test_create_server_cant_bind(self, m_socket): class Err(OSError): @@ -1481,36 +1529,39 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): self.assertEqual('CLOSED', protocol.state) def test_create_datagram_endpoint_sock_sockopts(self): + class FakeSock: + type = socket.SOCK_DGRAM + fut = self.loop.create_datagram_endpoint( - MyDatagramProto, local_addr=('127.0.0.1', 0), sock=object()) + MyDatagramProto, local_addr=('127.0.0.1', 0), sock=FakeSock()) self.assertRaises(ValueError, self.loop.run_until_complete, fut) fut = self.loop.create_datagram_endpoint( - MyDatagramProto, remote_addr=('127.0.0.1', 0), sock=object()) + MyDatagramProto, remote_addr=('127.0.0.1', 0), sock=FakeSock()) self.assertRaises(ValueError, self.loop.run_until_complete, fut) fut = self.loop.create_datagram_endpoint( - MyDatagramProto, family=1, sock=object()) + MyDatagramProto, family=1, sock=FakeSock()) self.assertRaises(ValueError, self.loop.run_until_complete, fut) fut = self.loop.create_datagram_endpoint( - MyDatagramProto, proto=1, sock=object()) + MyDatagramProto, proto=1, sock=FakeSock()) self.assertRaises(ValueError, self.loop.run_until_complete, fut) fut = self.loop.create_datagram_endpoint( - MyDatagramProto, flags=1, sock=object()) + MyDatagramProto, flags=1, sock=FakeSock()) self.assertRaises(ValueError, self.loop.run_until_complete, fut) fut = self.loop.create_datagram_endpoint( - MyDatagramProto, reuse_address=True, sock=object()) + MyDatagramProto, reuse_address=True, sock=FakeSock()) self.assertRaises(ValueError, self.loop.run_until_complete, fut) fut = self.loop.create_datagram_endpoint( - MyDatagramProto, reuse_port=True, sock=object()) + MyDatagramProto, reuse_port=True, sock=FakeSock()) self.assertRaises(ValueError, self.loop.run_until_complete, fut) fut = self.loop.create_datagram_endpoint( - MyDatagramProto, allow_broadcast=True, sock=object()) + MyDatagramProto, allow_broadcast=True, sock=FakeSock()) self.assertRaises(ValueError, self.loop.run_until_complete, fut) def test_create_datagram_endpoint_sockopts(self): @@ -1592,8 +1643,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): m_socket.getaddrinfo = getaddrinfo m_socket.socket.return_value.bind = bind = mock.Mock() - self.loop.add_reader = mock.Mock() - self.loop.add_reader._is_coroutine = False + self.loop._add_reader = mock.Mock() + self.loop._add_reader._is_coroutine = False reuseport_supported = hasattr(socket, 'SO_REUSEPORT') coro = self.loop.create_datagram_endpoint( @@ -1624,23 +1675,24 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): sock = mock.Mock() sock.fileno.return_value = 10 sock.accept.side_effect = OSError(errno.EMFILE, 'Too many open files') - self.loop.remove_reader = mock.Mock() + self.loop._remove_reader = mock.Mock() self.loop.call_later = mock.Mock() self.loop._accept_connection(MyProto, sock) self.assertTrue(m_log.error.called) self.assertFalse(sock.close.called) - self.loop.remove_reader.assert_called_with(10) + self.loop._remove_reader.assert_called_with(10) self.loop.call_later.assert_called_with(constants.ACCEPT_RETRY_DELAY, # self.loop._start_serving mock.ANY, - MyProto, sock, None, None) + MyProto, sock, None, None, mock.ANY) def test_call_coroutine(self): @asyncio.coroutine def simple_coroutine(): pass + self.loop.set_debug(True) coro_func = simple_coroutine coro_obj = coro_func() self.addCleanup(coro_obj.close) @@ -1687,5 +1739,23 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): "took .* seconds$") +class RunningLoopTests(unittest.TestCase): + + def test_running_loop_within_a_loop(self): + @asyncio.coroutine + def runner(loop): + loop.run_forever() + + loop = asyncio.new_event_loop() + outer_loop = asyncio.new_event_loop() + try: + with self.assertRaisesRegex(RuntimeError, + 'while another loop is running'): + outer_loop.run_until_complete(runner(loop)) + finally: + loop.close() + outer_loop.close() + + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py index d077775..28d92a9 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -1,5 +1,6 @@ """Tests for events.py.""" +import collections.abc import functools import gc import io @@ -21,8 +22,11 @@ import unittest from unittest import mock import weakref +if sys.platform != 'win32': + import tty import asyncio +from asyncio import coroutines from asyncio import proactor_events from asyncio import selector_events from asyncio import sslproto @@ -744,6 +748,85 @@ class EventLoopTestsMixin: self.assertEqual(cm.exception.errno, errno.EADDRINUSE) self.assertIn(str(httpd.address), cm.exception.strerror) + def test_connect_accepted_socket(self, server_ssl=None, client_ssl=None): + loop = self.loop + + class MyProto(MyBaseProto): + + def connection_lost(self, exc): + super().connection_lost(exc) + loop.call_soon(loop.stop) + + def data_received(self, data): + super().data_received(data) + self.transport.write(expected_response) + + lsock = socket.socket() + lsock.bind(('127.0.0.1', 0)) + lsock.listen(1) + addr = lsock.getsockname() + + message = b'test data' + response = None + expected_response = b'roger' + + def client(): + nonlocal response + try: + csock = socket.socket() + if client_ssl is not None: + csock = client_ssl.wrap_socket(csock) + csock.connect(addr) + csock.sendall(message) + response = csock.recv(99) + csock.close() + except Exception as exc: + print( + "Failure in client thread in test_connect_accepted_socket", + exc) + + thread = threading.Thread(target=client, daemon=True) + thread.start() + + conn, _ = lsock.accept() + proto = MyProto(loop=loop) + proto.loop = loop + loop.run_until_complete( + loop.connect_accepted_socket( + (lambda: proto), conn, ssl=server_ssl)) + loop.run_forever() + proto.transport.close() + lsock.close() + + thread.join(1) + self.assertFalse(thread.is_alive()) + self.assertEqual(proto.state, 'CLOSED') + self.assertEqual(proto.nbytes, len(message)) + self.assertEqual(response, expected_response) + + @unittest.skipIf(ssl is None, 'No ssl module') + def test_ssl_connect_accepted_socket(self): + if (sys.platform == 'win32' and + sys.version_info < (3, 5) and + isinstance(self.loop, proactor_events.BaseProactorEventLoop) + ): + raise unittest.SkipTest( + 'SSL not supported with proactor event loops before Python 3.5' + ) + + server_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + server_context.load_cert_chain(ONLYCERT, ONLYKEY) + if hasattr(server_context, 'check_hostname'): + server_context.check_hostname = False + server_context.verify_mode = ssl.CERT_NONE + + client_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + if hasattr(server_context, 'check_hostname'): + client_context.check_hostname = False + client_context.verify_mode = ssl.CERT_NONE + + self.test_connect_accepted_socket(server_context, client_context) + @mock.patch('asyncio.base_events.socket') def create_server_multiple_hosts(self, family, hosts, mock_sock): @asyncio.coroutine @@ -1294,6 +1377,11 @@ class EventLoopTestsMixin: server.transport.close() def test_create_datagram_endpoint_sock(self): + if (sys.platform == 'win32' and + isinstance(self.loop, proactor_events.BaseProactorEventLoop)): + raise unittest.SkipTest( + 'UDP is not supported with proactor event loops') + sock = None local_address = ('127.0.0.1', 0) infos = self.loop.run_until_complete( @@ -1311,7 +1399,7 @@ class EventLoopTestsMixin: else: assert False, 'Can not create socket.' - f = self.loop.create_connection( + f = self.loop.create_datagram_endpoint( lambda: MyDatagramProto(loop=self.loop), sock=sock) tr, pr = self.loop.run_until_complete(f) self.assertIsInstance(tr, asyncio.Transport) @@ -1547,6 +1635,79 @@ class EventLoopTestsMixin: self.loop.run_until_complete(proto.done) self.assertEqual('CLOSED', proto.state) + @unittest.skipUnless(sys.platform != 'win32', + "Don't support pipes for Windows") + # select, poll and kqueue don't support character devices (PTY) on Mac OS X + # older than 10.6 (Snow Leopard) + @support.requires_mac_ver(10, 6) + def test_bidirectional_pty(self): + master, read_slave = os.openpty() + write_slave = os.dup(read_slave) + tty.setraw(read_slave) + + slave_read_obj = io.open(read_slave, 'rb', 0) + read_proto = MyReadPipeProto(loop=self.loop) + read_connect = self.loop.connect_read_pipe(lambda: read_proto, + slave_read_obj) + read_transport, p = self.loop.run_until_complete(read_connect) + self.assertIs(p, read_proto) + self.assertIs(read_transport, read_proto.transport) + self.assertEqual(['INITIAL', 'CONNECTED'], read_proto.state) + self.assertEqual(0, read_proto.nbytes) + + + slave_write_obj = io.open(write_slave, 'wb', 0) + write_proto = MyWritePipeProto(loop=self.loop) + write_connect = self.loop.connect_write_pipe(lambda: write_proto, + slave_write_obj) + write_transport, p = self.loop.run_until_complete(write_connect) + self.assertIs(p, write_proto) + self.assertIs(write_transport, write_proto.transport) + self.assertEqual('CONNECTED', write_proto.state) + + data = bytearray() + def reader(data): + chunk = os.read(master, 1024) + data += chunk + return len(data) + + write_transport.write(b'1') + test_utils.run_until(self.loop, lambda: reader(data) >= 1, timeout=10) + self.assertEqual(b'1', data) + self.assertEqual(['INITIAL', 'CONNECTED'], read_proto.state) + self.assertEqual('CONNECTED', write_proto.state) + + os.write(master, b'a') + test_utils.run_until(self.loop, lambda: read_proto.nbytes >= 1, + timeout=10) + self.assertEqual(['INITIAL', 'CONNECTED'], read_proto.state) + self.assertEqual(1, read_proto.nbytes) + self.assertEqual('CONNECTED', write_proto.state) + + write_transport.write(b'2345') + test_utils.run_until(self.loop, lambda: reader(data) >= 5, timeout=10) + self.assertEqual(b'12345', data) + self.assertEqual(['INITIAL', 'CONNECTED'], read_proto.state) + self.assertEqual('CONNECTED', write_proto.state) + + os.write(master, b'bcde') + test_utils.run_until(self.loop, lambda: read_proto.nbytes >= 5, + timeout=10) + self.assertEqual(['INITIAL', 'CONNECTED'], read_proto.state) + self.assertEqual(5, read_proto.nbytes) + self.assertEqual('CONNECTED', write_proto.state) + + os.close(master) + + read_transport.close() + self.loop.run_until_complete(read_proto.done) + self.assertEqual( + ['INITIAL', 'CONNECTED', 'EOF', 'CLOSED'], read_proto.state) + + write_transport.close() + self.loop.run_until_complete(write_proto.done) + self.assertEqual('CLOSED', write_proto.state) + def test_prompt_cancellation(self): r, w = test_utils.socketpair() r.setblocking(False) @@ -2070,13 +2231,14 @@ else: return asyncio.SelectorEventLoop(selectors.SelectSelector()) -def noop(*args): +def noop(*args, **kwargs): pass class HandleTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = mock.Mock() self.loop.get_debug.return_value = True @@ -2093,13 +2255,6 @@ class HandleTests(test_utils.TestCase): h.cancel() self.assertTrue(h._cancelled) - def test_handle_from_handle(self): - def callback(*args): - return args - h1 = asyncio.Handle(callback, (), loop=self.loop) - self.assertRaises( - AssertionError, asyncio.Handle, h1, (), self.loop) - def test_callback_with_exception(self): def callback(): raise ValueError() @@ -2151,6 +2306,13 @@ class HandleTests(test_utils.TestCase): % (re.escape(filename), lineno)) self.assertRegex(repr(h), regex) + # partial function with keyword args + cb = functools.partial(noop, x=1) + h = asyncio.Handle(cb, (2, 3), self.loop) + regex = (r'^$' + % (re.escape(filename), lineno)) + self.assertRegex(repr(h), regex) + # partial method if sys.version_info >= (3, 4): method = HandleTests.test_handle_repr @@ -2219,10 +2381,47 @@ class HandleTests(test_utils.TestCase): h = loop.call_later(0, noop) check_source_traceback(h) + @unittest.skipUnless(hasattr(collections.abc, 'Coroutine'), + 'No collections.abc.Coroutine') + def test_coroutine_like_object_debug_formatting(self): + # Test that asyncio can format coroutines that are instances of + # collections.abc.Coroutine, but lack cr_core or gi_code attributes + # (such as ones compiled with Cython). + + class Coro: + def send(self, v): + pass + + def throw(self, *exc): + pass + + def close(self): + pass + + def __await__(self): + pass + + coro = Coro() + coro.__name__ = 'AAA' + self.assertTrue(asyncio.iscoroutine(coro)) + self.assertEqual(coroutines._format_coroutine(coro), 'AAA()') + + coro.__qualname__ = 'BBB' + self.assertEqual(coroutines._format_coroutine(coro), 'BBB()') + + coro.cr_running = True + self.assertEqual(coroutines._format_coroutine(coro), 'BBB() running') + + coro = Coro() + # Some coroutines might not have '__name__', such as + # built-in async_gen.asend(). + self.assertEqual(coroutines._format_coroutine(coro), 'Coro()') + class TimerTests(unittest.TestCase): def setUp(self): + super().setUp() self.loop = mock.Mock() def test_hash(self): @@ -2531,6 +2730,31 @@ class PolicyTests(unittest.TestCase): self.assertIs(policy, asyncio.get_event_loop_policy()) self.assertIsNot(policy, old_policy) + def test_get_event_loop_returns_running_loop(self): + class Policy(asyncio.DefaultEventLoopPolicy): + def get_event_loop(self): + raise NotImplementedError + + loop = None + + old_policy = asyncio.get_event_loop_policy() + try: + asyncio.set_event_loop_policy(Policy()) + loop = asyncio.new_event_loop() + self.assertIs(asyncio._get_running_loop(), None) + + async def func(): + self.assertIs(asyncio.get_event_loop(), loop) + self.assertIs(asyncio._get_running_loop(), loop) + + loop.run_until_complete(func()) + finally: + asyncio.set_event_loop_policy(old_policy) + if loop is not None: + loop.close() + + self.assertIs(asyncio._get_running_loop(), None) + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_asyncio/test_futures.py b/Lib/test/test_asyncio/test_futures.py index c38c1f2..c306b77 100644 --- a/Lib/test/test_asyncio/test_futures.py +++ b/Lib/test/test_asyncio/test_futures.py @@ -25,12 +25,105 @@ def last_cb(): pass +class DuckFuture: + # Class that does not inherit from Future but aims to be duck-type + # compatible with it. + + _asyncio_future_blocking = False + __cancelled = False + __result = None + __exception = None + + def cancel(self): + if self.done(): + return False + self.__cancelled = True + return True + + def cancelled(self): + return self.__cancelled + + def done(self): + return (self.__cancelled + or self.__result is not None + or self.__exception is not None) + + def result(self): + assert not self.cancelled() + if self.__exception is not None: + raise self.__exception + return self.__result + + def exception(self): + assert not self.cancelled() + return self.__exception + + def set_result(self, result): + assert not self.done() + assert result is not None + self.__result = result + + def set_exception(self, exception): + assert not self.done() + assert exception is not None + self.__exception = exception + + def __iter__(self): + if not self.done(): + self._asyncio_future_blocking = True + yield self + assert self.done() + return self.result() + + +class DuckTests(test_utils.TestCase): + + def setUp(self): + super().setUp() + self.loop = self.new_test_loop() + self.addCleanup(self.loop.close) + + def test_wrap_future(self): + f = DuckFuture() + g = asyncio.wrap_future(f) + assert g is f + + def test_ensure_future(self): + f = DuckFuture() + g = asyncio.ensure_future(f) + assert g is f + + class FutureTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() self.addCleanup(self.loop.close) + def test_isfuture(self): + class MyFuture: + _asyncio_future_blocking = None + + def __init__(self): + self._asyncio_future_blocking = False + + self.assertFalse(asyncio.isfuture(MyFuture)) + self.assertTrue(asyncio.isfuture(MyFuture())) + + self.assertFalse(asyncio.isfuture(1)) + self.assertFalse(asyncio.isfuture(asyncio.Future)) + + # As `isinstance(Mock(), Future)` returns `False` + self.assertFalse(asyncio.isfuture(mock.Mock())) + + # As `isinstance(Mock(Future), Future)` returns `True` + self.assertTrue(asyncio.isfuture(mock.Mock(asyncio.Future))) + + f = asyncio.Future(loop=self.loop) + self.assertTrue(asyncio.isfuture(f)) + f.cancel() + def test_initial_state(self): f = asyncio.Future(loop=self.loop) self.assertFalse(f.cancelled()) @@ -400,6 +493,7 @@ class FutureTests(test_utils.TestCase): class FutureDoneCallbackTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() def run_briefly(self): diff --git a/Lib/test/test_asyncio/test_locks.py b/Lib/test/test_asyncio/test_locks.py index d3bdc51..152948c 100644 --- a/Lib/test/test_asyncio/test_locks.py +++ b/Lib/test/test_asyncio/test_locks.py @@ -19,6 +19,7 @@ RGX_REPR = re.compile(STR_RGX_REPR) class LockTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() def test_ctor_loop(self): @@ -130,8 +131,8 @@ class LockTests(test_utils.TestCase): def test_cancel_race(self): # Several tasks: # - A acquires the lock - # - B is blocked in aqcuire() - # - C is blocked in aqcuire() + # - B is blocked in acquire() + # - C is blocked in acquire() # # Now, concurrently: # - B is cancelled @@ -235,6 +236,7 @@ class LockTests(test_utils.TestCase): class EventTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() def test_ctor_loop(self): @@ -364,6 +366,7 @@ class EventTests(test_utils.TestCase): class ConditionTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() def test_ctor_loop(self): @@ -699,6 +702,7 @@ class ConditionTests(test_utils.TestCase): class SemaphoreTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() def test_ctor_loop(self): diff --git a/Lib/test/test_asyncio/test_pep492.py b/Lib/test/test_asyncio/test_pep492.py index 29aba81..d5b8522 100644 --- a/Lib/test/test_asyncio/test_pep492.py +++ b/Lib/test/test_asyncio/test_pep492.py @@ -17,6 +17,7 @@ from asyncio import test_utils class BaseTest(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = asyncio.BaseEventLoop() self.loop._process_events = mock.Mock() self.loop._selector = mock.Mock() diff --git a/Lib/test/test_asyncio/test_proactor_events.py b/Lib/test/test_asyncio/test_proactor_events.py index 5a92b1e..4dfc612 100644 --- a/Lib/test/test_asyncio/test_proactor_events.py +++ b/Lib/test/test_asyncio/test_proactor_events.py @@ -24,6 +24,7 @@ def close_transport(transport): class ProactorSocketTransportTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() self.addCleanup(self.loop.close) self.proactor = mock.Mock() @@ -436,6 +437,8 @@ class ProactorSocketTransportTests(test_utils.TestCase): class BaseProactorEventLoopTests(test_utils.TestCase): def setUp(self): + super().setUp() + self.sock = test_utils.mock_nonblocking_socket() self.proactor = mock.Mock() diff --git a/Lib/test/test_asyncio/test_queues.py b/Lib/test/test_asyncio/test_queues.py index 591a9bb..fe5a6db 100644 --- a/Lib/test/test_asyncio/test_queues.py +++ b/Lib/test/test_asyncio/test_queues.py @@ -10,6 +10,7 @@ from asyncio import test_utils class _QueueTestBase(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() diff --git a/Lib/test/test_asyncio/test_selector_events.py b/Lib/test/test_asyncio/test_selector_events.py index 5dc6ff8..6bf7862 100644 --- a/Lib/test/test_asyncio/test_selector_events.py +++ b/Lib/test/test_asyncio/test_selector_events.py @@ -51,6 +51,7 @@ def close_transport(transport): class BaseSelectorEventLoopTests(test_utils.TestCase): def setUp(self): + super().setUp() self.selector = mock.Mock() self.selector.select.return_value = [] self.loop = TestBaseSelectorEventLoop(self.selector) @@ -72,11 +73,11 @@ class BaseSelectorEventLoopTests(test_utils.TestCase): @unittest.skipIf(ssl is None, 'No ssl module') def test_make_ssl_transport(self): m = mock.Mock() - self.loop.add_reader = mock.Mock() - self.loop.add_reader._is_coroutine = False - self.loop.add_writer = mock.Mock() - self.loop.remove_reader = mock.Mock() - self.loop.remove_writer = mock.Mock() + self.loop._add_reader = mock.Mock() + self.loop._add_reader._is_coroutine = False + self.loop._add_writer = mock.Mock() + self.loop._remove_reader = mock.Mock() + self.loop._remove_writer = mock.Mock() waiter = asyncio.Future(loop=self.loop) with test_utils.disable_logger(): transport = self.loop._make_ssl_transport( @@ -119,7 +120,7 @@ class BaseSelectorEventLoopTests(test_utils.TestCase): ssock.fileno.return_value = 7 csock = self.loop._csock csock.fileno.return_value = 1 - remove_reader = self.loop.remove_reader = mock.Mock() + remove_reader = self.loop._remove_reader = mock.Mock() self.loop._selector.close() self.loop._selector = selector = mock.Mock() @@ -337,18 +338,6 @@ class BaseSelectorEventLoopTests(test_utils.TestCase): (10, self.loop._sock_sendall, f, True, sock, b'data'), self.loop.add_writer.call_args[0]) - def test_sock_connect(self): - sock = test_utils.mock_nonblocking_socket() - self.loop._sock_connect = mock.Mock() - - f = self.loop.sock_connect(sock, ('127.0.0.1', 8080)) - self.assertIsInstance(f, asyncio.Future) - self.loop._run_once() - future_in, sock_in, address_in = self.loop._sock_connect.call_args[0] - self.assertEqual(future_in, f) - self.assertEqual(sock_in, sock) - self.assertEqual(address_in, ('127.0.0.1', 8080)) - def test_sock_connect_timeout(self): # asyncio issue #205: sock_connect() must unregister the socket on # timeout error @@ -360,19 +349,35 @@ class BaseSelectorEventLoopTests(test_utils.TestCase): sock.connect.side_effect = BlockingIOError # first call to sock_connect() registers the socket - fut = self.loop.sock_connect(sock, ('127.0.0.1', 80)) + fut = self.loop.create_task( + self.loop.sock_connect(sock, ('127.0.0.1', 80))) self.loop._run_once() self.assertTrue(sock.connect.called) self.assertTrue(self.loop.add_writer.called) - self.assertEqual(len(fut._callbacks), 1) # on timeout, the socket must be unregistered sock.connect.reset_mock() - fut.set_exception(asyncio.TimeoutError) - with self.assertRaises(asyncio.TimeoutError): + fut.cancel() + with self.assertRaises(asyncio.CancelledError): self.loop.run_until_complete(fut) self.assertTrue(self.loop.remove_writer.called) + @mock.patch('socket.getaddrinfo') + def test_sock_connect_resolve_using_socket_params(self, m_gai): + addr = ('need-resolution.com', 8080) + sock = test_utils.mock_nonblocking_socket() + m_gai.side_effect = (None, None, None, None, ('127.0.0.1', 0)) + m_gai._is_coroutine = False + con = self.loop.create_task(self.loop.sock_connect(sock, addr)) + while not m_gai.called: + self.loop._run_once() + m_gai.assert_called_with( + addr[0], addr[1], sock.family, sock.type, sock.proto, 0) + + con.cancel() + with self.assertRaises(asyncio.CancelledError): + self.loop.run_until_complete(con) + def test__sock_connect(self): f = asyncio.Future(loop=self.loop) @@ -647,12 +652,12 @@ class BaseSelectorEventLoopTests(test_utils.TestCase): reader = mock.Mock() reader.cancelled = True - self.loop.remove_reader = mock.Mock() + self.loop._remove_reader = mock.Mock() self.loop._process_events( [(selectors.SelectorKey( 1, 1, selectors.EVENT_READ, (reader, None)), selectors.EVENT_READ)]) - self.loop.remove_reader.assert_called_with(1) + self.loop._remove_reader.assert_called_with(1) def test_process_events_write(self): writer = mock.Mock() @@ -668,18 +673,33 @@ class BaseSelectorEventLoopTests(test_utils.TestCase): def test_process_events_write_cancelled(self): writer = mock.Mock() writer.cancelled = True - self.loop.remove_writer = mock.Mock() + self.loop._remove_writer = mock.Mock() self.loop._process_events( [(selectors.SelectorKey(1, 1, selectors.EVENT_WRITE, (None, writer)), selectors.EVENT_WRITE)]) - self.loop.remove_writer.assert_called_with(1) + self.loop._remove_writer.assert_called_with(1) + + def test_accept_connection_multiple(self): + sock = mock.Mock() + sock.accept.return_value = (mock.Mock(), mock.Mock()) + backlog = 100 + # Mock the coroutine generation for a connection to prevent + # warnings related to un-awaited coroutines. + mock_obj = mock.patch.object + with mock_obj(self.loop, '_accept_connection2') as accept2_mock: + accept2_mock.return_value = None + with mock_obj(self.loop, 'create_task') as task_mock: + task_mock.return_value = None + self.loop._accept_connection(mock.Mock(), sock, backlog=backlog) + self.assertEqual(sock.accept.call_count, backlog) class SelectorTransportTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() self.protocol = test_utils.make_test_protocol(asyncio.Protocol) self.sock = mock.Mock(socket.socket) @@ -729,8 +749,8 @@ class SelectorTransportTests(test_utils.TestCase): def test_force_close(self): tr = self.create_transport() tr._buffer.extend(b'1') - self.loop.add_reader(7, mock.sentinel) - self.loop.add_writer(7, mock.sentinel) + self.loop._add_reader(7, mock.sentinel) + self.loop._add_writer(7, mock.sentinel) tr._force_close(None) self.assertTrue(tr.is_closing()) @@ -775,6 +795,7 @@ class SelectorTransportTests(test_utils.TestCase): class SelectorSocketTransportTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() self.protocol = test_utils.make_test_protocol(asyncio.Protocol) self.sock = mock.Mock(socket.socket) @@ -1019,7 +1040,7 @@ class SelectorSocketTransportTests(test_utils.TestCase): transport = self.socket_transport() transport._buffer.extend(data) - self.loop.add_writer(7, transport._write_ready) + self.loop._add_writer(7, transport._write_ready) transport._write_ready() self.assertTrue(self.sock.send.called) self.assertFalse(self.loop.writers) @@ -1031,7 +1052,7 @@ class SelectorSocketTransportTests(test_utils.TestCase): transport = self.socket_transport() transport._closing = True transport._buffer.extend(data) - self.loop.add_writer(7, transport._write_ready) + self.loop._add_writer(7, transport._write_ready) transport._write_ready() self.assertTrue(self.sock.send.called) self.assertFalse(self.loop.writers) @@ -1049,7 +1070,7 @@ class SelectorSocketTransportTests(test_utils.TestCase): transport = self.socket_transport() transport._buffer.extend(data) - self.loop.add_writer(7, transport._write_ready) + self.loop._add_writer(7, transport._write_ready) transport._write_ready() self.loop.assert_writer(7, transport._write_ready) self.assertEqual(list_to_buffer([b'ta']), transport._buffer) @@ -1060,7 +1081,7 @@ class SelectorSocketTransportTests(test_utils.TestCase): transport = self.socket_transport() transport._buffer.extend(data) - self.loop.add_writer(7, transport._write_ready) + self.loop._add_writer(7, transport._write_ready) transport._write_ready() self.loop.assert_writer(7, transport._write_ready) self.assertEqual(list_to_buffer([b'data']), transport._buffer) @@ -1070,7 +1091,7 @@ class SelectorSocketTransportTests(test_utils.TestCase): transport = self.socket_transport() transport._buffer = list_to_buffer([b'data1', b'data2']) - self.loop.add_writer(7, transport._write_ready) + self.loop._add_writer(7, transport._write_ready) transport._write_ready() self.loop.assert_writer(7, transport._write_ready) @@ -1112,7 +1133,7 @@ class SelectorSocketTransportTests(test_utils.TestCase): @mock.patch('asyncio.base_events.logger') def test_transport_close_remove_writer(self, m_log): - remove_writer = self.loop.remove_writer = mock.Mock() + remove_writer = self.loop._remove_writer = mock.Mock() transport = self.socket_transport() transport.close() @@ -1123,6 +1144,7 @@ class SelectorSocketTransportTests(test_utils.TestCase): class SelectorSslTransportTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() self.protocol = test_utils.make_test_protocol(asyncio.Protocol) self.sock = mock.Mock(socket.socket) @@ -1270,7 +1292,7 @@ class SelectorSslTransportTests(test_utils.TestCase): self.assertEqual((b'data',), self.protocol.data_received.call_args[0]) def test_read_ready_write_wants_read(self): - self.loop.add_writer = mock.Mock() + self.loop._add_writer = mock.Mock() self.sslsock.recv.side_effect = BlockingIOError transport = self._make_one() transport._write_wants_read = True @@ -1280,7 +1302,7 @@ class SelectorSslTransportTests(test_utils.TestCase): self.assertFalse(transport._write_wants_read) transport._write_ready.assert_called_with() - self.loop.add_writer.assert_called_with( + self.loop._add_writer.assert_called_with( transport._sock_fd, transport._write_ready) def test_read_ready_recv_eof(self): @@ -1315,16 +1337,16 @@ class SelectorSslTransportTests(test_utils.TestCase): self.assertFalse(self.protocol.data_received.called) def test_read_ready_recv_write(self): - self.loop.remove_reader = mock.Mock() - self.loop.add_writer = mock.Mock() + self.loop._remove_reader = mock.Mock() + self.loop._add_writer = mock.Mock() self.sslsock.recv.side_effect = ssl.SSLWantWriteError transport = self._make_one() transport._read_ready() self.assertFalse(self.protocol.data_received.called) self.assertTrue(transport._read_wants_write) - self.loop.remove_reader.assert_called_with(transport._sock_fd) - self.loop.add_writer.assert_called_with( + self.loop._remove_reader.assert_called_with(transport._sock_fd) + self.loop._add_writer.assert_called_with( transport._sock_fd, transport._write_ready) def test_read_ready_recv_exc(self): @@ -1401,12 +1423,12 @@ class SelectorSslTransportTests(test_utils.TestCase): transport = self._make_one() transport._buffer = list_to_buffer([b'data']) - self.loop.remove_writer = mock.Mock() + self.loop._remove_writer = mock.Mock() self.sslsock.send.side_effect = ssl.SSLWantReadError transport._write_ready() self.assertFalse(self.protocol.data_received.called) self.assertTrue(transport._write_wants_read) - self.loop.remove_writer.assert_called_with(transport._sock_fd) + self.loop._remove_writer.assert_called_with(transport._sock_fd) def test_write_ready_send_exc(self): err = self.sslsock.send.side_effect = OSError() @@ -1421,7 +1443,7 @@ class SelectorSslTransportTests(test_utils.TestCase): self.assertEqual(list_to_buffer(), transport._buffer) def test_write_ready_read_wants_write(self): - self.loop.add_reader = mock.Mock() + self.loop._add_reader = mock.Mock() self.sslsock.send.side_effect = BlockingIOError transport = self._make_one() transport._read_wants_write = True @@ -1430,7 +1452,7 @@ class SelectorSslTransportTests(test_utils.TestCase): self.assertFalse(transport._read_wants_write) transport._read_ready.assert_called_with() - self.loop.add_reader.assert_called_with( + self.loop._add_reader.assert_called_with( transport._sock_fd, transport._read_ready) def test_write_eof(self): @@ -1483,6 +1505,7 @@ class SelectorSslWithoutSslTransportTests(unittest.TestCase): class SelectorDatagramTransportTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() self.protocol = test_utils.make_test_protocol(asyncio.DatagramProtocol) self.sock = mock.Mock(spec_set=socket.socket) @@ -1681,7 +1704,7 @@ class SelectorDatagramTransportTests(test_utils.TestCase): transport = self.datagram_transport() transport._buffer.append((data, ('0.0.0.0', 12345))) - self.loop.add_writer(7, transport._sendto_ready) + self.loop._add_writer(7, transport._sendto_ready) transport._sendto_ready() self.assertTrue(self.sock.sendto.called) self.assertEqual( @@ -1695,7 +1718,7 @@ class SelectorDatagramTransportTests(test_utils.TestCase): transport = self.datagram_transport() transport._closing = True transport._buffer.append((data, ())) - self.loop.add_writer(7, transport._sendto_ready) + self.loop._add_writer(7, transport._sendto_ready) transport._sendto_ready() self.sock.sendto.assert_called_with(data, ()) self.assertFalse(self.loop.writers) @@ -1704,7 +1727,7 @@ class SelectorDatagramTransportTests(test_utils.TestCase): def test_sendto_ready_no_data(self): transport = self.datagram_transport() - self.loop.add_writer(7, transport._sendto_ready) + self.loop._add_writer(7, transport._sendto_ready) transport._sendto_ready() self.assertFalse(self.sock.sendto.called) self.assertFalse(self.loop.writers) @@ -1714,7 +1737,7 @@ class SelectorDatagramTransportTests(test_utils.TestCase): transport = self.datagram_transport() transport._buffer.extend([(b'data1', ()), (b'data2', ())]) - self.loop.add_writer(7, transport._sendto_ready) + self.loop._add_writer(7, transport._sendto_ready) transport._sendto_ready() self.loop.assert_writer(7, transport._sendto_ready) @@ -1766,6 +1789,5 @@ class SelectorDatagramTransportTests(test_utils.TestCase): 'Fatal error on transport\nprotocol:.*\ntransport:.*'), exc_info=(ConnectionRefusedError, MOCK_ANY, MOCK_ANY)) - if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py index e4121a0..59ff0f6 100644 --- a/Lib/test/test_asyncio/test_sslproto.py +++ b/Lib/test/test_asyncio/test_sslproto.py @@ -1,5 +1,6 @@ """Tests for asyncio/sslproto.py.""" +import logging import unittest from unittest import mock try: @@ -8,6 +9,7 @@ except ImportError: ssl = None import asyncio +from asyncio import log from asyncio import sslproto from asyncio import test_utils @@ -16,6 +18,7 @@ from asyncio import test_utils class SslProtoHandshakeTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = asyncio.new_event_loop() self.set_event_loop(self.loop) @@ -23,6 +26,7 @@ class SslProtoHandshakeTests(test_utils.TestCase): sslcontext = test_utils.dummy_ssl_context() app_proto = asyncio.Protocol() proto = sslproto.SSLProtocol(self.loop, app_proto, sslcontext, waiter) + self.assertIs(proto._app_transport.get_protocol(), app_proto) self.addCleanup(proto._app_transport.close) return proto @@ -66,6 +70,30 @@ class SslProtoHandshakeTests(test_utils.TestCase): test_utils.run_briefly(self.loop) self.assertIsInstance(waiter.exception(), ConnectionResetError) + def test_fatal_error_no_name_error(self): + # From issue #363. + # _fatal_error() generates a NameError if sslproto.py + # does not import base_events. + waiter = asyncio.Future(loop=self.loop) + ssl_proto = self.ssl_protocol(waiter) + # Temporarily turn off error logging so as not to spoil test output. + log_level = log.logger.getEffectiveLevel() + log.logger.setLevel(logging.FATAL) + try: + ssl_proto._fatal_error(None) + finally: + # Restore error logging. + log.logger.setLevel(log_level) + + def test_connection_lost(self): + # From issue #472. + # yield from waiter hang if lost_connection was called. + waiter = asyncio.Future(loop=self.loop) + ssl_proto = self.ssl_protocol(waiter) + self.connection_made(ssl_proto) + ssl_proto.connection_lost(ConnectionAbortedError) + test_utils.run_briefly(self.loop) + self.assertIsInstance(waiter.exception(), ConnectionAbortedError) if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_asyncio/test_streams.py b/Lib/test/test_asyncio/test_streams.py index 1783d5f..b47433a 100644 --- a/Lib/test/test_asyncio/test_streams.py +++ b/Lib/test/test_asyncio/test_streams.py @@ -22,6 +22,7 @@ class StreamReaderTests(test_utils.TestCase): DATA = b'line1\nline2\nline3\n' def setUp(self): + super().setUp() self.loop = asyncio.new_event_loop() self.set_event_loop(self.loop) @@ -831,7 +832,7 @@ os.close(fd) stream._waiter = asyncio.Future(loop=self.loop) self.assertRegex( repr(stream), - ">") + r">") stream._waiter.set_result(None) self.loop.run_until_complete(stream._waiter) stream._waiter = None diff --git a/Lib/test/test_asyncio/test_subprocess.py b/Lib/test/test_asyncio/test_subprocess.py index 58f7253..bba688b 100644 --- a/Lib/test/test_asyncio/test_subprocess.py +++ b/Lib/test/test_asyncio/test_subprocess.py @@ -35,6 +35,7 @@ class TestSubprocessTransport(base_subprocess.BaseSubprocessTransport): class SubprocessTransportTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() self.set_event_loop(self.loop) @@ -433,6 +434,13 @@ class SubprocessMixin: # the transport was not notified yet self.assertFalse(killed) + # Unlike SafeChildWatcher, FastChildWatcher does not pop the + # callbacks if waitpid() is called elsewhere. Let's clear them + # manually to avoid a warning when the watcher is detached. + if sys.platform != 'win32' and \ + isinstance(self, SubprocessFastWatcherTests): + asyncio.get_child_watcher()._callbacks.clear() + def test_popen_error(self): # Issue #24763: check that the subprocess transport is closed # when BaseSubprocessTransport fails @@ -459,6 +467,7 @@ if sys.platform != 'win32': Watcher = None def setUp(self): + super().setUp() policy = asyncio.get_event_loop_policy() self.loop = policy.new_event_loop() self.set_event_loop(self.loop) @@ -483,6 +492,7 @@ else: class SubprocessProactorTests(SubprocessMixin, test_utils.TestCase): def setUp(self): + super().setUp() self.loop = asyncio.ProactorEventLoop() self.set_event_loop(self.loop) diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py index e7fb774..9872926 100644 --- a/Lib/test/test_asyncio/test_tasks.py +++ b/Lib/test/test_asyncio/test_tasks.py @@ -75,6 +75,7 @@ class Dummy: class TaskTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() def test_other_loop_future(self): @@ -92,6 +93,17 @@ class TaskTests(test_utils.TestCase): finally: other_loop.close() + def test_task_awaits_on_itself(self): + @asyncio.coroutine + def test(): + yield from task + + task = asyncio.ensure_future(test(), loop=self.loop) + + with self.assertRaisesRegex(RuntimeError, + 'Task cannot await on itself'): + self.loop.run_until_complete(task) + def test_task_class(self): @asyncio.coroutine def notmuch(): @@ -1364,6 +1376,8 @@ class TaskTests(test_utils.TestCase): yield self.assertTrue(asyncio.iscoroutinefunction(fn2)) + self.assertFalse(asyncio.iscoroutinefunction(mock.Mock())) + def test_yield_vs_yield_from(self): fut = asyncio.Future(loop=self.loop) @@ -1723,6 +1737,37 @@ class TaskTests(test_utils.TestCase): wd['cw'] = cw # Would fail without __weakref__ slot. cw.gen = None # Suppress warning from __del__. + def test_corowrapper_throw(self): + # Issue 429: CoroWrapper.throw must be compatible with gen.throw + def foo(): + value = None + while True: + try: + value = yield value + except Exception as e: + value = e + + exception = Exception("foo") + cw = asyncio.coroutines.CoroWrapper(foo()) + cw.send(None) + self.assertIs(exception, cw.throw(exception)) + + cw = asyncio.coroutines.CoroWrapper(foo()) + cw.send(None) + self.assertIs(exception, cw.throw(Exception, exception)) + + cw = asyncio.coroutines.CoroWrapper(foo()) + cw.send(None) + exception = cw.throw(Exception, "foo") + self.assertIsInstance(exception, Exception) + self.assertEqual(exception.args, ("foo", )) + + cw = asyncio.coroutines.CoroWrapper(foo()) + cw.send(None) + exception = cw.throw(Exception, "foo", None) + self.assertIsInstance(exception, Exception) + self.assertEqual(exception.args, ("foo", )) + @unittest.skipUnless(PY34, 'need python 3.4 or later') def test_log_destroyed_pending_task(self): @@ -1857,10 +1902,41 @@ class TaskTests(test_utils.TestCase): def test_cancel_wait_for(self): self._test_cancel_wait_for(60.0) + def test_cancel_gather(self): + """Ensure that a gathering future refuses to be cancelled once all + children are done""" + loop = asyncio.new_event_loop() + self.addCleanup(loop.close) + + fut = asyncio.Future(loop=loop) + # The indirection fut->child_coro is needed since otherwise the + # gathering task is done at the same time as the child future + def child_coro(): + return (yield from fut) + gather_future = asyncio.gather(child_coro(), loop=loop) + gather_task = asyncio.ensure_future(gather_future, loop=loop) + + cancel_result = None + def cancelling_callback(_): + nonlocal cancel_result + cancel_result = gather_task.cancel() + fut.add_done_callback(cancelling_callback) + + fut.set_result(42) # calls the cancelling_callback after fut is done() + + # At this point the task should complete. + loop.run_until_complete(gather_task) + + # Python issue #26923: asyncio.gather drops cancellation + self.assertEqual(cancel_result, False) + self.assertFalse(gather_task.cancelled()) + self.assertEqual(gather_task.result(), [42]) + class GatherTestsBase: def setUp(self): + super().setUp() self.one_loop = self.new_test_loop() self.other_loop = self.new_test_loop() self.set_event_loop(self.one_loop, cleanup=False) @@ -2144,6 +2220,7 @@ class RunCoroutineThreadsafeTests(test_utils.TestCase): """Test case for asyncio.run_coroutine_threadsafe.""" def setUp(self): + super().setUp() self.loop = asyncio.new_event_loop() self.set_event_loop(self.loop) # Will cleanup properly @@ -2234,12 +2311,14 @@ class RunCoroutineThreadsafeTests(test_utils.TestCase): class SleepTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = asyncio.new_event_loop() asyncio.set_event_loop(None) def tearDown(self): self.loop.close() self.loop = None + super().tearDown() def test_sleep_zero(self): result = 0 diff --git a/Lib/test/test_asyncio/test_unix_events.py b/Lib/test/test_asyncio/test_unix_events.py index 22dc688..5a49984 100644 --- a/Lib/test/test_asyncio/test_unix_events.py +++ b/Lib/test/test_asyncio/test_unix_events.py @@ -4,6 +4,7 @@ import collections import errno import io import os +import pathlib import signal import socket import stat @@ -11,6 +12,7 @@ import sys import tempfile import threading import unittest +import warnings from unittest import mock if sys.platform == 'win32': @@ -39,6 +41,7 @@ def close_pipe_transport(transport): class SelectorEventLoopSignalTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = asyncio.SelectorEventLoop() self.set_event_loop(self.loop) @@ -233,6 +236,7 @@ class SelectorEventLoopSignalTests(test_utils.TestCase): class SelectorEventLoopUnixSocketTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = asyncio.SelectorEventLoop() self.set_event_loop(self.loop) @@ -240,11 +244,22 @@ class SelectorEventLoopUnixSocketTests(test_utils.TestCase): with test_utils.unix_socket_path() as path: sock = socket.socket(socket.AF_UNIX) sock.bind(path) - with sock: - coro = self.loop.create_unix_server(lambda: None, path) - with self.assertRaisesRegex(OSError, - 'Address.*is already in use'): - self.loop.run_until_complete(coro) + sock.listen(1) + sock.close() + + coro = self.loop.create_unix_server(lambda: None, path) + srv = self.loop.run_until_complete(coro) + srv.close() + self.loop.run_until_complete(srv.wait_closed()) + + @unittest.skipUnless(hasattr(os, 'fspath'), 'no os.fspath') + def test_create_unix_server_pathlib(self): + with test_utils.unix_socket_path() as path: + path = pathlib.Path(path) + srv_coro = self.loop.create_unix_server(lambda: None, path) + srv = self.loop.run_until_complete(srv_coro) + srv.close() + self.loop.run_until_complete(srv.wait_closed()) def test_create_unix_server_existing_path_nonsock(self): with tempfile.NamedTemporaryFile() as file: @@ -272,7 +287,43 @@ class SelectorEventLoopUnixSocketTests(test_utils.TestCase): coro = self.loop.create_unix_server(lambda: None, path=None, sock=sock) with self.assertRaisesRegex(ValueError, - 'A UNIX Domain Socket was expected'): + 'A UNIX Domain Stream.*was expected'): + self.loop.run_until_complete(coro) + + def test_create_unix_server_path_dgram(self): + sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) + with sock: + coro = self.loop.create_unix_server(lambda: None, path=None, + sock=sock) + with self.assertRaisesRegex(ValueError, + 'A UNIX Domain Stream.*was expected'): + self.loop.run_until_complete(coro) + + @unittest.skipUnless(hasattr(socket, 'SOCK_NONBLOCK'), + 'no socket.SOCK_NONBLOCK (linux only)') + def test_create_unix_server_path_stream_bittype(self): + sock = socket.socket( + socket.AF_UNIX, socket.SOCK_STREAM | socket.SOCK_NONBLOCK) + with tempfile.NamedTemporaryFile() as file: + fn = file.name + try: + with sock: + sock.bind(fn) + coro = self.loop.create_unix_server(lambda: None, path=None, + sock=sock) + srv = self.loop.run_until_complete(coro) + srv.close() + self.loop.run_until_complete(srv.wait_closed()) + finally: + os.unlink(fn) + + def test_create_unix_connection_path_inetsock(self): + sock = socket.socket() + with sock: + coro = self.loop.create_unix_connection(lambda: None, path=None, + sock=sock) + with self.assertRaisesRegex(ValueError, + 'A UNIX Domain Stream.*was expected'): self.loop.run_until_complete(coro) @mock.patch('asyncio.unix_events.socket') @@ -326,6 +377,7 @@ class SelectorEventLoopUnixSocketTests(test_utils.TestCase): class UnixReadPipeTransportTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() self.protocol = test_utils.make_test_protocol(asyncio.Protocol) self.pipe = mock.Mock(spec_set=io.RawIOBase) @@ -475,6 +527,7 @@ class UnixReadPipeTransportTests(test_utils.TestCase): class UnixWritePipeTransportTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = self.new_test_loop() self.protocol = test_utils.make_test_protocol(asyncio.BaseProtocol) self.pipe = mock.Mock(spec_set=io.RawIOBase) @@ -518,7 +571,7 @@ class UnixWritePipeTransportTests(test_utils.TestCase): tr.write(b'data') m_write.assert_called_with(5, b'data') self.assertFalse(self.loop.writers) - self.assertEqual([], tr._buffer) + self.assertEqual(bytearray(), tr._buffer) @mock.patch('os.write') def test_write_no_data(self, m_write): @@ -526,35 +579,34 @@ class UnixWritePipeTransportTests(test_utils.TestCase): tr.write(b'') self.assertFalse(m_write.called) self.assertFalse(self.loop.writers) - self.assertEqual([], tr._buffer) + self.assertEqual(bytearray(b''), tr._buffer) @mock.patch('os.write') def test_write_partial(self, m_write): tr = self.write_pipe_transport() m_write.return_value = 2 tr.write(b'data') - m_write.assert_called_with(5, b'data') self.loop.assert_writer(5, tr._write_ready) - self.assertEqual([b'ta'], tr._buffer) + self.assertEqual(bytearray(b'ta'), tr._buffer) @mock.patch('os.write') def test_write_buffer(self, m_write): tr = self.write_pipe_transport() self.loop.add_writer(5, tr._write_ready) - tr._buffer = [b'previous'] + tr._buffer = bytearray(b'previous') tr.write(b'data') self.assertFalse(m_write.called) self.loop.assert_writer(5, tr._write_ready) - self.assertEqual([b'previous', b'data'], tr._buffer) + self.assertEqual(bytearray(b'previousdata'), tr._buffer) @mock.patch('os.write') def test_write_again(self, m_write): tr = self.write_pipe_transport() m_write.side_effect = BlockingIOError() tr.write(b'data') - m_write.assert_called_with(5, b'data') + m_write.assert_called_with(5, bytearray(b'data')) self.loop.assert_writer(5, tr._write_ready) - self.assertEqual([b'data'], tr._buffer) + self.assertEqual(bytearray(b'data'), tr._buffer) @mock.patch('asyncio.unix_events.logger') @mock.patch('os.write') @@ -566,7 +618,7 @@ class UnixWritePipeTransportTests(test_utils.TestCase): tr.write(b'data') m_write.assert_called_with(5, b'data') self.assertFalse(self.loop.writers) - self.assertEqual([], tr._buffer) + self.assertEqual(bytearray(), tr._buffer) tr._fatal_error.assert_called_with( err, 'Fatal write error on pipe transport') @@ -606,58 +658,55 @@ class UnixWritePipeTransportTests(test_utils.TestCase): def test__write_ready(self, m_write): tr = self.write_pipe_transport() self.loop.add_writer(5, tr._write_ready) - tr._buffer = [b'da', b'ta'] + tr._buffer = bytearray(b'data') m_write.return_value = 4 tr._write_ready() - m_write.assert_called_with(5, b'data') self.assertFalse(self.loop.writers) - self.assertEqual([], tr._buffer) + self.assertEqual(bytearray(), tr._buffer) @mock.patch('os.write') def test__write_ready_partial(self, m_write): tr = self.write_pipe_transport() self.loop.add_writer(5, tr._write_ready) - tr._buffer = [b'da', b'ta'] + tr._buffer = bytearray(b'data') m_write.return_value = 3 tr._write_ready() - m_write.assert_called_with(5, b'data') self.loop.assert_writer(5, tr._write_ready) - self.assertEqual([b'a'], tr._buffer) + self.assertEqual(bytearray(b'a'), tr._buffer) @mock.patch('os.write') def test__write_ready_again(self, m_write): tr = self.write_pipe_transport() self.loop.add_writer(5, tr._write_ready) - tr._buffer = [b'da', b'ta'] + tr._buffer = bytearray(b'data') m_write.side_effect = BlockingIOError() tr._write_ready() - m_write.assert_called_with(5, b'data') + m_write.assert_called_with(5, bytearray(b'data')) self.loop.assert_writer(5, tr._write_ready) - self.assertEqual([b'data'], tr._buffer) + self.assertEqual(bytearray(b'data'), tr._buffer) @mock.patch('os.write') def test__write_ready_empty(self, m_write): tr = self.write_pipe_transport() self.loop.add_writer(5, tr._write_ready) - tr._buffer = [b'da', b'ta'] + tr._buffer = bytearray(b'data') m_write.return_value = 0 tr._write_ready() - m_write.assert_called_with(5, b'data') + m_write.assert_called_with(5, bytearray(b'data')) self.loop.assert_writer(5, tr._write_ready) - self.assertEqual([b'data'], tr._buffer) + self.assertEqual(bytearray(b'data'), tr._buffer) @mock.patch('asyncio.log.logger.error') @mock.patch('os.write') def test__write_ready_err(self, m_write, m_logexc): tr = self.write_pipe_transport() self.loop.add_writer(5, tr._write_ready) - tr._buffer = [b'da', b'ta'] + tr._buffer = bytearray(b'data') m_write.side_effect = err = OSError() tr._write_ready() - m_write.assert_called_with(5, b'data') self.assertFalse(self.loop.writers) self.assertFalse(self.loop.readers) - self.assertEqual([], tr._buffer) + self.assertEqual(bytearray(), tr._buffer) self.assertTrue(tr.is_closing()) m_logexc.assert_called_with( test_utils.MockPattern( @@ -673,13 +722,12 @@ class UnixWritePipeTransportTests(test_utils.TestCase): tr = self.write_pipe_transport() self.loop.add_writer(5, tr._write_ready) tr._closing = True - tr._buffer = [b'da', b'ta'] + tr._buffer = bytearray(b'data') m_write.return_value = 4 tr._write_ready() - m_write.assert_called_with(5, b'data') self.assertFalse(self.loop.writers) self.assertFalse(self.loop.readers) - self.assertEqual([], tr._buffer) + self.assertEqual(bytearray(), tr._buffer) self.protocol.connection_lost.assert_called_with(None) self.pipe.close.assert_called_with() @@ -798,6 +846,7 @@ class ChildWatcherTestsMixin: ignore_warnings = mock.patch.object(log.logger, "warning") def setUp(self): + super().setUp() self.loop = self.new_test_loop() self.running = False self.zombies = {} @@ -1396,7 +1445,9 @@ class ChildWatcherTestsMixin: with mock.patch.object( old_loop, "remove_signal_handler") as m_remove_signal_handler: - self.watcher.attach_loop(None) + with self.assertWarnsRegex( + RuntimeWarning, 'A loop is being detached'): + self.watcher.attach_loop(None) m_remove_signal_handler.assert_called_once_with( signal.SIGCHLD) @@ -1468,6 +1519,15 @@ class ChildWatcherTestsMixin: if isinstance(self.watcher, asyncio.FastChildWatcher): self.assertFalse(self.watcher._zombies) + @waitpid_mocks + def test_add_child_handler_with_no_loop_attached(self, m): + callback = mock.Mock() + with self.create_watcher() as watcher: + with self.assertRaisesRegex( + RuntimeError, + 'the child watcher does not have a loop attached'): + watcher.add_child_handler(100, callback) + class SafeChildWatcherTests (ChildWatcherTestsMixin, test_utils.TestCase): def create_watcher(self): diff --git a/Lib/test/test_asyncio/test_windows_events.py b/Lib/test/test_asyncio/test_windows_events.py index 7fcf402..1afcae1 100644 --- a/Lib/test/test_asyncio/test_windows_events.py +++ b/Lib/test/test_asyncio/test_windows_events.py @@ -31,6 +31,7 @@ class UpperProto(asyncio.Protocol): class ProactorTests(test_utils.TestCase): def setUp(self): + super().setUp() self.loop = asyncio.ProactorEventLoop() self.set_event_loop(self.loop) diff --git a/Lib/test/test_binascii.py b/Lib/test/test_binascii.py index 8367afe..034245d 100644 --- a/Lib/test/test_binascii.py +++ b/Lib/test/test_binascii.py @@ -178,37 +178,106 @@ class BinASCIITest(unittest.TestCase): self.assertEqual(binascii.unhexlify(self.type2test(t)), u) def test_qp(self): - binascii.a2b_qp(data=b"", header=False) # Keyword arguments allowed + type2test = self.type2test + a2b_qp = binascii.a2b_qp + b2a_qp = binascii.b2a_qp + + a2b_qp(data=b"", header=False) # Keyword arguments allowed # A test for SF bug 534347 (segfaults without the proper fix) try: - binascii.a2b_qp(b"", **{1:1}) + a2b_qp(b"", **{1:1}) except TypeError: pass else: self.fail("binascii.a2b_qp(**{1:1}) didn't raise TypeError") - self.assertEqual(binascii.a2b_qp(b"= "), b"= ") - self.assertEqual(binascii.a2b_qp(b"=="), b"=") - self.assertEqual(binascii.a2b_qp(b"=AX"), b"=AX") - self.assertRaises(TypeError, binascii.b2a_qp, foo="bar") - self.assertEqual(binascii.a2b_qp(b"=00\r\n=00"), b"\x00\r\n\x00") - self.assertEqual( - binascii.b2a_qp(b"\xff\r\n\xff\n\xff"), - b"=FF\r\n=FF\r\n=FF") - self.assertEqual( - binascii.b2a_qp(b"0"*75+b"\xff\r\n\xff\r\n\xff"), - b"0"*75+b"=\r\n=FF\r\n=FF\r\n=FF") - - self.assertEqual(binascii.b2a_qp(b'\0\n'), b'=00\n') - self.assertEqual(binascii.b2a_qp(b'\0\n', quotetabs=True), b'=00\n') - self.assertEqual(binascii.b2a_qp(b'foo\tbar\t\n'), b'foo\tbar=09\n') - self.assertEqual(binascii.b2a_qp(b'foo\tbar\t\n', quotetabs=True), - b'foo=09bar=09\n') - - self.assertEqual(binascii.b2a_qp(b'.'), b'=2E') - self.assertEqual(binascii.b2a_qp(b'.\n'), b'=2E\n') - self.assertEqual(binascii.b2a_qp(b'a.\n'), b'a.\n') + self.assertEqual(a2b_qp(type2test(b"=")), b"") + self.assertEqual(a2b_qp(type2test(b"= ")), b"= ") + self.assertEqual(a2b_qp(type2test(b"==")), b"=") + self.assertEqual(a2b_qp(type2test(b"=\nAB")), b"AB") + self.assertEqual(a2b_qp(type2test(b"=\r\nAB")), b"AB") + self.assertEqual(a2b_qp(type2test(b"=\rAB")), b"") # ? + self.assertEqual(a2b_qp(type2test(b"=\rAB\nCD")), b"CD") # ? + self.assertEqual(a2b_qp(type2test(b"=AB")), b"\xab") + self.assertEqual(a2b_qp(type2test(b"=ab")), b"\xab") + self.assertEqual(a2b_qp(type2test(b"=AX")), b"=AX") + self.assertEqual(a2b_qp(type2test(b"=XA")), b"=XA") + self.assertEqual(a2b_qp(type2test(b"=AB")[:-1]), b"=A") + + self.assertEqual(a2b_qp(type2test(b'_')), b'_') + self.assertEqual(a2b_qp(type2test(b'_'), header=True), b' ') + + self.assertRaises(TypeError, b2a_qp, foo="bar") + self.assertEqual(a2b_qp(type2test(b"=00\r\n=00")), b"\x00\r\n\x00") + self.assertEqual(b2a_qp(type2test(b"\xff\r\n\xff\n\xff")), + b"=FF\r\n=FF\r\n=FF") + self.assertEqual(b2a_qp(type2test(b"0"*75+b"\xff\r\n\xff\r\n\xff")), + b"0"*75+b"=\r\n=FF\r\n=FF\r\n=FF") + + self.assertEqual(b2a_qp(type2test(b'\x7f')), b'=7F') + self.assertEqual(b2a_qp(type2test(b'=')), b'=3D') + + self.assertEqual(b2a_qp(type2test(b'_')), b'_') + self.assertEqual(b2a_qp(type2test(b'_'), header=True), b'=5F') + self.assertEqual(b2a_qp(type2test(b'x y'), header=True), b'x_y') + self.assertEqual(b2a_qp(type2test(b'x '), header=True), b'x=20') + self.assertEqual(b2a_qp(type2test(b'x y'), header=True, quotetabs=True), + b'x=20y') + self.assertEqual(b2a_qp(type2test(b'x\ty'), header=True), b'x\ty') + + self.assertEqual(b2a_qp(type2test(b' ')), b'=20') + self.assertEqual(b2a_qp(type2test(b'\t')), b'=09') + self.assertEqual(b2a_qp(type2test(b' x')), b' x') + self.assertEqual(b2a_qp(type2test(b'\tx')), b'\tx') + self.assertEqual(b2a_qp(type2test(b' x')[:-1]), b'=20') + self.assertEqual(b2a_qp(type2test(b'\tx')[:-1]), b'=09') + self.assertEqual(b2a_qp(type2test(b'\0')), b'=00') + + self.assertEqual(b2a_qp(type2test(b'\0\n')), b'=00\n') + self.assertEqual(b2a_qp(type2test(b'\0\n'), quotetabs=True), b'=00\n') + + self.assertEqual(b2a_qp(type2test(b'x y\tz')), b'x y\tz') + self.assertEqual(b2a_qp(type2test(b'x y\tz'), quotetabs=True), + b'x=20y=09z') + self.assertEqual(b2a_qp(type2test(b'x y\tz'), istext=False), + b'x y\tz') + self.assertEqual(b2a_qp(type2test(b'x \ny\t\n')), + b'x=20\ny=09\n') + self.assertEqual(b2a_qp(type2test(b'x \ny\t\n'), quotetabs=True), + b'x=20\ny=09\n') + self.assertEqual(b2a_qp(type2test(b'x \ny\t\n'), istext=False), + b'x =0Ay\t=0A') + self.assertEqual(b2a_qp(type2test(b'x \ry\t\r')), + b'x \ry\t\r') + self.assertEqual(b2a_qp(type2test(b'x \ry\t\r'), quotetabs=True), + b'x=20\ry=09\r') + self.assertEqual(b2a_qp(type2test(b'x \ry\t\r'), istext=False), + b'x =0Dy\t=0D') + self.assertEqual(b2a_qp(type2test(b'x \r\ny\t\r\n')), + b'x=20\r\ny=09\r\n') + self.assertEqual(b2a_qp(type2test(b'x \r\ny\t\r\n'), quotetabs=True), + b'x=20\r\ny=09\r\n') + self.assertEqual(b2a_qp(type2test(b'x \r\ny\t\r\n'), istext=False), + b'x =0D=0Ay\t=0D=0A') + + self.assertEqual(b2a_qp(type2test(b'x \r\n')[:-1]), b'x \r') + self.assertEqual(b2a_qp(type2test(b'x\t\r\n')[:-1]), b'x\t\r') + self.assertEqual(b2a_qp(type2test(b'x \r\n')[:-1], quotetabs=True), + b'x=20\r') + self.assertEqual(b2a_qp(type2test(b'x\t\r\n')[:-1], quotetabs=True), + b'x=09\r') + self.assertEqual(b2a_qp(type2test(b'x \r\n')[:-1], istext=False), + b'x =0D') + self.assertEqual(b2a_qp(type2test(b'x\t\r\n')[:-1], istext=False), + b'x\t=0D') + + self.assertEqual(b2a_qp(type2test(b'.')), b'=2E') + self.assertEqual(b2a_qp(type2test(b'.\n')), b'=2E\n') + self.assertEqual(b2a_qp(type2test(b'.\r')), b'=2E\r') + self.assertEqual(b2a_qp(type2test(b'.\0')), b'=2E=00') + self.assertEqual(b2a_qp(type2test(b'a.\n')), b'a.\n') + self.assertEqual(b2a_qp(type2test(b'.a')[:-1]), b'=2E') def test_empty_string(self): # A test for SF bug #1022953. Make sure SystemError is not raised. diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 8cc1b00..0b03340 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -3,12 +3,15 @@ import ast import builtins import collections +import decimal +import fractions import io import locale import os import pickle import platform import random +import re import sys import traceback import types @@ -1244,6 +1247,15 @@ class BuiltinTest(unittest.TestCase): self.assertEqual(round(5e15+2), 5e15+2) self.assertEqual(round(5e15+3), 5e15+3) + def test_bug_27936(self): + # Verify that ndigits=None means the same as passing in no argument + for x in [1234, + 1234.56, + decimal.Decimal('1234.56'), + fractions.Fraction(123456, 100)]: + self.assertEqual(round(x, None), round(x)) + self.assertEqual(type(round(x, None)), type(round(x))) + def test_setattr(self): setattr(sys, 'spam', 1) self.assertEqual(sys.spam, 1) @@ -1436,21 +1448,14 @@ class BuiltinTest(unittest.TestCase): # -------------------------------------------------------------------- # Issue #7994: object.__format__ with a non-empty format string is - # deprecated - def test_deprecated_format_string(obj, fmt_str, should_raise): - if should_raise: - self.assertRaises(TypeError, format, obj, fmt_str) - else: - format(obj, fmt_str) - - fmt_strs = ['', 's'] - + # disallowed class A: def __format__(self, fmt_str): return format('', fmt_str) - for fmt_str in fmt_strs: - test_deprecated_format_string(A(), fmt_str, False) + self.assertEqual(format(A()), '') + self.assertEqual(format(A(), ''), '') + self.assertEqual(format(A(), 's'), '') class B: pass @@ -1459,8 +1464,12 @@ class BuiltinTest(unittest.TestCase): pass for cls in [object, B, C]: - for fmt_str in fmt_strs: - test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0) + obj = cls() + self.assertEqual(format(obj), str(obj)) + self.assertEqual(format(obj, ''), str(obj)) + with self.assertRaisesRegex(TypeError, + r'\b%s\b' % re.escape(cls.__name__)): + format(obj, 's') # -------------------------------------------------------------------- # make sure we can take a subclass of str as a format spec diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 65c00d7..3288a5b 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -1233,6 +1233,16 @@ class ByteArrayTest(BaseBytesTest, unittest.TestCase): test_exhausted_iterator = test.list_tests.CommonTest.test_exhausted_iterator + def test_iterator_length_hint(self): + # Issue 27443: __length_hint__ can return negative integer + ba = bytearray(b'ab') + it = iter(ba) + next(it) + ba.clear() + # Shouldn't raise an error + self.assertEqual(list(it), []) + + class AssortedBytesTest(unittest.TestCase): # # Test various combinations of bytes and bytearray @@ -1249,6 +1259,15 @@ class AssortedBytesTest(unittest.TestCase): self.assertEqual(f(b"'"), '''b"'"''') # ''' self.assertEqual(f(b"'\""), r"""b'\'"'""") # ' + @check_bytes_warnings + def test_format(self): + for b in b'abc', bytearray(b'abc'): + self.assertEqual(format(b), str(b)) + self.assertEqual(format(b, ''), str(b)) + with self.assertRaisesRegex(TypeError, + r'\b%s\b' % re.escape(type(b).__name__)): + format(b, 's') + def test_compare_bytes_to_bytearray(self): self.assertEqual(b"abc" == bytes(b"abc"), True) self.assertEqual(b"ab" != bytes(b"abc"), True) diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py index a1e4b8d..34f6478 100644 --- a/Lib/test/test_bz2.py +++ b/Lib/test/test_bz2.py @@ -7,6 +7,7 @@ import os import pickle import glob import random +import shutil import subprocess import sys from test.support import unlink @@ -21,6 +22,16 @@ except ImportError: bz2 = support.import_module('bz2') from bz2 import BZ2File, BZ2Compressor, BZ2Decompressor +has_cmdline_bunzip2 = None + +def ext_decompress(data): + global has_cmdline_bunzip2 + if has_cmdline_bunzip2 is None: + has_cmdline_bunzip2 = bool(shutil.which('bunzip2')) + if has_cmdline_bunzip2: + return subprocess.check_output(['bunzip2'], input=data) + else: + return bz2.decompress(data) class BaseTest(unittest.TestCase): "Base for other testcases." @@ -73,24 +84,6 @@ class BaseTest(unittest.TestCase): if os.path.isfile(self.filename): os.unlink(self.filename) - if sys.platform == "win32": - # bunzip2 isn't available to run on Windows. - def decompress(self, data): - return bz2.decompress(data) - else: - def decompress(self, data): - pop = subprocess.Popen("bunzip2", shell=True, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) - pop.stdin.write(data) - pop.stdin.close() - ret = pop.stdout.read() - pop.stdout.close() - if pop.wait() != 0: - ret = bz2.decompress(data) - return ret - class BZ2FileTest(BaseTest): "Test the BZ2File class." @@ -251,7 +244,7 @@ class BZ2FileTest(BaseTest): self.assertRaises(TypeError, bz2f.write) bz2f.write(self.TEXT) with open(self.filename, 'rb') as f: - self.assertEqual(self.decompress(f.read()), self.TEXT) + self.assertEqual(ext_decompress(f.read()), self.TEXT) def testWriteChunks10(self): with BZ2File(self.filename, "w") as bz2f: @@ -263,7 +256,7 @@ class BZ2FileTest(BaseTest): bz2f.write(str) n += 1 with open(self.filename, 'rb') as f: - self.assertEqual(self.decompress(f.read()), self.TEXT) + self.assertEqual(ext_decompress(f.read()), self.TEXT) def testWriteNonDefaultCompressLevel(self): expected = bz2.compress(self.TEXT, compresslevel=5) @@ -280,7 +273,7 @@ class BZ2FileTest(BaseTest): # should raise an exception. self.assertRaises(ValueError, bz2f.writelines, ["a"]) with open(self.filename, 'rb') as f: - self.assertEqual(self.decompress(f.read()), self.TEXT) + self.assertEqual(ext_decompress(f.read()), self.TEXT) def testWriteMethodsOnReadOnlyFile(self): with BZ2File(self.filename, "w") as bz2f: @@ -298,7 +291,7 @@ class BZ2FileTest(BaseTest): self.assertRaises(TypeError, bz2f.write) bz2f.write(self.TEXT) with open(self.filename, 'rb') as f: - self.assertEqual(self.decompress(f.read()), self.TEXT * 2) + self.assertEqual(ext_decompress(f.read()), self.TEXT * 2) def testSeekForward(self): self.createTempFile() @@ -594,7 +587,7 @@ class BZ2FileTest(BaseTest): with BZ2File(bio, "w") as bz2f: self.assertRaises(TypeError, bz2f.write) bz2f.write(self.TEXT) - self.assertEqual(self.decompress(bio.getvalue()), self.TEXT) + self.assertEqual(ext_decompress(bio.getvalue()), self.TEXT) self.assertFalse(bio.closed) def testSeekForwardBytesIO(self): @@ -631,7 +624,7 @@ class BZ2CompressorTest(BaseTest): self.assertRaises(TypeError, bz2c.compress) data = bz2c.compress(self.TEXT) data += bz2c.flush() - self.assertEqual(self.decompress(data), self.TEXT) + self.assertEqual(ext_decompress(data), self.TEXT) def testCompressEmptyString(self): bz2c = BZ2Compressor() @@ -650,7 +643,7 @@ class BZ2CompressorTest(BaseTest): data += bz2c.compress(str) n += 1 data += bz2c.flush() - self.assertEqual(self.decompress(data), self.TEXT) + self.assertEqual(ext_decompress(data), self.TEXT) @bigmemtest(size=_4G + 100, memuse=2) def testCompress4G(self, size): @@ -821,10 +814,16 @@ class BZ2DecompressorTest(BaseTest): out.append(bzd.decompress(self.DATA[300:])) self.assertEqual(b''.join(out), self.TEXT) + def test_failure(self): + bzd = BZ2Decompressor() + self.assertRaises(Exception, bzd.decompress, self.BAD_DATA * 30) + # Previously, a second call could crash due to internal inconsistency + self.assertRaises(Exception, bzd.decompress, self.BAD_DATA * 30) + class CompressDecompressTest(BaseTest): def testCompress(self): data = bz2.compress(self.TEXT) - self.assertEqual(self.decompress(data), self.TEXT) + self.assertEqual(ext_decompress(data), self.TEXT) def testCompressEmptyString(self): text = bz2.compress(b'') @@ -874,14 +873,14 @@ class OpenTest(BaseTest): with self.open(self.filename, mode) as f: f.write(self.TEXT) with open(self.filename, "rb") as f: - file_data = self.decompress(f.read()) + file_data = ext_decompress(f.read()) self.assertEqual(file_data, self.TEXT) with self.open(self.filename, "rb") as f: self.assertEqual(f.read(), self.TEXT) with self.open(self.filename, "ab") as f: f.write(self.TEXT) with open(self.filename, "rb") as f: - file_data = self.decompress(f.read()) + file_data = ext_decompress(f.read()) self.assertEqual(file_data, self.TEXT * 2) def test_implicit_binary_modes(self): @@ -892,14 +891,14 @@ class OpenTest(BaseTest): with self.open(self.filename, mode) as f: f.write(self.TEXT) with open(self.filename, "rb") as f: - file_data = self.decompress(f.read()) + file_data = ext_decompress(f.read()) self.assertEqual(file_data, self.TEXT) with self.open(self.filename, "r") as f: self.assertEqual(f.read(), self.TEXT) with self.open(self.filename, "a") as f: f.write(self.TEXT) with open(self.filename, "rb") as f: - file_data = self.decompress(f.read()) + file_data = ext_decompress(f.read()) self.assertEqual(file_data, self.TEXT * 2) def test_text_modes(self): @@ -911,14 +910,14 @@ class OpenTest(BaseTest): with self.open(self.filename, mode) as f: f.write(text) with open(self.filename, "rb") as f: - file_data = self.decompress(f.read()).decode("ascii") + file_data = ext_decompress(f.read()).decode("ascii") self.assertEqual(file_data, text_native_eol) with self.open(self.filename, "rt") as f: self.assertEqual(f.read(), text) with self.open(self.filename, "at") as f: f.write(text) with open(self.filename, "rb") as f: - file_data = self.decompress(f.read()).decode("ascii") + file_data = ext_decompress(f.read()).decode("ascii") self.assertEqual(file_data, text_native_eol * 2) def test_x_mode(self): @@ -959,7 +958,7 @@ class OpenTest(BaseTest): with self.open(self.filename, "wt", encoding="utf-16-le") as f: f.write(text) with open(self.filename, "rb") as f: - file_data = self.decompress(f.read()).decode("utf-16-le") + file_data = ext_decompress(f.read()).decode("utf-16-le") self.assertEqual(file_data, text_native_eol) with self.open(self.filename, "rt", encoding="utf-16-le") as f: self.assertEqual(f.read(), text) diff --git a/Lib/test/test_calendar.py b/Lib/test/test_calendar.py index 80ed632..accf251 100644 --- a/Lib/test/test_calendar.py +++ b/Lib/test/test_calendar.py @@ -409,8 +409,7 @@ class OutputTestCase(unittest.TestCase): def test_prmonth(self): with support.captured_stdout() as out: calendar.TextCalendar().prmonth(2004, 1) - output = out.getvalue().strip() - self.assertEqual(output, result_2004_01_text.strip()) + self.assertEqual(out.getvalue(), result_2004_01_text) def test_pryear(self): with support.captured_stdout() as out: @@ -502,6 +501,27 @@ class CalendarTestCase(unittest.TestCase): # see #15421 list(calendar.Calendar().itermonthdates(datetime.MAXYEAR, 12)) + def test_itermonthdays(self): + for firstweekday in range(7): + cal = calendar.Calendar(firstweekday) + # Test the extremes, see #28253 and #26650 + for y, m in [(1, 1), (9999, 12)]: + days = list(cal.itermonthdays(y, m)) + self.assertIn(len(days), (35, 42)) + # Test a short month + cal = calendar.Calendar(firstweekday=3) + days = list(cal.itermonthdays(2001, 2)) + self.assertEqual(days, list(range(1, 29))) + + def test_itermonthdays2(self): + for firstweekday in range(7): + cal = calendar.Calendar(firstweekday) + # Test the extremes, see #28253 and #26650 + for y, m in [(1, 1), (9999, 12)]: + days = list(cal.itermonthdays2(y, m)) + self.assertEqual(days[0][1], firstweekday) + self.assertEqual(days[-1][1], (firstweekday - 1) % 7) + class MonthCalendarTestCase(unittest.TestCase): def setUp(self): diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py index dce418b..3d2f769 100644 --- a/Lib/test/test_cmd_line.py +++ b/Lib/test/test_cmd_line.py @@ -465,7 +465,7 @@ class CmdLineTest(unittest.TestCase): rc, out, err = assert_python_ok('-I', '-c', 'from sys import flags as f; ' 'print(f.no_user_site, f.ignore_environment, f.isolated)', - # dummyvar to prevent extranous -E + # dummyvar to prevent extraneous -E dummyvar="") self.assertEqual(out.strip(), b'1 1 1') with test.support.temp_cwd() as tmpdir: diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py index b2be9b1..919f361 100644 --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -10,6 +10,7 @@ import os import os.path import py_compile import subprocess +import io import textwrap from test import support @@ -426,8 +427,9 @@ class CmdLineTest(unittest.TestCase): # Exercise error reporting for various invalid package executions tests = ( ('builtins', br'No code object available'), - ('builtins.x', br'Error while finding spec.*AttributeError'), - ('builtins.x.y', br'Error while finding spec.*' + ('builtins.x', br'Error while finding module specification.*' + br'AttributeError'), + ('builtins.x.y', br'Error while finding module specification.*' br'ImportError.*No module named.*not a package'), ('os.path', br'loader.*cannot handle'), ('importlib', br'No module named.*' @@ -450,7 +452,8 @@ class CmdLineTest(unittest.TestCase): with open('test_pkg/__init__.pyc', 'wb'): pass err = self.check_dash_m_failure('test_pkg') - self.assertRegex(err, br'Error while finding spec.*' + self.assertRegex(err, + br'Error while finding module specification.*' br'ImportError.*bad magic number') self.assertNotIn(b'is a package', err) self.assertNotIn(b'Traceback', err) @@ -538,6 +541,38 @@ class CmdLineTest(unittest.TestCase): text = stderr.decode('ascii') self.assertEqual(text, "some text") + def test_syntaxerror_unindented_caret_position(self): + script = "1 + 1 = 2\n" + with support.temp_dir() as script_dir: + script_name = _make_test_script(script_dir, 'script', script) + exitcode, stdout, stderr = assert_python_failure(script_name) + text = io.TextIOWrapper(io.BytesIO(stderr), 'ascii').read() + # Confirm that the caret is located under the first 1 character + self.assertIn("\n 1 + 1 = 2\n ^", text) + + def test_syntaxerror_indented_caret_position(self): + script = textwrap.dedent("""\ + if True: + 1 + 1 = 2 + """) + with support.temp_dir() as script_dir: + script_name = _make_test_script(script_dir, 'script', script) + exitcode, stdout, stderr = assert_python_failure(script_name) + text = io.TextIOWrapper(io.BytesIO(stderr), 'ascii').read() + # Confirm that the caret is located under the first 1 character + self.assertIn("\n 1 + 1 = 2\n ^", text) + + # Try the same with a form feed at the start of the indented line + script = ( + "if True:\n" + "\f 1 + 1 = 2\n" + ) + script_name = _make_test_script(script_dir, "script", script) + exitcode, stdout, stderr = assert_python_failure(script_name) + text = io.TextIOWrapper(io.BytesIO(stderr), "ascii").read() + self.assertNotIn("\f", text) + self.assertIn("\n 1 + 1 = 2\n ^", text) + def test_main(): support.run_unittest(CmdLineTest) diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py index 21b12a5..7975ea0 100644 --- a/Lib/test/test_code.py +++ b/Lib/test/test_code.py @@ -102,6 +102,7 @@ consts: ('None',) """ +import sys import unittest import weakref from test.support import run_doctest, run_unittest, cpython_only @@ -135,6 +136,57 @@ class CodeTest(unittest.TestCase): self.assertEqual(co.co_firstlineno, 15) +def isinterned(s): + return s is sys.intern(('_' + s + '_')[1:-1]) + +class CodeConstsTest(unittest.TestCase): + + def find_const(self, consts, value): + for v in consts: + if v == value: + return v + self.assertIn(value, consts) # raises an exception + self.fail('Should never be reached') + + def assertIsInterned(self, s): + if not isinterned(s): + self.fail('String %r is not interned' % (s,)) + + def assertIsNotInterned(self, s): + if isinterned(s): + self.fail('String %r is interned' % (s,)) + + @cpython_only + def test_interned_string(self): + co = compile('res = "str_value"', '?', 'exec') + v = self.find_const(co.co_consts, 'str_value') + self.assertIsInterned(v) + + @cpython_only + def test_interned_string_in_tuple(self): + co = compile('res = ("str_value",)', '?', 'exec') + v = self.find_const(co.co_consts, ('str_value',)) + self.assertIsInterned(v[0]) + + @cpython_only + def test_interned_string_in_frozenset(self): + co = compile('res = a in {"str_value"}', '?', 'exec') + v = self.find_const(co.co_consts, frozenset(('str_value',))) + self.assertIsInterned(tuple(v)[0]) + + @cpython_only + def test_interned_string_default(self): + def f(a='str_value'): + return a + self.assertIsInterned(f()) + + @cpython_only + def test_interned_string_with_null(self): + co = compile(r'res = "str\0value!"', '?', 'exec') + v = self.find_const(co.co_consts, 'str\0value!') + self.assertIsNotInterned(v) + + class CodeWeakRefTest(unittest.TestCase): def test_basic(self): @@ -163,7 +215,7 @@ class CodeWeakRefTest(unittest.TestCase): def test_main(verbose=None): from test import test_code run_doctest(test_code, verbose) - run_unittest(CodeTest, CodeWeakRefTest) + run_unittest(CodeTest, CodeConstsTest, CodeWeakRefTest) if __name__ == "__main__": diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index 0479542..013ec64 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -2501,6 +2501,26 @@ class RawUnicodeEscapeTest(unittest.TestCase): self.assertEqual(decode(br"\U00110000", "replace"), ("\ufffd", 10)) +class EscapeEncodeTest(unittest.TestCase): + + def test_escape_encode(self): + tests = [ + (b'', (b'', 0)), + (b'foobar', (b'foobar', 6)), + (b'spam\0eggs', (b'spam\\x00eggs', 9)), + (b'a\'b', (b"a\\'b", 3)), + (b'b\\c', (b'b\\\\c', 3)), + (b'c\nd', (b'c\\nd', 3)), + (b'd\re', (b'd\\re', 3)), + (b'f\x7fg', (b'f\\x7fg', 3)), + ] + for data, output in tests: + with self.subTest(data=data): + self.assertEqual(codecs.escape_encode(data), output) + self.assertRaises(TypeError, codecs.escape_encode, 'spam') + self.assertRaises(TypeError, codecs.escape_encode, bytearray(b'spam')) + + class SurrogateEscapeTest(unittest.TestCase): def test_utf8(self): diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index 4c32e09..5238382 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -114,7 +114,7 @@ class TestChainMap(unittest.TestCase): self.assertEqual(f['b'], 5) # find first in chain self.assertEqual(f.parents['b'], 2) # look beyond maps[0] - def test_contructor(self): + def test_constructor(self): self.assertEqual(ChainMap().maps, [{}]) # no-args --> one new dict self.assertEqual(ChainMap({1:2}).maps, [{1:2}]) # 1 arg --> list diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index e0fdee3..824e843 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -472,6 +472,13 @@ if 1: d = {f(): f(), f(): f()} self.assertEqual(d, {1: 2, 3: 4}) + def test_compile_filename(self): + for filename in ('file.py', b'file.py', + bytearray(b'file.py'), memoryview(b'file.py')): + code = compile('pass', filename, 'exec') + self.assertEqual(code.co_filename, 'file.py') + self.assertRaises(TypeError, compile, 'pass', list(b'file.py'), 'exec') + @support.cpython_only def test_same_filename_used(self): s = """def f(): pass\ndef g(): pass""" diff --git a/Lib/test/test_complex.py b/Lib/test/test_complex.py index 0ef9a7a..403ee3b 100644 --- a/Lib/test/test_complex.py +++ b/Lib/test/test_complex.py @@ -326,6 +326,14 @@ class ComplexTest(unittest.TestCase): self.assertRaises(ValueError, complex, "1e1ej") self.assertRaises(ValueError, complex, "1e++1ej") self.assertRaises(ValueError, complex, ")1+2j(") + self.assertRaisesRegex( + TypeError, + "first argument must be a string or a number, not 'dict'", + complex, {1:2}, 1) + self.assertRaisesRegex( + TypeError, + "second argument must be a number, not 'dict'", + complex, 1, {1:2}) # the following three are accepted by Python 2.6 self.assertRaises(ValueError, complex, "1..1j") self.assertRaises(ValueError, complex, "1.11.1j") diff --git a/Lib/test/test_concurrent_futures.py b/Lib/test/test_concurrent_futures.py index cdb9308..7513815 100644 --- a/Lib/test/test_concurrent_futures.py +++ b/Lib/test/test_concurrent_futures.py @@ -4,7 +4,7 @@ import test.support test.support.import_module('_multiprocessing') # Skip tests if sem_open implementation is broken. test.support.import_module('multiprocessing.synchronize') -# import threading after _multiprocessing to raise a more revelant error +# import threading after _multiprocessing to raise a more relevant error # message: "No module named _multiprocessing". _multiprocessing is not compiled # without thread support. test.support.import_module('threading') diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py index 71a8f3f..864a1d0 100644 --- a/Lib/test/test_configparser.py +++ b/Lib/test/test_configparser.py @@ -9,6 +9,7 @@ import warnings from test import support + class SortedDict(collections.UserDict): def items(self): @@ -64,6 +65,7 @@ class CfgParserTestCaseClass: cf.read_string(string) return cf + class BasicTestCase(CfgParserTestCaseClass): def basic_test(self, cf): @@ -828,6 +830,21 @@ boolean {0[0]} NO self.assertEqual(set(cf['section3'].keys()), set()) self.assertEqual(cf.sections(), ['section1', 'section2', 'section3']) + def test_invalid_multiline_value(self): + if self.allow_no_value: + self.skipTest('if no_value is allowed, ParsingError is not raised') + + invalid = textwrap.dedent("""\ + [DEFAULT] + test {0} test + invalid""".format(self.delimiters[0]) + ) + cf = self.newconfig() + with self.assertRaises(configparser.ParsingError): + cf.read_string(invalid) + self.assertEqual(cf.get('DEFAULT', 'test'), 'test') + self.assertEqual(cf['DEFAULT']['test'], 'test') + class StrictTestCase(BasicTestCase, unittest.TestCase): config_class = configparser.RawConfigParser @@ -981,14 +998,17 @@ class ConfigParserTestCaseLegacyInterpolation(ConfigParserTestCase): cf.set("sect", "option2", "foo%%bar") self.assertEqual(cf.get("sect", "option2"), "foo%%bar") + class ConfigParserTestCaseNonStandardDelimiters(ConfigParserTestCase): delimiters = (':=', '$') comment_prefixes = ('//', '"') inline_comment_prefixes = ('//', '"') + class ConfigParserTestCaseNonStandardDefaultSection(ConfigParserTestCase): default_section = 'general' + class MultilineValuesTestCase(BasicTestCase, unittest.TestCase): config_class = configparser.ConfigParser wonderful_spam = ("I'm having spam spam spam spam " @@ -1017,6 +1037,7 @@ class MultilineValuesTestCase(BasicTestCase, unittest.TestCase): self.assertEqual(cf_from_file.get('section8', 'lovely_spam4'), self.wonderful_spam.replace('\t\n', '\n')) + class RawConfigParserTestCase(BasicTestCase, unittest.TestCase): config_class = configparser.RawConfigParser @@ -1059,11 +1080,13 @@ class RawConfigParserTestCase(BasicTestCase, unittest.TestCase): cf.set('non-string', 1, 1) self.assertEqual(cf.get('non-string', 1), 1) + class RawConfigParserTestCaseNonStandardDelimiters(RawConfigParserTestCase): delimiters = (':=', '$') comment_prefixes = ('//', '"') inline_comment_prefixes = ('//', '"') + class RawConfigParserTestSambaConf(CfgParserTestCaseClass, unittest.TestCase): config_class = configparser.RawConfigParser comment_prefixes = ('#', ';', '----') @@ -1258,6 +1281,7 @@ class ConfigParserTestCaseExtendedInterpolation(BasicTestCase, unittest.TestCase class ConfigParserTestCaseNoValue(ConfigParserTestCase): allow_no_value = True + class ConfigParserTestCaseTrickyFile(CfgParserTestCaseClass, unittest.TestCase): config_class = configparser.ConfigParser delimiters = {'='} diff --git a/Lib/test/test_contextlib.py b/Lib/test/test_contextlib.py index 30a6377..516403e 100644 --- a/Lib/test/test_contextlib.py +++ b/Lib/test/test_contextlib.py @@ -762,6 +762,40 @@ class TestExitStack(unittest.TestCase): stack.push(cm) self.assertIs(stack._exit_callbacks[-1], cm) + def test_dont_reraise_RuntimeError(self): + # https://bugs.python.org/issue27122 + class UniqueException(Exception): pass + class UniqueRuntimeError(RuntimeError): pass + + @contextmanager + def second(): + try: + yield 1 + except Exception as exc: + raise UniqueException("new exception") from exc + + @contextmanager + def first(): + try: + yield 1 + except Exception as exc: + raise exc + + # The UniqueRuntimeError should be caught by second()'s exception + # handler which chain raised a new UniqueException. + with self.assertRaises(UniqueException) as err_ctx: + with ExitStack() as es_ctx: + es_ctx.enter_context(second()) + es_ctx.enter_context(first()) + raise UniqueRuntimeError("please no infinite loop.") + + exc = err_ctx.exception + self.assertIsInstance(exc, UniqueException) + self.assertIsInstance(exc.__context__, UniqueRuntimeError) + self.assertIsNone(exc.__context__.__context__) + self.assertIsNone(exc.__context__.__cause__) + self.assertIs(exc.__cause__, exc.__context__) + class TestRedirectStream: diff --git a/Lib/test/test_coroutines.py b/Lib/test/test_coroutines.py index 4f725ae..4a327b5 100644 --- a/Lib/test/test_coroutines.py +++ b/Lib/test/test_coroutines.py @@ -710,6 +710,21 @@ class CoroutineTest(unittest.TestCase): coro.close() self.assertEqual(CHK, 1) + def test_coro_wrapper_send_tuple(self): + async def foo(): + return (10,) + + result = run_async__await__(foo()) + self.assertEqual(result, ([], (10,))) + + def test_coro_wrapper_send_stop_iterator(self): + async def foo(): + return StopIteration(10) + + result = run_async__await__(foo()) + self.assertIsInstance(result[1], StopIteration) + self.assertEqual(result[1].value, 10) + def test_cr_await(self): @types.coroutine def a(): @@ -1423,7 +1438,7 @@ class CoroutineTest(unittest.TestCase): with warnings.catch_warnings(): warnings.simplefilter("error") - # Test that __aiter__ that returns an asyncronous iterator + # Test that __aiter__ that returns an asynchronous iterator # directly does not throw any warnings. run_async(main()) self.assertEqual(I, 111011) @@ -1537,6 +1552,52 @@ class CoroutineTest(unittest.TestCase): warnings.simplefilter("error") run_async(foo()) + def test_for_tuple(self): + class Done(Exception): pass + + class AIter(tuple): + i = 0 + def __aiter__(self): + return self + async def __anext__(self): + if self.i >= len(self): + raise StopAsyncIteration + self.i += 1 + return self[self.i - 1] + + result = [] + async def foo(): + async for i in AIter([42]): + result.append(i) + raise Done + + with self.assertRaises(Done): + foo().send(None) + self.assertEqual(result, [42]) + + def test_for_stop_iteration(self): + class Done(Exception): pass + + class AIter(StopIteration): + i = 0 + def __aiter__(self): + return self + async def __anext__(self): + if self.i: + raise StopAsyncIteration + self.i += 1 + return self.value + + result = [] + async def foo(): + async for i in AIter(42): + result.append(i) + raise Done + + with self.assertRaises(Done): + foo().send(None) + self.assertEqual(result, [42]) + def test_copy(self): async def func(): pass coro = func() @@ -1565,6 +1626,15 @@ class CoroutineTest(unittest.TestCase): finally: aw.close() + def test_fatal_coro_warning(self): + # Issue 27811 + async def func(): pass + with warnings.catch_warnings(), support.captured_stderr() as stderr: + warnings.filterwarnings("error") + func() + support.gc_collect() + self.assertIn("was never awaited", stderr.getvalue()) + class CoroAsyncIOCompatTest(unittest.TestCase): diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index 8411cdb..14ba87f 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -10,6 +10,7 @@ # import os +import string import sys import tempfile import unittest @@ -26,6 +27,7 @@ requires('curses') curses = import_module('curses') import_module('curses.panel') import_module('curses.ascii') +import_module('curses.textpad') def requires_curses_func(name): return unittest.skipUnless(hasattr(curses, name), @@ -187,6 +189,11 @@ class TestCurses(unittest.TestCase): if hasattr(curses, 'enclose'): stdscr.enclose() + self.assertRaises(ValueError, stdscr.getstr, -400) + self.assertRaises(ValueError, stdscr.getstr, 2, 3, -400) + self.assertRaises(ValueError, stdscr.instr, -2) + self.assertRaises(ValueError, stdscr.instr, 2, 3, -2) + def test_module_funcs(self): "Test module-level functions" @@ -386,9 +393,18 @@ class TestCurses(unittest.TestCase): human_readable_signature = stdscr.addch.__doc__.split("\n")[0] self.assertIn("[y, x,]", human_readable_signature) + def test_issue13051(self): + stdscr = self.stdscr + box = curses.textpad.Textbox(stdscr, insert_mode=True) + lines, cols = stdscr.getmaxyx() + stdscr.resize(lines-2, cols-2) + # this may cause infinite recursion, leading to a RuntimeError + box._insert_printable_char('a') + class MiscTests(unittest.TestCase): + @requires_curses_func('update_lines_cols') def test_update_lines_cols(self): # this doesn't actually test that LINES and COLS are updated, # because we can't automate changing them. See Issue #4254 for @@ -399,6 +415,74 @@ class MiscTests(unittest.TestCase): class TestAscii(unittest.TestCase): + def test_controlnames(self): + for name in curses.ascii.controlnames: + self.assertTrue(hasattr(curses.ascii, name), name) + + def test_ctypes(self): + def check(func, expected): + with self.subTest(ch=c, func=func): + self.assertEqual(func(i), expected) + self.assertEqual(func(c), expected) + + for i in range(256): + c = chr(i) + b = bytes([i]) + check(curses.ascii.isalnum, b.isalnum()) + check(curses.ascii.isalpha, b.isalpha()) + check(curses.ascii.isdigit, b.isdigit()) + check(curses.ascii.islower, b.islower()) + check(curses.ascii.isspace, b.isspace()) + check(curses.ascii.isupper, b.isupper()) + + check(curses.ascii.isascii, i < 128) + check(curses.ascii.ismeta, i >= 128) + check(curses.ascii.isctrl, i < 32) + check(curses.ascii.iscntrl, i < 32 or i == 127) + check(curses.ascii.isblank, c in ' \t') + check(curses.ascii.isgraph, 32 < i <= 126) + check(curses.ascii.isprint, 32 <= i <= 126) + check(curses.ascii.ispunct, c in string.punctuation) + check(curses.ascii.isxdigit, c in string.hexdigits) + + for i in (-2, -1, 256, sys.maxunicode, sys.maxunicode+1): + self.assertFalse(curses.ascii.isalnum(i)) + self.assertFalse(curses.ascii.isalpha(i)) + self.assertFalse(curses.ascii.isdigit(i)) + self.assertFalse(curses.ascii.islower(i)) + self.assertFalse(curses.ascii.isspace(i)) + self.assertFalse(curses.ascii.isupper(i)) + + self.assertFalse(curses.ascii.isascii(i)) + self.assertFalse(curses.ascii.isctrl(i)) + self.assertFalse(curses.ascii.iscntrl(i)) + self.assertFalse(curses.ascii.isblank(i)) + self.assertFalse(curses.ascii.isgraph(i)) + self.assertFalse(curses.ascii.isprint(i)) + self.assertFalse(curses.ascii.ispunct(i)) + self.assertFalse(curses.ascii.isxdigit(i)) + + self.assertFalse(curses.ascii.ismeta(-1)) + + def test_ascii(self): + ascii = curses.ascii.ascii + self.assertEqual(ascii('\xc1'), 'A') + self.assertEqual(ascii('A'), 'A') + self.assertEqual(ascii(ord('\xc1')), ord('A')) + + def test_ctrl(self): + ctrl = curses.ascii.ctrl + self.assertEqual(ctrl('J'), '\n') + self.assertEqual(ctrl('\n'), '\n') + self.assertEqual(ctrl('@'), '\0') + self.assertEqual(ctrl(ord('J')), ord('\n')) + + def test_alt(self): + alt = curses.ascii.alt + self.assertEqual(alt('\n'), '\x8a') + self.assertEqual(alt('A'), '\xc1') + self.assertEqual(alt(ord('A')), 0xc1) + def test_unctrl(self): unctrl = curses.ascii.unctrl self.assertEqual(unctrl('a'), 'a') @@ -408,9 +492,13 @@ class TestAscii(unittest.TestCase): self.assertEqual(unctrl('\x7f'), '^?') self.assertEqual(unctrl('\n'), '^J') self.assertEqual(unctrl('\0'), '^@') + self.assertEqual(unctrl(ord('A')), 'A') + self.assertEqual(unctrl(ord('\n')), '^J') # Meta-bit characters self.assertEqual(unctrl('\x8a'), '!^J') self.assertEqual(unctrl('\xc1'), '!A') + self.assertEqual(unctrl(ord('\x8a')), '!^J') + self.assertEqual(unctrl(ord('\xc1')), '!A') if __name__ == '__main__': diff --git a/Lib/test/test_dbm_dumb.py b/Lib/test/test_dbm_dumb.py index ff63c88..235ab11 100644 --- a/Lib/test/test_dbm_dumb.py +++ b/Lib/test/test_dbm_dumb.py @@ -5,6 +5,7 @@ import io import operator import os +import stat import unittest import dbm.dumb as dumbdbm from test import support @@ -234,6 +235,21 @@ class DumbDBMTestCase(unittest.TestCase): pass self.assertEqual(stdout.getvalue(), '') + @unittest.skipUnless(hasattr(os, 'chmod'), 'test needs os.chmod()') + def test_readonly_files(self): + with support.temp_dir() as dir: + fname = os.path.join(dir, 'db') + with dumbdbm.open(fname, 'n') as f: + self.assertEqual(list(f.keys()), []) + for key in self._dict: + f[key] = self._dict[key] + os.chmod(fname + ".dir", stat.S_IRUSR) + os.chmod(fname + ".dat", stat.S_IRUSR) + os.chmod(dir, stat.S_IRUSR|stat.S_IXUSR) + with dumbdbm.open(fname, 'r') as f: + self.assertEqual(sorted(f.keys()), sorted(self._dict)) + f.close() # don't write + def tearDown(self): _delete_files() diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py index c0d21b1..1aa0bf8 100644 --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -2491,7 +2491,8 @@ class PythonAPItests(unittest.TestCase): Decimal = self.decimal.Decimal class MyDecimal(Decimal): - pass + def __init__(self, _): + self.x = 'y' self.assertTrue(issubclass(MyDecimal, Decimal)) @@ -2499,6 +2500,8 @@ class PythonAPItests(unittest.TestCase): self.assertEqual(type(r), MyDecimal) self.assertEqual(str(r), '0.1000000000000000055511151231257827021181583404541015625') + self.assertEqual(r.x, 'y') + bigint = 12345678901234567890123456789 self.assertEqual(MyDecimal.from_float(bigint), MyDecimal(bigint)) self.assertTrue(MyDecimal.from_float(float('nan')).is_qnan()) @@ -5395,6 +5398,34 @@ class CWhitebox(unittest.TestCase): y = Decimal(10**(9*25)).__sizeof__() self.assertEqual(y, x+4) + def test_internal_use_of_overridden_methods(self): + Decimal = C.Decimal + + # Unsound subtyping + class X(float): + def as_integer_ratio(self): + return 1 + def __abs__(self): + return self + + class Y(float): + def __abs__(self): + return [1]*200 + + class I(int): + def bit_length(self): + return [1]*200 + + class Z(float): + def as_integer_ratio(self): + return (I(1), I(1)) + def __abs__(self): + return self + + for cls in X, Y, Z: + self.assertEqual(Decimal.from_float(cls(101.1)), + Decimal.from_float(101.1)) + @requires_docstrings @unittest.skipUnless(C, "test requires C version") class SignatureTest(unittest.TestCase): diff --git a/Lib/test/test_defaultdict.py b/Lib/test/test_defaultdict.py index a90bc2b..7218349 100644 --- a/Lib/test/test_defaultdict.py +++ b/Lib/test/test_defaultdict.py @@ -175,7 +175,7 @@ class TestDefaultDict(unittest.TestCase): def test_callable_arg(self): self.assertRaises(TypeError, defaultdict, {}) - def test_pickleing(self): + def test_pickling(self): d = defaultdict(int) d[1] for proto in range(pickle.HIGHEST_PROTOCOL + 1): diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py index f525429..18e1df0 100644 --- a/Lib/test/test_deque.py +++ b/Lib/test/test_deque.py @@ -494,7 +494,7 @@ class TestBasic(unittest.TestCase): d.clear() self.assertEqual(len(d), 0) self.assertEqual(list(d), []) - d.clear() # clear an emtpy deque + d.clear() # clear an empty deque self.assertEqual(list(d), []) def test_remove(self): diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index a130cec..eda6fc1 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -7,6 +7,7 @@ import pickle import sys import types import unittest +import warnings import weakref from copy import deepcopy @@ -876,7 +877,7 @@ class ClassPropertiesAndMethods(unittest.TestCase): self.assertEqual(Frag().__int__(), 42) self.assertEqual(int(Frag()), 42) - def test_diamond_inheritence(self): + def test_diamond_inheritance(self): # Testing multiple inheritance special cases... class A(object): def spam(self): return "A" @@ -1661,6 +1662,77 @@ order (MRO) for bases """ self.assertEqual(b.foo, 3) self.assertEqual(b.__class__, D) + @unittest.expectedFailure + def test_bad_new(self): + self.assertRaises(TypeError, object.__new__) + self.assertRaises(TypeError, object.__new__, '') + self.assertRaises(TypeError, list.__new__, object) + self.assertRaises(TypeError, object.__new__, list) + class C(object): + __new__ = list.__new__ + self.assertRaises(TypeError, C) + class C(list): + __new__ = object.__new__ + self.assertRaises(TypeError, C) + + def test_object_new(self): + class A(object): + pass + object.__new__(A) + self.assertRaises(TypeError, object.__new__, A, 5) + object.__init__(A()) + self.assertRaises(TypeError, object.__init__, A(), 5) + + class A(object): + def __init__(self, foo): + self.foo = foo + object.__new__(A) + object.__new__(A, 5) + object.__init__(A(3)) + self.assertRaises(TypeError, object.__init__, A(3), 5) + + class A(object): + def __new__(cls, foo): + return object.__new__(cls) + object.__new__(A) + self.assertRaises(TypeError, object.__new__, A, 5) + object.__init__(A(3)) + object.__init__(A(3), 5) + + class A(object): + def __new__(cls, foo): + return object.__new__(cls) + def __init__(self, foo): + self.foo = foo + object.__new__(A) + self.assertRaises(TypeError, object.__new__, A, 5) + object.__init__(A(3)) + self.assertRaises(TypeError, object.__init__, A(3), 5) + + @unittest.expectedFailure + def test_restored_object_new(self): + class A(object): + def __new__(cls, *args, **kwargs): + raise AssertionError + self.assertRaises(AssertionError, A) + class B(A): + __new__ = object.__new__ + def __init__(self, foo): + self.foo = foo + with warnings.catch_warnings(): + warnings.simplefilter('error', DeprecationWarning) + b = B(3) + self.assertEqual(b.foo, 3) + self.assertEqual(b.__class__, B) + del B.__new__ + self.assertRaises(AssertionError, B) + del A.__new__ + with warnings.catch_warnings(): + warnings.simplefilter('error', DeprecationWarning) + b = B(3) + self.assertEqual(b.foo, 3) + self.assertEqual(b.__class__, B) + def test_altmro(self): # Testing mro() and overriding it... class A(object): @@ -3522,6 +3594,24 @@ order (MRO) for bases """ self.assertIsInstance(d, D) self.assertEqual(d.foo, 1) + class C(object): + @staticmethod + def __new__(*args): + return args + self.assertEqual(C(1, 2), (C, 1, 2)) + class D(C): + pass + self.assertEqual(D(1, 2), (D, 1, 2)) + + class C(object): + @classmethod + def __new__(*args): + return args + self.assertEqual(C(1, 2), (C, C, 1, 2)) + class D(C): + pass + self.assertEqual(D(1, 2), (D, D, 1, 2)) + def test_imul_bug(self): # Testing for __imul__ problems... # SF bug 544647 diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py index 6d68e76..b85d333 100644 --- a/Lib/test/test_dict.py +++ b/Lib/test/test_dict.py @@ -836,6 +836,24 @@ class DictTest(unittest.TestCase): pass self._tracked(MyDict()) + @support.cpython_only + def test_splittable_setattr_after_pop(self): + """setattr must not convert combined table into split table""" + # Issue 28147 + import _testcapi + + class C: + pass + a = C() + a.a = 2 + self.assertTrue(_testcapi.dict_hassplittable(a.__dict__)) + # dict.popitem() convert it to combined table + a.__dict__.popitem() + self.assertFalse(_testcapi.dict_hassplittable(a.__dict__)) + # But C should not convert a.__dict__ to split table again. + a.a = 3 + self.assertFalse(_testcapi.dict_hassplittable(a.__dict__)) + def test_iterator_pickling(self): for proto in range(pickle.HIGHEST_PROTOCOL + 1): data = {1:"a", 2:"b", 3:"c"} diff --git a/Lib/test/test_dictviews.py b/Lib/test/test_dictviews.py index ab23ca1..0c99652 100644 --- a/Lib/test/test_dictviews.py +++ b/Lib/test/test_dictviews.py @@ -209,6 +209,32 @@ class DictSetTest(unittest.TestCase): self.assertRaises(TypeError, copy.copy, d.values()) self.assertRaises(TypeError, copy.copy, d.items()) + def test_compare_error(self): + class Exc(Exception): + pass + + class BadEq: + def __hash__(self): + return 7 + def __eq__(self, other): + raise Exc + + k1, k2 = BadEq(), BadEq() + v1, v2 = BadEq(), BadEq() + d = {k1: v1} + + self.assertIn(k1, d) + self.assertIn(k1, d.keys()) + self.assertIn(v1, d.values()) + self.assertIn((k1, v1), d.items()) + + self.assertRaises(Exc, d.__contains__, k2) + self.assertRaises(Exc, d.keys().__contains__, k2) + self.assertRaises(Exc, d.items().__contains__, (k2, v1)) + self.assertRaises(Exc, d.items().__contains__, (k1, v2)) + with self.assertRaises(Exc): + v2 in d.values() + def test_pickle(self): d = {1: 10, "a": "ABC"} for proto in range(pickle.HIGHEST_PROTOCOL + 1): diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py index 29426a3..33163b9 100644 --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -2719,12 +2719,6 @@ output into something we can doctest against: >>> def normalize(s): ... return '\n'.join(s.decode().splitlines()) -Note: we also pass TERM='' to all the assert_python calls to avoid a bug -in the readline library that is triggered in these tests because we are -running them in a new python process. See: - - http://lists.gnu.org/archive/html/bug-readline/2013-06/msg00000.html - With those preliminaries out of the way, we'll start with a file with two simple tests and no errors. We'll run both the unadorned doctest command, and the verbose version, and then check the output: @@ -2741,9 +2735,9 @@ the verbose version, and then check the output: ... _ = f.write('\n') ... _ = f.write('And that is it.\n') ... rc1, out1, err1 = script_helper.assert_python_ok( - ... '-m', 'doctest', fn, TERM='') + ... '-m', 'doctest', fn) ... rc2, out2, err2 = script_helper.assert_python_ok( - ... '-m', 'doctest', '-v', fn, TERM='') + ... '-m', 'doctest', '-v', fn) With no arguments and passing tests, we should get no output: @@ -2806,17 +2800,17 @@ text files). ... _ = f.write(' \"\"\"\n') ... import shutil ... rc1, out1, err1 = script_helper.assert_python_failure( - ... '-m', 'doctest', fn, fn2, TERM='') + ... '-m', 'doctest', fn, fn2) ... rc2, out2, err2 = script_helper.assert_python_ok( - ... '-m', 'doctest', '-o', 'ELLIPSIS', fn, TERM='') + ... '-m', 'doctest', '-o', 'ELLIPSIS', fn) ... rc3, out3, err3 = script_helper.assert_python_ok( ... '-m', 'doctest', '-o', 'ELLIPSIS', - ... '-o', 'NORMALIZE_WHITESPACE', fn, fn2, TERM='') + ... '-o', 'NORMALIZE_WHITESPACE', fn, fn2) ... rc4, out4, err4 = script_helper.assert_python_failure( - ... '-m', 'doctest', '-f', fn, fn2, TERM='') + ... '-m', 'doctest', '-f', fn, fn2) ... rc5, out5, err5 = script_helper.assert_python_ok( ... '-m', 'doctest', '-v', '-o', 'ELLIPSIS', - ... '-o', 'NORMALIZE_WHITESPACE', fn, fn2, TERM='') + ... '-o', 'NORMALIZE_WHITESPACE', fn, fn2) Our first test run will show the errors from the first file (doctest stops if a file has errors). Note that doctest test-run error output appears on stdout, @@ -2922,7 +2916,7 @@ We should also check some typical error cases. Invalid file name: >>> rc, out, err = script_helper.assert_python_failure( - ... '-m', 'doctest', 'nosuchfile', TERM='') + ... '-m', 'doctest', 'nosuchfile') >>> rc, out (1, b'') >>> print(normalize(err)) # doctest: +ELLIPSIS @@ -2933,7 +2927,7 @@ Invalid file name: Invalid doctest option: >>> rc, out, err = script_helper.assert_python_failure( - ... '-m', 'doctest', '-o', 'nosuchoption', TERM='') + ... '-m', 'doctest', '-o', 'nosuchoption') >>> rc, out (2, b'') >>> print(normalize(err)) # doctest: +ELLIPSIS diff --git a/Lib/test/test_docxmlrpc.py b/Lib/test/test_docxmlrpc.py index e6ca961..0090333 100644 --- a/Lib/test/test_docxmlrpc.py +++ b/Lib/test/test_docxmlrpc.py @@ -3,12 +3,8 @@ import http.client import sys from test import support threading = support.import_module('threading') -import time -import socket import unittest -PORT = None - def make_request_and_skipIf(condition, reason): # If we skip the test, we have to make a request because # the server created in setUp blocks expecting one to come in. @@ -23,13 +19,10 @@ def make_request_and_skipIf(condition, reason): return decorator -def server(evt, numrequests): +def make_server(): serv = DocXMLRPCServer(("localhost", 0), logRequests=False) try: - global PORT - PORT = serv.socket.getsockname()[1] - # Add some documentation serv.set_server_title("DocXMLRPCServer Test Documentation") serv.set_server_name("DocXMLRPCServer Test Docs") @@ -66,43 +59,31 @@ def server(evt, numrequests): serv.register_function(lambda x, y: x-y) serv.register_function(annotation) serv.register_instance(ClassWithAnnotation()) - - while numrequests > 0: - serv.handle_request() - numrequests -= 1 - except socket.timeout: - pass - finally: + return serv + except: serv.server_close() - PORT = None - evt.set() + raise class DocXMLRPCHTTPGETServer(unittest.TestCase): def setUp(self): - self._threads = support.threading_setup() # Enable server feedback DocXMLRPCServer._send_traceback_header = True - self.evt = threading.Event() - threading.Thread(target=server, args=(self.evt, 1)).start() - - # wait for port to be assigned - deadline = time.monotonic() + 10.0 - while PORT is None: - time.sleep(0.010) - if time.monotonic() > deadline: - break + self.serv = make_server() + self.thread = threading.Thread(target=self.serv.serve_forever) + self.thread.start() + PORT = self.serv.server_address[1] self.client = http.client.HTTPConnection("localhost:%d" % PORT) def tearDown(self): self.client.close() - self.evt.wait() - # Disable server feedback DocXMLRPCServer._send_traceback_header = False - support.threading_cleanup(*self._threads) + self.serv.shutdown() + self.thread.join() + self.serv.server_close() def test_valid_get_response(self): self.client.request("GET", "/") @@ -164,7 +145,7 @@ class DocXMLRPCHTTPGETServer(unittest.TestCase): @make_request_and_skipIf(sys.flags.optimize >= 2, "Docstrings are omitted with -O2 and above") def test_system_methods(self): - """Test the precense of three consecutive system.* methods. + """Test the presence of three consecutive system.* methods. This also tests their use of parameter type recognition and the systems related to that process. diff --git a/Lib/test/test_dummy_thread.py b/Lib/test/test_dummy_thread.py index a6a2856..bb4bfe7 100644 --- a/Lib/test/test_dummy_thread.py +++ b/Lib/test/test_dummy_thread.py @@ -1,19 +1,13 @@ -"""Generic thread tests. - -Meant to be used by dummy_thread and thread. To allow for different modules -to be used, test_main() can be called with the module to use as the thread -implementation as its sole argument. - -""" import _dummy_thread as _thread import time import queue import random import unittest from test import support +from unittest import mock + +DELAY = 0 -DELAY = 0 # Set > 0 when testing a module other than _dummy_thread, such as - # the '_thread' module. class LockTests(unittest.TestCase): """Test lock objects.""" @@ -34,6 +28,12 @@ class LockTests(unittest.TestCase): self.assertFalse(self.lock.locked(), "Lock object did not release properly.") + def test_LockType_context_manager(self): + with _thread.LockType(): + pass + self.assertFalse(self.lock.locked(), + "Acquired Lock was not released") + def test_improper_release(self): #Make sure release of an unlocked thread raises RuntimeError self.assertRaises(RuntimeError, self.lock.release) @@ -83,39 +83,72 @@ class LockTests(unittest.TestCase): self.assertGreaterEqual(end_time - start_time, DELAY, "Blocking by unconditional acquiring failed.") + @mock.patch('time.sleep') + def test_acquire_timeout(self, mock_sleep): + """Test invoking acquire() with a positive timeout when the lock is + already acquired. Ensure that time.sleep() is invoked with the given + timeout and that False is returned.""" + + self.lock.acquire() + retval = self.lock.acquire(waitflag=0, timeout=1) + self.assertTrue(mock_sleep.called) + mock_sleep.assert_called_once_with(1) + self.assertEqual(retval, False) + + def test_lock_representation(self): + self.lock.acquire() + self.assertIn("locked", repr(self.lock)) + self.lock.release() + self.assertIn("unlocked", repr(self.lock)) + + class MiscTests(unittest.TestCase): """Miscellaneous tests.""" def test_exit(self): - #Make sure _thread.exit() raises SystemExit self.assertRaises(SystemExit, _thread.exit) def test_ident(self): - #Test sanity of _thread.get_ident() self.assertIsInstance(_thread.get_ident(), int, "_thread.get_ident() returned a non-integer") self.assertNotEqual(_thread.get_ident(), 0, "_thread.get_ident() returned 0") def test_LockType(self): - #Make sure _thread.LockType is the same type as _thread.allocate_locke() self.assertIsInstance(_thread.allocate_lock(), _thread.LockType, "_thread.LockType is not an instance of what " "is returned by _thread.allocate_lock()") + def test_set_sentinel(self): + self.assertIsInstance(_thread._set_sentinel(), _thread.LockType, + "_thread._set_sentinel() did not return a " + "LockType instance.") + def test_interrupt_main(self): #Calling start_new_thread with a function that executes interrupt_main # should raise KeyboardInterrupt upon completion. def call_interrupt(): _thread.interrupt_main() - self.assertRaises(KeyboardInterrupt, _thread.start_new_thread, - call_interrupt, tuple()) + + self.assertRaises(KeyboardInterrupt, + _thread.start_new_thread, + call_interrupt, + tuple()) def test_interrupt_in_main(self): - # Make sure that if interrupt_main is called in main threat that - # KeyboardInterrupt is raised instantly. self.assertRaises(KeyboardInterrupt, _thread.interrupt_main) + def test_stack_size_None(self): + retval = _thread.stack_size(None) + self.assertEqual(retval, 0) + + def test_stack_size_not_None(self): + with self.assertRaises(_thread.error) as cm: + _thread.stack_size("") + self.assertEqual(cm.exception.args[0], + "setting thread stack size not supported") + + class ThreadTests(unittest.TestCase): """Test thread creation.""" @@ -129,31 +162,43 @@ class ThreadTests(unittest.TestCase): _thread.start_new_thread(arg_tester, (testing_queue, True, True)) result = testing_queue.get() self.assertTrue(result[0] and result[1], - "Argument passing for thread creation using tuple failed") - _thread.start_new_thread(arg_tester, tuple(), {'queue':testing_queue, - 'arg1':True, 'arg2':True}) + "Argument passing for thread creation " + "using tuple failed") + + _thread.start_new_thread( + arg_tester, + tuple(), + {'queue':testing_queue, 'arg1':True, 'arg2':True}) + result = testing_queue.get() self.assertTrue(result[0] and result[1], - "Argument passing for thread creation using kwargs failed") - _thread.start_new_thread(arg_tester, (testing_queue, True), {'arg2':True}) + "Argument passing for thread creation " + "using kwargs failed") + + _thread.start_new_thread( + arg_tester, + (testing_queue, True), + {'arg2':True}) + result = testing_queue.get() self.assertTrue(result[0] and result[1], "Argument passing for thread creation using both tuple" " and kwargs failed") - def test_multi_creation(self): - #Make sure multiple threads can be created. + def test_multi_thread_creation(self): def queue_mark(queue, delay): - """Wait for ``delay`` seconds and then put something into ``queue``""" time.sleep(delay) queue.put(_thread.get_ident()) thread_count = 5 testing_queue = queue.Queue(thread_count) + if support.verbose: print() - print("*** Testing multiple thread creation "\ - "(will take approx. %s to %s sec.) ***" % (DELAY, thread_count)) + print("*** Testing multiple thread creation " + "(will take approx. %s to %s sec.) ***" % ( + DELAY, thread_count)) + for count in range(thread_count): if DELAY: local_delay = round(random.random(), 1) @@ -165,18 +210,47 @@ class ThreadTests(unittest.TestCase): if support.verbose: print('done') self.assertEqual(testing_queue.qsize(), thread_count, - "Not all %s threads executed properly after %s sec." % - (thread_count, DELAY)) - -def test_main(imported_module=None): - global _thread, DELAY - if imported_module: - _thread = imported_module - DELAY = 2 - if support.verbose: - print() - print("*** Using %s as _thread module ***" % _thread) - support.run_unittest(LockTests, MiscTests, ThreadTests) - -if __name__ == '__main__': - test_main() + "Not all %s threads executed properly " + "after %s sec." % (thread_count, DELAY)) + + def test_args_not_tuple(self): + """ + Test invoking start_new_thread() with a non-tuple value for "args". + Expect TypeError with a meaningful error message to be raised. + """ + with self.assertRaises(TypeError) as cm: + _thread.start_new_thread(mock.Mock(), []) + self.assertEqual(cm.exception.args[0], "2nd arg must be a tuple") + + def test_kwargs_not_dict(self): + """ + Test invoking start_new_thread() with a non-dict value for "kwargs". + Expect TypeError with a meaningful error message to be raised. + """ + with self.assertRaises(TypeError) as cm: + _thread.start_new_thread(mock.Mock(), tuple(), kwargs=[]) + self.assertEqual(cm.exception.args[0], "3rd arg must be a dict") + + def test_SystemExit(self): + """ + Test invoking start_new_thread() with a function that raises + SystemExit. + The exception should be discarded. + """ + func = mock.Mock(side_effect=SystemExit()) + try: + _thread.start_new_thread(func, tuple()) + except SystemExit: + self.fail("start_new_thread raised SystemExit.") + + @mock.patch('traceback.print_exc') + def test_RaiseException(self, mock_print_exc): + """ + Test invoking start_new_thread() with a function that raises exception. + + The exception should be discarded and the traceback should be printed + via traceback.print_exc() + """ + func = mock.Mock(side_effect=Exception) + _thread.start_new_thread(func, tuple()) + self.assertTrue(mock_print_exc.called) diff --git a/Lib/test/test_email/__init__.py b/Lib/test/test_email/__init__.py index d2f7d31..d4a03ee 100644 --- a/Lib/test/test_email/__init__.py +++ b/Lib/test/test_email/__init__.py @@ -121,6 +121,10 @@ def parameterize(cls): Note: if and only if the generated test name is a valid identifier can it be used to select the test individually from the unittest command line. + The values in the params dict can be a single value, a tuple, or a + dict. If a single value of a tuple, it is passed to the test function + as positional arguments. If a dict, it is a passed via **kw. + """ paramdicts = {} testers = collections.defaultdict(list) @@ -149,8 +153,12 @@ def parameterize(cls): if name.startswith(paramsname): testnameroot = 'test_' + name[len(paramsname):] for paramname, params in paramsdict.items(): - test = (lambda self, name=name, params=params: - getattr(self, name)(*params)) + if hasattr(params, 'keys'): + test = (lambda self, name=name, params=params: + getattr(self, name)(**params)) + else: + test = (lambda self, name=name, params=params: + getattr(self, name)(*params)) testname = testnameroot + '_' + paramname test.__name__ = testname testfuncs[testname] = test diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py index 894b800..9b86a2a 100644 --- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -11,6 +11,7 @@ import textwrap from io import StringIO, BytesIO from itertools import chain from random import choice +from socket import getfqdn try: from threading import Thread except ImportError: @@ -723,12 +724,12 @@ class TestMessageAPI(TestEmailBase): # Issue 5871: reject an attempt to embed a header inside a header value # (header injection attack). - def test_embeded_header_via_Header_rejected(self): + def test_embedded_header_via_Header_rejected(self): msg = Message() msg['Dummy'] = Header('dummy\nX-Injected-Header: test') self.assertRaises(errors.HeaderParseError, msg.as_string) - def test_embeded_header_via_string_rejected(self): + def test_embedded_header_via_string_rejected(self): msg = Message() msg['Dummy'] = 'dummy\nX-Injected-Header: test' self.assertRaises(errors.HeaderParseError, msg.as_string) @@ -1598,6 +1599,18 @@ class TestMIMEApplication(unittest.TestCase): self.assertEqual(msg.get_payload(), '\uFFFD' * len(bytesdata)) self.assertEqual(msg2.get_payload(decode=True), bytesdata) + def test_binary_body_with_unicode_linend_encode_noop(self): + # Issue 19003: This is a variation on #16564. + bytesdata = b'\x0b\xfa\xfb\xfc\xfd\xfe\xff' + msg = MIMEApplication(bytesdata, _encoder=encoders.encode_noop) + self.assertEqual(msg.get_payload(decode=True), bytesdata) + s = BytesIO() + g = BytesGenerator(s) + g.flatten(msg) + wireform = s.getvalue() + msg2 = email.message_from_bytes(wireform) + self.assertEqual(msg2.get_payload(decode=True), bytesdata) + def test_binary_body_with_encode_quopri(self): # Issue 14360. bytesdata = b'\xfa\xfb\xfc\xfd\xfe\xff ' @@ -1652,9 +1665,12 @@ class TestMIMEText(unittest.TestCase): eq(msg.get_charset().input_charset, 'us-ascii') eq(msg['content-type'], 'text/plain; charset="us-ascii"') # Also accept a Charset instance - msg = MIMEText('hello there', _charset=Charset('utf-8')) + charset = Charset('utf-8') + charset.body_encoding = None + msg = MIMEText('hello there', _charset=charset) eq(msg.get_charset().input_charset, 'utf-8') eq(msg['content-type'], 'text/plain; charset="utf-8"') + eq(msg.get_payload(), 'hello there') def test_7bit_input(self): eq = self.assertEqual @@ -2302,9 +2318,9 @@ Re: =?mac-iceland?q?r=8Aksm=9Arg=8Cs?= baz foo bar =?mac-iceland?q?r=8Aksm?= def test_rfc2047_Q_invalid_digits(self): # issue 10004. - s = '=?iso-8659-1?Q?andr=e9=zz?=' + s = '=?iso-8859-1?Q?andr=e9=zz?=' self.assertEqual(decode_header(s), - [(b'andr\xe9=zz', 'iso-8659-1')]) + [(b'andr\xe9=zz', 'iso-8859-1')]) def test_rfc2047_rfc2047_1(self): # 1st testcase at end of rfc2047 @@ -3279,6 +3295,17 @@ multipart/report email.utils.make_msgid(domain='testdomain-string')[-19:], '@testdomain-string>') + def test_make_msgid_idstring(self): + self.assertEqual( + email.utils.make_msgid(idstring='test-idstring', + domain='testdomain-string')[-33:], + '.test-idstring@testdomain-string>') + + def test_make_msgid_default_domain(self): + self.assertTrue( + email.utils.make_msgid().endswith( + '@' + getfqdn() + '>')) + def test_Generator_linend(self): # Issue 14645. with openfile('msg_26.txt', newline='\n') as f: @@ -3444,10 +3471,12 @@ class TestFeedParsers(TestEmailBase): self.assertEqual(m.keys(), ['a', 'b']) m = self.parse(['a:\r', '\nb:\n']) self.assertEqual(m.keys(), ['a', 'b']) + + # Only CR and LF should break header fields m = self.parse(['a:\x85b:\u2028c:\n']) - self.assertEqual(m.items(), [('a', '\x85'), ('b', '\u2028'), ('c', '')]) + self.assertEqual(m.items(), [('a', '\x85b:\u2028c:')]) m = self.parse(['a:\r', 'b:\x85', 'c:\n']) - self.assertEqual(m.items(), [('a', ''), ('b', '\x85'), ('c', '')]) + self.assertEqual(m.items(), [('a', ''), ('b', '\x85c:')]) def test_long_lines(self): # Expected peak memory use on 32-bit platform: 6*N*M bytes. diff --git a/Lib/test/test_email/test_inversion.py b/Lib/test/test_email/test_inversion.py index f36e33d..8e8d676 100644 --- a/Lib/test/test_email/test_inversion.py +++ b/Lib/test/test_email/test_inversion.py @@ -7,6 +7,7 @@ producing RFC valid messages. import io import unittest from email import policy, message_from_bytes +from email.message import EmailMessage from email.generator import BytesGenerator from test.test_email import TestEmailBase, parameterize @@ -23,7 +24,10 @@ def dedent(bstr): @parameterize -class TestInversion(TestEmailBase, unittest.TestCase): +class TestInversion(TestEmailBase): + + policy = policy.default + message = EmailMessage def msg_as_input(self, msg): m = message_from_bytes(msg, policy=policy.SMTP) @@ -44,6 +48,23 @@ class TestInversion(TestEmailBase, unittest.TestCase): } + payload_params = { + 'plain_text': dict(payload='This is a test\n'*20), + 'base64_text': dict(payload=(('xy a'*40+'\n')*5), cte='base64'), + 'qp_text': dict(payload=(('xy a'*40+'\n')*5), cte='quoted-printable'), + } + + def payload_as_body(self, payload, **kw): + msg = self._make_message() + msg['From'] = 'foo' + msg['To'] = 'bar' + msg['Subject'] = 'payload round trip test' + msg.set_content(payload, **kw) + b = bytes(msg) + msg2 = message_from_bytes(b, policy=self.policy) + self.assertEqual(bytes(msg2), b) + self.assertEqual(msg2.get_content(), payload) + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_email/test_message.py b/Lib/test/test_email/test_message.py index d78049e..4345162 100644 --- a/Lib/test/test_email/test_message.py +++ b/Lib/test/test_email/test_message.py @@ -732,6 +732,16 @@ class TestEmailMessageBase: m.set_param('filename', 'abc.png', 'Content-Disposition') self.assertTrue(m.is_attachment()) + def test_iter_attachments_mutation(self): + # We had a bug where iter_attachments was mutating the list. + m = self._make_message() + m.set_content('arbitrary text as main part') + m.add_related('more text as a related part') + m.add_related('yet more text as a second "attachment"') + orig = m.get_payload().copy() + self.assertEqual(len(list(m.iter_attachments())), 2) + self.assertEqual(m.get_payload(), orig) + class TestEmailMessage(TestEmailMessageBase, TestEmailBase): message = EmailMessage diff --git a/Lib/test/test_email/test_parser.py b/Lib/test/test_email/test_parser.py index b54fdd7..8ddc176 100644 --- a/Lib/test/test_email/test_parser.py +++ b/Lib/test/test_email/test_parser.py @@ -2,6 +2,7 @@ import io import email import unittest from email.message import Message +from email.policy import default from test.test_email import TestEmailBase @@ -32,5 +33,45 @@ class TestCustomMessage(TestEmailBase): # XXX add tests for other functions that take Message arg. +class TestParserBase: + + def test_only_split_on_cr_lf(self): + # The unicode line splitter splits on unicode linebreaks, which are + # more numerous than allowed by the email RFCs; make sure we are only + # splitting on those two. + msg = self.parser( + "Next-Line: not\x85broken\r\n" + "Null: not\x00broken\r\n" + "Vertical-Tab: not\vbroken\r\n" + "Form-Feed: not\fbroken\r\n" + "File-Separator: not\x1Cbroken\r\n" + "Group-Separator: not\x1Dbroken\r\n" + "Record-Separator: not\x1Ebroken\r\n" + "Line-Separator: not\u2028broken\r\n" + "Paragraph-Separator: not\u2029broken\r\n" + "\r\n", + policy=default, + ) + self.assertEqual(msg.items(), [ + ("Next-Line", "not\x85broken"), + ("Null", "not\x00broken"), + ("Vertical-Tab", "not\vbroken"), + ("Form-Feed", "not\fbroken"), + ("File-Separator", "not\x1Cbroken"), + ("Group-Separator", "not\x1Dbroken"), + ("Record-Separator", "not\x1Ebroken"), + ("Line-Separator", "not\u2028broken"), + ("Paragraph-Separator", "not\u2029broken"), + ]) + self.assertEqual(msg.get_payload(), "") + +class TestParser(TestParserBase, TestEmailBase): + parser = staticmethod(email.message_from_string) + +class TestBytesParser(TestParserBase, TestEmailBase): + def parser(self, s, *args, **kw): + return email.message_from_bytes(s.encode(), *args, **kw) + + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index e970a26..630b155 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -654,7 +654,7 @@ class TestEnum(unittest.TestCase): self.Season.SPRING] ) - def test_programatic_function_string(self): + def test_programmatic_function_string(self): SummerMonth = Enum('SummerMonth', 'june july august') lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -671,7 +671,7 @@ class TestEnum(unittest.TestCase): self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_string_with_start(self): + def test_programmatic_function_string_with_start(self): SummerMonth = Enum('SummerMonth', 'june july august', start=10) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -688,7 +688,7 @@ class TestEnum(unittest.TestCase): self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_string_list(self): + def test_programmatic_function_string_list(self): SummerMonth = Enum('SummerMonth', ['june', 'july', 'august']) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -705,7 +705,7 @@ class TestEnum(unittest.TestCase): self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_string_list_with_start(self): + def test_programmatic_function_string_list_with_start(self): SummerMonth = Enum('SummerMonth', ['june', 'july', 'august'], start=20) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -722,7 +722,7 @@ class TestEnum(unittest.TestCase): self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_iterable(self): + def test_programmatic_function_iterable(self): SummerMonth = Enum( 'SummerMonth', (('june', 1), ('july', 2), ('august', 3)) @@ -742,7 +742,7 @@ class TestEnum(unittest.TestCase): self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_from_dict(self): + def test_programmatic_function_from_dict(self): SummerMonth = Enum( 'SummerMonth', OrderedDict((('june', 1), ('july', 2), ('august', 3))) @@ -762,7 +762,7 @@ class TestEnum(unittest.TestCase): self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type(self): + def test_programmatic_function_type(self): SummerMonth = Enum('SummerMonth', 'june july august', type=int) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -778,7 +778,7 @@ class TestEnum(unittest.TestCase): self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type_with_start(self): + def test_programmatic_function_type_with_start(self): SummerMonth = Enum('SummerMonth', 'june july august', type=int, start=30) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -794,7 +794,7 @@ class TestEnum(unittest.TestCase): self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type_from_subclass(self): + def test_programmatic_function_type_from_subclass(self): SummerMonth = IntEnum('SummerMonth', 'june july august') lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -810,7 +810,7 @@ class TestEnum(unittest.TestCase): self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type_from_subclass_with_start(self): + def test_programmatic_function_type_from_subclass_with_start(self): SummerMonth = IntEnum('SummerMonth', 'june july august', start=40) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 458ddc1..96c3a48 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1096,6 +1096,23 @@ class ImportErrorTests(unittest.TestCase): self.assertEqual(exc.name, 'somename') self.assertEqual(exc.path, 'somepath') + msg = "'invalid' is an invalid keyword argument for this function" + with self.assertRaisesRegex(TypeError, msg): + ImportError('test', invalid='keyword') + + with self.assertRaisesRegex(TypeError, msg): + ImportError('test', name='name', invalid='keyword') + + with self.assertRaisesRegex(TypeError, msg): + ImportError('test', path='path', invalid='keyword') + + with self.assertRaisesRegex(TypeError, msg): + ImportError(invalid='keyword') + + msg = "'invalid|another' is an invalid keyword argument for this function" + with self.assertRaisesRegex(TypeError, msg): + ImportError('test', invalid='keyword', another=True) + def test_non_str_argument(self): # Issue #15778 with check_warnings(('', BytesWarning), quiet=True): diff --git a/Lib/test/test_extcall.py b/Lib/test/test_extcall.py index d526b5f..9cb0d38 100644 --- a/Lib/test/test_extcall.py +++ b/Lib/test/test_extcall.py @@ -57,6 +57,10 @@ Here we add keyword arguments Traceback (most recent call last): ... TypeError: f() got multiple values for keyword argument 'a' + >>> f(1, 2, a=3, **{'a': 4}, **{'a': 5}) + Traceback (most recent call last): + ... + TypeError: f() got multiple values for keyword argument 'a' >>> f(1, 2, 3, *[4, 5], **{'a':6, 'b':7}) (1, 2, 3, 4, 5) {'a': 6, 'b': 7} >>> f(1, 2, 3, x=4, y=5, *(6, 7), **{'a':8, 'b': 9}) @@ -229,6 +233,11 @@ What about willful misconduct? ... TypeError: h() argument after * must be an iterable, not function + >>> h(1, *h) + Traceback (most recent call last): + ... + TypeError: h() argument after * must be an iterable, not function + >>> dir(*h) Traceback (most recent call last): ... @@ -245,6 +254,31 @@ not function ... TypeError: h() argument after ** must be a mapping, not function + >>> h(**[]) + Traceback (most recent call last): + ... + TypeError: h() argument after ** must be a mapping, not list + + >>> h(a=1, **h) + Traceback (most recent call last): + ... + TypeError: h() argument after ** must be a mapping, not function + + >>> h(a=1, **[]) + Traceback (most recent call last): + ... + TypeError: h() argument after ** must be a mapping, not list + + >>> h(**{'a': 1}, **h) + Traceback (most recent call last): + ... + TypeError: h() argument after ** must be a mapping, not function + + >>> h(**{'a': 1}, **[]) + Traceback (most recent call last): + ... + TypeError: h() argument after ** must be a mapping, not list + >>> dir(**h) Traceback (most recent call last): ... diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py index 59cc38f..12f2f11 100644 --- a/Lib/test/test_fileio.py +++ b/Lib/test/test_fileio.py @@ -377,7 +377,7 @@ class OtherFileTests: self.assertEqual(f.writable(), True) if sys.platform != "darwin" and \ 'bsd' not in sys.platform and \ - not sys.platform.startswith('sunos'): + not sys.platform.startswith(('sunos', 'aix')): # Somehow /dev/tty appears seekable on some BSDs self.assertEqual(f.seekable(), False) self.assertEqual(f.isatty(), True) diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py index 9b13632..565bb79 100644 --- a/Lib/test/test_format.py +++ b/Lib/test/test_format.py @@ -114,6 +114,7 @@ class FormatTest(unittest.TestCase): testcommon("%o", 100000000000, "1351035564000") testcommon("%d", 10, "10") testcommon("%d", 100000000000, "100000000000") + big = 123456789012345678901234567890 testcommon("%d", big, "123456789012345678901234567890") testcommon("%d", -big, "-123456789012345678901234567890") @@ -133,6 +134,7 @@ class FormatTest(unittest.TestCase): testcommon("%.31d", big, "0123456789012345678901234567890") testcommon("%32.31d", big, " 0123456789012345678901234567890") testcommon("%d", float(big), "123456________________________", 6) + big = 0x1234567890abcdef12345 # 21 hex digits testcommon("%x", big, "1234567890abcdef12345") testcommon("%x", -big, "-1234567890abcdef12345") @@ -156,19 +158,26 @@ class FormatTest(unittest.TestCase): testcommon("%#X", big, "0X1234567890ABCDEF12345") testcommon("%#x", big, "0x1234567890abcdef12345") testcommon("%#x", -big, "-0x1234567890abcdef12345") + testcommon("%#27x", big, " 0x1234567890abcdef12345") + testcommon("%#-27x", big, "0x1234567890abcdef12345 ") + testcommon("%#027x", big, "0x00001234567890abcdef12345") + testcommon("%#.23x", big, "0x001234567890abcdef12345") testcommon("%#.23x", -big, "-0x001234567890abcdef12345") + testcommon("%#27.23x", big, " 0x001234567890abcdef12345") + testcommon("%#-27.23x", big, "0x001234567890abcdef12345 ") + testcommon("%#027.23x", big, "0x00001234567890abcdef12345") testcommon("%#+.23x", big, "+0x001234567890abcdef12345") testcommon("%# .23x", big, " 0x001234567890abcdef12345") testcommon("%#+.23X", big, "+0X001234567890ABCDEF12345") - testcommon("%#-+.23X", big, "+0X001234567890ABCDEF12345") - testcommon("%#-+26.23X", big, "+0X001234567890ABCDEF12345") - testcommon("%#-+27.23X", big, "+0X001234567890ABCDEF12345 ") - testcommon("%#+27.23X", big, " +0X001234567890ABCDEF12345") # next one gets two leading zeroes from precision, and another from the # 0 flag and the width testcommon("%#+027.23X", big, "+0X0001234567890ABCDEF12345") + testcommon("%# 027.23X", big, " 0X0001234567890ABCDEF12345") # same, except no 0 flag testcommon("%#+27.23X", big, " +0X001234567890ABCDEF12345") + testcommon("%#-+27.23x", big, "+0x001234567890abcdef12345 ") + testcommon("%#- 27.23x", big, " 0x001234567890abcdef12345 ") + big = 0o12345670123456701234567012345670 # 32 octal digits testcommon("%o", big, "12345670123456701234567012345670") testcommon("%o", -big, "-12345670123456701234567012345670") @@ -191,51 +200,46 @@ class FormatTest(unittest.TestCase): testcommon("%o", big, "12345670123456701234567012345670") testcommon("%#o", big, "0o12345670123456701234567012345670") testcommon("%#o", -big, "-0o12345670123456701234567012345670") + testcommon("%#38o", big, " 0o12345670123456701234567012345670") + testcommon("%#-38o", big, "0o12345670123456701234567012345670 ") + testcommon("%#038o", big, "0o000012345670123456701234567012345670") + testcommon("%#.34o", big, "0o0012345670123456701234567012345670") testcommon("%#.34o", -big, "-0o0012345670123456701234567012345670") + testcommon("%#38.34o", big, " 0o0012345670123456701234567012345670") + testcommon("%#-38.34o", big, "0o0012345670123456701234567012345670 ") + testcommon("%#038.34o", big, "0o000012345670123456701234567012345670") testcommon("%#+.34o", big, "+0o0012345670123456701234567012345670") testcommon("%# .34o", big, " 0o0012345670123456701234567012345670") - testcommon("%#+.34o", big, "+0o0012345670123456701234567012345670") - testcommon("%#-+.34o", big, "+0o0012345670123456701234567012345670") - testcommon("%#-+37.34o", big, "+0o0012345670123456701234567012345670") - testcommon("%#+37.34o", big, "+0o0012345670123456701234567012345670") + testcommon("%#+38.34o", big, " +0o0012345670123456701234567012345670") + testcommon("%#-+38.34o", big, "+0o0012345670123456701234567012345670 ") + testcommon("%#- 38.34o", big, " 0o0012345670123456701234567012345670 ") + testcommon("%#+038.34o", big, "+0o00012345670123456701234567012345670") + testcommon("%# 038.34o", big, " 0o00012345670123456701234567012345670") # next one gets one leading zero from precision testcommon("%.33o", big, "012345670123456701234567012345670") - # base marker shouldn't change that, since "0" is redundant + # base marker added in spite of leading zero (different to Python 2) testcommon("%#.33o", big, "0o012345670123456701234567012345670") - # but reduce precision, and base marker should add a zero + # reduce precision, and base marker is always added testcommon("%#.32o", big, "0o12345670123456701234567012345670") - # one leading zero from precision, and another from "0" flag & width - testcommon("%034.33o", big, "0012345670123456701234567012345670") - # base marker shouldn't change that - testcommon("%0#34.33o", big, "0o012345670123456701234567012345670") + # one leading zero from precision, plus two from "0" flag & width + testcommon("%035.33o", big, "00012345670123456701234567012345670") + # base marker shouldn't change the size + testcommon("%0#35.33o", big, "0o012345670123456701234567012345670") + # Some small ints, in both Python int and flavors). testcommon("%d", 42, "42") testcommon("%d", -42, "-42") - testcommon("%d", 42, "42") - testcommon("%d", -42, "-42") testcommon("%d", 42.0, "42") testcommon("%#x", 1, "0x1") - testcommon("%#x", 1, "0x1") testcommon("%#X", 1, "0X1") - testcommon("%#X", 1, "0X1") - testcommon("%#o", 1, "0o1") testcommon("%#o", 1, "0o1") testcommon("%#o", 0, "0o0") - testcommon("%#o", 0, "0o0") - testcommon("%o", 0, "0") testcommon("%o", 0, "0") testcommon("%d", 0, "0") - testcommon("%d", 0, "0") testcommon("%#x", 0, "0x0") - testcommon("%#x", 0, "0x0") - testcommon("%#X", 0, "0X0") testcommon("%#X", 0, "0X0") testcommon("%x", 0x42, "42") testcommon("%x", -0x42, "-42") - testcommon("%x", 0x42, "42") - testcommon("%x", -0x42, "-42") - testcommon("%o", 0o42, "42") - testcommon("%o", -0o42, "-42") testcommon("%o", 0o42, "42") testcommon("%o", -0o42, "-42") # alternate float formatting @@ -384,6 +388,13 @@ class FormatTest(unittest.TestCase): else: raise TestFailed('"%*d"%(maxsize, -127) should fail') + def test_nul(self): + # test the null character + testcommon("a\0b", (), 'a\0b') + testcommon("a%cb", (0,), 'a\0b') + testformat("a%sb", ('c\0d',), 'ac\0db') + testcommon(b"a%sb", (b'c\0d',), b'ac\0db') + def test_non_ascii(self): testformat("\u20ac=%f", (1.0,), "\u20ac=1.000000") diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py index 1699852..9df4a54 100644 --- a/Lib/test/test_fractions.py +++ b/Lib/test/test_fractions.py @@ -356,6 +356,19 @@ class FractionTest(unittest.TestCase): z = pow(F(-1), F(1, 2)) self.assertAlmostEqual(z.real, 0) self.assertEqual(z.imag, 1) + # Regression test for #27539. + p = F(-1, 2) ** 0 + self.assertEqual(p, F(1, 1)) + self.assertEqual(p.numerator, 1) + self.assertEqual(p.denominator, 1) + p = F(-1, 2) ** -1 + self.assertEqual(p, F(-2, 1)) + self.assertEqual(p.numerator, -2) + self.assertEqual(p.denominator, 1) + p = F(-1, 2) ** -2 + self.assertEqual(p, F(4, 1)) + self.assertEqual(p.numerator, 4) + self.assertEqual(p.denominator, 1) def testMixedArithmetic(self): self.assertTypedEquals(F(11, 10), F(1, 10) + 1) diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index 9abe984..b431e05 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -1,4 +1,5 @@ import abc +import builtins import collections import copy from itertools import permutations @@ -217,6 +218,33 @@ class TestPartialC(TestPartial, unittest.TestCase): ['{}({!r}, {}, {})'.format(name, capture, args_repr, kwargs_repr) for kwargs_repr in kwargs_reprs]) + def test_recursive_repr(self): + if self.partial is c_functools.partial: + name = 'functools.partial' + else: + name = self.partial.__name__ + + f = self.partial(capture) + f.__setstate__((f, (), {}, {})) + try: + self.assertEqual(repr(f), '%s(%s(...))' % (name, name)) + finally: + f.__setstate__((capture, (), {}, {})) + + f = self.partial(capture) + f.__setstate__((capture, (f,), {}, {})) + try: + self.assertEqual(repr(f), '%s(%r, %s(...))' % (name, capture, name)) + finally: + f.__setstate__((capture, (), {}, {})) + + f = self.partial(capture) + f.__setstate__((capture, (), {'a': f}, {})) + try: + self.assertEqual(repr(f), '%s(%r, a=%s(...))' % (name, capture, name)) + finally: + f.__setstate__((capture, (), {}, {})) + def test_pickle(self): f = self.partial(signature, ['asdf'], bar=[True]) f.attr = [] @@ -297,6 +325,40 @@ class TestPartialC(TestPartial, unittest.TestCase): self.assertEqual(r, ((1, 2), {})) self.assertIs(type(r[0]), tuple) + def test_recursive_pickle(self): + f = self.partial(capture) + f.__setstate__((f, (), {}, {})) + try: + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + with self.assertRaises(RecursionError): + pickle.dumps(f, proto) + finally: + f.__setstate__((capture, (), {}, {})) + + f = self.partial(capture) + f.__setstate__((capture, (f,), {}, {})) + try: + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + f_copy = pickle.loads(pickle.dumps(f, proto)) + try: + self.assertIs(f_copy.args[0], f_copy) + finally: + f_copy.__setstate__((capture, (), {}, {})) + finally: + f.__setstate__((capture, (), {}, {})) + + f = self.partial(capture) + f.__setstate__((capture, (), {'a': f}, {})) + try: + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + f_copy = pickle.loads(pickle.dumps(f, proto)) + try: + self.assertIs(f_copy.keywords['a'], f_copy) + finally: + f_copy.__setstate__((capture, (), {}, {})) + finally: + f.__setstate__((capture, (), {}, {})) + # Issue 6083: Reference counting bug def test_setstate_refcount(self): class BadSequence: @@ -993,7 +1055,7 @@ class TestTotalOrdering(unittest.TestCase): a <= b def test_pickle(self): - for proto in range(4, pickle.HIGHEST_PROTOCOL + 1): + for proto in range(pickle.HIGHEST_PROTOCOL + 1): for name in '__lt__', '__gt__', '__le__', '__ge__': with self.subTest(method=name, proto=proto): method = getattr(Orderable_LT, name) @@ -1101,6 +1163,37 @@ class TestLRU: self.assertEqual(misses, 4) self.assertEqual(currsize, 2) + def test_lru_reentrancy_with_len(self): + # Test to make sure the LRU cache code isn't thrown-off by + # caching the built-in len() function. Since len() can be + # cached, we shouldn't use it inside the lru code itself. + old_len = builtins.len + try: + builtins.len = self.module.lru_cache(4)(len) + for i in [0, 0, 1, 2, 3, 3, 4, 5, 6, 1, 7, 2, 1]: + self.assertEqual(len('abcdefghijklmn'[:i]), i) + finally: + builtins.len = old_len + + def test_lru_type_error(self): + # Regression test for issue #28653. + # lru_cache was leaking when one of the arguments + # wasn't cacheable. + + @functools.lru_cache(maxsize=None) + def infinite_cache(o): + pass + + @functools.lru_cache(maxsize=10) + def limited_cache(o): + pass + + with self.assertRaises(TypeError): + infinite_cache([]) + + with self.assertRaises(TypeError): + limited_cache([]) + def test_lru_with_maxsize_none(self): @self.module.lru_cache(maxsize=None) def fib(n): diff --git a/Lib/test/test_future.py b/Lib/test/test_future.py index beac993..7b072ad 100644 --- a/Lib/test/test_future.py +++ b/Lib/test/test_future.py @@ -2,6 +2,7 @@ import unittest from test import support +import os import re rx = re.compile('\((\S+).py, line (\d+)') @@ -12,6 +13,12 @@ def get_error_location(msg): class FutureTest(unittest.TestCase): + def check_syntax_error(self, err, basename, lineno, offset=0): + self.assertIn('%s.py, line %d' % (basename, lineno), str(err)) + self.assertEqual(os.path.basename(err.filename), basename + '.py') + self.assertEqual(err.lineno, lineno) + self.assertEqual(err.offset, offset) + def test_future1(self): with support.CleanImport('future_test1'): from test import future_test1 @@ -27,68 +34,44 @@ class FutureTest(unittest.TestCase): from test import test_future3 def test_badfuture3(self): - try: + with self.assertRaises(SyntaxError) as cm: from test import badsyntax_future3 - except SyntaxError as msg: - self.assertEqual(get_error_location(msg), ("badsyntax_future3", '3')) - else: - self.fail("expected exception didn't occur") + self.check_syntax_error(cm.exception, "badsyntax_future3", 3) def test_badfuture4(self): - try: + with self.assertRaises(SyntaxError) as cm: from test import badsyntax_future4 - except SyntaxError as msg: - self.assertEqual(get_error_location(msg), ("badsyntax_future4", '3')) - else: - self.fail("expected exception didn't occur") + self.check_syntax_error(cm.exception, "badsyntax_future4", 3) def test_badfuture5(self): - try: + with self.assertRaises(SyntaxError) as cm: from test import badsyntax_future5 - except SyntaxError as msg: - self.assertEqual(get_error_location(msg), ("badsyntax_future5", '4')) - else: - self.fail("expected exception didn't occur") + self.check_syntax_error(cm.exception, "badsyntax_future5", 4) def test_badfuture6(self): - try: + with self.assertRaises(SyntaxError) as cm: from test import badsyntax_future6 - except SyntaxError as msg: - self.assertEqual(get_error_location(msg), ("badsyntax_future6", '3')) - else: - self.fail("expected exception didn't occur") + self.check_syntax_error(cm.exception, "badsyntax_future6", 3) def test_badfuture7(self): - try: + with self.assertRaises(SyntaxError) as cm: from test import badsyntax_future7 - except SyntaxError as msg: - self.assertEqual(get_error_location(msg), ("badsyntax_future7", '3')) - else: - self.fail("expected exception didn't occur") + self.check_syntax_error(cm.exception, "badsyntax_future7", 3, 53) def test_badfuture8(self): - try: + with self.assertRaises(SyntaxError) as cm: from test import badsyntax_future8 - except SyntaxError as msg: - self.assertEqual(get_error_location(msg), ("badsyntax_future8", '3')) - else: - self.fail("expected exception didn't occur") + self.check_syntax_error(cm.exception, "badsyntax_future8", 3) def test_badfuture9(self): - try: + with self.assertRaises(SyntaxError) as cm: from test import badsyntax_future9 - except SyntaxError as msg: - self.assertEqual(get_error_location(msg), ("badsyntax_future9", '3')) - else: - self.fail("expected exception didn't occur") + self.check_syntax_error(cm.exception, "badsyntax_future9", 3, 0) def test_badfuture10(self): - try: + with self.assertRaises(SyntaxError) as cm: from test import badsyntax_future10 - except SyntaxError as msg: - self.assertEqual(get_error_location(msg), ("badsyntax_future10", '3')) - else: - self.fail("expected exception didn't occur") + self.check_syntax_error(cm.exception, "badsyntax_future10", 3, 0) def test_parserhack(self): # test that the parser.c::future_hack function works as expected diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py index 1f0867d..a4d684b 100644 --- a/Lib/test/test_gc.py +++ b/Lib/test/test_gc.py @@ -1,7 +1,7 @@ import unittest from test.support import (verbose, refcount_test, run_unittest, - strip_python_stderr, cpython_only, start_threads, - temp_dir) + strip_python_stderr, cpython_only, start_threads, + temp_dir, requires_type_collecting) from test.support.script_helper import assert_python_ok, make_script import sys @@ -118,6 +118,7 @@ class GCTests(unittest.TestCase): del a self.assertNotEqual(gc.collect(), 0) + @requires_type_collecting def test_newinstance(self): class A(object): pass @@ -678,6 +679,7 @@ class GCTests(unittest.TestCase): stderr = run_command(code % "gc.DEBUG_SAVEALL") self.assertNotIn(b"uncollectable objects at shutdown", stderr) + @requires_type_collecting def test_gc_main_module_at_shutdown(self): # Create a reference cycle through the __main__ module and check # it gets collected at interpreter shutdown. @@ -692,6 +694,7 @@ class GCTests(unittest.TestCase): rc, out, err = assert_python_ok('-c', code) self.assertEqual(out.strip(), b'__del__ called') + @requires_type_collecting def test_gc_ordinary_module_at_shutdown(self): # Same as above, but with a non-__main__ module. with temp_dir() as script_dir: diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py index cd7d292..3db10b6 100644 --- a/Lib/test/test_gdb.py +++ b/Lib/test/test_gdb.py @@ -25,6 +25,7 @@ def get_gdb_version(): try: proc = subprocess.Popen(["gdb", "-nx", "--version"], stdout=subprocess.PIPE, + stderr=subprocess.PIPE, universal_newlines=True) with proc: version = proc.communicate()[0] @@ -91,7 +92,7 @@ if not gdbpy_version: raise unittest.SkipTest("gdb not built with embedded python support") # Verify that "gdb" can load our custom hooks, as OS security settings may -# disallow this without a customised .gdbinit. +# disallow this without a customized .gdbinit. _, gdbpy_errors = run_gdb('--args', sys.executable) if "auto-loading has been declined" in gdbpy_errors: msg = "gdb security settings prevent use of custom hooks: " diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py index 3f82462..cd6a43d 100644 --- a/Lib/test/test_generators.py +++ b/Lib/test/test_generators.py @@ -277,6 +277,27 @@ class ExceptionTest(unittest.TestCase): # hence no warning. next(g) + def test_return_tuple(self): + def g(): + return (yield 1) + + gen = g() + self.assertEqual(next(gen), 1) + with self.assertRaises(StopIteration) as cm: + gen.send((2,)) + self.assertEqual(cm.exception.value, (2,)) + + def test_return_stopiteration(self): + def g(): + return (yield 1) + + gen = g() + self.assertEqual(next(gen), 1) + with self.assertRaises(StopIteration) as cm: + gen.send(StopIteration(2)) + self.assertIsInstance(cm.exception.value, StopIteration) + self.assertEqual(cm.exception.value.value, 2) + class YieldFromTests(unittest.TestCase): def test_generator_gi_yieldfrom(self): diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py index 86fc2de..b77d1d7 100644 --- a/Lib/test/test_genericpath.py +++ b/Lib/test/test_genericpath.py @@ -274,6 +274,15 @@ class TestGenericTest(GenericTest, unittest.TestCase): # and is only meant to be inherited by others. pathmodule = genericpath + def test_null_bytes(self): + for attr in GenericTest.common_attributes: + # os.path.commonprefix doesn't raise ValueError + if attr == 'commonprefix': + continue + with self.subTest(attr=attr): + with self.assertRaises(ValueError) as cm: + getattr(self.pathmodule, attr)('/tmp\x00abcds') + self.assertIn('embedded null', str(cm.exception)) # Following TestCase is not supposed to be run from test_genericpath. # It is inherited by other test modules (macpath, ntpath, posixpath). diff --git a/Lib/test/test_gettext.py b/Lib/test/test_gettext.py index de610c7..f57e546 100644 --- a/Lib/test/test_gettext.py +++ b/Lib/test/test_gettext.py @@ -306,7 +306,9 @@ class PluralFormsTestCase(GettextBaseTest): x = t.ngettext('There is %s file', 'There are %s files', 2) eq(x, 'Hay %s ficheros') - def test_hu(self): + # Examples from http://www.gnu.org/software/gettext/manual/gettext.html + + def test_ja(self): eq = self.assertEqual f = gettext.c2py('0') s = ''.join([ str(f(x)) for x in range(200) ]) @@ -324,6 +326,12 @@ class PluralFormsTestCase(GettextBaseTest): s = ''.join([ str(f(x)) for x in range(200) ]) eq(s, "00111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111") + def test_lv(self): + eq = self.assertEqual + f = gettext.c2py('n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2') + s = ''.join([ str(f(x)) for x in range(200) ]) + eq(s, "20111111111111111111101111111110111111111011111111101111111110111111111011111111101111111110111111111011111111111111111110111111111011111111101111111110111111111011111111101111111110111111111011111111") + def test_gd(self): eq = self.assertEqual f = gettext.c2py('n==1 ? 0 : n==2 ? 1 : 2') @@ -337,6 +345,12 @@ class PluralFormsTestCase(GettextBaseTest): s = ''.join([ str(f(x)) for x in range(200) ]) eq(s, "20122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222") + def test_ro(self): + eq = self.assertEqual + f = gettext.c2py('n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2') + s = ''.join([ str(f(x)) for x in range(200) ]) + eq(s, "10111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222") + def test_lt(self): eq = self.assertEqual f = gettext.c2py('n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2') @@ -349,6 +363,12 @@ class PluralFormsTestCase(GettextBaseTest): s = ''.join([ str(f(x)) for x in range(200) ]) eq(s, "20111222222222222222201112222220111222222011122222201112222220111222222011122222201112222220111222222011122222222222222220111222222011122222201112222220111222222011122222201112222220111222222011122222") + def test_cs(self): + eq = self.assertEqual + f = gettext.c2py('(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2') + s = ''.join([ str(f(x)) for x in range(200) ]) + eq(s, "20111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222") + def test_pl(self): eq = self.assertEqual f = gettext.c2py('n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2') @@ -361,10 +381,77 @@ class PluralFormsTestCase(GettextBaseTest): s = ''.join([ str(f(x)) for x in range(200) ]) eq(s, "30122333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333012233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333") + def test_ar(self): + eq = self.assertEqual + f = gettext.c2py('n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5') + s = ''.join([ str(f(x)) for x in range(200) ]) + eq(s, "01233333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445553333333344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444") + def test_security(self): raises = self.assertRaises # Test for a dangerous expression raises(ValueError, gettext.c2py, "os.chmod('/etc/passwd',0777)") + # issue28563 + raises(ValueError, gettext.c2py, '"(eval(foo) && ""') + raises(ValueError, gettext.c2py, 'f"{os.system(\'sh\')}"') + # Maximum recursion depth exceeded during compilation + raises(ValueError, gettext.c2py, 'n+'*10000 + 'n') + self.assertEqual(gettext.c2py('n+'*100 + 'n')(1), 101) + # MemoryError during compilation + raises(ValueError, gettext.c2py, '('*100 + 'n' + ')'*100) + # Maximum recursion depth exceeded in C to Python translator + raises(ValueError, gettext.c2py, '('*10000 + 'n' + ')'*10000) + self.assertEqual(gettext.c2py('('*20 + 'n' + ')'*20)(1), 1) + + def test_chained_comparison(self): + # C doesn't chain comparison as Python so 2 == 2 == 2 gets different results + f = gettext.c2py('n == n == n') + self.assertEqual(''.join(str(f(x)) for x in range(3)), '010') + f = gettext.c2py('1 < n == n') + self.assertEqual(''.join(str(f(x)) for x in range(3)), '100') + f = gettext.c2py('n == n < 2') + self.assertEqual(''.join(str(f(x)) for x in range(3)), '010') + f = gettext.c2py('0 < n < 2') + self.assertEqual(''.join(str(f(x)) for x in range(3)), '111') + + def test_decimal_number(self): + self.assertEqual(gettext.c2py('0123')(1), 123) + + def test_invalid_syntax(self): + invalid_expressions = [ + 'x>1', '(n>1', 'n>1)', '42**42**42', '0xa', '1.0', '1e2', + 'n>0x1', '+n', '-n', 'n()', 'n(1)', '1+', 'nn', 'n n', + ] + for expr in invalid_expressions: + with self.assertRaises(ValueError): + gettext.c2py(expr) + + def test_nested_condition_operator(self): + self.assertEqual(gettext.c2py('n?1?2:3:4')(0), 4) + self.assertEqual(gettext.c2py('n?1?2:3:4')(1), 2) + self.assertEqual(gettext.c2py('n?1:3?4:5')(0), 4) + self.assertEqual(gettext.c2py('n?1:3?4:5')(1), 1) + + def test_division(self): + f = gettext.c2py('2/n*3') + self.assertEqual(f(1), 6) + self.assertEqual(f(2), 3) + self.assertEqual(f(3), 0) + self.assertEqual(f(-1), -6) + self.assertRaises(ZeroDivisionError, f, 0) + + def test_plural_number(self): + f = gettext.c2py('n != 1') + self.assertEqual(f(1), 0) + self.assertEqual(f(2), 1) + self.assertEqual(f(1.0), 0) + self.assertEqual(f(2.0), 1) + self.assertEqual(f(1.1), 1) + self.assertRaises(TypeError, f, '2') + self.assertRaises(TypeError, f, b'2') + self.assertRaises(TypeError, f, []) + self.assertRaises(TypeError, f, object()) + class GNUTranslationParsingTest(GettextBaseTest): def test_plural_form_error_issue17898(self): diff --git a/Lib/test/test_http_cookiejar.py b/Lib/test/test_http_cookiejar.py index 585838b..49c01ae 100644 --- a/Lib/test/test_http_cookiejar.py +++ b/Lib/test/test_http_cookiejar.py @@ -31,6 +31,28 @@ class DateTimeTests(unittest.TestCase): self.assertRegex(text, r"^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$", "bad time2isoz format: %s %s" % (az, bz)) + def test_time2netscape(self): + base = 1019227000 + day = 24*3600 + self.assertEqual(time2netscape(base), "Fri, 19-Apr-2002 14:36:40 GMT") + self.assertEqual(time2netscape(base+day), + "Sat, 20-Apr-2002 14:36:40 GMT") + + self.assertEqual(time2netscape(base+2*day), + "Sun, 21-Apr-2002 14:36:40 GMT") + + self.assertEqual(time2netscape(base+3*day), + "Mon, 22-Apr-2002 14:36:40 GMT") + + az = time2netscape() + bz = time2netscape(500000) + for text in (az, bz): + # Format "%s, %02d-%s-%04d %02d:%02d:%02d GMT" + self.assertRegex( + text, + r"[a-zA-Z]{3}, \d{2}-[a-zA-Z]{3}-\d{4} \d{2}:\d{2}:\d{2} GMT$", + "bad time2netscape format: %s %s" % (az, bz)) + def test_http2time(self): def parse_date(text): return time.gmtime(http2time(text))[:6] @@ -374,7 +396,7 @@ class CookieTests(unittest.TestCase): ## comma-separated list, it'll be a headache to parse (at least my head ## starts hurting every time I think of that code). ## - Expires: You'll get all sorts of date formats in the expires, -## including emtpy expires attributes ("expires="). Be as flexible as you +## including empty expires attributes ("expires="). Be as flexible as you ## can, and certainly don't expect the weekday to be there; if you can't ## parse it, just ignore it and pretend it's a session cookie. ## - Domain-matching: Netscape uses the 2-dot rule for _all_ domains, not diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 329f068..61ed6bb 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -283,6 +283,36 @@ class HeaderTests(TestCase): self.assertEqual(resp.getheader('First'), 'val') self.assertEqual(resp.getheader('Second'), 'val') + def test_parse_all_octets(self): + # Ensure no valid header field octet breaks the parser + body = ( + b'HTTP/1.1 200 OK\r\n' + b"!#$%&'*+-.^_`|~: value\r\n" # Special token characters + b'VCHAR: ' + bytes(range(0x21, 0x7E + 1)) + b'\r\n' + b'obs-text: ' + bytes(range(0x80, 0xFF + 1)) + b'\r\n' + b'obs-fold: text\r\n' + b' folded with space\r\n' + b'\tfolded with tab\r\n' + b'Content-Length: 0\r\n' + b'\r\n' + ) + sock = FakeSocket(body) + resp = client.HTTPResponse(sock) + resp.begin() + self.assertEqual(resp.getheader('Content-Length'), '0') + self.assertEqual(resp.msg['Content-Length'], '0') + self.assertEqual(resp.getheader("!#$%&'*+-.^_`|~"), 'value') + self.assertEqual(resp.msg["!#$%&'*+-.^_`|~"], 'value') + vchar = ''.join(map(chr, range(0x21, 0x7E + 1))) + self.assertEqual(resp.getheader('VCHAR'), vchar) + self.assertEqual(resp.msg['VCHAR'], vchar) + self.assertIsNotNone(resp.getheader('obs-text')) + self.assertIn('obs-text', resp.msg) + for folded in (resp.getheader('obs-fold'), resp.msg['obs-fold']): + self.assertTrue(folded.startswith('text')) + self.assertIn(' folded with space', folded) + self.assertTrue(folded.endswith('folded with tab')) + def test_invalid_headers(self): conn = client.HTTPConnection('example.com') conn.sock = FakeSocket('') @@ -1242,7 +1272,7 @@ class SourceAddressTest(TestCase): def testHTTPSConnectionSourceAddress(self): self.conn = client.HTTPSConnection(HOST, self.port, source_address=('', self.source_port)) - # We don't test anything here other the constructor not barfing as + # We don't test anything here other than the constructor not barfing as # this code doesn't deal with setting up an active running SSL server # for an ssl_wrapped connect() to actually return from. @@ -1402,6 +1432,7 @@ class HTTPSTest(TestCase): resp = h.getresponse() h.close() self.assertIn('nginx', resp.getheader('server')) + resp.close() @support.system_must_validate_cert def test_networked_trusted_by_default_cert(self): @@ -1412,6 +1443,7 @@ class HTTPSTest(TestCase): h.request('GET', '/') resp = h.getresponse() content_type = resp.getheader('content-type') + resp.close() h.close() self.assertIn('text/html', content_type) @@ -1427,6 +1459,7 @@ class HTTPSTest(TestCase): h.request('GET', '/') resp = h.getresponse() server_string = resp.getheader('server') + resp.close() h.close() self.assertIn('nginx', server_string) @@ -1460,8 +1493,10 @@ class HTTPSTest(TestCase): context.verify_mode = ssl.CERT_REQUIRED context.load_verify_locations(CERT_localhost) h = client.HTTPSConnection('localhost', server.port, context=context) + self.addCleanup(h.close) h.request('GET', '/nonexistent') resp = h.getresponse() + self.addCleanup(resp.close) self.assertEqual(resp.status, 404) def test_local_bad_hostname(self): @@ -1486,13 +1521,18 @@ class HTTPSTest(TestCase): check_hostname=False) h.request('GET', '/nonexistent') resp = h.getresponse() + resp.close() + h.close() self.assertEqual(resp.status, 404) # The context's check_hostname setting is used if one isn't passed to # HTTPSConnection. context.check_hostname = False h = client.HTTPSConnection('localhost', server.port, context=context) h.request('GET', '/nonexistent') - self.assertEqual(h.getresponse().status, 404) + resp = h.getresponse() + self.assertEqual(resp.status, 404) + resp.close() + h.close() # Passing check_hostname to HTTPSConnection should override the # context's setting. h = client.HTTPSConnection('localhost', server.port, context=context, diff --git a/Lib/test/test_imaplib.py b/Lib/test/test_imaplib.py index 07157f5..6e4a90f 100644 --- a/Lib/test/test_imaplib.py +++ b/Lib/test/test_imaplib.py @@ -10,10 +10,12 @@ import os.path import socketserver import time import calendar +import inspect from test.support import (reap_threads, verbose, transient_internet, run_with_tz, run_with_locale) import unittest +from unittest import mock from datetime import datetime, timezone, timedelta try: import ssl @@ -174,6 +176,334 @@ class SimpleIMAPHandler(socketserver.StreamRequestHandler): self._send_tagged(tag, 'OK', 'LOGIN completed') +class NewIMAPTestsMixin(): + client = None + + def _setup(self, imap_handler, connect=True): + """ + Sets up imap_handler for tests. imap_handler should inherit from either: + - SimpleIMAPHandler - for testing IMAP commands, + - socketserver.StreamRequestHandler - if raw access to stream is needed. + Returns (client, server). + """ + class TestTCPServer(self.server_class): + def handle_error(self, request, client_address): + """ + End request and raise the error if one occurs. + """ + self.close_request(request) + self.server_close() + raise + + self.addCleanup(self._cleanup) + self.server = self.server_class((support.HOST, 0), imap_handler) + self.thread = threading.Thread( + name=self._testMethodName+'-server', + target=self.server.serve_forever, + # Short poll interval to make the test finish quickly. + # Time between requests is short enough that we won't wake + # up spuriously too many times. + kwargs={'poll_interval': 0.01}) + self.thread.daemon = True # In case this function raises. + self.thread.start() + + if connect: + self.client = self.imap_class(*self.server.server_address) + + return self.client, self.server + + def _cleanup(self): + """ + Cleans up the test server. This method should not be called manually, + it is added to the cleanup queue in the _setup method already. + """ + # if logout was called already we'd raise an exception trying to + # shutdown the client once again + if self.client is not None and self.client.state != 'LOGOUT': + self.client.shutdown() + # cleanup the server + self.server.shutdown() + self.server.server_close() + self.thread.join(3.0) + + def test_EOF_without_complete_welcome_message(self): + # http://bugs.python.org/issue5949 + class EOFHandler(socketserver.StreamRequestHandler): + def handle(self): + self.wfile.write(b'* OK') + _, server = self._setup(EOFHandler, connect=False) + self.assertRaises(imaplib.IMAP4.abort, self.imap_class, + *server.server_address) + + def test_line_termination(self): + class BadNewlineHandler(SimpleIMAPHandler): + def cmd_CAPABILITY(self, tag, args): + self._send(b'* CAPABILITY IMAP4rev1 AUTH\n') + self._send_tagged(tag, 'OK', 'CAPABILITY completed') + _, server = self._setup(BadNewlineHandler, connect=False) + self.assertRaises(imaplib.IMAP4.abort, self.imap_class, + *server.server_address) + + def test_enable_raises_error_if_not_AUTH(self): + class EnableHandler(SimpleIMAPHandler): + capabilities = 'AUTH ENABLE UTF8=ACCEPT' + client, _ = self._setup(EnableHandler) + self.assertFalse(client.utf8_enabled) + with self.assertRaisesRegex(imaplib.IMAP4.error, 'ENABLE.*NONAUTH'): + client.enable('foo') + self.assertFalse(client.utf8_enabled) + + def test_enable_raises_error_if_no_capability(self): + client, _ = self._setup(SimpleIMAPHandler) + with self.assertRaisesRegex(imaplib.IMAP4.error, + 'does not support ENABLE'): + client.enable('foo') + + def test_enable_UTF8_raises_error_if_not_supported(self): + client, _ = self._setup(SimpleIMAPHandler) + typ, data = client.login('user', 'pass') + self.assertEqual(typ, 'OK') + with self.assertRaisesRegex(imaplib.IMAP4.error, + 'does not support ENABLE'): + client.enable('UTF8=ACCEPT') + + def test_enable_UTF8_True_append(self): + class UTF8AppendServer(SimpleIMAPHandler): + capabilities = 'ENABLE UTF8=ACCEPT' + def cmd_ENABLE(self, tag, args): + self._send_tagged(tag, 'OK', 'ENABLE successful') + def cmd_AUTHENTICATE(self, tag, args): + self._send_textline('+') + self.server.response = yield + self._send_tagged(tag, 'OK', 'FAKEAUTH successful') + def cmd_APPEND(self, tag, args): + self._send_textline('+') + self.server.response = yield + self._send_tagged(tag, 'OK', 'okay') + client, server = self._setup(UTF8AppendServer) + self.assertEqual(client._encoding, 'ascii') + code, _ = client.authenticate('MYAUTH', lambda x: b'fake') + self.assertEqual(code, 'OK') + self.assertEqual(server.response, b'ZmFrZQ==\r\n') # b64 encoded 'fake' + code, _ = client.enable('UTF8=ACCEPT') + self.assertEqual(code, 'OK') + self.assertEqual(client._encoding, 'utf-8') + msg_string = 'Subject: üñí©öðé' + typ, data = client.append(None, None, None, msg_string.encode('utf-8')) + self.assertEqual(typ, 'OK') + self.assertEqual(server.response, + ('UTF8 (%s)\r\n' % msg_string).encode('utf-8')) + + def test_search_disallows_charset_in_utf8_mode(self): + class UTF8Server(SimpleIMAPHandler): + capabilities = 'AUTH ENABLE UTF8=ACCEPT' + def cmd_ENABLE(self, tag, args): + self._send_tagged(tag, 'OK', 'ENABLE successful') + def cmd_AUTHENTICATE(self, tag, args): + self._send_textline('+') + self.server.response = yield + self._send_tagged(tag, 'OK', 'FAKEAUTH successful') + client, _ = self._setup(UTF8Server) + typ, _ = client.authenticate('MYAUTH', lambda x: b'fake') + self.assertEqual(typ, 'OK') + typ, _ = client.enable('UTF8=ACCEPT') + self.assertEqual(typ, 'OK') + self.assertTrue(client.utf8_enabled) + with self.assertRaisesRegex(imaplib.IMAP4.error, 'charset.*UTF8'): + client.search('foo', 'bar') + + def test_bad_auth_name(self): + class MyServer(SimpleIMAPHandler): + def cmd_AUTHENTICATE(self, tag, args): + self._send_tagged(tag, 'NO', + 'unrecognized authentication type {}'.format(args[0])) + client, _ = self._setup(MyServer) + with self.assertRaisesRegex(imaplib.IMAP4.error, + 'unrecognized authentication type METHOD'): + client.authenticate('METHOD', lambda: 1) + + def test_invalid_authentication(self): + class MyServer(SimpleIMAPHandler): + def cmd_AUTHENTICATE(self, tag, args): + self._send_textline('+') + self.response = yield + self._send_tagged(tag, 'NO', '[AUTHENTICATIONFAILED] invalid') + client, _ = self._setup(MyServer) + with self.assertRaisesRegex(imaplib.IMAP4.error, + r'\[AUTHENTICATIONFAILED\] invalid'): + client.authenticate('MYAUTH', lambda x: b'fake') + + def test_valid_authentication_bytes(self): + class MyServer(SimpleIMAPHandler): + def cmd_AUTHENTICATE(self, tag, args): + self._send_textline('+') + self.server.response = yield + self._send_tagged(tag, 'OK', 'FAKEAUTH successful') + client, server = self._setup(MyServer) + code, _ = client.authenticate('MYAUTH', lambda x: b'fake') + self.assertEqual(code, 'OK') + self.assertEqual(server.response, b'ZmFrZQ==\r\n') # b64 encoded 'fake' + + def test_valid_authentication_plain_text(self): + class MyServer(SimpleIMAPHandler): + def cmd_AUTHENTICATE(self, tag, args): + self._send_textline('+') + self.server.response = yield + self._send_tagged(tag, 'OK', 'FAKEAUTH successful') + client, server = self._setup(MyServer) + code, _ = client.authenticate('MYAUTH', lambda x: 'fake') + self.assertEqual(code, 'OK') + self.assertEqual(server.response, b'ZmFrZQ==\r\n') # b64 encoded 'fake' + + def test_login_cram_md5_bytes(self): + class AuthHandler(SimpleIMAPHandler): + capabilities = 'LOGINDISABLED AUTH=CRAM-MD5' + def cmd_AUTHENTICATE(self, tag, args): + self._send_textline('+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2Uucm' + 'VzdG9uLm1jaS5uZXQ=') + r = yield + if (r == b'dGltIGYxY2E2YmU0NjRiOWVmYT' + b'FjY2E2ZmZkNmNmMmQ5ZjMy\r\n'): + self._send_tagged(tag, 'OK', 'CRAM-MD5 successful') + else: + self._send_tagged(tag, 'NO', 'No access') + client, _ = self._setup(AuthHandler) + self.assertTrue('AUTH=CRAM-MD5' in client.capabilities) + ret, _ = client.login_cram_md5("tim", b"tanstaaftanstaaf") + self.assertEqual(ret, "OK") + + def test_login_cram_md5_plain_text(self): + class AuthHandler(SimpleIMAPHandler): + capabilities = 'LOGINDISABLED AUTH=CRAM-MD5' + def cmd_AUTHENTICATE(self, tag, args): + self._send_textline('+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2Uucm' + 'VzdG9uLm1jaS5uZXQ=') + r = yield + if (r == b'dGltIGYxY2E2YmU0NjRiOWVmYT' + b'FjY2E2ZmZkNmNmMmQ5ZjMy\r\n'): + self._send_tagged(tag, 'OK', 'CRAM-MD5 successful') + else: + self._send_tagged(tag, 'NO', 'No access') + client, _ = self._setup(AuthHandler) + self.assertTrue('AUTH=CRAM-MD5' in client.capabilities) + ret, _ = client.login_cram_md5("tim", "tanstaaftanstaaf") + self.assertEqual(ret, "OK") + + def test_aborted_authentication(self): + class MyServer(SimpleIMAPHandler): + def cmd_AUTHENTICATE(self, tag, args): + self._send_textline('+') + self.response = yield + if self.response == b'*\r\n': + self._send_tagged( + tag, + 'NO', + '[AUTHENTICATIONFAILED] aborted') + else: + self._send_tagged(tag, 'OK', 'MYAUTH successful') + client, _ = self._setup(MyServer) + with self.assertRaisesRegex(imaplib.IMAP4.error, + r'\[AUTHENTICATIONFAILED\] aborted'): + client.authenticate('MYAUTH', lambda x: None) + + @mock.patch('imaplib._MAXLINE', 10) + def test_linetoolong(self): + class TooLongHandler(SimpleIMAPHandler): + def handle(self): + # send response line longer than the limit set in the next line + self.wfile.write(b'* OK ' + 11 * b'x' + b'\r\n') + _, server = self._setup(TooLongHandler, connect=False) + with self.assertRaisesRegex(imaplib.IMAP4.error, + 'got more than 10 bytes'): + self.imap_class(*server.server_address) + + def test_simple_with_statement(self): + _, server = self._setup(SimpleIMAPHandler, connect=False) + with self.imap_class(*server.server_address): + pass + + def test_with_statement(self): + _, server = self._setup(SimpleIMAPHandler, connect=False) + with self.imap_class(*server.server_address) as imap: + imap.login('user', 'pass') + self.assertEqual(server.logged, 'user') + self.assertIsNone(server.logged) + + def test_with_statement_logout(self): + # It is legal to log out explicitly inside the with block + _, server = self._setup(SimpleIMAPHandler, connect=False) + with self.imap_class(*server.server_address) as imap: + imap.login('user', 'pass') + self.assertEqual(server.logged, 'user') + imap.logout() + self.assertIsNone(server.logged) + self.assertIsNone(server.logged) + + # command tests + + def test_login(self): + client, _ = self._setup(SimpleIMAPHandler) + typ, data = client.login('user', 'pass') + self.assertEqual(typ, 'OK') + self.assertEqual(data[0], b'LOGIN completed') + self.assertEqual(client.state, 'AUTH') + + def test_logout(self): + client, _ = self._setup(SimpleIMAPHandler) + typ, data = client.login('user', 'pass') + self.assertEqual(typ, 'OK') + self.assertEqual(data[0], b'LOGIN completed') + typ, data = client.logout() + self.assertEqual(typ, 'BYE') + self.assertEqual(data[0], b'IMAP4ref1 Server logging out') + self.assertEqual(client.state, 'LOGOUT') + + def test_lsub(self): + class LsubCmd(SimpleIMAPHandler): + def cmd_LSUB(self, tag, args): + self._send_textline('* LSUB () "." directoryA') + return self._send_tagged(tag, 'OK', 'LSUB completed') + client, _ = self._setup(LsubCmd) + client.login('user', 'pass') + typ, data = client.lsub() + self.assertEqual(typ, 'OK') + self.assertEqual(data[0], b'() "." directoryA') + + +class NewIMAPTests(NewIMAPTestsMixin, unittest.TestCase): + imap_class = imaplib.IMAP4 + server_class = socketserver.TCPServer + + +@unittest.skipUnless(ssl, "SSL not available") +class NewIMAPSSLTests(NewIMAPTestsMixin, unittest.TestCase): + imap_class = imaplib.IMAP4_SSL + server_class = SecureTCPServer + + def test_ssl_raises(self): + ssl_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + ssl_context.verify_mode = ssl.CERT_REQUIRED + ssl_context.check_hostname = True + ssl_context.load_verify_locations(CAFILE) + + with self.assertRaisesRegex(ssl.CertificateError, + "hostname '127.0.0.1' doesn't match 'localhost'"): + _, server = self._setup(SimpleIMAPHandler) + client = self.imap_class(*server.server_address, + ssl_context=ssl_context) + client.shutdown() + + def test_ssl_verified(self): + ssl_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + ssl_context.verify_mode = ssl.CERT_REQUIRED + ssl_context.check_hostname = True + ssl_context.load_verify_locations(CAFILE) + + _, server = self._setup(SimpleIMAPHandler) + client = self.imap_class("localhost", server.server_address[1], + ssl_context=ssl_context) + client.shutdown() + class ThreadedNetworkedTests(unittest.TestCase): server_class = socketserver.TCPServer imap_class = imaplib.IMAP4 diff --git a/Lib/test/test_importlib/extension/test_case_sensitivity.py b/Lib/test/test_importlib/extension/test_case_sensitivity.py index 706c3e4..c112ca7 100644 --- a/Lib/test/test_importlib/extension/test_case_sensitivity.py +++ b/Lib/test/test_importlib/extension/test_case_sensitivity.py @@ -5,6 +5,7 @@ import unittest from .. import util +importlib = util.import_importlib('importlib') machinery = util.import_importlib('importlib.machinery') @@ -12,7 +13,7 @@ machinery = util.import_importlib('importlib.machinery') @unittest.skipIf(util.EXTENSIONS.filename is None, '_testcapi not available') @util.case_insensitive_tests -class ExtensionModuleCaseSensitivityTest: +class ExtensionModuleCaseSensitivityTest(util.CASEOKTestBase): def find_module(self): good_name = util.EXTENSIONS.name @@ -26,25 +27,22 @@ class ExtensionModuleCaseSensitivityTest: def test_case_sensitive(self): with support.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') - if b'PYTHONCASEOK' in _bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.caseok_env_changed(should_exist=False) loader = self.find_module() self.assertIsNone(loader) def test_case_insensitivity(self): with support.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') - if b'PYTHONCASEOK' not in _bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.caseok_env_changed(should_exist=True) loader = self.find_module() self.assertTrue(hasattr(loader, 'load_module')) (Frozen_ExtensionCaseSensitivity, Source_ExtensionCaseSensitivity - ) = util.test_both(ExtensionModuleCaseSensitivityTest, machinery=machinery) + ) = util.test_both(ExtensionModuleCaseSensitivityTest, importlib=importlib, + machinery=machinery) if __name__ == '__main__': diff --git a/Lib/test/test_importlib/extension/test_loader.py b/Lib/test/test_importlib/extension/test_loader.py index 154a793..8d20040 100644 --- a/Lib/test/test_importlib/extension/test_loader.py +++ b/Lib/test/test_importlib/extension/test_loader.py @@ -212,6 +212,15 @@ class MultiPhaseExtensionModuleTests(abc.LoaderTests): self.assertNotEqual(type(mod), type(unittest)) self.assertEqual(mod.three, 3) + # issue 27782 + def test_nonmodule_with_methods(self): + '''Test creating a non-module object with methods defined''' + name = self.name + '_nonmodule_with_methods' + mod = self.load_module_by_name(name) + self.assertNotEqual(type(mod), type(unittest)) + self.assertEqual(mod.three, 3) + self.assertEqual(mod.bar(10, 1), 9) + def test_null_slots(self): '''Test that NULL slots aren't a problem''' name = self.name + '_null_slots' diff --git a/Lib/test/test_importlib/import_/test_meta_path.py b/Lib/test/test_importlib/import_/test_meta_path.py index c452cdd..5a41e89 100644 --- a/Lib/test/test_importlib/import_/test_meta_path.py +++ b/Lib/test/test_importlib/import_/test_meta_path.py @@ -76,7 +76,6 @@ class CallSignature: self.__import__(mod_name) assert len(log) == 1 args = log[0][0] - kwargs = log[0][1] # Assuming all arguments are positional. self.assertEqual(args[0], mod_name) self.assertIsNone(args[1]) diff --git a/Lib/test/test_importlib/source/test_case_sensitivity.py b/Lib/test/test_importlib/source/test_case_sensitivity.py index c274b38..34b86cd 100644 --- a/Lib/test/test_importlib/source/test_case_sensitivity.py +++ b/Lib/test/test_importlib/source/test_case_sensitivity.py @@ -11,7 +11,7 @@ import unittest @util.case_insensitive_tests -class CaseSensitivityTest: +class CaseSensitivityTest(util.CASEOKTestBase): """PEP 235 dictates that on case-preserving, case-insensitive file systems that imports are case-sensitive unless the PYTHONCASEOK environment @@ -42,9 +42,7 @@ class CaseSensitivityTest: def test_sensitive(self): with test_support.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') - if b'PYTHONCASEOK' in self.importlib._bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.caseok_env_changed(should_exist=False) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) @@ -53,9 +51,7 @@ class CaseSensitivityTest: def test_insensitive(self): with test_support.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') - if b'PYTHONCASEOK' not in self.importlib._bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.caseok_env_changed(should_exist=True) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) diff --git a/Lib/test/test_importlib/test_lazy.py b/Lib/test/test_importlib/test_lazy.py index 774b7a4..cc383c2 100644 --- a/Lib/test/test_importlib/test_lazy.py +++ b/Lib/test/test_importlib/test_lazy.py @@ -1,6 +1,8 @@ import importlib from importlib import abc from importlib import util +import sys +import types import unittest from . import util as test_util @@ -122,12 +124,20 @@ class LazyLoaderTests(unittest.TestCase): self.assertFalse(hasattr(module, '__name__')) def test_module_substitution_error(self): - source_code = 'import sys; sys.modules[__name__] = 42' - module = self.new_module(source_code) with test_util.uncache(TestingImporter.module_name): - with self.assertRaises(ValueError): + fresh_module = types.ModuleType(TestingImporter.module_name) + sys.modules[TestingImporter.module_name] = fresh_module + module = self.new_module() + with self.assertRaisesRegex(ValueError, "substituted"): module.__name__ + def test_module_already_in_sys(self): + with test_util.uncache(TestingImporter.module_name): + module = self.new_module() + sys.modules[TestingImporter.module_name] = module + # Force the load; just care that no exception is raised. + module.__name__ + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_importlib/test_util.py b/Lib/test/test_importlib/test_util.py index 69466b2..41ca333 100644 --- a/Lib/test/test_importlib/test_util.py +++ b/Lib/test/test_importlib/test_util.py @@ -372,7 +372,7 @@ class ResolveNameTests: # bacon self.assertEqual('bacon', self.util.resolve_name('bacon', None)) - def test_aboslute_within_package(self): + def test_absolute_within_package(self): # bacon in spam self.assertEqual('bacon', self.util.resolve_name('bacon', 'spam')) diff --git a/Lib/test/test_importlib/util.py b/Lib/test/test_importlib/util.py index ce20377..64e039e 100644 --- a/Lib/test/test_importlib/util.py +++ b/Lib/test/test_importlib/util.py @@ -266,7 +266,6 @@ class mock_spec(_ImporterMock): module = self.modules[fullname] except KeyError: return None - is_package = hasattr(module, '__path__') spec = util.spec_from_file_location( fullname, module.__file__, loader=self, submodule_search_locations=getattr(module, '__path__', None)) @@ -378,3 +377,12 @@ def mock_path_hook(*entries, importer): raise ImportError return importer return hook + + +class CASEOKTestBase: + + def caseok_env_changed(self, *, should_exist): + possibilities = b'PYTHONCASEOK', 'PYTHONCASEOK' + if any(x in self.importlib._bootstrap_external._os.environ + for x in possibilities) != should_exist: + self.skipTest('os.environ changes not reflected in _os.environ') diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 671e05a..d33de9e 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -391,6 +391,11 @@ class TestRetrievingSourceCode(GetSourceBase): # Check filename override self.assertEqual(inspect.getmodule(None, modfile), mod) + def test_getframeinfo_get_first_line(self): + frame_info = inspect.getframeinfo(self.fodderModule.fr, 50) + self.assertEqual(frame_info.code_context[0], "# line 1\n") + self.assertEqual(frame_info.code_context[1], "'A module docstring.'\n") + def test_getsource(self): self.assertSourceEqual(git.abuse, 29, 39) self.assertSourceEqual(mod.StupidGit, 21, 51) diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 000b525..5111882 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -3135,6 +3135,7 @@ class TextIOWrapperTest(unittest.TestCase): """.format(iomod=iomod, kwargs=kwargs) return assert_python_ok("-c", code) + @support.requires_type_collecting def test_create_at_shutdown_without_encoding(self): rc, out, err = self._check_create_at_shutdown() if err: @@ -3144,6 +3145,7 @@ class TextIOWrapperTest(unittest.TestCase): else: self.assertEqual("ok", out.decode().strip()) + @support.requires_type_collecting def test_create_at_shutdown_with_encoding(self): rc, out, err = self._check_create_at_shutdown(encoding='utf-8', errors='strict') diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index be62fad..91ae8d8 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -734,7 +734,7 @@ class IpaddrUnitTest(unittest.TestCase): self.assertEqual("IPv6Interface('::1/128')", repr(ipaddress.IPv6Interface('::1'))) - # issue #16531: constructing IPv4Network from a (address, mask) tuple + # issue #16531: constructing IPv4Network from an (address, mask) tuple def testIPv4Tuple(self): # /32 ip = ipaddress.IPv4Address('192.0.2.1') @@ -797,7 +797,7 @@ class IpaddrUnitTest(unittest.TestCase): self.assertEqual(ipaddress.IPv4Interface((3221225985, 24)), ipaddress.IPv4Interface('192.0.2.1/24')) - # issue #16531: constructing IPv6Network from a (address, mask) tuple + # issue #16531: constructing IPv6Network from an (address, mask) tuple def testIPv6Tuple(self): # /128 ip = ipaddress.IPv6Address('2001:db8::') @@ -1262,7 +1262,7 @@ class IpaddrUnitTest(unittest.TestCase): ip4 = ipaddress.IPv4Address('1.1.1.3') ip5 = ipaddress.IPv4Address('1.1.1.4') ip6 = ipaddress.IPv4Address('1.1.1.0') - # check that addreses are subsumed properly. + # check that addresses are subsumed properly. collapsed = ipaddress.collapse_addresses( [ip1, ip2, ip3, ip4, ip5, ip6]) self.assertEqual(list(collapsed), @@ -1276,7 +1276,7 @@ class IpaddrUnitTest(unittest.TestCase): ip4 = ipaddress.IPv4Address('1.1.1.3') #ip5 = ipaddress.IPv4Interface('1.1.1.4/30') #ip6 = ipaddress.IPv4Interface('1.1.1.4/30') - # check that addreses are subsumed properly. + # check that addresses are subsumed properly. collapsed = ipaddress.collapse_addresses([ip1, ip2, ip3, ip4]) self.assertEqual(list(collapsed), [ipaddress.IPv4Network('1.1.1.0/30')]) @@ -1290,7 +1290,7 @@ class IpaddrUnitTest(unittest.TestCase): # stored in no particular order b/c we want CollapseAddr to call # [].sort ip6 = ipaddress.IPv4Network('1.1.0.0/22') - # check that addreses are subsumed properly. + # check that addresses are subsumed properly. collapsed = ipaddress.collapse_addresses([ip1, ip2, ip3, ip4, ip5, ip6]) self.assertEqual(list(collapsed), diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index f940852..e054303 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -184,6 +184,19 @@ class TestBasicOps(unittest.TestCase): for proto in range(pickle.HIGHEST_PROTOCOL + 1): self.pickletest(proto, chain('abc', 'def'), compare=list('abcdef')) + def test_chain_setstate(self): + self.assertRaises(TypeError, chain().__setstate__, ()) + self.assertRaises(TypeError, chain().__setstate__, []) + self.assertRaises(TypeError, chain().__setstate__, 0) + self.assertRaises(TypeError, chain().__setstate__, ([],)) + self.assertRaises(TypeError, chain().__setstate__, (iter([]), [])) + it = chain() + it.__setstate__((iter(['abc', 'def']),)) + self.assertEqual(list(it), ['a', 'b', 'c', 'd', 'e', 'f']) + it = chain() + it.__setstate__((iter(['abc', 'def']), iter(['ghi']))) + self.assertEqual(list(it), ['ghi', 'a', 'b', 'c', 'd', 'e', 'f']) + def test_combinations(self): self.assertRaises(TypeError, combinations, 'abc') # missing r argument self.assertRaises(TypeError, combinations, 'abc', 2, 1) # too many arguments @@ -511,12 +524,18 @@ class TestBasicOps(unittest.TestCase): self.assertEqual(take(2, zip('abc',count(-3))), [('a', -3), ('b', -2)]) self.assertRaises(TypeError, count, 2, 3, 4) self.assertRaises(TypeError, count, 'a') - self.assertEqual(list(islice(count(maxsize-5), 10)), + self.assertEqual(take(10, count(maxsize-5)), list(range(maxsize-5, maxsize+5))) - self.assertEqual(list(islice(count(-maxsize-5), 10)), + self.assertEqual(take(10, count(-maxsize-5)), list(range(-maxsize-5, -maxsize+5))) - self.assertEqual(list(islice(count(10, maxsize+5), 3)), - list(range(10, 10+3*(maxsize+5), maxsize+5))) + self.assertEqual(take(3, count(3.25)), [3.25, 4.25, 5.25]) + self.assertEqual(take(3, count(3.25-4j)), [3.25-4j, 4.25-4j, 5.25-4j]) + self.assertEqual(take(3, count(Decimal('1.1'))), + [Decimal('1.1'), Decimal('2.1'), Decimal('3.1')]) + self.assertEqual(take(3, count(Fraction(2, 3))), + [Fraction(2, 3), Fraction(5, 3), Fraction(8, 3)]) + BIGINT = 1<<1000 + self.assertEqual(take(3, count(BIGINT)), [BIGINT, BIGINT+1, BIGINT+2]) c = count(3) self.assertEqual(repr(c), 'count(3)') next(c) @@ -524,8 +543,10 @@ class TestBasicOps(unittest.TestCase): c = count(-9) self.assertEqual(repr(c), 'count(-9)') next(c) - self.assertEqual(repr(count(10.25)), 'count(10.25)') self.assertEqual(next(c), -8) + self.assertEqual(repr(count(10.25)), 'count(10.25)') + self.assertEqual(repr(count(10.0)), 'count(10.0)') + self.assertEqual(type(next(count(10.0))), float) for i in (-sys.maxsize-5, -sys.maxsize+5 ,-10, -1, 0, 10, sys.maxsize-5, sys.maxsize+5): # Test repr r1 = repr(count(i)) @@ -549,16 +570,22 @@ class TestBasicOps(unittest.TestCase): [('a', 2), ('b', 5), ('c', 8)]) self.assertEqual(lzip('abc',count(step=-1)), [('a', 0), ('b', -1), ('c', -2)]) + self.assertRaises(TypeError, count, 'a', 'b') self.assertEqual(lzip('abc',count(2,0)), [('a', 2), ('b', 2), ('c', 2)]) self.assertEqual(lzip('abc',count(2,1)), [('a', 2), ('b', 3), ('c', 4)]) self.assertEqual(lzip('abc',count(2,3)), [('a', 2), ('b', 5), ('c', 8)]) self.assertEqual(take(20, count(maxsize-15, 3)), take(20, range(maxsize-15, maxsize+100, 3))) self.assertEqual(take(20, count(-maxsize-15, 3)), take(20, range(-maxsize-15,-maxsize+100, 3))) + self.assertEqual(take(3, count(10, maxsize+5)), + list(range(10, 10+3*(maxsize+5), maxsize+5))) + self.assertEqual(take(3, count(2, 1.25)), [2, 3.25, 4.5]) self.assertEqual(take(3, count(2, 3.25-4j)), [2, 5.25-4j, 8.5-8j]) self.assertEqual(take(3, count(Decimal('1.1'), Decimal('.1'))), [Decimal('1.1'), Decimal('1.2'), Decimal('1.3')]) self.assertEqual(take(3, count(Fraction(2,3), Fraction(1,7))), [Fraction(2,3), Fraction(17,21), Fraction(20,21)]) + BIGINT = 1<<1000 + self.assertEqual(take(3, count(step=BIGINT)), [0, BIGINT, 2*BIGINT]) self.assertEqual(repr(take(3, count(10, 2.5))), repr([10, 12.5, 15.0])) c = count(3, 5) self.assertEqual(repr(c), 'count(3, 5)') @@ -576,6 +603,10 @@ class TestBasicOps(unittest.TestCase): self.assertEqual(repr(count(10.5, 1.25)), 'count(10.5, 1.25)') self.assertEqual(repr(count(10.5, 1)), 'count(10.5)') # suppress step=1 when it's an int self.assertEqual(repr(count(10.5, 1.00)), 'count(10.5, 1.0)') # do show float values lilke 1.0 + self.assertEqual(repr(count(10, 1.00)), 'count(10, 1.0)') + c = count(10, 1.0) + self.assertEqual(type(next(c)), int) + self.assertEqual(type(next(c)), float) for i in (-sys.maxsize-5, -sys.maxsize+5 ,-10, -1, 0, 10, sys.maxsize-5, sys.maxsize+5): for j in (-sys.maxsize-5, -sys.maxsize+5 ,-10, -1, 0, 1, 10, sys.maxsize-5, sys.maxsize+5): # Test repr @@ -613,6 +644,25 @@ class TestBasicOps(unittest.TestCase): for proto in range(pickle.HIGHEST_PROTOCOL + 1): self.pickletest(proto, cycle('abc')) + def test_cycle_setstate(self): + self.assertRaises(TypeError, cycle('').__setstate__, ()) + self.assertRaises(TypeError, cycle('').__setstate__, []) + self.assertRaises(TypeError, cycle('').__setstate__, 0) + self.assertRaises(TypeError, cycle('').__setstate__, ([],)) + self.assertRaises(TypeError, cycle('').__setstate__, ((), 0)) + it = cycle('abc') + it.__setstate__((['de', 'fg'], 0)) + self.assertEqual(list(islice(it, 15)), + ['a', 'b', 'c', 'de', 'fg', + 'a', 'b', 'c', 'de', 'fg', + 'a', 'b', 'c', 'de', 'fg']) + it = cycle('abc') + it.__setstate__((['de', 'fg'], 1)) + self.assertEqual(list(islice(it, 15)), + ['a', 'b', 'c', 'de', 'fg', + 'de', 'fg', 'de', 'fg', 'de', + 'fg', 'de', 'fg', 'de', 'fg']) + def test_groupby(self): # Check whether it accepts arguments correctly self.assertEqual([], list(groupby([]))) diff --git a/Lib/test/test_json/test_decode.py b/Lib/test/test_json/test_decode.py index cc83b45..fdafeb6 100644 --- a/Lib/test/test_json/test_decode.py +++ b/Lib/test/test_json/test_decode.py @@ -35,7 +35,7 @@ class TestDecode: self.assertEqual(self.loads(s, object_pairs_hook=OrderedDict, object_hook=lambda x: None), OrderedDict(p)) - # check that empty objects literals work (see #17368) + # check that empty object literals work (see #17368) self.assertEqual(self.loads('{}', object_pairs_hook=OrderedDict), OrderedDict()) self.assertEqual(self.loads('{"empty": {}}', diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 84fd8b5..0e70ccd 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -1,4 +1,4 @@ -# Copyright 2001-2014 by Vinay Sajip. All Rights Reserved. +# Copyright 2001-2016 by Vinay Sajip. All Rights Reserved. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, @@ -16,7 +16,7 @@ """Test harness for the logging module. Run all tests. -Copyright (C) 2001-2014 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2016 Vinay Sajip. All Rights Reserved. """ import logging @@ -3022,6 +3022,86 @@ class QueueHandlerTest(BaseTest): self.assertFalse(handler.matches(levelno=logging.ERROR, message='5')) self.assertTrue(handler.matches(levelno=logging.CRITICAL, message='6')) +if hasattr(logging.handlers, 'QueueListener'): + import multiprocessing + from unittest.mock import patch + + class QueueListenerTest(BaseTest): + """ + Tests based on patch submitted for issue #27930. Ensure that + QueueListener handles all log messages. + """ + + repeat = 20 + + @staticmethod + def setup_and_log(log_queue, ident): + """ + Creates a logger with a QueueHandler that logs to a queue read by a + QueueListener. Starts the listener, logs five messages, and stops + the listener. + """ + logger = logging.getLogger('test_logger_with_id_%s' % ident) + logger.setLevel(logging.DEBUG) + handler = logging.handlers.QueueHandler(log_queue) + logger.addHandler(handler) + listener = logging.handlers.QueueListener(log_queue) + listener.start() + + logger.info('one') + logger.info('two') + logger.info('three') + logger.info('four') + logger.info('five') + + listener.stop() + logger.removeHandler(handler) + handler.close() + + @patch.object(logging.handlers.QueueListener, 'handle') + def test_handle_called_with_queue_queue(self, mock_handle): + for i in range(self.repeat): + log_queue = queue.Queue() + self.setup_and_log(log_queue, '%s_%s' % (self.id(), i)) + self.assertEqual(mock_handle.call_count, 5 * self.repeat, + 'correct number of handled log messages') + + @support.requires_multiprocessing_queue + @patch.object(logging.handlers.QueueListener, 'handle') + def test_handle_called_with_mp_queue(self, mock_handle): + for i in range(self.repeat): + log_queue = multiprocessing.Queue() + self.setup_and_log(log_queue, '%s_%s' % (self.id(), i)) + self.assertEqual(mock_handle.call_count, 5 * self.repeat, + 'correct number of handled log messages') + + @staticmethod + def get_all_from_queue(log_queue): + try: + while True: + yield log_queue.get_nowait() + except queue.Empty: + return [] + + @support.requires_multiprocessing_queue + def test_no_messages_in_queue_after_stop(self): + """ + Five messages are logged then the QueueListener is stopped. This + test then gets everything off the queue. Failure of this test + indicates that messages were not registered on the queue until + _after_ the QueueListener stopped. + """ + for i in range(self.repeat): + queue = multiprocessing.Queue() + self.setup_and_log(queue, '%s_%s' %(self.id(), i)) + # time.sleep(1) + items = list(self.get_all_from_queue(queue)) + expected = [[], [logging.handlers.QueueListener._sentinel]] + self.assertIn(items, expected, + 'Found unexpected messages in queue: %s' % ( + [m.msg if isinstance(m, logging.LogRecord) + else m for m in items])) + ZERO = datetime.timedelta(0) @@ -3389,6 +3469,7 @@ class ModuleLevelMiscTest(BaseTest): logging.setLoggerClass(logging.Logger) self.assertEqual(logging.getLoggerClass(), logging.Logger) + @support.requires_type_collecting def test_logging_at_shutdown(self): # Issue #20037 code = """if 1: @@ -4165,7 +4246,7 @@ class NTEventLogHandlerTest(BaseTest): # first and restore it at the end. @support.run_with_locale('LC_ALL', '') def test_main(): - support.run_unittest( + tests = [ BuiltinLevelsTest, BasicFilterTest, CustomLevelsAndFiltersTest, HandlerTest, MemoryHandlerTest, ConfigFileTest, SocketHandlerTest, DatagramHandlerTest, MemoryTest, EncodingTest, WarningsTest, @@ -4176,7 +4257,11 @@ def test_main(): RotatingFileHandlerTest, LastResortTest, LogRecordTest, ExceptionTest, SysLogHandlerTest, HTTPHandlerTest, NTEventLogHandlerTest, TimedRotatingFileHandlerTest, - UnixSocketHandlerTest, UnixDatagramHandlerTest, UnixSysLogHandlerTest) + UnixSocketHandlerTest, UnixDatagramHandlerTest, UnixSysLogHandlerTest, + ] + if hasattr(logging.handlers, 'QueueListener'): + tests.append(QueueListenerTest) + support.run_unittest(*tests) if __name__ == "__main__": test_main() diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py index b2d008b..4b2d81c 100644 --- a/Lib/test/test_long.py +++ b/Lib/test/test_long.py @@ -967,7 +967,7 @@ class LongTest(unittest.TestCase): self.assertIs(type(got), int) # bad second argument - bad_exponents = ('brian', 2.0, 0j, None) + bad_exponents = ('brian', 2.0, 0j) for e in bad_exponents: self.assertRaises(TypeError, round, 3, e) diff --git a/Lib/test/test_lzma.py b/Lib/test/test_lzma.py index 6c698e2..b69da06 100644 --- a/Lib/test/test_lzma.py +++ b/Lib/test/test_lzma.py @@ -136,6 +136,21 @@ class CompressorDecompressorTestCase(unittest.TestCase): self.assertTrue(lzd.eof) self.assertEqual(lzd.unused_data, b"") + def test_decompressor_chunks_empty(self): + lzd = LZMADecompressor() + out = [] + for i in range(0, len(COMPRESSED_XZ), 10): + self.assertFalse(lzd.eof) + out.append(lzd.decompress(b'')) + out.append(lzd.decompress(b'')) + out.append(lzd.decompress(b'')) + out.append(lzd.decompress(COMPRESSED_XZ[i:i+10])) + out = b"".join(out) + self.assertEqual(out, INPUT) + self.assertEqual(lzd.check, lzma.CHECK_CRC64) + self.assertTrue(lzd.eof) + self.assertEqual(lzd.unused_data, b"") + def test_decompressor_chunks_maxsize(self): lzd = LZMADecompressor() max_length = 100 @@ -246,6 +261,13 @@ class CompressorDecompressorTestCase(unittest.TestCase): lzd = LZMADecompressor(lzma.FORMAT_RAW, filters=FILTERS_RAW_1) self.assertRaises(LZMAError, lzd.decompress, COMPRESSED_XZ) + def test_decompressor_bug_28275(self): + # Test coverage for Issue 28275 + lzd = LZMADecompressor() + self.assertRaises(LZMAError, lzd.decompress, COMPRESSED_RAW_1) + # Previously, a second call could crash due to internal inconsistency + self.assertRaises(LZMAError, lzd.decompress, COMPRESSED_RAW_1) + # Test that LZMACompressor->LZMADecompressor preserves the input data. def test_roundtrip_xz(self): @@ -266,6 +288,16 @@ class CompressorDecompressorTestCase(unittest.TestCase): lzd = LZMADecompressor(lzma.FORMAT_RAW, filters=FILTERS_RAW_4) self._test_decompressor(lzd, cdata, lzma.CHECK_NONE) + def test_roundtrip_raw_empty(self): + lzc = LZMACompressor(lzma.FORMAT_RAW, filters=FILTERS_RAW_4) + cdata = lzc.compress(INPUT) + cdata += lzc.compress(b'') + cdata += lzc.compress(b'') + cdata += lzc.compress(b'') + cdata += lzc.flush() + lzd = LZMADecompressor(lzma.FORMAT_RAW, filters=FILTERS_RAW_4) + self._test_decompressor(lzd, cdata, lzma.CHECK_NONE) + def test_roundtrip_chunks(self): lzc = LZMACompressor() cdata = [] @@ -276,6 +308,19 @@ class CompressorDecompressorTestCase(unittest.TestCase): lzd = LZMADecompressor() self._test_decompressor(lzd, cdata, lzma.CHECK_CRC64) + def test_roundtrip_empty_chunks(self): + lzc = LZMACompressor() + cdata = [] + for i in range(0, len(INPUT), 10): + cdata.append(lzc.compress(INPUT[i:i+10])) + cdata.append(lzc.compress(b'')) + cdata.append(lzc.compress(b'')) + cdata.append(lzc.compress(b'')) + cdata.append(lzc.flush()) + cdata = b"".join(cdata) + lzd = LZMADecompressor() + self._test_decompressor(lzd, cdata, lzma.CHECK_CRC64) + # LZMADecompressor intentionally does not handle concatenated streams. def test_decompressor_multistream(self): diff --git a/Lib/test/test_mailcap.py b/Lib/test/test_mailcap.py index 22b2fcc..a85c691 100644 --- a/Lib/test/test_mailcap.py +++ b/Lib/test/test_mailcap.py @@ -1,6 +1,7 @@ import mailcap import os import shutil +import copy import test.support import unittest @@ -14,43 +15,55 @@ MAILCAPDICT = { [{'compose': 'moviemaker %s', 'x11-bitmap': '"/usr/lib/Zmail/bitmaps/movie.xbm"', 'description': '"Movie"', - 'view': 'movieplayer %s'}], + 'view': 'movieplayer %s', + 'lineno': 4}], 'application/*': [{'copiousoutput': '', - 'view': 'echo "This is \\"%t\\" but is 50 \\% Greek to me" \\; cat %s'}], + 'view': 'echo "This is \\"%t\\" but is 50 \\% Greek to me" \\; cat %s', + 'lineno': 5}], 'audio/basic': [{'edit': 'audiocompose %s', 'compose': 'audiocompose %s', 'description': '"An audio fragment"', - 'view': 'showaudio %s'}], + 'view': 'showaudio %s', + 'lineno': 6}], 'video/mpeg': - [{'view': 'mpeg_play %s'}], + [{'view': 'mpeg_play %s', 'lineno': 13}], 'application/postscript': - [{'needsterminal': '', 'view': 'ps-to-terminal %s'}, - {'compose': 'idraw %s', 'view': 'ps-to-terminal %s'}], + [{'needsterminal': '', 'view': 'ps-to-terminal %s', 'lineno': 1}, + {'compose': 'idraw %s', 'view': 'ps-to-terminal %s', 'lineno': 2}], 'application/x-dvi': - [{'view': 'xdvi %s'}], + [{'view': 'xdvi %s', 'lineno': 3}], 'message/external-body': [{'composetyped': 'extcompose %s', 'description': '"A reference to data stored in an external location"', 'needsterminal': '', - 'view': 'showexternal %s %{access-type} %{name} %{site} %{directory} %{mode} %{server}'}], + 'view': 'showexternal %s %{access-type} %{name} %{site} %{directory} %{mode} %{server}', + 'lineno': 10}], 'text/richtext': [{'test': 'test "`echo %{charset} | tr \'[A-Z]\' \'[a-z]\'`" = iso-8859-8', 'copiousoutput': '', - 'view': 'shownonascii iso-8859-8 -e richtext -p %s'}], + 'view': 'shownonascii iso-8859-8 -e richtext -p %s', + 'lineno': 11}], 'image/x-xwindowdump': - [{'view': 'display %s'}], + [{'view': 'display %s', 'lineno': 9}], 'audio/*': - [{'view': '/usr/local/bin/showaudio %t'}], + [{'view': '/usr/local/bin/showaudio %t', 'lineno': 7}], 'video/*': - [{'view': 'animate %s'}], + [{'view': 'animate %s', 'lineno': 12}], 'application/frame': - [{'print': '"cat %s | lp"', 'view': 'showframe %s'}], + [{'print': '"cat %s | lp"', 'view': 'showframe %s', 'lineno': 0}], 'image/rgb': - [{'view': 'display %s'}] + [{'view': 'display %s', 'lineno': 8}] } +# For backwards compatibility, readmailcapfile() and lookup() still support +# the old version of mailcapdict without line numbers. +MAILCAPDICT_DEPRECATED = copy.deepcopy(MAILCAPDICT) +for entry_list in MAILCAPDICT_DEPRECATED.values(): + for entry in entry_list: + entry.pop('lineno') + class HelperFunctionTest(unittest.TestCase): @@ -76,12 +89,14 @@ class HelperFunctionTest(unittest.TestCase): def test_readmailcapfile(self): # Test readmailcapfile() using test file. It should match MAILCAPDICT. with open(MAILCAPFILE, 'r') as mcf: - d = mailcap.readmailcapfile(mcf) - self.assertDictEqual(d, MAILCAPDICT) + with self.assertWarns(DeprecationWarning): + d = mailcap.readmailcapfile(mcf) + self.assertDictEqual(d, MAILCAPDICT_DEPRECATED) def test_lookup(self): # Test without key - expected = [{'view': 'mpeg_play %s'}, {'view': 'animate %s'}] + expected = [{'view': 'animate %s', 'lineno': 12}, + {'view': 'mpeg_play %s', 'lineno': 13}] actual = mailcap.lookup(MAILCAPDICT, 'video/mpeg') self.assertListEqual(expected, actual) @@ -90,10 +105,16 @@ class HelperFunctionTest(unittest.TestCase): expected = [{'edit': 'audiocompose %s', 'compose': 'audiocompose %s', 'description': '"An audio fragment"', - 'view': 'showaudio %s'}] + 'view': 'showaudio %s', + 'lineno': 6}] actual = mailcap.lookup(MAILCAPDICT, 'audio/basic', key) self.assertListEqual(expected, actual) + # Test on user-defined dicts without line numbers + expected = [{'view': 'mpeg_play %s'}, {'view': 'animate %s'}] + actual = mailcap.lookup(MAILCAPDICT_DEPRECATED, 'video/mpeg') + self.assertListEqual(expected, actual) + def test_subst(self): plist = ['id=1', 'number=2', 'total=3'] # test case: ([field, MIMEtype, filename, plist=[]], ) @@ -152,14 +173,16 @@ class FindmatchTest(unittest.TestCase): 'edit': 'audiocompose %s', 'compose': 'audiocompose %s', 'description': '"An audio fragment"', - 'view': 'showaudio %s' + 'view': 'showaudio %s', + 'lineno': 6 } - audio_entry = {"view": "/usr/local/bin/showaudio %t"} - video_entry = {'view': 'animate %s'} + audio_entry = {"view": "/usr/local/bin/showaudio %t", 'lineno': 7} + video_entry = {'view': 'animate %s', 'lineno': 12} message_entry = { 'composetyped': 'extcompose %s', 'description': '"A reference to data stored in an external location"', 'needsterminal': '', - 'view': 'showexternal %s %{access-type} %{name} %{site} %{directory} %{mode} %{server}' + 'view': 'showexternal %s %{access-type} %{name} %{site} %{directory} %{mode} %{server}', + 'lineno': 10, } # test case: (findmatch args, findmatch keyword args, expected output) @@ -169,7 +192,7 @@ class FindmatchTest(unittest.TestCase): cases = [ ([{}, "video/mpeg"], {}, (None, None)), ([c, "foo/bar"], {}, (None, None)), - ([c, "video/mpeg"], {}, ('mpeg_play /dev/null', {'view': 'mpeg_play %s'})), + ([c, "video/mpeg"], {}, ('animate /dev/null', video_entry)), ([c, "audio/basic", "edit"], {}, ("audiocompose /dev/null", audio_basic_entry)), ([c, "audio/basic", "compose"], {}, ("audiocompose /dev/null", audio_basic_entry)), ([c, "audio/basic", "description"], {}, ('"An audio fragment"', audio_basic_entry)), diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index 6c7b99d..a379a6a 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -1254,8 +1254,8 @@ class IsCloseTests(unittest.TestCase): (1.0e200, .999999999999999e200)] self.assertAllNotClose(zero_tolerance_not_close_examples, rel_tol=0.0) - def test_assymetry(self): - # test the assymetry example from PEP 485 + def test_asymmetry(self): + # test the asymmetry example from PEP 485 self.assertAllClose([(9, 10), (10, 9)], rel_tol=0.1) def test_integers(self): diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py index b365d84..f3f70cc 100644 --- a/Lib/test/test_mmap.py +++ b/Lib/test/test_mmap.py @@ -713,6 +713,21 @@ class MmapTests(unittest.TestCase): gc_collect() self.assertIs(wr(), None) + @unittest.skipIf(os.name == 'nt', 'cannot resize anonymous mmaps on Windows') + def test_resize_past_pos(self): + m = mmap.mmap(-1, 8192) + self.addCleanup(m.close) + m.read(5000) + try: + m.resize(4096) + except SystemError: + self.skipTest("resizing not supported") + self.assertEqual(m.read(14), b'') + self.assertRaises(ValueError, m.read_byte) + self.assertRaises(ValueError, m.write_byte, 42) + self.assertRaises(ValueError, m.write, b'abc') + + class LargeMmapTests(unittest.TestCase): def setUp(self): diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py index ea6e897..6d0d594 100644 --- a/Lib/test/test_module.py +++ b/Lib/test/test_module.py @@ -1,7 +1,7 @@ # Test the module type import unittest import weakref -from test.support import gc_collect +from test.support import gc_collect, requires_type_collecting from test.support.script_helper import assert_python_ok import sys @@ -101,6 +101,7 @@ class ModuleTests(unittest.TestCase): gc_collect() self.assertEqual(f().__dict__["bar"], 4) + @requires_type_collecting def test_clear_dict_in_ref_cycle(self): destroyed = [] m = ModuleType("foo") @@ -214,6 +215,7 @@ a = A(destroyed)""" self.assertEqual(r[-len(ends_with):], ends_with, '{!r} does not end with {!r}'.format(r, ends_with)) + @requires_type_collecting def test_module_finalization_at_shutdown(self): # Module globals and builtins should still be available during shutdown rc, out, err = assert_python_ok("-c", "from test import final_a") diff --git a/Lib/test/test_nntplib.py b/Lib/test/test_nntplib.py index 994532b..66ef930 100644 --- a/Lib/test/test_nntplib.py +++ b/Lib/test/test_nntplib.py @@ -132,6 +132,8 @@ class NetworkedNNTPTestsMixin: self.assertLessEqual(art_num, last) self._check_art_dict(art_dict) + @unittest.skipIf(True, 'temporarily skipped until a permanent solution' + ' is found for issue #28971') def test_over(self): resp, count, first, last, name = self.server.group(self.GROUP_NAME) start = last - 10 @@ -1465,14 +1467,14 @@ class MockSocketTests(unittest.TestCase): def test_service_temporarily_unavailable(self): #Test service temporarily unavailable class Handler(NNTPv1Handler): - welcome = '400 Service temporarily unavilable' + welcome = '400 Service temporarily unavailable' self.check_constructor_error_conditions( Handler, nntplib.NNTPTemporaryError, Handler.welcome) def test_service_permanently_unavailable(self): #Test service permanently unavailable class Handler(NNTPv1Handler): - welcome = '502 Service permanently unavilable' + welcome = '502 Service permanently unavailable' self.check_constructor_error_conditions( Handler, nntplib.NNTPPermanentError, Handler.welcome) diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 874f9e4..10383cf 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -82,6 +82,11 @@ else: # Issue #14110: Some tests fail on FreeBSD if the user is in the wheel group. HAVE_WHEEL_GROUP = sys.platform.startswith('freebsd') and os.getgid() == 0 +def create_file(filename, content=b'content'): + with open(filename, "xb", 0) as fp: + fp.write(content) + + # Tests creating TESTFN class FileTests(unittest.TestCase): def setUp(self): @@ -226,15 +231,9 @@ class FileTests(unittest.TestCase): # Test attributes on return values from os.*stat* family. class StatAttributeTests(unittest.TestCase): def setUp(self): - os.mkdir(support.TESTFN) - self.fname = os.path.join(support.TESTFN, "f1") - f = open(self.fname, 'wb') - f.write(b"ABC") - f.close() - - def tearDown(self): - os.unlink(self.fname) - os.rmdir(support.TESTFN) + self.fname = support.TESTFN + self.addCleanup(support.unlink, self.fname) + create_file(self.fname, b"ABC") @unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()') def check_stat_attributes(self, fname): @@ -426,12 +425,35 @@ class StatAttributeTests(unittest.TestCase): 0) # test directory st_file_attributes (FILE_ATTRIBUTE_DIRECTORY set) - result = os.stat(support.TESTFN) + dirname = support.TESTFN + "dir" + os.mkdir(dirname) + self.addCleanup(os.rmdir, dirname) + + result = os.stat(dirname) self.check_file_attributes(result) self.assertEqual( result.st_file_attributes & stat.FILE_ATTRIBUTE_DIRECTORY, stat.FILE_ATTRIBUTE_DIRECTORY) + @unittest.skipUnless(sys.platform == "win32", "Win32 specific tests") + def test_access_denied(self): + # Default to FindFirstFile WIN32_FIND_DATA when access is + # denied. See issue 28075. + # os.environ['TEMP'] should be located on a volume that + # supports file ACLs. + fname = os.path.join(os.environ['TEMP'], self.fname) + self.addCleanup(support.unlink, fname) + create_file(fname, b'ABC') + # Deny the right to [S]YNCHRONIZE on the file to + # force CreateFile to fail with ERROR_ACCESS_DENIED. + DETACHED_PROCESS = 8 + subprocess.check_call( + ['icacls.exe', fname, '/deny', 'Users:(S)'], + creationflags=DETACHED_PROCESS + ) + result = os.stat(fname) + self.assertNotEqual(result.st_size, 0) + class UtimeTests(unittest.TestCase): def setUp(self): @@ -808,39 +830,63 @@ class WalkTests(unittest.TestCase): # SUB11/ no kids # SUB2/ a file kid and a dirsymlink kid # tmp3 + # SUB21/ not readable + # tmp5 # link/ a symlink to TESTFN.2 # broken_link + # broken_link2 + # broken_link3 # TEST2/ # tmp4 a lone file self.walk_path = join(support.TESTFN, "TEST1") self.sub1_path = join(self.walk_path, "SUB1") self.sub11_path = join(self.sub1_path, "SUB11") sub2_path = join(self.walk_path, "SUB2") + self.sub21_path = join(sub2_path, "SUB21") tmp1_path = join(self.walk_path, "tmp1") tmp2_path = join(self.sub1_path, "tmp2") tmp3_path = join(sub2_path, "tmp3") + tmp5_path = join(self.sub21_path, "tmp3") self.link_path = join(sub2_path, "link") t2_path = join(support.TESTFN, "TEST2") tmp4_path = join(support.TESTFN, "TEST2", "tmp4") broken_link_path = join(sub2_path, "broken_link") + broken_link2_path = join(sub2_path, "broken_link2") + broken_link3_path = join(sub2_path, "broken_link3") # Create stuff. os.makedirs(self.sub11_path) os.makedirs(sub2_path) + os.makedirs(self.sub21_path) os.makedirs(t2_path) - for path in tmp1_path, tmp2_path, tmp3_path, tmp4_path: - f = open(path, "w") - f.write("I'm " + path + " and proud of it. Blame test_os.\n") - f.close() + for path in tmp1_path, tmp2_path, tmp3_path, tmp4_path, tmp5_path: + with open(path, "x") as f: + f.write("I'm " + path + " and proud of it. Blame test_os.\n") if support.can_symlink(): os.symlink(os.path.abspath(t2_path), self.link_path) os.symlink('broken', broken_link_path, True) - self.sub2_tree = (sub2_path, ["link"], ["broken_link", "tmp3"]) + os.symlink(join('tmp3', 'broken'), broken_link2_path, True) + os.symlink(join('SUB21', 'tmp5'), broken_link3_path, True) + self.sub2_tree = (sub2_path, ["SUB21", "link"], + ["broken_link", "broken_link2", "broken_link3", + "tmp3"]) else: self.sub2_tree = (sub2_path, [], ["tmp3"]) + os.chmod(self.sub21_path, 0) + try: + os.listdir(self.sub21_path) + except PermissionError: + pass + else: + os.chmod(self.sub21_path, stat.S_IRWXU) + os.unlink(tmp5_path) + os.rmdir(self.sub21_path) + self.sub21_path = None + del self.sub2_tree[1][:1] + def test_walk_topdown(self): # Walk top-down. all = list(self.walk(self.walk_path)) @@ -852,6 +898,7 @@ class WalkTests(unittest.TestCase): flipped = all[0][1][0] != "SUB1" all[0][1].sort() all[3 - 2 * flipped][-1].sort() + all[3 - 2 * flipped][1].sort() self.assertEqual(all[0], (self.walk_path, ["SUB1", "SUB2"], ["tmp1"])) self.assertEqual(all[1 + flipped], (self.sub1_path, ["SUB11"], ["tmp2"])) self.assertEqual(all[2 + flipped], (self.sub11_path, [], [])) @@ -872,6 +919,7 @@ class WalkTests(unittest.TestCase): (self.walk_path, ["SUB2"], ["tmp1"])) all[1][-1].sort() + all[1][1].sort() self.assertEqual(all[1], self.sub2_tree) def test_walk_bottom_up(self): @@ -885,6 +933,7 @@ class WalkTests(unittest.TestCase): flipped = all[3][1][0] != "SUB1" all[3][1].sort() all[2 - 2 * flipped][-1].sort() + all[2 - 2 * flipped][1].sort() self.assertEqual(all[3], (self.walk_path, ["SUB1", "SUB2"], ["tmp1"])) self.assertEqual(all[flipped], @@ -913,6 +962,8 @@ class WalkTests(unittest.TestCase): # Windows, which doesn't have a recursive delete command. The # (not so) subtlety is that rmdir will fail unless the dir's # kids are removed first, so bottom up is essential. + if self.sub21_path: + os.chmod(self.sub21_path, stat.S_IRWXU) for root, dirs, files in os.walk(support.TESTFN, topdown=False): for name in files: os.remove(os.path.join(root, name)) @@ -929,16 +980,21 @@ class WalkTests(unittest.TestCase): errors = [] walk_it = self.walk(self.walk_path, onerror=errors.append) root, dirs, files = next(walk_it) - self.assertFalse(errors) - dir1 = dirs[0] - dir1new = dir1 + '.new' - os.rename(os.path.join(root, dir1), os.path.join(root, dir1new)) - roots = [r for r, d, f in walk_it] - self.assertTrue(errors) - self.assertNotIn(os.path.join(root, dir1), roots) - self.assertNotIn(os.path.join(root, dir1new), roots) - for dir2 in dirs[1:]: - self.assertIn(os.path.join(root, dir2), roots) + self.assertEqual(errors, []) + dir1 = 'SUB1' + path1 = os.path.join(root, dir1) + path1new = os.path.join(root, dir1 + '.new') + os.rename(path1, path1new) + try: + roots = [r for r, d, f in walk_it] + self.assertTrue(errors) + self.assertNotIn(path1, roots) + self.assertNotIn(path1new, roots) + for dir2 in dirs: + if dir2 != dir1: + self.assertIn(os.path.join(root, dir2), roots) + finally: + os.rename(path1new, path1) @unittest.skipUnless(hasattr(os, 'fwalk'), "Test needs os.fwalk()") @@ -1008,6 +1064,8 @@ class FwalkTests(WalkTests): def tearDown(self): # cleanup + if self.sub21_path: + os.chmod(self.sub21_path, stat.S_IRWXU) for root, dirs, files, rootfd in os.fwalk(support.TESTFN, topdown=False): for name in files: os.unlink(name, dir_fd=rootfd) @@ -1471,7 +1529,7 @@ class TestInvalidFD(unittest.TestCase): singles = ["fchdir", "dup", "fdopen", "fdatasync", "fstat", "fstatvfs", "fsync", "tcgetpgrp", "ttyname"] #singles.append("close") - #We omit close because it doesn'r raise an exception on some platforms + #We omit close because it doesn't raise an exception on some platforms def get_single(f): def helper(self): if hasattr(os, f): diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py index 3d301b4..ab6577f 100644 --- a/Lib/test/test_parser.py +++ b/Lib/test/test_parser.py @@ -627,6 +627,22 @@ class CompileTestCase(unittest.TestCase): code2 = parser.compilest(st) self.assertEqual(eval(code2), -3) + def test_compile_filename(self): + st = parser.expr('a + 5') + code = parser.compilest(st) + self.assertEqual(code.co_filename, '') + code = st.compile() + self.assertEqual(code.co_filename, '') + for filename in ('file.py', b'file.py', + bytearray(b'file.py'), memoryview(b'file.py')): + code = parser.compilest(st, filename) + self.assertEqual(code.co_filename, 'file.py') + code = st.compile(filename) + self.assertEqual(code.co_filename, 'file.py') + self.assertRaises(TypeError, parser.compilest, st, list(b'file.py')) + self.assertRaises(TypeError, st.compile, list(b'file.py')) + + class ParserStackLimitTestCase(unittest.TestCase): """try to push the parser to/over its limits. see http://bugs.python.org/issue1881 for a discussion diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 45ba5a9..66a7b55 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -911,6 +911,29 @@ def test_pdb_next_command_subiterator(): (Pdb) continue """ +def test_pdb_issue_20766(): + """Test for reference leaks when the SIGINT handler is set. + + >>> def test_function(): + ... i = 1 + ... while i <= 2: + ... sess = pdb.Pdb() + ... sess.set_trace(sys._getframe()) + ... print('pdb %d: %s' % (i, sess._previous_sigint_handler)) + ... i += 1 + + >>> with PdbTestInput(['continue', + ... 'continue']): + ... test_function() + > (6)test_function() + -> print('pdb %d: %s' % (i, sess._previous_sigint_handler)) + (Pdb) continue + pdb 1: + > (5)test_function() + -> sess.set_trace(sys._getframe()) + (Pdb) continue + pdb 2: + """ class PdbTestCase(unittest.TestCase): diff --git a/Lib/test/test_pep247.py b/Lib/test/test_pep247.py index ab5f418..c17ceed 100644 --- a/Lib/test/test_pep247.py +++ b/Lib/test/test_pep247.py @@ -1,5 +1,5 @@ """ -Test suite to check compilance with PEP 247, the standard API +Test suite to check compliance with PEP 247, the standard API for hashing algorithms """ diff --git a/Lib/test/test_pickle.py b/Lib/test/test_pickle.py index ee7a667..d467d52 100644 --- a/Lib/test/test_pickle.py +++ b/Lib/test/test_pickle.py @@ -14,6 +14,7 @@ from test.pickletester import AbstractUnpickleTests from test.pickletester import AbstractPickleTests from test.pickletester import AbstractPickleModuleTests from test.pickletester import AbstractPersistentPicklerTests +from test.pickletester import AbstractIdentityPersistentPicklerTests from test.pickletester import AbstractPicklerUnpicklerObjectTests from test.pickletester import AbstractDispatchTableTests from test.pickletester import BigmemPickleTests @@ -82,10 +83,7 @@ class InMemoryPickleTests(AbstractPickleTests, AbstractUnpickleTests, return pickle.loads(buf, **kwds) -class PyPersPicklerTests(AbstractPersistentPicklerTests): - - pickler = pickle._Pickler - unpickler = pickle._Unpickler +class PersistentPicklerUnpicklerMixin(object): def dumps(self, arg, proto=None): class PersPickler(self.pickler): @@ -94,8 +92,7 @@ class PyPersPicklerTests(AbstractPersistentPicklerTests): f = io.BytesIO() p = PersPickler(f, proto) p.dump(arg) - f.seek(0) - return f.read() + return f.getvalue() def loads(self, buf, **kwds): class PersUnpickler(self.unpickler): @@ -106,6 +103,20 @@ class PyPersPicklerTests(AbstractPersistentPicklerTests): return u.load() +class PyPersPicklerTests(AbstractPersistentPicklerTests, + PersistentPicklerUnpicklerMixin): + + pickler = pickle._Pickler + unpickler = pickle._Unpickler + + +class PyIdPersPicklerTests(AbstractIdentityPersistentPicklerTests, + PersistentPicklerUnpicklerMixin): + + pickler = pickle._Pickler + unpickler = pickle._Unpickler + + class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests): pickler_class = pickle._Pickler @@ -144,6 +155,10 @@ if has_c_implementation: pickler = _pickle.Pickler unpickler = _pickle.Unpickler + class CIdPersPicklerTests(PyIdPersPicklerTests): + pickler = _pickle.Pickler + unpickler = _pickle.Unpickler + class CDumpPickle_LoadPickle(PyPicklerTests): pickler = _pickle.Pickler unpickler = pickle._Unpickler @@ -409,11 +424,13 @@ class CompatPickleTests(unittest.TestCase): def test_main(): - tests = [PickleTests, PyUnpicklerTests, PyPicklerTests, PyPersPicklerTests, + tests = [PickleTests, PyUnpicklerTests, PyPicklerTests, + PyPersPicklerTests, PyIdPersPicklerTests, PyDispatchTableTests, PyChainDispatchTableTests, CompatPickleTests] if has_c_implementation: - tests.extend([CUnpicklerTests, CPicklerTests, CPersPicklerTests, + tests.extend([CUnpicklerTests, CPicklerTests, + CPersPicklerTests, CIdPersPicklerTests, CDumpPickle_LoadPickle, DumpPickle_CLoadPickle, PyPicklerUnpicklerObjectTests, CPicklerUnpicklerObjectTests, diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py index 9d20354..a820587 100644 --- a/Lib/test/test_pkgutil.py +++ b/Lib/test/test_pkgutil.py @@ -205,7 +205,7 @@ class PkgutilPEP302Tests(unittest.TestCase): del sys.meta_path[0] def test_getdata_pep302(self): - # Use a dummy importer/loader + # Use a dummy finder/loader self.assertEqual(pkgutil.get_data('foo', 'dummy'), "Hello, world!") del sys.modules['foo'] diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py index ed18773..18de110 100644 --- a/Lib/test/test_platform.py +++ b/Lib/test/test_platform.py @@ -15,11 +15,18 @@ class PlatformTest(unittest.TestCase): @support.skip_unless_symlink def test_architecture_via_symlink(self): # issue3762 - # On Windows, the EXE needs to know where pythonXY.dll is at so we have - # to add the directory to the path. + # On Windows, the EXE needs to know where pythonXY.dll and *.pyd is at + # so we add the directory to the path and PYTHONPATH. if sys.platform == "win32": + def restore_environ(old_env): + os.environ.clear() + os.environ.update(old_env) + + self.addCleanup(restore_environ, dict(os.environ)) + os.environ["Path"] = "{};{}".format( os.path.dirname(sys.executable), os.environ["Path"]) + os.environ["PYTHONPATH"] = os.path.dirname(sys.executable) def get(python): cmd = [python, '-c', diff --git a/Lib/test/test_plistlib.py b/Lib/test/test_plistlib.py index 16114f9..692cac4 100644 --- a/Lib/test/test_plistlib.py +++ b/Lib/test/test_plistlib.py @@ -361,6 +361,13 @@ class TestPlistlib(unittest.TestCase): plistlib.dumps, testString) + def test_non_bmp_characters(self): + pl = {'python': '\U0001f40d'} + for fmt in ALL_FORMATS: + with self.subTest(fmt=fmt): + data = plistlib.dumps(pl, fmt=fmt) + self.assertEqual(plistlib.loads(data), pl) + def test_nondictroot(self): for fmt in ALL_FORMATS: with self.subTest(fmt=fmt): diff --git a/Lib/test/test_poll.py b/Lib/test/test_poll.py index a0a332b..6a2bf6e 100644 --- a/Lib/test/test_poll.py +++ b/Lib/test/test_poll.py @@ -125,6 +125,8 @@ class PollTests(unittest.TestCase): cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, bufsize=0) + proc.__enter__() + self.addCleanup(proc.__exit__, None, None, None) p = proc.stdout pollster = select.poll() pollster.register( p, select.POLLIN ) @@ -147,7 +149,6 @@ class PollTests(unittest.TestCase): continue else: self.fail('Unexpected return value from select.poll: %s' % fdlist) - p.close() def test_poll3(self): # test int overflow diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py index acf1102..0783c36 100644 --- a/Lib/test/test_posixpath.py +++ b/Lib/test/test_posixpath.py @@ -1,7 +1,5 @@ -import itertools import os import posixpath -import sys import unittest import warnings from posixpath import realpath, abspath, dirname, basename @@ -213,6 +211,28 @@ class PosixPathTest(unittest.TestCase): finally: os.lstat = save_lstat + @unittest.skipIf(posix is None, "Test requires posix module") + def test_ismount_directory_not_readable(self): + # issue #2466: Simulate ismount run on a directory that is not + # readable, which used to return False. + save_lstat = os.lstat + def fake_lstat(path): + st_ino = 0 + st_dev = 0 + if path.startswith(ABSTFN) and path != ABSTFN: + # ismount tries to read something inside the ABSTFN directory; + # simulate this being forbidden (no read permission). + raise OSError("Fake [Errno 13] Permission denied") + if path == ABSTFN: + st_dev = 1 + st_ino = 1 + return posix.stat_result((0, st_ino, st_dev, 0, 0, 0, 0, 0, 0, 0)) + try: + os.lstat = fake_lstat + self.assertIs(posixpath.ismount(ABSTFN), True) + finally: + os.lstat = save_lstat + def test_expanduser(self): self.assertEqual(posixpath.expanduser("foo"), "foo") self.assertEqual(posixpath.expanduser(b"foo"), b"foo") diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 59aa715..1f7ab7f 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -15,6 +15,7 @@ import string import test.support import time import types +import typing import unittest import urllib.parse import xml.etree @@ -356,7 +357,7 @@ def get_pydoc_html(module): def get_pydoc_link(module): "Returns a documentation web link of a module" dirname = os.path.dirname - basedir = os.path.join(dirname(dirname(__file__))) + basedir = dirname(dirname(__file__)) doc = pydoc.TextDoc() loc = doc.getdocloc(module, basedir=basedir) return loc @@ -815,6 +816,18 @@ class TestDescriptions(unittest.TestCase): expected = 'C in module %s object' % __name__ self.assertIn(expected, pydoc.render_doc(c)) + def test_typing_pydoc(self): + def foo(data: typing.List[typing.Any], + x: int) -> typing.Iterator[typing.Tuple[int, typing.Any]]: + ... + T = typing.TypeVar('T') + class C(typing.Generic[T], typing.Mapping[int, str]): ... + self.assertEqual(pydoc.render_doc(foo).splitlines()[-1], + 'f\x08fo\x08oo\x08o(data:List[Any], x:int)' + ' -> Iterator[Tuple[int, Any]]') + self.assertEqual(pydoc.render_doc(C).splitlines()[2], + 'class C\x08C(typing.Mapping)') + def test_builtin(self): for name in ('str', 'str.translate', 'builtins.str', 'builtins.str.translate'): diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py index 0b68bfa..92fffc4 100644 --- a/Lib/test/test_pyexpat.py +++ b/Lib/test/test_pyexpat.py @@ -656,11 +656,9 @@ class MalformedInputTest(unittest.TestCase): # \xc2\x85 is UTF-8 encoded U+0085 (NEXT LINE) xml = b"\r\n" parser = expat.ParserCreate() - try: + err_pattern = r'XML declaration not well-formed: line 1, column \d+' + with self.assertRaisesRegex(expat.ExpatError, err_pattern): parser.Parse(xml, True) - self.fail() - except expat.ExpatError as e: - self.assertEqual(str(e), 'XML declaration not well-formed: line 1, column 14') class ErrorMessageTest(unittest.TestCase): def test_codes(self): diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index 5393431..e80ed17 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -326,6 +326,24 @@ class MersenneTwister_TestBasicOps(TestBasicOps, unittest.TestCase): ['0x1.1239ddfb11b7cp-3', '0x1.b3cbb5c51b120p-4', '0x1.8c4f55116b60fp-1', '0x1.63eb525174a27p-1']) + def test_bug_27706(self): + # Verify that version 1 seeds are unaffected by hash randomization + + self.gen.seed('nofar', version=1) # hash('nofar') == 5990528763808513177 + self.assertEqual([self.gen.random().hex() for i in range(4)], + ['0x1.8645314505ad7p-1', '0x1.afb1f82e40a40p-5', + '0x1.2a59d2285e971p-1', '0x1.56977142a7880p-6']) + + self.gen.seed('rachel', version=1) # hash('rachel') == -9091735575445484789 + self.assertEqual([self.gen.random().hex() for i in range(4)], + ['0x1.0b294cc856fcdp-1', '0x1.2ad22d79e77b8p-3', + '0x1.3052b9c072678p-2', '0x1.578f332106574p-3']) + + self.gen.seed('', version=1) # hash('') == 0 + self.assertEqual([self.gen.random().hex() for i in range(4)], + ['0x1.b0580f98a7dbep-1', '0x1.84129978f9c1ap-1', + '0x1.aeaa51052e978p-2', '0x1.092178fb945a6p-2']) + def test_setstate_first_arg(self): self.assertRaises(ValueError, self.gen.setstate, (1, None, None)) diff --git a/Lib/test/test_range.py b/Lib/test/test_range.py index 106c732..c022f07 100644 --- a/Lib/test/test_range.py +++ b/Lib/test/test_range.py @@ -493,6 +493,35 @@ class RangeTest(unittest.TestCase): test_id = "reversed(range({}, {}, {}))".format(start, end, step) self.assert_iterators_equal(iter1, iter2, test_id, limit=100) + @test.support.cpython_only + def test_range_iterator_invocation(self): + import _testcapi + rangeiter_type = type(iter(range(0))) + + # rangeiter_new doesn't take keyword arguments + with self.assertRaises(TypeError): + rangeiter_type(a=1) + + # rangeiter_new takes exactly 3 arguments + self.assertRaises(TypeError, rangeiter_type) + self.assertRaises(TypeError, rangeiter_type, 1) + self.assertRaises(TypeError, rangeiter_type, 1, 1) + self.assertRaises(TypeError, rangeiter_type, 1, 1, 1, 1) + + # start, stop and stop must fit in C long + for good_val in [_testcapi.LONG_MAX, _testcapi.LONG_MIN]: + rangeiter_type(good_val, good_val, good_val) + for bad_val in [_testcapi.LONG_MAX + 1, _testcapi.LONG_MIN - 1]: + self.assertRaises(OverflowError, + rangeiter_type, bad_val, 1, 1) + self.assertRaises(OverflowError, + rangeiter_type, 1, bad_val, 1) + self.assertRaises(OverflowError, + rangeiter_type, 1, 1, bad_val) + + # step mustn't be zero + self.assertRaises(ValueError, rangeiter_type, 1, 1, 0) + def test_slice(self): def check(start, stop, step=None): i = slice(start, stop, step) diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index 7a74141..0834fe0 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -102,6 +102,8 @@ class ReTests(unittest.TestCase): self.assertEqual(re.sub("(?i)b+", "x", "bbbb BBBB"), 'x x') self.assertEqual(re.sub(r'\d+', self.bump_num, '08.2 -2 23x99y'), '9.3 -3 24x100y') + self.assertEqual(re.sub(r'\d+', self.bump_num, '08.2 -2 23x99y', 3), + '9.3 -3 23x99y') self.assertEqual(re.sub(r'\d+', self.bump_num, '08.2 -2 23x99y', count=3), '9.3 -3 23x99y') @@ -206,6 +208,7 @@ class ReTests(unittest.TestCase): def test_qualified_re_sub(self): self.assertEqual(re.sub('a', 'b', 'aaaaa'), 'bbbbb') + self.assertEqual(re.sub('a', 'b', 'aaaaa', 1), 'baaaa') self.assertEqual(re.sub('a', 'b', 'aaaaa', count=1), 'baaaa') def test_bug_114660(self): @@ -291,6 +294,7 @@ class ReTests(unittest.TestCase): self.assertEqual(re.subn("b+", "x", "bbbb BBBB"), ('x BBBB', 1)) self.assertEqual(re.subn("b+", "x", "xyz"), ('xyz', 0)) self.assertEqual(re.subn("b*", "x", "xyz"), ('xxxyxzx', 4)) + self.assertEqual(re.subn("b*", "x", "xyz", 2), ('xxxyz', 2)) self.assertEqual(re.subn("b*", "x", "xyz", count=2), ('xxxyz', 2)) def test_re_split(self): @@ -347,6 +351,7 @@ class ReTests(unittest.TestCase): self.assertTypedEqual(re.split(sep, ':a:b::c'), expected) def test_qualified_re_split(self): + self.assertEqual(re.split(":", ":a:b::c", 2), ['', 'a', 'b::c']) self.assertEqual(re.split(":", ":a:b::c", maxsplit=2), ['', 'a', 'b::c']) self.assertEqual(re.split(':', 'a:b:c:d', maxsplit=2), ['a', 'b', 'c:d']) self.assertEqual(re.split("(:)", ":a:b::c", maxsplit=2), @@ -1270,6 +1275,9 @@ class ReTests(unittest.TestCase): q = p.match(upper_char) self.assertTrue(q) + self.assertTrue(re.match('(?ixu) ' + upper_char, lower_char)) + self.assertTrue(re.match('(?ixu) ' + lower_char, upper_char)) + def test_dollar_matches_twice(self): "$ matches the end of string, and just before the terminating \n" pattern = re.compile('$') diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py index 35330ab..2c73df2 100644 --- a/Lib/test/test_readline.py +++ b/Lib/test/test_readline.py @@ -1,15 +1,25 @@ """ Very minimal unittests for parts of the readline module. """ +from contextlib import ExitStack +from errno import EIO import os +import selectors +import subprocess +import sys import tempfile import unittest -from test.support import import_module, unlink +from test.support import import_module, unlink, TESTFN from test.support.script_helper import assert_python_ok # Skip tests if there is no readline module readline = import_module('readline') +is_editline = readline.__doc__ and "libedit" in readline.__doc__ + +@unittest.skipUnless(hasattr(readline, "clear_history"), + "The history update test cannot be run because the " + "clear_history method is not available.") class TestHistoryManipulation (unittest.TestCase): """ These tests were added to check that the libedit emulation on OSX and the @@ -17,9 +27,6 @@ class TestHistoryManipulation (unittest.TestCase): why the tests cover only a small subset of the interface. """ - @unittest.skipUnless(hasattr(readline, "clear_history"), - "The history update test cannot be run because the " - "clear_history method is not available.") def testHistoryUpdates(self): readline.clear_history() @@ -82,11 +89,29 @@ class TestHistoryManipulation (unittest.TestCase): # write_history_file can create the target readline.write_history_file(hfilename) + def test_nonascii_history(self): + readline.clear_history() + try: + readline.add_history("entrée 1") + except UnicodeEncodeError as err: + self.skipTest("Locale cannot encode test data: " + format(err)) + readline.add_history("entrée 2") + readline.replace_history_item(1, "entrée 22") + readline.write_history_file(TESTFN) + self.addCleanup(os.remove, TESTFN) + readline.clear_history() + readline.read_history_file(TESTFN) + if is_editline: + # An add_history() call seems to be required for get_history_ + # item() to register items from the file + readline.add_history("dummy") + self.assertEqual(readline.get_history_item(1), "entrée 1") + self.assertEqual(readline.get_history_item(2), "entrée 22") + class TestReadline(unittest.TestCase): - @unittest.skipIf(readline._READLINE_VERSION < 0x0600 - and "libedit" not in readline.__doc__, + @unittest.skipIf(readline._READLINE_VERSION < 0x0601 and not is_editline, "not supported in this library version") def test_init(self): # Issue #19884: Ensure that the ANSI sequence "\033[1034h" is not @@ -96,6 +121,130 @@ class TestReadline(unittest.TestCase): TERM='xterm-256color') self.assertEqual(stdout, b'') + def test_nonascii(self): + try: + readline.add_history("\xEB\xEF") + except UnicodeEncodeError as err: + self.skipTest("Locale cannot encode test data: " + format(err)) + + script = r"""import readline + +is_editline = readline.__doc__ and "libedit" in readline.__doc__ +inserted = "[\xEFnserted]" +macro = "|t\xEB[after]" +set_pre_input_hook = getattr(readline, "set_pre_input_hook", None) +if is_editline or not set_pre_input_hook: + # The insert_line() call via pre_input_hook() does nothing with Editline, + # so include the extra text that would have been inserted here + macro = inserted + macro + +if is_editline: + readline.parse_and_bind(r'bind ^B ed-prev-char') + readline.parse_and_bind(r'bind "\t" rl_complete') + readline.parse_and_bind(r'bind -s ^A "{}"'.format(macro)) +else: + readline.parse_and_bind(r'Control-b: backward-char') + readline.parse_and_bind(r'"\t": complete') + readline.parse_and_bind(r'set disable-completion off') + readline.parse_and_bind(r'set show-all-if-ambiguous off') + readline.parse_and_bind(r'set show-all-if-unmodified off') + readline.parse_and_bind(r'Control-a: "{}"'.format(macro)) + +def pre_input_hook(): + readline.insert_text(inserted) + readline.redisplay() +if set_pre_input_hook: + set_pre_input_hook(pre_input_hook) + +def completer(text, state): + if text == "t\xEB": + if state == 0: + print("text", ascii(text)) + print("line", ascii(readline.get_line_buffer())) + print("indexes", readline.get_begidx(), readline.get_endidx()) + return "t\xEBnt" + if state == 1: + return "t\xEBxt" + if text == "t\xEBx" and state == 0: + return "t\xEBxt" + return None +readline.set_completer(completer) + +def display(substitution, matches, longest_match_length): + print("substitution", ascii(substitution)) + print("matches", ascii(matches)) +readline.set_completion_display_matches_hook(display) + +print("result", ascii(input())) +print("history", ascii(readline.get_history_item(1))) +""" + + input = b"\x01" # Ctrl-A, expands to "|t\xEB[after]" + input += b"\x02" * len("[after]") # Move cursor back + input += b"\t\t" # Display possible completions + input += b"x\t" # Complete "t\xEBx" -> "t\xEBxt" + input += b"\r" + output = run_pty(script, input) + self.assertIn(b"text 't\\xeb'\r\n", output) + self.assertIn(b"line '[\\xefnserted]|t\\xeb[after]'\r\n", output) + self.assertIn(b"indexes 11 13\r\n", output) + if not is_editline and hasattr(readline, "set_pre_input_hook"): + self.assertIn(b"substitution 't\\xeb'\r\n", output) + self.assertIn(b"matches ['t\\xebnt', 't\\xebxt']\r\n", output) + expected = br"'[\xefnserted]|t\xebxt[after]'" + self.assertIn(b"result " + expected + b"\r\n", output) + self.assertIn(b"history " + expected + b"\r\n", output) + + +def run_pty(script, input=b"dummy input\r"): + pty = import_module('pty') + output = bytearray() + [master, slave] = pty.openpty() + args = (sys.executable, '-c', script) + proc = subprocess.Popen(args, stdin=slave, stdout=slave, stderr=slave) + os.close(slave) + with ExitStack() as cleanup: + cleanup.enter_context(proc) + def terminate(proc): + try: + proc.terminate() + except ProcessLookupError: + # Workaround for Open/Net BSD bug (Issue 16762) + pass + cleanup.callback(terminate, proc) + cleanup.callback(os.close, master) + # Avoid using DefaultSelector and PollSelector. Kqueue() does not + # work with pseudo-terminals on OS X < 10.9 (Issue 20365) and Open + # BSD (Issue 20667). Poll() does not work with OS X 10.6 or 10.4 + # either (Issue 20472). Hopefully the file descriptor is low enough + # to use with select(). + sel = cleanup.enter_context(selectors.SelectSelector()) + sel.register(master, selectors.EVENT_READ | selectors.EVENT_WRITE) + os.set_blocking(master, False) + while True: + for [_, events] in sel.select(): + if events & selectors.EVENT_READ: + try: + chunk = os.read(master, 0x10000) + except OSError as err: + # Linux raises EIO when slave is closed (Issue 5380) + if err.errno != EIO: + raise + chunk = b"" + if not chunk: + return output + output.extend(chunk) + if events & selectors.EVENT_WRITE: + try: + input = input[os.write(master, input):] + except OSError as err: + # Apparently EIO means the slave was closed + if err.errno != EIO: + raise + input = b"" # Stop writing + if not input: + sel.modify(master, selectors.EVENT_READ) + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index a398a4f..e2c2f2d 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -200,6 +200,9 @@ class ParseArgsTestCase(unittest.TestCase): self.checkError([opt, '2', '-T'], "don't go together") self.checkError([opt, '2', '-l'], "don't go together") self.checkError([opt, '2', '-M', '4G'], "don't go together") + self.checkError([opt, '0', '-T'], "don't go together") + self.checkError([opt, '0', '-l'], "don't go together") + self.checkError([opt, '0', '-M', '4G'], "don't go together") def test_coverage(self): for opt in '-T', '--coverage': @@ -270,6 +273,16 @@ class ParseArgsTestCase(unittest.TestCase): self.assertEqual(ns.verbose, 0) self.assertEqual(ns.args, ['foo']) + def test_arg_option_arg(self): + ns = regrtest._parse_args(['test_unaryop', '-v', 'test_binop']) + self.assertEqual(ns.verbose, 1) + self.assertEqual(ns.args, ['test_unaryop', 'test_binop']) + + def test_unknown_option(self): + self.checkError(['--unknown-option'], + 'unrecognized arguments: --unknown-option') + + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py index 2ecae0f..cc9c570 100644 --- a/Lib/test/test_resource.py +++ b/Lib/test/test_resource.py @@ -158,6 +158,20 @@ class ResourceTest(unittest.TestCase): self.assertEqual(resource.prlimit(0, resource.RLIMIT_AS, limit), limit) + # Issue 20191: Reference counting bug + @unittest.skipUnless(hasattr(resource, 'prlimit'), 'no prlimit') + @support.requires_linux_version(2, 6, 36) + def test_prlimit_refcount(self): + class BadSeq: + def __len__(self): + return 2 + def __getitem__(self, key): + return limits[key] - 1 # new reference + + limits = resource.getrlimit(resource.RLIMIT_AS) + self.assertEqual(resource.prlimit(0, resource.RLIMIT_AS, BadSeq()), + limits) + def test_main(verbose=None): support.run_unittest(ResourceTest) diff --git a/Lib/test/test_runpy.py b/Lib/test/test_runpy.py index 87c83ec..db55db7 100644 --- a/Lib/test/test_runpy.py +++ b/Lib/test/test_runpy.py @@ -7,6 +7,7 @@ import re import tempfile import importlib, importlib.machinery, importlib.util import py_compile +import warnings from test.support import ( forget, make_legacy_pyc, unload, verbose, no_tracing, create_empty_file, temp_dir) @@ -246,7 +247,7 @@ class RunModuleTestCase(unittest.TestCase, CodeExecutionMixin): mod_fname) return pkg_dir, mod_fname, mod_name, mod_spec - def _del_pkg(self, top, depth, mod_name): + def _del_pkg(self, top): for entry in list(sys.modules): if entry.startswith("__runpy_pkg__"): del sys.modules[entry] @@ -320,7 +321,7 @@ class RunModuleTestCase(unittest.TestCase, CodeExecutionMixin): self._fix_ns_for_legacy_pyc(expected_ns, alter_sys) self.check_code_execution(create_ns, expected_ns) finally: - self._del_pkg(pkg_dir, depth, mod_name) + self._del_pkg(pkg_dir) if verbose > 1: print("Module executed successfully") def _check_package(self, depth, alter_sys=False, @@ -361,7 +362,7 @@ class RunModuleTestCase(unittest.TestCase, CodeExecutionMixin): self._fix_ns_for_legacy_pyc(expected_ns, alter_sys) self.check_code_execution(create_ns, expected_ns) finally: - self._del_pkg(pkg_dir, depth, pkg_name) + self._del_pkg(pkg_dir) if verbose > 1: print("Package executed successfully") def _add_relative_modules(self, base_dir, source, depth): @@ -424,7 +425,7 @@ from ..uncle.cousin import nephew self.assertIn("nephew", d2) del d2 # Ensure __loader__ entry doesn't keep file open finally: - self._del_pkg(pkg_dir, depth, mod_name) + self._del_pkg(pkg_dir) if verbose > 1: print("Module executed successfully") def test_run_module(self): @@ -447,7 +448,7 @@ from ..uncle.cousin import nephew result = self._make_pkg("", 1, "__main__") pkg_dir, _, mod_name, _ = result mod_name = mod_name.replace(".__main__", "") - self.addCleanup(self._del_pkg, pkg_dir, 1, mod_name) + self.addCleanup(self._del_pkg, pkg_dir) init = os.path.join(pkg_dir, "__runpy_pkg__", "__init__.py") exceptions = (ImportError, AttributeError, TypeError, ValueError) @@ -470,6 +471,31 @@ from ..uncle.cousin import nephew else: self.fail("Nothing raised; expected {}".format(name)) + def test_submodule_imported_warning(self): + pkg_dir, _, mod_name, _ = self._make_pkg("", 1) + try: + __import__(mod_name) + with self.assertWarnsRegex(RuntimeWarning, + r"found in sys\.modules"): + run_module(mod_name) + finally: + self._del_pkg(pkg_dir) + + def test_package_imported_no_warning(self): + pkg_dir, _, mod_name, _ = self._make_pkg("", 1, "__main__") + self.addCleanup(self._del_pkg, pkg_dir) + package = mod_name.replace(".__main__", "") + # No warning should occur if we only imported the parent package + __import__(package) + self.assertIn(package, sys.modules) + with warnings.catch_warnings(): + warnings.simplefilter("error", RuntimeWarning) + run_module(package) + # But the warning should occur if we imported the __main__ submodule + __import__(mod_name) + with self.assertWarnsRegex(RuntimeWarning, r"found in sys\.modules"): + run_module(package) + def test_run_package_in_namespace_package(self): for depth in range(1, 4): if verbose > 1: print("Testing package depth:", depth) @@ -524,7 +550,7 @@ from ..uncle.cousin import nephew try: self.check_code_execution(create_ns, expected_ns) finally: - self._del_pkg(pkg_dir, depth, mod_name) + self._del_pkg(pkg_dir) def test_pkgutil_walk_packages(self): # This is a dodgy hack to use the test_runpy infrastructure to test @@ -548,7 +574,7 @@ from ..uncle.cousin import nephew expected_modules.add(pkg_name + ".runpy_test") pkg_dir, mod_fname, mod_name, mod_spec = ( self._make_pkg("", max_depth)) - self.addCleanup(self._del_pkg, pkg_dir, max_depth, mod_name) + self.addCleanup(self._del_pkg, pkg_dir) for depth in range(2, max_depth+1): self._add_relative_modules(pkg_dir, "", depth) for finder, mod_name, ispkg in pkgutil.walk_packages([pkg_dir]): diff --git a/Lib/test/test_selectors.py b/Lib/test/test_selectors.py index 454c17b..852b2fe 100644 --- a/Lib/test/test_selectors.py +++ b/Lib/test/test_selectors.py @@ -9,6 +9,7 @@ from test import support from time import sleep import unittest import unittest.mock +import tempfile from time import monotonic as time try: import resource @@ -475,6 +476,16 @@ class EpollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn): SELECTOR = getattr(selectors, 'EpollSelector', None) + def test_register_file(self): + # epoll(7) returns EPERM when given a file to watch + s = self.SELECTOR() + with tempfile.NamedTemporaryFile() as f: + with self.assertRaises(IOError): + s.register(f, selectors.EVENT_READ) + # the SelectorKey has been removed + with self.assertRaises(KeyError): + s.get_key(f) + @unittest.skipUnless(hasattr(selectors, 'KqueueSelector'), "Test needs selectors.KqueueSelector)") @@ -482,6 +493,18 @@ class KqueueSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn): SELECTOR = getattr(selectors, 'KqueueSelector', None) + def test_register_bad_fd(self): + # a file descriptor that's been closed should raise an OSError + # with EBADF + s = self.SELECTOR() + bad_f = support.make_bad_fd() + with self.assertRaises(OSError) as cm: + s.register(bad_f, selectors.EVENT_READ) + self.assertEqual(cm.exception.errno, errno.EBADF) + # the SelectorKey has been removed + with self.assertRaises(KeyError): + s.get_key(bad_f) + @unittest.skipUnless(hasattr(selectors, 'DevpollSelector'), "Test needs selectors.DevpollSelector") diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py index 1a49edf..7594303 100644 --- a/Lib/test/test_set.py +++ b/Lib/test/test_set.py @@ -388,6 +388,21 @@ class TestSet(TestJointOps, unittest.TestCase): t = {1,2,3} self.assertEqual(s, t) + def test_set_literal_insertion_order(self): + # SF Issue #26020 -- Expect left to right insertion + s = {1, 1.0, True} + self.assertEqual(len(s), 1) + stored_value = s.pop() + self.assertEqual(type(stored_value), int) + + def test_set_literal_evaluation_order(self): + # Expect left to right expression evaluation + events = [] + def record(obj): + events.append(obj) + s = {record(1), record(2), record(3)} + self.assertEqual(events, [1, 2, 3]) + def test_hash(self): self.assertRaises(TypeError, hash, self.s) diff --git a/Lib/test/test_shelve.py b/Lib/test/test_shelve.py index bd51d86..b71af2b 100644 --- a/Lib/test/test_shelve.py +++ b/Lib/test/test_shelve.py @@ -162,6 +162,10 @@ class TestCase(unittest.TestCase): else: self.fail('Closed shelf should not find a key') + def test_default_protocol(self): + with shelve.Shelf({}) as s: + self.assertEqual(s._protocol, 3) + from test import mapping_tests class TestShelveBase(mapping_tests.BasicTestMappingProtocol): diff --git a/Lib/test/test_shlex.py b/Lib/test/test_shlex.py index 4fafdd4..55b533d 100644 --- a/Lib/test/test_shlex.py +++ b/Lib/test/test_shlex.py @@ -173,6 +173,18 @@ class ShlexTest(unittest.TestCase): "%s: %s != %s" % (self.data[i][0], l, self.data[i][1:])) + def testEmptyStringHandling(self): + """Test that parsing of empty strings is correctly handled.""" + # see Issue #21999 + expected = ['', ')', 'abc'] + + s = shlex.shlex("'')abc", posix=True) + slist = list(s) + self.assertEqual(slist, expected) + expected = ["''", ')', 'abc'] + s = shlex.shlex("'')abc") + self.assertEqual(list(s), expected) + def testQuote(self): safeunquoted = string.ascii_letters + string.digits + '@%_-+=:,./' unicode_sample = '\xe9\xe0\xdf' # e + acute accent, a + grave, sharp s diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py index 13b30b9..709feeb 100644 --- a/Lib/test/test_shutil.py +++ b/Lib/test/test_shutil.py @@ -19,22 +19,11 @@ from shutil import (make_archive, unregister_unpack_format, get_unpack_formats, SameFileError) import tarfile +import zipfile import warnings from test import support -from test.support import TESTFN, check_warnings, captured_stdout, requires_zlib - -try: - import bz2 - BZ2_SUPPORTED = True -except ImportError: - BZ2_SUPPORTED = False - -try: - import lzma - LZMA_SUPPORTED = True -except ImportError: - LZMA_SUPPORTED = False +from test.support import TESTFN, check_warnings, captured_stdout TESTFN2 = TESTFN + "2" @@ -45,12 +34,6 @@ try: except ImportError: UID_GID_SUPPORT = False -try: - import zipfile - ZIP_SUPPORT = True -except ImportError: - ZIP_SUPPORT = shutil.which('zip') - def _fake_rename(*args, **kwargs): # Pretend the destination path is on a different filesystem. raise OSError(getattr(errno, 'EXDEV', 18), "Invalid cross-device link") @@ -964,7 +947,7 @@ class TestShutil(unittest.TestCase): self.assertEqual(getattr(file1_stat, 'st_flags'), getattr(file2_stat, 'st_flags')) - @requires_zlib + @support.requires_zlib def test_make_tarball(self): # creating something to tar root_dir, base_dir = self._create_files('') @@ -1020,7 +1003,7 @@ class TestShutil(unittest.TestCase): write_file((root_dir, 'outer'), 'xxx') return root_dir, base_dir - @requires_zlib + @support.requires_zlib @unittest.skipUnless(shutil.which('tar'), 'Need the tar command to run') def test_tarfile_vs_tar(self): @@ -1053,8 +1036,7 @@ class TestShutil(unittest.TestCase): self.assertEqual(tarball, base_name + '.tar') self.assertTrue(os.path.isfile(tarball)) - @requires_zlib - @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run') + @support.requires_zlib def test_make_zipfile(self): # creating something to zip root_dir, base_dir = self._create_files() @@ -1068,6 +1050,19 @@ class TestShutil(unittest.TestCase): with support.change_cwd(work_dir): base_name = os.path.abspath(rel_base_name) + res = make_archive(rel_base_name, 'zip', root_dir) + + self.assertEqual(res, base_name + '.zip') + self.assertTrue(os.path.isfile(res)) + self.assertTrue(zipfile.is_zipfile(res)) + with zipfile.ZipFile(res) as zf: + self.assertCountEqual(zf.namelist(), + ['dist/', 'dist/sub/', 'dist/sub2/', + 'dist/file1', 'dist/file2', 'dist/sub/file3', + 'outer']) + + with support.change_cwd(work_dir): + base_name = os.path.abspath(rel_base_name) res = make_archive(rel_base_name, 'zip', root_dir, base_dir) self.assertEqual(res, base_name + '.zip') @@ -1078,8 +1073,7 @@ class TestShutil(unittest.TestCase): ['dist/', 'dist/sub/', 'dist/sub2/', 'dist/file1', 'dist/file2', 'dist/sub/file3']) - @requires_zlib - @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run') + @support.requires_zlib @unittest.skipUnless(shutil.which('zip'), 'Need the zip command to run') def test_zipfile_vs_zip(self): @@ -1105,8 +1099,7 @@ class TestShutil(unittest.TestCase): names2 = zf.namelist() self.assertEqual(sorted(names), sorted(names2)) - @requires_zlib - @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run') + @support.requires_zlib @unittest.skipUnless(shutil.which('unzip'), 'Need the unzip command to run') def test_unzip_zipfile(self): @@ -1133,7 +1126,7 @@ class TestShutil(unittest.TestCase): base_name = os.path.join(tmpdir, 'archive') self.assertRaises(ValueError, make_archive, base_name, 'xxx') - @requires_zlib + @support.requires_zlib def test_make_archive_owner_group(self): # testing make_archive with owner and group, with various combinations # this works even if there's not gid/uid support @@ -1161,7 +1154,7 @@ class TestShutil(unittest.TestCase): self.assertTrue(os.path.isfile(res)) - @requires_zlib + @support.requires_zlib @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support") def test_tarfile_root_owner(self): root_dir, base_dir = self._create_files() @@ -1206,7 +1199,7 @@ class TestShutil(unittest.TestCase): self.assertEqual(make_archive('test', 'tar'), 'test.tar') self.assertTrue(os.path.isfile('test.tar')) - @requires_zlib + @support.requires_zlib def test_make_zipfile_in_curdir(self): # Issue #21280 root_dir = self.mkdtemp() @@ -1230,34 +1223,47 @@ class TestShutil(unittest.TestCase): formats = [name for name, params in get_archive_formats()] self.assertNotIn('xxx', formats) - @requires_zlib - def test_unpack_archive(self): - formats = ['tar', 'gztar', 'zip'] - if BZ2_SUPPORTED: - formats.append('bztar') - if LZMA_SUPPORTED: - formats.append('xztar') - + def check_unpack_archive(self, format): root_dir, base_dir = self._create_files() expected = rlistdir(root_dir) expected.remove('outer') - for format in formats: - base_name = os.path.join(self.mkdtemp(), 'archive') - filename = make_archive(base_name, format, root_dir, base_dir) - - # let's try to unpack it now - tmpdir2 = self.mkdtemp() - unpack_archive(filename, tmpdir2) - self.assertEqual(rlistdir(tmpdir2), expected) - - # and again, this time with the format specified - tmpdir3 = self.mkdtemp() - unpack_archive(filename, tmpdir3, format=format) - self.assertEqual(rlistdir(tmpdir3), expected) + + base_name = os.path.join(self.mkdtemp(), 'archive') + filename = make_archive(base_name, format, root_dir, base_dir) + + # let's try to unpack it now + tmpdir2 = self.mkdtemp() + unpack_archive(filename, tmpdir2) + self.assertEqual(rlistdir(tmpdir2), expected) + + # and again, this time with the format specified + tmpdir3 = self.mkdtemp() + unpack_archive(filename, tmpdir3, format=format) + self.assertEqual(rlistdir(tmpdir3), expected) + self.assertRaises(shutil.ReadError, unpack_archive, TESTFN) self.assertRaises(ValueError, unpack_archive, TESTFN, format='xxx') - def test_unpack_registery(self): + def test_unpack_archive_tar(self): + self.check_unpack_archive('tar') + + @support.requires_zlib + def test_unpack_archive_gztar(self): + self.check_unpack_archive('gztar') + + @support.requires_bz2 + def test_unpack_archive_bztar(self): + self.check_unpack_archive('bztar') + + @support.requires_lzma + def test_unpack_archive_xztar(self): + self.check_unpack_archive('xztar') + + @support.requires_zlib + def test_unpack_archive_zip(self): + self.check_unpack_archive('zip') + + def test_unpack_registry(self): formats = get_unpack_formats() diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index c151a50..ea3ca28 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -709,7 +709,7 @@ class GeneralModuleTests(unittest.TestCase): raise socket.gaierror def testSendtoErrors(self): - # Testing that sendto doesn't masks failures. See #10169. + # Testing that sendto doesn't mask failures. See #10169. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.addCleanup(s.close) s.bind(('', 0)) @@ -1442,11 +1442,31 @@ class GeneralModuleTests(unittest.TestCase): # type and populates the socket object. # # On Windows this trick won't work, so the test is skipped. - fd, _ = tempfile.mkstemp() + fd, path = tempfile.mkstemp() + self.addCleanup(os.unlink, path) with socket.socket(family=42424, type=13331, fileno=fd) as s: self.assertEqual(s.family, 42424) self.assertEqual(s.type, 13331) + @unittest.skipUnless(hasattr(os, 'sendfile'), 'test needs os.sendfile()') + def test__sendfile_use_sendfile(self): + class File: + def __init__(self, fd): + self.fd = fd + + def fileno(self): + return self.fd + with socket.socket() as sock: + fd = os.open(os.curdir, os.O_RDONLY) + os.close(fd) + with self.assertRaises(socket._GiveupOnSendfile): + sock._sendfile_use_sendfile(File(fd)) + with self.assertRaises(OverflowError): + sock._sendfile_use_sendfile(File(2**1000)) + with self.assertRaises(TypeError): + sock._sendfile_use_sendfile(File(None)) + + @unittest.skipUnless(HAVE_SOCKET_CAN, 'SocketCan required for this test.') class BasicCANTest(unittest.TestCase): @@ -4610,9 +4630,10 @@ class BufferIOTest(SocketConnectedTest): SocketConnectedTest.__init__(self, methodName=methodName) def testRecvIntoArray(self): - buf = bytearray(1024) + buf = array.array("B", [0] * len(MSG)) nbytes = self.cli_conn.recv_into(buf) self.assertEqual(nbytes, len(MSG)) + buf = buf.tobytes() msg = buf[:len(MSG)] self.assertEqual(msg, MSG) @@ -4639,9 +4660,10 @@ class BufferIOTest(SocketConnectedTest): _testRecvIntoMemoryview = _testRecvIntoArray def testRecvFromIntoArray(self): - buf = bytearray(1024) + buf = array.array("B", [0] * len(MSG)) nbytes, addr = self.cli_conn.recvfrom_into(buf) self.assertEqual(nbytes, len(MSG)) + buf = buf.tobytes() msg = buf[:len(MSG)] self.assertEqual(msg, MSG) @@ -4695,9 +4717,17 @@ def isTipcAvailable(): """ if not hasattr(socket, "AF_TIPC"): return False - if not os.path.isfile("/proc/modules"): - return False - with open("/proc/modules") as f: + try: + f = open("/proc/modules") + except IOError as e: + # It's ok if the file does not exist, is a directory or if we + # have not the permission to read it. In any other case it's a + # real error, so raise it again. + if e.errno in (errno.ENOENT, errno.EISDIR, errno.EACCES): + return False + else: + raise + with f: for line in f: if line.startswith("tipc "): return True diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index d2fc36d..5515583 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -23,6 +23,9 @@ ssl = support.import_module("ssl") PROTOCOLS = sorted(ssl._PROTOCOL_NAMES) HOST = support.HOST +IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL') +IS_OPENSSL_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0) + def data_file(*name): return os.path.join(os.path.dirname(__file__), *name) @@ -54,6 +57,8 @@ CRLFILE = data_file("revocation.crl") SIGNED_CERTFILE = data_file("keycert3.pem") SIGNED_CERTFILE2 = data_file("keycert4.pem") SIGNING_CA = data_file("pycacert.pem") +# cert with all kinds of subject alt names +ALLSANFILE = data_file("allsans.pem") REMOTE_HOST = "self-signed.pythontest.net" REMOTE_ROOT_CERT = data_file("selfsigned_pythontestdotnet.pem") @@ -143,8 +148,8 @@ class BasicSocketTests(unittest.TestCase): def test_str_for_enums(self): # Make sure that the PROTOCOL_* constants have enum-like string # reprs. - proto = ssl.PROTOCOL_SSLv23 - self.assertEqual(str(proto), '_SSLMethod.PROTOCOL_SSLv23') + proto = ssl.PROTOCOL_TLS + self.assertEqual(str(proto), '_SSLMethod.PROTOCOL_TLS') ctx = ssl.SSLContext(proto) self.assertIs(ctx.protocol, proto) @@ -276,6 +281,27 @@ class BasicSocketTests(unittest.TestCase): self.assertEqual(p['subjectAltName'], san) + def test_parse_all_sans(self): + p = ssl._ssl._test_decode_cert(ALLSANFILE) + self.assertEqual(p['subjectAltName'], + ( + ('DNS', 'allsans'), + ('othername', ''), + ('othername', ''), + ('email', 'user@example.org'), + ('DNS', 'www.example.org'), + ('DirName', + ((('countryName', 'XY'),), + (('localityName', 'Castle Anthrax'),), + (('organizationName', 'Python Software Foundation'),), + (('commonName', 'dirname example'),))), + ('URI', 'https://www.python.org/'), + ('IP Address', '127.0.0.1'), + ('IP Address', '0:0:0:0:0:0:0:1\n'), + ('Registered ID', '1.2.3.4.5') + ) + ) + def test_DER_to_PEM(self): with open(CAFILE_CACERT, 'r') as f: pem = f.read() @@ -312,8 +338,8 @@ class BasicSocketTests(unittest.TestCase): self.assertGreaterEqual(status, 0) self.assertLessEqual(status, 15) # Version string as returned by {Open,Libre}SSL, the format might change - if "LibreSSL" in s: - self.assertTrue(s.startswith("LibreSSL {:d}.{:d}".format(major, minor)), + if IS_LIBRESSL: + self.assertTrue(s.startswith("LibreSSL {:d}".format(major)), (s, t, hex(n))) else: self.assertTrue(s.startswith("OpenSSL {:d}.{:d}.{:d}".format(major, minor, fix)), @@ -790,7 +816,8 @@ class ContextTests(unittest.TestCase): def test_constructor(self): for protocol in PROTOCOLS: ssl.SSLContext(protocol) - self.assertRaises(TypeError, ssl.SSLContext) + ctx = ssl.SSLContext() + self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLS) self.assertRaises(ValueError, ssl.SSLContext, -1) self.assertRaises(ValueError, ssl.SSLContext, 42) @@ -811,15 +838,15 @@ class ContextTests(unittest.TestCase): def test_options(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1) # OP_ALL | OP_NO_SSLv2 | OP_NO_SSLv3 is the default value - self.assertEqual(ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3, - ctx.options) + default = (ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3) + if not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0): + default |= ssl.OP_NO_COMPRESSION + self.assertEqual(default, ctx.options) ctx.options |= ssl.OP_NO_TLSv1 - self.assertEqual(ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3 | ssl.OP_NO_TLSv1, - ctx.options) + self.assertEqual(default | ssl.OP_NO_TLSv1, ctx.options) if can_clear_options(): - ctx.options = (ctx.options & ~ssl.OP_NO_SSLv2) | ssl.OP_NO_TLSv1 - self.assertEqual(ssl.OP_ALL | ssl.OP_NO_TLSv1 | ssl.OP_NO_SSLv3, - ctx.options) + ctx.options = (ctx.options & ~ssl.OP_NO_TLSv1) + self.assertEqual(default, ctx.options) ctx.options = 0 # Ubuntu has OP_NO_SSLv3 forced on by default self.assertEqual(0, ctx.options & ~ssl.OP_NO_SSLv3) @@ -1155,6 +1182,7 @@ class ContextTests(unittest.TestCase): self.assertRaises(TypeError, ctx.load_default_certs, 'SERVER_AUTH') @unittest.skipIf(sys.platform == "win32", "not-Windows specific") + @unittest.skipIf(IS_LIBRESSL, "LibreSSL doesn't support env vars") def test_load_default_certs_env(self): ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1) with support.EnvironmentVarGuard() as env: @@ -1750,13 +1778,13 @@ class NetworkedBIOTests(unittest.TestCase): sslobj = ctx.wrap_bio(incoming, outgoing, False, REMOTE_HOST) self.assertIs(sslobj._sslobj.owner, sslobj) self.assertIsNone(sslobj.cipher()) - self.assertIsNone(sslobj.shared_ciphers()) + self.assertIsNotNone(sslobj.shared_ciphers()) self.assertRaises(ValueError, sslobj.getpeercert) if 'tls-unique' in ssl.CHANNEL_BINDING_TYPES: self.assertIsNone(sslobj.get_channel_binding('tls-unique')) self.ssl_io_loop(sock, incoming, outgoing, sslobj.do_handshake) self.assertTrue(sslobj.cipher()) - self.assertIsNone(sslobj.shared_ciphers()) + self.assertIsNotNone(sslobj.shared_ciphers()) self.assertTrue(sslobj.getpeercert()) if 'tls-unique' in ssl.CHANNEL_BINDING_TYPES: self.assertTrue(sslobj.get_channel_binding('tls-unique')) @@ -2633,7 +2661,7 @@ else: s.close() def test_socketserver(self): - """Using a SocketServer to create and manage SSL connections.""" + """Using socketserver to create and manage SSL connections.""" server = make_https_server(self, certfile=CERTFILE) # try to connect if support.verbose: @@ -2660,8 +2688,6 @@ else: def test_asyncore_server(self): """Check the example asyncore integration.""" - indata = "TEST MESSAGE of mixed case\n" - if support.verbose: sys.stdout.write("\n") @@ -2793,20 +2819,13 @@ else: # consume data s.read() - data = b"data" - # read(-1, buffer) is supported, even though read(-1) is not + data = b"data" s.send(data) buffer = bytearray(len(data)) self.assertEqual(s.read(-1, buffer), len(data)) self.assertEqual(buffer, data) - # recv/read(0) should return no data - s.send(data) - self.assertEqual(s.recv(0), b"") - self.assertEqual(s.read(0), b"") - self.assertEqual(s.read(), data) - # Make sure sendmsg et al are disallowed to avoid # inadvertent disclosure of data and/or corruption # of the encrypted data stream @@ -2822,6 +2841,26 @@ else: s.close() + def test_recv_zero(self): + server = ThreadedEchoServer(CERTFILE) + server.__enter__() + self.addCleanup(server.__exit__, None, None) + s = socket.create_connection((HOST, server.port)) + self.addCleanup(s.close) + s = ssl.wrap_socket(s, suppress_ragged_eofs=False) + self.addCleanup(s.close) + + # recv/read(0) should return no data + s.send(b"data") + self.assertEqual(s.recv(0), b"") + self.assertEqual(s.read(0), b"") + self.assertEqual(s.read(), b"data") + + # Should not block if the other end sends no data + s.setblocking(False) + self.assertEqual(s.recv(0), b"") + self.assertEqual(s.recv_into(bytearray()), 0) + def test_nonblocking_send(self): server = ThreadedEchoServer(CERTFILE, certreqs=ssl.CERT_NONE, @@ -2980,7 +3019,7 @@ else: with context.wrap_socket(socket.socket()) as s: self.assertIs(s.version(), None) s.connect((HOST, server.port)) - self.assertEqual(s.version(), "TLSv1") + self.assertEqual(s.version(), 'TLSv1') self.assertIs(s.version(), None) @unittest.skipUnless(ssl.HAS_ECDH, "test requires ECDH-enabled OpenSSL") @@ -3122,24 +3161,36 @@ else: (['http/3.0', 'http/4.0'], None) ] for client_protocols, expected in protocol_tests: - server_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) + server_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) server_context.load_cert_chain(CERTFILE) server_context.set_alpn_protocols(server_protocols) - client_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) + client_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) client_context.load_cert_chain(CERTFILE) client_context.set_alpn_protocols(client_protocols) - stats = server_params_test(client_context, server_context, - chatty=True, connectionchatty=True) - msg = "failed trying %s (s) and %s (c).\n" \ - "was expecting %s, but got %%s from the %%s" \ - % (str(server_protocols), str(client_protocols), - str(expected)) - client_result = stats['client_alpn_protocol'] - self.assertEqual(client_result, expected, msg % (client_result, "client")) - server_result = stats['server_alpn_protocols'][-1] \ - if len(stats['server_alpn_protocols']) else 'nothing' - self.assertEqual(server_result, expected, msg % (server_result, "server")) + try: + stats = server_params_test(client_context, + server_context, + chatty=True, + connectionchatty=True) + except ssl.SSLError as e: + stats = e + + if expected is None and IS_OPENSSL_1_1: + # OpenSSL 1.1.0 raises handshake error + self.assertIsInstance(stats, ssl.SSLError) + else: + msg = "failed trying %s (s) and %s (c).\n" \ + "was expecting %s, but got %%s from the %%s" \ + % (str(server_protocols), str(client_protocols), + str(expected)) + client_result = stats['client_alpn_protocol'] + self.assertEqual(client_result, expected, + msg % (client_result, "client")) + server_result = stats['server_alpn_protocols'][-1] \ + if len(stats['server_alpn_protocols']) else 'nothing' + self.assertEqual(server_result, expected, + msg % (server_result, "server")) def test_selected_npn_protocol(self): # selected_npn_protocol() is None unless NPN is used @@ -3287,13 +3338,23 @@ else: client_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) client_context.verify_mode = ssl.CERT_REQUIRED client_context.load_verify_locations(SIGNING_CA) - client_context.set_ciphers("RC4") - server_context.set_ciphers("AES:RC4") + if ssl.OPENSSL_VERSION_INFO >= (1, 0, 2): + client_context.set_ciphers("AES128:AES256") + server_context.set_ciphers("AES256") + alg1 = "AES256" + alg2 = "AES-256" + else: + client_context.set_ciphers("AES:3DES") + server_context.set_ciphers("3DES") + alg1 = "3DES" + alg2 = "DES-CBC3" + stats = server_params_test(client_context, server_context) ciphers = stats['server_shared_ciphers'][0] self.assertGreater(len(ciphers), 0) for name, tls_version, bits in ciphers: - self.assertIn("RC4", name.split("-")) + if not alg1 in name.split("-") and alg2 not in name: + self.fail(name) def test_read_write_after_close_raises_valuerror(self): context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) diff --git a/Lib/test/test_structseq.py b/Lib/test/test_structseq.py index 3ecb27d..36630a1 100644 --- a/Lib/test/test_structseq.py +++ b/Lib/test/test_structseq.py @@ -97,7 +97,7 @@ class StructSeqTest(unittest.TestCase): class Exc(Exception): pass - # Devious code could crash structseqs' contructors + # Devious code could crash structseqs' constructors class C: def __getitem__(self, i): raise Exc diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 4704d49..758e094 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -686,7 +686,7 @@ class ProcessTestCase(BaseTestCase): self.assertEqual(stdout, "banana") self.assertStderrEqual(stderr.encode(), b"pineapple\npear\n") - def test_communicate_timeout_large_ouput(self): + def test_communicate_timeout_large_output(self): # Test an expiring timeout while the child is outputting lots of data. p = subprocess.Popen([sys.executable, "-c", 'import sys,os,time;' @@ -1354,7 +1354,7 @@ class POSIXProcessTestCase(BaseTestCase): desired_exception = e desired_exception.strerror += ': ' + repr(self._nonexistent_dir) else: - self.fail("chdir to nonexistant directory %s succeeded." % + self.fail("chdir to nonexistent directory %s succeeded." % self._nonexistent_dir) return desired_exception diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index 2c00417..5e0f990 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -1,5 +1,6 @@ import importlib import shutil +import stat import sys import os import unittest @@ -9,14 +10,9 @@ import errno from test import support TESTFN = support.TESTFN -TESTDIRN = os.path.basename(tempfile.mkdtemp(dir='.')) class TestSupport(unittest.TestCase): - def setUp(self): - support.unlink(TESTFN) - support.rmtree(TESTDIRN) - tearDown = setUp def test_import_module(self): support.import_module("ftplib") @@ -48,11 +44,28 @@ class TestSupport(unittest.TestCase): support.unlink(TESTFN) def test_rmtree(self): - os.mkdir(TESTDIRN) - os.mkdir(os.path.join(TESTDIRN, TESTDIRN)) - support.rmtree(TESTDIRN) - self.assertFalse(os.path.exists(TESTDIRN)) - support.rmtree(TESTDIRN) + dirpath = support.TESTFN + 'd' + subdirpath = os.path.join(dirpath, 'subdir') + os.mkdir(dirpath) + os.mkdir(subdirpath) + support.rmtree(dirpath) + self.assertFalse(os.path.exists(dirpath)) + with support.swap_attr(support, 'verbose', 0): + support.rmtree(dirpath) + + os.mkdir(dirpath) + os.mkdir(subdirpath) + os.chmod(dirpath, stat.S_IRUSR|stat.S_IXUSR) + with support.swap_attr(support, 'verbose', 0): + support.rmtree(dirpath) + self.assertFalse(os.path.exists(dirpath)) + + os.mkdir(dirpath) + os.mkdir(subdirpath) + os.chmod(dirpath, 0) + with support.swap_attr(support, 'verbose', 0): + support.rmtree(dirpath) + self.assertFalse(os.path.exists(dirpath)) def test_forget(self): mod_filename = TESTFN + '.py' @@ -227,8 +240,10 @@ class TestSupport(unittest.TestCase): self.assertEqual(cm.exception.errno, errno.EBADF) def test_check_syntax_error(self): - support.check_syntax_error(self, "def class") + support.check_syntax_error(self, "def class", lineno=1, offset=9) self.assertRaises(AssertionError, support.check_syntax_error, self, "1") + #with self.assertRaises(AssertionError): + #support.check_syntax_error(self, "x=1") def test_CleanImport(self): import importlib diff --git a/Lib/test/test_symtable.py b/Lib/test/test_symtable.py index e5e7b83..fbb1bdc 100644 --- a/Lib/test/test_symtable.py +++ b/Lib/test/test_symtable.py @@ -148,15 +148,23 @@ class SymtableTest(unittest.TestCase): def test_filename_correct(self): ### Bug tickler: SyntaxError file name correct whether error raised ### while parsing or building symbol table. - def checkfilename(brokencode): + def checkfilename(brokencode, offset): try: symtable.symtable(brokencode, "spam", "exec") except SyntaxError as e: self.assertEqual(e.filename, "spam") + self.assertEqual(e.lineno, 1) + self.assertEqual(e.offset, offset) else: self.fail("no SyntaxError for %r" % (brokencode,)) - checkfilename("def f(x): foo)(") # parse-time - checkfilename("def f(x): global x") # symtable-build-time + checkfilename("def f(x): foo)(", 14) # parse-time + checkfilename("def f(x): global x", 10) # symtable-build-time + symtable.symtable("pass", b"spam", "exec") + with self.assertRaises(TypeError): + symtable.symtable("pass", bytearray(b"spam"), "exec") + symtable.symtable("pass", memoryview(b"spam"), "exec") + with self.assertRaises(TypeError): + symtable.symtable("pass", list(b"spam"), "exec") def test_eval(self): symbols = symtable.symtable("42", "?", "eval") diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 057441c..301c142 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -342,7 +342,9 @@ isn't, there should be a syntax error. ... SyntaxError: 'break' outside loop -This should probably raise a better error than a SystemError (or none at all). +This raises a SyntaxError, it used to raise a SystemError. +Context for this change can be found on issue #27514 + In 2.5 there was a missing exception and an assert was triggered in a debug build. The number of blocks must be greater than CO_MAXBLOCKS. SF #1565514 @@ -370,7 +372,7 @@ build. The number of blocks must be greater than CO_MAXBLOCKS. SF #1565514 ... break Traceback (most recent call last): ... - SystemError: too many statically nested blocks + SyntaxError: too many statically nested blocks Misuse of the nonlocal statement can lead to a few unique syntax errors. @@ -538,7 +540,7 @@ from test import support class SyntaxTestCase(unittest.TestCase): def _check_error(self, code, errtext, - filename="", mode="exec", subclass=None): + filename="", mode="exec", subclass=None, lineno=None, offset=None): """Check that compiling code raises SyntaxError with errtext. errtest is a regular expression that must be present in the @@ -553,6 +555,11 @@ class SyntaxTestCase(unittest.TestCase): mo = re.search(errtext, str(err)) if mo is None: self.fail("SyntaxError did not contain '%r'" % (errtext,)) + self.assertEqual(err.filename, filename) + if lineno is not None: + self.assertEqual(err.lineno, lineno) + if offset is not None: + self.assertEqual(err.offset, offset) else: self.fail("compile() did not raise SyntaxError") @@ -563,7 +570,7 @@ class SyntaxTestCase(unittest.TestCase): self._check_error("del f()", "delete") def test_global_err_then_warn(self): - # Bug tickler: The SyntaxError raised for one global statement + # Bug #763201: The SyntaxError raised for one global statement # shouldn't be clobbered by a SyntaxWarning issued for a later one. source = """if 1: def error(a): @@ -573,7 +580,7 @@ class SyntaxTestCase(unittest.TestCase): global b # SyntaxWarning """ warnings.filterwarnings(action='ignore', category=SyntaxWarning) - self._check_error(source, "global") + self._check_error(source, "global", lineno=3, offset=16) warnings.filters.pop(0) def test_break_outside_loop(self): diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index a531879..4435d69 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -803,6 +803,7 @@ class SysModuleTest(unittest.TestCase): c = sys.getallocatedblocks() self.assertIn(c, range(b - 50, b + 50)) + @test.support.requires_type_collecting def test_is_finalizing(self): self.assertIs(sys.is_finalizing(), False) # Don't use the atexit module because _Py_Finalizing is only set @@ -1083,9 +1084,12 @@ class SizeofTest(unittest.TestCase): check((1,2,3), vsize('') + 3*self.P) # type # static type: PyTypeObject - s = vsize('P2n15Pl4Pn9Pn11PIP') + fmt = 'P2n15Pl4Pn9Pn11PIP' + if hasattr(sys, 'getcounts'): + fmt += '3n2P' + s = vsize(fmt) check(int, s) - s = vsize('P2n15Pl4Pn9Pn11PIP' # PyTypeObject + s = vsize(fmt + # PyTypeObject '3P' # PyAsyncMethods '36P' # PyNumberMethods '3P' # PyMappingMethods diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index abfb34d..1efb841 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -3,6 +3,7 @@ import os import io from hashlib import md5 from contextlib import contextmanager +from random import Random import unittest import unittest.mock @@ -349,12 +350,17 @@ class CommonReadTest(ReadTest): def test_ignore_zeros(self): # Test TarFile's ignore_zeros option. + # generate 512 pseudorandom bytes + data = Random(0).getrandbits(512*8).to_bytes(512, 'big') for char in (b'\0', b'a'): # Test if EOFHeaderError ('\0') and InvalidHeaderError ('a') # are ignored correctly. with self.open(tmpname, "w") as fobj: fobj.write(char * 1024) - fobj.write(tarfile.TarInfo("foo").tobuf()) + tarinfo = tarfile.TarInfo("foo") + tarinfo.size = len(data) + fobj.write(tarinfo.tobuf()) + fobj.write(data) tar = tarfile.open(tmpname, mode="r", ignore_zeros=True) try: diff --git a/Lib/test/test_textwrap.py b/Lib/test/test_textwrap.py index a44184f..5a33c15 100644 --- a/Lib/test/test_textwrap.py +++ b/Lib/test/test_textwrap.py @@ -444,6 +444,37 @@ What a mess! text = "aa \xe4\xe4-\xe4\xe4" self.check_wrap(text, 7, ["aa \xe4\xe4-", "\xe4\xe4"]) + def test_non_breaking_space(self): + text = 'This is a sentence with non-breaking\N{NO-BREAK SPACE}space.' + + self.check_wrap(text, 20, + ['This is a sentence', + 'with non-', + 'breaking\N{NO-BREAK SPACE}space.'], + break_on_hyphens=True) + + self.check_wrap(text, 20, + ['This is a sentence', + 'with', + 'non-breaking\N{NO-BREAK SPACE}space.'], + break_on_hyphens=False) + + def test_narrow_non_breaking_space(self): + text = ('This is a sentence with non-breaking' + '\N{NARROW NO-BREAK SPACE}space.') + + self.check_wrap(text, 20, + ['This is a sentence', + 'with non-', + 'breaking\N{NARROW NO-BREAK SPACE}space.'], + break_on_hyphens=True) + + self.check_wrap(text, 20, + ['This is a sentence', + 'with', + 'non-breaking\N{NARROW NO-BREAK SPACE}space.'], + break_on_hyphens=False) + class MaxLinesTestCase(BaseTestCase): text = "Hello there, how are you this fine day? I'm glad to hear it!" diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index b49a961..b630509 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -3,7 +3,8 @@ Tests for the threading module. """ import test.support -from test.support import verbose, strip_python_stderr, import_module, cpython_only +from test.support import (verbose, import_module, cpython_only, + requires_type_collecting) from test.support.script_helper import assert_python_ok, assert_python_failure import random @@ -987,6 +988,7 @@ class ThreadingExceptionTests(BaseTestCase): self.assertIn("ZeroDivisionError", err) self.assertNotIn("Unhandled exception", err) + @requires_type_collecting def test_print_exception_stderr_is_none_1(self): script = r"""if True: import sys @@ -1041,6 +1043,24 @@ class ThreadingExceptionTests(BaseTestCase): self.assertEqual(out, b'') self.assertNotIn("Unhandled exception", err.decode()) + def test_bare_raise_in_brand_new_thread(self): + def bare_raise(): + raise + + class Issue27558(threading.Thread): + exc = None + + def run(self): + try: + bare_raise() + except Exception as exc: + self.exc = exc + + thread = Issue27558() + thread.start() + thread.join() + self.assertIsNotNone(thread.exc) + self.assertIsInstance(thread.exc, RuntimeError) class TimerTests(BaseTestCase): diff --git a/Lib/test/test_tools/test_fixcid.py b/Lib/test/test_tools/test_fixcid.py new file mode 100644 index 0000000..bce029b --- /dev/null +++ b/Lib/test/test_tools/test_fixcid.py @@ -0,0 +1,92 @@ +'''Test Tools/scripts/fixcid.py.''' + +from io import StringIO +import os, os.path +import runpy +import sys +from test import support +from test.test_tools import skip_if_missing, scriptsdir +import unittest + +skip_if_missing() + +class Test(unittest.TestCase): + def test_parse_strings(self): + old1 = 'int xx = "xx\\"xx"[xx];\n' + old2 = "int xx = 'x\\'xx' + xx;\n" + output = self.run_script(old1 + old2) + new1 = 'int yy = "xx\\"xx"[yy];\n' + new2 = "int yy = 'x\\'xx' + yy;\n" + self.assertMultiLineEqual(output, + "1\n" + "< {old1}" + "> {new1}" + "{new1}" + "2\n" + "< {old2}" + "> {new2}" + "{new2}".format(old1=old1, old2=old2, new1=new1, new2=new2) + ) + + def test_alter_comments(self): + output = self.run_script( + substfile= + "xx yy\n" + "*aa bb\n", + args=("-c", "-",), + input= + "/* xx altered */\n" + "int xx;\n" + "/* aa unaltered */\n" + "int aa;\n", + ) + self.assertMultiLineEqual(output, + "1\n" + "< /* xx altered */\n" + "> /* yy altered */\n" + "/* yy altered */\n" + "2\n" + "< int xx;\n" + "> int yy;\n" + "int yy;\n" + "/* aa unaltered */\n" + "4\n" + "< int aa;\n" + "> int bb;\n" + "int bb;\n" + ) + + def test_directory(self): + os.mkdir(support.TESTFN) + self.addCleanup(support.rmtree, support.TESTFN) + c_filename = os.path.join(support.TESTFN, "file.c") + with open(c_filename, "w") as file: + file.write("int xx;\n") + with open(os.path.join(support.TESTFN, "file.py"), "w") as file: + file.write("xx = 'unaltered'\n") + script = os.path.join(scriptsdir, "fixcid.py") + output = self.run_script(args=(support.TESTFN,)) + self.assertMultiLineEqual(output, + "{}:\n" + "1\n" + '< int xx;\n' + '> int yy;\n'.format(c_filename) + ) + + def run_script(self, input="", *, args=("-",), substfile="xx yy\n"): + substfilename = support.TESTFN + ".subst" + with open(substfilename, "w") as file: + file.write(substfile) + self.addCleanup(support.unlink, substfilename) + + argv = ["fixcid.py", "-s", substfilename] + list(args) + script = os.path.join(scriptsdir, "fixcid.py") + with support.swap_attr(sys, "argv", argv), \ + support.swap_attr(sys, "stdin", StringIO(input)), \ + support.captured_stdout() as output, \ + support.captured_stderr(): + try: + runpy.run_path(script, run_name="__main__") + except SystemExit as exit: + self.assertEqual(exit.code, 0) + return output.getvalue() diff --git a/Lib/test/test_tools/test_i18n.py b/Lib/test/test_tools/test_i18n.py index 6eaa8dd..ce6f549 100644 --- a/Lib/test/test_tools/test_i18n.py +++ b/Lib/test/test_tools/test_i18n.py @@ -4,9 +4,13 @@ import os import unittest from test.support.script_helper import assert_python_ok -from test.test_tools import toolsdir +from test.test_tools import skip_if_missing, toolsdir from test.support import temp_cwd + +skip_if_missing() + + class Test_pygettext(unittest.TestCase): """Tests for the pygettext.py tool""" diff --git a/Lib/test/test_trace.py b/Lib/test/test_trace.py index 03dff84..f66a3bc 100644 --- a/Lib/test/test_trace.py +++ b/Lib/test/test_trace.py @@ -311,11 +311,11 @@ class TestCoverage(unittest.TestCase): with captured_stdout() as stdout: self._coverage(tracer) stdout = stdout.getvalue() - self.assertTrue("pprint.py" in stdout) - self.assertTrue("case.py" in stdout) # from unittest + self.assertIn("pprint.py", stdout) + self.assertIn("case.py", stdout) # from unittest files = os.listdir(TESTFN) - self.assertTrue("pprint.cover" in files) - self.assertTrue("unittest.case.cover" in files) + self.assertIn("pprint.cover", files) + self.assertIn("unittest.case.cover", files) def test_coverage_ignore(self): # Ignore all files, nothing should be traced nor printed diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index b7695d6..49cedda 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -19,7 +19,7 @@ test_frame = namedtuple('frame', ['f_code', 'f_globals', 'f_locals']) test_tb = namedtuple('tb', ['tb_frame', 'tb_lineno', 'tb_next']) -class SyntaxTracebackCases(unittest.TestCase): +class TracebackCases(unittest.TestCase): # For now, a very minimal set of tests. I want to be sure that # formatting of SyntaxErrors works based on changes for 2.1. @@ -106,10 +106,6 @@ class SyntaxTracebackCases(unittest.TestCase): str_name = '.'.join([X.__module__, X.__qualname__]) self.assertEqual(err[0], "%s: %s\n" % (str_name, str_value)) - def test_without_exception(self): - err = traceback.format_exception_only(None, None) - self.assertEqual(err, ['None\n']) - def test_encoded_file(self): # Test that tracebacks are correctly printed for encoded source files: # - correct line number (Issue2384) @@ -178,6 +174,7 @@ class SyntaxTracebackCases(unittest.TestCase): # Issue #18960: coding spec should has no effect do_test("0\n# coding: GBK\n", "h\xe9 ho", 'utf-8', 5) + @support.requires_type_collecting def test_print_traceback_at_exit(self): # Issue #22599: Ensure that it is possible to use the traceback module # to display an exception at Python exit @@ -455,6 +452,17 @@ class BaseExceptionReportingTests: msg = self.get_report(e).splitlines() self.assertEqual(msg[-2], ' ^') + def test_message_none(self): + # A message that looks like "None" should not be treated specially + err = self.get_report(Exception(None)) + self.assertIn('Exception: None\n', err) + err = self.get_report(Exception('None')) + self.assertIn('Exception: None\n', err) + err = self.get_report(Exception()) + self.assertIn('Exception\n', err) + err = self.get_report(Exception('')) + self.assertIn('Exception\n', err) + class PyExcReportingTests(BaseExceptionReportingTests, unittest.TestCase): # @@ -680,8 +688,12 @@ class TestFrame(unittest.TestCase): class TestStack(unittest.TestCase): def test_walk_stack(self): - s = list(traceback.walk_stack(None)) - self.assertGreater(len(s), 10) + def deeper(): + return list(traceback.walk_stack(None)) + s1 = list(traceback.walk_stack(None)) + s2 = deeper() + self.assertEqual(len(s2) - len(s1), 1) + self.assertEqual(s2[1:], s1) def test_walk_tb(self): try: diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index a7f8dd5..d203ce3 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -4,14 +4,15 @@ import pickle import re import sys from unittest import TestCase, main, skipUnless, SkipTest +from copy import copy, deepcopy from typing import Any from typing import TypeVar, AnyStr from typing import T, KT, VT # Not in __all__. from typing import Union, Optional -from typing import Tuple +from typing import Tuple, List, MutableMapping from typing import Callable -from typing import Generic +from typing import Generic, ClassVar from typing import cast from typing import get_type_hints from typing import no_type_check, no_type_check_decorator @@ -20,7 +21,12 @@ from typing import NewType from typing import NamedTuple from typing import IO, TextIO, BinaryIO from typing import Pattern, Match +import abc import typing +try: + import collections.abc as collections_abc +except ImportError: + import collections as collections_abc # Fallback for PY3.2. class BaseTestCase(TestCase): @@ -39,6 +45,10 @@ class BaseTestCase(TestCase): message += ' : %s' % msg raise self.failureException(message) + def clear_caches(self): + for f in typing._cleanups: + f() + class Employee: pass @@ -62,18 +72,11 @@ class AnyTests(BaseTestCase): with self.assertRaises(TypeError): isinstance(42, Any) - def test_any_subclass(self): - self.assertTrue(issubclass(Employee, Any)) - self.assertTrue(issubclass(int, Any)) - self.assertTrue(issubclass(type(None), Any)) - self.assertTrue(issubclass(object, Any)) - - def test_others_any(self): - self.assertFalse(issubclass(Any, Employee)) - self.assertFalse(issubclass(Any, int)) - self.assertFalse(issubclass(Any, type(None))) - # However, Any is a subclass of object (this can't be helped). - self.assertTrue(issubclass(Any, object)) + def test_any_subclass_type_error(self): + with self.assertRaises(TypeError): + issubclass(Employee, Any) + with self.assertRaises(TypeError): + issubclass(Any, Employee) def test_repr(self): self.assertEqual(repr(Any), 'typing.Any') @@ -88,32 +91,21 @@ class AnyTests(BaseTestCase): with self.assertRaises(TypeError): class A(Any): pass + with self.assertRaises(TypeError): + class A(type(Any)): + pass def test_cannot_instantiate(self): with self.assertRaises(TypeError): Any() + with self.assertRaises(TypeError): + type(Any)() def test_cannot_subscript(self): with self.assertRaises(TypeError): Any[int] - def test_any_is_subclass(self): - # Any should be considered a subclass of everything. - self.assertIsSubclass(Any, Any) - self.assertIsSubclass(Any, typing.List) - self.assertIsSubclass(Any, typing.List[int]) - self.assertIsSubclass(Any, typing.List[T]) - self.assertIsSubclass(Any, typing.Mapping) - self.assertIsSubclass(Any, typing.Mapping[str, int]) - self.assertIsSubclass(Any, typing.Mapping[KT, VT]) - self.assertIsSubclass(Any, Generic) - self.assertIsSubclass(Any, Generic[T]) - self.assertIsSubclass(Any, Generic[KT, VT]) - self.assertIsSubclass(Any, AnyStr) - self.assertIsSubclass(Any, Union) - self.assertIsSubclass(Any, Union[int, str]) - self.assertIsSubclass(Any, typing.Match) - self.assertIsSubclass(Any, typing.Match[str]) + def test_any_works_with_alias(self): # These expressions must simply not fail. typing.Match[Any] typing.Pattern[Any] @@ -124,13 +116,8 @@ class TypeVarTests(BaseTestCase): def test_basic_plain(self): T = TypeVar('T') - # Every class is a subclass of T. - self.assertIsSubclass(int, T) - self.assertIsSubclass(str, T) # T equals itself. self.assertEqual(T, T) - # T is a subclass of itself. - self.assertIsSubclass(T, T) # T is an instance of TypeVar self.assertIsInstance(T, TypeVar) @@ -139,16 +126,12 @@ class TypeVarTests(BaseTestCase): with self.assertRaises(TypeError): isinstance(42, T) - def test_basic_constrained(self): - A = TypeVar('A', str, bytes) - # Only str and bytes are subclasses of A. - self.assertIsSubclass(str, A) - self.assertIsSubclass(bytes, A) - self.assertNotIsSubclass(int, A) - # A equals itself. - self.assertEqual(A, A) - # A is a subclass of itself. - self.assertIsSubclass(A, A) + def test_typevar_subclass_type_error(self): + T = TypeVar('T') + with self.assertRaises(TypeError): + issubclass(int, T) + with self.assertRaises(TypeError): + issubclass(T, int) def test_constrained_error(self): with self.assertRaises(TypeError): @@ -164,8 +147,9 @@ class TypeVarTests(BaseTestCase): self.assertEqual(Union[X, X], X) self.assertNotEqual(Union[X, int], Union[X]) self.assertNotEqual(Union[X, int], Union[int]) - self.assertEqual(Union[X, int].__union_params__, (X, int)) - self.assertEqual(Union[X, int].__union_set_params__, {X, int}) + self.assertEqual(Union[X, int].__args__, (X, int)) + self.assertEqual(Union[X, int].__parameters__, (X,)) + self.assertIs(Union[X, int].__origin__, Union) def test_union_constrained(self): A = TypeVar('A', str, bytes) @@ -185,19 +169,6 @@ class TypeVarTests(BaseTestCase): self.assertNotEqual(TypeVar('T'), TypeVar('T')) self.assertNotEqual(TypeVar('T', int, str), TypeVar('T', int, str)) - def test_subclass_as_unions(self): - # None of these are true -- each type var is its own world. - self.assertFalse(issubclass(TypeVar('T', int, str), - TypeVar('T', int, str))) - self.assertFalse(issubclass(TypeVar('T', int, float), - TypeVar('T', int, float, str))) - self.assertFalse(issubclass(TypeVar('T', int, str), - TypeVar('T', str, int))) - A = TypeVar('A', int, str) - B = TypeVar('B', int, str, float) - self.assertFalse(issubclass(A, B)) - self.assertFalse(issubclass(B, A)) - def test_cannot_subclass_vars(self): with self.assertRaises(TypeError): class V(TypeVar('T')): @@ -212,12 +183,6 @@ class TypeVarTests(BaseTestCase): with self.assertRaises(TypeError): TypeVar('A')() - def test_bound(self): - X = TypeVar('X', bound=Employee) - self.assertIsSubclass(Employee, X) - self.assertIsSubclass(Manager, X) - self.assertNotIsSubclass(int, X) - def test_bound_errors(self): with self.assertRaises(TypeError): TypeVar('X', bound=42) @@ -230,16 +195,27 @@ class UnionTests(BaseTestCase): def test_basics(self): u = Union[int, float] self.assertNotEqual(u, Union) - self.assertTrue(issubclass(int, u)) - self.assertTrue(issubclass(float, u)) + + def test_subclass_error(self): + with self.assertRaises(TypeError): + issubclass(int, Union) + with self.assertRaises(TypeError): + issubclass(Union, int) + with self.assertRaises(TypeError): + issubclass(int, Union[int, str]) + with self.assertRaises(TypeError): + issubclass(Union[int, str], int) def test_union_any(self): u = Union[Any] self.assertEqual(u, Any) - u = Union[int, Any] - self.assertEqual(u, Any) - u = Union[Any, int] - self.assertEqual(u, Any) + u1 = Union[int, Any] + u2 = Union[Any, int] + u3 = Union[Any, object] + self.assertEqual(u1, u2) + self.assertNotEqual(u1, Any) + self.assertNotEqual(u2, Any) + self.assertNotEqual(u3, Any) def test_union_object(self): u = Union[object] @@ -249,29 +225,11 @@ class UnionTests(BaseTestCase): u = Union[object, int] self.assertEqual(u, object) - def test_union_any_object(self): - u = Union[object, Any] - self.assertEqual(u, Any) - u = Union[Any, object] - self.assertEqual(u, Any) - def test_unordered(self): u1 = Union[int, float] u2 = Union[float, int] self.assertEqual(u1, u2) - def test_subclass(self): - u = Union[int, Employee] - self.assertTrue(issubclass(Manager, u)) - - def test_self_subclass(self): - self.assertTrue(issubclass(Union[KT, VT], Union)) - self.assertFalse(issubclass(Union, Union[KT, VT])) - - def test_multiple_inheritance(self): - u = Union[int, Employee] - self.assertTrue(issubclass(ManagingFounder, u)) - def test_single_class_disappears(self): t = Union[Employee] self.assertIs(t, Employee) @@ -284,13 +242,6 @@ class UnionTests(BaseTestCase): u = Union[Employee, Manager] self.assertIs(u, Employee) - def test_weird_subclasses(self): - u = Union[Employee, int, float] - v = Union[int, float] - self.assertTrue(issubclass(v, u)) - w = Union[int, Manager] - self.assertTrue(issubclass(w, u)) - def test_union_union(self): u = Union[int, float] v = Union[u, Employee] @@ -308,15 +259,27 @@ class UnionTests(BaseTestCase): class C(Union): pass with self.assertRaises(TypeError): + class C(type(Union)): + pass + with self.assertRaises(TypeError): class C(Union[int, str]): pass def test_cannot_instantiate(self): with self.assertRaises(TypeError): Union() + with self.assertRaises(TypeError): + type(Union)() u = Union[int, float] with self.assertRaises(TypeError): u() + with self.assertRaises(TypeError): + type(u)() + + def test_union_generalization(self): + self.assertFalse(Union[str, typing.Iterable[int]] == str) + self.assertFalse(Union[str, typing.Iterable[int]] == typing.Iterable[int]) + self.assertTrue(Union[str, typing.Iterable] == typing.Iterable) def test_optional(self): o = Optional[int] @@ -327,10 +290,6 @@ class UnionTests(BaseTestCase): with self.assertRaises(TypeError): Union[()] - def test_issubclass_union(self): - self.assertIsSubclass(Union[int, str], Union) - self.assertNotIsSubclass(int, Union) - def test_union_instance_type_error(self): with self.assertRaises(TypeError): isinstance(42, Union[int, str]) @@ -355,43 +314,17 @@ class UnionTests(BaseTestCase): Union[Elem, str] # Nor should this -class TypeVarUnionTests(BaseTestCase): - - def test_simpler(self): - A = TypeVar('A', int, str, float) - B = TypeVar('B', int, str) - self.assertIsSubclass(A, A) - self.assertIsSubclass(B, B) - self.assertNotIsSubclass(B, A) - self.assertIsSubclass(A, Union[int, str, float]) - self.assertNotIsSubclass(Union[int, str, float], A) - self.assertNotIsSubclass(Union[int, str], B) - self.assertIsSubclass(B, Union[int, str]) - self.assertNotIsSubclass(A, B) - self.assertNotIsSubclass(Union[int, str, float], B) - self.assertNotIsSubclass(A, Union[int, str]) - - def test_var_union_subclass(self): - self.assertTrue(issubclass(T, Union[int, T])) - self.assertTrue(issubclass(KT, Union[KT, VT])) - - def test_var_union(self): - TU = TypeVar('TU', Union[int, float], None) - self.assertIsSubclass(int, TU) - self.assertIsSubclass(float, TU) - - class TupleTests(BaseTestCase): def test_basics(self): - self.assertTrue(issubclass(Tuple[int, str], Tuple)) - self.assertTrue(issubclass(Tuple[int, str], Tuple[int, str])) - self.assertFalse(issubclass(int, Tuple)) - self.assertFalse(issubclass(Tuple[float, str], Tuple[int, str])) - self.assertFalse(issubclass(Tuple[int, str, int], Tuple[int, str])) - self.assertFalse(issubclass(Tuple[int, str], Tuple[int, str, int])) + with self.assertRaises(TypeError): + issubclass(Tuple, Tuple[int, str]) + with self.assertRaises(TypeError): + issubclass(tuple, Tuple[int, str]) + + class TP(tuple): ... self.assertTrue(issubclass(tuple, Tuple)) - self.assertFalse(issubclass(Tuple, tuple)) # Can't have it both ways. + self.assertTrue(issubclass(TP, Tuple)) def test_equality(self): self.assertEqual(Tuple[int], Tuple[int]) @@ -407,21 +340,7 @@ class TupleTests(BaseTestCase): def test_tuple_instance_type_error(self): with self.assertRaises(TypeError): isinstance((0, 0), Tuple[int, int]) - with self.assertRaises(TypeError): - isinstance((0, 0), Tuple) - - def test_tuple_ellipsis_subclass(self): - - class B: - pass - - class C(B): - pass - - self.assertNotIsSubclass(Tuple[B], Tuple[B, ...]) - self.assertIsSubclass(Tuple[C, ...], Tuple[B, ...]) - self.assertNotIsSubclass(Tuple[C, ...], Tuple[B]) - self.assertNotIsSubclass(Tuple[C], Tuple[B, ...]) + self.assertIsInstance((0, 0), Tuple) def test_repr(self): self.assertEqual(repr(Tuple), 'typing.Tuple') @@ -439,17 +358,9 @@ class TupleTests(BaseTestCase): class CallableTests(BaseTestCase): def test_self_subclass(self): - self.assertTrue(issubclass(Callable[[int], int], Callable)) - self.assertFalse(issubclass(Callable, Callable[[int], int])) - self.assertTrue(issubclass(Callable[[int], int], Callable[[int], int])) - self.assertFalse(issubclass(Callable[[Employee], int], - Callable[[Manager], int])) - self.assertFalse(issubclass(Callable[[Manager], int], - Callable[[Employee], int])) - self.assertFalse(issubclass(Callable[[int], Employee], - Callable[[int], Manager])) - self.assertFalse(issubclass(Callable[[int], Manager], - Callable[[int], Employee])) + with self.assertRaises(TypeError): + self.assertTrue(issubclass(type(lambda x: x), Callable[[int], int])) + self.assertTrue(issubclass(type(lambda x: x), Callable)) def test_eq_hash(self): self.assertEqual(Callable[[int], int], Callable[[int], int]) @@ -460,23 +371,26 @@ class CallableTests(BaseTestCase): self.assertNotEqual(Callable[[int], int], Callable[[], int]) self.assertNotEqual(Callable[[int], int], Callable) - def test_cannot_subclass(self): - with self.assertRaises(TypeError): - - class C(Callable): - pass - - with self.assertRaises(TypeError): - - class C(Callable[[int], int]): - pass - def test_cannot_instantiate(self): with self.assertRaises(TypeError): Callable() + with self.assertRaises(TypeError): + type(Callable)() c = Callable[[int], str] with self.assertRaises(TypeError): c() + with self.assertRaises(TypeError): + type(c)() + + def test_callable_wrong_forms(self): + with self.assertRaises(TypeError): + Callable[[...], int] + with self.assertRaises(TypeError): + Callable[(), int] + with self.assertRaises(TypeError): + Callable[[()], int] + with self.assertRaises(TypeError): + Callable[[int, 1], 2] def test_callable_instance_works(self): def f(): @@ -512,6 +426,10 @@ class CallableTests(BaseTestCase): self.assertEqual(get_type_hints(foo, globals(), locals()), {'a': Callable[..., T]}) + def test_ellipsis_in_generic(self): + # Shouldn't crash; see https://github.com/python/typing/issues/259 + typing.List[Callable[..., str]] + XK = TypeVar('XK', str, bytes) XV = TypeVar('XV') @@ -595,6 +513,13 @@ class ProtocolTests(BaseTestCase): def test_protocol_instance_type_error(self): with self.assertRaises(TypeError): isinstance(0, typing.SupportsAbs) + class C1(typing.SupportsInt): + def __int__(self) -> int: + return 42 + class C2(C1): + pass + c = C2() + self.assertIsInstance(c, C1) class GenericTests(BaseTestCase): @@ -612,6 +537,15 @@ class GenericTests(BaseTestCase): with self.assertRaises(TypeError): Y[str, str] + def test_generic_errors(self): + T = TypeVar('T') + with self.assertRaises(TypeError): + Generic[T]() + with self.assertRaises(TypeError): + isinstance([], List[int]) + with self.assertRaises(TypeError): + issubclass(list, List[int]) + def test_init(self): T = TypeVar('T') S = TypeVar('S') @@ -622,9 +556,9 @@ class GenericTests(BaseTestCase): def test_repr(self): self.assertEqual(repr(SimpleMapping), - __name__ + '.' + 'SimpleMapping<~XK, ~XV>') + __name__ + '.' + 'SimpleMapping') self.assertEqual(repr(MySimpleMapping), - __name__ + '.' + 'MySimpleMapping<~XK, ~XV>') + __name__ + '.' + 'MySimpleMapping') def test_chain_repr(self): T = TypeVar('T') @@ -648,7 +582,36 @@ class GenericTests(BaseTestCase): self.assertNotEqual(Z, Y[T]) self.assertTrue(str(Z).endswith( - '.C<~T>[typing.Tuple[~S, ~T]]<~S, ~T>[~T, int]<~T>[str]')) + '.C[typing.Tuple[str, int]]')) + + def test_new_repr(self): + T = TypeVar('T') + U = TypeVar('U', covariant=True) + S = TypeVar('S') + + self.assertEqual(repr(List), 'typing.List') + self.assertEqual(repr(List[T]), 'typing.List[~T]') + self.assertEqual(repr(List[U]), 'typing.List[+U]') + self.assertEqual(repr(List[S][T][int]), 'typing.List[int]') + self.assertEqual(repr(List[int]), 'typing.List[int]') + + def test_new_repr_complex(self): + T = TypeVar('T') + TS = TypeVar('TS') + + self.assertEqual(repr(typing.Mapping[T, TS][TS, T]), 'typing.Mapping[~TS, ~T]') + self.assertEqual(repr(List[Tuple[T, TS]][int, T]), + 'typing.List[typing.Tuple[int, ~T]]') + self.assertEqual(repr(List[Tuple[T, T]][List[int]]), + 'typing.List[typing.Tuple[typing.List[int], typing.List[int]]]') + + def test_new_repr_bare(self): + T = TypeVar('T') + self.assertEqual(repr(Generic[T]), 'typing.Generic[~T]') + self.assertEqual(repr(typing._Protocol[T]), 'typing.Protocol[~T]') + class C(typing.Dict[Any, Any]): ... + # this line should just work + repr(C.__mro__) def test_dict(self): T = TypeVar('T') @@ -667,6 +630,234 @@ class GenericTests(BaseTestCase): c.bar = 'abc' self.assertEqual(c.__dict__, {'bar': 'abc'}) + def test_false_subclasses(self): + class MyMapping(MutableMapping[str, str]): pass + self.assertNotIsInstance({}, MyMapping) + self.assertNotIsSubclass(dict, MyMapping) + + def test_abc_bases(self): + class MM(MutableMapping[str, str]): + def __getitem__(self, k): + return None + def __setitem__(self, k, v): + pass + def __delitem__(self, k): + pass + def __iter__(self): + return iter(()) + def __len__(self): + return 0 + # this should just work + MM().update() + self.assertIsInstance(MM(), collections_abc.MutableMapping) + self.assertIsInstance(MM(), MutableMapping) + self.assertNotIsInstance(MM(), List) + self.assertNotIsInstance({}, MM) + + def test_multiple_bases(self): + class MM1(MutableMapping[str, str], collections_abc.MutableMapping): + pass + with self.assertRaises(TypeError): + # consistent MRO not possible + class MM2(collections_abc.MutableMapping, MutableMapping[str, str]): + pass + + def test_orig_bases(self): + T = TypeVar('T') + class C(typing.Dict[str, T]): ... + self.assertEqual(C.__orig_bases__, (typing.Dict[str, T],)) + + def test_naive_runtime_checks(self): + def naive_dict_check(obj, tp): + # Check if a dictionary conforms to Dict type + if len(tp.__parameters__) > 0: + raise NotImplementedError + if tp.__args__: + KT, VT = tp.__args__ + return all(isinstance(k, KT) and isinstance(v, VT) + for k, v in obj.items()) + self.assertTrue(naive_dict_check({'x': 1}, typing.Dict[str, int])) + self.assertFalse(naive_dict_check({1: 'x'}, typing.Dict[str, int])) + with self.assertRaises(NotImplementedError): + naive_dict_check({1: 'x'}, typing.Dict[str, T]) + + def naive_generic_check(obj, tp): + # Check if an instance conforms to the generic class + if not hasattr(obj, '__orig_class__'): + raise NotImplementedError + return obj.__orig_class__ == tp + class Node(Generic[T]): ... + self.assertTrue(naive_generic_check(Node[int](), Node[int])) + self.assertFalse(naive_generic_check(Node[str](), Node[int])) + self.assertFalse(naive_generic_check(Node[str](), List)) + with self.assertRaises(NotImplementedError): + naive_generic_check([1,2,3], Node[int]) + + def naive_list_base_check(obj, tp): + # Check if list conforms to a List subclass + return all(isinstance(x, tp.__orig_bases__[0].__args__[0]) + for x in obj) + class C(List[int]): ... + self.assertTrue(naive_list_base_check([1, 2, 3], C)) + self.assertFalse(naive_list_base_check(['a', 'b'], C)) + + def test_multi_subscr_base(self): + T = TypeVar('T') + U = TypeVar('U') + V = TypeVar('V') + class C(List[T][U][V]): ... + class D(C, List[T][U][V]): ... + self.assertEqual(C.__parameters__, (V,)) + self.assertEqual(D.__parameters__, (V,)) + self.assertEqual(C[int].__parameters__, ()) + self.assertEqual(D[int].__parameters__, ()) + self.assertEqual(C[int].__args__, (int,)) + self.assertEqual(D[int].__args__, (int,)) + self.assertEqual(C.__bases__, (List,)) + self.assertEqual(D.__bases__, (C, List)) + self.assertEqual(C.__orig_bases__, (List[T][U][V],)) + self.assertEqual(D.__orig_bases__, (C, List[T][U][V])) + + def test_extended_generic_rules_eq(self): + T = TypeVar('T') + U = TypeVar('U') + self.assertEqual(Tuple[T, T][int], Tuple[int, int]) + self.assertEqual(typing.Iterable[Tuple[T, T]][T], typing.Iterable[Tuple[T, T]]) + with self.assertRaises(TypeError): + Tuple[T, int][()] + with self.assertRaises(TypeError): + Tuple[T, U][T, ...] + + self.assertEqual(Union[T, int][int], int) + self.assertEqual(Union[T, U][int, Union[int, str]], Union[int, str]) + class Base: ... + class Derived(Base): ... + self.assertEqual(Union[T, Base][Derived], Base) + with self.assertRaises(TypeError): + Union[T, int][1] + + self.assertEqual(Callable[[T], T][KT], Callable[[KT], KT]) + self.assertEqual(Callable[..., List[T]][int], Callable[..., List[int]]) + with self.assertRaises(TypeError): + Callable[[T], U][..., int] + with self.assertRaises(TypeError): + Callable[[T], U][[], int] + + def test_extended_generic_rules_repr(self): + T = TypeVar('T') + self.assertEqual(repr(Union[Tuple, Callable]).replace('typing.', ''), + 'Union[Tuple, Callable]') + self.assertEqual(repr(Union[Tuple, Tuple[int]]).replace('typing.', ''), + 'Tuple') + self.assertEqual(repr(Callable[..., Optional[T]][int]).replace('typing.', ''), + 'Callable[..., Union[int, NoneType]]') + self.assertEqual(repr(Callable[[], List[T]][int]).replace('typing.', ''), + 'Callable[[], List[int]]') + + def test_generic_forward_ref(self): + def foobar(x: List[List['CC']]): ... + class CC: ... + self.assertEqual(get_type_hints(foobar, globals(), locals()), {'x': List[List[CC]]}) + T = TypeVar('T') + AT = Tuple[T, ...] + def barfoo(x: AT): ... + self.assertIs(get_type_hints(barfoo, globals(), locals())['x'], AT) + CT = Callable[..., List[T]] + def barfoo2(x: CT): ... + self.assertIs(get_type_hints(barfoo2, globals(), locals())['x'], CT) + + def test_extended_generic_rules_subclassing(self): + class T1(Tuple[T, KT]): ... + class T2(Tuple[T, ...]): ... + class C1(Callable[[T], T]): ... + class C2(Callable[..., int]): + def __call__(self): + return None + + self.assertEqual(T1.__parameters__, (T, KT)) + self.assertEqual(T1[int, str].__args__, (int, str)) + self.assertEqual(T1[int, T].__origin__, T1) + + self.assertEqual(T2.__parameters__, (T,)) + with self.assertRaises(TypeError): + T1[int] + with self.assertRaises(TypeError): + T2[int, str] + + self.assertEqual(repr(C1[int]).split('.')[-1], 'C1[int]') + self.assertEqual(C2.__parameters__, ()) + self.assertIsInstance(C2(), collections_abc.Callable) + self.assertIsSubclass(C2, collections_abc.Callable) + self.assertIsSubclass(C1, collections_abc.Callable) + self.assertIsInstance(T1(), tuple) + self.assertIsSubclass(T2, tuple) + self.assertIsSubclass(Tuple[int, ...], typing.Sequence) + self.assertIsSubclass(Tuple[int, ...], typing.Iterable) + + def test_fail_with_bare_union(self): + with self.assertRaises(TypeError): + List[Union] + with self.assertRaises(TypeError): + Tuple[Optional] + with self.assertRaises(TypeError): + ClassVar[ClassVar] + with self.assertRaises(TypeError): + List[ClassVar[int]] + + def test_fail_with_bare_generic(self): + T = TypeVar('T') + with self.assertRaises(TypeError): + List[Generic] + with self.assertRaises(TypeError): + Tuple[Generic[T]] + with self.assertRaises(TypeError): + List[typing._Protocol] + + def test_type_erasure_special(self): + T = TypeVar('T') + # this is the only test that checks type caching + self.clear_caches() + class MyTup(Tuple[T, T]): ... + self.assertIs(MyTup[int]().__class__, MyTup) + self.assertIs(MyTup[int]().__orig_class__, MyTup[int]) + class MyCall(Callable[..., T]): + def __call__(self): return None + self.assertIs(MyCall[T]().__class__, MyCall) + self.assertIs(MyCall[T]().__orig_class__, MyCall[T]) + class MyDict(typing.Dict[T, T]): ... + self.assertIs(MyDict[int]().__class__, MyDict) + self.assertIs(MyDict[int]().__orig_class__, MyDict[int]) + class MyDef(typing.DefaultDict[str, T]): ... + self.assertIs(MyDef[int]().__class__, MyDef) + self.assertIs(MyDef[int]().__orig_class__, MyDef[int]) + + def test_all_repr_eq_any(self): + objs = (getattr(typing, el) for el in typing.__all__) + for obj in objs: + self.assertNotEqual(repr(obj), '') + self.assertEqual(obj, obj) + if getattr(obj, '__parameters__', None) and len(obj.__parameters__) == 1: + self.assertEqual(obj[Any].__args__, (Any,)) + if isinstance(obj, type): + for base in obj.__mro__: + self.assertNotEqual(repr(base), '') + self.assertEqual(base, base) + + def test_substitution_helper(self): + T = TypeVar('T') + KT = TypeVar('KT') + VT = TypeVar('VT') + class Map(Generic[KT, VT]): + def meth(self, k: KT, v: VT): ... + StrMap = Map[str, T] + obj = StrMap[int]() + + new_args = typing._subs_tree(obj.__orig_class__) + new_annots = {k: typing._replace_arg(v, type(obj).__parameters__, new_args) + for k, v in obj.meth.__annotations__.items()} + + self.assertEqual(new_annots, {'k': str, 'v': int}) + def test_pickle(self): global C # pickle wants to reference the class by name T = TypeVar('T') @@ -686,6 +877,62 @@ class GenericTests(BaseTestCase): self.assertEqual(x.foo, 42) self.assertEqual(x.bar, 'abc') self.assertEqual(x.__dict__, {'foo': 42, 'bar': 'abc'}) + simples = [Any, Union, Tuple, Callable, ClassVar, List, typing.Iterable] + for s in simples: + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + z = pickle.dumps(s, proto) + x = pickle.loads(z) + self.assertEqual(s, x) + + def test_copy_and_deepcopy(self): + T = TypeVar('T') + class Node(Generic[T]): ... + things = [Union[T, int], Tuple[T, int], Callable[..., T], Callable[[int], int], + Tuple[Any, Any], Node[T], Node[int], Node[Any], typing.Iterable[T], + typing.Iterable[Any], typing.Iterable[int], typing.Dict[int, str], + typing.Dict[T, Any], ClassVar[int], ClassVar[List[T]], Tuple['T', 'T'], + Union['T', int], List['T'], typing.Mapping['T', int]] + for t in things + [Any]: + self.assertEqual(t, copy(t)) + self.assertEqual(t, deepcopy(t)) + + def test_parameterized_slots(self): + T = TypeVar('T') + class C(Generic[T]): + __slots__ = ('potato',) + + c = C() + c_int = C[int]() + self.assertEqual(C.__slots__, C[str].__slots__) + + c.potato = 0 + c_int.potato = 0 + with self.assertRaises(AttributeError): + c.tomato = 0 + with self.assertRaises(AttributeError): + c_int.tomato = 0 + + def foo(x: C['C']): ... + self.assertEqual(get_type_hints(foo, globals(), locals())['x'], C[C]) + self.assertEqual(get_type_hints(foo, globals(), locals())['x'].__slots__, + C.__slots__) + self.assertEqual(copy(C[int]), deepcopy(C[int])) + + def test_parameterized_slots_dict(self): + T = TypeVar('T') + class D(Generic[T]): + __slots__ = {'banana': 42} + + d = D() + d_int = D[int]() + self.assertEqual(D.__slots__, D[str].__slots__) + + d.banana = 'yes' + d_int.banana = 'yes' + with self.assertRaises(AttributeError): + d.foobar = 'no' + with self.assertRaises(AttributeError): + d_int.foobar = 'no' def test_errors(self): with self.assertRaises(TypeError): @@ -704,12 +951,12 @@ class GenericTests(BaseTestCase): if not PY32: self.assertEqual(C.__qualname__, 'GenericTests.test_repr_2..C') - self.assertEqual(repr(C).split('.')[-1], 'C<~T>') + self.assertEqual(repr(C).split('.')[-1], 'C') X = C[int] self.assertEqual(X.__module__, __name__) if not PY32: - self.assertEqual(X.__qualname__, 'C') - self.assertEqual(repr(X).split('.')[-1], 'C<~T>[int]') + self.assertTrue(X.__qualname__.endswith('..C')) + self.assertEqual(repr(X).split('.')[-1], 'C[int]') class Y(C[int]): pass @@ -823,51 +1070,44 @@ class GenericTests(BaseTestCase): with self.assertRaises(Exception): D[T] +class ClassVarTests(BaseTestCase): + + def test_basics(self): + with self.assertRaises(TypeError): + ClassVar[1] + with self.assertRaises(TypeError): + ClassVar[int, str] + with self.assertRaises(TypeError): + ClassVar[int][str] + + def test_repr(self): + self.assertEqual(repr(ClassVar), 'typing.ClassVar') + cv = ClassVar[int] + self.assertEqual(repr(cv), 'typing.ClassVar[int]') + cv = ClassVar[Employee] + self.assertEqual(repr(cv), 'typing.ClassVar[%s.Employee]' % __name__) + + def test_cannot_subclass(self): + with self.assertRaises(TypeError): + class C(type(ClassVar)): + pass + with self.assertRaises(TypeError): + class C(type(ClassVar[int])): + pass -class VarianceTests(BaseTestCase): - - def test_invariance(self): - # Because of invariance, List[subclass of X] is not a subclass - # of List[X], and ditto for MutableSequence. - self.assertNotIsSubclass(typing.List[Manager], typing.List[Employee]) - self.assertNotIsSubclass(typing.MutableSequence[Manager], - typing.MutableSequence[Employee]) - # It's still reflexive. - self.assertIsSubclass(typing.List[Employee], typing.List[Employee]) - self.assertIsSubclass(typing.MutableSequence[Employee], - typing.MutableSequence[Employee]) - - def test_covariance_tuple(self): - # Check covariace for Tuple (which are really special cases). - self.assertIsSubclass(Tuple[Manager], Tuple[Employee]) - self.assertNotIsSubclass(Tuple[Employee], Tuple[Manager]) - # And pairwise. - self.assertIsSubclass(Tuple[Manager, Manager], - Tuple[Employee, Employee]) - self.assertNotIsSubclass(Tuple[Employee, Employee], - Tuple[Manager, Employee]) - # And using ellipsis. - self.assertIsSubclass(Tuple[Manager, ...], Tuple[Employee, ...]) - self.assertNotIsSubclass(Tuple[Employee, ...], Tuple[Manager, ...]) - - def test_covariance_sequence(self): - # Check covariance for Sequence (which is just a generic class - # for this purpose, but using a covariant type variable). - self.assertIsSubclass(typing.Sequence[Manager], - typing.Sequence[Employee]) - self.assertNotIsSubclass(typing.Sequence[Employee], - typing.Sequence[Manager]) - - def test_covariance_mapping(self): - # Ditto for Mapping (covariant in the value, invariant in the key). - self.assertIsSubclass(typing.Mapping[Employee, Manager], - typing.Mapping[Employee, Employee]) - self.assertNotIsSubclass(typing.Mapping[Manager, Employee], - typing.Mapping[Employee, Employee]) - self.assertNotIsSubclass(typing.Mapping[Employee, Manager], - typing.Mapping[Manager, Manager]) - self.assertNotIsSubclass(typing.Mapping[Manager, Employee], - typing.Mapping[Manager, Manager]) + def test_cannot_init(self): + with self.assertRaises(TypeError): + ClassVar() + with self.assertRaises(TypeError): + type(ClassVar)() + with self.assertRaises(TypeError): + type(ClassVar[Optional[int]])() + + def test_no_isinstance(self): + with self.assertRaises(TypeError): + isinstance(1, ClassVar[int]) + with self.assertRaises(TypeError): + issubclass(int, ClassVar) class CastTests(BaseTestCase): @@ -1079,12 +1319,12 @@ class OverloadTests(BaseTestCase): blah() -PY35 = sys.version_info[:2] >= (3, 5) +ASYNCIO = sys.version_info[:2] >= (3, 5) -PY35_TESTS = """ +ASYNCIO_TESTS = """ import asyncio -T_a = TypeVar('T') +T_a = TypeVar('T_a') class AwaitableWrapper(typing.Awaitable[T_a]): @@ -1112,8 +1352,110 @@ class AsyncIteratorWrapper(typing.AsyncIterator[T_a]): raise StopAsyncIteration """ -if PY35: - exec(PY35_TESTS) +if ASYNCIO: + try: + exec(ASYNCIO_TESTS) + except ImportError: + ASYNCIO = False + +PY36 = sys.version_info[:2] >= (3, 6) + +PY36_TESTS = """ +from test import ann_module, ann_module2, ann_module3 + +class A: + y: float +class B(A): + x: ClassVar[Optional['B']] = None + y: int +class CSub(B): + z: ClassVar['CSub'] = B() +class G(Generic[T]): + lst: ClassVar[List[T]] = [] + +class CoolEmployee(NamedTuple): + name: str + cool: int +""" + +if PY36: + exec(PY36_TESTS) + +gth = get_type_hints + +class GetTypeHintTests(BaseTestCase): + def test_get_type_hints_from_various_objects(self): + # For invalid objects should fail with TypeError (not AttributeError etc). + with self.assertRaises(TypeError): + gth(123) + with self.assertRaises(TypeError): + gth('abc') + with self.assertRaises(TypeError): + gth(None) + + @skipUnless(PY36, 'Python 3.6 required') + def test_get_type_hints_modules(self): + self.assertEqual(gth(ann_module), {1: 2, 'f': Tuple[int, int], 'x': int, 'y': str}) + self.assertEqual(gth(ann_module2), {}) + self.assertEqual(gth(ann_module3), {}) + + @skipUnless(PY36, 'Python 3.6 required') + def test_get_type_hints_classes(self): + self.assertEqual(gth(ann_module.C, ann_module.__dict__), + {'y': Optional[ann_module.C]}) + self.assertIsInstance(gth(ann_module.j_class), dict) + self.assertEqual(gth(ann_module.M), {'123': 123, 'o': type}) + self.assertEqual(gth(ann_module.D), + {'j': str, 'k': str, 'y': Optional[ann_module.C]}) + self.assertEqual(gth(ann_module.Y), {'z': int}) + self.assertEqual(gth(ann_module.h_class), + {'y': Optional[ann_module.C]}) + self.assertEqual(gth(ann_module.S), {'x': str, 'y': str}) + self.assertEqual(gth(ann_module.foo), {'x': int}) + + @skipUnless(PY36, 'Python 3.6 required') + def test_respect_no_type_check(self): + @no_type_check + class NoTpCheck: + class Inn: + def __init__(self, x: 'not a type'): ... + self.assertTrue(NoTpCheck.__no_type_check__) + self.assertTrue(NoTpCheck.Inn.__init__.__no_type_check__) + self.assertEqual(gth(ann_module2.NTC.meth), {}) + class ABase(Generic[T]): + def meth(x: int): ... + @no_type_check + class Der(ABase): ... + self.assertEqual(gth(ABase.meth), {'x': int}) + + def test_get_type_hints_for_builins(self): + # Should not fail for built-in classes and functions. + self.assertEqual(gth(int), {}) + self.assertEqual(gth(type), {}) + self.assertEqual(gth(dir), {}) + self.assertEqual(gth(len), {}) + + def test_previous_behavior(self): + def testf(x, y): ... + testf.__annotations__['x'] = 'int' + self.assertEqual(gth(testf), {'x': int}) + + def test_get_type_hints_for_object_with_annotations(self): + class A: ... + class B: ... + b = B() + b.__annotations__ = {'x': 'A'} + self.assertEqual(gth(b, locals()), {'x': A}) + + @skipUnless(PY36, 'Python 3.6 required') + def test_get_type_hints_ClassVar(self): + self.assertEqual(gth(ann_module2.CV, ann_module2.__dict__), + {'var': typing.ClassVar[ann_module2.CV]}) + self.assertEqual(gth(B, globals()), + {'y': int, 'x': ClassVar[Optional[B]]}) + self.assertEqual(gth(CSub, globals()), + {'z': ClassVar[CSub], 'y': int, 'x': ClassVar[Optional[B]]}) + self.assertEqual(gth(G), {'lst': ClassVar[List[T]]}) class CollectionsAbcTests(BaseTestCase): @@ -1128,7 +1470,6 @@ class CollectionsAbcTests(BaseTestCase): # path and could fail. So call this a few times. self.assertIsInstance([], typing.Iterable) self.assertIsInstance([], typing.Iterable) - self.assertIsInstance([], typing.Iterable[int]) self.assertNotIsInstance(42, typing.Iterable) # Just in case, also test issubclass() a few times. self.assertIsSubclass(list, typing.Iterable) @@ -1137,10 +1478,9 @@ class CollectionsAbcTests(BaseTestCase): def test_iterator(self): it = iter([]) self.assertIsInstance(it, typing.Iterator) - self.assertIsInstance(it, typing.Iterator[int]) self.assertNotIsInstance(42, typing.Iterator) - @skipUnless(PY35, 'Python 3.5 required') + @skipUnless(ASYNCIO, 'Python 3.5 and multithreading required') def test_awaitable(self): ns = {} exec( @@ -1149,32 +1489,41 @@ class CollectionsAbcTests(BaseTestCase): globals(), ns) foo = ns['foo'] g = foo() - self.assertIsSubclass(type(g), typing.Awaitable[int]) self.assertIsInstance(g, typing.Awaitable) self.assertNotIsInstance(foo, typing.Awaitable) - self.assertIsSubclass(typing.Awaitable[Manager], - typing.Awaitable[Employee]) - self.assertNotIsSubclass(typing.Awaitable[Employee], - typing.Awaitable[Manager]) g.send(None) # Run foo() till completion, to avoid warning. - @skipUnless(PY35, 'Python 3.5 required') + @skipUnless(ASYNCIO, 'Python 3.5 and multithreading required') + def test_coroutine(self): + ns = {} + exec( + "async def foo():\n" + " return\n", + globals(), ns) + foo = ns['foo'] + g = foo() + self.assertIsInstance(g, typing.Coroutine) + with self.assertRaises(TypeError): + isinstance(g, typing.Coroutine[int]) + self.assertNotIsInstance(foo, typing.Coroutine) + try: + g.send(None) + except StopIteration: + pass + + @skipUnless(ASYNCIO, 'Python 3.5 and multithreading required') def test_async_iterable(self): base_it = range(10) # type: Iterator[int] it = AsyncIteratorWrapper(base_it) self.assertIsInstance(it, typing.AsyncIterable) self.assertIsInstance(it, typing.AsyncIterable) - self.assertIsSubclass(typing.AsyncIterable[Manager], - typing.AsyncIterable[Employee]) self.assertNotIsInstance(42, typing.AsyncIterable) - @skipUnless(PY35, 'Python 3.5 required') + @skipUnless(ASYNCIO, 'Python 3.5 and multithreading required') def test_async_iterator(self): base_it = range(10) # type: Iterator[int] it = AsyncIteratorWrapper(base_it) self.assertIsInstance(it, typing.AsyncIterator) - self.assertIsSubclass(typing.AsyncIterator[Manager], - typing.AsyncIterator[Employee]) self.assertNotIsInstance(42, typing.AsyncIterator) def test_sized(self): @@ -1185,6 +1534,13 @@ class CollectionsAbcTests(BaseTestCase): self.assertIsInstance([], typing.Container) self.assertNotIsInstance(42, typing.Container) + def test_collection(self): + if hasattr(typing, 'Collection'): + self.assertIsInstance(tuple(), typing.Collection) + self.assertIsInstance(frozenset(), typing.Collection) + self.assertIsSubclass(dict, typing.Collection) + self.assertNotIsInstance(42, typing.Collection) + def test_abstractset(self): self.assertIsInstance(set(), typing.AbstractSet) self.assertNotIsInstance(42, typing.AbstractSet) @@ -1331,10 +1687,6 @@ class CollectionsAbcTests(BaseTestCase): yield 42 g = foo() self.assertIsSubclass(type(g), typing.Generator) - self.assertIsSubclass(typing.Generator[Manager, Employee, Manager], - typing.Generator[Employee, Manager, Employee]) - self.assertNotIsSubclass(typing.Generator[Manager, Manager, Manager], - typing.Generator[Employee, Employee, Employee]) def test_no_generator_instantiation(self): with self.assertRaises(TypeError): @@ -1353,12 +1705,30 @@ class CollectionsAbcTests(BaseTestCase): MMA() class MMC(MMA): + def __getitem__(self, k): + return None + def __setitem__(self, k, v): + pass + def __delitem__(self, k): + pass + def __iter__(self): + return iter(()) def __len__(self): return 0 self.assertEqual(len(MMC()), 0) + assert callable(MMC.update) + self.assertIsInstance(MMC(), typing.Mapping) class MMB(typing.MutableMapping[KT, VT]): + def __getitem__(self, k): + return None + def __setitem__(self, k, v): + pass + def __delitem__(self, k): + pass + def __iter__(self): + return iter(()) def __len__(self): return 0 @@ -1373,6 +1743,82 @@ class CollectionsAbcTests(BaseTestCase): self.assertIsSubclass(MMB, typing.Mapping) self.assertIsSubclass(MMC, typing.Mapping) + self.assertIsInstance(MMB[KT, VT](), typing.Mapping) + self.assertIsInstance(MMB[KT, VT](), collections.Mapping) + + self.assertIsSubclass(MMA, collections.Mapping) + self.assertIsSubclass(MMB, collections.Mapping) + self.assertIsSubclass(MMC, collections.Mapping) + + self.assertIsSubclass(MMB[str, str], typing.Mapping) + self.assertIsSubclass(MMC, MMA) + + class I(typing.Iterable): ... + self.assertNotIsSubclass(list, I) + + class G(typing.Generator[int, int, int]): ... + def g(): yield 0 + self.assertIsSubclass(G, typing.Generator) + self.assertIsSubclass(G, typing.Iterable) + if hasattr(collections, 'Generator'): + self.assertIsSubclass(G, collections.Generator) + self.assertIsSubclass(G, collections.Iterable) + self.assertNotIsSubclass(type(g), G) + + def test_subclassing_subclasshook(self): + + class Base(typing.Iterable): + @classmethod + def __subclasshook__(cls, other): + if other.__name__ == 'Foo': + return True + else: + return False + + class C(Base): ... + class Foo: ... + class Bar: ... + self.assertIsSubclass(Foo, Base) + self.assertIsSubclass(Foo, C) + self.assertNotIsSubclass(Bar, C) + + def test_subclassing_register(self): + + class A(typing.Container): ... + class B(A): ... + + class C: ... + A.register(C) + self.assertIsSubclass(C, A) + self.assertNotIsSubclass(C, B) + + class D: ... + B.register(D) + self.assertIsSubclass(D, A) + self.assertIsSubclass(D, B) + + class M(): ... + collections.MutableMapping.register(M) + self.assertIsSubclass(M, typing.Mapping) + + def test_collections_as_base(self): + + class M(collections.Mapping): ... + self.assertIsSubclass(M, typing.Mapping) + self.assertIsSubclass(M, typing.Iterable) + + class S(collections.MutableSequence): ... + self.assertIsSubclass(S, typing.MutableSequence) + self.assertIsSubclass(S, typing.Iterable) + + class I(collections.Iterable): ... + self.assertIsSubclass(I, typing.Iterable) + + class A(collections.Mapping, metaclass=abc.ABCMeta): ... + class B: ... + A.register(B) + self.assertIsSubclass(B, typing.Mapping) + class OtherABCTests(BaseTestCase): @@ -1385,7 +1831,6 @@ class OtherABCTests(BaseTestCase): cm = manager() self.assertIsInstance(cm, typing.ContextManager) - self.assertIsInstance(cm, typing.ContextManager[int]) self.assertNotIsInstance(42, typing.ContextManager) @@ -1415,6 +1860,18 @@ class TypeTests(BaseTestCase): joe = new_user(BasicUser) + def test_type_optional(self): + A = Optional[Type[BaseException]] + + def foo(a: A) -> Optional[BaseException]: + if a is None: + return None + else: + return a() + + assert isinstance(foo(KeyboardInterrupt), KeyboardInterrupt) + assert foo(None) is None + class NewTypeTests(BaseTestCase): @@ -1452,6 +1909,31 @@ class NamedTupleTests(BaseTestCase): self.assertEqual(Emp._fields, ('name', 'id')) self.assertEqual(Emp._field_types, dict(name=str, id=int)) + @skipUnless(PY36, 'Python 3.6 required') + def test_annotation_usage(self): + tim = CoolEmployee('Tim', 9000) + self.assertIsInstance(tim, CoolEmployee) + self.assertIsInstance(tim, tuple) + self.assertEqual(tim.name, 'Tim') + self.assertEqual(tim.cool, 9000) + self.assertEqual(CoolEmployee.__name__, 'CoolEmployee') + self.assertEqual(CoolEmployee._fields, ('name', 'cool')) + self.assertEqual(CoolEmployee._field_types, dict(name=str, cool=int)) + + @skipUnless(PY36, 'Python 3.6 required') + def test_namedtuple_keyword_usage(self): + LocalEmployee = NamedTuple("LocalEmployee", name=str, age=int) + nick = LocalEmployee('Nick', 25) + self.assertIsInstance(nick, tuple) + self.assertEqual(nick.name, 'Nick') + self.assertEqual(LocalEmployee.__name__, 'LocalEmployee') + self.assertEqual(LocalEmployee._fields, ('name', 'age')) + self.assertEqual(LocalEmployee._field_types, dict(name=str, age=int)) + with self.assertRaises(TypeError): + NamedTuple('Name', [('x', int)], y=str) + with self.assertRaises(TypeError): + NamedTuple('Name', x=1, y='a') + def test_pickle(self): global Emp # pickle wants to reference the class by name Emp = NamedTuple('Emp', [('name', str), ('id', int)]) @@ -1504,22 +1986,16 @@ class RETests(BaseTestCase): pat = re.compile('[a-z]+', re.I) self.assertIsSubclass(pat.__class__, Pattern) self.assertIsSubclass(type(pat), Pattern) - self.assertIsSubclass(type(pat), Pattern[str]) + self.assertIsInstance(pat, Pattern) mat = pat.search('12345abcde.....') self.assertIsSubclass(mat.__class__, Match) - self.assertIsSubclass(mat.__class__, Match[str]) - self.assertIsSubclass(mat.__class__, Match[bytes]) # Sad but true. self.assertIsSubclass(type(mat), Match) - self.assertIsSubclass(type(mat), Match[str]) + self.assertIsInstance(mat, Match) + # these should just work p = Pattern[Union[str, bytes]] - self.assertIsSubclass(Pattern[str], Pattern) - self.assertIsSubclass(Pattern[str], p) - m = Match[Union[bytes, str]] - self.assertIsSubclass(Match[bytes], Match) - self.assertIsSubclass(Match[bytes], m) def test_errors(self): with self.assertRaises(TypeError): @@ -1534,9 +2010,6 @@ class RETests(BaseTestCase): m[str] with self.assertRaises(TypeError): # We don't support isinstance(). - isinstance(42, Pattern) - with self.assertRaises(TypeError): - # We don't support isinstance(). isinstance(42, Pattern[str]) def test_repr(self): @@ -1561,7 +2034,7 @@ class RETests(BaseTestCase): pass self.assertEqual(str(ex.exception), - "A type alias cannot be subclassed") + "Cannot subclass typing._TypeAlias") class AllTests(BaseTestCase): diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index a38e7b1..f696a5b 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -4,7 +4,7 @@ Written by Marc-Andre Lemburg (mal@lemburg.com). (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. -"""#" +""" import _string import codecs import itertools @@ -2275,6 +2275,123 @@ class UnicodeTest(string_tests.CommonTest, self.assertEqual("%s" % s, '__str__ overridden') self.assertEqual("{}".format(s), '__str__ overridden') + def test_subclass_add(self): + class S(str): + def __add__(self, o): + return "3" + self.assertEqual(S("4") + S("5"), "3") + class S(str): + def __iadd__(self, o): + return "3" + s = S("1") + s += "4" + self.assertEqual(s, "3") + + def test_getnewargs(self): + text = 'abc' + args = text.__getnewargs__() + self.assertIsNot(args[0], text) + self.assertEqual(args[0], text) + self.assertEqual(len(args), 1) + + def test_resize(self): + for length in range(1, 100, 7): + # generate a fresh string (refcount=1) + text = 'a' * length + 'b' + + with support.check_warnings(('unicode_internal codec has been ' + 'deprecated', DeprecationWarning)): + # fill wstr internal field + abc = text.encode('unicode_internal') + self.assertEqual(abc.decode('unicode_internal'), text) + + # resize text: wstr field must be cleared and then recomputed + text += 'c' + abcdef = text.encode('unicode_internal') + self.assertNotEqual(abc, abcdef) + self.assertEqual(abcdef.decode('unicode_internal'), text) + + def test_compare(self): + # Issue #17615 + N = 10 + ascii = 'a' * N + ascii2 = 'z' * N + latin = '\x80' * N + latin2 = '\xff' * N + bmp = '\u0100' * N + bmp2 = '\uffff' * N + astral = '\U00100000' * N + astral2 = '\U0010ffff' * N + strings = ( + ascii, ascii2, + latin, latin2, + bmp, bmp2, + astral, astral2) + for text1, text2 in itertools.combinations(strings, 2): + equal = (text1 is text2) + self.assertEqual(text1 == text2, equal) + self.assertEqual(text1 != text2, not equal) + + if equal: + self.assertTrue(text1 <= text2) + self.assertTrue(text1 >= text2) + + # text1 is text2: duplicate strings to skip the "str1 == str2" + # optimization in unicode_compare_eq() and really compare + # character per character + copy1 = duplicate_string(text1) + copy2 = duplicate_string(text2) + self.assertIsNot(copy1, copy2) + + self.assertTrue(copy1 == copy2) + self.assertFalse(copy1 != copy2) + + self.assertTrue(copy1 <= copy2) + self.assertTrue(copy2 >= copy2) + + self.assertTrue(ascii < ascii2) + self.assertTrue(ascii < latin) + self.assertTrue(ascii < bmp) + self.assertTrue(ascii < astral) + self.assertFalse(ascii >= ascii2) + self.assertFalse(ascii >= latin) + self.assertFalse(ascii >= bmp) + self.assertFalse(ascii >= astral) + + self.assertFalse(latin < ascii) + self.assertTrue(latin < latin2) + self.assertTrue(latin < bmp) + self.assertTrue(latin < astral) + self.assertTrue(latin >= ascii) + self.assertFalse(latin >= latin2) + self.assertFalse(latin >= bmp) + self.assertFalse(latin >= astral) + + self.assertFalse(bmp < ascii) + self.assertFalse(bmp < latin) + self.assertTrue(bmp < bmp2) + self.assertTrue(bmp < astral) + self.assertTrue(bmp >= ascii) + self.assertTrue(bmp >= latin) + self.assertFalse(bmp >= bmp2) + self.assertFalse(bmp >= astral) + + self.assertFalse(astral < ascii) + self.assertFalse(astral < latin) + self.assertFalse(astral < bmp2) + self.assertTrue(astral < astral2) + self.assertTrue(astral >= ascii) + self.assertTrue(astral >= latin) + self.assertTrue(astral >= bmp2) + self.assertFalse(astral >= astral2) + + def test_free_after_iterating(self): + support.check_free_after_iterating(self, iter, str) + support.check_free_after_iterating(self, reversed, str) + + +class CAPITest(unittest.TestCase): + # Test PyUnicode_FromFormat() def test_from_format(self): support.import_module('ctypes') @@ -2498,7 +2615,7 @@ class UnicodeTest(string_tests.CommonTest, b'repr=%V', None, b'abc\xff') # not supported: copy the raw format string. these tests are just here - # to check for crashs and should not be considered as specifications + # to check for crashes and should not be considered as specifications check_format('%s', b'%1%s', b'abc') check_format('%1abc', @@ -2570,17 +2687,65 @@ class UnicodeTest(string_tests.CommonTest, self.assertEqual(size, nchar) self.assertEqual(wchar, nonbmp + '\0') - def test_subclass_add(self): - class S(str): - def __add__(self, o): - return "3" - self.assertEqual(S("4") + S("5"), "3") - class S(str): - def __iadd__(self, o): - return "3" - s = S("1") - s += "4" - self.assertEqual(s, "3") + # Test PyUnicode_AsUCS4() + @support.cpython_only + def test_asucs4(self): + from _testcapi import unicode_asucs4 + for s in ['abc', '\xa1\xa2', '\u4f60\u597d', 'a\U0001f600', + 'a\ud800b\udfffc', '\ud834\udd1e']: + l = len(s) + self.assertEqual(unicode_asucs4(s, l, 1), s+'\0') + self.assertEqual(unicode_asucs4(s, l, 0), s+'\uffff') + self.assertEqual(unicode_asucs4(s, l+1, 1), s+'\0\uffff') + self.assertEqual(unicode_asucs4(s, l+1, 0), s+'\0\uffff') + self.assertRaises(SystemError, unicode_asucs4, s, l-1, 1) + self.assertRaises(SystemError, unicode_asucs4, s, l-2, 0) + s = '\0'.join([s, s]) + self.assertEqual(unicode_asucs4(s, len(s), 1), s+'\0') + self.assertEqual(unicode_asucs4(s, len(s), 0), s+'\uffff') + + # Test PyUnicode_CopyCharacters() + @support.cpython_only + def test_copycharacters(self): + from _testcapi import unicode_copycharacters + + strings = [ + 'abcde', '\xa1\xa2\xa3\xa4\xa5', + '\u4f60\u597d\u4e16\u754c\uff01', + '\U0001f600\U0001f601\U0001f602\U0001f603\U0001f604' + ] + + for idx, from_ in enumerate(strings): + # wide -> narrow: exceed maxchar limitation + for to in strings[:idx]: + self.assertRaises( + SystemError, + unicode_copycharacters, to, 0, from_, 0, 5 + ) + # same kind + for from_start in range(5): + self.assertEqual( + unicode_copycharacters(from_, 0, from_, from_start, 5), + (from_[from_start:from_start+5].ljust(5, '\0'), + 5-from_start) + ) + for to_start in range(5): + self.assertEqual( + unicode_copycharacters(from_, to_start, from_, to_start, 5), + (from_[to_start:to_start+5].rjust(5, '\0'), + 5-to_start) + ) + # narrow -> wide + # Tests omitted since this creates invalid strings. + + s = strings[0] + self.assertRaises(IndexError, unicode_copycharacters, s, 6, s, 0, 5) + self.assertRaises(IndexError, unicode_copycharacters, s, -1, s, 0, 5) + self.assertRaises(IndexError, unicode_copycharacters, s, 0, s, 6, 5) + self.assertRaises(IndexError, unicode_copycharacters, s, 0, s, -1, 5) + self.assertRaises(SystemError, unicode_copycharacters, s, 1, s, 0, 5) + self.assertRaises(SystemError, unicode_copycharacters, s, 0, s, 0, -1) + self.assertRaises(SystemError, unicode_copycharacters, s, 0, b'', 0, 0) @support.cpython_only def test_encode_decimal(self): @@ -2610,104 +2775,6 @@ class UnicodeTest(string_tests.CommonTest, self.assertEqual(transform_decimal('123\u20ac'), '123\u20ac') - def test_getnewargs(self): - text = 'abc' - args = text.__getnewargs__() - self.assertIsNot(args[0], text) - self.assertEqual(args[0], text) - self.assertEqual(len(args), 1) - - def test_resize(self): - for length in range(1, 100, 7): - # generate a fresh string (refcount=1) - text = 'a' * length + 'b' - - with support.check_warnings(('unicode_internal codec has been ' - 'deprecated', DeprecationWarning)): - # fill wstr internal field - abc = text.encode('unicode_internal') - self.assertEqual(abc.decode('unicode_internal'), text) - - # resize text: wstr field must be cleared and then recomputed - text += 'c' - abcdef = text.encode('unicode_internal') - self.assertNotEqual(abc, abcdef) - self.assertEqual(abcdef.decode('unicode_internal'), text) - - def test_compare(self): - # Issue #17615 - N = 10 - ascii = 'a' * N - ascii2 = 'z' * N - latin = '\x80' * N - latin2 = '\xff' * N - bmp = '\u0100' * N - bmp2 = '\uffff' * N - astral = '\U00100000' * N - astral2 = '\U0010ffff' * N - strings = ( - ascii, ascii2, - latin, latin2, - bmp, bmp2, - astral, astral2) - for text1, text2 in itertools.combinations(strings, 2): - equal = (text1 is text2) - self.assertEqual(text1 == text2, equal) - self.assertEqual(text1 != text2, not equal) - - if equal: - self.assertTrue(text1 <= text2) - self.assertTrue(text1 >= text2) - - # text1 is text2: duplicate strings to skip the "str1 == str2" - # optimization in unicode_compare_eq() and really compare - # character per character - copy1 = duplicate_string(text1) - copy2 = duplicate_string(text2) - self.assertIsNot(copy1, copy2) - - self.assertTrue(copy1 == copy2) - self.assertFalse(copy1 != copy2) - - self.assertTrue(copy1 <= copy2) - self.assertTrue(copy2 >= copy2) - - self.assertTrue(ascii < ascii2) - self.assertTrue(ascii < latin) - self.assertTrue(ascii < bmp) - self.assertTrue(ascii < astral) - self.assertFalse(ascii >= ascii2) - self.assertFalse(ascii >= latin) - self.assertFalse(ascii >= bmp) - self.assertFalse(ascii >= astral) - - self.assertFalse(latin < ascii) - self.assertTrue(latin < latin2) - self.assertTrue(latin < bmp) - self.assertTrue(latin < astral) - self.assertTrue(latin >= ascii) - self.assertFalse(latin >= latin2) - self.assertFalse(latin >= bmp) - self.assertFalse(latin >= astral) - - self.assertFalse(bmp < ascii) - self.assertFalse(bmp < latin) - self.assertTrue(bmp < bmp2) - self.assertTrue(bmp < astral) - self.assertTrue(bmp >= ascii) - self.assertTrue(bmp >= latin) - self.assertFalse(bmp >= bmp2) - self.assertFalse(bmp >= astral) - - self.assertFalse(astral < ascii) - self.assertFalse(astral < latin) - self.assertFalse(astral < bmp2) - self.assertTrue(astral < astral2) - self.assertTrue(astral >= ascii) - self.assertTrue(astral >= latin) - self.assertTrue(astral >= bmp2) - self.assertFalse(astral >= astral2) - @support.cpython_only def test_pep393_utf8_caching_bug(self): # Issue #25709: Problem with string concatenation and utf-8 cache @@ -2725,10 +2792,6 @@ class UnicodeTest(string_tests.CommonTest, # Check that the second call returns the same result self.assertEqual(getargs_s_hash(s), chr(k).encode() * (i + 1)) - def test_free_after_iterating(self): - support.check_free_after_iterating(self, iter, str) - support.check_free_after_iterating(self, reversed, str) - class StringModuleTest(unittest.TestCase): def test_formatter_parser(self): diff --git a/Lib/test/test_unpack_ex.py b/Lib/test/test_unpack_ex.py index d27eef0..74346b4 100644 --- a/Lib/test/test_unpack_ex.py +++ b/Lib/test/test_unpack_ex.py @@ -248,6 +248,11 @@ Overridden parameters ... TypeError: f() got multiple values for keyword argument 'x' + >>> f(x=5, **{'x': 3}, **{'x': 2}) + Traceback (most recent call last): + ... + TypeError: f() got multiple values for keyword argument 'x' + >>> f(**{1: 3}, **{1: 5}) Traceback (most recent call last): ... diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py index 5d05f8d..247598a 100644 --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -1,4 +1,4 @@ -"""Regresssion tests for what was in Python 2's "urllib" module""" +"""Regression tests for what was in Python 2's "urllib" module""" import urllib.parse import urllib.request @@ -232,6 +232,18 @@ class ProxyTests(unittest.TestCase): self.assertTrue(urllib.request.proxy_bypass_environment('anotherdomain.com:8888')) self.assertTrue(urllib.request.proxy_bypass_environment('newdomain.com:1234')) + def test_proxy_cgi_ignore(self): + try: + self.env.set('HTTP_PROXY', 'http://somewhere:3128') + proxies = urllib.request.getproxies_environment() + self.assertEqual('http://somewhere:3128', proxies['http']) + self.env.set('REQUEST_METHOD', 'GET') + proxies = urllib.request.getproxies_environment() + self.assertNotIn('http', proxies) + finally: + self.env.unset('REQUEST_METHOD') + self.env.unset('HTTP_PROXY') + def test_proxy_bypass_environment_host_match(self): bypass = urllib.request.proxy_bypass_environment self.env.set('NO_PROXY', diff --git a/Lib/test/test_urllib2_localnet.py b/Lib/test/test_urllib2_localnet.py index c8b37ee..68c523a 100644 --- a/Lib/test/test_urllib2_localnet.py +++ b/Lib/test/test_urllib2_localnet.py @@ -289,12 +289,12 @@ class BasicAuthTests(unittest.TestCase): def http_server_with_basic_auth_handler(*args, **kwargs): return BasicAuthHandler(*args, **kwargs) self.server = LoopbackHttpServerThread(http_server_with_basic_auth_handler) + self.addCleanup(self.server.stop) self.server_url = 'http://127.0.0.1:%s' % self.server.port self.server.start() self.server.ready.wait() def tearDown(self): - self.server.stop() super(BasicAuthTests, self).tearDown() def test_basic_auth_success(self): @@ -323,6 +323,14 @@ class ProxyAuthTests(unittest.TestCase): def setUp(self): super(ProxyAuthTests, self).setUp() + # Ignore proxy bypass settings in the environment. + def restore_environ(old_environ): + os.environ.clear() + os.environ.update(old_environ) + self.addCleanup(restore_environ, os.environ.copy()) + os.environ['NO_PROXY'] = '' + os.environ['no_proxy'] = '' + self.digest_auth_handler = DigestAuthHandler() self.digest_auth_handler.set_users({self.USER: self.PASSWD}) self.digest_auth_handler.set_realm(self.REALM) @@ -438,17 +446,14 @@ class TestUrlopen(unittest.TestCase): def setUp(self): super(TestUrlopen, self).setUp() + # Ignore proxies for localhost tests. - self.old_environ = os.environ.copy() + def restore_environ(old_environ): + os.environ.clear() + os.environ.update(old_environ) + self.addCleanup(restore_environ, os.environ.copy()) os.environ['NO_PROXY'] = '*' - self.server = None - - def tearDown(self): - if self.server is not None: - self.server.stop() - os.environ.clear() - os.environ.update(self.old_environ) - super(TestUrlopen, self).tearDown() + os.environ['no_proxy'] = '*' def urlopen(self, url, data=None, **kwargs): l = [] @@ -469,6 +474,7 @@ class TestUrlopen(unittest.TestCase): handler = GetRequestHandler(responses) self.server = LoopbackHttpServerThread(handler) + self.addCleanup(self.server.stop) self.server.start() self.server.ready.wait() port = self.server.port @@ -592,7 +598,8 @@ class TestUrlopen(unittest.TestCase): handler = self.start_server() req = urllib.request.Request("http://localhost:%s/" % handler.port, headers={"Range": "bytes=20-39"}) - urllib.request.urlopen(req) + with urllib.request.urlopen(req): + pass self.assertEqual(handler.headers_received["Range"], "bytes=20-39") def test_basic(self): @@ -608,22 +615,21 @@ class TestUrlopen(unittest.TestCase): def test_info(self): handler = self.start_server() - try: - open_url = urllib.request.urlopen( - "http://localhost:%s" % handler.port) + open_url = urllib.request.urlopen( + "http://localhost:%s" % handler.port) + with open_url: info_obj = open_url.info() - self.assertIsInstance(info_obj, email.message.Message, - "object returned by 'info' is not an " - "instance of email.message.Message") - self.assertEqual(info_obj.get_content_subtype(), "plain") - finally: - self.server.stop() + self.assertIsInstance(info_obj, email.message.Message, + "object returned by 'info' is not an " + "instance of email.message.Message") + self.assertEqual(info_obj.get_content_subtype(), "plain") def test_geturl(self): # Make sure same URL as opened is returned by geturl. handler = self.start_server() open_url = urllib.request.urlopen("http://localhost:%s" % handler.port) - url = open_url.geturl() + with open_url: + url = open_url.geturl() self.assertEqual(url, "http://localhost:%s" % handler.port) def test_iteration(self): diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index 829997f..71abc14 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -425,6 +425,8 @@ class UrlParseTestCase(unittest.TestCase): self.checkJoin('', 'http://a/./g', 'http://a/./g') self.checkJoin('svn://pathtorepo/dir1', 'dir2', 'svn://pathtorepo/dir2') self.checkJoin('svn+ssh://pathtorepo/dir1', 'dir2', 'svn+ssh://pathtorepo/dir2') + self.checkJoin('ws://a/b','g','ws://a/g') + self.checkJoin('wss://a/b','g','wss://a/g') # XXX: The following tests are no longer compatible with RFC3986 # self.checkJoin(SIMPLE_BASE, '../../../g','http://a/../g') diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py index e34d8e6..47248f9 100644 --- a/Lib/test/test_uuid.py +++ b/Lib/test/test_uuid.py @@ -292,6 +292,10 @@ class TestUUID(unittest.TestCase): badtype(lambda: setattr(u, 'clock_seq_low', 0)) badtype(lambda: setattr(u, 'node', 0)) + # Comparison with a non-UUID object + badtype(lambda: u < object()) + badtype(lambda: u > object()) + def test_getnode(self): node1 = uuid.getnode() self.assertTrue(0 < node1 < (1 << 48), '%012x' % node1) diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py index d2c986e..3999d1f 100644 --- a/Lib/test/test_venv.py +++ b/Lib/test/test_venv.py @@ -31,6 +31,11 @@ try: except ImportError: threading = None +try: + import ctypes +except ImportError: + ctypes = None + skipInVenv = unittest.skipIf(sys.prefix != sys.base_prefix, 'Test not appropriate in a venv') @@ -327,6 +332,8 @@ class EnsurePipTest(BaseTest): @unittest.skipIf(ssl is None, ensurepip._MISSING_SSL_MESSAGE) @unittest.skipUnless(threading, 'some dependencies of pip import threading' ' module unconditionally') + # Issue #26610: pip/pep425tags.py requires ctypes + @unittest.skipUnless(ctypes, 'pip requires ctypes') def test_with_pip(self): rmtree(self.env_dir) with EnvironmentVarGuard() as envvars: diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py index 72fcc73..84a6fb5 100644 --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -261,6 +261,18 @@ class FilterTests(BaseTest): self.assertEqual(str(w[-1].message), text) self.assertTrue(w[-1].category is UserWarning) + def test_message_matching(self): + with original_warnings.catch_warnings(record=True, + module=self.module) as w: + self.module.simplefilter("ignore", UserWarning) + self.module.filterwarnings("error", "match", UserWarning) + self.assertRaises(UserWarning, self.module.warn, "match") + self.assertRaises(UserWarning, self.module.warn, "match prefix") + self.module.warn("suffix match") + self.assertEqual(w, []) + self.module.warn("something completely different") + self.assertEqual(w, []) + def test_mutate_filter_list(self): class X: def match(self, a): @@ -990,6 +1002,7 @@ class BootstrapTest(unittest.TestCase): class FinalizationTest(unittest.TestCase): + @support.requires_type_collecting def test_finalization(self): # Issue #19421: warnings.warn() should not crash # during Python finalization diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py index f49cb7e..1aa3540 100644 --- a/Lib/test/test_weakref.py +++ b/Lib/test/test_weakref.py @@ -6,6 +6,7 @@ import weakref import operator import contextlib import copy +import time from test import support from test.support import script_helper @@ -72,6 +73,29 @@ class TestBase(unittest.TestCase): self.cbcalled += 1 +@contextlib.contextmanager +def collect_in_thread(period=0.0001): + """ + Ensure GC collections happen in a different thread, at a high frequency. + """ + threading = support.import_module('threading') + please_stop = False + + def collect(): + while not please_stop: + time.sleep(period) + gc.collect() + + with support.disable_gc(): + t = threading.Thread(target=collect) + t.start() + try: + yield + finally: + please_stop = True + t.join() + + class ReferencesTestCase(TestBase): def test_basic_ref(self): @@ -589,6 +613,7 @@ class ReferencesTestCase(TestBase): del c1, c2, C, D gc.collect() + @support.requires_type_collecting def test_callback_in_cycle_resurrection(self): import gc @@ -844,6 +869,14 @@ class ReferencesTestCase(TestBase): with self.assertRaises(AttributeError): ref1.__callback__ = lambda ref: None + def test_callback_gcs(self): + class ObjectWithDel(Object): + def __del__(self): pass + x = ObjectWithDel(1) + ref1 = weakref.ref(x, lambda ref: support.gc_collect()) + del x + support.gc_collect() + class SubclassableWeakrefTestCase(TestBase): @@ -1624,6 +1657,35 @@ class MappingTestCase(TestBase): dict = weakref.WeakKeyDictionary() self.assertRegex(repr(dict), '') + def test_threaded_weak_valued_setdefault(self): + d = weakref.WeakValueDictionary() + with collect_in_thread(): + for i in range(100000): + x = d.setdefault(10, RefCycle()) + self.assertIsNot(x, None) # we never put None in there! + del x + + def test_threaded_weak_valued_pop(self): + d = weakref.WeakValueDictionary() + with collect_in_thread(): + for i in range(100000): + d[10] = RefCycle() + x = d.pop(10, 10) + self.assertIsNot(x, None) # we never put None in there! + + def test_threaded_weak_valued_consistency(self): + # Issue #28427: old keys should not remove new values from + # WeakValueDictionary when collecting from another thread. + d = weakref.WeakValueDictionary() + with collect_in_thread(): + for i in range(200000): + o = RefCycle() + d[10] = o + # o is still alive, so the dict can't be empty + self.assertEqual(len(d), 1) + o = None # lose ref + + from test import mapping_tests class WeakValueDictionaryTestCase(mapping_tests.BasicTestMappingProtocol): diff --git a/Lib/test/test_webbrowser.py b/Lib/test/test_webbrowser.py index c3292c4..e46b6fb 100644 --- a/Lib/test/test_webbrowser.py +++ b/Lib/test/test_webbrowser.py @@ -95,6 +95,31 @@ class MozillaCommandTest(CommandTestMixin, unittest.TestCase): def test_open(self): self._test('open', + options=[], + arguments=[URL]) + + def test_open_with_autoraise_false(self): + self._test('open', kw=dict(autoraise=False), + options=[], + arguments=[URL]) + + def test_open_new(self): + self._test('open_new', + options=[], + arguments=['-new-window', URL]) + + def test_open_new_tab(self): + self._test('open_new_tab', + options=[], + arguments=['-new-tab', URL]) + + +class NetscapeCommandTest(CommandTestMixin, unittest.TestCase): + + browser_class = webbrowser.Netscape + + def test_open(self): + self._test('open', options=['-raise', '-remote'], arguments=['openURL({})'.format(URL)]) diff --git a/Lib/test/test_winreg.py b/Lib/test/test_winreg.py index 2c4ac08..60207fb 100644 --- a/Lib/test/test_winreg.py +++ b/Lib/test/test_winreg.py @@ -168,7 +168,7 @@ class BaseWinregTests(unittest.TestCase): DeleteKey(key, subkeystr) try: - # Shouldnt be able to delete it twice! + # Shouldn't be able to delete it twice! DeleteKey(key, subkeystr) self.fail("Deleting the key twice succeeded") except OSError: diff --git a/Lib/test/test_winsound.py b/Lib/test/test_winsound.py index 2a78388..4a8ab7d 100644 --- a/Lib/test/test_winsound.py +++ b/Lib/test/test_winsound.py @@ -1,38 +1,42 @@ # Ridiculously simple test of the winsound module for Windows. -import unittest -from test import support -support.requires('audio') -import time +import functools import os import subprocess +import time +import unittest + +from test import support +support.requires('audio') winsound = support.import_module('winsound') -ctypes = support.import_module('ctypes') -import winreg - -def has_sound(sound): - """Find out if a particular event is configured with a default sound""" - try: - # Ask the mixer API for the number of devices it knows about. - # When there are no devices, PlaySound will fail. - if ctypes.windll.winmm.mixerGetNumDevs() == 0: - return False - - key = winreg.OpenKeyEx(winreg.HKEY_CURRENT_USER, - "AppEvents\Schemes\Apps\.Default\{0}\.Default".format(sound)) - return winreg.EnumValue(key, 0)[1] != "" - except OSError: - return False + + +# Unless we actually have an ear in the room, we have no idea whether a sound +# actually plays, and it's incredibly flaky trying to figure out if a sound +# even *should* play. Instead of guessing, just call the function and assume +# it either passed or raised the RuntimeError we expect in case of failure. +def sound_func(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + try: + ret = func(*args, **kwargs) + except RuntimeError as e: + if support.verbose: + print(func.__name__, 'failed:', e) + else: + if support.verbose: + print(func.__name__, 'returned') + return ret + return wrapper + + +safe_Beep = sound_func(winsound.Beep) +safe_MessageBeep = sound_func(winsound.MessageBeep) +safe_PlaySound = sound_func(winsound.PlaySound) + class BeepTest(unittest.TestCase): - # As with PlaySoundTest, incorporate the _have_soundcard() check - # into our test methods. If there's no audio device present, - # winsound.Beep returns 0 and GetLastError() returns 127, which - # is: ERROR_PROC_NOT_FOUND ("The specified procedure could not - # be found"). (FWIW, virtual/Hyper-V systems fall under this - # scenario as they have no sound devices whatsoever (not even - # a legacy Beep device).) def test_errors(self): self.assertRaises(TypeError, winsound.Beep) @@ -40,27 +44,12 @@ class BeepTest(unittest.TestCase): self.assertRaises(ValueError, winsound.Beep, 32768, 75) def test_extremes(self): - self._beep(37, 75) - self._beep(32767, 75) + safe_Beep(37, 75) + safe_Beep(32767, 75) def test_increasingfrequency(self): for i in range(100, 2000, 100): - self._beep(i, 75) - - def _beep(self, *args): - # these tests used to use _have_soundcard(), but it's quite - # possible to have a soundcard, and yet have the beep driver - # disabled. So basically, we have no way of knowing whether - # a beep should be produced or not, so currently if these - # tests fail we're ignoring them - # - # XXX the right fix for this is to define something like - # _have_enabled_beep_driver() and use that instead of the - # try/except below - try: - winsound.Beep(*args) - except RuntimeError: - pass + safe_Beep(i, 75) class MessageBeepTest(unittest.TestCase): @@ -70,22 +59,22 @@ class MessageBeepTest(unittest.TestCase): def test_default(self): self.assertRaises(TypeError, winsound.MessageBeep, "bad") self.assertRaises(TypeError, winsound.MessageBeep, 42, 42) - winsound.MessageBeep() + safe_MessageBeep() def test_ok(self): - winsound.MessageBeep(winsound.MB_OK) + safe_MessageBeep(winsound.MB_OK) def test_asterisk(self): - winsound.MessageBeep(winsound.MB_ICONASTERISK) + safe_MessageBeep(winsound.MB_ICONASTERISK) def test_exclamation(self): - winsound.MessageBeep(winsound.MB_ICONEXCLAMATION) + safe_MessageBeep(winsound.MB_ICONEXCLAMATION) def test_hand(self): - winsound.MessageBeep(winsound.MB_ICONHAND) + safe_MessageBeep(winsound.MB_ICONHAND) def test_question(self): - winsound.MessageBeep(winsound.MB_ICONQUESTION) + safe_MessageBeep(winsound.MB_ICONQUESTION) class PlaySoundTest(unittest.TestCase): @@ -99,151 +88,34 @@ class PlaySoundTest(unittest.TestCase): "none", winsound.SND_ASYNC | winsound.SND_MEMORY ) - @unittest.skipUnless(has_sound("SystemAsterisk"), - "No default SystemAsterisk") - def test_alias_asterisk(self): - if _have_soundcard(): - winsound.PlaySound('SystemAsterisk', winsound.SND_ALIAS) - else: - self.assertRaises( - RuntimeError, - winsound.PlaySound, - 'SystemAsterisk', winsound.SND_ALIAS - ) - - @unittest.skipUnless(has_sound("SystemExclamation"), - "No default SystemExclamation") - def test_alias_exclamation(self): - if _have_soundcard(): - winsound.PlaySound('SystemExclamation', winsound.SND_ALIAS) - else: - self.assertRaises( - RuntimeError, - winsound.PlaySound, - 'SystemExclamation', winsound.SND_ALIAS - ) - - @unittest.skipUnless(has_sound("SystemExit"), "No default SystemExit") - def test_alias_exit(self): - if _have_soundcard(): - winsound.PlaySound('SystemExit', winsound.SND_ALIAS) - else: - self.assertRaises( - RuntimeError, - winsound.PlaySound, - 'SystemExit', winsound.SND_ALIAS - ) - - @unittest.skipUnless(has_sound("SystemHand"), "No default SystemHand") - def test_alias_hand(self): - if _have_soundcard(): - winsound.PlaySound('SystemHand', winsound.SND_ALIAS) - else: - self.assertRaises( - RuntimeError, - winsound.PlaySound, - 'SystemHand', winsound.SND_ALIAS - ) - - @unittest.skipUnless(has_sound("SystemQuestion"), - "No default SystemQuestion") - def test_alias_question(self): - if _have_soundcard(): - winsound.PlaySound('SystemQuestion', winsound.SND_ALIAS) - else: - self.assertRaises( - RuntimeError, - winsound.PlaySound, - 'SystemQuestion', winsound.SND_ALIAS - ) + def test_aliases(self): + aliases = [ + "SystemAsterisk", + "SystemExclamation", + "SystemExit", + "SystemHand", + "SystemQuestion", + ] + for alias in aliases: + with self.subTest(alias=alias): + safe_PlaySound(alias, winsound.SND_ALIAS) def test_alias_fallback(self): - # In the absence of the ability to tell if a sound was actually - # played, this test has two acceptable outcomes: success (no error, - # sound was theoretically played; although as issue #19987 shows - # a box without a soundcard can "succeed") or RuntimeError. Any - # other error is a failure. - try: - winsound.PlaySound('!"$%&/(#+*', winsound.SND_ALIAS) - except RuntimeError: - pass + safe_PlaySound('!"$%&/(#+*', winsound.SND_ALIAS) def test_alias_nofallback(self): - if _have_soundcard(): - # Note that this is not the same as asserting RuntimeError - # will get raised: you cannot convert this to - # self.assertRaises(...) form. The attempt may or may not - # raise RuntimeError, but it shouldn't raise anything other - # than RuntimeError, and that's all we're trying to test - # here. The MS docs aren't clear about whether the SDK - # PlaySound() with SND_ALIAS and SND_NODEFAULT will return - # True or False when the alias is unknown. On Tim's WinXP - # box today, it returns True (no exception is raised). What - # we'd really like to test is that no sound is played, but - # that requires first wiring an eardrum class into unittest - # . - try: - winsound.PlaySound( - '!"$%&/(#+*', - winsound.SND_ALIAS | winsound.SND_NODEFAULT - ) - except RuntimeError: - pass - else: - self.assertRaises( - RuntimeError, - winsound.PlaySound, - '!"$%&/(#+*', winsound.SND_ALIAS | winsound.SND_NODEFAULT - ) + safe_PlaySound('!"$%&/(#+*', winsound.SND_ALIAS | winsound.SND_NODEFAULT) def test_stopasync(self): - if _have_soundcard(): - winsound.PlaySound( - 'SystemQuestion', - winsound.SND_ALIAS | winsound.SND_ASYNC | winsound.SND_LOOP - ) - time.sleep(0.5) - try: - winsound.PlaySound( - 'SystemQuestion', - winsound.SND_ALIAS | winsound.SND_NOSTOP - ) - except RuntimeError: - pass - else: # the first sound might already be finished - pass - winsound.PlaySound(None, winsound.SND_PURGE) - else: - # Issue 8367: PlaySound(None, winsound.SND_PURGE) - # does not raise on systems without a sound card. - pass - - -def _get_cscript_path(): - """Return the full path to cscript.exe or None.""" - for dir in os.environ.get("PATH", "").split(os.pathsep): - cscript_path = os.path.join(dir, "cscript.exe") - if os.path.exists(cscript_path): - return cscript_path - -__have_soundcard_cache = None -def _have_soundcard(): - """Return True iff this computer has a soundcard.""" - global __have_soundcard_cache - if __have_soundcard_cache is None: - cscript_path = _get_cscript_path() - if cscript_path is None: - # Could not find cscript.exe to run our VBScript helper. Default - # to True: most computers these days *do* have a soundcard. - return True - - check_script = os.path.join(os.path.dirname(__file__), - "check_soundcard.vbs") - p = subprocess.Popen([cscript_path, check_script], - stdout=subprocess.PIPE) - __have_soundcard_cache = not p.wait() - p.stdout.close() - return __have_soundcard_cache + safe_PlaySound( + 'SystemQuestion', + winsound.SND_ALIAS | winsound.SND_ASYNC | winsound.SND_LOOP + ) + time.sleep(0.5) + safe_PlaySound('SystemQuestion', winsound.SND_ALIAS | winsound.SND_NOSTOP) + # Issue 8367: PlaySound(None, winsound.SND_PURGE) + # does not raise on systems without a sound card. + winsound.PlaySound(None, winsound.SND_PURGE) if __name__ == "__main__": diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index 44e3142..6c7616b 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -18,7 +18,7 @@ import weakref from itertools import product from test import support -from test.support import TESTFN, findfile, import_fresh_module, gc_collect +from test.support import TESTFN, findfile, import_fresh_module, gc_collect, swap_attr # pyET is the pure-Python implementation. # @@ -405,6 +405,14 @@ class ElementTreeTest(unittest.TestCase): self.assertEqual(ET.tostring(elem), b'aa') + elem = ET.Element('test') + elem.set('a', '\r') + elem.set('b', '\r\n') + elem.set('c', '\t\n\r ') + elem.set('d', '\n\n') + self.assertEqual(ET.tostring(elem), + b'') + def test_makeelement(self): # Test makeelement handling. @@ -1860,6 +1868,12 @@ class BadElementTest(ElementTestCase, unittest.TestCase): e.extend([ET.Element('bar')]) self.assertRaises(ValueError, e.remove, X('baz')) + def test_recursive_repr(self): + # Issue #25455 + e = ET.Element('foo') + with swap_attr(e, 'tag', e): + with self.assertRaises(RuntimeError): + repr(e) # Should not crash class MutatingElementPath(str): def __new__(cls, elem, *args): @@ -2177,9 +2191,41 @@ class ElementIterTest(unittest.TestCase): # make sure both tag=None and tag='*' return all tags all_tags = ['document', 'house', 'room', 'room', 'shed', 'house', 'room'] + self.assertEqual(summarize_list(doc.iter()), all_tags) self.assertEqual(self._ilist(doc), all_tags) self.assertEqual(self._ilist(doc, '*'), all_tags) + def test_getiterator(self): + doc = ET.XML(''' + + + bedroom1 + bedroom2 + + nothing here + + + bedroom8 + + ''') + + self.assertEqual(summarize_list(doc.getiterator('room')), + ['room'] * 3) + self.assertEqual(summarize_list(doc.getiterator('house')), + ['house'] * 2) + + # test that getiterator also accepts 'tag' as a keyword arg + self.assertEqual( + summarize_list(doc.getiterator(tag='room')), + ['room'] * 3) + + # make sure both tag=None and tag='*' return all tags + all_tags = ['document', 'house', 'room', 'room', + 'shed', 'house', 'room'] + self.assertEqual(summarize_list(doc.getiterator()), all_tags) + self.assertEqual(summarize_list(doc.getiterator(None)), all_tags) + self.assertEqual(summarize_list(doc.getiterator('*')), all_tags) + def test_copy(self): a = ET.Element('a') it = a.iter() diff --git a/Lib/test/test_xml_etree_c.py b/Lib/test/test_xml_etree_c.py index 96b446e..bfced12 100644 --- a/Lib/test/test_xml_etree_c.py +++ b/Lib/test/test_xml_etree_c.py @@ -11,6 +11,7 @@ cET_alias = import_fresh_module('xml.etree.cElementTree', fresh=['_elementtree', 'xml.etree']) +@unittest.skipUnless(cET, 'requires _elementtree') class MiscTests(unittest.TestCase): # Issue #8651. @support.bigmemtest(size=support._2G + 100, memuse=1, dry_run=False) @@ -54,6 +55,15 @@ class MiscTests(unittest.TestCase): del element.attrib self.assertEqual(element.attrib, {'A': 'B', 'C': 'D'}) + def test_trashcan(self): + # If this test fails, it will most likely die via segfault. + e = root = cET.Element('root') + for i in range(200000): + e = cET.SubElement(e, 'x') + del e + del root + support.gc_collect() + @unittest.skipUnless(cET, 'requires _elementtree') class TestAliasWorking(unittest.TestCase): diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index d278e06..0dd4bca 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -12,7 +12,8 @@ import unittest from tempfile import TemporaryFile from random import randint, random, getrandbits -from test.support import (TESTFN, findfile, unlink, rmtree, +from test.support import script_helper +from test.support import (TESTFN, findfile, unlink, rmtree, temp_dir, requires_zlib, requires_bz2, requires_lzma, captured_stdout, check_warnings) @@ -415,6 +416,49 @@ class StoredTestsWithSourceFile(AbstractTestsWithSourceFile, f.seek(len(data)) with zipfile.ZipFile(f, "r") as zipfp: self.assertEqual(zipfp.namelist(), [TESTFN]) + self.assertEqual(zipfp.read(TESTFN), self.data) + with open(TESTFN2, 'rb') as f: + self.assertEqual(f.read(len(data)), data) + zipfiledata = f.read() + with io.BytesIO(zipfiledata) as bio, zipfile.ZipFile(bio) as zipfp: + self.assertEqual(zipfp.namelist(), [TESTFN]) + self.assertEqual(zipfp.read(TESTFN), self.data) + + def test_read_concatenated_zip_file(self): + with io.BytesIO() as bio: + with zipfile.ZipFile(bio, 'w', zipfile.ZIP_STORED) as zipfp: + zipfp.write(TESTFN, TESTFN) + zipfiledata = bio.getvalue() + data = b'I am not a ZipFile!'*10 + with open(TESTFN2, 'wb') as f: + f.write(data) + f.write(zipfiledata) + + with zipfile.ZipFile(TESTFN2) as zipfp: + self.assertEqual(zipfp.namelist(), [TESTFN]) + self.assertEqual(zipfp.read(TESTFN), self.data) + + def test_append_to_concatenated_zip_file(self): + with io.BytesIO() as bio: + with zipfile.ZipFile(bio, 'w', zipfile.ZIP_STORED) as zipfp: + zipfp.write(TESTFN, TESTFN) + zipfiledata = bio.getvalue() + data = b'I am not a ZipFile!'*1000000 + with open(TESTFN2, 'wb') as f: + f.write(data) + f.write(zipfiledata) + + with zipfile.ZipFile(TESTFN2, 'a') as zipfp: + self.assertEqual(zipfp.namelist(), [TESTFN]) + zipfp.writestr('strfile', self.data) + + with open(TESTFN2, 'rb') as f: + self.assertEqual(f.read(len(data)), data) + zipfiledata = f.read() + with io.BytesIO(zipfiledata) as bio, zipfile.ZipFile(bio) as zipfp: + self.assertEqual(zipfp.namelist(), [TESTFN, 'strfile']) + self.assertEqual(zipfp.read(TESTFN), self.data) + self.assertEqual(zipfp.read('strfile'), self.data) def test_ignores_newline_at_end(self): with zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_STORED) as zipfp: @@ -2072,5 +2116,71 @@ class LzmaUniversalNewlineTests(AbstractUniversalNewlineTests, unittest.TestCase): compression = zipfile.ZIP_LZMA + +class CommandLineTest(unittest.TestCase): + + def zipfilecmd(self, *args, **kwargs): + rc, out, err = script_helper.assert_python_ok('-m', 'zipfile', *args, + **kwargs) + return out.replace(os.linesep.encode(), b'\n') + + def zipfilecmd_failure(self, *args): + return script_helper.assert_python_failure('-m', 'zipfile', *args) + + def test_test_command(self): + zip_name = findfile('zipdir.zip') + out = self.zipfilecmd('-t', zip_name) + self.assertEqual(out.rstrip(), b'Done testing') + zip_name = findfile('testtar.tar') + rc, out, err = self.zipfilecmd_failure('-t', zip_name) + self.assertEqual(out, b'') + + def test_list_command(self): + zip_name = findfile('zipdir.zip') + t = io.StringIO() + with zipfile.ZipFile(zip_name, 'r') as tf: + tf.printdir(t) + expected = t.getvalue().encode('ascii', 'backslashreplace') + out = self.zipfilecmd('-l', zip_name, + PYTHONIOENCODING='ascii:backslashreplace') + self.assertEqual(out, expected) + + @requires_zlib + def test_create_command(self): + self.addCleanup(unlink, TESTFN) + with open(TESTFN, 'w') as f: + f.write('test 1') + os.mkdir(TESTFNDIR) + self.addCleanup(rmtree, TESTFNDIR) + with open(os.path.join(TESTFNDIR, 'file.txt'), 'w') as f: + f.write('test 2') + files = [TESTFN, TESTFNDIR] + namelist = [TESTFN, TESTFNDIR + '/', TESTFNDIR + '/file.txt'] + try: + out = self.zipfilecmd('-c', TESTFN2, *files) + self.assertEqual(out, b'') + with zipfile.ZipFile(TESTFN2) as zf: + self.assertEqual(zf.namelist(), namelist) + self.assertEqual(zf.read(namelist[0]), b'test 1') + self.assertEqual(zf.read(namelist[2]), b'test 2') + finally: + unlink(TESTFN2) + + def test_extract_command(self): + zip_name = findfile('zipdir.zip') + with temp_dir() as extdir: + out = self.zipfilecmd('-e', zip_name, extdir) + self.assertEqual(out, b'') + with zipfile.ZipFile(zip_name) as zf: + for zi in zf.infolist(): + path = os.path.join(extdir, + zi.filename.replace('/', os.sep)) + if zi.filename.endswith('/'): + self.assertTrue(os.path.isdir(path)) + else: + self.assertTrue(os.path.isfile(path)) + with open(path, 'rb') as f: + self.assertEqual(f.read(), zf.read(zi)) + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_zipimport.py b/Lib/test/test_zipimport.py index 0da5906..d5b3b22 100644 --- a/Lib/test/test_zipimport.py +++ b/Lib/test/test_zipimport.py @@ -513,6 +513,19 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase): "some.data": (NOW, "some data")} self.doTest(pyc_ext, files, TESTMOD) + def testDefaultOptimizationLevel(self): + # zipimport should use the default optimization level (#28131) + src = """if 1: # indent hack + def test(val): + assert(val) + return val\n""" + files = {TESTMOD + '.py': (NOW, src)} + self.makeZip(files) + sys.path.insert(0, TEMP_ZIP) + mod = importlib.import_module(TESTMOD) + self.assertEqual(mod.test(1), 1) + self.assertRaises(AssertionError, mod.test, False) + def testImport_WithStuff(self): # try importing from a zipfile which contains additional # stuff at the beginning of the file @@ -596,10 +609,23 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase): z.writestr(zinfo, test_src) z.close() try: - zipimport.zipimporter(filename) + zipimport.zipimporter(filename).load_module(TESTMOD) finally: os.remove(filename) + def testBytesPath(self): + filename = support.TESTFN + ".zip" + self.addCleanup(support.unlink, filename) + with ZipFile(filename, "w") as z: + zinfo = ZipInfo(TESTMOD + ".py", time.localtime(NOW)) + zinfo.compress_type = self.compression + z.writestr(zinfo, test_src) + + zipimport.zipimporter(filename) + zipimport.zipimporter(os.fsencode(filename)) + zipimport.zipimporter(bytearray(os.fsencode(filename))) + zipimport.zipimporter(memoryview(os.fsencode(filename))) + @support.requires_zlib class CompressedZipImportTestCase(UncompressedZipImportTestCase): @@ -620,6 +646,8 @@ class BadFileZipImportTestCase(unittest.TestCase): def testBadArgs(self): self.assertRaises(TypeError, zipimport.zipimporter, None) self.assertRaises(TypeError, zipimport.zipimporter, TESTMOD, kwd=None) + self.assertRaises(TypeError, zipimport.zipimporter, + list(os.fsencode(TESTMOD))) def testFilenameTooLong(self): self.assertZipFailure('A' * 33000) diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py index 78ecade..6fea893 100644 --- a/Lib/test/test_zlib.py +++ b/Lib/test/test_zlib.py @@ -122,6 +122,8 @@ class ExceptionTestCase(unittest.TestCase): with self.assertRaisesRegex(OverflowError, 'int too large'): zlib.decompress(b'', 15, sys.maxsize + 1) with self.assertRaisesRegex(OverflowError, 'int too large'): + zlib.decompressobj().decompress(b'', sys.maxsize + 1) + with self.assertRaisesRegex(OverflowError, 'int too large'): zlib.decompressobj().flush(sys.maxsize + 1) @@ -188,15 +190,6 @@ class CompressTestCase(BaseCompressTestCase, unittest.TestCase): def test_big_decompress_buffer(self, size): self.check_big_decompress_buffer(size, zlib.decompress) - @bigmemtest(size=_4G + 100, memuse=1, dry_run=False) - def test_length_overflow(self, size): - data = b'x' * size - try: - self.assertRaises(OverflowError, zlib.compress, data, 1) - self.assertRaises(OverflowError, zlib.decompress, data) - finally: - data = None - @bigmemtest(size=_4G, memuse=1) def test_large_bufsize(self, size): # Test decompress(bufsize) parameter greater than the internal limit @@ -209,6 +202,16 @@ class CompressTestCase(BaseCompressTestCase, unittest.TestCase): compressed = zlib.compress(data, 1) self.assertEqual(zlib.decompress(compressed, 15, CustomInt()), data) + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=4) + def test_64bit_compress(self, size): + data = b'x' * size + try: + comp = zlib.compress(data, 0) + self.assertEqual(zlib.decompress(comp), data) + finally: + comp = data = None + class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): # Test compression object @@ -678,16 +681,45 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): decompress = lambda s: d.decompress(s) + d.flush() self.check_big_decompress_buffer(size, decompress) - @bigmemtest(size=_4G + 100, memuse=1, dry_run=False) - def test_length_overflow(self, size): + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=4) + def test_64bit_compress(self, size): data = b'x' * size - c = zlib.compressobj(1) - d = zlib.decompressobj() + co = zlib.compressobj(0) + do = zlib.decompressobj() try: - self.assertRaises(OverflowError, c.compress, data) - self.assertRaises(OverflowError, d.decompress, data) + comp = co.compress(data) + co.flush() + uncomp = do.decompress(comp) + do.flush() + self.assertEqual(uncomp, data) finally: - data = None + comp = uncomp = data = None + + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=3) + def test_large_unused_data(self, size): + data = b'abcdefghijklmnop' + unused = b'x' * size + comp = zlib.compress(data) + unused + do = zlib.decompressobj() + try: + uncomp = do.decompress(comp) + do.flush() + self.assertEqual(unused, do.unused_data) + self.assertEqual(uncomp, data) + finally: + unused = comp = do = None + + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=5) + def test_large_unconsumed_tail(self, size): + data = b'x' * size + do = zlib.decompressobj() + try: + comp = zlib.compress(data, 0) + uncomp = do.decompress(comp, 1) + do.flush() + self.assertEqual(uncomp, data) + self.assertEqual(do.unconsumed_tail, b'') + finally: + comp = uncomp = data = None def test_wbits(self): # wbits=0 only supported since zlib v1.2.3.5 diff --git a/Lib/textwrap.py b/Lib/textwrap.py index 05e0306..0c18dc5 100644 --- a/Lib/textwrap.py +++ b/Lib/textwrap.py @@ -10,13 +10,8 @@ import re __all__ = ['TextWrapper', 'wrap', 'fill', 'dedent', 'indent', 'shorten'] # Hardcode the recognized whitespace characters to the US-ASCII -# whitespace characters. The main reason for doing this is that in -# ISO-8859-1, 0xa0 is non-breaking whitespace, so in certain locales -# that character winds up in string.whitespace. Respecting -# string.whitespace in those cases would 1) make textwrap treat 0xa0 the -# same as any other whitespace char, which is clearly wrong (it's a -# *non-breaking* space), 2) possibly cause problems with Unicode, -# since 0xa0 is not in range(128). +# whitespace characters. The main reason for doing this is that +# some Unicode spaces (like \u00a0) are non-breaking whitespaces. _whitespace = '\t\n\x0b\x0c\r ' class TextWrapper: @@ -81,29 +76,34 @@ class TextWrapper: # (after stripping out empty strings). word_punct = r'[\w!"\'&.,?]' letter = r'[^\d\W]' + whitespace = r'[%s]' % re.escape(_whitespace) + nowhitespace = '[^' + whitespace[1:] wordsep_re = re.compile(r''' ( # any whitespace - \s+ + %(ws)s+ | # em-dash between words (?<=%(wp)s) -{2,} (?=\w) | # word, possibly hyphenated - \S+? (?: + %(nws)s+? (?: # hyphenated word -(?: (?<=%(lt)s{2}-) | (?<=%(lt)s-%(lt)s-)) (?= %(lt)s -? %(lt)s) | # end of word - (?=\s|\Z) + (?=%(ws)s|\Z) | # em-dash (?<=%(wp)s) (?=-{2,}\w) ) - )''' % {'wp': word_punct, 'lt': letter}, re.VERBOSE) - del word_punct, letter + )''' % {'wp': word_punct, 'lt': letter, + 'ws': whitespace, 'nws': nowhitespace}, + re.VERBOSE) + del word_punct, letter, nowhitespace # This less funky little regex just split on recognized spaces. E.g. # "Hello there -- you goof-ball, use the -b option!" # splits into # Hello/ /there/ /--/ /you/ /goof-ball,/ /use/ /the/ /-b/ /option!/ - wordsep_simple_re = re.compile(r'(\s+)') + wordsep_simple_re = re.compile(r'(%s+)' % whitespace) + del whitespace # XXX this is not locale- or charset-aware -- string.lowercase # is US-ASCII only (and therefore English-only) @@ -112,7 +112,6 @@ class TextWrapper: r'[\"\']?' # optional end-of-quote r'\Z') # end of chunk - def __init__(self, width=70, initial_indent="", diff --git a/Lib/threading.py b/Lib/threading.py index c9f8cb6..06b7b9b 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -639,7 +639,7 @@ class Barrier: self._break() raise - # Wait in the barrier until we are relased. Raise an exception + # Wait in the barrier until we are released. Raise an exception # if the barrier is reset or broken. def _wait(self, timeout): if not self._cond.wait_for(lambda : self._state != 0, timeout): diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index aa646dc..1eaab44 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -271,7 +271,7 @@ class Variable: Return the name of the callback. """ - f = CallWrapper(callback, None, self).__call__ + f = CallWrapper(callback, None, self._root).__call__ cbname = repr(id(f)) try: callback = callback.__func__ @@ -295,14 +295,19 @@ class Variable: CBNAME is the name of the callback returned from trace_variable or trace. """ self._tk.call("trace", "vdelete", self._name, mode, cbname) - self._tk.deletecommand(cbname) - try: - self._tclCommands.remove(cbname) - except ValueError: - pass + cbname = self._tk.splitlist(cbname)[0] + for m, ca in self.trace_vinfo(): + if self._tk.splitlist(ca)[0] == cbname: + break + else: + self._tk.deletecommand(cbname) + try: + self._tclCommands.remove(cbname) + except ValueError: + pass def trace_vinfo(self): """Return all trace callback information.""" - return [self._tk.split(x) for x in self._tk.splitlist( + return [self._tk.splitlist(x) for x in self._tk.splitlist( self._tk.call("trace", "vinfo", self._name))] def __eq__(self, other): """Comparison for equality (==). @@ -352,7 +357,11 @@ class IntVar(Variable): def get(self): """Return the value of the variable as an integer.""" - return self._tk.getint(self._tk.globalgetvar(self._name)) + value = self._tk.globalgetvar(self._name) + try: + return self._tk.getint(value) + except (TypeError, TclError): + return int(self._tk.getdouble(value)) class DoubleVar(Variable): """Value holder for float variables.""" @@ -2859,7 +2868,7 @@ class Scale(Widget): value = self.tk.call(self._w, 'get') try: return self.tk.getint(value) - except (ValueError, TclError): + except (ValueError, TypeError, TclError): return self.tk.getdouble(value) def set(self, value): """Set the value to VALUE.""" diff --git a/Lib/tkinter/test/test_tkinter/test_variables.py b/Lib/tkinter/test/test_tkinter/test_variables.py index abdce96..d8ba9ce 100644 --- a/Lib/tkinter/test/test_tkinter/test_variables.py +++ b/Lib/tkinter/test/test_tkinter/test_variables.py @@ -1,5 +1,5 @@ import unittest - +import gc from tkinter import (Variable, StringVar, IntVar, DoubleVar, BooleanVar, Tcl, TclError) @@ -87,6 +87,55 @@ class TestVariable(TestBase): v.set("value") self.assertTrue(v.side_effect) + def test_trace(self): + v = Variable(self.root) + vname = str(v) + trace = [] + def read_tracer(*args): + trace.append(('read',) + args) + def write_tracer(*args): + trace.append(('write',) + args) + cb1 = v.trace_variable('r', read_tracer) + cb2 = v.trace_variable('wu', write_tracer) + self.assertEqual(sorted(v.trace_vinfo()), [('r', cb1), ('wu', cb2)]) + self.assertEqual(trace, []) + + v.set('spam') + self.assertEqual(trace, [('write', vname, '', 'w')]) + + trace = [] + v.get() + self.assertEqual(trace, [('read', vname, '', 'r')]) + + trace = [] + info = sorted(v.trace_vinfo()) + v.trace_vdelete('w', cb1) # Wrong mode + self.assertEqual(sorted(v.trace_vinfo()), info) + with self.assertRaises(TclError): + v.trace_vdelete('r', 'spam') # Wrong command name + self.assertEqual(sorted(v.trace_vinfo()), info) + v.trace_vdelete('r', (cb1, 43)) # Wrong arguments + self.assertEqual(sorted(v.trace_vinfo()), info) + v.get() + self.assertEqual(trace, [('read', vname, '', 'r')]) + + trace = [] + v.trace_vdelete('r', cb1) + self.assertEqual(v.trace_vinfo(), [('wu', cb2)]) + v.get() + self.assertEqual(trace, []) + + trace = [] + del write_tracer + gc.collect() + v.set('eggs') + self.assertEqual(trace, [('write', vname, '', 'w')]) + + trace = [] + del v + gc.collect() + self.assertEqual(trace, [('write', vname, '', 'u')]) + class TestStringVar(TestBase): @@ -118,15 +167,14 @@ class TestIntVar(TestBase): self.assertEqual(123, v.get()) self.root.globalsetvar("name", "345") self.assertEqual(345, v.get()) + self.root.globalsetvar("name", "876.5") + self.assertEqual(876, v.get()) def test_invalid_value(self): v = IntVar(self.root, name="name") self.root.globalsetvar("name", "value") with self.assertRaises((ValueError, TclError)): v.get() - self.root.globalsetvar("name", "345.0") - with self.assertRaises((ValueError, TclError)): - v.get() class TestDoubleVar(TestBase): diff --git a/Lib/tkinter/test/test_ttk/test_extensions.py b/Lib/tkinter/test/test_ttk/test_extensions.py index f33945c..218b27f 100644 --- a/Lib/tkinter/test/test_ttk/test_extensions.py +++ b/Lib/tkinter/test/test_ttk/test_extensions.py @@ -69,14 +69,12 @@ class LabeledScaleTest(AbstractTkTest, unittest.TestCase): # variable initialization/passing passed_expected = (('0', 0), (0, 0), (10, 10), - (-1, -1), (sys.maxsize + 1, sys.maxsize + 1)) + (-1, -1), (sys.maxsize + 1, sys.maxsize + 1), + (2.5, 2), ('2.5', 2)) for pair in passed_expected: x = ttk.LabeledScale(self.root, from_=pair[0]) self.assertEqual(x.value, pair[1]) x.destroy() - x = ttk.LabeledScale(self.root, from_='2.5') - self.assertRaises((ValueError, tkinter.TclError), x._variable.get) - x.destroy() x = ttk.LabeledScale(self.root, from_=None) self.assertRaises((ValueError, tkinter.TclError), x._variable.get) x.destroy() @@ -155,8 +153,10 @@ class LabeledScaleTest(AbstractTkTest, unittest.TestCase): # The following update is needed since the test doesn't use mainloop, # at the same time this shouldn't affect test outcome x.update() + self.assertEqual(x.value, newval) self.assertEqual(x.label['text'], newval if self.wantobjects else str(newval)) + self.assertEqual(float(x.scale.get()), newval) self.assertGreater(x.scale.coords()[0], curr_xcoord) self.assertEqual(x.scale.coords()[0], int(x.label.place_info()['x'])) @@ -168,10 +168,19 @@ class LabeledScaleTest(AbstractTkTest, unittest.TestCase): conv = int x.value = conv(x.scale['to']) + 1 # no changes shouldn't happen x.update() + self.assertEqual(x.value, newval) self.assertEqual(conv(x.label['text']), newval) + self.assertEqual(float(x.scale.get()), newval) self.assertEqual(x.scale.coords()[0], int(x.label.place_info()['x'])) + # non-integer value + x.value = newval = newval + 1.5 + x.update() + self.assertEqual(x.value, int(newval)) + self.assertEqual(conv(x.label['text']), int(newval)) + self.assertEqual(float(x.scale.get()), newval) + x.destroy() diff --git a/Lib/tkinter/test/test_ttk/test_widgets.py b/Lib/tkinter/test/test_ttk/test_widgets.py index c031351..8bd22d0 100644 --- a/Lib/tkinter/test/test_ttk/test_widgets.py +++ b/Lib/tkinter/test/test_ttk/test_widgets.py @@ -1486,6 +1486,57 @@ class TreeviewTest(AbstractWidgetTest, unittest.TestCase): value) + def test_selection(self): + # item 'none' doesn't exist + self.assertRaises(tkinter.TclError, self.tv.selection_set, 'none') + self.assertRaises(tkinter.TclError, self.tv.selection_add, 'none') + self.assertRaises(tkinter.TclError, self.tv.selection_remove, 'none') + self.assertRaises(tkinter.TclError, self.tv.selection_toggle, 'none') + + item1 = self.tv.insert('', 'end') + item2 = self.tv.insert('', 'end') + c1 = self.tv.insert(item1, 'end') + c2 = self.tv.insert(item1, 'end') + c3 = self.tv.insert(item1, 'end') + self.assertEqual(self.tv.selection(), ()) + + self.tv.selection_set((c1, item2)) + self.assertEqual(self.tv.selection(), (c1, item2)) + self.tv.selection_set(c2) + self.assertEqual(self.tv.selection(), (c2,)) + + self.tv.selection_add((c1, item2)) + self.assertEqual(self.tv.selection(), (c1, c2, item2)) + self.tv.selection_add(item1) + self.assertEqual(self.tv.selection(), (item1, c1, c2, item2)) + + self.tv.selection_remove((item1, c3)) + self.assertEqual(self.tv.selection(), (c1, c2, item2)) + self.tv.selection_remove(c2) + self.assertEqual(self.tv.selection(), (c1, item2)) + + self.tv.selection_toggle((c1, c3)) + self.assertEqual(self.tv.selection(), (c3, item2)) + self.tv.selection_toggle(item2) + self.assertEqual(self.tv.selection(), (c3,)) + + self.tv.insert('', 'end', id='with spaces') + self.tv.selection_set('with spaces') + self.assertEqual(self.tv.selection(), ('with spaces',)) + + self.tv.insert('', 'end', id='{brace') + self.tv.selection_set('{brace') + self.assertEqual(self.tv.selection(), ('{brace',)) + + self.tv.insert('', 'end', id='unicode\u20ac') + self.tv.selection_set('unicode\u20ac') + self.assertEqual(self.tv.selection(), ('unicode\u20ac',)) + + self.tv.insert('', 'end', id=b'bytes\xe2\x82\xac') + self.tv.selection_set(b'bytes\xe2\x82\xac') + self.assertEqual(self.tv.selection(), ('bytes\xe2\x82\xac',)) + + def test_set(self): self.tv['columns'] = ['A', 'B'] item = self.tv.insert('', 'end', values=['a', 'b']) diff --git a/Lib/tkinter/tix.py b/Lib/tkinter/tix.py index f667933..a1006bd 100644 --- a/Lib/tkinter/tix.py +++ b/Lib/tkinter/tix.py @@ -1,7 +1,3 @@ -# -*-mode: python; fill-column: 75; tab-width: 8 -*- -# -# $Id$ -# # Tix.py -- Tix widget wrappers. # # For Tix, see http://tix.sourceforge.net @@ -26,8 +22,10 @@ # appreciate the advantages. # +import os +import tkinter from tkinter import * -from tkinter import _cnfmerge, _default_root +from tkinter import _cnfmerge # WARNING - TkVersion is a limited precision floating point number if TkVersion < 3.999: @@ -72,7 +70,6 @@ TCL_ALL_EVENTS = 0 # BEWARE - this is implemented by copying some code from the Widget class # in Tkinter (to override Widget initialization) and is therefore # liable to break. -import tkinter, os # Could probably add this to Tkinter.Misc class tixCommand: @@ -476,10 +473,15 @@ class DisplayStyle: (multiple) Display Items""" def __init__(self, itemtype, cnf={}, **kw): - master = _default_root # global from Tkinter - if not master and 'refwindow' in cnf: master=cnf['refwindow'] - elif not master and 'refwindow' in kw: master= kw['refwindow'] - elif not master: raise RuntimeError("Too early to create display style: no root window") + if 'refwindow' in kw: + master = kw['refwindow'] + elif 'refwindow' in cnf: + master = cnf['refwindow'] + else: + master = tkinter._default_root + if not master: + raise RuntimeError("Too early to create display style: " + "no root window") self.tk = master.tk self.stylename = self.tk.call('tixDisplayStyle', itemtype, *self._options(cnf,kw) ) @@ -923,7 +925,11 @@ class HList(TixWidget, XView, YView): return self.tk.call(self._w, 'header', 'cget', col, opt) def header_exists(self, col): - return self.tk.call(self._w, 'header', 'exists', col) + # A workaround to Tix library bug (issue #25464). + # The documented command is "exists", but only erroneous "exist" is + # accepted. + return self.tk.getboolean(self.tk.call(self._w, 'header', 'exist', col)) + header_exist = header_exists def header_delete(self, col): self.tk.call(self._w, 'header', 'delete', col) diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py index 8f9369b..f4a6d8c 100644 --- a/Lib/tkinter/ttk.py +++ b/Lib/tkinter/ttk.py @@ -151,7 +151,7 @@ def _format_elemcreate(etype, script=False, *args, **kw): def _format_layoutlist(layout, indent=0, indent_size=2): """Formats a layout list so we can pass the result to ttk::style - layout and ttk::style settings. Note that the layout doesn't has to + layout and ttk::style settings. Note that the layout doesn't have to be a list necessarily. E.g.: @@ -1392,7 +1392,9 @@ class Treeview(Widget, tkinter.XView, tkinter.YView): def selection(self, selop=None, items=None): """If selop is not specified, returns selected items.""" - return self.tk.call(self._w, "selection", selop, items) + if isinstance(items, (str, bytes)): + items = (items,) + return self.tk.splitlist(self.tk.call(self._w, "selection", selop, items)) def selection_set(self, items): diff --git a/Lib/traceback.py b/Lib/traceback.py index a2eb539..c5fd617 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -140,7 +140,7 @@ def format_exception_only(etype, value): def _format_final_exc_line(etype, value): valuestr = _some_str(value) - if value == 'None' or value is None or not valuestr: + if value is None or not valuestr: line = "%s\n" % etype else: line = "%s: %s\n" % (etype, valuestr) diff --git a/Lib/turtle.py b/Lib/turtle.py index cbd4f47..8036b7f 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -179,7 +179,7 @@ def config_dict(filename): continue try: key, value = line.split("=") - except: + except ValueError: print("Bad line in config-file %s:\n%s" % (filename,line)) continue key = key.strip() @@ -192,7 +192,7 @@ def config_dict(filename): value = float(value) else: value = int(value) - except: + except ValueError: pass # value need not be converted cfgdict[key] = value return cfgdict @@ -220,7 +220,7 @@ def readconfig(cfgdict): try: head, tail = split(__file__) cfg_file2 = join(head, default_cfg) - except: + except Exception: cfg_file2 = "" if isfile(cfg_file2): cfgdict2 = config_dict(cfg_file2) @@ -229,7 +229,7 @@ def readconfig(cfgdict): try: readconfig(_CFG) -except: +except Exception: print ("No configfile read, reason unknown") @@ -653,7 +653,7 @@ class TurtleScreenBase(object): x, y = (self.cv.canvasx(event.x)/self.xscale, -self.cv.canvasy(event.y)/self.yscale) fun(x, y) - except: + except Exception: pass self.cv.tag_bind(item, "" % num, eventfun, add) @@ -1035,7 +1035,7 @@ class TurtleScreen(TurtleScreenBase): """Set turtle-mode ('standard', 'logo' or 'world') and perform reset. Optional argument: - mode -- on of the strings 'standard', 'logo' or 'world' + mode -- one of the strings 'standard', 'logo' or 'world' Mode 'standard' is compatible with turtle.py. Mode 'logo' is compatible with most Logo-Turtle-Graphics. @@ -1158,7 +1158,7 @@ class TurtleScreen(TurtleScreenBase): raise TurtleGraphicsError("bad color string: %s" % str(color)) try: r, g, b = color - except: + except (TypeError, ValueError): raise TurtleGraphicsError("bad color arguments: %s" % str(color)) if self._colormode == 1.0: r, g, b = [round(255.0*x) for x in (r, g, b)] @@ -2702,7 +2702,7 @@ class RawTurtle(TPen, TNavigator): return args try: r, g, b = args - except: + except (TypeError, ValueError): raise TurtleGraphicsError("bad color arguments: %s" % str(args)) if self.screen._colormode == 1.0: r, g, b = [round(255.0*x) for x in (r, g, b)] @@ -3865,7 +3865,7 @@ def read_docstrings(lang): try: # eval(key).im_func.__doc__ = docsdict[key] eval(key).__doc__ = docsdict[key] - except: + except Exception: print("Bad docstring-entry: %s" % key) _LANGUAGE = _CFG["language"] @@ -3875,7 +3875,7 @@ try: read_docstrings(_LANGUAGE) except ImportError: print("Cannot find docsdict for", _LANGUAGE) -except: +except Exception: print ("Unknown Error when trying to import %s-docstring-dictionary" % _LANGUAGE) diff --git a/Lib/typing.py b/Lib/typing.py index 4cac66c..34845b7 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -17,6 +17,7 @@ __all__ = [ # Super-special typing primitives. 'Any', 'Callable', + 'ClassVar', 'Generic', 'Optional', 'Tuple', @@ -26,9 +27,6 @@ __all__ = [ # ABCs (from collections.abc). 'AbstractSet', # collections.abc.Set. - 'Awaitable', - 'AsyncIterator', - 'AsyncIterable', 'ByteString', 'Container', 'Hashable', @@ -44,6 +42,14 @@ __all__ = [ 'Sequence', 'Sized', 'ValuesView', + # The following are added depending on presence + # of their non-generic counterparts in stdlib: + # Awaitable, + # AsyncIterator, + # AsyncIterable, + # Coroutine, + # Collection, + # ContextManager # Structural checks, a.k.a. protocols. 'Reversible', @@ -57,6 +63,7 @@ __all__ = [ 'DefaultDict', 'List', 'Set', + 'FrozenSet', 'NamedTuple', # Not really a type. 'Generator', @@ -85,17 +92,24 @@ def _qualname(x): return x.__name__ +def _trim_name(nm): + if nm.startswith('_') and nm not in ('_TypeAlias', + '_ForwardRef', '_TypingBase', '_FinalTypingBase'): + nm = nm[1:] + return nm + + class TypingMeta(type): - """Metaclass for every type defined below. + """Metaclass for most types defined in typing module + (not a part of public API). This overrides __new__() to require an extra keyword parameter '_root', which serves as a guard against naive subclassing of the typing classes. Any legitimate class defined using a metaclass - derived from TypingMeta (including internal subclasses created by - e.g. Union[X, Y]) must pass _root=True. + derived from TypingMeta must pass _root=True. - This also defines a dummy constructor (all the work is done in - __new__) and a nicer repr(). + This also defines a dummy constructor (all the work for most typing + constructs is done in __new__) and a nicer repr(). """ _is_protocol = False @@ -112,8 +126,8 @@ class TypingMeta(type): def _eval_type(self, globalns, localns): """Override this in subclasses to interpret forward references. - For example, Union['C'] is internally stored as - Union[_ForwardRef('C')], which should evaluate to _Union[C], + For example, List['C'] is internally stored as + List[_ForwardRef('C')], which should evaluate to List[C], where C is an object found in globalns or localns (searching localns first, of course). """ @@ -123,50 +137,88 @@ class TypingMeta(type): pass def __repr__(self): - return '%s.%s' % (self.__module__, _qualname(self)) + qname = _trim_name(_qualname(self)) + return '%s.%s' % (self.__module__, qname) + + +class _TypingBase(metaclass=TypingMeta, _root=True): + """Internal indicator of special typing constructs.""" + + __slots__ = () + + def __init__(self, *args, **kwds): + pass + + def __new__(cls, *args, **kwds): + """Constructor. + + This only exists to give a better error message in case + someone tries to subclass a special typing object (not a good idea). + """ + if (len(args) == 3 and + isinstance(args[0], str) and + isinstance(args[1], tuple)): + # Close enough. + raise TypeError("Cannot subclass %r" % cls) + return super().__new__(cls) + + # Things that are not classes also need these. + def _eval_type(self, globalns, localns): + return self + + def _get_type_vars(self, tvars): + pass + + def __repr__(self): + cls = type(self) + qname = _trim_name(_qualname(cls)) + return '%s.%s' % (cls.__module__, qname) + + def __call__(self, *args, **kwds): + raise TypeError("Cannot instantiate %r" % type(self)) -class Final: - """Mix-in class to prevent instantiation.""" +class _FinalTypingBase(_TypingBase, _root=True): + """Internal mix-in class to prevent instantiation. + + Prevents instantiation unless _root=True is given in class call. + It is used to create pseudo-singleton instances Any, Union, Optional, etc. + """ __slots__ = () - def __new__(self, *args, **kwds): - raise TypeError("Cannot instantiate %r" % self.__class__) + def __new__(cls, *args, _root=False, **kwds): + self = super().__new__(cls, *args, **kwds) + if _root is True: + return self + raise TypeError("Cannot instantiate %r" % cls) + + def __reduce__(self): + return _trim_name(type(self).__name__) + +class _ForwardRef(_TypingBase, _root=True): + """Internal wrapper to hold a forward reference.""" -class _ForwardRef(TypingMeta): - """Wrapper to hold a forward reference.""" + __slots__ = ('__forward_arg__', '__forward_code__', + '__forward_evaluated__', '__forward_value__') - def __new__(cls, arg): + def __init__(self, arg): + super().__init__(arg) if not isinstance(arg, str): - raise TypeError('ForwardRef must be a string -- got %r' % (arg,)) + raise TypeError('Forward reference must be a string -- got %r' % (arg,)) try: code = compile(arg, '', 'eval') except SyntaxError: - raise SyntaxError('ForwardRef must be an expression -- got %r' % + raise SyntaxError('Forward reference must be an expression -- got %r' % (arg,)) - self = super().__new__(cls, arg, (), {}, _root=True) self.__forward_arg__ = arg self.__forward_code__ = code self.__forward_evaluated__ = False self.__forward_value__ = None - typing_globals = globals() - frame = sys._getframe(1) - while frame is not None and frame.f_globals is typing_globals: - frame = frame.f_back - assert frame is not None - self.__forward_frame__ = frame - return self def _eval_type(self, globalns, localns): - if not isinstance(localns, dict): - raise TypeError('ForwardRef localns must be a dict -- got %r' % - (localns,)) - if not isinstance(globalns, dict): - raise TypeError('ForwardRef globalns must be a dict -- got %r' % - (globalns,)) - if not self.__forward_evaluated__: + if not self.__forward_evaluated__ or localns is not globalns: if globalns is None and localns is None: globalns = localns = {} elif globalns is None: @@ -179,49 +231,36 @@ class _ForwardRef(TypingMeta): self.__forward_evaluated__ = True return self.__forward_value__ + def __eq__(self, other): + if not isinstance(other, _ForwardRef): + return NotImplemented + return (self.__forward_arg__ == other.__forward_arg__ and + self.__forward_value__ == other.__forward_value__) + + def __hash__(self): + return hash((self.__forward_arg__, self.__forward_value__)) + def __instancecheck__(self, obj): raise TypeError("Forward references cannot be used with isinstance().") def __subclasscheck__(self, cls): - if not self.__forward_evaluated__: - globalns = self.__forward_frame__.f_globals - localns = self.__forward_frame__.f_locals - try: - self._eval_type(globalns, localns) - except NameError: - return False # Too early. - return issubclass(cls, self.__forward_value__) + raise TypeError("Forward references cannot be used with issubclass().") def __repr__(self): return '_ForwardRef(%r)' % (self.__forward_arg__,) -class _TypeAlias: +class _TypeAlias(_TypingBase, _root=True): """Internal helper class for defining generic variants of concrete types. - Note that this is not a type; let's call it a pseudo-type. It can - be used in instance and subclass checks, e.g. isinstance(m, Match) - or issubclass(type(m), Match). However, it cannot be itself the - target of an issubclass() call; e.g. issubclass(Match, C) (for - some arbitrary class C) raises TypeError rather than returning - False. + Note that this is not a type; let's call it a pseudo-type. It cannot + be used in instance and subclass checks in parameterized form, i.e. + ``isinstance(42, Match[str])`` raises ``TypeError`` instead of returning + ``False``. """ __slots__ = ('name', 'type_var', 'impl_type', 'type_checker') - def __new__(cls, *args, **kwds): - """Constructor. - - This only exists to give a better error message in case - someone tries to subclass a type alias (not a good idea). - """ - if (len(args) == 3 and - isinstance(args[0], str) and - isinstance(args[1], tuple)): - # Close enough. - raise TypeError("A type alias cannot be subclassed") - return object.__new__(cls) - def __init__(self, name, type_var, impl_type, type_checker): """Initializer. @@ -234,9 +273,9 @@ class _TypeAlias: and returns a value that should be a type_var instance. """ assert isinstance(name, str), repr(name) - assert isinstance(type_var, type), repr(type_var) assert isinstance(impl_type, type), repr(impl_type) assert not isinstance(impl_type, TypingMeta), repr(impl_type) + assert isinstance(type_var, (type, _TypingBase)), repr(type_var) self.name = name self.type_var = type_var self.impl_type = impl_type @@ -246,36 +285,41 @@ class _TypeAlias: return "%s[%s]" % (self.name, _type_repr(self.type_var)) def __getitem__(self, parameter): - assert isinstance(parameter, type), repr(parameter) if not isinstance(self.type_var, TypeVar): raise TypeError("%s cannot be further parameterized." % self) - if self.type_var.__constraints__: - if not issubclass(parameter, Union[self.type_var.__constraints__]): + if self.type_var.__constraints__ and isinstance(parameter, type): + if not issubclass(parameter, self.type_var.__constraints__): raise TypeError("%s is not a valid substitution for %s." % (parameter, self.type_var)) + if isinstance(parameter, TypeVar) and parameter is not self.type_var: + raise TypeError("%s cannot be re-parameterized." % self) return self.__class__(self.name, parameter, self.impl_type, self.type_checker) + def __eq__(self, other): + if not isinstance(other, _TypeAlias): + return NotImplemented + return self.name == other.name and self.type_var == other.type_var + + def __hash__(self): + return hash((self.name, self.type_var)) + def __instancecheck__(self, obj): - raise TypeError("Type aliases cannot be used with isinstance().") + if not isinstance(self.type_var, TypeVar): + raise TypeError("Parameterized type aliases cannot be used " + "with isinstance().") + return isinstance(obj, self.impl_type) def __subclasscheck__(self, cls): - if cls is Any: - return True - if isinstance(cls, _TypeAlias): - # Covariance. For now, we compare by name. - return (cls.name == self.name and - issubclass(cls.type_var, self.type_var)) - else: - # Note that this is too lenient, because the - # implementation type doesn't carry information about - # whether it is about bytes or str (for example). - return issubclass(cls, self.impl_type) + if not isinstance(self.type_var, TypeVar): + raise TypeError("Parameterized type aliases cannot be used " + "with issubclass().") + return issubclass(cls, self.impl_type) def _get_type_vars(types, tvars): for t in types: - if isinstance(t, TypingMeta): + if isinstance(t, TypingMeta) or isinstance(t, _TypingBase): t._get_type_vars(tvars) @@ -286,14 +330,13 @@ def _type_vars(types): def _eval_type(t, globalns, localns): - if isinstance(t, TypingMeta): + if isinstance(t, TypingMeta) or isinstance(t, _TypingBase): return t._eval_type(globalns, localns) - else: - return t + return t def _type_check(arg, msg): - """Check that the argument is a type, and return it. + """Check that the argument is a type, and return it (internal helper). As a special case, accept None and return type(None) instead. Also, _TypeAlias instances (e.g. Match, Pattern) are acceptable. @@ -308,13 +351,19 @@ def _type_check(arg, msg): return type(None) if isinstance(arg, str): arg = _ForwardRef(arg) - if not isinstance(arg, (type, _TypeAlias)) and not callable(arg): + if (isinstance(arg, _TypingBase) and type(arg).__name__ == '_ClassVar' or + not isinstance(arg, (type, _TypingBase)) and not callable(arg)): raise TypeError(msg + " Got %.100r." % (arg,)) + # Bare Union etc. are not valid as type arguments + if (type(arg).__name__ in ('_Union', '_Optional') + and not getattr(arg, '__origin__', None) + or isinstance(arg, TypingMeta) and _gorg(arg) in (Generic, _Protocol)): + raise TypeError("Plain %s is not valid as type argument" % arg) return arg def _type_repr(obj): - """Return the repr() of an object, special-casing types. + """Return the repr() of an object, special-casing types (internal helper). If obj is a type, we return a shorter version than the default type.__repr__, based on the module and qualified name, which is @@ -324,40 +373,39 @@ def _type_repr(obj): if isinstance(obj, type) and not isinstance(obj, TypingMeta): if obj.__module__ == 'builtins': return _qualname(obj) - else: - return '%s.%s' % (obj.__module__, _qualname(obj)) - else: - return repr(obj) + return '%s.%s' % (obj.__module__, _qualname(obj)) + if obj is ...: + return('...') + if isinstance(obj, types.FunctionType): + return obj.__name__ + return repr(obj) + +class _Any(_FinalTypingBase, _root=True): + """Special type indicating an unconstrained type. -class AnyMeta(TypingMeta): - """Metaclass for Any.""" + - Any is compatible with every type. + - Any assumed to have all methods. + - All values assumed to be instances of Any. - def __new__(cls, name, bases, namespace, _root=False): - self = super().__new__(cls, name, bases, namespace, _root=_root) - return self + Note that all the above statements are true from the point of view of + static type checkers. At runtime, Any should not be used with instance + or class checks. + """ + + __slots__ = () def __instancecheck__(self, obj): raise TypeError("Any cannot be used with isinstance().") def __subclasscheck__(self, cls): - if not isinstance(cls, type): - return super().__subclasscheck__(cls) # To TypeError. - return True + raise TypeError("Any cannot be used with issubclass().") -class Any(Final, metaclass=AnyMeta, _root=True): - """Special type indicating an unconstrained type. +Any = _Any(_root=True) - - Any object is an instance of Any. - - Any class is a subclass of Any. - - As a special case, Any and object are subclasses of each other. - """ - - __slots__ = () - -class TypeVar(TypingMeta, metaclass=TypingMeta, _root=True): +class TypeVar(_TypingBase, _root=True): """Type variable. Usage:: @@ -370,7 +418,7 @@ class TypeVar(TypingMeta, metaclass=TypingMeta, _root=True): as for generic function definitions. See class Generic for more information on generic types. Generic functions work as follows: - def repeat(x: T, n: int) -> Sequence[T]: + def repeat(x: T, n: int) -> List[T]: '''Return a list containing n references to x.''' return [x]*n @@ -383,14 +431,12 @@ class TypeVar(TypingMeta, metaclass=TypingMeta, _root=True): that if the arguments are instances of some subclass of str, the return type is still plain str. - At runtime, isinstance(x, T) will raise TypeError. However, - issubclass(C, T) is true for any class C, and issubclass(str, A) - and issubclass(bytes, A) are true, and issubclass(int, A) is - false. (TODO: Why is this needed? This may change. See #136.) + At runtime, isinstance(x, T) and issubclass(C, T) will raise TypeError. - Type variables may be marked covariant or contravariant by passing - covariant=True or contravariant=True. See PEP 484 for more - details. By default type variables are invariant. + Type variables defined with covariant=True or contravariant=True + can be used do declare covariant or contravariant generic types. + See PEP 484 for more details. By default generic types are invariant + in all type variables. Type variables can be introspected. e.g.: @@ -401,11 +447,16 @@ class TypeVar(TypingMeta, metaclass=TypingMeta, _root=True): A.__constraints__ == (str, bytes) """ - def __new__(cls, name, *constraints, bound=None, + __slots__ = ('__name__', '__bound__', '__constraints__', + '__covariant__', '__contravariant__') + + def __init__(self, name, *constraints, bound=None, covariant=False, contravariant=False): - self = super().__new__(cls, name, (Final,), {}, _root=True) + super().__init__(name, *constraints, bound=bound, + covariant=covariant, contravariant=contravariant) + self.__name__ = name if covariant and contravariant: - raise ValueError("Bivariant type variables are not supported.") + raise ValueError("Bivariant types are not supported.") self.__covariant__ = bool(covariant) self.__contravariant__ = bool(contravariant) if constraints and bound is not None: @@ -418,7 +469,6 @@ class TypeVar(TypingMeta, metaclass=TypingMeta, _root=True): self.__bound__ = _type_check(bound, "Bound must be a type.") else: self.__bound__ = None - return self def _get_type_vars(self, tvars): if self not in tvars: @@ -437,16 +487,7 @@ class TypeVar(TypingMeta, metaclass=TypingMeta, _root=True): raise TypeError("Type variables cannot be used with isinstance().") def __subclasscheck__(self, cls): - # TODO: Make this raise TypeError too? - if cls is self: - return True - if cls is Any: - return True - if self.__bound__ is not None: - return issubclass(cls, self.__bound__) - if self.__constraints__: - return any(issubclass(cls, c) for c in self.__constraints__) - return True + raise TypeError("Type variables cannot be used with issubclass().") # Some unconstrained type variables. These are used by the container types. @@ -464,124 +505,129 @@ T_contra = TypeVar('T_contra', contravariant=True) # Ditto contravariant. AnyStr = TypeVar('AnyStr', bytes, str) -class UnionMeta(TypingMeta): - """Metaclass for Union.""" - - def __new__(cls, name, bases, namespace, parameters=None, _root=False): - if parameters is None: - return super().__new__(cls, name, bases, namespace, _root=_root) - if not isinstance(parameters, tuple): - raise TypeError("Expected parameters=") - # Flatten out Union[Union[...], ...] and type-check non-Union args. - params = [] - msg = "Union[arg, ...]: each arg must be a type." - for p in parameters: - if isinstance(p, UnionMeta): - params.extend(p.__union_params__) - else: - params.append(_type_check(p, msg)) - # Weed out strict duplicates, preserving the first of each occurrence. - all_params = set(params) - if len(all_params) < len(params): - new_params = [] - for t in params: - if t in all_params: - new_params.append(t) - all_params.remove(t) - params = new_params - assert not all_params, all_params - # Weed out subclasses. - # E.g. Union[int, Employee, Manager] == Union[int, Employee]. - # If Any or object is present it will be the sole survivor. - # If both Any and object are present, Any wins. - # Never discard type variables, except against Any. - # (In particular, Union[str, AnyStr] != AnyStr.) - all_params = set(params) - for t1 in params: - if t1 is Any: - return Any - if isinstance(t1, TypeVar): - continue - if isinstance(t1, _TypeAlias): - # _TypeAlias is not a real class. - continue - if not isinstance(t1, type): - assert callable(t1) # A callable might sneak through. - continue - if any(isinstance(t2, type) and issubclass(t1, t2) - for t2 in all_params - {t1} if not isinstance(t2, TypeVar)): - all_params.remove(t1) - # It's not a union if there's only one type left. - if len(all_params) == 1: - return all_params.pop() - # Create a new class with these params. - self = super().__new__(cls, name, bases, {}, _root=True) - self.__union_params__ = tuple(t for t in params if t in all_params) - self.__union_set_params__ = frozenset(self.__union_params__) - return self - - def _eval_type(self, globalns, localns): - p = tuple(_eval_type(t, globalns, localns) - for t in self.__union_params__) - if p == self.__union_params__: - return self - else: - return self.__class__(self.__name__, self.__bases__, {}, - p, _root=True) - - def _get_type_vars(self, tvars): - if self.__union_params__: - _get_type_vars(self.__union_params__, tvars) +def _replace_arg(arg, tvars, args): + """An internal helper function: replace arg if it is a type variable + found in tvars with corresponding substitution from args or + with corresponding substitution sub-tree if arg is a generic type. + """ - def __repr__(self): - r = super().__repr__() - if self.__union_params__: - r += '[%s]' % (', '.join(_type_repr(t) - for t in self.__union_params__)) - return r + if tvars is None: + tvars = [] + if hasattr(arg, '_subs_tree'): + return arg._subs_tree(tvars, args) + if isinstance(arg, TypeVar): + for i, tvar in enumerate(tvars): + if arg == tvar: + return args[i] + return arg - def __getitem__(self, parameters): - if self.__union_params__ is not None: - raise TypeError( - "Cannot subscript an existing Union. Use Union[u, t] instead.") - if parameters == (): - raise TypeError("Cannot take a Union of no types.") - if not isinstance(parameters, tuple): - parameters = (parameters,) - return self.__class__(self.__name__, self.__bases__, - dict(self.__dict__), parameters, _root=True) - def __eq__(self, other): - if not isinstance(other, UnionMeta): - return NotImplemented - return self.__union_set_params__ == other.__union_set_params__ +def _subs_tree(cls, tvars=None, args=None): + """An internal helper function: calculate substitution tree + for generic cls after replacing its type parameters with + substitutions in tvars -> args (if any). + Repeat the same following __origin__'s. - def __hash__(self): - return hash(self.__union_set_params__) + Return a list of arguments with all possible substitutions + performed. Arguments that are generic classes themselves are represented + as tuples (so that no new classes are created by this function). + For example: _subs_tree(List[Tuple[int, T]][str]) == [(Tuple, int, str)] + """ - def __instancecheck__(self, obj): - raise TypeError("Unions cannot be used with isinstance().") + if cls.__origin__ is None: + return cls + # Make of chain of origins (i.e. cls -> cls.__origin__) + current = cls.__origin__ + orig_chain = [] + while current.__origin__ is not None: + orig_chain.append(current) + current = current.__origin__ + # Replace type variables in __args__ if asked ... + tree_args = [] + for arg in cls.__args__: + tree_args.append(_replace_arg(arg, tvars, args)) + # ... then continue replacing down the origin chain. + for ocls in orig_chain: + new_tree_args = [] + for i, arg in enumerate(ocls.__args__): + new_tree_args.append(_replace_arg(arg, ocls.__parameters__, tree_args)) + tree_args = new_tree_args + return tree_args + + +def _remove_dups_flatten(parameters): + """An internal helper for Union creation and substitution: flatten Union's + among parameters, then remove duplicates and strict subclasses. + """ - def __subclasscheck__(self, cls): - if cls is Any: - return True - if self.__union_params__ is None: - return isinstance(cls, UnionMeta) - elif isinstance(cls, UnionMeta): - if cls.__union_params__ is None: - return False - return all(issubclass(c, self) for c in (cls.__union_params__)) - elif isinstance(cls, TypeVar): - if cls in self.__union_params__: - return True - if cls.__constraints__: - return issubclass(Union[cls.__constraints__], self) - return False + # Flatten out Union[Union[...], ...]. + params = [] + for p in parameters: + if isinstance(p, _Union) and p.__origin__ is Union: + params.extend(p.__args__) + elif isinstance(p, tuple) and len(p) > 0 and p[0] is Union: + params.extend(p[1:]) else: - return any(issubclass(cls, t) for t in self.__union_params__) + params.append(p) + # Weed out strict duplicates, preserving the first of each occurrence. + all_params = set(params) + if len(all_params) < len(params): + new_params = [] + for t in params: + if t in all_params: + new_params.append(t) + all_params.remove(t) + params = new_params + assert not all_params, all_params + # Weed out subclasses. + # E.g. Union[int, Employee, Manager] == Union[int, Employee]. + # If object is present it will be sole survivor among proper classes. + # Never discard type variables. + # (In particular, Union[str, AnyStr] != AnyStr.) + all_params = set(params) + for t1 in params: + if not isinstance(t1, type): + continue + if any(isinstance(t2, type) and issubclass(t1, t2) + for t2 in all_params - {t1} + if not (isinstance(t2, GenericMeta) and + t2.__origin__ is not None)): + all_params.remove(t1) + return tuple(t for t in params if t in all_params) + + +def _check_generic(cls, parameters): + # Check correct count for parameters of a generic cls (internal helper). + if not cls.__parameters__: + raise TypeError("%s is not a generic class" % repr(cls)) + alen = len(parameters) + elen = len(cls.__parameters__) + if alen != elen: + raise TypeError("Too %s parameters for %s; actual %s, expected %s" % + ("many" if alen > elen else "few", repr(cls), alen, elen)) + + +_cleanups = [] + + +def _tp_cache(func): + """Internal wrapper caching __getitem__ of generic types with a fallback to + original function for non-hashable arguments. + """ + + cached = functools.lru_cache()(func) + _cleanups.append(cached.cache_clear) + @functools.wraps(func) + def inner(*args, **kwds): + try: + return cached(*args, **kwds) + except TypeError: + pass # All real errors (not unhashable args) are raised below. + return func(*args, **kwds) + return inner -class Union(Final, metaclass=UnionMeta, _root=True): +class _Union(_FinalTypingBase, _root=True): """Union type; Union[X, Y] means either X or Y. To define a union, use e.g. Union[int, str]. Details: @@ -616,256 +662,136 @@ class Union(Final, metaclass=UnionMeta, _root=True): Union[Manager, int, Employee] == Union[int, Employee] Union[Employee, Manager] == Employee - - Corollary: if Any is present it is the sole survivor, e.g.:: - - Union[int, Any] == Any - - Similar for object:: Union[int, object] == object - - To cut a tie: Union[object, Any] == Union[Any, object] == Any. - - You cannot subclass or instantiate a union. - - You cannot write Union[X][Y] (what would it mean?). - - You can use Optional[X] as a shorthand for Union[X, None]. """ - # Unsubscripted Union type has params set to None. - __union_params__ = None - __union_set_params__ = None - - -class OptionalMeta(TypingMeta): - """Metaclass for Optional.""" - - def __new__(cls, name, bases, namespace, _root=False): - return super().__new__(cls, name, bases, namespace, _root=_root) - - def __getitem__(self, arg): - arg = _type_check(arg, "Optional[t] requires a single type.") - return Union[arg, type(None)] - - -class Optional(Final, metaclass=OptionalMeta, _root=True): - """Optional type. - - Optional[X] is equivalent to Union[X, type(None)]. - """ - - __slots__ = () - + __slots__ = ('__parameters__', '__args__', '__origin__', '__tree_hash__') -class TupleMeta(TypingMeta): - """Metaclass for Tuple.""" - - def __new__(cls, name, bases, namespace, parameters=None, - use_ellipsis=False, _root=False): - self = super().__new__(cls, name, bases, namespace, _root=_root) - self.__tuple_params__ = parameters - self.__tuple_use_ellipsis__ = use_ellipsis + def __new__(cls, parameters=None, origin=None, *args, _root=False): + self = super().__new__(cls, parameters, origin, *args, _root=_root) + if origin is None: + self.__parameters__ = None + self.__args__ = None + self.__origin__ = None + self.__tree_hash__ = hash(frozenset(('Union',))) + return self + if not isinstance(parameters, tuple): + raise TypeError("Expected parameters=") + if origin is Union: + parameters = _remove_dups_flatten(parameters) + # It's not a union if there's only one type left. + if len(parameters) == 1: + return parameters[0] + self.__parameters__ = _type_vars(parameters) + self.__args__ = parameters + self.__origin__ = origin + # Pre-calculate the __hash__ on instantiation. + # This improves speed for complex substitutions. + subs_tree = self._subs_tree() + if isinstance(subs_tree, tuple): + self.__tree_hash__ = hash(frozenset(subs_tree)) + else: + self.__tree_hash__ = hash(subs_tree) return self - def _get_type_vars(self, tvars): - if self.__tuple_params__: - _get_type_vars(self.__tuple_params__, tvars) - def _eval_type(self, globalns, localns): - tp = self.__tuple_params__ - if tp is None: + if self.__args__ is None: return self - p = tuple(_eval_type(t, globalns, localns) for t in tp) - if p == self.__tuple_params__: + ev_args = tuple(_eval_type(t, globalns, localns) for t in self.__args__) + ev_origin = _eval_type(self.__origin__, globalns, localns) + if ev_args == self.__args__ and ev_origin == self.__origin__: + # Everything is already evaluated. return self - else: - return self.__class__(self.__name__, self.__bases__, {}, - p, _root=True) + return self.__class__(ev_args, ev_origin, _root=True) + + def _get_type_vars(self, tvars): + if self.__origin__ and self.__parameters__: + _get_type_vars(self.__parameters__, tvars) def __repr__(self): - r = super().__repr__() - if self.__tuple_params__ is not None: - params = [_type_repr(p) for p in self.__tuple_params__] - if self.__tuple_use_ellipsis__: - params.append('...') - if not params: - params.append('()') - r += '[%s]' % ( - ', '.join(params)) - return r + if self.__origin__ is None: + return super().__repr__() + tree = self._subs_tree() + if not isinstance(tree, tuple): + return repr(tree) + return tree[0]._tree_repr(tree) + + def _tree_repr(self, tree): + arg_list = [] + for arg in tree[1:]: + if not isinstance(arg, tuple): + arg_list.append(_type_repr(arg)) + else: + arg_list.append(arg[0]._tree_repr(arg)) + return super().__repr__() + '[%s]' % ', '.join(arg_list) + @_tp_cache def __getitem__(self, parameters): - if self.__tuple_params__ is not None: - raise TypeError("Cannot re-parameterize %r" % (self,)) + if parameters == (): + raise TypeError("Cannot take a Union of no types.") if not isinstance(parameters, tuple): parameters = (parameters,) - if len(parameters) == 2 and parameters[1] == Ellipsis: - parameters = parameters[:1] - use_ellipsis = True - msg = "Tuple[t, ...]: t must be a type." + if self.__origin__ is None: + msg = "Union[arg, ...]: each arg must be a type." else: - use_ellipsis = False - msg = "Tuple[t0, t1, ...]: each t must be a type." + msg = "Parameters to generic types must be types." parameters = tuple(_type_check(p, msg) for p in parameters) - return self.__class__(self.__name__, self.__bases__, - dict(self.__dict__), parameters, - use_ellipsis=use_ellipsis, _root=True) + if self is not Union: + _check_generic(self, parameters) + return self.__class__(parameters, origin=self, _root=True) + + def _subs_tree(self, tvars=None, args=None): + if self is Union: + return Union # Nothing to substitute + tree_args = _subs_tree(self, tvars, args) + tree_args = _remove_dups_flatten(tree_args) + if len(tree_args) == 1: + return tree_args[0] # Union of a single type is that type + return (Union,) + tree_args def __eq__(self, other): - if not isinstance(other, TupleMeta): - return NotImplemented - return (self.__tuple_params__ == other.__tuple_params__ and - self.__tuple_use_ellipsis__ == other.__tuple_use_ellipsis__) + if not isinstance(other, _Union): + return self._subs_tree() == other + return self.__tree_hash__ == other.__tree_hash__ def __hash__(self): - return hash(self.__tuple_params__) + return self.__tree_hash__ def __instancecheck__(self, obj): - raise TypeError("Tuples cannot be used with isinstance().") + raise TypeError("Unions cannot be used with isinstance().") def __subclasscheck__(self, cls): - if cls is Any: - return True - if not isinstance(cls, type): - return super().__subclasscheck__(cls) # To TypeError. - if issubclass(cls, tuple): - return True # Special case. - if not isinstance(cls, TupleMeta): - return super().__subclasscheck__(cls) # False. - if self.__tuple_params__ is None: - return True - if cls.__tuple_params__ is None: - return False # ??? - if cls.__tuple_use_ellipsis__ != self.__tuple_use_ellipsis__: - return False - # Covariance. - return (len(self.__tuple_params__) == len(cls.__tuple_params__) and - all(issubclass(x, p) - for x, p in zip(cls.__tuple_params__, - self.__tuple_params__))) - - -class Tuple(Final, metaclass=TupleMeta, _root=True): - """Tuple type; Tuple[X, Y] is the cross-product type of X and Y. - - Example: Tuple[T1, T2] is a tuple of two elements corresponding - to type variables T1 and T2. Tuple[int, float, str] is a tuple - of an int, a float and a string. - - To specify a variable-length tuple of homogeneous type, use Sequence[T]. - """ - - __slots__ = () - - -class CallableMeta(TypingMeta): - """Metaclass for Callable.""" + raise TypeError("Unions cannot be used with issubclass().") - def __new__(cls, name, bases, namespace, _root=False, - args=None, result=None): - if args is None and result is None: - pass # Must be 'class Callable'. - else: - if args is not Ellipsis: - if not isinstance(args, list): - raise TypeError("Callable[args, result]: " - "args must be a list." - " Got %.100r." % (args,)) - msg = "Callable[[arg, ...], result]: each arg must be a type." - args = tuple(_type_check(arg, msg) for arg in args) - msg = "Callable[args, result]: result must be a type." - result = _type_check(result, msg) - self = super().__new__(cls, name, bases, namespace, _root=_root) - self.__args__ = args - self.__result__ = result - return self - def _get_type_vars(self, tvars): - if self.__args__: - _get_type_vars(self.__args__, tvars) +Union = _Union(_root=True) - def _eval_type(self, globalns, localns): - if self.__args__ is None and self.__result__ is None: - return self - if self.__args__ is Ellipsis: - args = self.__args__ - else: - args = [_eval_type(t, globalns, localns) for t in self.__args__] - result = _eval_type(self.__result__, globalns, localns) - if args == self.__args__ and result == self.__result__: - return self - else: - return self.__class__(self.__name__, self.__bases__, {}, - args=args, result=result, _root=True) - - def __repr__(self): - r = super().__repr__() - if self.__args__ is not None or self.__result__ is not None: - if self.__args__ is Ellipsis: - args_r = '...' - else: - args_r = '[%s]' % ', '.join(_type_repr(t) - for t in self.__args__) - r += '[%s, %s]' % (args_r, _type_repr(self.__result__)) - return r - def __getitem__(self, parameters): - if self.__args__ is not None or self.__result__ is not None: - raise TypeError("This Callable type is already parameterized.") - if not isinstance(parameters, tuple) or len(parameters) != 2: - raise TypeError( - "Callable must be used as Callable[[arg, ...], result].") - args, result = parameters - return self.__class__(self.__name__, self.__bases__, - dict(self.__dict__), _root=True, - args=args, result=result) - - def __eq__(self, other): - if not isinstance(other, CallableMeta): - return NotImplemented - return (self.__args__ == other.__args__ and - self.__result__ == other.__result__) - - def __hash__(self): - return hash(self.__args__) ^ hash(self.__result__) - - def __instancecheck__(self, obj): - # For unparametrized Callable we allow this, because - # typing.Callable should be equivalent to - # collections.abc.Callable. - if self.__args__ is None and self.__result__ is None: - return isinstance(obj, collections_abc.Callable) - else: - raise TypeError("Callable[] cannot be used with isinstance().") - - def __subclasscheck__(self, cls): - if cls is Any: - return True - if not isinstance(cls, CallableMeta): - return super().__subclasscheck__(cls) - if self.__args__ is None and self.__result__ is None: - return True - # We're not doing covariance or contravariance -- this is *invariance*. - return self == cls +class _Optional(_FinalTypingBase, _root=True): + """Optional type. + Optional[X] is equivalent to Union[X, None]. + """ -class Callable(Final, metaclass=CallableMeta, _root=True): - """Callable type; Callable[[int], str] is a function of (int) -> str. + __slots__ = () - The subscription syntax must always be used with exactly two - values: the argument list and the return type. The argument list - must be a list of types; the return type must be a single type. + @_tp_cache + def __getitem__(self, arg): + arg = _type_check(arg, "Optional[t] requires a single type.") + return Union[arg, type(None)] - There is no syntax to indicate optional or keyword arguments, - such function types are rarely used as callback types. - """ - __slots__ = () +Optional = _Optional(_root=True) def _gorg(a): - """Return the farthest origin of a generic class.""" + """Return the farthest origin of a generic class (internal helper).""" assert isinstance(a, GenericMeta) while a.__origin__ is not None: a = a.__origin__ @@ -873,10 +799,10 @@ def _gorg(a): def _geqv(a, b): - """Return whether two generic classes are equivalent. + """Return whether two generic classes are equivalent (internal helper). The intention is to consider generic class X and any of its - parameterized forms (X[T], X[int], etc.) as equivalent. + parameterized forms (X[T], X[int], etc.) as equivalent. However, X is not equivalent to a subclass of X. @@ -901,13 +827,65 @@ def _next_in_mro(cls): return next_in_mro +def _valid_for_check(cls): + """An internal helper to prohibit isinstance([1], List[str]) etc.""" + if cls is Generic: + raise TypeError("Class %r cannot be used with class " + "or instance checks" % cls) + if (cls.__origin__ is not None and + sys._getframe(3).f_globals['__name__'] not in ['abc', 'functools']): + raise TypeError("Parameterized generics cannot be used with class " + "or instance checks") + + +def _make_subclasshook(cls): + """Construct a __subclasshook__ callable that incorporates + the associated __extra__ class in subclass checks performed + against cls. + """ + if isinstance(cls.__extra__, abc.ABCMeta): + # The logic mirrors that of ABCMeta.__subclasscheck__. + # Registered classes need not be checked here because + # cls and its extra share the same _abc_registry. + def __extrahook__(subclass): + _valid_for_check(cls) + res = cls.__extra__.__subclasshook__(subclass) + if res is not NotImplemented: + return res + if cls.__extra__ in subclass.__mro__: + return True + for scls in cls.__extra__.__subclasses__(): + if isinstance(scls, GenericMeta): + continue + if issubclass(subclass, scls): + return True + return NotImplemented + else: + # For non-ABC extras we'll just call issubclass(). + def __extrahook__(subclass): + _valid_for_check(cls) + if cls.__extra__ and issubclass(subclass, cls.__extra__): + return True + return NotImplemented + return __extrahook__ + + +def _no_slots_copy(dct): + """Internal helper: copy class __dict__ and clean slots class variables. + (They will be re-created if necessary by normal class machinery.) + """ + dict_copy = dict(dct) + if '__slots__' in dict_copy: + for slot in dict_copy['__slots__']: + dict_copy.pop(slot, None) + return dict_copy + + class GenericMeta(TypingMeta, abc.ABCMeta): """Metaclass for generic types.""" def __new__(cls, name, bases, namespace, - tvars=None, args=None, origin=None, extra=None): - self = super().__new__(cls, name, bases, namespace, _root=True) - + tvars=None, args=None, origin=None, extra=None, orig_bases=None): if tvars is not None: # Called from __getitem__() below. assert origin is not None @@ -948,48 +926,102 @@ class GenericMeta(TypingMeta, abc.ABCMeta): ", ".join(str(g) for g in gvars))) tvars = gvars + initial_bases = bases + if extra is not None and type(extra) is abc.ABCMeta and extra not in bases: + bases = (extra,) + bases + bases = tuple(_gorg(b) if isinstance(b, GenericMeta) else b for b in bases) + + # remove bare Generic from bases if there are other generic bases + if any(isinstance(b, GenericMeta) and b is not Generic for b in bases): + bases = tuple(b for b in bases if b is not Generic) + self = super().__new__(cls, name, bases, namespace, _root=True) + self.__parameters__ = tvars - self.__args__ = args + # Be prepared that GenericMeta will be subclassed by TupleMeta + # and CallableMeta, those two allow ..., (), or [] in __args___. + self.__args__ = tuple(... if a is _TypingEllipsis else + () if a is _TypingEmpty else + a for a in args) if args else None self.__origin__ = origin self.__extra__ = extra # Speed hack (https://github.com/python/typing/issues/196). self.__next_in_mro__ = _next_in_mro(self) + # Preserve base classes on subclassing (__bases__ are type erased now). + if orig_bases is None: + self.__orig_bases__ = initial_bases + + # This allows unparameterized generic collections to be used + # with issubclass() and isinstance() in the same way as their + # collections.abc counterparts (e.g., isinstance([], Iterable)). + if ('__subclasshook__' not in namespace and extra # allow overriding + or hasattr(self.__subclasshook__, '__name__') and + self.__subclasshook__.__name__ == '__extrahook__'): + self.__subclasshook__ = _make_subclasshook(self) + if isinstance(extra, abc.ABCMeta): + self._abc_registry = extra._abc_registry + + if origin and hasattr(origin, '__qualname__'): # Fix for Python 3.2. + self.__qualname__ = origin.__qualname__ + self.__tree_hash__ = hash(self._subs_tree()) if origin else hash((self.__name__,)) return self def _get_type_vars(self, tvars): if self.__origin__ and self.__parameters__: _get_type_vars(self.__parameters__, tvars) + def _eval_type(self, globalns, localns): + ev_origin = (self.__origin__._eval_type(globalns, localns) + if self.__origin__ else None) + ev_args = tuple(_eval_type(a, globalns, localns) for a + in self.__args__) if self.__args__ else None + if ev_origin == self.__origin__ and ev_args == self.__args__: + return self + return self.__class__(self.__name__, + self.__bases__, + _no_slots_copy(self.__dict__), + tvars=_type_vars(ev_args) if ev_args else None, + args=ev_args, + origin=ev_origin, + extra=self.__extra__, + orig_bases=self.__orig_bases__) + def __repr__(self): - if self.__origin__ is not None: - r = repr(self.__origin__) - else: - r = super().__repr__() - if self.__args__: - r += '[%s]' % ( - ', '.join(_type_repr(p) for p in self.__args__)) - if self.__parameters__: - r += '<%s>' % ( - ', '.join(_type_repr(p) for p in self.__parameters__)) - return r + if self.__origin__ is None: + return super().__repr__() + return self._tree_repr(self._subs_tree()) + + def _tree_repr(self, tree): + arg_list = [] + for arg in tree[1:]: + if arg == (): + arg_list.append('()') + elif not isinstance(arg, tuple): + arg_list.append(_type_repr(arg)) + else: + arg_list.append(arg[0]._tree_repr(arg)) + return super().__repr__() + '[%s]' % ', '.join(arg_list) + + def _subs_tree(self, tvars=None, args=None): + if self.__origin__ is None: + return self + tree_args = _subs_tree(self, tvars, args) + return (_gorg(self),) + tuple(tree_args) def __eq__(self, other): if not isinstance(other, GenericMeta): return NotImplemented - if self.__origin__ is not None: - return (self.__origin__ is other.__origin__ and - self.__args__ == other.__args__ and - self.__parameters__ == other.__parameters__) - else: + if self.__origin__ is None or other.__origin__ is None: return self is other + return self.__tree_hash__ == other.__tree_hash__ def __hash__(self): - return hash((self.__name__, self.__parameters__)) + return self.__tree_hash__ + @_tp_cache def __getitem__(self, params): if not isinstance(params, tuple): params = (params,) - if not params: + if not params and not _gorg(self) is Tuple: raise TypeError( "Parameter list to %s[...] cannot be empty" % _qualname(self)) msg = "Parameters to generic types must be types." @@ -1003,34 +1035,31 @@ class GenericMeta(TypingMeta, abc.ABCMeta): raise TypeError( "Parameters to Generic[...] must all be unique") tvars = params - args = None + args = params + elif self in (Tuple, Callable): + tvars = _type_vars(params) + args = params elif self is _Protocol: # _Protocol is internal, don't check anything. tvars = params - args = None + args = params elif self.__origin__ in (Generic, _Protocol): # Can't subscript Generic[...] or _Protocol[...]. raise TypeError("Cannot subscript already-subscripted %s" % repr(self)) else: # Subscripting a regular Generic subclass. - if not self.__parameters__: - raise TypeError("%s is not a generic class" % repr(self)) - alen = len(params) - elen = len(self.__parameters__) - if alen != elen: - raise TypeError( - "Too %s parameters for %s; actual %s, expected %s" % - ("many" if alen > elen else "few", repr(self), alen, elen)) + _check_generic(self, params) tvars = _type_vars(params) args = params return self.__class__(self.__name__, - (self,) + self.__bases__, - dict(self.__dict__), + self.__bases__, + _no_slots_copy(self.__dict__), tvars=tvars, args=args, origin=self, - extra=self.__extra__) + extra=self.__extra__, + orig_bases=self.__orig_bases__) def __instancecheck__(self, instance): # Since we extend ABC.__subclasscheck__ and @@ -1038,58 +1067,40 @@ class GenericMeta(TypingMeta, abc.ABCMeta): # latter, we must extend __instancecheck__ too. For simplicity # we just skip the cache check -- instance checks for generic # classes are supposed to be rare anyways. - return self.__subclasscheck__(instance.__class__) + return issubclass(instance.__class__, self) - def __subclasscheck__(self, cls): - if cls is Any: - return True - if isinstance(cls, GenericMeta): - # For a class C(Generic[T]) where T is co-variant, - # C[X] is a subclass of C[Y] iff X is a subclass of Y. - origin = self.__origin__ - if origin is not None and origin is cls.__origin__: - assert len(self.__args__) == len(origin.__parameters__) - assert len(cls.__args__) == len(origin.__parameters__) - for p_self, p_cls, p_origin in zip(self.__args__, - cls.__args__, - origin.__parameters__): - if isinstance(p_origin, TypeVar): - if p_origin.__covariant__: - # Covariant -- p_cls must be a subclass of p_self. - if not issubclass(p_cls, p_self): - break - elif p_origin.__contravariant__: - # Contravariant. I think it's the opposite. :-) - if not issubclass(p_self, p_cls): - break - else: - # Invariant -- p_cls and p_self must equal. - if p_self != p_cls: - break - else: - # If the origin's parameter is not a typevar, - # insist on invariance. - if p_self != p_cls: - break - else: - return True - # If we break out of the loop, the superclass gets a chance. - if super().__subclasscheck__(cls): - return True - if self.__extra__ is None or isinstance(cls, GenericMeta): - return False - return issubclass(cls, self.__extra__) + def __copy__(self): + return self.__class__(self.__name__, self.__bases__, + _no_slots_copy(self.__dict__), + self.__parameters__, self.__args__, self.__origin__, + self.__extra__, self.__orig_bases__) # Prevent checks for Generic to crash when defining Generic. Generic = None +def _generic_new(base_cls, cls, *args, **kwds): + # Assure type is erased on instantiation, + # but attempt to store it in __orig_class__ + if cls.__origin__ is None: + return base_cls.__new__(cls) + else: + origin = _gorg(cls) + obj = base_cls.__new__(origin) + try: + obj.__orig_class__ = cls + except AttributeError: + pass + obj.__init__(*args, **kwds) + return obj + + class Generic(metaclass=GenericMeta): """Abstract base class for generic types. - A generic type is typically declared by inheriting from an - instantiation of this class with one or more type variables. + A generic type is typically declared by inheriting from + this class parameterized with one or more type variables. For example, a generic mapping type might be defined as:: class Mapping(Generic[KT, VT]): @@ -1109,13 +1120,208 @@ class Generic(metaclass=GenericMeta): __slots__ = () def __new__(cls, *args, **kwds): - if cls.__origin__ is None: - return cls.__next_in_mro__.__new__(cls) + if _geqv(cls, Generic): + raise TypeError("Type Generic cannot be instantiated; " + "it can be used only as a base class") + return _generic_new(cls.__next_in_mro__, cls, *args, **kwds) + + +class _TypingEmpty: + """Internal placeholder for () or []. Used by TupleMeta and CallableMeta + to allow empty list/tuple in specific places, without allowing them + to sneak in where prohibited. + """ + + +class _TypingEllipsis: + """Internal placeholder for ... (ellipsis).""" + + +class TupleMeta(GenericMeta): + """Metaclass for Tuple (internal).""" + + @_tp_cache + def __getitem__(self, parameters): + if self.__origin__ is not None or not _geqv(self, Tuple): + # Normal generic rules apply if this is not the first subscription + # or a subscription of a subclass. + return super().__getitem__(parameters) + if parameters == (): + return super().__getitem__((_TypingEmpty,)) + if not isinstance(parameters, tuple): + parameters = (parameters,) + if len(parameters) == 2 and parameters[1] is ...: + msg = "Tuple[t, ...]: t must be a type." + p = _type_check(parameters[0], msg) + return super().__getitem__((p, _TypingEllipsis)) + msg = "Tuple[t0, t1, ...]: each t must be a type." + parameters = tuple(_type_check(p, msg) for p in parameters) + return super().__getitem__(parameters) + + def __instancecheck__(self, obj): + if self.__args__ == None: + return isinstance(obj, tuple) + raise TypeError("Parameterized Tuple cannot be used " + "with isinstance().") + + def __subclasscheck__(self, cls): + if self.__args__ == None: + return issubclass(cls, tuple) + raise TypeError("Parameterized Tuple cannot be used " + "with issubclass().") + + +class Tuple(tuple, extra=tuple, metaclass=TupleMeta): + """Tuple type; Tuple[X, Y] is the cross-product type of X and Y. + + Example: Tuple[T1, T2] is a tuple of two elements corresponding + to type variables T1 and T2. Tuple[int, float, str] is a tuple + of an int, a float and a string. + + To specify a variable-length tuple of homogeneous type, use Tuple[T, ...]. + """ + + __slots__ = () + + def __new__(cls, *args, **kwds): + if _geqv(cls, Tuple): + raise TypeError("Type Tuple cannot be instantiated; " + "use tuple() instead") + return _generic_new(tuple, cls, *args, **kwds) + + +class CallableMeta(GenericMeta): + """Metaclass for Callable (internal).""" + + def __repr__(self): + if self.__origin__ is None: + return super().__repr__() + return self._tree_repr(self._subs_tree()) + + def _tree_repr(self, tree): + if _gorg(self) is not Callable: + return super()._tree_repr(tree) + # For actual Callable (not its subclass) we override + # super()._tree_repr() for nice formatting. + arg_list = [] + for arg in tree[1:]: + if not isinstance(arg, tuple): + arg_list.append(_type_repr(arg)) + else: + arg_list.append(arg[0]._tree_repr(arg)) + if arg_list[0] == '...': + return repr(tree[0]) + '[..., %s]' % arg_list[1] + return (repr(tree[0]) + + '[[%s], %s]' % (', '.join(arg_list[:-1]), arg_list[-1])) + + def __getitem__(self, parameters): + """A thin wrapper around __getitem_inner__ to provide the latter + with hashable arguments to improve speed. + """ + + if self.__origin__ is not None or not _geqv(self, Callable): + return super().__getitem__(parameters) + if not isinstance(parameters, tuple) or len(parameters) != 2: + raise TypeError("Callable must be used as " + "Callable[[arg, ...], result].") + args, result = parameters + if args is Ellipsis: + parameters = (Ellipsis, result) else: - origin = _gorg(cls) - obj = cls.__next_in_mro__.__new__(origin) - obj.__init__(*args, **kwds) - return obj + if not isinstance(args, list): + raise TypeError("Callable[args, result]: args must be a list." + " Got %.100r." % (args,)) + parameters = (tuple(args), result) + return self.__getitem_inner__(parameters) + + @_tp_cache + def __getitem_inner__(self, parameters): + args, result = parameters + msg = "Callable[args, result]: result must be a type." + result = _type_check(result, msg) + if args is Ellipsis: + return super().__getitem__((_TypingEllipsis, result)) + msg = "Callable[[arg, ...], result]: each arg must be a type." + args = tuple(_type_check(arg, msg) for arg in args) + parameters = args + (result,) + return super().__getitem__(parameters) + + +class Callable(extra=collections_abc.Callable, metaclass = CallableMeta): + """Callable type; Callable[[int], str] is a function of (int) -> str. + + The subscription syntax must always be used with exactly two + values: the argument list and the return type. The argument list + must be a list of types or ellipsis; the return type must be a single type. + + There is no syntax to indicate optional or keyword arguments, + such function types are rarely used as callback types. + """ + + __slots__ = () + + def __new__(cls, *args, **kwds): + if _geqv(cls, Callable): + raise TypeError("Type Callable cannot be instantiated; " + "use a non-abstract subclass instead") + return _generic_new(cls.__next_in_mro__, cls, *args, **kwds) + + +class _ClassVar(_FinalTypingBase, _root=True): + """Special type construct to mark class variables. + + An annotation wrapped in ClassVar indicates that a given + attribute is intended to be used as a class variable and + should not be set on instances of that class. Usage:: + + class Starship: + stats: ClassVar[Dict[str, int]] = {} # class variable + damage: int = 10 # instance variable + + ClassVar accepts only types and cannot be further subscribed. + + Note that ClassVar is not a class itself, and should not + be used with isinstance() or issubclass(). + """ + + __slots__ = ('__type__',) + + def __init__(self, tp=None, **kwds): + self.__type__ = tp + + def __getitem__(self, item): + cls = type(self) + if self.__type__ is None: + return cls(_type_check(item, + '{} accepts only single type.'.format(cls.__name__[1:])), + _root=True) + raise TypeError('{} cannot be further subscripted' + .format(cls.__name__[1:])) + + def _eval_type(self, globalns, localns): + new_tp = _eval_type(self.__type__, globalns, localns) + if new_tp == self.__type__: + return self + return type(self)(new_tp, _root=True) + + def __repr__(self): + r = super().__repr__() + if self.__type__ is not None: + r += '[{}]'.format(_type_repr(self.__type__)) + return r + + def __hash__(self): + return hash((type(self).__name__, self.__type__)) + + def __eq__(self, other): + if not isinstance(other, _ClassVar): + return NotImplemented + if self.__type__ is not None: + return self.__type__ == other.__type__ + return self is other + + +ClassVar = _ClassVar(_root=True) def cast(typ, val): @@ -1131,7 +1337,11 @@ def cast(typ, val): def _get_defaults(func): """Internal helper to extract the default arguments, by name.""" - code = func.__code__ + try: + code = func.__code__ + except AttributeError: + # Some built-in functions don't have __code__, __defaults__, etc. + return {} pos_count = code.co_argcount arg_names = code.co_varnames arg_names = arg_names[:pos_count] @@ -1146,12 +1356,20 @@ def _get_defaults(func): def get_type_hints(obj, globalns=None, localns=None): - """Return type hints for a function or method object. + """Return type hints for an object. This is often the same as obj.__annotations__, but it handles forward references encoded as string literals, and if necessary adds Optional[t] if a default value equal to None is set. + The argument may be a module, class, method, or function. The annotations + are returned as a dictionary. For classes, annotations include also + inherited members. + + TypeError is raised if the argument is not of a type that can contain + annotations, and an empty dictionary is returned if no annotations are + present. + BEWARE -- the behavior of globalns and localns is counterintuitive (unless you are familiar with how eval() and exec() work). The search order is locals first, then globals. @@ -1166,6 +1384,7 @@ def get_type_hints(obj, globalns=None, localns=None): - If two dict arguments are passed, they specify globals and locals, respectively. """ + if getattr(obj, '__no_type_check__', None): return {} if globalns is None: @@ -1174,9 +1393,35 @@ def get_type_hints(obj, globalns=None, localns=None): localns = globalns elif localns is None: localns = globalns + # Classes require a special treatment. + if isinstance(obj, type): + hints = {} + for base in reversed(obj.__mro__): + ann = base.__dict__.get('__annotations__', {}) + for name, value in ann.items(): + if value is None: + value = type(None) + if isinstance(value, str): + value = _ForwardRef(value) + value = _eval_type(value, globalns, localns) + hints[name] = value + return hints + hints = getattr(obj, '__annotations__', None) + if hints is None: + # Return empty annotations for something that _could_ have them. + if (isinstance(obj, types.FunctionType) or + isinstance(obj, types.BuiltinFunctionType) or + isinstance(obj, types.MethodType) or + isinstance(obj, types.ModuleType)): + return {} + else: + raise TypeError('{!r} is not a module, class, method, ' + 'or function.'.format(obj)) defaults = _get_defaults(obj) - hints = dict(obj.__annotations__) + hints = dict(hints) for name, value in hints.items(): + if value is None: + value = type(None) if isinstance(value, str): value = _ForwardRef(value) value = _eval_type(value, globalns, localns) @@ -1190,17 +1435,25 @@ def no_type_check(arg): """Decorator to indicate that annotations are not type hints. The argument must be a class or function; if it is a class, it - applies recursively to all methods defined in that class (but not - to methods defined in its superclasses or subclasses). + applies recursively to all methods and classes defined in that class + (but not to methods defined in its superclasses or subclasses). - This mutates the function(s) in place. + This mutates the function(s) or class(es) in place. """ if isinstance(arg, type): - for obj in arg.__dict__.values(): + arg_attrs = arg.__dict__.copy() + for attr, val in arg.__dict__.items(): + if val in arg.__bases__: + arg_attrs.pop(attr) + for obj in arg_attrs.values(): if isinstance(obj, types.FunctionType): obj.__no_type_check__ = True - else: + if isinstance(obj, type): + no_type_check(obj) + try: arg.__no_type_check__ = True + except TypeError: # built-in classes + pass return arg @@ -1266,6 +1519,8 @@ class _ProtocolMeta(GenericMeta): """ def __instancecheck__(self, obj): + if _Protocol not in self.__bases__: + return super().__instancecheck__(obj) raise TypeError("Protocols cannot be used with isinstance().") def __subclasscheck__(self, cls): @@ -1304,6 +1559,8 @@ class _ProtocolMeta(GenericMeta): else: if (not attr.startswith('_abc_') and attr != '__abstractmethods__' and + attr != '__annotations__' and + attr != '__weakref__' and attr != '_is_protocol' and attr != '__dict__' and attr != '__args__' and @@ -1312,7 +1569,9 @@ class _ProtocolMeta(GenericMeta): attr != '__next_in_mro__' and attr != '__parameters__' and attr != '__origin__' and + attr != '__orig_bases__' and attr != '__extra__' and + attr != '__tree_hash__' and attr != '__module__'): attrs.add(attr) @@ -1322,7 +1581,7 @@ class _ProtocolMeta(GenericMeta): class _Protocol(metaclass=_ProtocolMeta): """Internal base class for protocol classes. - This implements a simple-minded structural isinstance check + This implements a simple-minded structural issubclass check (similar but more general than the one-offs in collections.abc such as Hashable). """ @@ -1341,8 +1600,16 @@ Hashable = collections_abc.Hashable # Not generic. if hasattr(collections_abc, 'Awaitable'): class Awaitable(Generic[T_co], extra=collections_abc.Awaitable): __slots__ = () -else: - Awaitable = None + + __all__.append('Awaitable') + + +if hasattr(collections_abc, 'Coroutine'): + class Coroutine(Awaitable[V_co], Generic[T_co, T_contra, V_co], + extra=collections_abc.Coroutine): + __slots__ = () + + __all__.append('Coroutine') if hasattr(collections_abc, 'AsyncIterable'): @@ -1354,9 +1621,8 @@ if hasattr(collections_abc, 'AsyncIterable'): extra=collections_abc.AsyncIterator): __slots__ = () -else: - AsyncIterable = None - AsyncIterator = None + __all__.append('AsyncIterable') + __all__.append('AsyncIterator') class Iterable(Generic[T_co], extra=collections_abc.Iterable): @@ -1434,109 +1700,117 @@ class Container(Generic[T_co], extra=collections_abc.Container): __slots__ = () -# Callable was defined earlier. +if hasattr(collections_abc, 'Collection'): + class Collection(Sized, Iterable[T_co], Container[T_co], + extra=collections_abc.Collection): + __slots__ = () + __all__.append('Collection') -class AbstractSet(Sized, Iterable[T_co], Container[T_co], - extra=collections_abc.Set): - pass + +# Callable was defined earlier. + +if hasattr(collections_abc, 'Collection'): + class AbstractSet(Collection[T_co], + extra=collections_abc.Set): + __slots__ = () +else: + class AbstractSet(Sized, Iterable[T_co], Container[T_co], + extra=collections_abc.Set): + __slots__ = () class MutableSet(AbstractSet[T], extra=collections_abc.MutableSet): - pass + __slots__ = () -# NOTE: Only the value type is covariant. -class Mapping(Sized, Iterable[KT], Container[KT], Generic[KT, VT_co], - extra=collections_abc.Mapping): - pass +# NOTE: It is only covariant in the value type. +if hasattr(collections_abc, 'Collection'): + class Mapping(Collection[KT], Generic[KT, VT_co], + extra=collections_abc.Mapping): + __slots__ = () +else: + class Mapping(Sized, Iterable[KT], Container[KT], Generic[KT, VT_co], + extra=collections_abc.Mapping): + __slots__ = () class MutableMapping(Mapping[KT, VT], extra=collections_abc.MutableMapping): - pass + __slots__ = () if hasattr(collections_abc, 'Reversible'): - class Sequence(Sized, Reversible[T_co], Container[T_co], - extra=collections_abc.Sequence): - pass + if hasattr(collections_abc, 'Collection'): + class Sequence(Reversible[T_co], Collection[T_co], + extra=collections_abc.Sequence): + __slots__ = () + else: + class Sequence(Sized, Reversible[T_co], Container[T_co], + extra=collections_abc.Sequence): + __slots__ = () else: class Sequence(Sized, Iterable[T_co], Container[T_co], extra=collections_abc.Sequence): - pass + __slots__ = () class MutableSequence(Sequence[T], extra=collections_abc.MutableSequence): - pass + __slots__ = () class ByteString(Sequence[int], extra=collections_abc.ByteString): - pass - - -ByteString.register(type(memoryview(b''))) + __slots__ = () class List(list, MutableSequence[T], extra=list): + __slots__ = () + def __new__(cls, *args, **kwds): if _geqv(cls, List): raise TypeError("Type List cannot be instantiated; " "use list() instead") - return list.__new__(cls, *args, **kwds) + return _generic_new(list, cls, *args, **kwds) class Set(set, MutableSet[T], extra=set): + __slots__ = () + def __new__(cls, *args, **kwds): if _geqv(cls, Set): raise TypeError("Type Set cannot be instantiated; " "use set() instead") - return set.__new__(cls, *args, **kwds) - + return _generic_new(set, cls, *args, **kwds) -class _FrozenSetMeta(GenericMeta): - """This metaclass ensures set is not a subclass of FrozenSet. - Without this metaclass, set would be considered a subclass of - FrozenSet, because FrozenSet.__extra__ is collections.abc.Set, and - set is a subclass of that. - """ - - def __subclasscheck__(self, cls): - if issubclass(cls, Set): - return False - return super().__subclasscheck__(cls) - - -class FrozenSet(frozenset, AbstractSet[T_co], metaclass=_FrozenSetMeta, - extra=frozenset): +class FrozenSet(frozenset, AbstractSet[T_co], extra=frozenset): __slots__ = () def __new__(cls, *args, **kwds): if _geqv(cls, FrozenSet): raise TypeError("Type FrozenSet cannot be instantiated; " "use frozenset() instead") - return frozenset.__new__(cls, *args, **kwds) + return _generic_new(frozenset, cls, *args, **kwds) class MappingView(Sized, Iterable[T_co], extra=collections_abc.MappingView): - pass + __slots__ = () class KeysView(MappingView[KT], AbstractSet[KT], extra=collections_abc.KeysView): - pass + __slots__ = () class ItemsView(MappingView[Tuple[KT, VT_co]], AbstractSet[Tuple[KT, VT_co]], Generic[KT, VT_co], extra=collections_abc.ItemsView): - pass + __slots__ = () class ValuesView(MappingView[VT_co], extra=collections_abc.ValuesView): - pass + __slots__ = () if hasattr(contextlib, 'AbstractContextManager'): @@ -1547,20 +1821,24 @@ if hasattr(contextlib, 'AbstractContextManager'): class Dict(dict, MutableMapping[KT, VT], extra=dict): + __slots__ = () + def __new__(cls, *args, **kwds): if _geqv(cls, Dict): raise TypeError("Type Dict cannot be instantiated; " "use dict() instead") - return dict.__new__(cls, *args, **kwds) + return _generic_new(dict, cls, *args, **kwds) class DefaultDict(collections.defaultdict, MutableMapping[KT, VT], extra=collections.defaultdict): + __slots__ = () + def __new__(cls, *args, **kwds): if _geqv(cls, DefaultDict): raise TypeError("Type DefaultDict cannot be instantiated; " "use collections.defaultdict() instead") - return collections.defaultdict.__new__(cls, *args, **kwds) + return _generic_new(collections.defaultdict, cls, *args, **kwds) # Determine what base class to use for Generator. if hasattr(collections_abc, 'Generator'): @@ -1579,15 +1857,15 @@ class Generator(Iterator[T_co], Generic[T_co, T_contra, V_co], if _geqv(cls, Generator): raise TypeError("Type Generator cannot be instantiated; " "create a subclass instead") - return super().__new__(cls, *args, **kwds) + return _generic_new(_G_base, cls, *args, **kwds) # Internal type variable used for Type[]. -CT = TypeVar('CT', covariant=True, bound=type) +CT_co = TypeVar('CT_co', covariant=True, bound=type) # This is not a real generic class. Don't use outside annotations. -class Type(type, Generic[CT], extra=type): +class Type(Generic[CT_co], extra=type): """A special construct usable to annotate class objects. For example, suppose we have the following classes:: @@ -1611,13 +1889,43 @@ class Type(type, Generic[CT], extra=type): At this point the type checker knows that joe has type BasicUser. """ + __slots__ = () + + +def _make_nmtuple(name, types): + msg = "NamedTuple('Name', [(f0, t0), (f1, t1), ...]); each t must be a type" + types = [(n, _type_check(t, msg)) for n, t in types] + nm_tpl = collections.namedtuple(name, [n for n, t in types]) + nm_tpl._field_types = dict(types) + try: + nm_tpl.__module__ = sys._getframe(2).f_globals.get('__name__', '__main__') + except (AttributeError, ValueError): + pass + return nm_tpl + -def NamedTuple(typename, fields): +_PY36 = sys.version_info[:2] >= (3, 6) + + +class NamedTupleMeta(type): + + def __new__(cls, typename, bases, ns): + if ns.get('_root', False): + return super().__new__(cls, typename, bases, ns) + if not _PY36: + raise TypeError("Class syntax for NamedTuple is only supported" + " in Python 3.6+") + types = ns.get('__annotations__', {}) + return _make_nmtuple(typename, types.items()) + +class NamedTuple(metaclass=NamedTupleMeta): """Typed version of namedtuple. - Usage:: + Usage in Python versions >= 3.6:: - Employee = typing.NamedTuple('Employee', [('name', str), 'id', int)]) + class Employee(NamedTuple): + name: str + id: int This is equivalent to:: @@ -1626,17 +1934,26 @@ def NamedTuple(typename, fields): The resulting class has one extra attribute: _field_types, giving a dict mapping field names to types. (The field names are in the _fields attribute, which is part of the namedtuple - API.) + API.) Alternative equivalent keyword syntax is also accepted:: + + Employee = NamedTuple('Employee', name=str, id=int) + + In Python versions <= 3.5 use:: + + Employee = NamedTuple('Employee', [('name', str), ('id', int)]) """ - fields = [(n, t) for n, t in fields] - cls = collections.namedtuple(typename, [n for n, t in fields]) - cls._field_types = dict(fields) - # Set the module to the caller's module (otherwise it'd be 'typing'). - try: - cls.__module__ = sys._getframe(1).f_globals.get('__name__', '__main__') - except (AttributeError, ValueError): - pass - return cls + _root = True + + def __new__(self, typename, fields=None, **kwargs): + if kwargs and not _PY36: + raise TypeError("Keyword syntax for NamedTuple is only supported" + " in Python 3.6+") + if fields is None: + fields = kwargs.items() + elif kwargs: + raise TypeError("Either list of fields or keywords" + " can be provided to NamedTuple, not both") + return _make_nmtuple(typename, fields) def NewType(name, tp): @@ -1798,7 +2115,7 @@ class TextIO(IO[str]): pass @abstractproperty - def errors(self) -> str: + def errors(self) -> Optional[str]: pass @abstractproperty diff --git a/Lib/unittest/__init__.py b/Lib/unittest/__init__.py index 7f61a80..c55d563 100644 --- a/Lib/unittest/__init__.py +++ b/Lib/unittest/__init__.py @@ -12,7 +12,7 @@ Simple usage: import unittest class IntegerArithmeticTestCase(unittest.TestCase): - def testAdd(self): ## test method names begin 'test*' + def testAdd(self): # test method names begin with 'test' self.assertEqual((1 + 2), 3) self.assertEqual(0 + 1, 1) def testMultiply(self): diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index 524a7b1..b523f73 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -17,6 +17,7 @@ from .util import (strclass, safe_repr, _count_diff_all_purpose, __unittest = True +_subtest_msg_sentinel = object() DIFF_OMITTED = ('\nDiff is %s characters long. ' 'Set self.maxDiff to None to see it.') @@ -497,7 +498,7 @@ class TestCase(object): result.addSuccess(test_case) @contextlib.contextmanager - def subTest(self, msg=None, **params): + def subTest(self, msg=_subtest_msg_sentinel, **params): """Return a context manager that will return the enclosed block of code in a subtest identified by the optional message and keyword parameters. A failure in the subtest marks the test @@ -836,7 +837,7 @@ class TestCase(object): between the two objects is more than the given delta. Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). + as significant digits (measured from the most significant digit). If the two objects compare equal then they will automatically compare almost equal. @@ -875,7 +876,7 @@ class TestCase(object): between the two objects is less than the given delta. Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). + as significant digits (measured from the most significant digit). Objects that are equal automatically fail. """ @@ -1397,7 +1398,7 @@ class _SubTest(TestCase): def _subDescription(self): parts = [] - if self._message: + if self._message is not _subtest_msg_sentinel: parts.append("[{}]".format(self._message)) if self.params: params_desc = ', '.join( diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index 86a5a3d..669890a 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -64,6 +64,8 @@ class _slotted(object): __slots__ = ['a'] +# Do not use this tuple. It was never documented as a public API. +# It will be removed. It has no obvious signs of users on github. DescriptorTypes = ( type(_slotted.a), property, @@ -744,7 +746,7 @@ class NonCallableMock(Base): def _call_matcher(self, _call): """ - Given a call (or simply a (args, kwargs) tuple), return a + Given a call (or simply an (args, kwargs) tuple), return a comparison key suitable for matching with other calls. This is a best effort method which relies on the spec's signature, if available, or falls back on the arguments themselves. @@ -1694,6 +1696,7 @@ _non_defaults = { '__reduce__', '__reduce_ex__', '__getinitargs__', '__getnewargs__', '__getstate__', '__setstate__', '__getformat__', '__setformat__', '__repr__', '__dir__', '__subclasses__', '__format__', + '__getnewargs_ex__', } @@ -2129,7 +2132,7 @@ def create_autospec(spec, spec_set=False, instance=False, _parent=None, _kwargs.update(kwargs) Klass = MagicMock - if type(spec) in DescriptorTypes: + if inspect.isdatadescriptor(spec): # descriptors don't have a spec # because we don't know what type they return _kwargs = {} diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py index 1fb95dc..8f752b8 100644 --- a/Lib/unittest/test/test_case.py +++ b/Lib/unittest/test/test_case.py @@ -339,7 +339,7 @@ class Test_TestCase(unittest.TestCase, TestEquality, TestHashing): self._check_call_order__subtests(result, events, expected) def test_run_call_order__subtests_legacy(self): - # With a legacy result object (without a addSubTest method), + # With a legacy result object (without an addSubTest method), # text execution stops after the first subtest failure. events = [] result = LegacyLoggingResult(events) diff --git a/Lib/unittest/test/test_discovery.py b/Lib/unittest/test/test_discovery.py index bb196e6..1996a8e 100644 --- a/Lib/unittest/test/test_discovery.py +++ b/Lib/unittest/test/test_discovery.py @@ -275,7 +275,7 @@ class TestDiscovery(unittest.TestCase): self.assertEqual(Module.load_tests_args, [(loader, [], 'test*.py')]) - def test_find_tests_customise_via_package_pattern(self): + def test_find_tests_customize_via_package_pattern(self): # This test uses the example 'do-nothing' load_tests from # https://docs.python.org/3/library/unittest.html#load-tests-protocol # to make sure that that actually works. @@ -349,7 +349,7 @@ class TestDiscovery(unittest.TestCase): suite = list(loader._find_tests(abspath('/foo'), 'test*.py')) # We should have loaded tests from both my_package and - # my_pacakge.test_module, and also run the load_tests hook in both. + # my_package.test_module, and also run the load_tests hook in both. # (normally this would be nested TestSuites.) self.assertEqual(suite, [['my_package load_tests', [], diff --git a/Lib/unittest/test/test_result.py b/Lib/unittest/test/test_result.py index e39e2ea..0a61553 100644 --- a/Lib/unittest/test/test_result.py +++ b/Lib/unittest/test/test_result.py @@ -323,6 +323,16 @@ class Test_TestResult(unittest.TestCase): 'testGetSubTestDescriptionWithoutDocstringAndParams ' '(' + __name__ + '.Test_TestResult) ()') + def testGetSubTestDescriptionForFalsyValues(self): + expected = 'testGetSubTestDescriptionForFalsyValues (%s.Test_TestResult) [%s]' + result = unittest.TextTestResult(None, True, 1) + for arg in [0, None, []]: + with self.subTest(arg): + self.assertEqual( + result.getDescription(self._subtest), + expected % (__name__, arg) + ) + def testGetNestedSubTestDescriptionWithoutDocstring(self): with self.subTest(foo=1): with self.subTest(bar=2): diff --git a/Lib/unittest/test/testmock/testcallable.py b/Lib/unittest/test/testmock/testcallable.py index 5390a4e..af1ce7e 100644 --- a/Lib/unittest/test/testmock/testcallable.py +++ b/Lib/unittest/test/testmock/testcallable.py @@ -27,7 +27,7 @@ class TestCallable(unittest.TestCase): self.assertIn(mock.__class__.__name__, repr(mock)) - def test_heirarchy(self): + def test_hierarchy(self): self.assertTrue(issubclass(MagicMock, Mock)) self.assertTrue(issubclass(NonCallableMagicMock, NonCallableMock)) diff --git a/Lib/unittest/test/testmock/testhelpers.py b/Lib/unittest/test/testmock/testhelpers.py index 1dbc0b6..3477634 100644 --- a/Lib/unittest/test/testmock/testhelpers.py +++ b/Lib/unittest/test/testmock/testhelpers.py @@ -802,35 +802,53 @@ class SpecSignatureTest(unittest.TestCase): a.f.assert_called_with(self=10) - def test_autospec_property(self): - class Foo(object): - @property - def foo(self): - return 3 + def test_autospec_data_descriptor(self): + class Descriptor(object): + def __init__(self, value): + self.value = value - foo = create_autospec(Foo) - mock_property = foo.foo + def __get__(self, obj, cls=None): + if obj is None: + return self + return self.value - # no spec on properties - self.assertIsInstance(mock_property, MagicMock) - mock_property(1, 2, 3) - mock_property.abc(4, 5, 6) - mock_property.assert_called_once_with(1, 2, 3) - mock_property.abc.assert_called_once_with(4, 5, 6) + def __set__(self, obj, value): + pass + class MyProperty(property): + pass - def test_autospec_slots(self): class Foo(object): - __slots__ = ['a'] + __slots__ = ['slot'] + + @property + def prop(self): + return 3 + + @MyProperty + def subprop(self): + return 4 + + desc = Descriptor(42) foo = create_autospec(Foo) - mock_slot = foo.a - # no spec on slots - mock_slot(1, 2, 3) - mock_slot.abc(4, 5, 6) - mock_slot.assert_called_once_with(1, 2, 3) - mock_slot.abc.assert_called_once_with(4, 5, 6) + def check_data_descriptor(mock_attr): + # Data descriptors don't have a spec. + self.assertIsInstance(mock_attr, MagicMock) + mock_attr(1, 2, 3) + mock_attr.abc(4, 5, 6) + mock_attr.assert_called_once_with(1, 2, 3) + mock_attr.abc.assert_called_once_with(4, 5, 6) + + # property + check_data_descriptor(foo.prop) + # property subclass + check_data_descriptor(foo.subprop) + # class __slot__ + check_data_descriptor(foo.slot) + # plain data descriptor + check_data_descriptor(foo.desc) class TestCallList(unittest.TestCase): diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 4d7fcec..566fbf7 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -42,11 +42,12 @@ __all__ = ["urlparse", "urlunparse", "urljoin", "urldefrag", uses_relative = ['ftp', 'http', 'gopher', 'nntp', 'imap', 'wais', 'file', 'https', 'shttp', 'mms', 'prospero', 'rtsp', 'rtspu', '', 'sftp', - 'svn', 'svn+ssh'] + 'svn', 'svn+ssh', 'ws', 'wss'] uses_netloc = ['ftp', 'http', 'gopher', 'nntp', 'telnet', 'imap', 'wais', 'file', 'mms', 'https', 'shttp', 'snews', 'prospero', 'rtsp', 'rtspu', 'rsync', '', - 'svn', 'svn+ssh', 'sftp', 'nfs', 'git', 'git+ssh'] + 'svn', 'svn+ssh', 'sftp', 'nfs', 'git', 'git+ssh', + 'ws', 'wss'] uses_params = ['ftp', 'hdl', 'prospero', 'http', 'imap', 'https', 'shttp', 'rtsp', 'rtspu', 'sip', 'sips', 'mms', '', 'sftp', 'tel'] diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index 1731fe3..a4bf97d 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -1625,7 +1625,7 @@ class URLopener: self.proxies = proxies self.key_file = x509.get('key_file') self.cert_file = x509.get('cert_file') - self.addheaders = [('User-Agent', self.version)] + self.addheaders = [('User-Agent', self.version), ('Accept', '*/*')] self.__tempfiles = [] self.__unlink = os.unlink # See cleanup() self.tempcache = None @@ -2412,6 +2412,12 @@ def getproxies_environment(): name = name.lower() if value and name[-6:] == '_proxy': proxies[name[:-6]] = value + # CVE-2016-1000110 - If we are running as CGI script, forget HTTP_PROXY + # (non-all-lowercase) as it may be set from the web server by a "Proxy:" + # header from the client + # If "proxy" is lowercase, it will still be used thanks to the next block + if 'REQUEST_METHOD' in os.environ: + proxies.pop('http', None) for name, value in os.environ.items(): if name[-6:] == '_proxy': name = name.lower() diff --git a/Lib/venv/scripts/posix/activate b/Lib/venv/scripts/posix/activate index 7bbffd9..c78a4ef 100644 --- a/Lib/venv/scripts/posix/activate +++ b/Lib/venv/scripts/posix/activate @@ -34,7 +34,7 @@ deactivate () { fi } -# unset irrelavent variables +# unset irrelevant variables deactivate nondestructive VIRTUAL_ENV="__VENV_DIR__" diff --git a/Lib/venv/scripts/posix/activate.csh b/Lib/venv/scripts/posix/activate.csh index 99d79e0..b0c7028 100644 --- a/Lib/venv/scripts/posix/activate.csh +++ b/Lib/venv/scripts/posix/activate.csh @@ -5,7 +5,7 @@ alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate' -# Unset irrelavent variables. +# Unset irrelevant variables. deactivate nondestructive setenv VIRTUAL_ENV "__VENV_DIR__" diff --git a/Lib/venv/scripts/posix/activate.fish b/Lib/venv/scripts/posix/activate.fish index fb7f5c0..4d4f0bd 100644 --- a/Lib/venv/scripts/posix/activate.fish +++ b/Lib/venv/scripts/posix/activate.fish @@ -15,10 +15,7 @@ function deactivate -d "Exit virtualenv and return to normal shell environment" if test -n "$_OLD_FISH_PROMPT_OVERRIDE" functions -e fish_prompt set -e _OLD_FISH_PROMPT_OVERRIDE - . ( begin - printf "function fish_prompt\n\t#" - functions _old_fish_prompt - end | psub ) + functions -c _old_fish_prompt fish_prompt functions -e _old_fish_prompt end @@ -29,7 +26,7 @@ function deactivate -d "Exit virtualenv and return to normal shell environment" end end -# unset irrelavent variables +# unset irrelevant variables deactivate nondestructive set -gx VIRTUAL_ENV "__VENV_DIR__" @@ -47,27 +44,31 @@ if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" # fish uses a function instead of an env var to generate the prompt. # save the current fish_prompt function as the function _old_fish_prompt - . ( begin - printf "function _old_fish_prompt\n\t#" - functions fish_prompt - end | psub ) + functions -c fish_prompt _old_fish_prompt # with the original prompt function renamed, we can override with our own. function fish_prompt + # Save the return status of the last command + set -l old_status $status + # Prompt override? - if test -n "$__VENV_PROMPT__" - printf "%s%s%s" "$__VENV_PROMPT__" (set_color normal) (_old_fish_prompt) - return - end - # ...Otherwise, prepend env - set -l _checkbase (basename "$VIRTUAL_ENV") - if test $_checkbase = "__" - # special case for Aspen magic directories - # see http://www.zetadev.com/software/aspen/ - printf "%s[%s]%s %s" (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) (_old_fish_prompt) + if test -n "__VENV_PROMPT__" + printf "%s%s" "__VENV_PROMPT__" (set_color normal) else - printf "%s(%s)%s%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) (_old_fish_prompt) + # ...Otherwise, prepend env + set -l _checkbase (basename "$VIRTUAL_ENV") + if test $_checkbase = "__" + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) + else + printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) + end end + + # Restore the return status of the previous command. + echo "exit $old_status" | . + _old_fish_prompt end set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" diff --git a/Lib/weakref.py b/Lib/weakref.py index 2968fb9..aaebd0c 100644 --- a/Lib/weakref.py +++ b/Lib/weakref.py @@ -16,7 +16,8 @@ from _weakref import ( proxy, CallableProxyType, ProxyType, - ReferenceType) + ReferenceType, + _remove_dead_weakref) from _weakrefset import WeakSet, _IterationGuard @@ -111,7 +112,9 @@ class WeakValueDictionary(collections.MutableMapping): if self._iterating: self._pending_removals.append(wr.key) else: - del self.data[wr.key] + # Atomic removal is necessary since this function + # can be called asynchronously by the GC + _remove_dead_weakref(d, wr.key) self._remove = remove # A list of keys to be removed self._pending_removals = [] @@ -125,9 +128,12 @@ class WeakValueDictionary(collections.MutableMapping): # We shouldn't encounter any KeyError, because this method should # always be called *before* mutating the dict. while l: - del d[l.pop()] + key = l.pop() + _remove_dead_weakref(d, key) def __getitem__(self, key): + if self._pending_removals: + self._commit_removals() o = self.data[key]() if o is None: raise KeyError(key) @@ -140,9 +146,13 @@ class WeakValueDictionary(collections.MutableMapping): del self.data[key] def __len__(self): - return len(self.data) - len(self._pending_removals) + if self._pending_removals: + self._commit_removals() + return len(self.data) def __contains__(self, key): + if self._pending_removals: + self._commit_removals() try: o = self.data[key]() except KeyError: @@ -158,6 +168,8 @@ class WeakValueDictionary(collections.MutableMapping): self.data[key] = KeyedRef(value, self._remove, key) def copy(self): + if self._pending_removals: + self._commit_removals() new = WeakValueDictionary() for key, wr in self.data.items(): o = wr() @@ -169,6 +181,8 @@ class WeakValueDictionary(collections.MutableMapping): def __deepcopy__(self, memo): from copy import deepcopy + if self._pending_removals: + self._commit_removals() new = self.__class__() for key, wr in self.data.items(): o = wr() @@ -177,6 +191,8 @@ class WeakValueDictionary(collections.MutableMapping): return new def get(self, key, default=None): + if self._pending_removals: + self._commit_removals() try: wr = self.data[key] except KeyError: @@ -190,6 +206,8 @@ class WeakValueDictionary(collections.MutableMapping): return o def items(self): + if self._pending_removals: + self._commit_removals() with _IterationGuard(self): for k, wr in self.data.items(): v = wr() @@ -197,6 +215,8 @@ class WeakValueDictionary(collections.MutableMapping): yield k, v def keys(self): + if self._pending_removals: + self._commit_removals() with _IterationGuard(self): for k, wr in self.data.items(): if wr() is not None: @@ -214,10 +234,14 @@ class WeakValueDictionary(collections.MutableMapping): keep the values around longer than needed. """ + if self._pending_removals: + self._commit_removals() with _IterationGuard(self): yield from self.data.values() def values(self): + if self._pending_removals: + self._commit_removals() with _IterationGuard(self): for wr in self.data.values(): obj = wr() @@ -239,24 +263,27 @@ class WeakValueDictionary(collections.MutableMapping): try: o = self.data.pop(key)() except KeyError: + o = None + if o is None: if args: return args[0] - raise - if o is None: - raise KeyError(key) + else: + raise KeyError(key) else: return o def setdefault(self, key, default=None): try: - wr = self.data[key] + o = self.data[key]() except KeyError: + o = None + if o is None: if self._pending_removals: self._commit_removals() self.data[key] = KeyedRef(default, self._remove, key) return default else: - return wr() + return o def update(*args, **kwargs): if not args: @@ -287,6 +314,8 @@ class WeakValueDictionary(collections.MutableMapping): keep the values around longer than needed. """ + if self._pending_removals: + self._commit_removals() return list(self.data.values()) diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index 845f1d0..6f43b7f 100755 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -245,7 +245,17 @@ class UnixBrowser(BaseBrowser): class Mozilla(UnixBrowser): - """Launcher class for Mozilla/Netscape browsers.""" + """Launcher class for Mozilla browsers.""" + + remote_args = ['%action', '%s'] + remote_action = "" + remote_action_newwin = "-new-window" + remote_action_newtab = "-new-tab" + background = True + + +class Netscape(UnixBrowser): + """Launcher class for Netscape browser.""" raise_opts = ["-noraise", "-raise"] remote_args = ['-remote', 'openURL(%s%action)'] @@ -254,8 +264,6 @@ class Mozilla(UnixBrowser): remote_action_newtab = ",new-tab" background = True -Netscape = Mozilla - class Galeon(UnixBrowser): """Launcher class for Galeon/Epiphany browsers.""" @@ -430,14 +438,18 @@ def register_X_browsers(): if shutil.which("x-www-browser"): register("x-www-browser", None, BackgroundBrowser("x-www-browser")) - # The Mozilla/Netscape browsers - for browser in ("mozilla-firefox", "firefox", - "mozilla-firebird", "firebird", - "iceweasel", "iceape", - "seamonkey", "mozilla", "netscape"): + # The Mozilla browsers + for browser in ("firefox", "iceweasel", "iceape", "seamonkey"): if shutil.which(browser): register(browser, None, Mozilla(browser)) + # The Netscape and old Mozilla browsers + for browser in ("mozilla-firefox", + "mozilla-firebird", "firebird", + "mozilla", "netscape"): + if shutil.which(browser): + register(browser, None, Netscape(browser)) + # Konqueror/kfm, the KDE browser. if shutil.which("kfm"): register("kfm", Konqueror, Konqueror("kfm")) @@ -600,6 +612,7 @@ if sys.platform == 'darwin': # (but we prefer using the OS X specific stuff) register("safari", None, MacOSXOSAScript('safari'), -1) register("firefox", None, MacOSXOSAScript('firefox'), -1) + register("chrome", None, MacOSXOSAScript('chrome'), -1) register("MacOSX", None, MacOSXOSAScript('default'), -1) diff --git a/Lib/xml/dom/expatbuilder.py b/Lib/xml/dom/expatbuilder.py index 8976144..2bd835b 100644 --- a/Lib/xml/dom/expatbuilder.py +++ b/Lib/xml/dom/expatbuilder.py @@ -10,7 +10,7 @@ This avoids all the overhead of SAX and pulldom to gain performance. # minidom DOM and can't be used with other DOM implementations. This # is due, in part, to a lack of appropriate methods in the DOM (there is # no way to create Entity and Notation nodes via the DOM Level 2 -# interface), and for performance. The later is the cause of some fairly +# interface), and for performance. The latter is the cause of some fairly # cryptic code. # # Performance hacks: diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py index 6d1b0ab..92821c5 100644 --- a/Lib/xml/etree/ElementTree.py +++ b/Lib/xml/etree/ElementTree.py @@ -1083,8 +1083,19 @@ def _escape_attrib(text): text = text.replace(">", ">") if "\"" in text: text = text.replace("\"", """) + # The following business with carriage returns is to satisfy + # Section 2.11 of the XML specification, stating that + # CR or CR LN should be replaced with just LN + # http://www.w3.org/TR/REC-xml/#sec-line-ends + if "\r\n" in text: + text = text.replace("\r\n", "\n") + if "\r" in text: + text = text.replace("\r", "\n") + #The following four lines are issue 17582 if "\n" in text: text = text.replace("\n", " ") + if "\t" in text: + text = text.replace("\t", " ") return text except (TypeError, AttributeError): _raise_serialization_error(text) diff --git a/Lib/xmlrpc/server.py b/Lib/xmlrpc/server.py index 5b5bf7c..7817693 100644 --- a/Lib/xmlrpc/server.py +++ b/Lib/xmlrpc/server.py @@ -184,7 +184,7 @@ class SimpleXMLRPCDispatcher: are considered private and will not be called by SimpleXMLRPCServer. - If a registered function matches a XML-RPC request, then it + If a registered function matches an XML-RPC request, then it will be called instead of the registered instance. If the optional allow_dotted_names argument is true and the diff --git a/Lib/zipfile.py b/Lib/zipfile.py index 56a2479..048f60a 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -1028,6 +1028,7 @@ class ZipFile: # set the modified flag so central directory gets written # even if no files are added to the archive self._didModify = True + self._start_disk = 0 try: self.start_dir = self.fp.tell() except (AttributeError, OSError): @@ -1053,7 +1054,7 @@ class ZipFile: # set the modified flag so central directory gets written # even if no files are added to the archive self._didModify = True - self.start_dir = self.fp.tell() + self.start_dir = self._start_disk = self.fp.tell() else: raise RuntimeError("Mode must be 'r', 'w', 'x', or 'a'") except: @@ -1097,17 +1098,18 @@ class ZipFile: offset_cd = endrec[_ECD_OFFSET] # offset of central directory self._comment = endrec[_ECD_COMMENT] # archive comment - # "concat" is zero, unless zip was concatenated to another file - concat = endrec[_ECD_LOCATION] - size_cd - offset_cd + # self._start_disk: Position of the start of ZIP archive + # It is zero, unless ZIP was concatenated to another file + self._start_disk = endrec[_ECD_LOCATION] - size_cd - offset_cd if endrec[_ECD_SIGNATURE] == stringEndArchive64: # If Zip64 extension structures are present, account for them - concat -= (sizeEndCentDir64 + sizeEndCentDir64Locator) + self._start_disk -= (sizeEndCentDir64 + sizeEndCentDir64Locator) if self.debug > 2: - inferred = concat + offset_cd - print("given, inferred, offset", offset_cd, inferred, concat) + inferred = self._start_disk + offset_cd + print("given, inferred, offset", offset_cd, inferred, self._start_disk) # self.start_dir: Position of start of central directory - self.start_dir = offset_cd + concat + self.start_dir = offset_cd + self._start_disk fp.seek(self.start_dir, 0) data = fp.read(size_cd) fp = io.BytesIO(data) @@ -1147,7 +1149,7 @@ class ZipFile: t>>11, (t>>5)&0x3F, (t&0x1F) * 2 ) x._decodeExtra() - x.header_offset = x.header_offset + concat + x.header_offset = x.header_offset + self._start_disk self.filelist.append(x) self.NameToInfo[x.filename] = x @@ -1627,11 +1629,10 @@ class ZipFile: file_size = zinfo.file_size compress_size = zinfo.compress_size - if zinfo.header_offset > ZIP64_LIMIT: - extra.append(zinfo.header_offset) + header_offset = zinfo.header_offset - self._start_disk + if header_offset > ZIP64_LIMIT: + extra.append(header_offset) header_offset = 0xffffffff - else: - header_offset = zinfo.header_offset extra_data = zinfo.extra min_version = 0 @@ -1678,7 +1679,7 @@ class ZipFile: # Write end-of-zip-archive record centDirCount = len(self.filelist) centDirSize = pos2 - self.start_dir - centDirOffset = self.start_dir + centDirOffset = self.start_dir - self._start_disk requires_zip64 = None if centDirCount > ZIP_FILECOUNT_LIMIT: requires_zip64 = "Files count" diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index d09da2f..c76c4f1 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -242,9 +242,9 @@ def library_recipes(): result.extend([ dict( - name="OpenSSL 1.0.2h", - url="https://www.openssl.org/source/openssl-1.0.2h.tar.gz", - checksum='9392e65072ce4b614c1392eefc1f23d0', + name="OpenSSL 1.0.2j", + url="https://www.openssl.org/source/openssl-1.0.2j.tar.gz", + checksum='96322138f0b69e61b7212bc53d5e912b', patches=[ "openssl_sdk_makedepend.patch", ], diff --git a/Mac/BuildScript/openssl_sdk_makedepend.patch b/Mac/BuildScript/openssl_sdk_makedepend.patch index 96a8841..e22d67e 100644 --- a/Mac/BuildScript/openssl_sdk_makedepend.patch +++ b/Mac/BuildScript/openssl_sdk_makedepend.patch @@ -1,8 +1,6 @@ # HG changeset patch -# Parent d377390f787c0739a3e89f669def72d7167e5108 -# openssl_sdk_makedepend.patch # -# using openssl 1.0.2f +# using openssl 1.0.2j # # - support building with an OS X SDK @@ -11,7 +9,7 @@ diff Configure diff --git a/Configure b/Configure --- a/Configure +++ b/Configure -@@ -638,12 +638,12 @@ +@@ -642,12 +642,12 @@ ##### MacOS X (a.k.a. Rhapsody or Darwin) setup "rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::", @@ -30,13 +28,13 @@ diff --git a/Configure b/Configure "debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", # iPhoneOS/iOS "iphoneos-cross","llvm-gcc:-O3 -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fomit-frame-pointer -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", -@@ -1717,8 +1717,7 @@ - s/^CC=.*$/CC= $cc/; +@@ -1728,8 +1728,7 @@ s/^AR=\s*ar/AR= $ar/; s/^RANLIB=.*/RANLIB= $ranlib/; + s/^RC=.*/RC= $windres/; - s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $cc eq "gcc"; - s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $ecc eq "gcc" || $ecc eq "clang"; -+ s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ ++ s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/; } s/^CFLAG=.*$/CFLAG= $cflags/; s/^DEPFLAG=.*$/DEPFLAG=$depflags/; diff --git a/Mac/IDLE/IDLE.app/Contents/Info.plist b/Mac/IDLE/IDLE.app/Contents/Info.plist index f7c3b35..5507687 100644 --- a/Mac/IDLE/IDLE.app/Contents/Info.plist +++ b/Mac/IDLE/IDLE.app/Contents/Info.plist @@ -36,7 +36,7 @@ CFBundleExecutable IDLE CFBundleGetInfoString - %version%, © 2001-2016 Python Software Foundation + %version%, © 2001-2017 Python Software Foundation CFBundleIconFile IDLE.icns CFBundleIdentifier diff --git a/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py b/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py index 8b8beb9..986760d 100644 --- a/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py +++ b/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py @@ -68,8 +68,6 @@ for idx, value in enumerate(sys.argv): break # Now it is safe to import idlelib. -from idlelib import macosxSupport -macosxSupport._appbundle = True from idlelib.PyShell import main if __name__ == '__main__': main() diff --git a/Mac/PythonLauncher/Info.plist.in b/Mac/PythonLauncher/Info.plist.in index 4a5eeb5..f1ab79f 100644 --- a/Mac/PythonLauncher/Info.plist.in +++ b/Mac/PythonLauncher/Info.plist.in @@ -40,7 +40,7 @@ CFBundleExecutable Python Launcher CFBundleGetInfoString - %VERSION%, © 2001-2016 Python Software Foundation + %VERSION%, © 2001-2017 Python Software Foundation CFBundleIconFile PythonLauncher.icns CFBundleIdentifier diff --git a/Mac/PythonLauncher/MyAppDelegate.m b/Mac/PythonLauncher/MyAppDelegate.m index e75fb06..25779a2 100644 --- a/Mac/PythonLauncher/MyAppDelegate.m +++ b/Mac/PythonLauncher/MyAppDelegate.m @@ -34,7 +34,7 @@ - (BOOL)shouldShowUI { // if this call comes before applicationDidFinishLaunching: we - // should terminate immedeately after starting the script. + // should terminate immediately after starting the script. if (!initial_action_done) should_terminate = YES; initial_action_done = YES; diff --git a/Mac/Resources/app/Info.plist.in b/Mac/Resources/app/Info.plist.in index a0bb971..a23166e 100644 --- a/Mac/Resources/app/Info.plist.in +++ b/Mac/Resources/app/Info.plist.in @@ -37,7 +37,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - %version%, (c) 2001-2016 Python Software Foundation. + %version%, (c) 2001-2017 Python Software Foundation. CFBundleName Python CFBundlePackageType diff --git a/Mac/Resources/framework/Info.plist.in b/Mac/Resources/framework/Info.plist.in index fcba7d9..7a64619 100644 --- a/Mac/Resources/framework/Info.plist.in +++ b/Mac/Resources/framework/Info.plist.in @@ -17,9 +17,9 @@ CFBundlePackageType FMWK CFBundleShortVersionString - %VERSION%, (c) 2001-2016 Python Software Foundation. + %VERSION%, (c) 2001-2017 Python Software Foundation. CFBundleLongVersionString - %VERSION%, (c) 2001-2016 Python Software Foundation. + %VERSION%, (c) 2001-2017 Python Software Foundation. CFBundleSignature ???? CFBundleVersion diff --git a/Makefile.pre.in b/Makefile.pre.in index 87528a0..a88b7d5 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -20,6 +20,7 @@ # === Variables set by makesetup === +MODNAMES= _MODNAMES_ MODOBJS= _MODOBJS_ MODLIBS= _MODLIBS_ @@ -90,7 +91,7 @@ PY_CFLAGS_NODIST=$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) # Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to # be able to build extension modules using the directories specified in the # environment variables -PY_CPPFLAGS= $(BASECPPFLAGS) -I. -IInclude -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS) +PY_CPPFLAGS= $(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS) PY_LDFLAGS= $(CONFIGURE_LDFLAGS) $(LDFLAGS) NO_AS_NEEDED= @NO_AS_NEEDED@ LDLAST= @LDLAST@ @@ -221,7 +222,7 @@ LIBOBJS= @LIBOBJS@ PYTHON= python$(EXE) BUILDPYTHON= python$(BUILDEXE) -cross_compiling=@cross_compiling@ +PYTHON_FOR_GEN=@PYTHON_FOR_GEN@ PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@ _PYTHON_HOST_PLATFORM=@_PYTHON_HOST_PLATFORM@ BUILD_GNU_TYPE= @build@ @@ -339,7 +340,7 @@ PGENOBJS= $(POBJS) $(PGOBJS) OPCODE_H_DIR= $(srcdir)/Include OPCODE_H_SCRIPT= $(srcdir)/Tools/scripts/generate_opcode_h.py OPCODE_H= $(OPCODE_H_DIR)/opcode.h -OPCODE_H_GEN= @OPCODEHGEN@ $(OPCODE_H_SCRIPT) $(srcdir)/Lib/opcode.py $(OPCODE_H) +OPCODE_H_GEN= $(PYTHON_FOR_GEN) $(OPCODE_H_SCRIPT) $(srcdir)/Lib/opcode.py $(OPCODE_H) # ########################################################################## # AST @@ -352,7 +353,7 @@ AST_ASDL= $(srcdir)/Parser/Python.asdl ASDLGEN_FILES= $(srcdir)/Parser/asdl.py $(srcdir)/Parser/asdl_c.py # Note that a build now requires Python to exist before the build starts. # Use "hg touch" to fix up screwed up file mtimes in a checkout. -ASDLGEN= @ASDLGEN@ $(srcdir)/Parser/asdl_c.py +ASDLGEN= $(PYTHON_FOR_GEN) $(srcdir)/Parser/asdl_c.py ########################################################################## # Python @@ -481,7 +482,7 @@ LIBRARY_OBJS= \ # Rules # Default target -all: build_all +all: @DEF_MAKE_ALL_RULE@ build_all: $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks Programs/_testembed python-config # Compile a binary with profile guided optimization. @@ -505,7 +506,7 @@ profile-opt: $(MAKE) profile-removal build_all_generate_profile: - $(MAKE) all CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LIBS="$(LIBS)" + $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LIBS="$(LIBS)" run_profile_task: : # FIXME: can't run for a cross build @@ -515,14 +516,14 @@ build_all_merge_profile: $(LLVM_PROF_MERGER) build_all_use_profile: - $(MAKE) all CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_USE_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) @LTOFLAGS@" + $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_USE_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) @LTOFLAGS@" # Compile and run with gcov .PHONY=coverage coverage-lcov coverage-report coverage: @echo "Building with support for coverage checking:" $(MAKE) clean profile-removal - $(MAKE) all CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov" + $(MAKE) @DEF_MAKE_RULE@ CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov" coverage-lcov: @echo "Creating Coverage HTML report with LCOV:" @@ -718,17 +719,13 @@ Programs/_freeze_importlib.o: Programs/_freeze_importlib.c Makefile Programs/_freeze_importlib: Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) $(LINKCC) $(PY_LDFLAGS) -o $@ Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) -Python/importlib_external.h: $(srcdir)/Lib/importlib/_bootstrap_external.py Programs/_freeze_importlib - if test "$(cross_compiling)" != "yes"; then \ - ./Programs/_freeze_importlib \ - $(srcdir)/Lib/importlib/_bootstrap_external.py Python/importlib_external.h; \ - fi +Python/importlib_external.h: @GENERATED_COMMENT@ $(srcdir)/Lib/importlib/_bootstrap_external.py Programs/_freeze_importlib + ./Programs/_freeze_importlib \ + $(srcdir)/Lib/importlib/_bootstrap_external.py Python/importlib_external.h -Python/importlib.h: $(srcdir)/Lib/importlib/_bootstrap.py Programs/_freeze_importlib - if test "$(cross_compiling)" != "yes"; then \ - ./Programs/_freeze_importlib \ - $(srcdir)/Lib/importlib/_bootstrap.py Python/importlib.h; \ - fi +Python/importlib.h: @GENERATED_COMMENT@ $(srcdir)/Lib/importlib/_bootstrap.py Programs/_freeze_importlib + ./Programs/_freeze_importlib \ + $(srcdir)/Lib/importlib/_bootstrap.py Python/importlib.h ############################################################################ @@ -788,22 +785,11 @@ Python/sysmodule.o: $(srcdir)/Python/sysmodule.c Makefile $(IO_OBJS): $(IO_H) -$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGEN) +$(GRAMMAR_H): @GENERATED_COMMENT@ $(GRAMMAR_INPUT) $(PGEN) @$(MKDIR_P) Include - # Avoid copying the file onto itself for an in-tree build - if test "$(cross_compiling)" != "yes"; then \ - $(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C); \ - else \ - cp $(srcdir)/Include/graminit.h $(GRAMMAR_H).tmp; \ - mv $(GRAMMAR_H).tmp $(GRAMMAR_H); \ - fi -$(GRAMMAR_C): $(GRAMMAR_H) - if test "$(cross_compiling)" != "yes"; then \ - touch $(GRAMMAR_C); \ - else \ - cp $(srcdir)/Python/graminit.c $(GRAMMAR_C).tmp; \ - mv $(GRAMMAR_C).tmp $(GRAMMAR_C); \ - fi + $(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) +$(GRAMMAR_C): @GENERATED_COMMENT@ $(GRAMMAR_H) + touch $(GRAMMAR_C) $(PGEN): $(PGENOBJS) $(CC) $(OPT) $(PY_LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN) @@ -880,7 +866,7 @@ Objects/dictobject.o: $(srcdir)/Objects/stringlib/eq.h Objects/setobject.o: $(srcdir)/Objects/stringlib/eq.h $(OPCODETARGETS_H): $(OPCODETARGETGEN_FILES) - $(OPCODETARGETGEN) $(OPCODETARGETS_H) + $(PYTHON_FOR_GEN) $(OPCODETARGETGEN) $(OPCODETARGETS_H) Python/ceval.o: $(OPCODETARGETS_H) $(srcdir)/Python/ceval_gil.h @@ -888,7 +874,7 @@ Python/frozen.o: Python/importlib.h Python/importlib_external.h Objects/typeobject.o: Objects/typeslots.inc Objects/typeslots.inc: $(srcdir)/Include/typeslots.h $(srcdir)/Objects/typeslots.py - $(PYTHON) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h > Objects/typeslots.inc + $(PYTHON_FOR_GEN) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h Objects/typeslots.inc ############################################################################ # Header files @@ -1026,7 +1012,7 @@ testuniversal: all platform # Like testall, but with only one pass and without multiple processes. # Run an optional script to include information about the build environment. -buildbottest: all platform +buildbottest: build_all platform -@if which pybuildbot.identify >/dev/null 2>&1; then \ pybuildbot.identify "CC='$(CC)'" "CXX='$(CXX)'"; \ fi @@ -1236,6 +1222,7 @@ LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \ importlib test/test_importlib test/test_importlib/builtin \ test/test_importlib/extension test/test_importlib/frozen \ test/test_importlib/import_ test/test_importlib/source \ + test/test_tools test/test_warnings test/test_warnings/data \ turtledemo \ multiprocessing multiprocessing/dummy \ unittest unittest/test unittest/test/testmock \ @@ -1355,7 +1342,7 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh # is not available in configure sed -e "s,@EXENAME@,$(BINDIR)/python$(LDVERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config.py # Replace makefile compat. variable references with shell script compat. ones; $(VAR) -> ${VAR} - sed -e 's,\$$(\([A-Za-z0-9_]*\)),\$$\{\1\},g' < Misc/python-config.sh >python-config + LC_ALL=C sed -e 's,\$$(\([A-Za-z0-9_]*\)),\$$\{\1\},g' < Misc/python-config.sh >python-config # On Darwin, always use the python version of the script, the shell # version doesn't use the compiler customizations that are provided # in python (_osx_support.py). @@ -1422,16 +1409,16 @@ libainstall: all python-config $(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh $(INSTALL_SCRIPT) python-config.py $(DESTDIR)$(LIBPL)/python-config.py $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(LDVERSION)-config - @if [ -s Programs/python.exp -a \ + @if [ -s Modules/python.exp -a \ "`echo $(MACHDEP) | sed 's/^\(...\).*/\1/'`" = "aix" ]; then \ echo; echo "Installing support files for building shared extension modules on AIX:"; \ - $(INSTALL_DATA) Programs/python.exp \ + $(INSTALL_DATA) Modules/python.exp \ $(DESTDIR)$(LIBPL)/python.exp; \ echo; echo "$(LIBPL)/python.exp"; \ $(INSTALL_SCRIPT) $(srcdir)/Modules/makexp_aix \ $(DESTDIR)$(LIBPL)/makexp_aix; \ echo "$(LIBPL)/makexp_aix"; \ - $(INSTALL_SCRIPT) $(srcdir)/Modules/ld_so_aix \ + $(INSTALL_SCRIPT) Modules/ld_so_aix \ $(DESTDIR)$(LIBPL)/ld_so_aix; \ echo "$(LIBPL)/ld_so_aix"; \ echo; echo "See Misc/AIX-NOTES for details."; \ @@ -1563,10 +1550,10 @@ autoconf: # Create a tags file for vi tags:: cd $(srcdir); \ - ctags -w -t Include/*.h; \ - for i in $(SRCDIRS); do ctags -w -t -a $$i/*.[ch]; \ + ctags -w Include/*.h; \ + for i in $(SRCDIRS); do ctags -w -a $$i/*.[ch]; \ done; \ - sort -o tags tags + LC_ALL=C sort -o tags tags # Create a tags file for GNU Emacs TAGS:: @@ -1609,7 +1596,7 @@ clean: pycremoval -rm -f pybuilddir.txt -rm -f Lib/lib2to3/*Grammar*.pickle -rm -f Programs/_testembed Programs/_freeze_importlib - -rm -rf build + -find build -type f -a ! -name '*.gc??' -exec rm -f {} ';' profile-removal: find . -name '*.gc??' -exec rm -f {} ';' @@ -1635,9 +1622,13 @@ distclean: clobber done -rm -f core Makefile Makefile.pre config.status \ Modules/Setup Modules/Setup.local Modules/Setup.config \ - Modules/ld_so_aix Programs/python.exp Misc/python.pc + Modules/ld_so_aix Modules/python.exp Misc/python.pc -rm -f python*-gdb.py - find $(srcdir)/[a-zA-Z]* '(' -name '*.fdc' -o -name '*~' \ + # Issue #28258: set LC_ALL to avoid issues with Estonian locale. + # Expansion is performed here by shell (spawned by make) itself before + # arguments are passed to find. So LC_ALL=C must be set as a separate + # command. + LC_ALL=C; find $(srcdir)/[a-zA-Z]* '(' -name '*.fdc' -o -name '*~' \ -o -name '[@,#]*' -o -name '*.old' \ -o -name '*.orig' -o -name '*.rej' \ -o -name '*.bak' ')' \ diff --git a/Misc/ACKS b/Misc/ACKS index 632c85c..59b7704 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -41,6 +41,7 @@ A. Amoroso Mark Anacker Shashwat Anand Anders Andersen +Tycho Andersen John Anderson Pehr Anderson Erik Andersén @@ -59,6 +60,7 @@ Alicia Arlen Jeffrey Armstrong Jason Asbahr David Ascher +Ammar Askar Chris AtLee Aymeric Augustin John Aycock @@ -154,6 +156,7 @@ Finn Bock Paul Boddie Matthew Boedicker Robin Boerdijk +Andra Bogildea David Bolen Wouter Bolsterlee Gawain Bolton @@ -186,6 +189,7 @@ Tom Bridgman Anthony Briggs Keith Briggs Tobias Brink +Dillon Brock Richard Brodie Michael Broghton Ammar Brohi @@ -217,12 +221,14 @@ Katherine Busch Ralph Butler Laurent De Buyst Zach Byrne +Vedran Čačić Nicolas Cadou Jp Calderone Arnaud Calmettes Daniel Calvelo Tony Campbell Brett Cannon +Tristan Carel Mike Carlton Pierre Carrier Terry Carroll @@ -313,6 +319,7 @@ Simon Cross Felipe Cruz Drew Csillag Joaquin Cuenca Abela +Sebastian Cufre John Cugini Tom Culliton Raúl Cumplido @@ -444,6 +451,7 @@ Frederik Fix Tom Flanagan Matt Fleming Hernán Martínez Foffani +Benjamin Fogle Artem Fokin Arnaud Fontaine Michael Foord @@ -569,6 +577,7 @@ Travis B. Hartwell Larry Hastings Tim Hatch Shane Hathaway +Michael Haubenwallner Janko Hauser Rycharde Hawkes Ben Hayden @@ -649,6 +658,7 @@ Jeremy Hylton Ludwig Hähne Gerhard Häring Fredrik Håård +Florian Höch Catalin Iacob Mihai Ibanescu Ali Ikinci @@ -773,6 +783,7 @@ Jeff Knupp Kubilay Kocak Greg Kochanski Manvisha Kodali +Niklas Koep Damon Kohler Marko Kohtala Vajrasky Kok @@ -831,6 +842,8 @@ Julia Lawall Chris Lawrence Mark Lawrence Chris Laws +Michael Layzell +Michael Lazar Brian Leair Mathieu Leduc-Hamel Amandine Lee @@ -939,6 +952,7 @@ Graham Matthews mattip Martin Matusiak Dieter Maurer +Lev Maximov Daniel May Madison May Lucas Maystre @@ -988,11 +1002,13 @@ Damien Miller Jason V. Miller Jay T. Miller Katie Miller +Oren Milman Roman Milner Julien Miotte Andrii V. Mishkovskyi Dom Mitchell Dustin J. Mitchell +Tim Mitchell Zubin Mithra Florian Mladitsch Doug Moen @@ -1112,6 +1128,7 @@ Alecsandru Patrascu Randy Pausch Samuele Pedroni Justin Peel +Loic Pefferkorn Marcel van der Peijl Berker Peksag Andreas Pelme @@ -1119,6 +1136,7 @@ Steven Pemberton Bo Peng Santiago Peresón George Peristerakis +Thomas Perl Mathieu Perreault Mark Perrego Trevor Perrin @@ -1187,6 +1205,7 @@ Burton Radons Abhilash Raj Shorya Raj Jeff Ramnani +Bayard Randel Varpu Rantala Brodie Rao Senko Rasic @@ -1256,6 +1275,7 @@ Guido van Rossum Just van Rossum Hugo van Rossum Saskia van Rossum +Robin Roth Clement Rouault Donald Wallace Rouse II Liam Routt @@ -1278,6 +1298,7 @@ James Rutherford Chris Ryland Bernt Røskar Brenna Constantina S. +Matthieu S Patrick Sabin Sébastien Sablé Suman Saha @@ -1342,6 +1363,7 @@ Daniel Shahaf Mark Shannon Ha Shao Richard Shapiro +Soumya Sharma Varun Sharma Daniel Shaulov Vlad Shcherbina @@ -1356,6 +1378,7 @@ Shiyao Ma Alex Shkop Joel Shprentz Yue Shuaijie +Jaysinh Shukla Terrel Shumway Eric Siegerman Paul Sijben @@ -1439,6 +1462,7 @@ Al Sweigart Thenault Sylvain Péter Szabó John Szakmeister +Piotr Szczepaniak Amir Szekely Maciej Szulik Arfrever Frehtes Taifersar Arahesis @@ -1447,6 +1471,7 @@ Takase Arihiro Indra Talip Neil Tallim Geoff Talvola +Anish Tambe Musashi Tamura William Tanksley Christian Tanzer @@ -1585,6 +1610,7 @@ Truida Wiedijk Felix Wiemann Gerry Wiener Frank Wierzbicki +Mariatta Wijaya Santoso Wijaya Chris Wilcox Bryce "Zooko" Wilcox-O'Hearn @@ -1631,6 +1657,7 @@ Xiang Zhang Robert Xiao Florent Xicluna Arnon Yaari +Alakshendra Yadav Hirokazu Yamamoto Ka-Ping Yee Jason Yeo @@ -1655,7 +1682,10 @@ Uwe Zessin Cheng Zhang Kai Zhu Tarek Ziadé +Jelle Zijlstra Gennadiy Zlobin Doug Zongker Peter Åstrand evilzero +Chi Hsuan Yen +Dhushyanth Ramasamy diff --git a/Misc/HISTORY b/Misc/HISTORY index 6782333..9655d4c 100644 --- a/Misc/HISTORY +++ b/Misc/HISTORY @@ -1131,7 +1131,7 @@ Library and http.client. Patch by EungJun Yi. - Issue #14777: tkinter may return undecoded UTF-8 bytes as a string when - accessing the Tk clipboard. Modify clipboad_get() to first request type + accessing the Tk clipboard. Modify clipboard_get() to first request type UTF8_STRING when no specific type is requested in an X11 windowing environment, falling back to the current default type STRING if that fails. Original patch by Thomas Kluyver. @@ -1339,7 +1339,7 @@ Core and Builtins Library ------- -- Issue #14768: os.path.expanduser('~/a') doesn't works correctly when HOME is '/'. +- Issue #14768: os.path.expanduser('~/a') doesn't work correctly when HOME is '/'. - Issue #14371: Support bzip2 in zipfile module. Patch by Serhiy Storchaka. @@ -2194,7 +2194,7 @@ Core and Builtins NULL). - Issue #10829: Refactor PyUnicode_FromFormat(), use the same function to parse - the format string in the 3 steps, fix crashs on invalid format strings. + the format string in the 3 steps, fix crashes on invalid format strings. - Issue #13007: whichdb should recognize gdbm 1.9 magic numbers. @@ -5693,7 +5693,7 @@ Library for reading). - hashlib has two new constant attributes: algorithms_guaranteed and - algorithms_avaiable that respectively list the names of hash algorithms + algorithms_available that respectively list the names of hash algorithms guaranteed to exist in all Python implementations and the names of hash algorithms available in the current process. @@ -7344,7 +7344,7 @@ Library - Issue #2846: Add support for gzip.GzipFile reading zero-padded files. Patch by Brian Curtin. -- Issue #7681: Use floor division in appropiate places in the wave module. +- Issue #7681: Use floor division in appropriate places in the wave module. - Issue #5372: Drop the reuse of .o files in Distutils' ccompiler (since Extension extra options may change the output without changing the .c @@ -9016,7 +9016,7 @@ Library - Issue #5976: Fixed Distutils test_check_environ. - Issue #5941: Distutils build_clib command was not working anymore because - of an incomplete costumization of the archiver command. Added ARFLAGS in the + of an incomplete customization of the archiver command. Added ARFLAGS in the Makefile besides AR and make Distutils use it. Original patch by David Cournapeau. @@ -10921,7 +10921,7 @@ Platforms - Support for BeOS and AtheOS was removed (according to PEP 11). -- Support for RiscOS, Irix, Tru64 was removed (alledgedly). +- Support for RiscOS, Irix, Tru64 was removed (allegedly). Tools/Demos ----------- @@ -12912,7 +12912,7 @@ Library - Bug #947906: An object oriented interface has been added to the calendar module. It's possible to generate HTML calendar now and the module can be called as a script (e.g. via ``python -mcalendar``). Localized month and - weekday names can be ouput (even if an exotic encoding is used) using + weekday names can be output (even if an exotic encoding is used) using special classes that use unicode. Build @@ -13295,7 +13295,7 @@ Library ``True`` for ``!=``, and raises ``TypeError`` for other comparison operators. Because datetime is a subclass of date, comparing only the base class (date) members can still be done, if that's desired, by - forcing using of the approprate date method; e.g., + forcing using of the appropriate date method; e.g., ``a_date.__eq__(a_datetime)`` is true if and only if the year, month and day members of ``a_date`` and ``a_datetime`` are equal. @@ -21545,7 +21545,7 @@ Thu Feb 18 20:51:50 1999 Fred Drake Bow to font-lock at the end of the docstring, since it throws stuff off. - Make sure the path paramter to readmodule() is a list before adding it + Make sure the path parameter to readmodule() is a list before adding it with sys.path, or the addition could fail. @@ -23445,7 +23445,7 @@ uudecode bug where it complaints about trailing garbage is still there decimal numbers). - In string.atof(), don't fail when the "re" module is unavailable. -Plug the ensueing security leak by supplying an empty __builtins__ +Plug the ensuing security leak by supplying an empty __builtins__ directory to eval(). - A bunch of small fixes and improvements to Tkinter.py. @@ -23597,7 +23597,7 @@ an underscore and used to initialize the pointer. - The warning about a thread still having a frame now only happens in verbose mode. -- Change the signal finialization so that it also resets the signal +- Change the signal finalization so that it also resets the signal handlers. After this has been called, our signal handlers are no longer active! @@ -23770,7 +23770,7 @@ Netscape on Windows/Mac). - copy.py: Make sure the objects returned by __getinitargs__() are kept alive (in the memo) to avoid a certain kind of nasty crash. (Not -easily reproducable because it requires a later call to +easily reproducible because it requires a later call to __getinitargs__() to return a tuple that happens to be allocated at the same address.) @@ -23970,7 +23970,7 @@ in Python. An example completer, rlcompleter.py, is provided. - The traceback.py module has a new function tb_lineno() by Marc-Andre Lemburg which extracts the line number from the linenumber table in -the code object. Apparently the traceback object doesn't contains the +the code object. Apparently the traceback object doesn't contain the right linenumber when -O is used. Rather than guessing whether -O is on or off, the module itself uses tb_lineno() unconditionally. @@ -26057,7 +26057,7 @@ machinery is moved to the new file importdl.c. module implementing deepcopy and normal (shallow) copy operations. See the library reference manual. -- Documentation strings for many objects types are accessible through +- Documentation strings for many object types are accessible through the __doc__ attribute. Modules, classes and functions support special syntax to initialize the __doc__ attribute: if the first statement consists of just a string literal, that string literal becomes the @@ -27402,7 +27402,7 @@ bullet-proof, after reports of (minor) trouble on certain platforms. There is now a script to patch Makefile and config.c to add a new optional built-in module: Addmodule.sh. Read the script before using! -Useing Addmodule.sh, all optional modules can now be configured at +Using Addmodule.sh, all optional modules can now be configured at compile time using Configure.py, so there are no modules left that require dynamic loading. @@ -27833,9 +27833,9 @@ SOCKET: symbolic constant definitions for socket options SUNAUDIODEV: symbolic constant definitions for sunaudiodef (sun only) -SV: symbolic constat definitions for sv (sgi only) +SV: symbolic constant definitions for sv (sgi only) -CD: symbolic constat definitions for cd (sgi only) +CD: symbolic constant definitions for cd (sgi only) New demos diff --git a/Misc/NEWS b/Misc/NEWS index 4ad2551..41cfdba 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -2,8 +2,702 @@ Python News +++++++++++ -What's New in Python 3.5.2 final? -================================= +What's New in Python 3.5.3? +=========================== + +Release date: 2017-01-16 + +There were no code changes between 3.5.3rc1 and 3.5.3 final. + + +What's New in Python 3.5.3 release candidate 1? +=============================================== + +Release date: 2017-01-02 + +Core and Builtins +----------------- + +- Issue #29073: bytearray formatting no longer truncates on first null byte. + +- Issue #28932: Do not include if it does not exist. + +- Issue #28147: Fix a memory leak in split-table dictionaries: setattr() + must not convert combined table into split table. + +- Issue #25677: Correct the positioning of the syntax error caret for + indented blocks. Based on patch by Michael Layzell. + +- Issue #29000: Fixed bytes formatting of octals with zero padding in alternate + form. + +- Issue #28512: Fixed setting the offset attribute of SyntaxError by + PyErr_SyntaxLocationEx() and PyErr_SyntaxLocationObject(). + +- Issue #28991: functools.lru_cache() was susceptible to an obscure reentrancy + bug caused by a monkey-patched len() function. + +- Issue #28648: Fixed crash in Py_DecodeLocale() in debug build on Mac OS X + when decode astral characters. Patch by Xiang Zhang. + +- Issue #19398: Extra slash no longer added to sys.path components in case of + empty compile-time PYTHONPATH components. + +- Issue #28426: Fixed potential crash in PyUnicode_AsDecodedObject() in debug + build. + +- Issue #23782: Fixed possible memory leak in _PyTraceback_Add() and exception + loss in PyTraceBack_Here(). + +- Issue #28379: Added sanity checks and tests for PyUnicode_CopyCharacters(). + Patch by Xiang Zhang. + +- Issue #28376: The type of long range iterator is now registered as Iterator. + Patch by Oren Milman. + +- Issue #28376: The constructor of range_iterator now checks that step is not 0. + Patch by Oren Milman. + +- Issue #26906: Resolving special methods of uninitialized type now causes + implicit initialization of the type instead of a fail. + +- Issue #18287: PyType_Ready() now checks that tp_name is not NULL. + Original patch by Niklas Koep. + +- Issue #24098: Fixed possible crash when AST is changed in process of + compiling it. + +- Issue #28350: String constants with null character no longer interned. + +- Issue #26617: Fix crash when GC runs during weakref callbacks. + +- Issue #27942: String constants now interned recursively in tuples and frozensets. + +- Issue #21578: Fixed misleading error message when ImportError called with + invalid keyword args. + +- Issue #28203: Fix incorrect type in error message from + ``complex(1.0, {2:3})``. Patch by Soumya Sharma. + +- Issue #27955: Fallback on reading /dev/urandom device when the getrandom() + syscall fails with EPERM, for example when blocked by SECCOMP. + +- Issue #28131: Fix a regression in zipimport's compile_source(). zipimport + should use the same optimization level as the interpreter. + +- Issue #25221: Fix corrupted result from PyLong_FromLong(0) when + Python is compiled with NSMALLPOSINTS = 0. + +- Issue #25758: Prevents zipimport from unnecessarily encoding a filename + (patch by Eryk Sun) + +- Issue #28189: dictitems_contains no longer swallows compare errors. + (Patch by Xiang Zhang) + +- Issue #27812: Properly clear out a generator's frame's backreference to the + generator to prevent crashes in frame.clear(). + +- Issue #27811: Fix a crash when a coroutine that has not been awaited is + finalized with warnings-as-errors enabled. + +- Issue #27587: Fix another issue found by PVS-Studio: Null pointer check + after use of 'def' in _PyState_AddModule(). + Initial patch by Christian Heimes. + +- Issue #26020: set literal evaluation order did not match documented behaviour. + +- Issue #27782: Multi-phase extension module import now correctly allows the + ``m_methods`` field to be used to add module level functions to instances + of non-module types returned from ``Py_create_mod``. Patch by Xiang Zhang. + +- Issue #27936: The round() function accepted a second None argument + for some types but not for others. Fixed the inconsistency by + accepting None for all numeric types. + +- Issue #27487: Warn if a submodule argument to "python -m" or + runpy.run_module() is found in sys.modules after parent packages are + imported, but before the submodule is executed. + +- Issue #27558: Fix a SystemError in the implementation of "raise" statement. + In a brand new thread, raise a RuntimeError since there is no active + exception to reraise. Patch written by Xiang Zhang. + +- Issue #27419: Standard __import__() no longer look up "__import__" in globals + or builtins for importing submodules or "from import". Fixed handling an + error of non-string package name. + +- Issue #27083: Respect the PYTHONCASEOK environment variable under Windows. + +- Issue #27514: Make having too many statically nested blocks a SyntaxError + instead of SystemError. + +- Issue #27473: Fixed possible integer overflow in bytes and bytearray + concatenations. Patch by Xiang Zhang. + +- Issue #27507: Add integer overflow check in bytearray.extend(). Patch by + Xiang Zhang. + +- Issue #27581: Don't rely on wrapping for overflow check in + PySequence_Tuple(). Patch by Xiang Zhang. + +- Issue #27443: __length_hint__() of bytearray iterators no longer return a + negative integer for a resized bytearray. + +- Issue #27942: Fix memory leak in codeobject.c + +Library +------- + +- Issue #15812: inspect.getframeinfo() now correctly shows the first line of + a context. Patch by Sam Breese. + +- Issue #29094: Offsets in a ZIP file created with extern file object and modes + "w" and "x" now are relative to the start of the file. + +- Issue #13051: Fixed recursion errors in large or resized + curses.textpad.Textbox. Based on patch by Tycho Andersen. + +- Issue #29119: Fix weakrefs in the pure python version of + collections.OrderedDict move_to_end() method. + Contributed by Andra Bogildea. + +- Issue #9770: curses.ascii predicates now work correctly with negative + integers. + +- Issue #28427: old keys should not remove new values from + WeakValueDictionary when collecting from another thread. + +- Issue 28923: Remove editor artifacts from Tix.py. + +- Issue #28871: Fixed a crash when deallocate deep ElementTree. + +- Issue #19542: Fix bugs in WeakValueDictionary.setdefault() and + WeakValueDictionary.pop() when a GC collection happens in another + thread. + +- Issue #20191: Fixed a crash in resource.prlimit() when pass a sequence that + doesn't own its elements as limits. + +- Issue #28779: multiprocessing.set_forkserver_preload() would crash the + forkserver process if a preloaded module instantiated some + multiprocessing objects such as locks. + +- Issue #28847: dbm.dumb now supports reading read-only files and no longer + writes the index file when it is not changed. + +- Issue #25659: In ctypes, prevent a crash calling the from_buffer() and + from_buffer_copy() methods on abstract classes like Array. + +- Issue #28732: Fix crash in os.spawnv() with no elements in args + +- Issue #28485: Always raise ValueError for negative + compileall.compile_dir(workers=...) parameter, even when multithreading is + unavailable. + +- Issue #28387: Fixed possible crash in _io.TextIOWrapper deallocator when + the garbage collector is invoked in other thread. Based on patch by + Sebastian Cufre. + +- Issue #27517: LZMA compressor and decompressor no longer raise exceptions if + given empty data twice. Patch by Benjamin Fogle. + +- Issue #28549: Fixed segfault in curses's addch() with ncurses6. + +- Issue #28449: tarfile.open() with mode "r" or "r:" now tries to open a tar + file with compression before trying to open it without compression. Otherwise + it had 50% chance failed with ignore_zeros=True. + +- Issue #23262: The webbrowser module now supports Firefox 36+ and derived + browsers. Based on patch by Oleg Broytman. + +- Issue #27939: Fixed bugs in tkinter.ttk.LabeledScale and tkinter.Scale caused + by representing the scale as float value internally in Tk. tkinter.IntVar + now works if float value is set to underlying Tk variable. + +- Issue #28255: calendar.TextCalendar().prmonth() no longer prints a space + at the start of new line after printing a month's calendar. Patch by + Xiang Zhang. + +- Issue #20491: The textwrap.TextWrapper class now honors non-breaking spaces. + Based on patch by Kaarle Ritvanen. + +- Issue #28353: os.fwalk() no longer fails on broken links. + +- Issue #25464: Fixed HList.header_exists() in tkinter.tix module by addin + a workaround to Tix library bug. + +- Issue #28488: shutil.make_archive() no longer add entry "./" to ZIP archive. + +- Issue #24452: Make webbrowser support Chrome on Mac OS X. + +- Issue #20766: Fix references leaked by pdb in the handling of SIGINT + handlers. + +- Issue #26293: Fixed writing ZIP files that starts not from the start of the + file. Offsets in ZIP file now are relative to the start of the archive in + conforming to the specification. + +- Issue #28321: Fixed writing non-BMP characters with binary format in plistlib. + +- Issue #28322: Fixed possible crashes when unpickle itertools objects from + incorrect pickle data. Based on patch by John Leitch. + +- Fix possible integer overflows and crashes in the mmap module with unusual + usage patterns. + +- Issue #1703178: Fix the ability to pass the --link-objects option to the + distutils build_ext command. + +- Issue #28253: Fixed calendar functions for extreme months: 0001-01 + and 9999-12. + + Methods itermonthdays() and itermonthdays2() are reimplemented so + that they don't call itermonthdates() which can cause datetime.date + under/overflow. + +- Issue #28275: Fixed possible use after free in the decompress() + methods of the LZMADecompressor and BZ2Decompressor classes. + Original patch by John Leitch. + +- Issue #27897: Fixed possible crash in sqlite3.Connection.create_collation() + if pass invalid string-like object as a name. Patch by Xiang Zhang. + +- Issue #18893: Fix invalid exception handling in Lib/ctypes/macholib/dyld.py. + Patch by Madison May. + +- Issue #27611: Fixed support of default root window in the tkinter.tix module. + +- Issue #27348: In the traceback module, restore the formatting of exception + messages like "Exception: None". This fixes a regression introduced in + 3.5a2. + +- Issue #25651: Allow falsy values to be used for msg parameter of subTest(). + +- Issue #27932: Prevent memory leak in win32_ver(). + +- Fix UnboundLocalError in socket._sendfile_use_sendfile. + +- Issue #28075: Check for ERROR_ACCESS_DENIED in Windows implementation of + os.stat(). Patch by Eryk Sun. + +- Issue #25270: Prevent codecs.escape_encode() from raising SystemError when + an empty bytestring is passed. + +- Issue #28181: Get antigravity over HTTPS. Patch by Kaartic Sivaraam. + +- Issue #25895: Enable WebSocket URL schemes in urllib.parse.urljoin. + Patch by Gergely Imreh and Markus Holtermann. + +- Issue #27599: Fixed buffer overrun in binascii.b2a_qp() and binascii.a2b_qp(). + +- Issue #19003:m email.generator now replaces only \r and/or \n line + endings, per the RFC, instead of all unicode line endings. + +- Issue #28019: itertools.count() no longer rounds non-integer step in range + between 1.0 and 2.0 to 1. + +- Issue #25969: Update the lib2to3 grammar to handle the unpacking + generalizations added in 3.5. + +- Issue #14977: mailcap now respects the order of the lines in the mailcap + files ("first match"), as required by RFC 1542. Patch by Michael Lazar. + +- Issue #24594: Validates persist parameter when opening MSI database + +- Issue #17582: xml.etree.ElementTree nows preserves whitespaces in attributes + (Patch by Duane Griffin. Reviewed and approved by Stefan Behnel.) + +- Issue #28047: Fixed calculation of line length used for the base64 CTE + in the new email policies. + +- Issue #27445: Don't pass str(_charset) to MIMEText.set_payload(). + Patch by Claude Paroz. + +- Issue #22450: urllib now includes an "Accept: */*" header among the + default headers. This makes the results of REST API requests more + consistent and predictable especially when proxy servers are involved. + +- lib2to3.pgen3.driver.load_grammar() now creates a stable cache file + between runs given the same Grammar.txt input regardless of the hash + randomization setting. + +- Issue #27570: Avoid zero-length memcpy() etc calls with null source + pointers in the "ctypes" and "array" modules. + +- Issue #22233: Break email header lines *only* on the RFC specified CR and LF + characters, not on arbitrary unicode line breaks. This also fixes a bug in + HTTP header parsing. + +- Issue 27988: Fix email iter_attachments incorrect mutation of payload list. + +- Issue #27691: Fix ssl module's parsing of GEN_RID subject alternative name + fields in X.509 certs. + +- Issue #27850: Remove 3DES from ssl module's default cipher list to counter + measure sweet32 attack (CVE-2016-2183). + +- Issue #27766: Add ChaCha20 Poly1305 to ssl module's default ciper list. + (Required OpenSSL 1.1.0 or LibreSSL). + +- Issue #26470: Port ssl and hashlib module to OpenSSL 1.1.0. + +- Remove support for passing a file descriptor to os.access. It never worked but + previously didn't raise. + +- Issue #12885: Fix error when distutils encounters symlink. + +- Issue #27881: Fixed possible bugs when setting sqlite3.Connection.isolation_level. + Based on patch by Xiang Zhang. + +- Issue #27861: Fixed a crash in sqlite3.Connection.cursor() when a factory + creates not a cursor. Patch by Xiang Zhang. + +- Issue #19884: Avoid spurious output on OS X with Gnu Readline. + +- Issue #27706: Restore deterministic behavior of random.Random().seed() + for string seeds using seeding version 1. Allows sequences of calls + to random() to exactly match those obtained in Python 2. + Patch by Nofar Schnider. + +- Issue #10513: Fix a regression in Connection.commit(). Statements should + not be reset after a commit. + +- A new version of typing.py from https://github.com/python/typing: + - Collection (only for 3.6) (Issue #27598) + - Add FrozenSet to __all__ (upstream #261) + - fix crash in _get_type_vars() (upstream #259) + - Remove the dict constraint in ForwardRef._eval_type (upstream #252) + +- Issue #27539: Fix unnormalised ``Fraction.__pow__`` result in the case + of negative exponent and negative base. + +- Issue #21718: cursor.description is now available for queries using CTEs. + +- Issue #2466: posixpath.ismount now correctly recognizes mount points which + the user does not have permission to access. + +- Issue #27773: Correct some memory management errors server_hostname in + _ssl.wrap_socket(). + +- Issue #26750: unittest.mock.create_autospec() now works properly for + subclasses of property() and other data descriptors. + +- In the curses module, raise an error if window.getstr() or window.instr() is + passed a negative value. + +- Issue #27783: Fix possible usage of uninitialized memory in + operator.methodcaller. + +- Issue #27774: Fix possible Py_DECREF on unowned object in _sre. + +- Issue #27760: Fix possible integer overflow in binascii.b2a_qp. + +- Issue #27758: Fix possible integer overflow in the _csv module for large + record lengths. + +- Issue #27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the + HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates + that the script is in CGI mode. + +- Issue #27656: Do not assume sched.h defines any SCHED_* constants. + +- Issue #27130: In the "zlib" module, fix handling of large buffers + (typically 4 GiB) when compressing and decompressing. Previously, inputs + were limited to 4 GiB, and compression and decompression operations did not + properly handle results of 4 GiB. + +- Issue #27533: Release GIL in nt._isdir + +- Issue #17711: Fixed unpickling by the persistent ID with protocol 0. + Original patch by Alexandre Vassalotti. + +- Issue #27522: Avoid an unintentional reference cycle in email.feedparser. + +- Issue #26844: Fix error message for imp.find_module() to refer to 'path' + instead of 'name'. Patch by Lev Maximov. + +- Issue #23804: Fix SSL zero-length recv() calls to not block and not raise + an error about unclean EOF. + +- Issue #27466: Change time format returned by http.cookie.time2netscape, + confirming the netscape cookie format and making it consistent with + documentation. + +- Issue #26664: Fix activate.fish by removing mis-use of ``$``. + +- Issue #22115: Fixed tracing Tkinter variables: trace_vdelete() with wrong + mode no longer break tracing, trace_vinfo() now always returns a list of + pairs of strings, tracing in the "u" mode now works. + +- Fix a scoping issue in importlib.util.LazyLoader which triggered an + UnboundLocalError when lazy-loading a module that was already put into + sys.modules. + +- Issue #27079: Fixed curses.ascii functions isblank(), iscntrl() and ispunct(). + +- Issue #26754: Some functions (compile() etc) accepted a filename argument + encoded as an iterable of integers. Now only strings and byte-like objects + are accepted. + +- Issue #27048: Prevents distutils failing on Windows when environment + variables contain non-ASCII characters + +- Issue #27330: Fixed possible leaks in the ctypes module. + +- Issue #27238: Got rid of bare excepts in the turtle module. Original patch + by Jelle Zijlstra. + +- Issue #27122: When an exception is raised within the context being managed + by a contextlib.ExitStack() and one of the exit stack generators + catches and raises it in a chain, do not re-raise the original exception + when exiting, let the new chained one through. This avoids the PEP 479 + bug described in issue25782. + +- [Security] Issue #27278: Fix os.urandom() implementation using getrandom() on + Linux. Truncate size to INT_MAX and loop until we collected enough random + bytes, instead of casting a directly Py_ssize_t to int. + +- Issue #26386: Fixed ttk.TreeView selection operations with item id's + containing spaces. + +- [Security] Issue #22636: Avoid shell injection problems with + ctypes.util.find_library(). + +- Issue #16182: Fix various functions in the "readline" module to use the + locale encoding, and fix get_begidx() and get_endidx() to return code point + indexes. + +- Issue #27392: Add loop.connect_accepted_socket(). + Patch by Jim Fulton. + +- Issue #27930: Improved behaviour of logging.handlers.QueueListener. + Thanks to Paulo Andrade and Petr Viktorin for the analysis and patch. + +- Issue #21201: Improves readability of multiprocessing error message. Thanks + to Wojciech Walczak for patch. + +- Issue #27456: asyncio: Set TCP_NODELAY by default. + +- Issue #27906: Fix socket accept exhaustion during high TCP traffic. + Patch by Kevin Conway. + +- Issue #28174: Handle when SO_REUSEPORT isn't properly supported. + Patch by Seth Michael Larson. + +- Issue #26654: Inspect functools.partial in asyncio.Handle.__repr__. + Patch by iceboy. + +- Issue #26909: Fix slow pipes IO in asyncio. + Patch by INADA Naoki. + +- Issue #28176: Fix callbacks race in asyncio.SelectorLoop.sock_connect. + +- Issue #27759: Fix selectors incorrectly retain invalid file descriptors. + Patch by Mark Williams. + +- Issue #28368: Refuse monitoring processes if the child watcher has + no loop attached. + Patch by Vincent Michel. + +- Issue #28369: Raise RuntimeError when transport's FD is used with + add_reader, add_writer, etc. + +- Issue #28370: Speedup asyncio.StreamReader.readexactly. + Patch by Коренберг Марк. + +- Issue #28371: Deprecate passing asyncio.Handles to run_in_executor. + +- Issue #28372: Fix asyncio to support formatting of non-python coroutines. + +- Issue #28399: Remove UNIX socket from FS before binding. + Patch by Коренберг Марк. + +- Issue #27972: Prohibit Tasks to await on themselves. + +- Issue #26923: Fix asyncio.Gather to refuse being cancelled once all + children are done. + Patch by Johannes Ebke. + +- Issue #26796: Don't configure the number of workers for default + threadpool executor. + Initial patch by Hans Lawrenz. + +- Issue #28600: Optimize loop.call_soon(). + +- Issue #28613: Fix get_event_loop() return the current loop if + called from coroutines/callbacks. + +- Issue #28639: Fix inspect.isawaitable to always return bool + Patch by Justin Mayfield. + +- Issue #28652: Make loop methods reject socket kinds they do not support. + +- Issue #28653: Fix a refleak in functools.lru_cache. + +- Issue #28703: Fix asyncio.iscoroutinefunction to handle Mock objects. + +- Issue #24142: Reading a corrupt config file left the parser in an + invalid state. Original patch by Florian Höch. + +- Issue #28990: Fix SSL hanging if connection is closed before handshake + completed. + (Patch by HoHo-Ho) + +IDLE +---- + +- Issue #15308: Add 'interrupt execution' (^C) to Shell menu. + Patch by Roger Serwy, updated by Bayard Randel. + +- Issue #27922: Stop IDLE tests from 'flashing' gui widgets on the screen. + +- Add version to title of IDLE help window. + +- Issue #25564: In section on IDLE -- console differences, mention that + using exec means that __builtins__ is defined for each statement. + +- Issue #27714: text_textview and test_autocomplete now pass when re-run + in the same process. This occurs when test_idle fails when run with the + -w option but without -jn. Fix warning from test_config. + +- Issue #25507: IDLE no longer runs buggy code because of its tkinter imports. + Users must include the same imports required to run directly in Python. + +- Issue #27452: add line counter and crc to IDLE configHandler test dump. + +- Issue #27365: Allow non-ascii chars in IDLE NEWS.txt, for contributor names. + +- Issue #27245: IDLE: Cleanly delete custom themes and key bindings. + Previously, when IDLE was started from a console or by import, a cascade + of warnings was emitted. Patch by Serhiy Storchaka. + +C API +----- + +- Issue #28808: PyUnicode_CompareWithASCIIString() now never raises exceptions. + +- Issue #26754: PyUnicode_FSDecoder() accepted a filename argument encoded as + an iterable of integers. Now only strings and bytes-like objects are accepted. + +Documentation +------------- + +- Issue #28513: Documented command-line interface of zipfile. + +Tests +----- + +- Issue #28950: Disallow -j0 to be combined with -T/-l/-M in regrtest + command line arguments. + +- Issue #28666: Now test.support.rmtree is able to remove unwritable or + unreadable directories. + +- Issue #23839: Various caches now are cleared before running every test file. + +- Issue #28409: regrtest: fix the parser of command line arguments. + +- Issue #27787: Call gc.collect() before checking each test for "dangling + threads", since the dangling threads are weak references. + +- Issue #27369: In test_pyexpat, avoid testing an error message detail that + changed in Expat 2.2.0. + +Tools/Demos +----------- + +- Issue #27952: Get Tools/scripts/fixcid.py working with Python 3 and the + current "re" module, avoid invalid Python backslash escapes, and fix a bug + parsing escaped C quote signs. + +- Issue #27332: Fixed the type of the first argument of module-level functions + generated by Argument Clinic. Patch by Petr Viktorin. + +- Issue #27418: Fixed Tools/importbench/importbench.py. + +Windows +------- + +- Issue #28251: Improvements to help manuals on Windows. + +- Issue #28110: launcher.msi has different product codes between 32-bit and + 64-bit + +- Issue #25144: Ensures TargetDir is set before continuing with custom + install. + +- Issue #27469: Adds a shell extension to the launcher so that drag and drop + works correctly. + +- Issue #27309: Enabled proper Windows styles in python[w].exe manifest. + +Build +----- + +- Issue #29080: Removes hard dependency on hg.exe from PCBuild/build.bat + +- Issue #23903: Added missed names to PC/python3.def. + +- Issue #10656: Fix out-of-tree building on AIX. Patch by Tristan Carel and + Michael Haubenwallner. + +- Issue #26359: Rename --with-optimiations to --enable-optimizations. + +- Issue #28444: Fix missing extensions modules when cross compiling. + +- Issue #28248: Update Windows build and OS X installers to use OpenSSL 1.0.2j. + +- Issue #28258: Fixed build with Estonian locale (python-config and distclean + targets in Makefile). Patch by Arfrever Frehtes Taifersar Arahesis. + +- Issue #26661: setup.py now detects system libffi with multiarch wrapper. + +- Issue #28066: Fix the logic that searches build directories for generated + include files when building outside the source tree. + +- Issue #15819: Remove redundant include search directory option for building + outside the source tree. + +- Issue #27566: Fix clean target in freeze makefile (patch by Lisa Roach) + +- Issue #27705: Update message in validate_ucrtbase.py + +- Issue #27983: Cause lack of llvm-profdata tool when using clang as + required for PGO linking to be a configure time error rather than + make time when --with-optimizations is enabled. Also improve our + ability to find the llvm-profdata tool on MacOS and some Linuxes. + +- Issue #26307: The profile-opt build now applies PGO to the built-in modules. + +- Issue #26359: Add the --with-optimizations configure flag. + +- Issue #27713: Suppress spurious build warnings when updating importlib's + bootstrap files. Patch by Xiang Zhang + +- Issue #25825: Correct the references to Modules/python.exp and ld_so_aix, + which are required on AIX. This updates references to an installation path + that was changed in 3.2a4, and undoes changed references to the build tree + that were made in 3.5.0a1. + +- Issue #27453: CPP invocation in configure must use CPPFLAGS. Patch by + Chi Hsuan Yen. + +- Issue #27641: The configure script now inserts comments into the makefile + to prevent the pgen and _freeze_importlib executables from being cross- + compiled. + +- Issue #26662: Set PYTHON_FOR_GEN in configure as the Python program to be + used for file generation during the build. + +- Issue #10910: Avoid C++ compilation errors on FreeBSD and OS X. + Also update FreedBSD version checks for the original ctype UTF-8 workaround. + +- Issue #28676: Prevent missing 'getentropy' declaration warning on macOS. + Patch by Gareth Rees. + + +What's New in Python 3.5.2? +=========================== Release date: 2016-06-26 @@ -129,7 +823,8 @@ Core and Builtins This allows sys.getsize() to work correctly with their subclasses with __slots__ defined. -- Issue #25709: Fixed problem with in-place string concatenation and utf-8 cache. +- Issue #25709: Fixed problem with in-place string concatenation and utf-8 + cache. - Issue #27147: Mention PEP 420 in the importlib docs. @@ -160,10 +855,10 @@ Core and Builtins Library ------- -- Issue #26556: Update expat to 2.1.1, fixes CVE-2015-1283. +- [Security] Issue #26556: Update expat to 2.1.1, fixes CVE-2015-1283. -- Fix TLS stripping vulnerability in smptlib, CVE-2016-0772. Reported by Team - Oststrom +- [Security] Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. + Reported by Team Oststrom - Issue #21386: Implement missing IPv4Address.is_global property. It was documented since 07a5610bae9d. Initial patch by Roger Luethi. @@ -187,9 +882,10 @@ Library - Issue #21313: Fix the "platform" module to tolerate when sys.version contains truncated build information. -- Issue #26839: On Linux, :func:`os.urandom` now calls ``getrandom()`` with - ``GRND_NONBLOCK`` to fall back on reading ``/dev/urandom`` if the urandom - entropy pool is not initialized yet. Patch written by Colm Buckley. +- [Security] Issue #26839: On Linux, :func:`os.urandom` now calls + ``getrandom()`` with ``GRND_NONBLOCK`` to fall back on reading + ``/dev/urandom`` if the urandom entropy pool is not initialized yet. Patch + written by Colm Buckley. - Issue #27164: In the zlib module, allow decompressing raw Deflate streams with a predefined zdict. Based on patch by Xiang Zhang. @@ -295,9 +991,9 @@ Library - Issue #24838: tarfile's ustar and gnu formats now correctly calculate name and link field limits for multibyte character encodings like utf-8. -- Issue #26657: Fix directory traversal vulnerability with http.server on - Windows. This fixes a regression that was introduced in 3.3.4rc1 and - 3.4.0rc1. Based on patch by Philipp Hagemeister. +- [Security] Issue #26657: Fix directory traversal vulnerability with + http.server on Windows. This fixes a regression that was introduced in + 3.3.4rc1 and 3.4.0rc1. Based on patch by Philipp Hagemeister. - Issue #26717: Stop encoding Latin-1-ized WSGI paths with UTF-8. Patch by Anthony Sottile. @@ -344,8 +1040,8 @@ Library - Issue #26560: Avoid potential ValueError in BaseHandler.start_response. Initial patch by Peter Inglesby. -- Issue #26313: ssl.py _load_windows_store_certs fails if windows cert store - is empty. Patch by Baji. +- [Security] Issue #26313: ssl.py _load_windows_store_certs fails if windows + cert store is empty. Patch by Baji. - Issue #26569: Fix :func:`pyclbr.readmodule` and :func:`pyclbr.readmodule_ex` to support importing packages. @@ -374,7 +1070,8 @@ Library The bufsize parameter is no longer used. - Issue #2202: Fix UnboundLocalError in - AbstractDigestAuthHandler.get_algorithm_impls. Initial patch by Mathieu Dupuy. + AbstractDigestAuthHandler.get_algorithm_impls. Initial patch by Mathieu + Dupuy. - Issue #25718: Fixed pickling and copying the accumulate() iterator with total is None. @@ -406,7 +1103,8 @@ Library the connected socket) when verify_request() returns false. Patch by Aviv Palivoda. -- Issue #25939: On Windows open the cert store readonly in ssl.enum_certificates. +- [Security] Issue #25939: On Windows open the cert store readonly in + ssl.enum_certificates. - Issue #25995: os.walk() no longer uses FDs proportional to the tree depth. @@ -612,6 +1310,9 @@ IDLE Documentation ------------- +- Issue #19489: Moved the search box from the sidebar to the header and footer + of each page. Patch by Ammar Askar. + - Issue #24136: Document the new PEP 448 unpacking syntax of 3.5. - Issue #26736: Used HTTPS for external links in the documentation if possible. @@ -1810,8 +2511,8 @@ Library - Issue #1322: platform.dist() and platform.linux_distribution() functions are now deprecated. Initial patch by Vajrasky Kok. -- Issue #22486: Added the math.gcd() function. The fractions.gcd() function now is - deprecated. Based on patch by Mark Dickinson. +- Issue #22486: Added the math.gcd() function. The fractions.gcd() function + now is deprecated. Based on patch by Mark Dickinson. - Issue #24064: Property() docstrings are now writeable. (Patch by Berker Peksag.) @@ -1871,7 +2572,7 @@ Library JoinableQueue was merged with Queue). - Issue #23908: os functions now reject paths with embedded null character - on Windows instead of silently truncate them. + on Windows instead of silently truncating them. - Issue #23728: binascii.crc_hqx() could return an integer outside of the range 0-0xffff for empty data. @@ -2061,7 +2762,7 @@ Library the FTP connection failed to fix a ResourceWarning. - Issue #23853: :meth:`socket.socket.sendall` does no more reset the socket - timeout each time data is sent successfuly. The socket timeout is now the + timeout each time data is sent successfully. The socket timeout is now the maximum total duration to send all data. - Issue #22721: An order of multiline pprint output of set or dict containing @@ -3070,7 +3771,7 @@ Library - Issue #18643: Add socket.socketpair() on Windows. -- Issue #22435: Fix a file descriptor leak when SocketServer bind fails. +- Issue #22435: Fix a file descriptor leak when socketserver bind fails. - Issue #13096: Fixed segfault in CTypes POINTER handling of large values. @@ -3124,6 +3825,12 @@ Library - Issue #20218: Added convenience methods read_text/write_text and read_bytes/ write_bytes to pathlib.Path objects. +- Issue #22396: On 32-bit AIX platform, don't expose os.posix_fadvise() nor + os.posix_fallocate() because their prototypes in system headers are wrong. + +- Issue #22517: When an io.BufferedRWPair object is deallocated, clear its + weakrefs. + - Issue #22437: Number of capturing groups in regular expression is no longer limited by 100. @@ -3201,7 +3908,7 @@ Library - Issue #22168: Prevent turtle AttributeError with non-default Canvas on OS X. - Issue #21147: sqlite3 now raises an exception if the request contains a null - character instead of truncate it. Based on patch by Victor Stinner. + character instead of truncating it. Based on patch by Victor Stinner. - Issue #13968: The glob module now supports recursive search in subdirectories using the "**" pattern. @@ -4053,7 +4760,7 @@ Build an explicit runtime library dependency. - Issue #17861: Tools/scripts/generate_opcode_h.py automatically regenerates - Include/opcode.h from Lib/opcode.py if the later gets any change. + Include/opcode.h from Lib/opcode.py if the latter gets any change. - Issue #20644: OS X installer build support for documentation build changes in 3.4.1: assume externally supplied sphinx-build is available in /usr/bin. @@ -4275,7 +4982,7 @@ Tools/Demos - Issue #22120: For functions using an unsigned integer return converter, Argument Clinic now generates a cast to that type for the comparison - to -1 in the generated code. (This supresses a compilation warning.) + to -1 in the generated code. (This suppresses a compilation warning.) - Issue #18974: Tools/scripts/diff.py now uses argparse instead of optparse. @@ -4469,7 +5176,7 @@ Core and Builtins - Issue #20588: Make Python-ast.c C89 compliant. -- Issue #20437: Fixed 22 potential bugs when deleting objects references. +- Issue #20437: Fixed 22 potential bugs when deleting object references. - Issue #20500: Displaying an exception at interpreter shutdown no longer risks triggering an assertion failure in PyObject_Str. @@ -5374,8 +6081,8 @@ Core and Builtins when the creation of the replacement exception won't lose any information. - Issue #19466: Clear the frames of daemon threads earlier during the - Python shutdown to call objects destructors. So "unclosed file" resource - warnings are now corretly emitted for daemon threads. + Python shutdown to call object destructors. So "unclosed file" resource + warnings are now correctly emitted for daemon threads. - Issue #19514: Deduplicate some _Py_IDENTIFIER declarations. Patch by Andrei Dorian Duma. @@ -6305,7 +7012,7 @@ Library - Issue #18709: Fix CVE-2013-4238. The SSL module now handles NULL bytes inside subjectAltName correctly. Formerly the module has used OpenSSL's - GENERAL_NAME_print() function to get the string represention of ASN.1 + GENERAL_NAME_print() function to get the string representation of ASN.1 strings for ``rfc822Name`` (email), ``dNSName`` (DNS) and ``uniformResourceIdentifier`` (URI). @@ -6398,7 +7105,7 @@ IDLE Documentation ------------- -- Issue #18743: Fix references to non-existant "StringIO" module. +- Issue #18743: Fix references to non-existent "StringIO" module. - Issue #18783: Removed existing mentions of Python long type in docstrings, error messages and comments. @@ -6962,7 +7669,7 @@ Library on Windows and adds no value over and above python -m pydoc ... - Issue #18155: The csv module now correctly handles csv files that use - a delimter character that has a special meaning in regexes, instead of + a delimiter character that has a special meaning in regexes, instead of throwing an exception. - Issue #14360: encode_quopri can now be successfully used as an encoder @@ -7337,7 +8044,7 @@ Library specifically addresses a stack misalignment issue on x86 and issues on some more recent platforms. -- Issue #8862: Fixed curses cleanup when getkey is interrputed by a signal. +- Issue #8862: Fixed curses cleanup when getkey is interrupted by a signal. - Issue #17443: imaplib.IMAP4_stream was using the default unbuffered IO in subprocess, but the imap code assumes buffered IO. In Python2 this diff --git a/Misc/coverity_model.c b/Misc/coverity_model.c index 493e7c1..749f2f0 100644 --- a/Misc/coverity_model.c +++ b/Misc/coverity_model.c @@ -30,7 +30,7 @@ typedef struct {} DIR; typedef struct {} RFILE; /* Python/pythonrun.c - * resourece leak false positive */ + * resource leak false positive */ void Py_FatalError(const char *msg) { __coverity_panic__(); @@ -140,7 +140,7 @@ static PyObject * build_struct_time(int y, int m, int d, int hh, int mm, int ss, int dstflag) { PyObject *result; - + __coverity_tainted_data_sanitize__(y); __coverity_tainted_data_sanitize__(m); __coverity_tainted_data_sanitize__(d); diff --git a/Misc/python.man b/Misc/python.man index 3d530d7..28f19b6 100644 --- a/Misc/python.man +++ b/Misc/python.man @@ -111,7 +111,7 @@ program. .TP .B \-B Don't write -.I .py[co] +.I .pyc files on import. See also PYTHONDONTWRITEBYTECODE. .TP .B \-b @@ -391,7 +391,7 @@ specifying \fB\-d\fP multiple times. .IP PYTHONDONTWRITEBYTECODE If this is set to a non-empty string it is equivalent to specifying the \fB\-B\fP option (don't try to write -.I .py[co] +.I .pyc files). .IP PYTHONINSPECT If this is set to a non-empty string it is equivalent to specifying diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index e3e0eb1..67e1b65 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -534,8 +534,10 @@ decompress(BZ2Decompressor *d, char *data, size_t len, Py_ssize_t max_length) } result = decompress_buf(d, max_length); - if(result == NULL) + if(result == NULL) { + bzs->next_in = NULL; return NULL; + } if (d->eof) { d->needs_input = 0; diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c index 7575773..9b1194e 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -64,8 +64,8 @@ all lower case letters, and either return None, or a tuple of functions [clinic start generated code]*/ static PyObject * -_codecs_register(PyModuleDef *module, PyObject *search_function) -/*[clinic end generated code: output=d17608b6ad380eb8 input=369578467955cae4]*/ +_codecs_register(PyObject *module, PyObject *search_function) +/*[clinic end generated code: output=d1bf21e99db7d6d3 input=369578467955cae4]*/ { if (PyCodec_Register(search_function)) return NULL; @@ -82,8 +82,8 @@ Looks up a codec tuple in the Python codec registry and returns a CodecInfo obje [clinic start generated code]*/ static PyObject * -_codecs_lookup_impl(PyModuleDef *module, const char *encoding) -/*[clinic end generated code: output=798e41aff0c04ef6 input=3c572c0db3febe9c]*/ +_codecs_lookup_impl(PyObject *module, const char *encoding) +/*[clinic end generated code: output=9f0afa572080c36d input=3c572c0db3febe9c]*/ { return _PyCodec_Lookup(encoding); } @@ -104,9 +104,9 @@ codecs.register_error that can handle ValueErrors. [clinic start generated code]*/ static PyObject * -_codecs_encode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_encode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors) -/*[clinic end generated code: output=5c073f62249c8d7c input=cd5b685040ff61f0]*/ +/*[clinic end generated code: output=385148eb9a067c86 input=cd5b685040ff61f0]*/ { if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); @@ -131,9 +131,9 @@ codecs.register_error that can handle ValueErrors. [clinic start generated code]*/ static PyObject * -_codecs_decode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_decode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors) -/*[clinic end generated code: output=c81cbf6189a7f878 input=7702c0cc2fa1add6]*/ +/*[clinic end generated code: output=679882417dc3a0bd input=7702c0cc2fa1add6]*/ { if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); @@ -154,8 +154,8 @@ Purge the named codec from the internal codec lookup cache [clinic start generated code]*/ static PyObject * -_codecs__forget_codec_impl(PyModuleDef *module, const char *encoding) -/*[clinic end generated code: output=b56a9b99d2d28080 input=18d5d92d0e386c38]*/ +_codecs__forget_codec_impl(PyObject *module, const char *encoding) +/*[clinic end generated code: output=0bde9f0a5b084aa2 input=18d5d92d0e386c38]*/ { if (_PyCodec_Forget(encoding) < 0) { return NULL; @@ -181,9 +181,9 @@ _codecs.escape_decode [clinic start generated code]*/ static PyObject * -_codecs_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=648fa3e78d03e658 input=0018edfd99db714d]*/ +/*[clinic end generated code: output=505200ba8056979a input=0018edfd99db714d]*/ { PyObject *decoded = PyBytes_DecodeEscape(data->buf, data->len, errors, 0, NULL); @@ -198,9 +198,9 @@ _codecs.escape_encode [clinic start generated code]*/ static PyObject * -_codecs_escape_encode_impl(PyModuleDef *module, PyObject *data, +_codecs_escape_encode_impl(PyObject *module, PyObject *data, const char *errors) -/*[clinic end generated code: output=fcd6f34fe4111c50 input=da9ded00992f32f2]*/ +/*[clinic end generated code: output=4af1d477834bab34 input=da9ded00992f32f2]*/ { Py_ssize_t size; Py_ssize_t newsize; @@ -262,9 +262,9 @@ _codecs.unicode_internal_decode [clinic start generated code]*/ static PyObject * -_codecs_unicode_internal_decode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_decode_impl(PyObject *module, PyObject *obj, const char *errors) -/*[clinic end generated code: output=9fe47c2cd8807d92 input=8d57930aeda170c6]*/ +/*[clinic end generated code: output=edbfe175e09eff9a input=8d57930aeda170c6]*/ { if (PyUnicode_Check(obj)) { if (PyUnicode_READY(obj) < 0) @@ -295,9 +295,9 @@ _codecs.utf_7_decode [clinic start generated code]*/ static PyObject * -_codecs_utf_7_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_7_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=ca945e907e72e827 input=bc4d6247ecdb01e6]*/ +/*[clinic end generated code: output=0cd3a944a32a4089 input=bc4d6247ecdb01e6]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeUTF7Stateful(data->buf, data->len, @@ -315,9 +315,9 @@ _codecs.utf_8_decode [clinic start generated code]*/ static PyObject * -_codecs_utf_8_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_8_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=7309f9ff4ef5c9b6 input=39161d71e7422ee2]*/ +/*[clinic end generated code: output=10f74dec8d9bb8bf input=39161d71e7422ee2]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeUTF8Stateful(data->buf, data->len, @@ -335,9 +335,9 @@ _codecs.utf_16_decode [clinic start generated code]*/ static PyObject * -_codecs_utf_16_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=8d2fa0507d9bef2c input=f3cf01d1461007ce]*/ +/*[clinic end generated code: output=783b442abcbcc2d0 input=f3cf01d1461007ce]*/ { int byteorder = 0; /* This is overwritten unless final is true. */ @@ -357,9 +357,9 @@ _codecs.utf_16_le_decode [clinic start generated code]*/ static PyObject * -_codecs_utf_16_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=4fd621515ef4ce18 input=a77e3bf97335d94e]*/ +/*[clinic end generated code: output=899b9e6364379dcd input=a77e3bf97335d94e]*/ { int byteorder = -1; /* This is overwritten unless final is true. */ @@ -379,9 +379,9 @@ _codecs.utf_16_be_decode [clinic start generated code]*/ static PyObject * -_codecs_utf_16_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=792f4eacb3e1fa05 input=606f69fae91b5563]*/ +/*[clinic end generated code: output=49f6465ea07669c8 input=606f69fae91b5563]*/ { int byteorder = 1; /* This is overwritten unless final is true. */ @@ -409,9 +409,9 @@ _codecs.utf_16_ex_decode [clinic start generated code]*/ static PyObject * -_codecs_utf_16_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final) -/*[clinic end generated code: output=f136a186dc2defa0 input=f6e7f697658c013e]*/ +/*[clinic end generated code: output=0f385f251ecc1988 input=f6e7f697658c013e]*/ { /* This is overwritten unless final is true. */ Py_ssize_t consumed = data->len; @@ -433,9 +433,9 @@ _codecs.utf_32_decode [clinic start generated code]*/ static PyObject * -_codecs_utf_32_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=b7635e55857e8efb input=86d4f41c6c2e763d]*/ +/*[clinic end generated code: output=2fc961807f7b145f input=86d4f41c6c2e763d]*/ { int byteorder = 0; /* This is overwritten unless final is true. */ @@ -455,9 +455,9 @@ _codecs.utf_32_le_decode [clinic start generated code]*/ static PyObject * -_codecs_utf_32_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=a79d1787d8ddf988 input=d18b650772d188ba]*/ +/*[clinic end generated code: output=ec8f46b67a94f3e6 input=d18b650772d188ba]*/ { int byteorder = -1; /* This is overwritten unless final is true. */ @@ -477,9 +477,9 @@ _codecs.utf_32_be_decode [clinic start generated code]*/ static PyObject * -_codecs_utf_32_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=a8356b0f36779981 input=19c271b5d34926d8]*/ +/*[clinic end generated code: output=ff82bae862c92c4e input=19c271b5d34926d8]*/ { int byteorder = 1; /* This is overwritten unless final is true. */ @@ -507,9 +507,9 @@ _codecs.utf_32_ex_decode [clinic start generated code]*/ static PyObject * -_codecs_utf_32_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final) -/*[clinic end generated code: output=ab8c70977c1992f5 input=4af3e6ccfe34a076]*/ +/*[clinic end generated code: output=6bfb177dceaf4848 input=4af3e6ccfe34a076]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeUTF32Stateful(data->buf, data->len, @@ -528,9 +528,9 @@ _codecs.unicode_escape_decode [clinic start generated code]*/ static PyObject * -_codecs_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=d1aa63f2620c4999 input=49fd27d06813a7f5]*/ +/*[clinic end generated code: output=3ca3c917176b82ab input=49fd27d06813a7f5]*/ { PyObject *decoded = PyUnicode_DecodeUnicodeEscape(data->buf, data->len, errors); @@ -545,9 +545,9 @@ _codecs.raw_unicode_escape_decode [clinic start generated code]*/ static PyObject * -_codecs_raw_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_raw_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=0bf96cc182d81379 input=770903a211434ebc]*/ +/*[clinic end generated code: output=c98eeb56028070a6 input=770903a211434ebc]*/ { PyObject *decoded = PyUnicode_DecodeRawUnicodeEscape(data->buf, data->len, errors); @@ -562,9 +562,9 @@ _codecs.latin_1_decode [clinic start generated code]*/ static PyObject * -_codecs_latin_1_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_latin_1_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=66b916f5055aaf13 input=5cad0f1759c618ec]*/ +/*[clinic end generated code: output=07f3dfa3f72c7d8f input=5cad0f1759c618ec]*/ { PyObject *decoded = PyUnicode_DecodeLatin1(data->buf, data->len, errors); return codec_tuple(decoded, data->len); @@ -578,9 +578,9 @@ _codecs.ascii_decode [clinic start generated code]*/ static PyObject * -_codecs_ascii_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_ascii_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=7f213a1b5cdafc65 input=ad1106f64037bd16]*/ +/*[clinic end generated code: output=2627d72058d42429 input=ad1106f64037bd16]*/ { PyObject *decoded = PyUnicode_DecodeASCII(data->buf, data->len, errors); return codec_tuple(decoded, data->len); @@ -595,9 +595,9 @@ _codecs.charmap_decode [clinic start generated code]*/ static PyObject * -_codecs_charmap_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_charmap_decode_impl(PyObject *module, Py_buffer *data, const char *errors, PyObject *mapping) -/*[clinic end generated code: output=87d27f365098bbae input=19712ca35c5a80e2]*/ +/*[clinic end generated code: output=2c335b09778cf895 input=19712ca35c5a80e2]*/ { PyObject *decoded; @@ -619,9 +619,9 @@ _codecs.mbcs_decode [clinic start generated code]*/ static PyObject * -_codecs_mbcs_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_mbcs_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=0ebaf3a5b20e53fa input=d492c1ca64f4fa8a]*/ +/*[clinic end generated code: output=39b65b8598938c4b input=d492c1ca64f4fa8a]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeMBCSStateful(data->buf, data->len, @@ -639,9 +639,9 @@ _codecs.code_page_decode [clinic start generated code]*/ static PyObject * -_codecs_code_page_decode_impl(PyModuleDef *module, int codepage, +_codecs_code_page_decode_impl(PyObject *module, int codepage, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=4318e3d9971e31ba input=4f3152a304e21d51]*/ +/*[clinic end generated code: output=53008ea967da3fff input=4f3152a304e21d51]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeCodePageStateful(codepage, @@ -663,9 +663,9 @@ _codecs.readbuffer_encode [clinic start generated code]*/ static PyObject * -_codecs_readbuffer_encode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_readbuffer_encode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=319cc24083299859 input=b7c322b89d4ab923]*/ +/*[clinic end generated code: output=c645ea7cdb3d6e86 input=b7c322b89d4ab923]*/ { PyObject *result = PyBytes_FromStringAndSize(data->buf, data->len); return codec_tuple(result, data->len); @@ -679,9 +679,9 @@ _codecs.unicode_internal_encode [clinic start generated code]*/ static PyObject * -_codecs_unicode_internal_encode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_encode_impl(PyObject *module, PyObject *obj, const char *errors) -/*[clinic end generated code: output=be08457068ad503b input=8628f0280cf5ba61]*/ +/*[clinic end generated code: output=a72507dde4ea558f input=8628f0280cf5ba61]*/ { if (PyErr_WarnEx(PyExc_DeprecationWarning, "unicode_internal codec has been deprecated", @@ -724,9 +724,9 @@ _codecs.utf_7_encode [clinic start generated code]*/ static PyObject * -_codecs_utf_7_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_7_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=a7accc496a32b759 input=fd91a78f103b0421]*/ +/*[clinic end generated code: output=0feda21ffc921bc8 input=fd91a78f103b0421]*/ { PyObject *v; @@ -749,9 +749,9 @@ _codecs.utf_8_encode [clinic start generated code]*/ static PyObject * -_codecs_utf_8_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_8_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=ec831d80e7aedede input=2c22d40532f071f3]*/ +/*[clinic end generated code: output=02bf47332b9c796c input=2c22d40532f071f3]*/ { PyObject *v; @@ -782,9 +782,9 @@ _codecs.utf_16_encode [clinic start generated code]*/ static PyObject * -_codecs_utf_16_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder) -/*[clinic end generated code: output=93ac58e960a9ee4d input=3935a489b2d5385e]*/ +/*[clinic end generated code: output=c654e13efa2e64e4 input=3935a489b2d5385e]*/ { PyObject *v; @@ -807,9 +807,9 @@ _codecs.utf_16_le_encode [clinic start generated code]*/ static PyObject * -_codecs_utf_16_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_le_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=422bedb8da34fb66 input=bc27df05d1d20dfe]*/ +/*[clinic end generated code: output=431b01e55f2d4995 input=bc27df05d1d20dfe]*/ { PyObject *v; @@ -832,9 +832,9 @@ _codecs.utf_16_be_encode [clinic start generated code]*/ static PyObject * -_codecs_utf_16_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_be_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=3aa7ee9502acdd77 input=5a69d4112763462b]*/ +/*[clinic end generated code: output=96886a6fd54dcae3 input=5a69d4112763462b]*/ { PyObject *v; @@ -865,9 +865,9 @@ _codecs.utf_32_encode [clinic start generated code]*/ static PyObject * -_codecs_utf_32_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder) -/*[clinic end generated code: output=3e7d5a003b02baed input=434a1efa492b8d58]*/ +/*[clinic end generated code: output=5c760da0c09a8b83 input=434a1efa492b8d58]*/ { PyObject *v; @@ -890,9 +890,9 @@ _codecs.utf_32_le_encode [clinic start generated code]*/ static PyObject * -_codecs_utf_32_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_le_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=5dda641cd33dbfc2 input=dfa2d7dc78b99422]*/ +/*[clinic end generated code: output=b65cd176de8e36d6 input=dfa2d7dc78b99422]*/ { PyObject *v; @@ -915,9 +915,9 @@ _codecs.utf_32_be_encode [clinic start generated code]*/ static PyObject * -_codecs_utf_32_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_be_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=ccca8b44d91a7c7a input=4595617b18169002]*/ +/*[clinic end generated code: output=1d9e71a9358709e9 input=4595617b18169002]*/ { PyObject *v; @@ -940,9 +940,9 @@ _codecs.unicode_escape_encode [clinic start generated code]*/ static PyObject * -_codecs_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=389f23d2b8f8d80b input=8273506f14076912]*/ +/*[clinic end generated code: output=66271b30bc4f7a3c input=8273506f14076912]*/ { PyObject *v; @@ -965,9 +965,9 @@ _codecs.raw_unicode_escape_encode [clinic start generated code]*/ static PyObject * -_codecs_raw_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_raw_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=fec4e39d6ec37a62 input=181755d5dfacef3c]*/ +/*[clinic end generated code: output=a66a806ed01c830a input=181755d5dfacef3c]*/ { PyObject *v; @@ -990,9 +990,9 @@ _codecs.latin_1_encode [clinic start generated code]*/ static PyObject * -_codecs_latin_1_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_latin_1_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=ecf00eb8e48c889c input=f03f6dcf1d84bee4]*/ +/*[clinic end generated code: output=2c28c83a27884e08 input=f03f6dcf1d84bee4]*/ { PyObject *v; @@ -1015,9 +1015,9 @@ _codecs.ascii_encode [clinic start generated code]*/ static PyObject * -_codecs_ascii_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_ascii_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=a9d18fc6b6b91cfb input=d87e25a10a593fee]*/ +/*[clinic end generated code: output=b5e035182d33befc input=d87e25a10a593fee]*/ { PyObject *v; @@ -1041,9 +1041,9 @@ _codecs.charmap_encode [clinic start generated code]*/ static PyObject * -_codecs_charmap_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_charmap_encode_impl(PyObject *module, PyObject *str, const char *errors, PyObject *mapping) -/*[clinic end generated code: output=14ca42b83853c643 input=85f4172661e8dad9]*/ +/*[clinic end generated code: output=047476f48495a9e9 input=85f4172661e8dad9]*/ { PyObject *v; @@ -1068,8 +1068,8 @@ _codecs.charmap_build [clinic start generated code]*/ static PyObject * -_codecs_charmap_build_impl(PyModuleDef *module, PyObject *map) -/*[clinic end generated code: output=9485b58fa44afa6a input=d91a91d1717dbc6d]*/ +_codecs_charmap_build_impl(PyObject *module, PyObject *map) +/*[clinic end generated code: output=bb073c27031db9ac input=d91a91d1717dbc6d]*/ { return PyUnicode_BuildEncodingMap(map); } @@ -1084,9 +1084,8 @@ _codecs.mbcs_encode [clinic start generated code]*/ static PyObject * -_codecs_mbcs_encode_impl(PyModuleDef *module, PyObject *str, - const char *errors) -/*[clinic end generated code: output=d1a013bc68798bd7 input=65c09ee1e4203263]*/ +_codecs_mbcs_encode_impl(PyObject *module, PyObject *str, const char *errors) +/*[clinic end generated code: output=76e2e170c966c080 input=65c09ee1e4203263]*/ { PyObject *v; @@ -1110,9 +1109,9 @@ _codecs.code_page_encode [clinic start generated code]*/ static PyObject * -_codecs_code_page_encode_impl(PyModuleDef *module, int code_page, - PyObject *str, const char *errors) -/*[clinic end generated code: output=3b406618dbfbce25 input=c8562ec460c2e309]*/ +_codecs_code_page_encode_impl(PyObject *module, int code_page, PyObject *str, + const char *errors) +/*[clinic end generated code: output=45673f6085657a9e input=c8562ec460c2e309]*/ { PyObject *v; @@ -1147,9 +1146,9 @@ error and must return a (replacement, new position) tuple. [clinic start generated code]*/ static PyObject * -_codecs_register_error_impl(PyModuleDef *module, const char *errors, +_codecs_register_error_impl(PyObject *module, const char *errors, PyObject *handler) -/*[clinic end generated code: output=be00d3b1849ce68a input=5e6709203c2e33fe]*/ +/*[clinic end generated code: output=fa2f7d1879b3067d input=5e6709203c2e33fe]*/ { if (PyCodec_RegisterError(errors, handler)) return NULL; @@ -1168,8 +1167,8 @@ LookupError, if no handler exists under this name. [clinic start generated code]*/ static PyObject * -_codecs_lookup_error_impl(PyModuleDef *module, const char *name) -/*[clinic end generated code: output=731e6df8c83c6158 input=4775dd65e6235aba]*/ +_codecs_lookup_error_impl(PyObject *module, const char *name) +/*[clinic end generated code: output=087f05dc0c9a98cc input=4775dd65e6235aba]*/ { return PyCodec_LookupError(name); } diff --git a/Modules/_cryptmodule.c b/Modules/_cryptmodule.c index d422cfd..8e4737c 100644 --- a/Modules/_cryptmodule.c +++ b/Modules/_cryptmodule.c @@ -31,8 +31,8 @@ results for a given *word*. [clinic start generated code]*/ static PyObject * -crypt_crypt_impl(PyModuleDef *module, const char *word, const char *salt) -/*[clinic end generated code: output=995ad1e854d83069 input=0e8edec9c364352b]*/ +crypt_crypt_impl(PyObject *module, const char *word, const char *salt) +/*[clinic end generated code: output=0512284a03d2803c input=0e8edec9c364352b]*/ { /* On some platforms (AtheOS) crypt returns NULL for an invalid salt. Return None in that case. XXX Maybe raise an exception? */ diff --git a/Modules/_csv.c b/Modules/_csv.c index 101f449..b428279 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -1014,11 +1014,19 @@ join_append_data(WriterObj *self, unsigned int field_kind, void *field_data, int i; Py_ssize_t rec_len; -#define ADDCH(c) \ +#define INCLEN \ + do {\ + if (!copy_phase && rec_len == PY_SSIZE_T_MAX) { \ + goto overflow; \ + } \ + rec_len++; \ + } while(0) + +#define ADDCH(c) \ do {\ if (copy_phase) \ self->rec[rec_len] = c;\ - rec_len++;\ + INCLEN;\ } while(0) rec_len = self->rec_len; @@ -1072,11 +1080,18 @@ join_append_data(WriterObj *self, unsigned int field_kind, void *field_data, if (*quoted) { if (copy_phase) ADDCH(dialect->quotechar); - else - rec_len += 2; + else { + INCLEN; /* starting quote */ + INCLEN; /* ending quote */ + } } return rec_len; + + overflow: + PyErr_NoMemory(); + return -1; #undef ADDCH +#undef INCLEN } static int diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 2e01323..b32a0ce 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -332,7 +332,7 @@ _ctypes_alloc_format_string_with_shape(int ndim, const Py_ssize_t *shape, /* PyCStructType_Type - a meta type/class. Creating a new class using this one as - __metaclass__ will call the contructor StructUnionType_new. It replaces the + __metaclass__ will call the constructor StructUnionType_new. It replaces the tp_dict member with a new instance of StgDict, and initializes the C accessible fields somehow. */ @@ -469,7 +469,10 @@ CDataType_from_buffer(PyObject *type, PyObject *args) Py_ssize_t offset = 0; StgDictObject *dict = PyType_stgdict(type); - assert (dict); + if (!dict) { + PyErr_SetString(PyExc_TypeError, "abstract class"); + return NULL; + } if (!PyArg_ParseTuple(args, "O|n:from_buffer", &obj, &offset)) return NULL; @@ -537,9 +540,12 @@ CDataType_from_buffer_copy(PyObject *type, PyObject *args) Py_ssize_t offset = 0; PyObject *result; StgDictObject *dict = PyType_stgdict(type); - assert (dict); + if (!dict) { + PyErr_SetString(PyExc_TypeError, "abstract class"); + return NULL; + } - if (!PyArg_ParseTuple(args, "y*|n:from_buffer", &buffer, &offset)) + if (!PyArg_ParseTuple(args, "y*|n:from_buffer_copy", &buffer, &offset)) return NULL; if (offset < 0) { @@ -734,8 +740,7 @@ PyCStructType_setattro(PyObject *self, PyObject *key, PyObject *value) return -1; if (value && PyUnicode_Check(key) && - /* XXX struni _PyUnicode_AsString can fail (also in other places)! */ - 0 == strcmp(_PyUnicode_AsString(key), "_fields_")) + _PyUnicode_EqualToASCIIString(key, "_fields_")) return PyCStructUnionType_update_stgdict(self, value, 1); return 0; } @@ -749,7 +754,7 @@ UnionType_setattro(PyObject *self, PyObject *key, PyObject *value) return -1; if (PyUnicode_Check(key) && - 0 == strcmp(_PyUnicode_AsString(key), "_fields_")) + _PyUnicode_EqualToASCIIString(key, "_fields_")) return PyCStructUnionType_update_stgdict(self, value, 0); return 0; } @@ -1124,7 +1129,7 @@ CharArray_get_raw(CDataObject *self) static PyObject * CharArray_get_value(CDataObject *self) { - int i; + Py_ssize_t i; char *ptr = self->b_ptr; for (i = 0; i < self->b_size; ++i) if (*ptr++ == '\0') @@ -1180,9 +1185,9 @@ static PyGetSetDef CharArray_getsets[] = { static PyObject * WCharArray_get_value(CDataObject *self) { - unsigned int i; + Py_ssize_t i; wchar_t *ptr = (wchar_t *)self->b_ptr; - for (i = 0; i < self->b_size/sizeof(wchar_t); ++i) + for (i = 0; i < self->b_size/(Py_ssize_t)sizeof(wchar_t); ++i) if (*ptr++ == (wchar_t)0) break; return PyUnicode_FromWideChar((wchar_t *)self->b_ptr, i); @@ -1211,7 +1216,7 @@ WCharArray_set_value(CDataObject *self, PyObject *value) wstr = PyUnicode_AsUnicodeAndSize(value, &len); if (wstr == NULL) return -1; - if ((unsigned)len > self->b_size/sizeof(wchar_t)) { + if ((size_t)len > self->b_size/sizeof(wchar_t)) { PyErr_SetString(PyExc_ValueError, "string too long"); result = -1; @@ -1252,8 +1257,10 @@ add_methods(PyTypeObject *type, PyMethodDef *meth) descr = PyDescr_NewMethod(type, meth); if (descr == NULL) return -1; - if (PyDict_SetItemString(dict,meth->ml_name, descr) < 0) + if (PyDict_SetItemString(dict, meth->ml_name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -1268,8 +1275,10 @@ add_members(PyTypeObject *type, PyMemberDef *memb) descr = PyDescr_NewMember(type, memb); if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, memb->name, descr) < 0) + if (PyDict_SetItemString(dict, memb->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -1285,8 +1294,10 @@ add_getset(PyTypeObject *type, PyGetSetDef *gsp) descr = PyDescr_NewGetSet(type, gsp); if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, gsp->name, descr) < 0) + if (PyDict_SetItemString(dict, gsp->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -1375,8 +1386,10 @@ PyCArrayType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) goto error; } stgdict->shape[0] = length; - memmove(&stgdict->shape[1], itemdict->shape, - sizeof(Py_ssize_t) * (stgdict->ndim - 1)); + if (stgdict->ndim > 1) { + memmove(&stgdict->shape[1], itemdict->shape, + sizeof(Py_ssize_t) * (stgdict->ndim - 1)); + } itemsize = itemdict->size; if (length * itemsize < 0) { @@ -1778,6 +1791,7 @@ static PyObject *CreateSwappedType(PyTypeObject *type, PyObject *args, PyObject newname = PyUnicode_Concat(name, suffix); if (newname == NULL) { + Py_DECREF(swapped_args); return NULL; } @@ -1797,8 +1811,10 @@ static PyObject *CreateSwappedType(PyTypeObject *type, PyObject *args, PyObject stgdict = (StgDictObject *)PyObject_CallObject( (PyObject *)&PyCStgDict_Type, NULL); - if (!stgdict) /* XXX leaks result! */ + if (!stgdict) { + Py_DECREF(result); return NULL; + } stgdict->ffi_type_pointer = *fmt->pffi_type; stgdict->align = fmt->pffi_type->alignment; @@ -1978,8 +1994,10 @@ PyCSimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) PyObject *meth; int x; meth = PyDescr_NewClassMethod(result, ml); - if (!meth) + if (!meth) { + Py_DECREF(result); return NULL; + } x = PyDict_SetItemString(result->tp_dict, ml->ml_name, meth); @@ -2159,8 +2177,10 @@ converters_from_argtypes(PyObject *ob) nArgs = PyTuple_GET_SIZE(ob); converters = PyTuple_New(nArgs); - if (!converters) + if (!converters) { + Py_DECREF(ob); return NULL; + } /* I have to check if this is correct. Using c_char, which has a size of 1, will be assumed to be pushed as only one byte! @@ -4052,14 +4072,9 @@ _init_pos_args(PyObject *self, PyTypeObject *type, } val = PyTuple_GET_ITEM(args, i + index); if (kwds && PyDict_GetItem(kwds, name)) { - char *field = PyBytes_AsString(name); - if (field == NULL) { - PyErr_Clear(); - field = "???"; - } PyErr_Format(PyExc_TypeError, - "duplicate values for field '%s'", - field); + "duplicate values for field %R", + name); Py_DECREF(pair); Py_DECREF(name); return -1; @@ -5128,18 +5143,18 @@ comerror_init(PyObject *self, PyObject *args, PyObject *kwds) int status; if (!_PyArg_NoKeywords(Py_TYPE(self)->tp_name, kwds)) - return -1; + return -1; if (!PyArg_ParseTuple(args, "OOO:COMError", &hresult, &text, &details)) return -1; a = PySequence_GetSlice(args, 1, PySequence_Size(args)); if (!a) - return -1; + return -1; status = PyObject_SetAttrString(self, "args", a); Py_DECREF(a); if (status < 0) - return -1; + return -1; if (PyObject_SetAttrString(self, "hresult", hresult) < 0) return -1; diff --git a/Modules/_ctypes/_ctypes_test.c b/Modules/_ctypes/_ctypes_test.c index f957e02..3c7f892 100644 --- a/Modules/_ctypes/_ctypes_test.c +++ b/Modules/_ctypes/_ctypes_test.c @@ -26,6 +26,24 @@ _testfunc_cbk_reg_double(double a, double b, double c, double d, double e, return func(a*a, b*b, c*c, d*d, e*e); } +/* + * This structure should be the same as in test_callbacks.py and the + * method test_callback_large_struct. See issues 17310 and 20160: the + * structure must be larger than 8 bytes long. + */ + +typedef struct { + unsigned long first; + unsigned long second; + unsigned long third; +} Test; + +EXPORT(void) +_testfunc_cbk_large_struct(Test in, void (*func)(Test)) +{ + func(in); +} + EXPORT(void)testfunc_array(int values[4]) { printf("testfunc_array %d %d %d %d\n", diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c index 7cd6164..91413d7 100644 --- a/Modules/_ctypes/callbacks.c +++ b/Modules/_ctypes/callbacks.c @@ -305,7 +305,7 @@ static void closure_fcn(ffi_cif *cif, static CThunkObject* CThunkObject_new(Py_ssize_t nArgs) { CThunkObject *p; - int i; + Py_ssize_t i; p = PyObject_GC_NewVar(CThunkObject, &PyCThunk_Type, nArgs); if (p == NULL) { @@ -313,11 +313,13 @@ static CThunkObject* CThunkObject_new(Py_ssize_t nArgs) return NULL; } - p->pcl_exec = NULL; p->pcl_write = NULL; + p->pcl_exec = NULL; memset(&p->cif, 0, sizeof(p->cif)); + p->flags = 0; p->converters = NULL; p->callable = NULL; + p->restype = NULL; p->setfunc = NULL; p->ffi_restype = NULL; diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 03a911f..abd3bc9 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -157,8 +157,10 @@ _ctypes_get_errobj(int **pspace) return NULL; memset(space, 0, sizeof(int) * 2); errobj = PyCapsule_New(space, CTYPES_CAPSULE_NAME_PYMEM, pymem_destructor); - if (errobj == NULL) + if (errobj == NULL) { + PyMem_Free(space); return NULL; + } if (-1 == PyDict_SetItem(dict, error_object_name, errobj)) { Py_DECREF(errobj); @@ -1668,7 +1670,9 @@ POINTER(PyObject *self, PyObject *cls) return result; } if (PyUnicode_CheckExact(cls)) { - char *name = _PyUnicode_AsString(cls); + const char *name = PyUnicode_AsUTF8(cls); + if (name == NULL) + return NULL; buf = PyMem_Malloc(strlen(name) + 3 + 1); if (buf == NULL) return PyErr_NoMemory(); @@ -1681,6 +1685,10 @@ POINTER(PyObject *self, PyObject *cls) if (result == NULL) return result; key = PyLong_FromVoidPtr(result); + if (key == NULL) { + Py_DECREF(result); + return NULL; + } } else if (PyType_Check(cls)) { typ = (PyTypeObject *)cls; buf = PyMem_Malloc(strlen(typ->tp_name) + 3 + 1); diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index 8cb6d66..d666be5 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -1246,8 +1246,7 @@ U_set(void *ptr, PyObject *value, Py_ssize_t length) "unicode string expected instead of %s instance", value->ob_type->tp_name); return NULL; - } else - Py_INCREF(value); + } wstr = PyUnicode_AsUnicodeAndSize(value, &size); if (wstr == NULL) @@ -1256,7 +1255,6 @@ U_set(void *ptr, PyObject *value, Py_ssize_t length) PyErr_Format(PyExc_ValueError, "string too long (%zd, maximum length %zd)", size, length); - Py_DECREF(value); return NULL; } else if (size < length-1) /* copy terminating NUL character if there is space */ @@ -1266,6 +1264,7 @@ U_set(void *ptr, PyObject *value, Py_ssize_t length) return NULL; } + Py_INCREF(value); return value; } @@ -1292,9 +1291,7 @@ s_set(void *ptr, PyObject *value, Py_ssize_t length) char *data; Py_ssize_t size; - if(PyBytes_Check(value)) { - Py_INCREF(value); - } else { + if(!PyBytes_Check(value)) { PyErr_Format(PyExc_TypeError, "expected bytes, %s found", value->ob_type->tp_name); @@ -1302,11 +1299,9 @@ s_set(void *ptr, PyObject *value, Py_ssize_t length) } data = PyBytes_AS_STRING(value); - if (!data) - return NULL; size = strlen(data); /* XXX Why not Py_SIZE(value)? */ if (size < length) { - /* This will copy the leading NUL character + /* This will copy the terminating NUL character * if there is space for it. */ ++size; @@ -1314,13 +1309,11 @@ s_set(void *ptr, PyObject *value, Py_ssize_t length) PyErr_Format(PyExc_ValueError, "bytes too long (%zd, maximum length %zd)", size, length); - Py_DECREF(value); return NULL; } /* Also copy the terminating NUL character if there is space */ memcpy((char *)ptr, data, size); - Py_DECREF(value); _RET(value); } @@ -1428,9 +1421,7 @@ BSTR_set(void *ptr, PyObject *value, Py_ssize_t size) /* convert value into a PyUnicodeObject or NULL */ if (Py_None == value) { value = NULL; - } else if (PyUnicode_Check(value)) { - Py_INCREF(value); /* for the descref below */ - } else { + } else if (!PyUnicode_Check(value)) { PyErr_Format(PyExc_TypeError, "unicode string expected instead of %s instance", value->ob_type->tp_name); @@ -1449,7 +1440,6 @@ BSTR_set(void *ptr, PyObject *value, Py_ssize_t size) return NULL; } bstr = SysAllocStringLen(wvalue, (unsigned)wsize); - Py_DECREF(value); } else bstr = NULL; diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index 0d3f724..f2df5c0 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -238,7 +238,7 @@ typedef struct { StgDictObject function to a generic one. Currently, PyCFuncPtr types have 'converters' and 'checker' entries in their - type dict. They are only used to cache attributes from other entries, whihc + type dict. They are only used to cache attributes from other entries, which is wrong. One use case is the .value attribute that all simple types have. But some diff --git a/Modules/_ctypes/libffi_msvc/ffi.c b/Modules/_ctypes/libffi_msvc/ffi.c index b7586c7..1d82929 100644 --- a/Modules/_ctypes/libffi_msvc/ffi.c +++ b/Modules/_ctypes/libffi_msvc/ffi.c @@ -378,7 +378,7 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, if ( cif->rtype->type == FFI_TYPE_STRUCT ) { *rvalue = *(void **) argp; - argp += 4; + argp += sizeof(void *); } p_argv = avalue; @@ -389,13 +389,23 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, /* Align if necessary */ if ((sizeof(char *) - 1) & (size_t) argp) { - argp = (char *) ALIGN(argp, sizeof(char*)); + argp = (char *) ALIGN(argp, sizeof(char*)); } z = (*p_arg)->size; /* because we're little endian, this is what it turns into. */ +#ifdef _WIN64 + if (z > 8) { + /* On Win64, if a single argument takes more than 8 bytes, + * then it is always passed by reference. + */ + *p_argv = *((void**) argp); + z = 8; + } + else +#endif *p_argv = (void*) argp; p_argv++; diff --git a/Modules/_ctypes/libffi_osx/ffi.c b/Modules/_ctypes/libffi_osx/ffi.c index 96826b5..1776b79 100644 --- a/Modules/_ctypes/libffi_osx/ffi.c +++ b/Modules/_ctypes/libffi_osx/ffi.c @@ -102,7 +102,7 @@ initialize_aggregate( /* Perform machine independent ffi_cif preparation, then call machine dependent routine. */ -#if defined(X86_DARWIN) +#if defined(X86_DARWIN) && !defined __x86_64__ static inline bool struct_on_stack( @@ -125,7 +125,7 @@ struct_on_stack( } } -#endif // defined(X86_DARWIN) +#endif // defined(X86_DARWIN) && !defined __x86_64__ // Arguments' ffi_type->alignment must be nonzero. ffi_status diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c index 879afb8..6c0fda9 100644 --- a/Modules/_ctypes/stgdict.c +++ b/Modules/_ctypes/stgdict.c @@ -391,9 +391,11 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct } memset(stgdict->ffi_type_pointer.elements, 0, sizeof(ffi_type *) * (basedict->length + len + 1)); - memcpy(stgdict->ffi_type_pointer.elements, - basedict->ffi_type_pointer.elements, - sizeof(ffi_type *) * (basedict->length)); + if (basedict->length > 0) { + memcpy(stgdict->ffi_type_pointer.elements, + basedict->ffi_type_pointer.elements, + sizeof(ffi_type *) * (basedict->length)); + } ffi_ofs = basedict->length; } else { offset = 0; diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index d64bdc7..896d40d 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -230,7 +230,7 @@ PyCurses_ConvertToChtype(PyCursesWindowObject *win, PyObject *obj, chtype *ch) encoding = win->encoding; else encoding = screen_encoding; - bytes = PyUnicode_AsEncodedObject(obj, encoding, NULL); + bytes = PyUnicode_AsEncodedString(obj, encoding, NULL); if (bytes == NULL) return 0; if (PyBytes_GET_SIZE(bytes) == 1) @@ -280,7 +280,7 @@ static int PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj, chtype *ch #ifdef HAVE_NCURSESW - , cchar_t *wch + , wchar_t *wch #endif ) { @@ -298,8 +298,7 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj, PyUnicode_GET_LENGTH(obj)); return 0; } - memset(wch->chars, 0, sizeof(wch->chars)); - wch->chars[0] = buffer[0]; + *wch = buffer[0]; return 2; #else return PyCurses_ConvertToChtype(win, obj, ch); @@ -352,7 +351,7 @@ PyCurses_ConvertToString(PyCursesWindowObject *win, PyObject *obj, return 2; #else assert (wstr == NULL); - *bytes = PyUnicode_AsEncodedObject(obj, win->encoding, NULL); + *bytes = PyUnicode_AsEncodedString(obj, win->encoding, NULL); if (*bytes == NULL) return 0; return 1; @@ -597,7 +596,8 @@ curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, int type; chtype cch; #ifdef HAVE_NCURSESW - cchar_t wch; + wchar_t wstr[2]; + cchar_t wcval; #endif const char *funcname; @@ -605,14 +605,15 @@ curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, attr = A_NORMAL; #ifdef HAVE_NCURSESW - type = PyCurses_ConvertToCchar_t(cwself, ch, &cch, &wch); + type = PyCurses_ConvertToCchar_t(cwself, ch, &cch, wstr); if (type == 2) { funcname = "add_wch"; - wch.attr = attr; + wstr[1] = L'\0'; + setcchar(&wcval, wstr, attr, 0, NULL); if (coordinates_group) - rtn = mvwadd_wch(cwself->win,y,x, &wch); + rtn = mvwadd_wch(cwself->win,y,x, &wcval); else { - rtn = wadd_wch(cwself->win, &wch); + rtn = wadd_wch(cwself->win, &wcval); } } else @@ -1221,6 +1222,10 @@ PyCursesWindow_GetStr(PyCursesWindowObject *self, PyObject *args) case 1: if (!PyArg_ParseTuple(args,"i;n", &n)) return NULL; + if (n < 0) { + PyErr_SetString(PyExc_ValueError, "'n' must be nonnegative"); + return NULL; + } Py_BEGIN_ALLOW_THREADS rtn2 = wgetnstr(self->win, rtn, Py_MIN(n, 1023)); Py_END_ALLOW_THREADS @@ -1239,6 +1244,10 @@ PyCursesWindow_GetStr(PyCursesWindowObject *self, PyObject *args) case 3: if (!PyArg_ParseTuple(args,"iii;y,x,n", &y, &x, &n)) return NULL; + if (n < 0) { + PyErr_SetString(PyExc_ValueError, "'n' must be nonnegative"); + return NULL; + } #ifdef STRICT_SYSV_CURSES Py_BEGIN_ALLOW_THREADS rtn2 = wmove(self->win,y,x)==ERR ? ERR : @@ -1385,6 +1394,10 @@ PyCursesWindow_InStr(PyCursesWindowObject *self, PyObject *args) case 1: if (!PyArg_ParseTuple(args,"i;n", &n)) return NULL; + if (n < 0) { + PyErr_SetString(PyExc_ValueError, "'n' must be nonnegative"); + return NULL; + } rtn2 = winnstr(self->win, rtn, Py_MIN(n, 1023)); break; case 2: @@ -1395,6 +1408,10 @@ PyCursesWindow_InStr(PyCursesWindowObject *self, PyObject *args) case 3: if (!PyArg_ParseTuple(args, "iii;y,x,n", &y, &x, &n)) return NULL; + if (n < 0) { + PyErr_SetString(PyExc_ValueError, "'n' must be nonnegative"); + return NULL; + } rtn2 = mvwinnstr(self->win, y, x, rtn, Py_MIN(n,1023)); break; default: diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index 02899e4..ea8790b 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -430,9 +430,9 @@ Return a database object. [clinic start generated code]*/ static PyObject * -dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, +dbmopen_impl(PyObject *module, const char *filename, const char *flags, int mode) -/*[clinic end generated code: output=e8d4b36f25c733fd input=226334bade5764e6]*/ +/*[clinic end generated code: output=5fade8cf16e0755f input=226334bade5764e6]*/ { int iflags; diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index 112b44f..6efdc91 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -1119,12 +1119,12 @@ context_getattr(PyObject *self, PyObject *name) PyObject *retval; if (PyUnicode_Check(name)) { - if (PyUnicode_CompareWithASCIIString(name, "traps") == 0) { + if (_PyUnicode_EqualToASCIIString(name, "traps")) { retval = ((PyDecContextObject *)self)->traps; Py_INCREF(retval); return retval; } - if (PyUnicode_CompareWithASCIIString(name, "flags") == 0) { + if (_PyUnicode_EqualToASCIIString(name, "flags")) { retval = ((PyDecContextObject *)self)->flags; Py_INCREF(retval); return retval; @@ -1144,10 +1144,10 @@ context_setattr(PyObject *self, PyObject *name, PyObject *value) } if (PyUnicode_Check(name)) { - if (PyUnicode_CompareWithASCIIString(name, "traps") == 0) { + if (_PyUnicode_EqualToASCIIString(name, "traps")) { return context_settraps_dict(self, value); } - if (PyUnicode_CompareWithASCIIString(name, "flags") == 0) { + if (_PyUnicode_EqualToASCIIString(name, "flags")) { return context_setstatus_dict(self, value); } } @@ -2208,6 +2208,14 @@ PyDecType_FromLongExact(PyTypeObject *type, const PyObject *pylong, return dec; } +/* External C-API functions */ +static binaryfunc _py_long_multiply; +static binaryfunc _py_long_floor_divide; +static ternaryfunc _py_long_power; +static unaryfunc _py_float_abs; +static PyCFunction _py_long_bit_length; +static PyCFunction _py_float_as_integer_ratio; + /* Return a PyDecObject or a subtype from a PyFloatObject. Conversion is exact. */ static PyObject * @@ -2258,13 +2266,13 @@ PyDecType_FromFloatExact(PyTypeObject *type, PyObject *v, } /* absolute value of the float */ - tmp = PyObject_CallMethod(v, "__abs__", NULL); + tmp = _py_float_abs(v); if (tmp == NULL) { return NULL; } /* float as integer ratio: numerator/denominator */ - n_d = PyObject_CallMethod(tmp, "as_integer_ratio", NULL); + n_d = _py_float_as_integer_ratio(tmp, NULL); Py_DECREF(tmp); if (n_d == NULL) { return NULL; @@ -2272,7 +2280,7 @@ PyDecType_FromFloatExact(PyTypeObject *type, PyObject *v, n = PyTuple_GET_ITEM(n_d, 0); d = PyTuple_GET_ITEM(n_d, 1); - tmp = PyObject_CallMethod(d, "bit_length", NULL); + tmp = _py_long_bit_length(d, NULL); if (tmp == NULL) { Py_DECREF(n_d); return NULL; @@ -2438,14 +2446,14 @@ dectuple_as_str(PyObject *dectuple) tmp = PyTuple_GET_ITEM(dectuple, 2); if (PyUnicode_Check(tmp)) { /* special */ - if (PyUnicode_CompareWithASCIIString(tmp, "F") == 0) { + if (_PyUnicode_EqualToASCIIString(tmp, "F")) { strcat(sign_special, "Inf"); is_infinite = 1; } - else if (PyUnicode_CompareWithASCIIString(tmp, "n") == 0) { + else if (_PyUnicode_EqualToASCIIString(tmp, "n")) { strcat(sign_special, "NaN"); } - else if (PyUnicode_CompareWithASCIIString(tmp, "N") == 0) { + else if (_PyUnicode_EqualToASCIIString(tmp, "N")) { strcat(sign_special, "sNaN"); } else { @@ -2630,12 +2638,18 @@ PyDecType_FromSequenceExact(PyTypeObject *type, PyObject *v, /* class method */ static PyObject * -dec_from_float(PyObject *dec, PyObject *pyfloat) +dec_from_float(PyObject *type, PyObject *pyfloat) { PyObject *context; + PyObject *result; CURRENT_CONTEXT(context); - return PyDecType_FromFloatExact((PyTypeObject *)dec, pyfloat, context); + result = PyDecType_FromFloatExact(&PyDec_Type, pyfloat, context); + if (type != (PyObject *)&PyDec_Type && result != NULL) { + Py_SETREF(result, PyObject_CallFunctionObjArgs(type, result, NULL)); + } + + return result; } /* create_decimal_from_float */ @@ -5505,6 +5519,32 @@ static struct int_constmap int_constants [] = { #define CHECK_PTR(expr) \ do { if ((expr) == NULL) goto error; } while (0) + +static PyCFunction +cfunc_noargs(PyTypeObject *t, const char *name) +{ + struct PyMethodDef *m; + + if (t->tp_methods == NULL) { + goto error; + } + + for (m = t->tp_methods; m->ml_name != NULL; m++) { + if (strcmp(name, m->ml_name) == 0) { + if (!(m->ml_flags & METH_NOARGS)) { + goto error; + } + return m->ml_meth; + } + } + +error: + PyErr_Format(PyExc_RuntimeError, + "internal error: could not find method %s", name); + return NULL; +} + + PyMODINIT_FUNC PyInit__decimal(void) { @@ -5529,6 +5569,16 @@ PyInit__decimal(void) mpd_setminalloc(_Py_DEC_MINALLOC); + /* Init external C-API functions */ + _py_long_multiply = PyLong_Type.tp_as_number->nb_multiply; + _py_long_floor_divide = PyLong_Type.tp_as_number->nb_floor_divide; + _py_long_power = PyLong_Type.tp_as_number->nb_power; + _py_float_abs = PyFloat_Type.tp_as_number->nb_absolute; + ASSIGN_PTR(_py_float_as_integer_ratio, cfunc_noargs(&PyFloat_Type, + "as_integer_ratio")); + ASSIGN_PTR(_py_long_bit_length, cfunc_noargs(&PyLong_Type, "bit_length")); + + /* Init types */ PyDec_Type.tp_base = &PyBaseObject_Type; PyDecContext_Type.tp_base = &PyBaseObject_Type; diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 0f1d6a1..7d50dd0 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -652,6 +652,7 @@ static void element_dealloc(ElementObject* self) { PyObject_GC_UnTrack(self); + Py_TRASHCAN_SAFE_BEGIN(self) if (self->weakreflist != NULL) PyObject_ClearWeakRefs((PyObject *) self); @@ -662,6 +663,7 @@ element_dealloc(ElementObject* self) RELEASE(sizeof(ElementObject), "destroy element"); Py_TYPE(self)->tp_free((PyObject *)self); + Py_TRASHCAN_SAFE_END(self) } /* -------------------------------------------------------------------- */ @@ -1582,10 +1584,23 @@ _elementtree_Element_remove_impl(ElementObject *self, PyObject *subelement) static PyObject* element_repr(ElementObject* self) { - if (self->tag) - return PyUnicode_FromFormat("", self->tag, self); - else + int status; + + if (self->tag == NULL) return PyUnicode_FromFormat("", self); + + status = Py_ReprEnter((PyObject *)self); + if (status == 0) { + PyObject *res; + res = PyUnicode_FromFormat("", self->tag, self); + Py_ReprLeave((PyObject *)self); + return res; + } + if (status > 0) + PyErr_Format(PyExc_RuntimeError, + "reentrant call inside %s.__repr__", + Py_TYPE(self)->tp_name); + return NULL; } /*[clinic input] @@ -3673,11 +3688,11 @@ xmlparser_getattro(XMLParserObject* self, PyObject* nameobj) { if (PyUnicode_Check(nameobj)) { PyObject* res; - if (PyUnicode_CompareWithASCIIString(nameobj, "entity") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "entity")) res = self->entity; - else if (PyUnicode_CompareWithASCIIString(nameobj, "target") == 0) + else if (_PyUnicode_EqualToASCIIString(nameobj, "target")) res = self->target; - else if (PyUnicode_CompareWithASCIIString(nameobj, "version") == 0) { + else if (_PyUnicode_EqualToASCIIString(nameobj, "version")) { return PyUnicode_FromFormat( "Expat %d.%d.%d", XML_MAJOR_VERSION, XML_MINOR_VERSION, XML_MICRO_VERSION); diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 1aa4571..9c9ab5f 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -203,40 +203,45 @@ static PyGetSetDef partial_getsetlist[] = { static PyObject * partial_repr(partialobject *pto) { - PyObject *result; + PyObject *result = NULL; PyObject *arglist; - PyObject *tmp; Py_ssize_t i, n; PyObject *key, *value; + int status; - arglist = PyUnicode_FromString(""); - if (arglist == NULL) { - return NULL; + status = Py_ReprEnter((PyObject *)pto); + if (status != 0) { + if (status < 0) + return NULL; + return PyUnicode_FromFormat("%s(...)", Py_TYPE(pto)->tp_name); } + + arglist = PyUnicode_FromString(""); + if (arglist == NULL) + goto done; /* Pack positional arguments */ assert (PyTuple_Check(pto->args)); n = PyTuple_GET_SIZE(pto->args); for (i = 0; i < n; i++) { - tmp = PyUnicode_FromFormat("%U, %R", arglist, - PyTuple_GET_ITEM(pto->args, i)); - Py_DECREF(arglist); - if (tmp == NULL) - return NULL; - arglist = tmp; + Py_SETREF(arglist, PyUnicode_FromFormat("%U, %R", arglist, + PyTuple_GET_ITEM(pto->args, i))); + if (arglist == NULL) + goto done; } /* Pack keyword arguments */ assert (PyDict_Check(pto->kw)); for (i = 0; PyDict_Next(pto->kw, &i, &key, &value);) { - tmp = PyUnicode_FromFormat("%U, %U=%R", arglist, - key, value); - Py_DECREF(arglist); - if (tmp == NULL) - return NULL; - arglist = tmp; + Py_SETREF(arglist, PyUnicode_FromFormat("%U, %U=%R", arglist, + key, value)); + if (arglist == NULL) + goto done; } result = PyUnicode_FromFormat("%s(%R%U)", Py_TYPE(pto)->tp_name, pto->fn, arglist); Py_DECREF(arglist); + + done: + Py_ReprLeave((PyObject *)pto); return result; } @@ -776,8 +781,10 @@ infinite_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwd if (!key) return NULL; hash = PyObject_Hash(key); - if (hash == -1) + if (hash == -1) { + Py_DECREF(key); return NULL; + } result = _PyDict_GetItem_KnownHash(self->cache, key, hash); if (result) { Py_INCREF(result); @@ -832,8 +839,10 @@ bounded_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds if (!key) return NULL; hash = PyObject_Hash(key); - if (hash == -1) + if (hash == -1) { + Py_DECREF(key); return NULL; + } link = (lru_list_elem *)_PyDict_GetItem_KnownHash(self->cache, key, hash); if (link) { lru_cache_extricate_link(link); diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c index f070a14..b840bf5 100644 --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -562,9 +562,8 @@ when the database has to be created. It defaults to octal 0o666. [clinic start generated code]*/ static PyObject * -dbmopen_impl(PyModuleDef *module, const char *name, const char *flags, - int mode) -/*[clinic end generated code: output=365b31415c03ccd4 input=55563cd60e51984a]*/ +dbmopen_impl(PyObject *module, const char *name, const char *flags, int mode) +/*[clinic end generated code: output=31aa1bafdf5da688 input=55563cd60e51984a]*/ { int iflags; diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index 44765ac..ff57614 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -21,7 +21,6 @@ /* EVP is the preferred interface to hashing in OpenSSL */ #include -#include /* We use the object interface to discover what hashes OpenSSL supports. */ #include #include "openssl/err.h" @@ -32,11 +31,22 @@ #define HASH_OBJ_CONSTRUCTOR 0 #endif +#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER) +/* OpenSSL < 1.1.0 */ +#define EVP_MD_CTX_new EVP_MD_CTX_create +#define EVP_MD_CTX_free EVP_MD_CTX_destroy +#define HAS_FAST_PKCS5_PBKDF2_HMAC 0 +#include +#else +/* OpenSSL >= 1.1.0 */ +#define HAS_FAST_PKCS5_PBKDF2_HMAC 1 +#endif + typedef struct { PyObject_HEAD PyObject *name; /* name of this hash algorithm */ - EVP_MD_CTX ctx; /* OpenSSL message digest context */ + EVP_MD_CTX *ctx; /* OpenSSL message digest context */ #ifdef WITH_THREAD PyThread_type_lock lock; /* OpenSSL context lock */ #endif @@ -48,7 +58,6 @@ static PyTypeObject EVPtype; #define DEFINE_CONSTS_FOR_NEW(Name) \ static PyObject *CONST_ ## Name ## _name_obj = NULL; \ - static EVP_MD_CTX CONST_new_ ## Name ## _ctx; \ static EVP_MD_CTX *CONST_new_ ## Name ## _ctx_p = NULL; DEFINE_CONSTS_FOR_NEW(md5) @@ -59,19 +68,57 @@ DEFINE_CONSTS_FOR_NEW(sha384) DEFINE_CONSTS_FOR_NEW(sha512) +/* LCOV_EXCL_START */ +static PyObject * +_setException(PyObject *exc) +{ + unsigned long errcode; + const char *lib, *func, *reason; + + errcode = ERR_peek_last_error(); + if (!errcode) { + PyErr_SetString(exc, "unknown reasons"); + return NULL; + } + ERR_clear_error(); + + lib = ERR_lib_error_string(errcode); + func = ERR_func_error_string(errcode); + reason = ERR_reason_error_string(errcode); + + if (lib && func) { + PyErr_Format(exc, "[%s: %s] %s", lib, func, reason); + } + else if (lib) { + PyErr_Format(exc, "[%s] %s", lib, reason); + } + else { + PyErr_SetString(exc, reason); + } + return NULL; +} +/* LCOV_EXCL_STOP */ + static EVPobject * newEVPobject(PyObject *name) { EVPobject *retval = (EVPobject *)PyObject_New(EVPobject, &EVPtype); + if (retval == NULL) { + return NULL; + } + + retval->ctx = EVP_MD_CTX_new(); + if (retval->ctx == NULL) { + PyErr_NoMemory(); + return NULL; + } /* save the name for .name to return */ - if (retval != NULL) { - Py_INCREF(name); - retval->name = name; + Py_INCREF(name); + retval->name = name; #ifdef WITH_THREAD - retval->lock = NULL; + retval->lock = NULL; #endif - } return retval; } @@ -86,7 +133,7 @@ EVP_hash(EVPobject *self, const void *vp, Py_ssize_t len) process = MUNCH_SIZE; else process = Py_SAFE_DOWNCAST(len, Py_ssize_t, unsigned int); - EVP_DigestUpdate(&self->ctx, (const void*)cp, process); + EVP_DigestUpdate(self->ctx, (const void*)cp, process); len -= process; cp += process; } @@ -101,16 +148,19 @@ EVP_dealloc(EVPobject *self) if (self->lock != NULL) PyThread_free_lock(self->lock); #endif - EVP_MD_CTX_cleanup(&self->ctx); + EVP_MD_CTX_free(self->ctx); Py_XDECREF(self->name); PyObject_Del(self); } -static void locked_EVP_MD_CTX_copy(EVP_MD_CTX *new_ctx_p, EVPobject *self) +static int +locked_EVP_MD_CTX_copy(EVP_MD_CTX *new_ctx_p, EVPobject *self) { + int result; ENTER_HASHLIB(self); - EVP_MD_CTX_copy(new_ctx_p, &self->ctx); + result = EVP_MD_CTX_copy(new_ctx_p, self->ctx); LEAVE_HASHLIB(self); + return result; } /* External methods for a hash object */ @@ -126,7 +176,9 @@ EVP_copy(EVPobject *self, PyObject *unused) if ( (newobj = newEVPobject(self->name))==NULL) return NULL; - locked_EVP_MD_CTX_copy(&newobj->ctx, self); + if (!locked_EVP_MD_CTX_copy(newobj->ctx, self)) { + return _setException(PyExc_ValueError); + } return (PyObject *)newobj; } @@ -137,16 +189,24 @@ static PyObject * EVP_digest(EVPobject *self, PyObject *unused) { unsigned char digest[EVP_MAX_MD_SIZE]; - EVP_MD_CTX temp_ctx; + EVP_MD_CTX *temp_ctx; PyObject *retval; unsigned int digest_size; - locked_EVP_MD_CTX_copy(&temp_ctx, self); - digest_size = EVP_MD_CTX_size(&temp_ctx); - EVP_DigestFinal(&temp_ctx, digest, NULL); + temp_ctx = EVP_MD_CTX_new(); + if (temp_ctx == NULL) { + PyErr_NoMemory(); + return NULL; + } + + if (!locked_EVP_MD_CTX_copy(temp_ctx, self)) { + return _setException(PyExc_ValueError); + } + digest_size = EVP_MD_CTX_size(temp_ctx); + EVP_DigestFinal(temp_ctx, digest, NULL); retval = PyBytes_FromStringAndSize((const char *)digest, digest_size); - EVP_MD_CTX_cleanup(&temp_ctx); + EVP_MD_CTX_free(temp_ctx); return retval; } @@ -157,15 +217,23 @@ static PyObject * EVP_hexdigest(EVPobject *self, PyObject *unused) { unsigned char digest[EVP_MAX_MD_SIZE]; - EVP_MD_CTX temp_ctx; + EVP_MD_CTX *temp_ctx; unsigned int digest_size; + temp_ctx = EVP_MD_CTX_new(); + if (temp_ctx == NULL) { + PyErr_NoMemory(); + return NULL; + } + /* Get the raw (binary) digest value */ - locked_EVP_MD_CTX_copy(&temp_ctx, self); - digest_size = EVP_MD_CTX_size(&temp_ctx); - EVP_DigestFinal(&temp_ctx, digest, NULL); + if (!locked_EVP_MD_CTX_copy(temp_ctx, self)) { + return _setException(PyExc_ValueError); + } + digest_size = EVP_MD_CTX_size(temp_ctx); + EVP_DigestFinal(temp_ctx, digest, NULL); - EVP_MD_CTX_cleanup(&temp_ctx); + EVP_MD_CTX_free(temp_ctx); return _Py_strhex((const char *)digest, digest_size); } @@ -219,7 +287,7 @@ static PyObject * EVP_get_block_size(EVPobject *self, void *closure) { long block_size; - block_size = EVP_MD_CTX_block_size(&self->ctx); + block_size = EVP_MD_CTX_block_size(self->ctx); return PyLong_FromLong(block_size); } @@ -227,7 +295,7 @@ static PyObject * EVP_get_digest_size(EVPobject *self, void *closure) { long size; - size = EVP_MD_CTX_size(&self->ctx); + size = EVP_MD_CTX_size(self->ctx); return PyLong_FromLong(size); } @@ -288,7 +356,7 @@ EVP_tp_init(EVPobject *self, PyObject *args, PyObject *kwds) PyBuffer_Release(&view); return -1; } - EVP_DigestInit(&self->ctx, digest); + EVP_DigestInit(self->ctx, digest); self->name = name_obj; Py_INCREF(self->name); @@ -385,9 +453,9 @@ EVPnew(PyObject *name_obj, return NULL; if (initial_ctx) { - EVP_MD_CTX_copy(&self->ctx, initial_ctx); + EVP_MD_CTX_copy(self->ctx, initial_ctx); } else { - EVP_DigestInit(&self->ctx, digest); + EVP_DigestInit(self->ctx, digest); } if (cp && len) { @@ -453,6 +521,7 @@ EVP_new(PyObject *self, PyObject *args, PyObject *kwdict) #define PY_PBKDF2_HMAC 1 +#if !HAS_FAST_PKCS5_PBKDF2_HMAC /* Improved implementation of PKCS5_PBKDF2_HMAC() * * PKCS5_PBKDF2_HMAC_fast() hashes the password exactly one time instead of @@ -534,37 +603,8 @@ PKCS5_PBKDF2_HMAC_fast(const char *pass, int passlen, HMAC_CTX_cleanup(&hctx_tpl); return 1; } +#endif -/* LCOV_EXCL_START */ -static PyObject * -_setException(PyObject *exc) -{ - unsigned long errcode; - const char *lib, *func, *reason; - - errcode = ERR_peek_last_error(); - if (!errcode) { - PyErr_SetString(exc, "unknown reasons"); - return NULL; - } - ERR_clear_error(); - - lib = ERR_lib_error_string(errcode); - func = ERR_func_error_string(errcode); - reason = ERR_reason_error_string(errcode); - - if (lib && func) { - PyErr_Format(exc, "[%s: %s] %s", lib, func, reason); - } - else if (lib) { - PyErr_Format(exc, "[%s] %s", lib, reason); - } - else { - PyErr_SetString(exc, reason); - } - return NULL; -} -/* LCOV_EXCL_STOP */ PyDoc_STRVAR(pbkdf2_hmac__doc__, "pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None) -> key\n\ @@ -646,10 +686,17 @@ pbkdf2_hmac(PyObject *self, PyObject *args, PyObject *kwdict) key = PyBytes_AS_STRING(key_obj); Py_BEGIN_ALLOW_THREADS +#if HAS_FAST_PKCS5_PBKDF2_HMAC + retval = PKCS5_PBKDF2_HMAC((char*)password.buf, (int)password.len, + (unsigned char *)salt.buf, (int)salt.len, + iterations, digest, dklen, + (unsigned char *)key); +#else retval = PKCS5_PBKDF2_HMAC_fast((char*)password.buf, (int)password.len, (unsigned char *)salt.buf, (int)salt.len, iterations, digest, dklen, (unsigned char *)key); +#endif Py_END_ALLOW_THREADS if (!retval) { @@ -724,7 +771,7 @@ generate_hash_name_list(void) /* * This macro generates constructor function definitions for specific * hash algorithms. These constructors are much faster than calling - * the generic one passing it a python string and are noticably + * the generic one passing it a python string and are noticeably * faster than calling a python new() wrapper. Thats important for * code that wants to make hashes of a bunch of small strings. */ @@ -768,7 +815,7 @@ generate_hash_name_list(void) if (CONST_ ## NAME ## _name_obj == NULL) { \ CONST_ ## NAME ## _name_obj = PyUnicode_FromString(#NAME); \ if (EVP_get_digestbyname(#NAME)) { \ - CONST_new_ ## NAME ## _ctx_p = &CONST_new_ ## NAME ## _ctx; \ + CONST_new_ ## NAME ## _ctx_p = EVP_MD_CTX_new(); \ EVP_DigestInit(CONST_new_ ## NAME ## _ctx_p, EVP_get_digestbyname(#NAME)); \ } \ } \ diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index ec68170..e9f22af 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -227,10 +227,10 @@ opened in a binary mode. [clinic start generated code]*/ static PyObject * -_io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, +_io_open_impl(PyObject *module, PyObject *file, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd, PyObject *opener) -/*[clinic end generated code: output=7615d0d746eb14d2 input=f4e1ca75223987bc]*/ +/*[clinic end generated code: output=aefafc4ce2b46dc0 input=f4e1ca75223987bc]*/ { unsigned i; @@ -654,7 +654,7 @@ PyInit__io(void) /* UnsupportedOperation inherits from ValueError and IOError */ state->unsupported_operation = PyObject_CallFunction( (PyObject *)&PyType_Type, "s(OO){}", - "UnsupportedOperation", PyExc_ValueError, PyExc_IOError); + "UnsupportedOperation", PyExc_OSError, PyExc_ValueError); if (state->unsupported_operation == NULL) goto fail; Py_INCREF(state->unsupported_operation); diff --git a/Modules/_io/clinic/_iomodule.c.h b/Modules/_io/clinic/_iomodule.c.h index a3abb93..6c88e32 100644 --- a/Modules/_io/clinic/_iomodule.c.h +++ b/Modules/_io/clinic/_iomodule.c.h @@ -130,12 +130,12 @@ PyDoc_STRVAR(_io_open__doc__, {"open", (PyCFunction)_io_open, METH_VARARGS|METH_KEYWORDS, _io_open__doc__}, static PyObject * -_io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, +_io_open_impl(PyObject *module, PyObject *file, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd, PyObject *opener); static PyObject * -_io_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_io_open(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"file", "mode", "buffering", "encoding", "errors", "newline", "closefd", "opener", NULL}; @@ -156,4 +156,4 @@ _io_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=97cdc09bf68a8064 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=bc2c003cb7daeafe input=a9049054013a1b77]*/ diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index 212b0dd..57541a8 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -90,7 +90,7 @@ iobase_unsupported(const char *message) return NULL; } -/* Positionning */ +/* Positioning */ PyDoc_STRVAR(iobase_seek_doc, "Change stream position.\n" diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 063caa6..46c99b5 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -1023,7 +1023,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, else if (PyUnicode_Check(res)) { encodefuncentry *e = encodefuncs; while (e->name != NULL) { - if (!PyUnicode_CompareWithASCIIString(res, e->name)) { + if (_PyUnicode_EqualToASCIIString(res, e->name)) { self->encodefunc = e->encodefunc; break; } @@ -1103,7 +1103,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, } static int -_textiowrapper_clear(textio *self) +textiowrapper_clear(textio *self) { self->ok = 0; Py_CLEAR(self->buffer); @@ -1116,6 +1116,8 @@ _textiowrapper_clear(textio *self) Py_CLEAR(self->snapshot); Py_CLEAR(self->errors); Py_CLEAR(self->raw); + + Py_CLEAR(self->dict); return 0; } @@ -1125,11 +1127,11 @@ textiowrapper_dealloc(textio *self) self->finalizing = 1; if (_PyIOBase_finalize((PyObject *) self) < 0) return; - _textiowrapper_clear(self); + self->ok = 0; _PyObject_GC_UNTRACK(self); if (self->weakreflist != NULL) PyObject_ClearWeakRefs((PyObject *)self); - Py_CLEAR(self->dict); + textiowrapper_clear(self); Py_TYPE(self)->tp_free((PyObject *)self); } @@ -1151,15 +1153,6 @@ textiowrapper_traverse(textio *self, visitproc visit, void *arg) return 0; } -static int -textiowrapper_clear(textio *self) -{ - if (_textiowrapper_clear(self) < 0) - return -1; - Py_CLEAR(self->dict); - return 0; -} - static PyObject * textiowrapper_closed_get(textio *self, void *context); diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index b1d6add..b1307ef 100644 --- a/Modules/_localemodule.c +++ b/Modules/_localemodule.c @@ -54,9 +54,10 @@ copy_grouping(char* s) int i; PyObject *result, *val = NULL; - if (s[0] == '\0') + if (s[0] == '\0') { /* empty string: no grouping at all */ return PyList_New(0); + } for (i = 0; s[i] != '\0' && s[i] != CHAR_MAX; i++) ; /* nothing */ diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c index 66e534f..7876e71 100644 --- a/Modules/_lsprof.c +++ b/Modules/_lsprof.c @@ -185,7 +185,7 @@ normalizeUserObj(PyObject *obj) } } if (modname != NULL) { - if (PyUnicode_CompareWithASCIIString(modname, "builtins") != 0) { + if (!_PyUnicode_EqualToASCIIString(modname, "builtins")) { PyObject *result; result = PyUnicode_FromFormat("<%U.%s>", modname, fn->m_ml->ml_name); diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index 846dc0e..e7b1ed9 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -527,6 +527,8 @@ compress(Compressor *c, uint8_t *data, size_t len, lzma_action action) Py_BEGIN_ALLOW_THREADS lzret = lzma_code(&c->lzs, action); data_size = (char *)c->lzs.next_out - PyBytes_AS_STRING(result); + if (lzret == LZMA_BUF_ERROR && len == 0 && c->lzs.avail_out > 0) + lzret = LZMA_OK; /* That wasn't a real error */ Py_END_ALLOW_THREADS if (catch_lzma_error(lzret)) goto error; @@ -906,6 +908,9 @@ decompress_buf(Decompressor *d, Py_ssize_t max_length) PyObject *result; lzma_stream *lzs = &d->lzs; + if (lzs->avail_in == 0) + return PyBytes_FromStringAndSize(NULL, 0); + if (max_length < 0 || max_length >= INITIAL_BUFFER_SIZE) result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE); else @@ -1005,8 +1010,10 @@ decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length) } result = decompress_buf(d, max_length); - if(result == NULL) + if (result == NULL) { + lzs->next_in = NULL; return NULL; + } if (d->eof) { d->needs_input = 0; @@ -1342,8 +1349,8 @@ Always returns True for CHECK_NONE and CHECK_CRC32. [clinic start generated code]*/ static PyObject * -_lzma_is_check_supported_impl(PyModuleDef *module, int check_id) -/*[clinic end generated code: output=bb828e90e00ad96e input=5518297b97b2318f]*/ +_lzma_is_check_supported_impl(PyObject *module, int check_id) +/*[clinic end generated code: output=e4f14ba3ce2ad0a5 input=5518297b97b2318f]*/ { return PyBool_FromLong(lzma_check_is_supported(check_id)); } @@ -1360,8 +1367,8 @@ The result does not include the filter ID itself, only the options. [clinic start generated code]*/ static PyObject * -_lzma__encode_filter_properties_impl(PyModuleDef *module, lzma_filter filter) -/*[clinic end generated code: output=b5fe690acd6b61d1 input=d4c64f1b557c77d4]*/ +_lzma__encode_filter_properties_impl(PyObject *module, lzma_filter filter) +/*[clinic end generated code: output=5c93c8e14e7be5a8 input=d4c64f1b557c77d4]*/ { lzma_ret lzret; uint32_t encoded_size; @@ -1400,9 +1407,9 @@ The result does not include the filter ID itself, only the options. [clinic start generated code]*/ static PyObject * -_lzma__decode_filter_properties_impl(PyModuleDef *module, lzma_vli filter_id, +_lzma__decode_filter_properties_impl(PyObject *module, lzma_vli filter_id, Py_buffer *encoded_props) -/*[clinic end generated code: output=af248f570746668b input=246410800782160c]*/ +/*[clinic end generated code: output=714fd2ef565d5c60 input=246410800782160c]*/ { lzma_filter filter; lzma_ret lzret; diff --git a/Modules/_multiprocessing/semaphore.c b/Modules/_multiprocessing/semaphore.c index de85a90..cea962a 100644 --- a/Modules/_multiprocessing/semaphore.c +++ b/Modules/_multiprocessing/semaphore.c @@ -114,6 +114,9 @@ semlock_acquire(SemLockObject *self, PyObject *args, PyObject *kwds) assert(sigint_event != NULL); handles[nhandles++] = sigint_event; } + else { + sigint_event = NULL; + } /* do the wait */ Py_BEGIN_ALLOW_THREADS diff --git a/Modules/_opcode.c b/Modules/_opcode.c index 663bb21..f9c1c01 100644 --- a/Modules/_opcode.c +++ b/Modules/_opcode.c @@ -20,8 +20,8 @@ Compute the stack effect of the opcode. [clinic start generated code]*/ static int -_opcode_stack_effect_impl(PyModuleDef *module, int opcode, PyObject *oparg) -/*[clinic end generated code: output=1fcafd5596c6b050 input=2d0a9ee53c0418f5]*/ +_opcode_stack_effect_impl(PyObject *module, int opcode, PyObject *oparg) +/*[clinic end generated code: output=ad39467fa3ad22ce input=2d0a9ee53c0418f5]*/ { int effect; int oparg_int = 0; diff --git a/Modules/_operator.c b/Modules/_operator.c index eb4f3a3..dfff1d2 100644 --- a/Modules/_operator.c +++ b/Modules/_operator.c @@ -931,7 +931,7 @@ static PyObject * methodcaller_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { methodcallerobject *mc; - PyObject *name, *newargs; + PyObject *name; if (PyTuple_GET_SIZE(args) < 1) { PyErr_SetString(PyExc_TypeError, "methodcaller needs at least " @@ -951,13 +951,7 @@ methodcaller_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if (mc == NULL) return NULL; - newargs = PyTuple_GetSlice(args, 1, PyTuple_GET_SIZE(args)); - if (newargs == NULL) { - Py_DECREF(mc); - return NULL; - } - mc->args = newargs; - + name = PyTuple_GET_ITEM(args, 0); Py_INCREF(name); PyUnicode_InternInPlace(&name); mc->name = name; @@ -965,6 +959,12 @@ methodcaller_new(PyTypeObject *type, PyObject *args, PyObject *kwds) Py_XINCREF(kwds); mc->kwds = kwds; + mc->args = PyTuple_GetSlice(args, 1, PyTuple_GET_SIZE(args)); + if (mc->args == NULL) { + Py_DECREF(mc); + return NULL; + } + PyObject_GC_Track(mc); return (PyObject *)mc; } diff --git a/Modules/_pickle.c b/Modules/_pickle.c index e52da37..ac7f5c4 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -1675,7 +1675,7 @@ whichmodule(PyObject *global, PyObject *dotted_path) while (PyDict_Next(modules_dict, &i, &module_name, &module)) { PyObject *candidate; if (PyUnicode_Check(module_name) && - !PyUnicode_CompareWithASCIIString(module_name, "__main__")) + _PyUnicode_EqualToASCIIString(module_name, "__main__")) continue; if (module == Py_None) continue; @@ -3406,26 +3406,30 @@ save_pers(PicklerObject *self, PyObject *obj, PyObject *func) goto error; } else { - PyObject *pid_str = NULL; - char *pid_ascii_bytes; - Py_ssize_t size; + PyObject *pid_str; pid_str = PyObject_Str(pid); if (pid_str == NULL) goto error; - /* XXX: Should it check whether the persistent id only contains - ASCII characters? And what if the pid contains embedded + /* XXX: Should it check whether the pid contains embedded newlines? */ - pid_ascii_bytes = _PyUnicode_AsStringAndSize(pid_str, &size); - Py_DECREF(pid_str); - if (pid_ascii_bytes == NULL) + if (!PyUnicode_IS_ASCII(pid_str)) { + PyErr_SetString(_Pickle_GetGlobalState()->PicklingError, + "persistent IDs in protocol 0 must be " + "ASCII strings"); + Py_DECREF(pid_str); goto error; + } if (_Pickler_Write(self, &persid_op, 1) < 0 || - _Pickler_Write(self, pid_ascii_bytes, size) < 0 || - _Pickler_Write(self, "\n", 1) < 0) + _Pickler_Write(self, PyUnicode_DATA(pid_str), + PyUnicode_GET_LENGTH(pid_str)) < 0 || + _Pickler_Write(self, "\n", 1) < 0) { + Py_DECREF(pid_str); goto error; + } + Py_DECREF(pid_str); } status = 1; } @@ -5389,9 +5393,15 @@ load_persid(UnpicklerObject *self) if (len < 1) return bad_readline(); - pid = PyBytes_FromStringAndSize(s, len - 1); - if (pid == NULL) + pid = PyUnicode_DecodeASCII(s, len - 1, "strict"); + if (pid == NULL) { + if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { + PyErr_SetString(_Pickle_GetGlobalState()->UnpicklingError, + "persistent IDs in protocol 0 must be " + "ASCII strings"); + } return -1; + } /* This does not leak since _Pickle_FastCall() steals the reference to pid first. */ @@ -6961,9 +6971,9 @@ to map the new Python 3 names to the old module names used in Python [clinic start generated code]*/ static PyObject * -_pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, +_pickle_dump_impl(PyObject *module, PyObject *obj, PyObject *file, PyObject *protocol, int fix_imports) -/*[clinic end generated code: output=0de7dff89c406816 input=830f8a64cef6f042]*/ +/*[clinic end generated code: output=a4774d5fde7d34de input=830f8a64cef6f042]*/ { PicklerObject *pickler = _Pickler_New(); @@ -7015,9 +7025,9 @@ Python 2, so that the pickle data stream is readable with Python 2. [clinic start generated code]*/ static PyObject * -_pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, +_pickle_dumps_impl(PyObject *module, PyObject *obj, PyObject *protocol, int fix_imports) -/*[clinic end generated code: output=daa380db56fe07b9 input=293dbeda181580b7]*/ +/*[clinic end generated code: output=d75d5cda456fd261 input=293dbeda181580b7]*/ { PyObject *result; PicklerObject *pickler = _Pickler_New(); @@ -7076,9 +7086,9 @@ string instances as bytes objects. [clinic start generated code]*/ static PyObject * -_pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, +_pickle_load_impl(PyObject *module, PyObject *file, int fix_imports, const char *encoding, const char *errors) -/*[clinic end generated code: output=798f1c57cb2b4eb1 input=01b44dd3fc07afa7]*/ +/*[clinic end generated code: output=69e298160285199e input=01b44dd3fc07afa7]*/ { PyObject *result; UnpicklerObject *unpickler = _Unpickler_New(); @@ -7130,9 +7140,9 @@ string instances as bytes objects. [clinic start generated code]*/ static PyObject * -_pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, +_pickle_loads_impl(PyObject *module, PyObject *data, int fix_imports, const char *encoding, const char *errors) -/*[clinic end generated code: output=61e9cdb01e36a736 input=70605948a719feb9]*/ +/*[clinic end generated code: output=1e7cb2343f2c440f input=70605948a719feb9]*/ { PyObject *result; UnpicklerObject *unpickler = _Unpickler_New(); diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index 8bedab5..c0240e2 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -522,7 +522,7 @@ error: char *cur; _Py_write_noraise(errpipe_write, "OSError:", 8); cur = hex_errno + sizeof(hex_errno); - while (saved_errno != 0 && cur > hex_errno) { + while (saved_errno != 0 && cur != hex_errno) { *--cur = Py_hexdigits[saved_errno % 16]; saved_errno /= 16; } diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 7570624..70d0995 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -43,6 +43,14 @@ _Py_IDENTIFIER(cursor); +static const char * const begin_statements[] = { + "BEGIN ", + "BEGIN DEFERRED", + "BEGIN IMMEDIATE", + "BEGIN EXCLUSIVE", + NULL +}; + static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level); static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self); @@ -164,6 +172,10 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject #ifdef WITH_THREAD self->thread_ident = PyThread_get_thread_ident(); #endif + if (!check_same_thread && sqlite3_libversion_number() < 3003001) { + PyErr_SetString(pysqlite_NotSupportedError, "shared connections not available"); + return -1; + } self->check_same_thread = check_same_thread; self->function_pinboard = PyDict_New(); @@ -254,9 +266,6 @@ void pysqlite_connection_dealloc(pysqlite_Connection* self) Py_END_ALLOW_THREADS } - if (self->begin_statement) { - PyMem_Free(self->begin_statement); - } Py_XDECREF(self->isolation_level); Py_XDECREF(self->function_pinboard); Py_XDECREF(self->row_factory); @@ -296,7 +305,7 @@ error: PyObject* pysqlite_connection_cursor(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) { - static char *kwlist[] = {"factory", NULL, NULL}; + static char *kwlist[] = {"factory", NULL}; PyObject* factory = NULL; PyObject* cursor; @@ -313,7 +322,16 @@ PyObject* pysqlite_connection_cursor(pysqlite_Connection* self, PyObject* args, factory = (PyObject*)&pysqlite_CursorType; } - cursor = PyObject_CallFunction(factory, "O", self); + cursor = PyObject_CallFunctionObjArgs(factory, (PyObject *)self, NULL); + if (cursor == NULL) + return NULL; + if (!PyObject_TypeCheck(cursor, &pysqlite_CursorType)) { + PyErr_Format(PyExc_TypeError, + "factory must return a cursor, not %.100s", + Py_TYPE(cursor)->tp_name); + Py_DECREF(cursor); + return NULL; + } _pysqlite_drop_unused_cursor_references(self); @@ -422,7 +440,6 @@ PyObject* pysqlite_connection_commit(pysqlite_Connection* self, PyObject* args) } if (self->inTransaction) { - pysqlite_do_all_statements(self, ACTION_RESET, 0); Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(self->db, "COMMIT", -1, &statement, &tail); @@ -1171,59 +1188,48 @@ static PyObject* pysqlite_connection_get_total_changes(pysqlite_Connection* self static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level) { - PyObject* res; - PyObject* begin_statement; - static PyObject* begin_word; - - Py_XDECREF(self->isolation_level); - - if (self->begin_statement) { - PyMem_Free(self->begin_statement); - self->begin_statement = NULL; - } - if (isolation_level == Py_None) { - Py_INCREF(Py_None); - self->isolation_level = Py_None; - - res = pysqlite_connection_commit(self, NULL); + PyObject *res = pysqlite_connection_commit(self, NULL); if (!res) { return -1; } Py_DECREF(res); + self->begin_statement = NULL; self->inTransaction = 0; } else { - const char *statement; - Py_ssize_t size; - - Py_INCREF(isolation_level); - self->isolation_level = isolation_level; - - if (!begin_word) { - begin_word = PyUnicode_FromString("BEGIN "); - if (!begin_word) return -1; - } - begin_statement = PyUnicode_Concat(begin_word, isolation_level); - if (!begin_statement) { + const char * const *candidate; + PyObject *uppercase_level; + _Py_IDENTIFIER(upper); + + if (!PyUnicode_Check(isolation_level)) { + PyErr_Format(PyExc_TypeError, + "isolation_level must be a string or None, not %.100s", + Py_TYPE(isolation_level)->tp_name); return -1; } - statement = _PyUnicode_AsStringAndSize(begin_statement, &size); - if (!statement) { - Py_DECREF(begin_statement); + uppercase_level = _PyObject_CallMethodIdObjArgs( + (PyObject *)&PyUnicode_Type, &PyId_upper, + isolation_level, NULL); + if (!uppercase_level) { return -1; } - self->begin_statement = PyMem_Malloc(size + 2); - if (!self->begin_statement) { - Py_DECREF(begin_statement); + for (candidate = begin_statements; *candidate; candidate++) { + if (_PyUnicode_EqualToASCIIString(uppercase_level, *candidate + 6)) + break; + } + Py_DECREF(uppercase_level); + if (!*candidate) { + PyErr_SetString(PyExc_ValueError, + "invalid value for isolation_level"); return -1; } - - strcpy(self->begin_statement, statement); - Py_DECREF(begin_statement); + self->begin_statement = *candidate; } + Py_INCREF(isolation_level); + Py_XSETREF(self->isolation_level, isolation_level); return 0; } @@ -1517,11 +1523,13 @@ pysqlite_connection_create_collation(pysqlite_Connection* self, PyObject* args) goto finally; } - if (!PyArg_ParseTuple(args, "O!O:create_collation(name, callback)", &PyUnicode_Type, &name, &callable)) { + if (!PyArg_ParseTuple(args, "UO:create_collation(name, callback)", + &name, &callable)) { goto finally; } - uppercase_name = _PyObject_CallMethodId(name, &PyId_upper, ""); + uppercase_name = _PyObject_CallMethodIdObjArgs((PyObject *)&PyUnicode_Type, + &PyId_upper, name, NULL); if (!uppercase_name) { goto finally; } diff --git a/Modules/_sqlite/connection.h b/Modules/_sqlite/connection.h index fbd9063..adbfb54 100644 --- a/Modules/_sqlite/connection.h +++ b/Modules/_sqlite/connection.h @@ -55,9 +55,8 @@ typedef struct /* None for autocommit, otherwise a PyUnicode with the isolation level */ PyObject* isolation_level; - /* NULL for autocommit, otherwise a string with the BEGIN statement; will be - * freed in connection destructor */ - char* begin_statement; + /* NULL for autocommit, otherwise a string with the BEGIN statement */ + const char* begin_statement; /* 1 if a check should be performed for each API call if the connection is * used from the same thread it was created in */ diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 300da28..e1676de 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -646,12 +646,11 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* goto error; } - if (rc == SQLITE_ROW || (rc == SQLITE_DONE && statement_type == STATEMENT_SELECT)) { - if (self->description == Py_None) { - Py_BEGIN_ALLOW_THREADS - numcols = sqlite3_column_count(self->statement->st); - Py_END_ALLOW_THREADS - + if (rc == SQLITE_ROW || rc == SQLITE_DONE) { + Py_BEGIN_ALLOW_THREADS + numcols = sqlite3_column_count(self->statement->st); + Py_END_ALLOW_THREADS + if (self->description == Py_None && numcols > 0) { Py_SETREF(self->description, PyTuple_New(numcols)); if (!self->description) { goto error; diff --git a/Modules/_sqlite/module.h b/Modules/_sqlite/module.h index b51724b..0fb5a55 100644 --- a/Modules/_sqlite/module.h +++ b/Modules/_sqlite/module.h @@ -42,7 +42,7 @@ extern PyObject* pysqlite_NotSupportedError; extern PyObject* time_time; extern PyObject* time_sleep; -/* A dictionary, mapping colum types (INTEGER, VARCHAR, etc.) to converter +/* A dictionary, mapping column types (INTEGER, VARCHAR, etc.) to converter * functions, that convert the SQL value to the appropriate Python value. * The key is uppercase. */ diff --git a/Modules/_sre.c b/Modules/_sre.c index 150229d..09b5835 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -278,8 +278,8 @@ _sre.getcodesize -> int [clinic start generated code]*/ static int -_sre_getcodesize_impl(PyModuleDef *module) -/*[clinic end generated code: output=794f1f98ef4883e5 input=bd6f6ecf4916bb2b]*/ +_sre_getcodesize_impl(PyObject *module) +/*[clinic end generated code: output=e0db7ce34a6dd7b1 input=bd6f6ecf4916bb2b]*/ { return sizeof(SRE_CODE); } @@ -294,8 +294,8 @@ _sre.getlower -> int [clinic start generated code]*/ static int -_sre_getlower_impl(PyModuleDef *module, int character, int flags) -/*[clinic end generated code: output=5fc3616ae2a4c306 input=087d2f1c44bbca6f]*/ +_sre_getlower_impl(PyObject *module, int character, int flags) +/*[clinic end generated code: output=47eebc4c1214feb5 input=087d2f1c44bbca6f]*/ { if (flags & SRE_FLAG_LOCALE) return sre_lower_locale(character); @@ -1454,10 +1454,10 @@ _sre.compile [clinic start generated code]*/ static PyObject * -_sre_compile_impl(PyModuleDef *module, PyObject *pattern, int flags, +_sre_compile_impl(PyObject *module, PyObject *pattern, int flags, PyObject *code, Py_ssize_t groups, PyObject *groupindex, PyObject *indexgroup) -/*[clinic end generated code: output=3004b293730bf309 input=7d059ec8ae1edb85]*/ +/*[clinic end generated code: output=ef9c2b3693776404 input=7d059ec8ae1edb85]*/ { /* "compile" pattern descriptor to pattern object */ @@ -2196,10 +2196,8 @@ _sre_SRE_Match_groupdict_impl(MatchObject *self, PyObject *default_value) if (!key) goto failed; value = match_getslice(self, key, default_value); - if (!value) { - Py_DECREF(key); + if (!value) goto failed; - } status = PyDict_SetItem(result, key, value); Py_DECREF(value); if (status < 0) diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 1117b55..a79c3a8 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -55,6 +55,14 @@ static PySocketModule_APIObject PySocketModule; #include #endif +/* Don't warn about deprecated functions */ +#ifdef __GNUC__ +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +#endif + /* Include OpenSSL header files */ #include "openssl/rsa.h" #include "openssl/crypto.h" @@ -91,6 +99,10 @@ struct py_ssl_library_code { /* Include generated data (error codes) */ #include "_ssl_data.h" +#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) +# define OPENSSL_VERSION_1_1 1 +#endif + /* Openssl comes with TLSv1.1 and TLSv1.2 between 1.0.0h and 1.0.1 http://www.openssl.org/news/changelog.html */ @@ -113,6 +125,71 @@ struct py_ssl_library_code { # define HAVE_ALPN #endif +#ifndef INVALID_SOCKET /* MS defines this */ +#define INVALID_SOCKET (-1) +#endif + +#ifdef OPENSSL_VERSION_1_1 +/* OpenSSL 1.1.0+ */ +#ifndef OPENSSL_NO_SSL2 +#define OPENSSL_NO_SSL2 +#endif +#else /* OpenSSL < 1.1.0 */ +#if defined(WITH_THREAD) +#define HAVE_OPENSSL_CRYPTO_LOCK +#endif + +#define TLS_method SSLv23_method + +static int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne) +{ + return ne->set; +} + +#ifndef OPENSSL_NO_COMP +static int COMP_get_type(const COMP_METHOD *meth) +{ + return meth->type; +} +#endif + +static pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx) +{ + return ctx->default_passwd_callback; +} + +static void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx) +{ + return ctx->default_passwd_callback_userdata; +} + +static int X509_OBJECT_get_type(X509_OBJECT *x) +{ + return x->type; +} + +static X509 *X509_OBJECT_get0_X509(X509_OBJECT *x) +{ + return x->data.x509; +} + +static int BIO_up_ref(BIO *b) +{ + CRYPTO_add(&b->references, 1, CRYPTO_LOCK_BIO); + return 1; +} + +static STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *store) { + return store->objs; +} + +static X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *store) +{ + return store->param; +} +#endif /* OpenSSL < 1.1.0 or LibreSSL */ + + enum py_ssl_error { /* these mirror ssl.h */ PY_SSL_ERROR_NONE, @@ -143,7 +220,7 @@ enum py_ssl_cert_requirements { enum py_ssl_version { PY_SSL_VERSION_SSL2, PY_SSL_VERSION_SSL3=1, - PY_SSL_VERSION_SSL23, + PY_SSL_VERSION_TLS, #if HAVE_TLSv1_2 PY_SSL_VERSION_TLS1, PY_SSL_VERSION_TLS1_1, @@ -483,7 +560,6 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, { PySSLSocket *self; SSL_CTX *ctx = sslctx->ctx; - PyObject *hostname; long mode; self = PyObject_New(PySSLSocket, &PySSLSocket_Type); @@ -497,16 +573,16 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, self->shutdown_seen_zero = 0; self->handshake_done = 0; self->owner = NULL; + self->server_hostname = NULL; if (server_hostname != NULL) { - hostname = PyUnicode_Decode(server_hostname, strlen(server_hostname), - "idna", "strict"); + PyObject *hostname = PyUnicode_Decode(server_hostname, strlen(server_hostname), + "idna", "strict"); if (hostname == NULL) { Py_DECREF(self); return NULL; } self->server_hostname = hostname; - } else - self->server_hostname = NULL; + } Py_INCREF(sslctx); @@ -524,8 +600,8 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, /* BIOs are reference counted and SSL_set_bio borrows our reference. * To prevent a double free in memory_bio_dealloc() we need to take an * extra reference here. */ - CRYPTO_add(&inbio->bio->references, 1, CRYPTO_LOCK_BIO); - CRYPTO_add(&outbio->bio->references, 1, CRYPTO_LOCK_BIO); + BIO_up_ref(inbio->bio); + BIO_up_ref(outbio->bio); SSL_set_bio(self->ssl, inbio->bio, outbio->bio); } mode = SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER; @@ -559,7 +635,6 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, self->Socket = PyWeakref_NewRef((PyObject *) sock, NULL); if (self->Socket == NULL) { Py_DECREF(self); - Py_XDECREF(self->server_hostname); return NULL; } } @@ -736,7 +811,7 @@ _create_tuple_for_X509_NAME (X509_NAME *xname) /* check to see if we've gotten to a new RDN */ if (rdn_level >= 0) { - if (rdn_level != entry->set) { + if (rdn_level != X509_NAME_ENTRY_set(entry)) { /* yes, new RDN */ /* add old RDN to DN */ rdnt = PyList_AsTuple(rdn); @@ -753,7 +828,7 @@ _create_tuple_for_X509_NAME (X509_NAME *xname) goto fail0; } } - rdn_level = entry->set; + rdn_level = X509_NAME_ENTRY_set(entry); /* now add this attribute to the current RDN */ name = X509_NAME_ENTRY_get_object(entry); @@ -851,18 +926,18 @@ _get_peer_alt_names (X509 *certificate) { goto fail; } - p = ext->value->data; + p = X509_EXTENSION_get_data(ext)->data; if (method->it) names = (GENERAL_NAMES*) (ASN1_item_d2i(NULL, &p, - ext->value->length, + X509_EXTENSION_get_data(ext)->length, ASN1_ITEM_ptr(method->it))); else names = (GENERAL_NAMES*) (method->d2i(NULL, &p, - ext->value->length)); + X509_EXTENSION_get_data(ext)->length)); for(j = 0; j < sk_GENERAL_NAME_num(names); j++) { /* get a rendering of each name in the set of names */ @@ -932,6 +1007,35 @@ _get_peer_alt_names (X509 *certificate) { PyTuple_SET_ITEM(t, 1, v); break; + case GEN_RID: + t = PyTuple_New(2); + if (t == NULL) + goto fail; + + v = PyUnicode_FromString("Registered ID"); + if (v == NULL) { + Py_DECREF(t); + goto fail; + } + PyTuple_SET_ITEM(t, 0, v); + + len = i2t_ASN1_OBJECT(buf, sizeof(buf)-1, name->d.rid); + if (len < 0) { + Py_DECREF(t); + _setSSLError(NULL, 0, __FILE__, __LINE__); + goto fail; + } else if (len >= (int)sizeof(buf)) { + v = PyUnicode_FromString(""); + } else { + v = PyUnicode_FromStringAndSize(buf, len); + } + if (v == NULL) { + Py_DECREF(t); + goto fail; + } + PyTuple_SET_ITEM(t, 1, v); + break; + default: /* for everything else, we use the OpenSSL print form */ switch (gntype) { @@ -958,8 +1062,12 @@ _get_peer_alt_names (X509 *certificate) { goto fail; } vptr = strchr(buf, ':'); - if (vptr == NULL) + if (vptr == NULL) { + PyErr_Format(PyExc_ValueError, + "Invalid value %.200s", + buf); goto fail; + } t = PyTuple_New(2); if (t == NULL) goto fail; @@ -1073,13 +1181,11 @@ _get_crl_dp(X509 *certificate) { int i, j; PyObject *lst, *res = NULL; -#if OPENSSL_VERSION_NUMBER < 0x10001000L - dps = X509_get_ext_d2i(certificate, NID_crl_distribution_points, NULL, NULL); -#else +#if OPENSSL_VERSION_NUMBER >= 0x10001000L /* Calls x509v3_cache_extensions and sets up crldp */ X509_check_ca(certificate); - dps = certificate->crldp; #endif + dps = X509_get_ext_d2i(certificate, NID_crl_distribution_points, NULL, NULL); if (dps == NULL) return Py_None; @@ -1321,8 +1427,8 @@ _ssl._test_decode_cert [clinic start generated code]*/ static PyObject * -_ssl__test_decode_cert_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=679e01db282804e9 input=cdeaaf02d4346628]*/ +_ssl__test_decode_cert_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=96becb9abb23c091 input=cdeaaf02d4346628]*/ { PyObject *retval = NULL; X509 *x=NULL; @@ -1449,14 +1555,13 @@ static PyObject * _ssl__SSLSocket_shared_ciphers_impl(PySSLSocket *self) /*[clinic end generated code: output=3d174ead2e42c4fd input=0bfe149da8fe6306]*/ { - SSL_SESSION *sess = SSL_get_session(self->ssl); STACK_OF(SSL_CIPHER) *ciphers; int i; PyObject *res; - if (!sess || !sess->ciphers) + ciphers = SSL_get_ciphers(self->ssl); + if (!ciphers) Py_RETURN_NONE; - ciphers = sess->ciphers; res = PyList_New(sk_SSL_CIPHER_num(ciphers)); if (!res) return NULL; @@ -1565,9 +1670,9 @@ _ssl__SSLSocket_compression_impl(PySSLSocket *self) if (self->ssl == NULL) Py_RETURN_NONE; comp_method = SSL_get_current_compression(self->ssl); - if (comp_method == NULL || comp_method->type == NID_undef) + if (comp_method == NULL || COMP_get_type(comp_method) == NID_undef) Py_RETURN_NONE; - short_name = OBJ_nid2sn(comp_method->type); + short_name = OBJ_nid2sn(COMP_get_type(comp_method)); if (short_name == NULL) Py_RETURN_NONE; return PyUnicode_DecodeFSDefault(short_name); @@ -1699,7 +1804,7 @@ PySSL_select(PySocketSockObject *s, int writing, _PyTime_t timeout) } /* Guard against closed socket */ - if (s->sock_fd < 0) + if (s->sock_fd == INVALID_SOCKET) return SOCKET_HAS_BEEN_CLOSED; /* Prefer poll, if available, since you can poll() any fd @@ -1913,6 +2018,10 @@ _ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1, dest = PyBytes_FromStringAndSize(NULL, len); if (dest == NULL) goto error; + if (len == 0) { + Py_XDECREF(sock); + return dest; + } mem = PyBytes_AS_STRING(dest); } else { @@ -1924,6 +2033,10 @@ _ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1, "maximum length can't fit in a C 'int'"); goto error; } + if (len == 0) { + count = 0; + goto done; + } } } @@ -2015,7 +2128,7 @@ _ssl__SSLSocket_shutdown_impl(PySSLSocket *self) if (sock != NULL) { /* Guard against closed socket */ - if ((((PyObject*)sock) == Py_None) || (sock->sock_fd < 0)) { + if ((((PyObject*)sock) == Py_None) || (sock->sock_fd == INVALID_SOCKET)) { _setSSLError("Underlying socket connection gone", PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); return NULL; @@ -2245,8 +2358,8 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); #endif - else if (proto_version == PY_SSL_VERSION_SSL23) - ctx = SSL_CTX_new(SSLv23_method()); + else if (proto_version == PY_SSL_VERSION_TLS) + ctx = SSL_CTX_new(TLS_method()); else proto_version = -1; PySSL_END_ALLOW_THREADS @@ -2308,8 +2421,9 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) #ifndef OPENSSL_NO_ECDH /* Allow automatic ECDH curve selection (on OpenSSL 1.0.2+), or use prime256v1 by default. This is Apache mod_ssl's initialization - policy, so we should be safe. */ -#if defined(SSL_CTX_set_ecdh_auto) + policy, so we should be safe. OpenSSL 1.1 has it enabled by default. + */ +#if defined(SSL_CTX_set_ecdh_auto) && !defined(OPENSSL_VERSION_1_1) SSL_CTX_set_ecdh_auto(self->ctx, 1); #else { @@ -2576,10 +2690,12 @@ static PyObject * get_verify_flags(PySSLContext *self, void *c) { X509_STORE *store; + X509_VERIFY_PARAM *param; unsigned long flags; store = SSL_CTX_get_cert_store(self->ctx); - flags = X509_VERIFY_PARAM_get_flags(store->param); + param = X509_STORE_get0_param(store); + flags = X509_VERIFY_PARAM_get_flags(param); return PyLong_FromUnsignedLong(flags); } @@ -2587,22 +2703,24 @@ static int set_verify_flags(PySSLContext *self, PyObject *arg, void *c) { X509_STORE *store; + X509_VERIFY_PARAM *param; unsigned long new_flags, flags, set, clear; if (!PyArg_Parse(arg, "k", &new_flags)) return -1; store = SSL_CTX_get_cert_store(self->ctx); - flags = X509_VERIFY_PARAM_get_flags(store->param); + param = X509_STORE_get0_param(store); + flags = X509_VERIFY_PARAM_get_flags(param); clear = flags & ~new_flags; set = ~flags & new_flags; if (clear) { - if (!X509_VERIFY_PARAM_clear_flags(store->param, clear)) { + if (!X509_VERIFY_PARAM_clear_flags(param, clear)) { _setSSLError(NULL, 0, __FILE__, __LINE__); return -1; } } if (set) { - if (!X509_VERIFY_PARAM_set_flags(store->param, set)) { + if (!X509_VERIFY_PARAM_set_flags(param, set)) { _setSSLError(NULL, 0, __FILE__, __LINE__); return -1; } @@ -2779,8 +2897,8 @@ _ssl__SSLContext_load_cert_chain_impl(PySSLContext *self, PyObject *certfile, /*[clinic end generated code: output=9480bc1c380e2095 input=7cf9ac673cbee6fc]*/ { PyObject *certfile_bytes = NULL, *keyfile_bytes = NULL; - pem_password_cb *orig_passwd_cb = self->ctx->default_passwd_callback; - void *orig_passwd_userdata = self->ctx->default_passwd_callback_userdata; + pem_password_cb *orig_passwd_cb = SSL_CTX_get_default_passwd_cb(self->ctx); + void *orig_passwd_userdata = SSL_CTX_get_default_passwd_cb_userdata(self->ctx); _PySSLPasswordInfo pw_info = { NULL, NULL, NULL, 0, 0 }; int r; @@ -2907,8 +3025,9 @@ _add_ca_certs(PySSLContext *self, void *data, Py_ssize_t len, cert = d2i_X509_bio(biobuf, NULL); } else { cert = PEM_read_bio_X509(biobuf, NULL, - self->ctx->default_passwd_callback, - self->ctx->default_passwd_callback_userdata); + SSL_CTX_get_default_passwd_cb(self->ctx), + SSL_CTX_get_default_passwd_cb_userdata(self->ctx) + ); } if (cert == NULL) { break; @@ -3434,25 +3553,24 @@ _ssl__SSLContext_cert_store_stats_impl(PySSLContext *self) /*[clinic end generated code: output=5f356f4d9cca874d input=eb40dd0f6d0e40cf]*/ { X509_STORE *store; + STACK_OF(X509_OBJECT) *objs; X509_OBJECT *obj; - int x509 = 0, crl = 0, pkey = 0, ca = 0, i; + int x509 = 0, crl = 0, ca = 0, i; store = SSL_CTX_get_cert_store(self->ctx); - for (i = 0; i < sk_X509_OBJECT_num(store->objs); i++) { - obj = sk_X509_OBJECT_value(store->objs, i); - switch (obj->type) { + objs = X509_STORE_get0_objects(store); + for (i = 0; i < sk_X509_OBJECT_num(objs); i++) { + obj = sk_X509_OBJECT_value(objs, i); + switch (X509_OBJECT_get_type(obj)) { case X509_LU_X509: x509++; - if (X509_check_ca(obj->data.x509)) { + if (X509_check_ca(X509_OBJECT_get0_X509(obj))) { ca++; } break; case X509_LU_CRL: crl++; break; - case X509_LU_PKEY: - pkey++; - break; default: /* Ignore X509_LU_FAIL, X509_LU_RETRY, X509_LU_PKEY. * As far as I can tell they are internal states and never @@ -3482,6 +3600,7 @@ _ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form) /*[clinic end generated code: output=0d58f148f37e2938 input=6887b5a09b7f9076]*/ { X509_STORE *store; + STACK_OF(X509_OBJECT) *objs; PyObject *ci = NULL, *rlist = NULL; int i; @@ -3490,17 +3609,18 @@ _ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form) } store = SSL_CTX_get_cert_store(self->ctx); - for (i = 0; i < sk_X509_OBJECT_num(store->objs); i++) { + objs = X509_STORE_get0_objects(store); + for (i = 0; i < sk_X509_OBJECT_num(objs); i++) { X509_OBJECT *obj; X509 *cert; - obj = sk_X509_OBJECT_value(store->objs, i); - if (obj->type != X509_LU_X509) { + obj = sk_X509_OBJECT_value(objs, i); + if (X509_OBJECT_get_type(obj) != X509_LU_X509) { /* not a x509 cert */ continue; } /* CA for any purpose */ - cert = obj->data.x509; + cert = X509_OBJECT_get0_X509(obj); if (!X509_check_ca(cert)) { continue; } @@ -3832,8 +3952,8 @@ string. See RFC 1750. [clinic start generated code]*/ static PyObject * -_ssl_RAND_add_impl(PyModuleDef *module, Py_buffer *view, double entropy) -/*[clinic end generated code: output=0f8d5c8cce328958 input=580c85e6a3a4fe29]*/ +_ssl_RAND_add_impl(PyObject *module, Py_buffer *view, double entropy) +/*[clinic end generated code: output=e6dd48df9c9024e9 input=580c85e6a3a4fe29]*/ { const char *buf; Py_ssize_t len, written; @@ -3898,8 +4018,8 @@ Generate n cryptographically strong pseudo-random bytes. [clinic start generated code]*/ static PyObject * -_ssl_RAND_bytes_impl(PyModuleDef *module, int n) -/*[clinic end generated code: output=7d8741bdc1d435f3 input=678ddf2872dfebfc]*/ +_ssl_RAND_bytes_impl(PyObject *module, int n) +/*[clinic end generated code: output=977da635e4838bc7 input=678ddf2872dfebfc]*/ { return PySSL_RAND(n, 0); } @@ -3916,8 +4036,8 @@ if the bytes generated are cryptographically strong. [clinic start generated code]*/ static PyObject * -_ssl_RAND_pseudo_bytes_impl(PyModuleDef *module, int n) -/*[clinic end generated code: output=dd673813107f3875 input=58312bd53f9bbdd0]*/ +_ssl_RAND_pseudo_bytes_impl(PyObject *module, int n) +/*[clinic end generated code: output=b1509e937000e52d input=58312bd53f9bbdd0]*/ { return PySSL_RAND(n, 1); } @@ -3932,13 +4052,13 @@ using the ssl() function. [clinic start generated code]*/ static PyObject * -_ssl_RAND_status_impl(PyModuleDef *module) -/*[clinic end generated code: output=7f7ef57bc7dd1d1c input=8a774b02d1dc81f3]*/ +_ssl_RAND_status_impl(PyObject *module) +/*[clinic end generated code: output=7e0aaa2d39fdc1ad input=8a774b02d1dc81f3]*/ { return PyLong_FromLong(RAND_status()); } -#ifdef HAVE_RAND_EGD +#ifndef OPENSSL_NO_EGD /*[clinic input] _ssl.RAND_egd path: object(converter="PyUnicode_FSConverter") @@ -3951,8 +4071,8 @@ fails or if it does not provide enough data to seed PRNG. [clinic start generated code]*/ static PyObject * -_ssl_RAND_egd_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=8e728e501e28541b input=1aeb7eb948312195]*/ +_ssl_RAND_egd_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=02a67c7c367f52fa input=1aeb7eb948312195]*/ { int bytes = RAND_egd(PyBytes_AsString(path)); Py_DECREF(path); @@ -3964,7 +4084,7 @@ _ssl_RAND_egd_impl(PyModuleDef *module, PyObject *path) } return PyLong_FromLong(bytes); } -#endif /* HAVE_RAND_EGD */ +#endif /* OPENSSL_NO_EGD */ @@ -3977,8 +4097,8 @@ The values are 'cert_file_env', 'cert_file', 'cert_dir_env', 'cert_dir'. [clinic start generated code]*/ static PyObject * -_ssl_get_default_verify_paths_impl(PyModuleDef *module) -/*[clinic end generated code: output=5a2820ce7e3304d3 input=5210c953d98c3eb5]*/ +_ssl_get_default_verify_paths_impl(PyObject *module) +/*[clinic end generated code: output=e5b62a466271928b input=5210c953d98c3eb5]*/ { PyObject *ofile_env = NULL; PyObject *ofile = NULL; @@ -4049,8 +4169,8 @@ long name are also matched. [clinic start generated code]*/ static PyObject * -_ssl_txt2obj_impl(PyModuleDef *module, const char *txt, int name) -/*[clinic end generated code: output=2ae2c30531b8809f input=1c1e7d0aa7c48602]*/ +_ssl_txt2obj_impl(PyObject *module, const char *txt, int name) +/*[clinic end generated code: output=c38e3991347079c1 input=1c1e7d0aa7c48602]*/ { PyObject *result = NULL; ASN1_OBJECT *obj; @@ -4074,8 +4194,8 @@ Lookup NID, short name, long name and OID of an ASN1_OBJECT by NID. [clinic start generated code]*/ static PyObject * -_ssl_nid2obj_impl(PyModuleDef *module, int nid) -/*[clinic end generated code: output=8db1df89e44badb8 input=51787a3bee7d8f98]*/ +_ssl_nid2obj_impl(PyObject *module, int nid) +/*[clinic end generated code: output=4a98ab691cd4f84a input=51787a3bee7d8f98]*/ { PyObject *result = NULL; ASN1_OBJECT *obj; @@ -4193,8 +4313,8 @@ a set of OIDs or the boolean True. [clinic start generated code]*/ static PyObject * -_ssl_enum_certificates_impl(PyModuleDef *module, const char *store_name) -/*[clinic end generated code: output=cc4ebc10b8adacfc input=915f60d70461ea4e]*/ +_ssl_enum_certificates_impl(PyObject *module, const char *store_name) +/*[clinic end generated code: output=5134dc8bb3a3c893 input=915f60d70461ea4e]*/ { HCERTSTORE hStore = NULL; PCCERT_CONTEXT pCertCtx = NULL; @@ -4281,8 +4401,8 @@ X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. [clinic start generated code]*/ static PyObject * -_ssl_enum_crls_impl(PyModuleDef *module, const char *store_name) -/*[clinic end generated code: output=763490a2aa1c50d5 input=a1f1d7629f1c5d3d]*/ +_ssl_enum_crls_impl(PyObject *module, const char *store_name) +/*[clinic end generated code: output=bce467f60ccd03b6 input=a1f1d7629f1c5d3d]*/ { HCERTSTORE hStore = NULL; PCCRL_CONTEXT pCrlCtx = NULL; @@ -4364,10 +4484,12 @@ static PyMethodDef PySSL_methods[] = { }; -#ifdef WITH_THREAD +#ifdef HAVE_OPENSSL_CRYPTO_LOCK /* an implementation of OpenSSL threading operations in terms - of the Python C thread library */ + * of the Python C thread library + * Only used up to 1.0.2. OpenSSL 1.1.0+ has its own locking code. + */ static PyThread_type_lock *_ssl_locks = NULL; @@ -4448,7 +4570,7 @@ static int _setup_ssl_threads(void) { return 1; } -#endif /* def HAVE_THREAD */ +#endif /* HAVE_OPENSSL_CRYPTO_LOCK for WITH_THREAD && OpenSSL < 1.1.0 */ PyDoc_STRVAR(module_doc, "Implementation module for SSL socket operations. See the socket module\n\ @@ -4517,11 +4639,16 @@ PyInit__ssl(void) SSL_load_error_strings(); SSL_library_init(); #ifdef WITH_THREAD +#ifdef HAVE_OPENSSL_CRYPTO_LOCK /* note that this will start threading if not already started */ if (!_setup_ssl_threads()) { return NULL; } +#elif OPENSSL_VERSION_1_1 && defined(OPENSSL_THREADS) + /* OpenSSL 1.1.0 builtin thread support is enabled */ + _ssl_locks_count++; #endif +#endif /* WITH_THREAD */ OpenSSL_add_all_algorithms(); /* Add symbols to module dict */ @@ -4668,7 +4795,9 @@ PyInit__ssl(void) PY_SSL_VERSION_SSL3); #endif PyModule_AddIntConstant(m, "PROTOCOL_SSLv23", - PY_SSL_VERSION_SSL23); + PY_SSL_VERSION_TLS); + PyModule_AddIntConstant(m, "PROTOCOL_TLS", + PY_SSL_VERSION_TLS); PyModule_AddIntConstant(m, "PROTOCOL_TLSv1", PY_SSL_VERSION_TLS1); #if HAVE_TLSv1_2 diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 3810e94..060a92d 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -249,6 +249,15 @@ test_dict_iteration(PyObject* self) } +static PyObject* +dict_hassplittable(PyObject *self, PyObject *arg) +{ + if (!PyArg_Parse(arg, "O!:dict_hassplittable", &PyDict_Type, &arg)) { + return NULL; + } + return PyBool_FromLong(_PyDict_HasSplitTable((PyDictObject*)arg)); +} + /* Issue #4701: Check that PyObject_Hash implicitly calls * PyType_Ready if it hasn't already been called */ @@ -1830,6 +1839,69 @@ unicode_aswidecharstring(PyObject *self, PyObject *args) } static PyObject * +unicode_asucs4(PyObject *self, PyObject *args) +{ + PyObject *unicode, *result; + Py_UCS4 *buffer; + int copy_null; + Py_ssize_t str_len, buf_len; + + if (!PyArg_ParseTuple(args, "Unp:unicode_asucs4", &unicode, &str_len, ©_null)) { + return NULL; + } + + buf_len = str_len + 1; + buffer = PyMem_NEW(Py_UCS4, buf_len); + if (buffer == NULL) { + return PyErr_NoMemory(); + } + memset(buffer, 0, sizeof(Py_UCS4)*buf_len); + buffer[str_len] = 0xffffU; + + if (!PyUnicode_AsUCS4(unicode, buffer, buf_len, copy_null)) { + PyMem_FREE(buffer); + return NULL; + } + + result = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buffer, buf_len); + PyMem_FREE(buffer); + return result; +} + +static PyObject * +unicode_copycharacters(PyObject *self, PyObject *args) +{ + PyObject *from, *to, *to_copy; + Py_ssize_t from_start, to_start, how_many, copied; + + if (!PyArg_ParseTuple(args, "UnOnn:unicode_copycharacters", &to, &to_start, + &from, &from_start, &how_many)) { + return NULL; + } + + if (PyUnicode_READY(to) < 0) { + return NULL; + } + + if (!(to_copy = PyUnicode_New(PyUnicode_GET_LENGTH(to), + PyUnicode_MAX_CHAR_VALUE(to)))) { + return NULL; + } + if (PyUnicode_Fill(to_copy, 0, PyUnicode_GET_LENGTH(to_copy), 0U) < 0) { + Py_DECREF(to_copy); + return NULL; + } + + if ((copied = PyUnicode_CopyCharacters(to_copy, to_start, from, + from_start, how_many)) < 0) { + Py_DECREF(to_copy); + return NULL; + } + + return Py_BuildValue("(Nn)", to_copy, copied); +} + +static PyObject * unicode_encodedecimal(PyObject *self, PyObject *args) { Py_UNICODE *unicode; @@ -2247,7 +2319,7 @@ test_string_from_format(PyObject *self, PyObject *args) result = PyUnicode_FromFormat(FORMAT, (TYPE)1); \ if (result == NULL) \ return NULL; \ - if (PyUnicode_CompareWithASCIIString(result, "1")) { \ + if (!_PyUnicode_EqualToASCIIString(result, "1")) { \ msg = FORMAT " failed at 1"; \ goto Fail; \ } \ @@ -3781,7 +3853,7 @@ get_recursion_depth(PyObject *self, PyObject *args) { PyThreadState *tstate = PyThreadState_GET(); - /* substract one to ignore the frame of the get_recursion_depth() call */ + /* subtract one to ignore the frame of the get_recursion_depth() call */ return PyLong_FromLong(tstate->recursion_depth - 1); } @@ -3795,6 +3867,7 @@ static PyMethodDef TestMethods[] = { {"test_datetime_capi", test_datetime_capi, METH_NOARGS}, {"test_list_api", (PyCFunction)test_list_api, METH_NOARGS}, {"test_dict_iteration", (PyCFunction)test_dict_iteration,METH_NOARGS}, + {"dict_hassplittable", dict_hassplittable, METH_O}, {"test_lazy_hash_inheritance", (PyCFunction)test_lazy_hash_inheritance,METH_NOARGS}, {"test_long_api", (PyCFunction)test_long_api, METH_NOARGS}, {"test_xincref_doesnt_leak",(PyCFunction)test_xincref_doesnt_leak, METH_NOARGS}, @@ -3884,6 +3957,8 @@ static PyMethodDef TestMethods[] = { {"test_widechar", (PyCFunction)test_widechar, METH_NOARGS}, {"unicode_aswidechar", unicode_aswidechar, METH_VARARGS}, {"unicode_aswidecharstring",unicode_aswidecharstring, METH_VARARGS}, + {"unicode_asucs4", unicode_asucs4, METH_VARARGS}, + {"unicode_copycharacters", unicode_copycharacters, METH_VARARGS}, {"unicode_encodedecimal", unicode_encodedecimal, METH_VARARGS}, {"unicode_transformdecimaltoascii", unicode_transformdecimaltoascii, METH_VARARGS}, {"unicode_legacy_string", unicode_legacy_string, METH_VARARGS}, diff --git a/Modules/_testmultiphase.c b/Modules/_testmultiphase.c index 2005205..41da997 100644 --- a/Modules/_testmultiphase.c +++ b/Modules/_testmultiphase.c @@ -248,6 +248,7 @@ PyInit__testmultiphase(PyObject *spec) /**** Importing a non-module object ****/ static PyModuleDef def_nonmodule; +static PyModuleDef def_nonmodule_with_methods; /* Create a SimpleNamespace(three=3) */ static PyObject* @@ -255,7 +256,7 @@ createfunc_nonmodule(PyObject *spec, PyModuleDef *def) { PyObject *dct, *ns, *three; - if (def != &def_nonmodule) { + if (def != &def_nonmodule && def != &def_nonmodule_with_methods) { PyErr_SetString(PyExc_SystemError, "def does not match"); return NULL; } @@ -291,6 +292,36 @@ PyInit__testmultiphase_nonmodule(PyObject *spec) return PyModuleDef_Init(&def_nonmodule); } +PyDoc_STRVAR(nonmodule_bar_doc, +"bar(i,j)\n\ +\n\ +Return the difference of i - j."); + +static PyObject * +nonmodule_bar(PyObject *self, PyObject *args) +{ + long i, j; + long res; + if (!PyArg_ParseTuple(args, "ll:bar", &i, &j)) + return NULL; + res = i - j; + return PyLong_FromLong(res); +} + +static PyMethodDef nonmodule_methods[] = { + {"bar", nonmodule_bar, METH_VARARGS, nonmodule_bar_doc}, + {NULL, NULL} /* sentinel */ +}; + +static PyModuleDef def_nonmodule_with_methods = TEST_MODULE_DEF( + "_testmultiphase_nonmodule_with_methods", slots_create_nonmodule, nonmodule_methods); + +PyMODINIT_FUNC +PyInit__testmultiphase_nonmodule_with_methods(PyObject *spec) +{ + return PyModuleDef_Init(&def_nonmodule_with_methods); +} + /**** Non-ASCII-named modules ****/ static PyModuleDef def_nonascii_latin = { \ diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 968181c..0219559 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -45,7 +45,7 @@ lock_dealloc(lockobject *self) /* Helper to acquire an interruptible lock with a timeout. If the lock acquire * is interrupted, signal handlers are run, and if they raise an exception, * PY_LOCK_INTR is returned. Otherwise, PY_LOCK_ACQUIRED or PY_LOCK_FAILURE - * are returned, depending on whether the lock can be acquired withing the + * are returned, depending on whether the lock can be acquired within the * timeout. */ static PyLockStatus diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index cf56fa8..163c87f 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -1779,7 +1779,7 @@ var_perform(VarEvent *ev) PyErr_NormalizeException(&exc, &val, &tb); *(ev->exc_type) = exc; *(ev->exc_val) = val; - Py_DECREF(tb); + Py_XDECREF(tb); } } @@ -3175,8 +3175,8 @@ _tkinter._flatten [clinic start generated code]*/ static PyObject * -_tkinter__flatten(PyModuleDef *module, PyObject *item) -/*[clinic end generated code: output=9505049ec74c3480 input=6b9c12260aa1157f]*/ +_tkinter__flatten(PyObject *module, PyObject *item) +/*[clinic end generated code: output=cad02a3f97f29862 input=6b9c12260aa1157f]*/ { FlattenContext context; @@ -3220,11 +3220,11 @@ _tkinter.create [clinic start generated code]*/ static PyObject * -_tkinter_create_impl(PyModuleDef *module, const char *screenName, +_tkinter_create_impl(PyObject *module, const char *screenName, const char *baseName, const char *className, int interactive, int wantobjects, int wantTk, int sync, const char *use) -/*[clinic end generated code: output=b8847800fc3b27eb input=0d522aad1cb0ca0e]*/ +/*[clinic end generated code: output=e3315607648e6bb4 input=0d522aad1cb0ca0e]*/ { /* XXX baseName is not used anymore; * try getting rid of it. */ @@ -3250,8 +3250,8 @@ It should be set to a divisor of the maximum time between frames in an animation [clinic start generated code]*/ static PyObject * -_tkinter_setbusywaitinterval_impl(PyModuleDef *module, int new_val) -/*[clinic end generated code: output=0b9d7ef7940461ea input=deca1d6f9e6dae47]*/ +_tkinter_setbusywaitinterval_impl(PyObject *module, int new_val) +/*[clinic end generated code: output=42bf7757dc2d0ab6 input=deca1d6f9e6dae47]*/ { if (new_val < 0) { PyErr_SetString(PyExc_ValueError, @@ -3269,8 +3269,8 @@ Return the current busy-wait interval between successive calls to Tcl_DoOneEvent [clinic start generated code]*/ static int -_tkinter_getbusywaitinterval_impl(PyModuleDef *module) -/*[clinic end generated code: output=9d09eee026e96971 input=a695878d2d576a84]*/ +_tkinter_getbusywaitinterval_impl(PyObject *module) +/*[clinic end generated code: output=23b72d552001f5c7 input=a695878d2d576a84]*/ { return Tkinter_busywaitinterval; } diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 796ac0f..65bf7a3 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -516,7 +516,7 @@ tracemalloc_realloc(void *ctx, void *ptr, size_t new_size) if (tracemalloc_add_trace(ptr2, new_size) < 0) { /* Memory allocation failed. The error cannot be reported to - the caller, because realloc() may already have shrinked the + the caller, because realloc() may already have shrunk the memory block and so removed bytes. This case is very unlikely: a hash entry has just been diff --git a/Modules/_weakref.c b/Modules/_weakref.c index 7c99d7e..f9c68d6 100644 --- a/Modules/_weakref.c +++ b/Modules/_weakref.c @@ -22,8 +22,8 @@ Return the number of weak references to 'object'. [clinic start generated code]*/ static Py_ssize_t -_weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object) -/*[clinic end generated code: output=6a6ad0b98285e468 input=cedb69711b6a2507]*/ +_weakref_getweakrefcount_impl(PyObject *module, PyObject *object) +/*[clinic end generated code: output=301806d59558ff3e input=cedb69711b6a2507]*/ { PyWeakReference **list; @@ -35,6 +35,46 @@ _weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object) } +static int +is_dead_weakref(PyObject *value) +{ + if (!PyWeakref_Check(value)) { + PyErr_SetString(PyExc_TypeError, "not a weakref"); + return -1; + } + return PyWeakref_GET_OBJECT(value) == Py_None; +} + +/*[clinic input] + +_weakref._remove_dead_weakref -> object + + dct: object(subclass_of='&PyDict_Type') + key: object + / + +Atomically remove key from dict if it points to a dead weakref. +[clinic start generated code]*/ + +static PyObject * +_weakref__remove_dead_weakref_impl(PyObject *module, PyObject *dct, + PyObject *key) +/*[clinic end generated code: output=d9ff53061fcb875c input=19fc91f257f96a1d]*/ +{ + if (_PyDict_DelItemIf(dct, key, is_dead_weakref) < 0) { + if (PyErr_ExceptionMatches(PyExc_KeyError)) + /* This function is meant to allow safe weak-value dicts + with GC in another thread (see issue #28427), so it's + ok if the key doesn't exist anymore. + */ + PyErr_Clear(); + else + return NULL; + } + Py_RETURN_NONE; +} + + PyDoc_STRVAR(weakref_getweakrefs__doc__, "getweakrefs(object) -- return a list of all weak reference objects\n" "that point to 'object'."); @@ -88,6 +128,7 @@ weakref_proxy(PyObject *self, PyObject *args) static PyMethodDef weakref_functions[] = { _WEAKREF_GETWEAKREFCOUNT_METHODDEF + _WEAKREF__REMOVE_DEAD_WEAKREF_METHODDEF {"getweakrefs", weakref_getweakrefs, METH_O, weakref_getweakrefs__doc__}, {"proxy", weakref_proxy, METH_VARARGS, diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 3e7f187..edc6cf4 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -368,8 +368,8 @@ Close handle. [clinic start generated code]*/ static PyObject * -_winapi_CloseHandle_impl(PyModuleDef *module, HANDLE handle) -/*[clinic end generated code: output=0548595c71cb4bf7 input=7f0e4ac36e0352b8]*/ +_winapi_CloseHandle_impl(PyObject *module, HANDLE handle) +/*[clinic end generated code: output=7ad37345f07bd782 input=7f0e4ac36e0352b8]*/ { BOOL success; @@ -391,9 +391,9 @@ _winapi.ConnectNamedPipe [clinic start generated code]*/ static PyObject * -_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, +_winapi_ConnectNamedPipe_impl(PyObject *module, HANDLE handle, int use_overlapped) -/*[clinic end generated code: output=fed3b165d1bca95a input=edc83da007ebf3be]*/ +/*[clinic end generated code: output=335a0e7086800671 input=edc83da007ebf3be]*/ { BOOL success; OverlappedObject *overlapped = NULL; @@ -443,12 +443,12 @@ _winapi.CreateFile -> HANDLE [clinic start generated code]*/ static HANDLE -_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, +_winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name, DWORD desired_access, DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD flags_and_attributes, HANDLE template_file) -/*[clinic end generated code: output=c6e1d78f8affd10c input=6423c3e40372dbd5]*/ +/*[clinic end generated code: output=417ddcebfc5a3d53 input=6423c3e40372dbd5]*/ { HANDLE handle; @@ -474,9 +474,9 @@ _winapi.CreateJunction [clinic start generated code]*/ static PyObject * -_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, +_winapi_CreateJunction_impl(PyObject *module, LPWSTR src_path, LPWSTR dst_path) -/*[clinic end generated code: output=eccae9364e46f6da input=8cd1f9964b6e3d36]*/ +/*[clinic end generated code: output=66b7eb746e1dfa25 input=8cd1f9964b6e3d36]*/ { /* Privilege adjustment */ HANDLE token = NULL; @@ -617,12 +617,12 @@ _winapi.CreateNamedPipe -> HANDLE [clinic start generated code]*/ static HANDLE -_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, - DWORD open_mode, DWORD pipe_mode, - DWORD max_instances, DWORD out_buffer_size, - DWORD in_buffer_size, DWORD default_timeout, +_winapi_CreateNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD open_mode, + DWORD pipe_mode, DWORD max_instances, + DWORD out_buffer_size, DWORD in_buffer_size, + DWORD default_timeout, LPSECURITY_ATTRIBUTES security_attributes) -/*[clinic end generated code: output=44ca2a06a219b523 input=5a73530b84d8bc37]*/ +/*[clinic end generated code: output=80f8c07346a94fbc input=5a73530b84d8bc37]*/ { HANDLE handle; @@ -653,9 +653,8 @@ Returns a 2-tuple of handles, to the read and write ends of the pipe. [clinic start generated code]*/ static PyObject * -_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, - DWORD size) -/*[clinic end generated code: output=fef99f3b4222bc78 input=c4f2cfa56ef68d90]*/ +_winapi_CreatePipe_impl(PyObject *module, PyObject *pipe_attrs, DWORD size) +/*[clinic end generated code: output=1c4411d8699f0925 input=c4f2cfa56ef68d90]*/ { HANDLE read_pipe; HANDLE write_pipe; @@ -814,13 +813,13 @@ process ID, and thread ID. [clinic start generated code]*/ static PyObject * -_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, +_winapi_CreateProcess_impl(PyObject *module, Py_UNICODE *application_name, Py_UNICODE *command_line, PyObject *proc_attrs, PyObject *thread_attrs, BOOL inherit_handles, DWORD creation_flags, PyObject *env_mapping, Py_UNICODE *current_directory, PyObject *startup_info) -/*[clinic end generated code: output=874bb350ff9ed4ef input=4a43b05038d639bb]*/ +/*[clinic end generated code: output=4652a33aff4b0ae1 input=4a43b05038d639bb]*/ { BOOL result; PROCESS_INFORMATION pi; @@ -900,13 +899,12 @@ through both handles. [clinic start generated code]*/ static HANDLE -_winapi_DuplicateHandle_impl(PyModuleDef *module, - HANDLE source_process_handle, +_winapi_DuplicateHandle_impl(PyObject *module, HANDLE source_process_handle, HANDLE source_handle, HANDLE target_process_handle, DWORD desired_access, BOOL inherit_handle, DWORD options) -/*[clinic end generated code: output=0799515b68b5237b input=b933e3f2356a8c12]*/ +/*[clinic end generated code: output=ad9711397b5dcd4e input=b933e3f2356a8c12]*/ { HANDLE target_handle; BOOL result; @@ -940,8 +938,8 @@ _winapi.ExitProcess [clinic start generated code]*/ static PyObject * -_winapi_ExitProcess_impl(PyModuleDef *module, UINT ExitCode) -/*[clinic end generated code: output=25f3b499c24cedc8 input=4f05466a9406c558]*/ +_winapi_ExitProcess_impl(PyObject *module, UINT ExitCode) +/*[clinic end generated code: output=a387deb651175301 input=4f05466a9406c558]*/ { #if defined(Py_DEBUG) SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOALIGNMENTFAULTEXCEPT| @@ -961,8 +959,8 @@ Return a handle object for the current process. [clinic start generated code]*/ static HANDLE -_winapi_GetCurrentProcess_impl(PyModuleDef *module) -/*[clinic end generated code: output=be29ac3ad5f8291e input=b213403fd4b96b41]*/ +_winapi_GetCurrentProcess_impl(PyObject *module) +/*[clinic end generated code: output=ddeb4dd2ffadf344 input=b213403fd4b96b41]*/ { return GetCurrentProcess(); } @@ -977,8 +975,8 @@ Return the termination status of the specified process. [clinic start generated code]*/ static DWORD -_winapi_GetExitCodeProcess_impl(PyModuleDef *module, HANDLE process) -/*[clinic end generated code: output=0b10f0848a410f65 input=61b6bfc7dc2ee374]*/ +_winapi_GetExitCodeProcess_impl(PyObject *module, HANDLE process) +/*[clinic end generated code: output=b4620bdf2bccf36b input=61b6bfc7dc2ee374]*/ { DWORD exit_code; BOOL result; @@ -998,8 +996,8 @@ _winapi.GetLastError -> DWORD [clinic start generated code]*/ static DWORD -_winapi_GetLastError_impl(PyModuleDef *module) -/*[clinic end generated code: output=0ea00d8e67bdd056 input=62d47fb9bce038ba]*/ +_winapi_GetLastError_impl(PyObject *module) +/*[clinic end generated code: output=8585b827cb1a92c5 input=62d47fb9bce038ba]*/ { return GetLastError(); } @@ -1021,8 +1019,8 @@ of the current process. [clinic start generated code]*/ static PyObject * -_winapi_GetModuleFileName_impl(PyModuleDef *module, HMODULE module_handle) -/*[clinic end generated code: output=90063dc63bdbfa18 input=6d66ff7deca5d11f]*/ +_winapi_GetModuleFileName_impl(PyObject *module, HMODULE module_handle) +/*[clinic end generated code: output=85b4b728c5160306 input=6d66ff7deca5d11f]*/ { BOOL result; WCHAR filename[MAX_PATH]; @@ -1049,8 +1047,8 @@ The integer associated with the handle object is returned. [clinic start generated code]*/ static HANDLE -_winapi_GetStdHandle_impl(PyModuleDef *module, DWORD std_handle) -/*[clinic end generated code: output=5f5ca28b28c6fad2 input=07016b06a2fc8826]*/ +_winapi_GetStdHandle_impl(PyObject *module, DWORD std_handle) +/*[clinic end generated code: output=0e613001e73ab614 input=07016b06a2fc8826]*/ { HANDLE handle; @@ -1071,8 +1069,8 @@ Return the version number of the current operating system. [clinic start generated code]*/ static long -_winapi_GetVersion_impl(PyModuleDef *module) -/*[clinic end generated code: output=95a2f8ad3b948ca8 input=e21dff8d0baeded2]*/ +_winapi_GetVersion_impl(PyObject *module) +/*[clinic end generated code: output=e41f0db5a3b82682 input=e21dff8d0baeded2]*/ /* Disable deprecation warnings about GetVersionEx as the result is being passed straight through to the caller, who is responsible for using it correctly. */ @@ -1095,9 +1093,9 @@ _winapi.OpenProcess -> HANDLE [clinic start generated code]*/ static HANDLE -_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, +_winapi_OpenProcess_impl(PyObject *module, DWORD desired_access, BOOL inherit_handle, DWORD process_id) -/*[clinic end generated code: output=6bc52eda82a3d226 input=ec98c4cf4ea2ec36]*/ +/*[clinic end generated code: output=b42b6b81ea5a0fc3 input=ec98c4cf4ea2ec36]*/ { HANDLE handle; @@ -1119,8 +1117,8 @@ _winapi.PeekNamedPipe [clinic start generated code]*/ static PyObject * -_winapi_PeekNamedPipe_impl(PyModuleDef *module, HANDLE handle, int size) -/*[clinic end generated code: output=e6c908e2fb63c798 input=c7aa53bfbce69d70]*/ +_winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size) +/*[clinic end generated code: output=d0c3e29e49d323dd input=c7aa53bfbce69d70]*/ { PyObject *buf = NULL; DWORD nread, navail, nleft; @@ -1167,9 +1165,9 @@ _winapi.ReadFile [clinic start generated code]*/ static PyObject * -_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, +_winapi_ReadFile_impl(PyObject *module, HANDLE handle, int size, int use_overlapped) -/*[clinic end generated code: output=d7695db4db97b135 input=8dd810194e86ac7d]*/ +/*[clinic end generated code: output=492029ca98161d84 input=8dd810194e86ac7d]*/ { DWORD nread; PyObject *buf; @@ -1229,11 +1227,11 @@ _winapi.SetNamedPipeHandleState [clinic start generated code]*/ static PyObject * -_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, +_winapi_SetNamedPipeHandleState_impl(PyObject *module, HANDLE named_pipe, PyObject *mode, PyObject *max_collection_count, PyObject *collect_data_timeout) -/*[clinic end generated code: output=25aa3c28dee223ce input=9142d72163d0faa6]*/ +/*[clinic end generated code: output=f2129d222cbfa095 input=9142d72163d0faa6]*/ { PyObject *oArgs[3] = {mode, max_collection_count, collect_data_timeout}; DWORD dwArgs[3], *pArgs[3] = {NULL, NULL, NULL}; @@ -1268,9 +1266,9 @@ Terminate the specified process and all of its threads. [clinic start generated code]*/ static PyObject * -_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, +_winapi_TerminateProcess_impl(PyObject *module, HANDLE handle, UINT exit_code) -/*[clinic end generated code: output=937c1bb6219aca8b input=d6bc0aa1ee3bb4df]*/ +/*[clinic end generated code: output=f4e99ac3f0b1f34a input=d6bc0aa1ee3bb4df]*/ { BOOL result; @@ -1291,8 +1289,8 @@ _winapi.WaitNamedPipe [clinic start generated code]*/ static PyObject * -_winapi_WaitNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD timeout) -/*[clinic end generated code: output=5bca5e02f448c9d7 input=36fc781291b1862c]*/ +_winapi_WaitNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD timeout) +/*[clinic end generated code: output=c2866f4439b1fe38 input=36fc781291b1862c]*/ { BOOL success; @@ -1316,10 +1314,9 @@ _winapi.WaitForMultipleObjects [clinic start generated code]*/ static PyObject * -_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, - PyObject *handle_seq, BOOL wait_flag, - DWORD milliseconds) -/*[clinic end generated code: output=acb440728d06d130 input=36f76ca057cd28a0]*/ +_winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq, + BOOL wait_flag, DWORD milliseconds) +/*[clinic end generated code: output=295e3f00b8e45899 input=36f76ca057cd28a0]*/ { DWORD result; HANDLE handles[MAXIMUM_WAIT_OBJECTS]; @@ -1393,9 +1390,9 @@ in milliseconds. [clinic start generated code]*/ static long -_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, +_winapi_WaitForSingleObject_impl(PyObject *module, HANDLE handle, DWORD milliseconds) -/*[clinic end generated code: output=34ae40c269749c48 input=443d1ab076edc7b1]*/ +/*[clinic end generated code: output=3c4715d8f1b39859 input=443d1ab076edc7b1]*/ { DWORD result; @@ -1420,9 +1417,9 @@ _winapi.WriteFile [clinic start generated code]*/ static PyObject * -_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, +_winapi_WriteFile_impl(PyObject *module, HANDLE handle, PyObject *buffer, int use_overlapped) -/*[clinic end generated code: output=65e70ea41f4d2a1d input=51846a5af52053fd]*/ +/*[clinic end generated code: output=2ca80f6bf3fa92e3 input=51846a5af52053fd]*/ { Py_buffer _buf, *buf; DWORD len, written; diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index f73c599..a4966b4 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -745,8 +745,10 @@ array_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh) np = (arrayobject *) newarrayobject(&Arraytype, ihigh - ilow, a->ob_descr); if (np == NULL) return NULL; - memcpy(np->ob_item, a->ob_item + ilow * a->ob_descr->itemsize, - (ihigh-ilow) * a->ob_descr->itemsize); + if (ihigh > ilow) { + memcpy(np->ob_item, a->ob_item + ilow * a->ob_descr->itemsize, + (ihigh-ilow) * a->ob_descr->itemsize); + } return (PyObject *)np; } @@ -804,9 +806,13 @@ array_concat(arrayobject *a, PyObject *bb) if (np == NULL) { return NULL; } - memcpy(np->ob_item, a->ob_item, Py_SIZE(a)*a->ob_descr->itemsize); - memcpy(np->ob_item + Py_SIZE(a)*a->ob_descr->itemsize, - b->ob_item, Py_SIZE(b)*b->ob_descr->itemsize); + if (Py_SIZE(a) > 0) { + memcpy(np->ob_item, a->ob_item, Py_SIZE(a)*a->ob_descr->itemsize); + } + if (Py_SIZE(b) > 0) { + memcpy(np->ob_item + Py_SIZE(a)*a->ob_descr->itemsize, + b->ob_item, Py_SIZE(b)*b->ob_descr->itemsize); + } return (PyObject *)np; #undef b } @@ -826,7 +832,7 @@ array_repeat(arrayobject *a, Py_ssize_t n) np = (arrayobject *) newarrayobject(&Arraytype, size, a->ob_descr); if (np == NULL) return NULL; - if (n == 0) + if (size == 0) return (PyObject *)np; oldbytes = Py_SIZE(a) * a->ob_descr->itemsize; newbytes = oldbytes * n; @@ -985,8 +991,10 @@ array_do_extend(arrayobject *self, PyObject *bb) size = oldsize + Py_SIZE(b); if (array_resize(self, size) == -1) return -1; - memcpy(self->ob_item + oldsize * self->ob_descr->itemsize, - b->ob_item, bbsize * b->ob_descr->itemsize); + if (bbsize > 0) { + memcpy(self->ob_item + oldsize * self->ob_descr->itemsize, + b->ob_item, bbsize * b->ob_descr->itemsize); + } return 0; #undef b @@ -1268,7 +1276,7 @@ array_array_buffer_info_impl(arrayobject *self) } PyTuple_SET_ITEM(retval, 0, v); - v = PyLong_FromLong((long)(Py_SIZE(self))); + v = PyLong_FromSsize_t(Py_SIZE(self)); if (v == NULL) { Py_DECREF(retval); return NULL; @@ -1938,11 +1946,11 @@ Internal. Used for pickling support. [clinic start generated code]*/ static PyObject * -array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, +array__array_reconstructor_impl(PyObject *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items) -/*[clinic end generated code: output=6ecbf0e8e4d92ab9 input=2464dc8f4c7736b5]*/ +/*[clinic end generated code: output=e05263141ba28365 input=2464dc8f4c7736b5]*/ { PyObject *converted_items; PyObject *result; diff --git a/Modules/audioop.c b/Modules/audioop.c index 306937e..1e131d2 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -407,9 +407,9 @@ Return the value of sample index from the fragment. [clinic start generated code]*/ static PyObject * -audioop_getsample_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_getsample_impl(PyObject *module, Py_buffer *fragment, int width, Py_ssize_t index) -/*[clinic end generated code: output=3995e189fdc8ec16 input=88edbe2871393549]*/ +/*[clinic end generated code: output=8fe1b1775134f39a input=88edbe2871393549]*/ { int val; @@ -434,8 +434,8 @@ Return the maximum of the absolute value of all samples in a fragment. [clinic start generated code]*/ static PyObject * -audioop_max_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=85047ee1001f2305 input=32bea5ea0ac8c223]*/ +audioop_max_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=e6c5952714f1c3f0 input=32bea5ea0ac8c223]*/ { Py_ssize_t i; unsigned int absval, max = 0; @@ -462,8 +462,8 @@ Return the minimum and maximum values of all samples in the sound fragment. [clinic start generated code]*/ static PyObject * -audioop_minmax_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=ae8f5513c64fd569 input=89848e9b927a0696]*/ +audioop_minmax_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=473fda66b15c836e input=89848e9b927a0696]*/ { Py_ssize_t i; /* -1 trick below is needed on Windows to support -0x80000000 without @@ -491,8 +491,8 @@ Return the average over all samples in the fragment. [clinic start generated code]*/ static PyObject * -audioop_avg_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=7fccd645c95f4860 input=1114493c7611334d]*/ +audioop_avg_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=4410a4c12c3586e6 input=1114493c7611334d]*/ { Py_ssize_t i; int avg; @@ -520,8 +520,8 @@ Return the root-mean-square of the fragment, i.e. sqrt(sum(S_i^2)/n). [clinic start generated code]*/ static PyObject * -audioop_rms_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=7b398702c81b709d input=4cc57c6c94219d78]*/ +audioop_rms_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=1e7871c826445698 input=4cc57c6c94219d78]*/ { Py_ssize_t i; unsigned int res; @@ -594,9 +594,9 @@ Try to match reference as well as possible to a portion of fragment. [clinic start generated code]*/ static PyObject * -audioop_findfit_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfit_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference) -/*[clinic end generated code: output=609eedf5d823d6dd input=62c305605e183c9a]*/ +/*[clinic end generated code: output=5752306d83cbbada input=62c305605e183c9a]*/ { const short *cp1, *cp2; Py_ssize_t len1, len2; @@ -663,9 +663,9 @@ Return a factor F such that rms(add(fragment, mul(reference, -F))) is minimal. [clinic start generated code]*/ static PyObject * -audioop_findfactor_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfactor_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference) -/*[clinic end generated code: output=5566a8c55de54f99 input=816680301d012b21]*/ +/*[clinic end generated code: output=14ea95652c1afcf8 input=816680301d012b21]*/ { const short *cp1, *cp2; Py_ssize_t len; @@ -705,9 +705,9 @@ Search fragment for a slice of specified number of samples with maximum energy. [clinic start generated code]*/ static PyObject * -audioop_findmax_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findmax_impl(PyObject *module, Py_buffer *fragment, Py_ssize_t length) -/*[clinic end generated code: output=01fe796fad2573bb input=2f304801ed42383c]*/ +/*[clinic end generated code: output=f008128233523040 input=2f304801ed42383c]*/ { const short *cp1; Py_ssize_t len1; @@ -759,8 +759,8 @@ Return the average peak-peak value over all samples in the fragment. [clinic start generated code]*/ static PyObject * -audioop_avgpp_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=06c8380fd6e34207 input=0b3cceeae420a7d9]*/ +audioop_avgpp_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=269596b0d5ae0b2b input=0b3cceeae420a7d9]*/ { Py_ssize_t i; int prevval, prevextremevalid = 0, prevextreme = 0; @@ -816,8 +816,8 @@ Return the maximum peak-peak value in the sound fragment. [clinic start generated code]*/ static PyObject * -audioop_maxpp_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=c300c0bd7e8535c0 input=671a13e1518f80a1]*/ +audioop_maxpp_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=5b918ed5dbbdb978 input=671a13e1518f80a1]*/ { Py_ssize_t i; int prevval, prevextremevalid = 0, prevextreme = 0; @@ -869,8 +869,8 @@ Return the number of zero crossings in the fragment passed as an argument. [clinic start generated code]*/ static PyObject * -audioop_cross_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=99e6572d7d7cdbf1 input=b1b3f15b83f6b41a]*/ +audioop_cross_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=5938dcdd74a1f431 input=b1b3f15b83f6b41a]*/ { Py_ssize_t i; int prevval; @@ -900,9 +900,9 @@ Return a fragment that has all samples in the original fragment multiplied by th [clinic start generated code]*/ static PyObject * -audioop_mul_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_mul_impl(PyObject *module, Py_buffer *fragment, int width, double factor) -/*[clinic end generated code: output=1c7c31191ac86b10 input=c726667baa157d3c]*/ +/*[clinic end generated code: output=6cd48fe796da0ea4 input=c726667baa157d3c]*/ { signed char *ncp; Py_ssize_t i; @@ -942,9 +942,9 @@ Convert a stereo fragment to a mono fragment. [clinic start generated code]*/ static PyObject * -audioop_tomono_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tomono_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor) -/*[clinic end generated code: output=553f547c5e29e3b6 input=c4ec949b3f4dddfa]*/ +/*[clinic end generated code: output=235c8277216d4e4e input=c4ec949b3f4dddfa]*/ { signed char *cp, *ncp; Py_ssize_t len, i; @@ -991,9 +991,9 @@ Generate a stereo fragment from a mono fragment. [clinic start generated code]*/ static PyObject * -audioop_tostereo_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tostereo_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor) -/*[clinic end generated code: output=697bb6ba41e9dd2c input=27b6395ebfdff37a]*/ +/*[clinic end generated code: output=046f13defa5f1595 input=27b6395ebfdff37a]*/ { signed char *ncp; Py_ssize_t i; @@ -1039,9 +1039,9 @@ Return a fragment which is the addition of the two samples passed as parameters. [clinic start generated code]*/ static PyObject * -audioop_add_impl(PyModuleDef *module, Py_buffer *fragment1, +audioop_add_impl(PyObject *module, Py_buffer *fragment1, Py_buffer *fragment2, int width) -/*[clinic end generated code: output=fe6c12f143e0b027 input=4a8d4bae4c1605c7]*/ +/*[clinic end generated code: output=60140af4d1aab6f2 input=4a8d4bae4c1605c7]*/ { signed char *ncp; Py_ssize_t i; @@ -1098,9 +1098,8 @@ Return a fragment that is the original fragment with a bias added to each sample [clinic start generated code]*/ static PyObject * -audioop_bias_impl(PyModuleDef *module, Py_buffer *fragment, int width, - int bias) -/*[clinic end generated code: output=ac1f4dda20a01c26 input=2b5cce5c3bb4838c]*/ +audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias) +/*[clinic end generated code: output=6e0aa8f68f045093 input=2b5cce5c3bb4838c]*/ { signed char *ncp; Py_ssize_t i; @@ -1158,8 +1157,8 @@ Reverse the samples in a fragment and returns the modified fragment. [clinic start generated code]*/ static PyObject * -audioop_reverse_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=6ec3c91337f5925e input=668f890cf9f9d225]*/ +audioop_reverse_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=b44135698418da14 input=668f890cf9f9d225]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1191,8 +1190,8 @@ Convert big-endian samples to little-endian and vice versa. [clinic start generated code]*/ static PyObject * -audioop_byteswap_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=bfe4aa584b7a3f5b input=fae7611ceffa5c82]*/ +audioop_byteswap_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=50838a9e4b87cd4d input=fae7611ceffa5c82]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1226,9 +1225,9 @@ Convert samples between 1-, 2-, 3- and 4-byte formats. [clinic start generated code]*/ static PyObject * -audioop_lin2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2lin_impl(PyObject *module, Py_buffer *fragment, int width, int newwidth) -/*[clinic end generated code: output=cb6ca950d1df9898 input=5ce08c8aa2f24d96]*/ +/*[clinic end generated code: output=17b14109248f1d99 input=5ce08c8aa2f24d96]*/ { unsigned char *ncp; Py_ssize_t i, j; @@ -1284,10 +1283,10 @@ Convert the frame rate of the input fragment. [clinic start generated code]*/ static PyObject * -audioop_ratecv_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width, int nchannels, int inrate, int outrate, PyObject *state, int weightA, int weightB) -/*[clinic end generated code: output=59e1787bfa49b9d9 input=aff3acdc94476191]*/ +/*[clinic end generated code: output=624038e843243139 input=aff3acdc94476191]*/ { char *cp, *ncp; Py_ssize_t len; @@ -1465,8 +1464,8 @@ Convert samples in the audio fragment to u-LAW encoding. [clinic start generated code]*/ static PyObject * -audioop_lin2ulaw_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=26263cc877c5e1bc input=2450d1b870b6bac2]*/ +audioop_lin2ulaw_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=14fb62b16fe8ea8e input=2450d1b870b6bac2]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1498,8 +1497,8 @@ Convert sound fragments in u-LAW encoding to linearly encoded sound fragments. [clinic start generated code]*/ static PyObject * -audioop_ulaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=9864cb34e3a1d876 input=45d53ddce5be7d06]*/ +audioop_ulaw2lin_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=378356b047521ba2 input=45d53ddce5be7d06]*/ { unsigned char *cp; signed char *ncp; @@ -1538,8 +1537,8 @@ Convert samples in the audio fragment to a-LAW encoding. [clinic start generated code]*/ static PyObject * -audioop_lin2alaw_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=d5bf14bd0fe6fdcd input=ffb1ef8bb39da945]*/ +audioop_lin2alaw_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=d076f130121a82f0 input=ffb1ef8bb39da945]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1571,8 +1570,8 @@ Convert sound fragments in a-LAW encoding to linearly encoded sound fragments. [clinic start generated code]*/ static PyObject * -audioop_alaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=d2b604ddd036e1cd input=4140626046cd1772]*/ +audioop_alaw2lin_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=85c365ec559df647 input=4140626046cd1772]*/ { unsigned char *cp; signed char *ncp; @@ -1613,9 +1612,9 @@ Convert samples to 4 bit Intel/DVI ADPCM encoding. [clinic start generated code]*/ static PyObject * -audioop_lin2adpcm_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2adpcm_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state) -/*[clinic end generated code: output=93f0996f592b5ce5 input=12919d549b90c90a]*/ +/*[clinic end generated code: output=cc19f159f16c6793 input=12919d549b90c90a]*/ { signed char *ncp; Py_ssize_t i; @@ -1741,9 +1740,9 @@ Decode an Intel/DVI ADPCM coded fragment to a linear fragment. [clinic start generated code]*/ static PyObject * -audioop_adpcm2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_adpcm2lin_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state) -/*[clinic end generated code: output=236cf6dc2c829181 input=f5221144f5ca9ef0]*/ +/*[clinic end generated code: output=3440ea105acb3456 input=f5221144f5ca9ef0]*/ { signed char *cp; signed char *ncp; diff --git a/Modules/binascii.c b/Modules/binascii.c index d920d23..125c1cb 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -253,8 +253,8 @@ Decode a line of uuencoded data. [clinic start generated code]*/ static PyObject * -binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=5779f39b0b48459f input=7cafeaf73df63d1c]*/ +binascii_a2b_uu_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=e027f8e0b0598742 input=7cafeaf73df63d1c]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -339,8 +339,8 @@ Uuencode line of data. [clinic start generated code]*/ static PyObject * -binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=181021b69bb9a414 input=00fdf458ce8b465b]*/ +binascii_b2a_uu_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=0070670e52e4aa6b input=00fdf458ce8b465b]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -426,8 +426,8 @@ Decode a line of base64 data. [clinic start generated code]*/ static PyObject * -binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=3e351b702bed56d2 input=5872acf6e1cac243]*/ +binascii_a2b_base64_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=0628223f19fd3f9b input=5872acf6e1cac243]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -534,8 +534,8 @@ Base64-code line of data. [clinic start generated code]*/ static PyObject * -binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=3cd61fbee2913285 input=14ec4e47371174a9]*/ +binascii_b2a_base64_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=4d96663170778dc3 input=14ec4e47371174a9]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -601,8 +601,8 @@ Decode .hqx coding. [clinic start generated code]*/ static PyObject * -binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=60bcdbbd28b105cd input=0d914c680e0eed55]*/ +binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=4d6d8c54d54ea1c1 input=0d914c680e0eed55]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -684,8 +684,8 @@ Binhex RLE-code binary data. [clinic start generated code]*/ static PyObject * -binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=0905da344dbf0648 input=e1f1712447a82b09]*/ +binascii_rlecode_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=393d79338f5f5629 input=e1f1712447a82b09]*/ { unsigned char *in_data, *out_data; PyObject *rv; @@ -748,8 +748,8 @@ Encode .hqx data. [clinic start generated code]*/ static PyObject * -binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=5a987810d5e3cdbb input=9596ebe019fe12ba]*/ +binascii_b2a_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=d0aa5a704bc9f7de input=9596ebe019fe12ba]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -805,8 +805,8 @@ Decode hexbin RLE-coded string. [clinic start generated code]*/ static PyObject * -binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=f7afd89b789946ab input=54cdd49fc014402c]*/ +binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=9826619565de1c6c input=54cdd49fc014402c]*/ { unsigned char *in_data, *out_data; unsigned char in_byte, in_repeat; @@ -915,12 +915,12 @@ binascii.crc_hqx -> unsigned_int crc: unsigned_int(bitwise=True) / -Compute hqx CRC incrementally. +Compute CRC-CCITT incrementally. [clinic start generated code]*/ static unsigned int -binascii_crc_hqx_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc) -/*[clinic end generated code: output=167c2dac62625717 input=add8c53712ccceda]*/ +binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc) +/*[clinic end generated code: output=8ec2a78590d19170 input=f18240ff8c705b79]*/ { unsigned char *bin_data; Py_ssize_t len; @@ -1067,8 +1067,8 @@ Compute CRC-32 incrementally. [clinic start generated code]*/ static unsigned int -binascii_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc) -/*[clinic end generated code: output=620a961643393c4f input=bbe340bc99d25aa8]*/ +binascii_crc32_impl(PyObject *module, Py_buffer *data, unsigned int crc) +/*[clinic end generated code: output=52cf59056a78593b input=bbe340bc99d25aa8]*/ #ifdef USE_ZLIB_CRC32 /* This was taken from zlibmodule.c PyZlib_crc32 (but is PY_SSIZE_T_CLEAN) */ @@ -1115,8 +1115,8 @@ available as "hexlify()". [clinic start generated code]*/ static PyObject * -binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=179318922c2f8fda input=96423cfa299ff3b1]*/ +binascii_b2a_hex_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=92fec1a95c9897a0 input=96423cfa299ff3b1]*/ { return _Py_strhex_bytes((const char *)data->buf, data->len); } @@ -1130,8 +1130,8 @@ The return value is a bytes object. [clinic start generated code]*/ static PyObject * -binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=6098440091fb61dc input=2e3afae7f083f061]*/ +binascii_hexlify_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=749e95e53c14880c input=2e3afae7f083f061]*/ { return _Py_strhex_bytes((const char *)data->buf, data->len); } @@ -1164,8 +1164,8 @@ This function is also available as "unhexlify()". [clinic start generated code]*/ static PyObject * -binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr) -/*[clinic end generated code: output=d61da452b5c6d290 input=9e1e7f2f94db24fd]*/ +binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr) +/*[clinic end generated code: output=0cc1a139af0eeecb input=9e1e7f2f94db24fd]*/ { char* argbuf; Py_ssize_t arglen; @@ -1218,8 +1218,8 @@ hexstr must contain an even number of hex digits (upper or lower case). [clinic start generated code]*/ static PyObject * -binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr) -/*[clinic end generated code: output=17cec7544499803e input=dd8c012725f462da]*/ +binascii_unhexlify_impl(PyObject *module, Py_buffer *hexstr) +/*[clinic end generated code: output=51a64c06c79629e3 input=dd8c012725f462da]*/ { return binascii_a2b_hex_impl(module, hexstr); } @@ -1250,8 +1250,8 @@ Decode a string of qp-encoded data. [clinic start generated code]*/ static PyObject * -binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header) -/*[clinic end generated code: output=a44ef88270352114 input=5187a0d3d8e54f3b]*/ +binascii_a2b_qp_impl(PyObject *module, Py_buffer *data, int header) +/*[clinic end generated code: output=e99f7846cfb9bc53 input=5187a0d3d8e54f3b]*/ { Py_ssize_t in, out; char ch; @@ -1290,7 +1290,8 @@ binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header) odata[out++] = '='; in++; } - else if (((ascii_data[in] >= 'A' && ascii_data[in] <= 'F') || + else if ((in + 1 < datalen) && + ((ascii_data[in] >= 'A' && ascii_data[in] <= 'F') || (ascii_data[in] >= 'a' && ascii_data[in] <= 'f') || (ascii_data[in] >= '0' && ascii_data[in] <= '9')) && ((ascii_data[in+1] >= 'A' && ascii_data[in+1] <= 'F') || @@ -1356,9 +1357,9 @@ are both encoded. When quotetabs is set, space and tabs are encoded. [clinic start generated code]*/ static PyObject * -binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, +binascii_b2a_qp_impl(PyObject *module, Py_buffer *data, int quotetabs, int istext, int header) -/*[clinic end generated code: output=a87ca9ccb94e2a9f input=7f2a9aaa008e92b2]*/ +/*[clinic end generated code: output=e9884472ebb1a94c input=7f2a9aaa008e92b2]*/ { Py_ssize_t in, out; unsigned char *databuf, *odata; @@ -1383,11 +1384,13 @@ binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, /* First, scan to see how many characters need to be encoded */ in = 0; while (in < datalen) { + Py_ssize_t delta = 0; if ((databuf[in] > 126) || (databuf[in] == '=') || (header && databuf[in] == '_') || ((databuf[in] == '.') && (linelen == 0) && - (databuf[in+1] == '\n' || databuf[in+1] == '\r' || databuf[in+1] == 0)) || + (in + 1 == datalen || databuf[in+1] == '\n' || + databuf[in+1] == '\r' || databuf[in+1] == 0)) || (!istext && ((databuf[in] == '\r') || (databuf[in] == '\n'))) || ((databuf[in] == '\t' || databuf[in] == ' ') && (in + 1 == datalen)) || ((databuf[in] < 33) && @@ -1397,12 +1400,12 @@ binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, if ((linelen + 3) >= MAXLINESIZE) { linelen = 0; if (crlf) - odatalen += 3; + delta += 3; else - odatalen += 2; + delta += 2; } linelen += 3; - odatalen += 3; + delta += 3; in++; } else { @@ -1414,11 +1417,11 @@ binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, linelen = 0; /* Protect against whitespace on end of line */ if (in && ((databuf[in-1] == ' ') || (databuf[in-1] == '\t'))) - odatalen += 2; + delta += 2; if (crlf) - odatalen += 2; + delta += 2; else - odatalen += 1; + delta += 1; if (databuf[in] == '\r') in += 2; else @@ -1430,15 +1433,20 @@ binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, (linelen + 1) >= MAXLINESIZE) { linelen = 0; if (crlf) - odatalen += 3; + delta += 3; else - odatalen += 2; + delta += 2; } linelen++; - odatalen++; + delta++; in++; } } + if (PY_SSIZE_T_MAX - delta < odatalen) { + PyErr_NoMemory(); + return NULL; + } + odatalen += delta; } /* We allocate the output same size as input, this is overkill. @@ -1458,13 +1466,13 @@ binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, (databuf[in] == '=') || (header && databuf[in] == '_') || ((databuf[in] == '.') && (linelen == 0) && - (databuf[in+1] == '\n' || databuf[in+1] == '\r' || databuf[in+1] == 0)) || + (in + 1 == datalen || databuf[in+1] == '\n' || + databuf[in+1] == '\r' || databuf[in+1] == 0)) || (!istext && ((databuf[in] == '\r') || (databuf[in] == '\n'))) || ((databuf[in] == '\t' || databuf[in] == ' ') && (in + 1 == datalen)) || ((databuf[in] < 33) && (databuf[in] != '\r') && (databuf[in] != '\n') && - (quotetabs || - (!quotetabs && ((databuf[in] != '\t') && (databuf[in] != ' ')))))) + (quotetabs || ((databuf[in] != '\t') && (databuf[in] != ' '))))) { if ((linelen + 3 )>= MAXLINESIZE) { odata[out++] = '='; diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index e1cdb2c..f5c8421 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -1847,8 +1847,8 @@ _multibytecodec.__create_codec [clinic start generated code]*/ static PyObject * -_multibytecodec___create_codec(PyModuleDef *module, PyObject *arg) -/*[clinic end generated code: output=fbe74f6510640163 input=6840b2a6b183fcfa]*/ +_multibytecodec___create_codec(PyObject *module, PyObject *arg) +/*[clinic end generated code: output=cfa3dce8260e809d input=6840b2a6b183fcfa]*/ { MultibyteCodecObject *self; MultibyteCodec *codec; diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h index e94be11..af06c6d 100644 --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -25,10 +25,10 @@ PyDoc_STRVAR(_codecs_lookup__doc__, {"lookup", (PyCFunction)_codecs_lookup, METH_O, _codecs_lookup__doc__}, static PyObject * -_codecs_lookup_impl(PyModuleDef *module, const char *encoding); +_codecs_lookup_impl(PyObject *module, const char *encoding); static PyObject * -_codecs_lookup(PyModuleDef *module, PyObject *arg) +_codecs_lookup(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; const char *encoding; @@ -57,11 +57,11 @@ PyDoc_STRVAR(_codecs_encode__doc__, {"encode", (PyCFunction)_codecs_encode, METH_VARARGS|METH_KEYWORDS, _codecs_encode__doc__}, static PyObject * -_codecs_encode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_encode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors); static PyObject * -_codecs_encode(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_codecs_encode(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "encoding", "errors", NULL}; @@ -94,11 +94,11 @@ PyDoc_STRVAR(_codecs_decode__doc__, {"decode", (PyCFunction)_codecs_decode, METH_VARARGS|METH_KEYWORDS, _codecs_decode__doc__}, static PyObject * -_codecs_decode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_decode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors); static PyObject * -_codecs_decode(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_codecs_decode(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "encoding", "errors", NULL}; @@ -125,10 +125,10 @@ PyDoc_STRVAR(_codecs__forget_codec__doc__, {"_forget_codec", (PyCFunction)_codecs__forget_codec, METH_O, _codecs__forget_codec__doc__}, static PyObject * -_codecs__forget_codec_impl(PyModuleDef *module, const char *encoding); +_codecs__forget_codec_impl(PyObject *module, const char *encoding); static PyObject * -_codecs__forget_codec(PyModuleDef *module, PyObject *arg) +_codecs__forget_codec(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; const char *encoding; @@ -150,11 +150,11 @@ PyDoc_STRVAR(_codecs_escape_decode__doc__, {"escape_decode", (PyCFunction)_codecs_escape_decode, METH_VARARGS, _codecs_escape_decode__doc__}, static PyObject * -_codecs_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_escape_decode(PyModuleDef *module, PyObject *args) +_codecs_escape_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -182,11 +182,11 @@ PyDoc_STRVAR(_codecs_escape_encode__doc__, {"escape_encode", (PyCFunction)_codecs_escape_encode, METH_VARARGS, _codecs_escape_encode__doc__}, static PyObject * -_codecs_escape_encode_impl(PyModuleDef *module, PyObject *data, +_codecs_escape_encode_impl(PyObject *module, PyObject *data, const char *errors); static PyObject * -_codecs_escape_encode(PyModuleDef *module, PyObject *args) +_codecs_escape_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *data; @@ -210,11 +210,11 @@ PyDoc_STRVAR(_codecs_unicode_internal_decode__doc__, {"unicode_internal_decode", (PyCFunction)_codecs_unicode_internal_decode, METH_VARARGS, _codecs_unicode_internal_decode__doc__}, static PyObject * -_codecs_unicode_internal_decode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_decode_impl(PyObject *module, PyObject *obj, const char *errors); static PyObject * -_codecs_unicode_internal_decode(PyModuleDef *module, PyObject *args) +_codecs_unicode_internal_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -238,11 +238,11 @@ PyDoc_STRVAR(_codecs_utf_7_decode__doc__, {"utf_7_decode", (PyCFunction)_codecs_utf_7_decode, METH_VARARGS, _codecs_utf_7_decode__doc__}, static PyObject * -_codecs_utf_7_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_7_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_7_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_7_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -271,11 +271,11 @@ PyDoc_STRVAR(_codecs_utf_8_decode__doc__, {"utf_8_decode", (PyCFunction)_codecs_utf_8_decode, METH_VARARGS, _codecs_utf_8_decode__doc__}, static PyObject * -_codecs_utf_8_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_8_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_8_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_8_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -304,11 +304,11 @@ PyDoc_STRVAR(_codecs_utf_16_decode__doc__, {"utf_16_decode", (PyCFunction)_codecs_utf_16_decode, METH_VARARGS, _codecs_utf_16_decode__doc__}, static PyObject * -_codecs_utf_16_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_16_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -337,11 +337,11 @@ PyDoc_STRVAR(_codecs_utf_16_le_decode__doc__, {"utf_16_le_decode", (PyCFunction)_codecs_utf_16_le_decode, METH_VARARGS, _codecs_utf_16_le_decode__doc__}, static PyObject * -_codecs_utf_16_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_16_le_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_le_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -370,11 +370,11 @@ PyDoc_STRVAR(_codecs_utf_16_be_decode__doc__, {"utf_16_be_decode", (PyCFunction)_codecs_utf_16_be_decode, METH_VARARGS, _codecs_utf_16_be_decode__doc__}, static PyObject * -_codecs_utf_16_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_16_be_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_be_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -404,11 +404,11 @@ PyDoc_STRVAR(_codecs_utf_16_ex_decode__doc__, {"utf_16_ex_decode", (PyCFunction)_codecs_utf_16_ex_decode, METH_VARARGS, _codecs_utf_16_ex_decode__doc__}, static PyObject * -_codecs_utf_16_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final); static PyObject * -_codecs_utf_16_ex_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_ex_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -438,11 +438,11 @@ PyDoc_STRVAR(_codecs_utf_32_decode__doc__, {"utf_32_decode", (PyCFunction)_codecs_utf_32_decode, METH_VARARGS, _codecs_utf_32_decode__doc__}, static PyObject * -_codecs_utf_32_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_32_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -471,11 +471,11 @@ PyDoc_STRVAR(_codecs_utf_32_le_decode__doc__, {"utf_32_le_decode", (PyCFunction)_codecs_utf_32_le_decode, METH_VARARGS, _codecs_utf_32_le_decode__doc__}, static PyObject * -_codecs_utf_32_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_32_le_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_le_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -504,11 +504,11 @@ PyDoc_STRVAR(_codecs_utf_32_be_decode__doc__, {"utf_32_be_decode", (PyCFunction)_codecs_utf_32_be_decode, METH_VARARGS, _codecs_utf_32_be_decode__doc__}, static PyObject * -_codecs_utf_32_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_32_be_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_be_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -538,11 +538,11 @@ PyDoc_STRVAR(_codecs_utf_32_ex_decode__doc__, {"utf_32_ex_decode", (PyCFunction)_codecs_utf_32_ex_decode, METH_VARARGS, _codecs_utf_32_ex_decode__doc__}, static PyObject * -_codecs_utf_32_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final); static PyObject * -_codecs_utf_32_ex_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_ex_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -572,11 +572,11 @@ PyDoc_STRVAR(_codecs_unicode_escape_decode__doc__, {"unicode_escape_decode", (PyCFunction)_codecs_unicode_escape_decode, METH_VARARGS, _codecs_unicode_escape_decode__doc__}, static PyObject * -_codecs_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_unicode_escape_decode(PyModuleDef *module, PyObject *args) +_codecs_unicode_escape_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -604,11 +604,11 @@ PyDoc_STRVAR(_codecs_raw_unicode_escape_decode__doc__, {"raw_unicode_escape_decode", (PyCFunction)_codecs_raw_unicode_escape_decode, METH_VARARGS, _codecs_raw_unicode_escape_decode__doc__}, static PyObject * -_codecs_raw_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_raw_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_raw_unicode_escape_decode(PyModuleDef *module, PyObject *args) +_codecs_raw_unicode_escape_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -636,11 +636,11 @@ PyDoc_STRVAR(_codecs_latin_1_decode__doc__, {"latin_1_decode", (PyCFunction)_codecs_latin_1_decode, METH_VARARGS, _codecs_latin_1_decode__doc__}, static PyObject * -_codecs_latin_1_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_latin_1_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_latin_1_decode(PyModuleDef *module, PyObject *args) +_codecs_latin_1_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -668,11 +668,11 @@ PyDoc_STRVAR(_codecs_ascii_decode__doc__, {"ascii_decode", (PyCFunction)_codecs_ascii_decode, METH_VARARGS, _codecs_ascii_decode__doc__}, static PyObject * -_codecs_ascii_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_ascii_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_ascii_decode(PyModuleDef *module, PyObject *args) +_codecs_ascii_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -700,11 +700,11 @@ PyDoc_STRVAR(_codecs_charmap_decode__doc__, {"charmap_decode", (PyCFunction)_codecs_charmap_decode, METH_VARARGS, _codecs_charmap_decode__doc__}, static PyObject * -_codecs_charmap_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_charmap_decode_impl(PyObject *module, Py_buffer *data, const char *errors, PyObject *mapping); static PyObject * -_codecs_charmap_decode(PyModuleDef *module, PyObject *args) +_codecs_charmap_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -735,11 +735,11 @@ PyDoc_STRVAR(_codecs_mbcs_decode__doc__, {"mbcs_decode", (PyCFunction)_codecs_mbcs_decode, METH_VARARGS, _codecs_mbcs_decode__doc__}, static PyObject * -_codecs_mbcs_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_mbcs_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_mbcs_decode(PyModuleDef *module, PyObject *args) +_codecs_mbcs_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -772,11 +772,11 @@ PyDoc_STRVAR(_codecs_code_page_decode__doc__, {"code_page_decode", (PyCFunction)_codecs_code_page_decode, METH_VARARGS, _codecs_code_page_decode__doc__}, static PyObject * -_codecs_code_page_decode_impl(PyModuleDef *module, int codepage, +_codecs_code_page_decode_impl(PyObject *module, int codepage, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_code_page_decode(PyModuleDef *module, PyObject *args) +_codecs_code_page_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int codepage; @@ -808,11 +808,11 @@ PyDoc_STRVAR(_codecs_readbuffer_encode__doc__, {"readbuffer_encode", (PyCFunction)_codecs_readbuffer_encode, METH_VARARGS, _codecs_readbuffer_encode__doc__}, static PyObject * -_codecs_readbuffer_encode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_readbuffer_encode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_readbuffer_encode(PyModuleDef *module, PyObject *args) +_codecs_readbuffer_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -840,11 +840,11 @@ PyDoc_STRVAR(_codecs_unicode_internal_encode__doc__, {"unicode_internal_encode", (PyCFunction)_codecs_unicode_internal_encode, METH_VARARGS, _codecs_unicode_internal_encode__doc__}, static PyObject * -_codecs_unicode_internal_encode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_encode_impl(PyObject *module, PyObject *obj, const char *errors); static PyObject * -_codecs_unicode_internal_encode(PyModuleDef *module, PyObject *args) +_codecs_unicode_internal_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -868,11 +868,11 @@ PyDoc_STRVAR(_codecs_utf_7_encode__doc__, {"utf_7_encode", (PyCFunction)_codecs_utf_7_encode, METH_VARARGS, _codecs_utf_7_encode__doc__}, static PyObject * -_codecs_utf_7_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_7_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_7_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_7_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -896,11 +896,11 @@ PyDoc_STRVAR(_codecs_utf_8_encode__doc__, {"utf_8_encode", (PyCFunction)_codecs_utf_8_encode, METH_VARARGS, _codecs_utf_8_encode__doc__}, static PyObject * -_codecs_utf_8_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_8_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_8_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_8_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -924,11 +924,11 @@ PyDoc_STRVAR(_codecs_utf_16_encode__doc__, {"utf_16_encode", (PyCFunction)_codecs_utf_16_encode, METH_VARARGS, _codecs_utf_16_encode__doc__}, static PyObject * -_codecs_utf_16_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder); static PyObject * -_codecs_utf_16_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -953,11 +953,11 @@ PyDoc_STRVAR(_codecs_utf_16_le_encode__doc__, {"utf_16_le_encode", (PyCFunction)_codecs_utf_16_le_encode, METH_VARARGS, _codecs_utf_16_le_encode__doc__}, static PyObject * -_codecs_utf_16_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_le_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_16_le_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_le_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -981,11 +981,11 @@ PyDoc_STRVAR(_codecs_utf_16_be_encode__doc__, {"utf_16_be_encode", (PyCFunction)_codecs_utf_16_be_encode, METH_VARARGS, _codecs_utf_16_be_encode__doc__}, static PyObject * -_codecs_utf_16_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_be_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_16_be_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_be_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1009,11 +1009,11 @@ PyDoc_STRVAR(_codecs_utf_32_encode__doc__, {"utf_32_encode", (PyCFunction)_codecs_utf_32_encode, METH_VARARGS, _codecs_utf_32_encode__doc__}, static PyObject * -_codecs_utf_32_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder); static PyObject * -_codecs_utf_32_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1038,11 +1038,11 @@ PyDoc_STRVAR(_codecs_utf_32_le_encode__doc__, {"utf_32_le_encode", (PyCFunction)_codecs_utf_32_le_encode, METH_VARARGS, _codecs_utf_32_le_encode__doc__}, static PyObject * -_codecs_utf_32_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_le_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_32_le_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_le_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1066,11 +1066,11 @@ PyDoc_STRVAR(_codecs_utf_32_be_encode__doc__, {"utf_32_be_encode", (PyCFunction)_codecs_utf_32_be_encode, METH_VARARGS, _codecs_utf_32_be_encode__doc__}, static PyObject * -_codecs_utf_32_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_be_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_32_be_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_be_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1094,11 +1094,11 @@ PyDoc_STRVAR(_codecs_unicode_escape_encode__doc__, {"unicode_escape_encode", (PyCFunction)_codecs_unicode_escape_encode, METH_VARARGS, _codecs_unicode_escape_encode__doc__}, static PyObject * -_codecs_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_unicode_escape_encode(PyModuleDef *module, PyObject *args) +_codecs_unicode_escape_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1122,11 +1122,11 @@ PyDoc_STRVAR(_codecs_raw_unicode_escape_encode__doc__, {"raw_unicode_escape_encode", (PyCFunction)_codecs_raw_unicode_escape_encode, METH_VARARGS, _codecs_raw_unicode_escape_encode__doc__}, static PyObject * -_codecs_raw_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_raw_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_raw_unicode_escape_encode(PyModuleDef *module, PyObject *args) +_codecs_raw_unicode_escape_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1150,11 +1150,11 @@ PyDoc_STRVAR(_codecs_latin_1_encode__doc__, {"latin_1_encode", (PyCFunction)_codecs_latin_1_encode, METH_VARARGS, _codecs_latin_1_encode__doc__}, static PyObject * -_codecs_latin_1_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_latin_1_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_latin_1_encode(PyModuleDef *module, PyObject *args) +_codecs_latin_1_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1178,11 +1178,11 @@ PyDoc_STRVAR(_codecs_ascii_encode__doc__, {"ascii_encode", (PyCFunction)_codecs_ascii_encode, METH_VARARGS, _codecs_ascii_encode__doc__}, static PyObject * -_codecs_ascii_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_ascii_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_ascii_encode(PyModuleDef *module, PyObject *args) +_codecs_ascii_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1206,11 +1206,11 @@ PyDoc_STRVAR(_codecs_charmap_encode__doc__, {"charmap_encode", (PyCFunction)_codecs_charmap_encode, METH_VARARGS, _codecs_charmap_encode__doc__}, static PyObject * -_codecs_charmap_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_charmap_encode_impl(PyObject *module, PyObject *str, const char *errors, PyObject *mapping); static PyObject * -_codecs_charmap_encode(PyModuleDef *module, PyObject *args) +_codecs_charmap_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1235,10 +1235,10 @@ PyDoc_STRVAR(_codecs_charmap_build__doc__, {"charmap_build", (PyCFunction)_codecs_charmap_build, METH_O, _codecs_charmap_build__doc__}, static PyObject * -_codecs_charmap_build_impl(PyModuleDef *module, PyObject *map); +_codecs_charmap_build_impl(PyObject *module, PyObject *map); static PyObject * -_codecs_charmap_build(PyModuleDef *module, PyObject *arg) +_codecs_charmap_build(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *map; @@ -1262,11 +1262,10 @@ PyDoc_STRVAR(_codecs_mbcs_encode__doc__, {"mbcs_encode", (PyCFunction)_codecs_mbcs_encode, METH_VARARGS, _codecs_mbcs_encode__doc__}, static PyObject * -_codecs_mbcs_encode_impl(PyModuleDef *module, PyObject *str, - const char *errors); +_codecs_mbcs_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_mbcs_encode(PyModuleDef *module, PyObject *args) +_codecs_mbcs_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1294,11 +1293,11 @@ PyDoc_STRVAR(_codecs_code_page_encode__doc__, {"code_page_encode", (PyCFunction)_codecs_code_page_encode, METH_VARARGS, _codecs_code_page_encode__doc__}, static PyObject * -_codecs_code_page_encode_impl(PyModuleDef *module, int code_page, - PyObject *str, const char *errors); +_codecs_code_page_encode_impl(PyObject *module, int code_page, PyObject *str, + const char *errors); static PyObject * -_codecs_code_page_encode(PyModuleDef *module, PyObject *args) +_codecs_code_page_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int code_page; @@ -1330,11 +1329,11 @@ PyDoc_STRVAR(_codecs_register_error__doc__, {"register_error", (PyCFunction)_codecs_register_error, METH_VARARGS, _codecs_register_error__doc__}, static PyObject * -_codecs_register_error_impl(PyModuleDef *module, const char *errors, +_codecs_register_error_impl(PyObject *module, const char *errors, PyObject *handler); static PyObject * -_codecs_register_error(PyModuleDef *module, PyObject *args) +_codecs_register_error(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *errors; @@ -1362,10 +1361,10 @@ PyDoc_STRVAR(_codecs_lookup_error__doc__, {"lookup_error", (PyCFunction)_codecs_lookup_error, METH_O, _codecs_lookup_error__doc__}, static PyObject * -_codecs_lookup_error_impl(PyModuleDef *module, const char *name); +_codecs_lookup_error_impl(PyObject *module, const char *name); static PyObject * -_codecs_lookup_error(PyModuleDef *module, PyObject *arg) +_codecs_lookup_error(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; const char *name; @@ -1393,4 +1392,4 @@ exit: #ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF #define _CODECS_CODE_PAGE_ENCODE_METHODDEF #endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */ -/*[clinic end generated code: output=9c9967048027c1c7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=42fed94e2ab765ba input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_cryptmodule.c.h b/Modules/clinic/_cryptmodule.c.h index b8ec31e..a3c371c 100644 --- a/Modules/clinic/_cryptmodule.c.h +++ b/Modules/clinic/_cryptmodule.c.h @@ -17,10 +17,10 @@ PyDoc_STRVAR(crypt_crypt__doc__, {"crypt", (PyCFunction)crypt_crypt, METH_VARARGS, crypt_crypt__doc__}, static PyObject * -crypt_crypt_impl(PyModuleDef *module, const char *word, const char *salt); +crypt_crypt_impl(PyObject *module, const char *word, const char *salt); static PyObject * -crypt_crypt(PyModuleDef *module, PyObject *args) +crypt_crypt(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *word; @@ -34,4 +34,4 @@ crypt_crypt(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=22c295c9bce018c4 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e0493a9691537690 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_dbmmodule.c.h b/Modules/clinic/_dbmmodule.c.h index 8474e02..49cbceb 100644 --- a/Modules/clinic/_dbmmodule.c.h +++ b/Modules/clinic/_dbmmodule.c.h @@ -119,11 +119,11 @@ PyDoc_STRVAR(dbmopen__doc__, {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__}, static PyObject * -dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, +dbmopen_impl(PyObject *module, const char *filename, const char *flags, int mode); static PyObject * -dbmopen(PyModuleDef *module, PyObject *args) +dbmopen(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *filename; @@ -138,4 +138,4 @@ dbmopen(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=1d92e81b28c558d0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=fff12f168cdf8b43 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_gdbmmodule.c.h b/Modules/clinic/_gdbmmodule.c.h index 110ad9a..2d87cfc 100644 --- a/Modules/clinic/_gdbmmodule.c.h +++ b/Modules/clinic/_gdbmmodule.c.h @@ -231,11 +231,10 @@ PyDoc_STRVAR(dbmopen__doc__, {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__}, static PyObject * -dbmopen_impl(PyModuleDef *module, const char *name, const char *flags, - int mode); +dbmopen_impl(PyObject *module, const char *name, const char *flags, int mode); static PyObject * -dbmopen(PyModuleDef *module, PyObject *args) +dbmopen(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *name; @@ -250,4 +249,4 @@ dbmopen(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=d3d8d871bcccb68a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9ac7a89858a9765f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h index 59d9d51..f8d38ea 100644 --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -163,10 +163,10 @@ PyDoc_STRVAR(_lzma_is_check_supported__doc__, {"is_check_supported", (PyCFunction)_lzma_is_check_supported, METH_O, _lzma_is_check_supported__doc__}, static PyObject * -_lzma_is_check_supported_impl(PyModuleDef *module, int check_id); +_lzma_is_check_supported_impl(PyObject *module, int check_id); static PyObject * -_lzma_is_check_supported(PyModuleDef *module, PyObject *arg) +_lzma_is_check_supported(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int check_id; @@ -191,10 +191,10 @@ PyDoc_STRVAR(_lzma__encode_filter_properties__doc__, {"_encode_filter_properties", (PyCFunction)_lzma__encode_filter_properties, METH_O, _lzma__encode_filter_properties__doc__}, static PyObject * -_lzma__encode_filter_properties_impl(PyModuleDef *module, lzma_filter filter); +_lzma__encode_filter_properties_impl(PyObject *module, lzma_filter filter); static PyObject * -_lzma__encode_filter_properties(PyModuleDef *module, PyObject *arg) +_lzma__encode_filter_properties(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; lzma_filter filter = {LZMA_VLI_UNKNOWN, NULL}; @@ -223,11 +223,11 @@ PyDoc_STRVAR(_lzma__decode_filter_properties__doc__, {"_decode_filter_properties", (PyCFunction)_lzma__decode_filter_properties, METH_VARARGS, _lzma__decode_filter_properties__doc__}, static PyObject * -_lzma__decode_filter_properties_impl(PyModuleDef *module, lzma_vli filter_id, +_lzma__decode_filter_properties_impl(PyObject *module, lzma_vli filter_id, Py_buffer *encoded_props); static PyObject * -_lzma__decode_filter_properties(PyModuleDef *module, PyObject *args) +_lzma__decode_filter_properties(PyObject *module, PyObject *args) { PyObject *return_value = NULL; lzma_vli filter_id; @@ -245,4 +245,4 @@ exit: return return_value; } -/*[clinic end generated code: output=2d3e0842be3d3fe1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=fada06020fd318cc input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_opcode.c.h b/Modules/clinic/_opcode.c.h index 196a2ee..a5f6442 100644 --- a/Modules/clinic/_opcode.c.h +++ b/Modules/clinic/_opcode.c.h @@ -12,10 +12,10 @@ PyDoc_STRVAR(_opcode_stack_effect__doc__, {"stack_effect", (PyCFunction)_opcode_stack_effect, METH_VARARGS, _opcode_stack_effect__doc__}, static int -_opcode_stack_effect_impl(PyModuleDef *module, int opcode, PyObject *oparg); +_opcode_stack_effect_impl(PyObject *module, int opcode, PyObject *oparg); static PyObject * -_opcode_stack_effect(PyModuleDef *module, PyObject *args) +_opcode_stack_effect(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int opcode; @@ -33,4 +33,4 @@ _opcode_stack_effect(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=8ee7cb735705e8b3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=984d6de140303d10 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_pickle.c.h b/Modules/clinic/_pickle.c.h index ab4d205..bd12d2a 100644 --- a/Modules/clinic/_pickle.c.h +++ b/Modules/clinic/_pickle.c.h @@ -380,11 +380,11 @@ PyDoc_STRVAR(_pickle_dump__doc__, {"dump", (PyCFunction)_pickle_dump, METH_VARARGS|METH_KEYWORDS, _pickle_dump__doc__}, static PyObject * -_pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, +_pickle_dump_impl(PyObject *module, PyObject *obj, PyObject *file, PyObject *protocol, int fix_imports); static PyObject * -_pickle_dump(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_dump(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "file", "protocol", "fix_imports", NULL}; @@ -424,11 +424,11 @@ PyDoc_STRVAR(_pickle_dumps__doc__, {"dumps", (PyCFunction)_pickle_dumps, METH_VARARGS|METH_KEYWORDS, _pickle_dumps__doc__}, static PyObject * -_pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, +_pickle_dumps_impl(PyObject *module, PyObject *obj, PyObject *protocol, int fix_imports); static PyObject * -_pickle_dumps(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_dumps(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "protocol", "fix_imports", NULL}; @@ -478,11 +478,11 @@ PyDoc_STRVAR(_pickle_load__doc__, {"load", (PyCFunction)_pickle_load, METH_VARARGS|METH_KEYWORDS, _pickle_load__doc__}, static PyObject * -_pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, +_pickle_load_impl(PyObject *module, PyObject *file, int fix_imports, const char *encoding, const char *errors); static PyObject * -_pickle_load(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_load(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"file", "fix_imports", "encoding", "errors", NULL}; @@ -524,11 +524,11 @@ PyDoc_STRVAR(_pickle_loads__doc__, {"loads", (PyCFunction)_pickle_loads, METH_VARARGS|METH_KEYWORDS, _pickle_loads__doc__}, static PyObject * -_pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, +_pickle_loads_impl(PyObject *module, PyObject *data, int fix_imports, const char *encoding, const char *errors); static PyObject * -_pickle_loads(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_loads(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"data", "fix_imports", "encoding", "errors", NULL}; @@ -545,4 +545,4 @@ _pickle_loads(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=a7169d4fbbeef827 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=93657e55d6a748af input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_sre.c.h b/Modules/clinic/_sre.c.h index 6de4708..3281717 100644 --- a/Modules/clinic/_sre.c.h +++ b/Modules/clinic/_sre.c.h @@ -11,10 +11,10 @@ PyDoc_STRVAR(_sre_getcodesize__doc__, {"getcodesize", (PyCFunction)_sre_getcodesize, METH_NOARGS, _sre_getcodesize__doc__}, static int -_sre_getcodesize_impl(PyModuleDef *module); +_sre_getcodesize_impl(PyObject *module); static PyObject * -_sre_getcodesize(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_sre_getcodesize(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; int _return_value; @@ -37,10 +37,10 @@ PyDoc_STRVAR(_sre_getlower__doc__, {"getlower", (PyCFunction)_sre_getlower, METH_VARARGS, _sre_getlower__doc__}, static int -_sre_getlower_impl(PyModuleDef *module, int character, int flags); +_sre_getlower_impl(PyObject *module, int character, int flags); static PyObject * -_sre_getlower(PyModuleDef *module, PyObject *args) +_sre_getlower(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int character; @@ -406,12 +406,12 @@ PyDoc_STRVAR(_sre_compile__doc__, {"compile", (PyCFunction)_sre_compile, METH_VARARGS|METH_KEYWORDS, _sre_compile__doc__}, static PyObject * -_sre_compile_impl(PyModuleDef *module, PyObject *pattern, int flags, +_sre_compile_impl(PyObject *module, PyObject *pattern, int flags, PyObject *code, Py_ssize_t groups, PyObject *groupindex, PyObject *indexgroup); static PyObject * -_sre_compile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sre_compile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", NULL}; @@ -690,4 +690,4 @@ _sre_SRE_Scanner_search(ScannerObject *self, PyObject *Py_UNUSED(ignored)) { return _sre_SRE_Scanner_search_impl(self); } -/*[clinic end generated code: output=d1d73ab2c5008bd4 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a4ce9e5b748ce532 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h index 4dbc5d0..852e365 100644 --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -28,10 +28,10 @@ PyDoc_STRVAR(_ssl__test_decode_cert__doc__, {"_test_decode_cert", (PyCFunction)_ssl__test_decode_cert, METH_O, _ssl__test_decode_cert__doc__}, static PyObject * -_ssl__test_decode_cert_impl(PyModuleDef *module, PyObject *path); +_ssl__test_decode_cert_impl(PyObject *module, PyObject *path); static PyObject * -_ssl__test_decode_cert(PyModuleDef *module, PyObject *arg) +_ssl__test_decode_cert(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *path; @@ -795,10 +795,10 @@ PyDoc_STRVAR(_ssl_RAND_add__doc__, {"RAND_add", (PyCFunction)_ssl_RAND_add, METH_VARARGS, _ssl_RAND_add__doc__}, static PyObject * -_ssl_RAND_add_impl(PyModuleDef *module, Py_buffer *view, double entropy); +_ssl_RAND_add_impl(PyObject *module, Py_buffer *view, double entropy); static PyObject * -_ssl_RAND_add(PyModuleDef *module, PyObject *args) +_ssl_RAND_add(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer view = {NULL, NULL}; @@ -827,10 +827,10 @@ PyDoc_STRVAR(_ssl_RAND_bytes__doc__, {"RAND_bytes", (PyCFunction)_ssl_RAND_bytes, METH_O, _ssl_RAND_bytes__doc__}, static PyObject * -_ssl_RAND_bytes_impl(PyModuleDef *module, int n); +_ssl_RAND_bytes_impl(PyObject *module, int n); static PyObject * -_ssl_RAND_bytes(PyModuleDef *module, PyObject *arg) +_ssl_RAND_bytes(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int n; @@ -856,10 +856,10 @@ PyDoc_STRVAR(_ssl_RAND_pseudo_bytes__doc__, {"RAND_pseudo_bytes", (PyCFunction)_ssl_RAND_pseudo_bytes, METH_O, _ssl_RAND_pseudo_bytes__doc__}, static PyObject * -_ssl_RAND_pseudo_bytes_impl(PyModuleDef *module, int n); +_ssl_RAND_pseudo_bytes_impl(PyObject *module, int n); static PyObject * -_ssl_RAND_pseudo_bytes(PyModuleDef *module, PyObject *arg) +_ssl_RAND_pseudo_bytes(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int n; @@ -885,15 +885,15 @@ PyDoc_STRVAR(_ssl_RAND_status__doc__, {"RAND_status", (PyCFunction)_ssl_RAND_status, METH_NOARGS, _ssl_RAND_status__doc__}, static PyObject * -_ssl_RAND_status_impl(PyModuleDef *module); +_ssl_RAND_status_impl(PyObject *module); static PyObject * -_ssl_RAND_status(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_ssl_RAND_status(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _ssl_RAND_status_impl(module); } -#if defined(HAVE_RAND_EGD) +#if !defined(OPENSSL_NO_EGD) PyDoc_STRVAR(_ssl_RAND_egd__doc__, "RAND_egd($module, path, /)\n" @@ -908,10 +908,10 @@ PyDoc_STRVAR(_ssl_RAND_egd__doc__, {"RAND_egd", (PyCFunction)_ssl_RAND_egd, METH_O, _ssl_RAND_egd__doc__}, static PyObject * -_ssl_RAND_egd_impl(PyModuleDef *module, PyObject *path); +_ssl_RAND_egd_impl(PyObject *module, PyObject *path); static PyObject * -_ssl_RAND_egd(PyModuleDef *module, PyObject *arg) +_ssl_RAND_egd(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *path; @@ -924,7 +924,7 @@ exit: return return_value; } -#endif /* defined(HAVE_RAND_EGD) */ +#endif /* !defined(OPENSSL_NO_EGD) */ PyDoc_STRVAR(_ssl_get_default_verify_paths__doc__, "get_default_verify_paths($module, /)\n" @@ -938,10 +938,10 @@ PyDoc_STRVAR(_ssl_get_default_verify_paths__doc__, {"get_default_verify_paths", (PyCFunction)_ssl_get_default_verify_paths, METH_NOARGS, _ssl_get_default_verify_paths__doc__}, static PyObject * -_ssl_get_default_verify_paths_impl(PyModuleDef *module); +_ssl_get_default_verify_paths_impl(PyObject *module); static PyObject * -_ssl_get_default_verify_paths(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_ssl_get_default_verify_paths(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _ssl_get_default_verify_paths_impl(module); } @@ -959,10 +959,10 @@ PyDoc_STRVAR(_ssl_txt2obj__doc__, {"txt2obj", (PyCFunction)_ssl_txt2obj, METH_VARARGS|METH_KEYWORDS, _ssl_txt2obj__doc__}, static PyObject * -_ssl_txt2obj_impl(PyModuleDef *module, const char *txt, int name); +_ssl_txt2obj_impl(PyObject *module, const char *txt, int name); static PyObject * -_ssl_txt2obj(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_ssl_txt2obj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"txt", "name", NULL}; @@ -988,10 +988,10 @@ PyDoc_STRVAR(_ssl_nid2obj__doc__, {"nid2obj", (PyCFunction)_ssl_nid2obj, METH_O, _ssl_nid2obj__doc__}, static PyObject * -_ssl_nid2obj_impl(PyModuleDef *module, int nid); +_ssl_nid2obj_impl(PyObject *module, int nid); static PyObject * -_ssl_nid2obj(PyModuleDef *module, PyObject *arg) +_ssl_nid2obj(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int nid; @@ -1022,10 +1022,10 @@ PyDoc_STRVAR(_ssl_enum_certificates__doc__, {"enum_certificates", (PyCFunction)_ssl_enum_certificates, METH_VARARGS|METH_KEYWORDS, _ssl_enum_certificates__doc__}, static PyObject * -_ssl_enum_certificates_impl(PyModuleDef *module, const char *store_name); +_ssl_enum_certificates_impl(PyObject *module, const char *store_name); static PyObject * -_ssl_enum_certificates(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_ssl_enum_certificates(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"store_name", NULL}; @@ -1059,10 +1059,10 @@ PyDoc_STRVAR(_ssl_enum_crls__doc__, {"enum_crls", (PyCFunction)_ssl_enum_crls, METH_VARARGS|METH_KEYWORDS, _ssl_enum_crls__doc__}, static PyObject * -_ssl_enum_crls_impl(PyModuleDef *module, const char *store_name); +_ssl_enum_crls_impl(PyObject *module, const char *store_name); static PyObject * -_ssl_enum_crls(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_ssl_enum_crls(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"store_name", NULL}; @@ -1102,4 +1102,4 @@ exit: #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=a14999cb565a69a2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6fb10594d8351dc5 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_tkinter.c.h b/Modules/clinic/_tkinter.c.h index 7917dec..77af083 100644 --- a/Modules/clinic/_tkinter.c.h +++ b/Modules/clinic/_tkinter.c.h @@ -532,13 +532,13 @@ PyDoc_STRVAR(_tkinter_create__doc__, {"create", (PyCFunction)_tkinter_create, METH_VARARGS, _tkinter_create__doc__}, static PyObject * -_tkinter_create_impl(PyModuleDef *module, const char *screenName, +_tkinter_create_impl(PyObject *module, const char *screenName, const char *baseName, const char *className, int interactive, int wantobjects, int wantTk, int sync, const char *use); static PyObject * -_tkinter_create(PyModuleDef *module, PyObject *args) +_tkinter_create(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *screenName = NULL; @@ -571,10 +571,10 @@ PyDoc_STRVAR(_tkinter_setbusywaitinterval__doc__, {"setbusywaitinterval", (PyCFunction)_tkinter_setbusywaitinterval, METH_O, _tkinter_setbusywaitinterval__doc__}, static PyObject * -_tkinter_setbusywaitinterval_impl(PyModuleDef *module, int new_val); +_tkinter_setbusywaitinterval_impl(PyObject *module, int new_val); static PyObject * -_tkinter_setbusywaitinterval(PyModuleDef *module, PyObject *arg) +_tkinter_setbusywaitinterval(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int new_val; @@ -597,10 +597,10 @@ PyDoc_STRVAR(_tkinter_getbusywaitinterval__doc__, {"getbusywaitinterval", (PyCFunction)_tkinter_getbusywaitinterval, METH_NOARGS, _tkinter_getbusywaitinterval__doc__}, static int -_tkinter_getbusywaitinterval_impl(PyModuleDef *module); +_tkinter_getbusywaitinterval_impl(PyObject *module); static PyObject * -_tkinter_getbusywaitinterval(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_tkinter_getbusywaitinterval(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; int _return_value; @@ -621,4 +621,4 @@ exit: #ifndef _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF #define _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF #endif /* !defined(_TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF) */ -/*[clinic end generated code: output=6dd667b91cf8addd input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f9057c8bf288633d input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_weakref.c.h b/Modules/clinic/_weakref.c.h index 87c701c..2d93679 100644 --- a/Modules/clinic/_weakref.c.h +++ b/Modules/clinic/_weakref.c.h @@ -12,10 +12,10 @@ PyDoc_STRVAR(_weakref_getweakrefcount__doc__, {"getweakrefcount", (PyCFunction)_weakref_getweakrefcount, METH_O, _weakref_getweakrefcount__doc__}, static Py_ssize_t -_weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object); +_weakref_getweakrefcount_impl(PyObject *module, PyObject *object); static PyObject * -_weakref_getweakrefcount(PyModuleDef *module, PyObject *object) +_weakref_getweakrefcount(PyObject *module, PyObject *object) { PyObject *return_value = NULL; Py_ssize_t _return_value; @@ -28,4 +28,33 @@ _weakref_getweakrefcount(PyModuleDef *module, PyObject *object) exit: return return_value; } -/*[clinic end generated code: output=4da9aade63eed77f input=a9049054013a1b77]*/ + +PyDoc_STRVAR(_weakref__remove_dead_weakref__doc__, +"_remove_dead_weakref($module, dct, key, /)\n" +"--\n" +"\n" +"Atomically remove key from dict if it points to a dead weakref."); + +#define _WEAKREF__REMOVE_DEAD_WEAKREF_METHODDEF \ + {"_remove_dead_weakref", (PyCFunction)_weakref__remove_dead_weakref, METH_VARARGS, _weakref__remove_dead_weakref__doc__}, + +static PyObject * +_weakref__remove_dead_weakref_impl(PyObject *module, PyObject *dct, + PyObject *key); + +static PyObject * +_weakref__remove_dead_weakref(PyObject *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *dct; + PyObject *key; + + if (!PyArg_ParseTuple(args, "O!O:_remove_dead_weakref", + &PyDict_Type, &dct, &key)) + goto exit; + return_value = _weakref__remove_dead_weakref_impl(module, dct, key); + +exit: + return return_value; +} +/*[clinic end generated code: output=5764cb64a6f66ffd input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h index 34518e8..ac38d37 100644 --- a/Modules/clinic/_winapi.c.h +++ b/Modules/clinic/_winapi.c.h @@ -71,10 +71,10 @@ PyDoc_STRVAR(_winapi_CloseHandle__doc__, {"CloseHandle", (PyCFunction)_winapi_CloseHandle, METH_O, _winapi_CloseHandle__doc__}, static PyObject * -_winapi_CloseHandle_impl(PyModuleDef *module, HANDLE handle); +_winapi_CloseHandle_impl(PyObject *module, HANDLE handle); static PyObject * -_winapi_CloseHandle(PyModuleDef *module, PyObject *arg) +_winapi_CloseHandle(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HANDLE handle; @@ -96,11 +96,11 @@ PyDoc_STRVAR(_winapi_ConnectNamedPipe__doc__, {"ConnectNamedPipe", (PyCFunction)_winapi_ConnectNamedPipe, METH_VARARGS|METH_KEYWORDS, _winapi_ConnectNamedPipe__doc__}, static PyObject * -_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, +_winapi_ConnectNamedPipe_impl(PyObject *module, HANDLE handle, int use_overlapped); static PyObject * -_winapi_ConnectNamedPipe(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_winapi_ConnectNamedPipe(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"handle", "overlapped", NULL}; @@ -127,14 +127,14 @@ PyDoc_STRVAR(_winapi_CreateFile__doc__, {"CreateFile", (PyCFunction)_winapi_CreateFile, METH_VARARGS, _winapi_CreateFile__doc__}, static HANDLE -_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, +_winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name, DWORD desired_access, DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD flags_and_attributes, HANDLE template_file); static PyObject * -_winapi_CreateFile(PyModuleDef *module, PyObject *args) +_winapi_CreateFile(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPCTSTR file_name; @@ -169,11 +169,11 @@ PyDoc_STRVAR(_winapi_CreateJunction__doc__, {"CreateJunction", (PyCFunction)_winapi_CreateJunction, METH_VARARGS, _winapi_CreateJunction__doc__}, static PyObject * -_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, +_winapi_CreateJunction_impl(PyObject *module, LPWSTR src_path, LPWSTR dst_path); static PyObject * -_winapi_CreateJunction(PyModuleDef *module, PyObject *args) +_winapi_CreateJunction(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPWSTR src_path; @@ -199,14 +199,14 @@ PyDoc_STRVAR(_winapi_CreateNamedPipe__doc__, {"CreateNamedPipe", (PyCFunction)_winapi_CreateNamedPipe, METH_VARARGS, _winapi_CreateNamedPipe__doc__}, static HANDLE -_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, - DWORD open_mode, DWORD pipe_mode, - DWORD max_instances, DWORD out_buffer_size, - DWORD in_buffer_size, DWORD default_timeout, +_winapi_CreateNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD open_mode, + DWORD pipe_mode, DWORD max_instances, + DWORD out_buffer_size, DWORD in_buffer_size, + DWORD default_timeout, LPSECURITY_ATTRIBUTES security_attributes); static PyObject * -_winapi_CreateNamedPipe(PyModuleDef *module, PyObject *args) +_winapi_CreateNamedPipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPCTSTR name; @@ -248,11 +248,10 @@ PyDoc_STRVAR(_winapi_CreatePipe__doc__, {"CreatePipe", (PyCFunction)_winapi_CreatePipe, METH_VARARGS, _winapi_CreatePipe__doc__}, static PyObject * -_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, - DWORD size); +_winapi_CreatePipe_impl(PyObject *module, PyObject *pipe_attrs, DWORD size); static PyObject * -_winapi_CreatePipe(PyModuleDef *module, PyObject *args) +_winapi_CreatePipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *pipe_attrs; @@ -287,7 +286,7 @@ PyDoc_STRVAR(_winapi_CreateProcess__doc__, {"CreateProcess", (PyCFunction)_winapi_CreateProcess, METH_VARARGS, _winapi_CreateProcess__doc__}, static PyObject * -_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, +_winapi_CreateProcess_impl(PyObject *module, Py_UNICODE *application_name, Py_UNICODE *command_line, PyObject *proc_attrs, PyObject *thread_attrs, BOOL inherit_handles, DWORD creation_flags, PyObject *env_mapping, @@ -295,7 +294,7 @@ _winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, PyObject *startup_info); static PyObject * -_winapi_CreateProcess(PyModuleDef *module, PyObject *args) +_winapi_CreateProcess(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_UNICODE *application_name; @@ -333,15 +332,14 @@ PyDoc_STRVAR(_winapi_DuplicateHandle__doc__, {"DuplicateHandle", (PyCFunction)_winapi_DuplicateHandle, METH_VARARGS, _winapi_DuplicateHandle__doc__}, static HANDLE -_winapi_DuplicateHandle_impl(PyModuleDef *module, - HANDLE source_process_handle, +_winapi_DuplicateHandle_impl(PyObject *module, HANDLE source_process_handle, HANDLE source_handle, HANDLE target_process_handle, DWORD desired_access, BOOL inherit_handle, DWORD options); static PyObject * -_winapi_DuplicateHandle(PyModuleDef *module, PyObject *args) +_winapi_DuplicateHandle(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE source_process_handle; @@ -375,10 +373,10 @@ PyDoc_STRVAR(_winapi_ExitProcess__doc__, {"ExitProcess", (PyCFunction)_winapi_ExitProcess, METH_O, _winapi_ExitProcess__doc__}, static PyObject * -_winapi_ExitProcess_impl(PyModuleDef *module, UINT ExitCode); +_winapi_ExitProcess_impl(PyObject *module, UINT ExitCode); static PyObject * -_winapi_ExitProcess(PyModuleDef *module, PyObject *arg) +_winapi_ExitProcess(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; UINT ExitCode; @@ -401,10 +399,10 @@ PyDoc_STRVAR(_winapi_GetCurrentProcess__doc__, {"GetCurrentProcess", (PyCFunction)_winapi_GetCurrentProcess, METH_NOARGS, _winapi_GetCurrentProcess__doc__}, static HANDLE -_winapi_GetCurrentProcess_impl(PyModuleDef *module); +_winapi_GetCurrentProcess_impl(PyObject *module); static PyObject * -_winapi_GetCurrentProcess(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_winapi_GetCurrentProcess(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; HANDLE _return_value; @@ -430,10 +428,10 @@ PyDoc_STRVAR(_winapi_GetExitCodeProcess__doc__, {"GetExitCodeProcess", (PyCFunction)_winapi_GetExitCodeProcess, METH_O, _winapi_GetExitCodeProcess__doc__}, static DWORD -_winapi_GetExitCodeProcess_impl(PyModuleDef *module, HANDLE process); +_winapi_GetExitCodeProcess_impl(PyObject *module, HANDLE process); static PyObject * -_winapi_GetExitCodeProcess(PyModuleDef *module, PyObject *arg) +_winapi_GetExitCodeProcess(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HANDLE process; @@ -459,10 +457,10 @@ PyDoc_STRVAR(_winapi_GetLastError__doc__, {"GetLastError", (PyCFunction)_winapi_GetLastError, METH_NOARGS, _winapi_GetLastError__doc__}, static DWORD -_winapi_GetLastError_impl(PyModuleDef *module); +_winapi_GetLastError_impl(PyObject *module); static PyObject * -_winapi_GetLastError(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_winapi_GetLastError(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; DWORD _return_value; @@ -493,10 +491,10 @@ PyDoc_STRVAR(_winapi_GetModuleFileName__doc__, {"GetModuleFileName", (PyCFunction)_winapi_GetModuleFileName, METH_O, _winapi_GetModuleFileName__doc__}, static PyObject * -_winapi_GetModuleFileName_impl(PyModuleDef *module, HMODULE module_handle); +_winapi_GetModuleFileName_impl(PyObject *module, HMODULE module_handle); static PyObject * -_winapi_GetModuleFileName(PyModuleDef *module, PyObject *arg) +_winapi_GetModuleFileName(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HMODULE module_handle; @@ -524,10 +522,10 @@ PyDoc_STRVAR(_winapi_GetStdHandle__doc__, {"GetStdHandle", (PyCFunction)_winapi_GetStdHandle, METH_O, _winapi_GetStdHandle__doc__}, static HANDLE -_winapi_GetStdHandle_impl(PyModuleDef *module, DWORD std_handle); +_winapi_GetStdHandle_impl(PyObject *module, DWORD std_handle); static PyObject * -_winapi_GetStdHandle(PyModuleDef *module, PyObject *arg) +_winapi_GetStdHandle(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; DWORD std_handle; @@ -556,10 +554,10 @@ PyDoc_STRVAR(_winapi_GetVersion__doc__, {"GetVersion", (PyCFunction)_winapi_GetVersion, METH_NOARGS, _winapi_GetVersion__doc__}, static long -_winapi_GetVersion_impl(PyModuleDef *module); +_winapi_GetVersion_impl(PyObject *module); static PyObject * -_winapi_GetVersion(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_winapi_GetVersion(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; long _return_value; @@ -582,11 +580,11 @@ PyDoc_STRVAR(_winapi_OpenProcess__doc__, {"OpenProcess", (PyCFunction)_winapi_OpenProcess, METH_VARARGS, _winapi_OpenProcess__doc__}, static HANDLE -_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, +_winapi_OpenProcess_impl(PyObject *module, DWORD desired_access, BOOL inherit_handle, DWORD process_id); static PyObject * -_winapi_OpenProcess(PyModuleDef *module, PyObject *args) +_winapi_OpenProcess(PyObject *module, PyObject *args) { PyObject *return_value = NULL; DWORD desired_access; @@ -617,10 +615,10 @@ PyDoc_STRVAR(_winapi_PeekNamedPipe__doc__, {"PeekNamedPipe", (PyCFunction)_winapi_PeekNamedPipe, METH_VARARGS, _winapi_PeekNamedPipe__doc__}, static PyObject * -_winapi_PeekNamedPipe_impl(PyModuleDef *module, HANDLE handle, int size); +_winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size); static PyObject * -_winapi_PeekNamedPipe(PyModuleDef *module, PyObject *args) +_winapi_PeekNamedPipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE handle; @@ -644,11 +642,11 @@ PyDoc_STRVAR(_winapi_ReadFile__doc__, {"ReadFile", (PyCFunction)_winapi_ReadFile, METH_VARARGS|METH_KEYWORDS, _winapi_ReadFile__doc__}, static PyObject * -_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, +_winapi_ReadFile_impl(PyObject *module, HANDLE handle, int size, int use_overlapped); static PyObject * -_winapi_ReadFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_winapi_ReadFile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"handle", "size", "overlapped", NULL}; @@ -675,13 +673,13 @@ PyDoc_STRVAR(_winapi_SetNamedPipeHandleState__doc__, {"SetNamedPipeHandleState", (PyCFunction)_winapi_SetNamedPipeHandleState, METH_VARARGS, _winapi_SetNamedPipeHandleState__doc__}, static PyObject * -_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, +_winapi_SetNamedPipeHandleState_impl(PyObject *module, HANDLE named_pipe, PyObject *mode, PyObject *max_collection_count, PyObject *collect_data_timeout); static PyObject * -_winapi_SetNamedPipeHandleState(PyModuleDef *module, PyObject *args) +_winapi_SetNamedPipeHandleState(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE named_pipe; @@ -708,11 +706,11 @@ PyDoc_STRVAR(_winapi_TerminateProcess__doc__, {"TerminateProcess", (PyCFunction)_winapi_TerminateProcess, METH_VARARGS, _winapi_TerminateProcess__doc__}, static PyObject * -_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, +_winapi_TerminateProcess_impl(PyObject *module, HANDLE handle, UINT exit_code); static PyObject * -_winapi_TerminateProcess(PyModuleDef *module, PyObject *args) +_winapi_TerminateProcess(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE handle; @@ -736,10 +734,10 @@ PyDoc_STRVAR(_winapi_WaitNamedPipe__doc__, {"WaitNamedPipe", (PyCFunction)_winapi_WaitNamedPipe, METH_VARARGS, _winapi_WaitNamedPipe__doc__}, static PyObject * -_winapi_WaitNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD timeout); +_winapi_WaitNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD timeout); static PyObject * -_winapi_WaitNamedPipe(PyModuleDef *module, PyObject *args) +_winapi_WaitNamedPipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPCTSTR name; @@ -764,12 +762,11 @@ PyDoc_STRVAR(_winapi_WaitForMultipleObjects__doc__, {"WaitForMultipleObjects", (PyCFunction)_winapi_WaitForMultipleObjects, METH_VARARGS, _winapi_WaitForMultipleObjects__doc__}, static PyObject * -_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, - PyObject *handle_seq, BOOL wait_flag, - DWORD milliseconds); +_winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq, + BOOL wait_flag, DWORD milliseconds); static PyObject * -_winapi_WaitForMultipleObjects(PyModuleDef *module, PyObject *args) +_winapi_WaitForMultipleObjects(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *handle_seq; @@ -799,11 +796,11 @@ PyDoc_STRVAR(_winapi_WaitForSingleObject__doc__, {"WaitForSingleObject", (PyCFunction)_winapi_WaitForSingleObject, METH_VARARGS, _winapi_WaitForSingleObject__doc__}, static long -_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, +_winapi_WaitForSingleObject_impl(PyObject *module, HANDLE handle, DWORD milliseconds); static PyObject * -_winapi_WaitForSingleObject(PyModuleDef *module, PyObject *args) +_winapi_WaitForSingleObject(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE handle; @@ -831,11 +828,11 @@ PyDoc_STRVAR(_winapi_WriteFile__doc__, {"WriteFile", (PyCFunction)_winapi_WriteFile, METH_VARARGS|METH_KEYWORDS, _winapi_WriteFile__doc__}, static PyObject * -_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, +_winapi_WriteFile_impl(PyObject *module, HANDLE handle, PyObject *buffer, int use_overlapped); static PyObject * -_winapi_WriteFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_winapi_WriteFile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"handle", "buffer", "overlapped", NULL}; @@ -851,4 +848,4 @@ _winapi_WriteFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=98771c6584056d19 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a4c4b2a9fcb0bea1 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h index fdf247e..0c7061a 100644 --- a/Modules/clinic/arraymodule.c.h +++ b/Modules/clinic/arraymodule.c.h @@ -438,13 +438,13 @@ PyDoc_STRVAR(array__array_reconstructor__doc__, {"_array_reconstructor", (PyCFunction)array__array_reconstructor, METH_VARARGS, array__array_reconstructor__doc__}, static PyObject * -array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, +array__array_reconstructor_impl(PyObject *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items); static PyObject * -array__array_reconstructor(PyModuleDef *module, PyObject *args) +array__array_reconstructor(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyTypeObject *arraytype; @@ -496,4 +496,4 @@ PyDoc_STRVAR(array_arrayiterator___setstate____doc__, #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \ {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__}, -/*[clinic end generated code: output=d2e82c65ea841cfc input=a9049054013a1b77]*/ +/*[clinic end generated code: output=305df3f5796039e4 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/audioop.c.h b/Modules/clinic/audioop.c.h index 3ee2966..62e313b 100644 --- a/Modules/clinic/audioop.c.h +++ b/Modules/clinic/audioop.c.h @@ -12,11 +12,11 @@ PyDoc_STRVAR(audioop_getsample__doc__, {"getsample", (PyCFunction)audioop_getsample, METH_VARARGS, audioop_getsample__doc__}, static PyObject * -audioop_getsample_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_getsample_impl(PyObject *module, Py_buffer *fragment, int width, Py_ssize_t index); static PyObject * -audioop_getsample(PyModuleDef *module, PyObject *args) +audioop_getsample(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -46,10 +46,10 @@ PyDoc_STRVAR(audioop_max__doc__, {"max", (PyCFunction)audioop_max, METH_VARARGS, audioop_max__doc__}, static PyObject * -audioop_max_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_max_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_max(PyModuleDef *module, PyObject *args) +audioop_max(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -78,10 +78,10 @@ PyDoc_STRVAR(audioop_minmax__doc__, {"minmax", (PyCFunction)audioop_minmax, METH_VARARGS, audioop_minmax__doc__}, static PyObject * -audioop_minmax_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_minmax_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_minmax(PyModuleDef *module, PyObject *args) +audioop_minmax(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -110,10 +110,10 @@ PyDoc_STRVAR(audioop_avg__doc__, {"avg", (PyCFunction)audioop_avg, METH_VARARGS, audioop_avg__doc__}, static PyObject * -audioop_avg_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_avg_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_avg(PyModuleDef *module, PyObject *args) +audioop_avg(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -142,10 +142,10 @@ PyDoc_STRVAR(audioop_rms__doc__, {"rms", (PyCFunction)audioop_rms, METH_VARARGS, audioop_rms__doc__}, static PyObject * -audioop_rms_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_rms_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_rms(PyModuleDef *module, PyObject *args) +audioop_rms(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -174,11 +174,11 @@ PyDoc_STRVAR(audioop_findfit__doc__, {"findfit", (PyCFunction)audioop_findfit, METH_VARARGS, audioop_findfit__doc__}, static PyObject * -audioop_findfit_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfit_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference); static PyObject * -audioop_findfit(PyModuleDef *module, PyObject *args) +audioop_findfit(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -210,11 +210,11 @@ PyDoc_STRVAR(audioop_findfactor__doc__, {"findfactor", (PyCFunction)audioop_findfactor, METH_VARARGS, audioop_findfactor__doc__}, static PyObject * -audioop_findfactor_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfactor_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference); static PyObject * -audioop_findfactor(PyModuleDef *module, PyObject *args) +audioop_findfactor(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -246,11 +246,11 @@ PyDoc_STRVAR(audioop_findmax__doc__, {"findmax", (PyCFunction)audioop_findmax, METH_VARARGS, audioop_findmax__doc__}, static PyObject * -audioop_findmax_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findmax_impl(PyObject *module, Py_buffer *fragment, Py_ssize_t length); static PyObject * -audioop_findmax(PyModuleDef *module, PyObject *args) +audioop_findmax(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -279,10 +279,10 @@ PyDoc_STRVAR(audioop_avgpp__doc__, {"avgpp", (PyCFunction)audioop_avgpp, METH_VARARGS, audioop_avgpp__doc__}, static PyObject * -audioop_avgpp_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_avgpp_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_avgpp(PyModuleDef *module, PyObject *args) +audioop_avgpp(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -311,10 +311,10 @@ PyDoc_STRVAR(audioop_maxpp__doc__, {"maxpp", (PyCFunction)audioop_maxpp, METH_VARARGS, audioop_maxpp__doc__}, static PyObject * -audioop_maxpp_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_maxpp_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_maxpp(PyModuleDef *module, PyObject *args) +audioop_maxpp(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -343,10 +343,10 @@ PyDoc_STRVAR(audioop_cross__doc__, {"cross", (PyCFunction)audioop_cross, METH_VARARGS, audioop_cross__doc__}, static PyObject * -audioop_cross_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_cross_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_cross(PyModuleDef *module, PyObject *args) +audioop_cross(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -375,11 +375,11 @@ PyDoc_STRVAR(audioop_mul__doc__, {"mul", (PyCFunction)audioop_mul, METH_VARARGS, audioop_mul__doc__}, static PyObject * -audioop_mul_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_mul_impl(PyObject *module, Py_buffer *fragment, int width, double factor); static PyObject * -audioop_mul(PyModuleDef *module, PyObject *args) +audioop_mul(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -409,11 +409,11 @@ PyDoc_STRVAR(audioop_tomono__doc__, {"tomono", (PyCFunction)audioop_tomono, METH_VARARGS, audioop_tomono__doc__}, static PyObject * -audioop_tomono_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tomono_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor); static PyObject * -audioop_tomono(PyModuleDef *module, PyObject *args) +audioop_tomono(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -444,11 +444,11 @@ PyDoc_STRVAR(audioop_tostereo__doc__, {"tostereo", (PyCFunction)audioop_tostereo, METH_VARARGS, audioop_tostereo__doc__}, static PyObject * -audioop_tostereo_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tostereo_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor); static PyObject * -audioop_tostereo(PyModuleDef *module, PyObject *args) +audioop_tostereo(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -479,11 +479,11 @@ PyDoc_STRVAR(audioop_add__doc__, {"add", (PyCFunction)audioop_add, METH_VARARGS, audioop_add__doc__}, static PyObject * -audioop_add_impl(PyModuleDef *module, Py_buffer *fragment1, +audioop_add_impl(PyObject *module, Py_buffer *fragment1, Py_buffer *fragment2, int width); static PyObject * -audioop_add(PyModuleDef *module, PyObject *args) +audioop_add(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment1 = {NULL, NULL}; @@ -516,11 +516,10 @@ PyDoc_STRVAR(audioop_bias__doc__, {"bias", (PyCFunction)audioop_bias, METH_VARARGS, audioop_bias__doc__}, static PyObject * -audioop_bias_impl(PyModuleDef *module, Py_buffer *fragment, int width, - int bias); +audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias); static PyObject * -audioop_bias(PyModuleDef *module, PyObject *args) +audioop_bias(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -550,10 +549,10 @@ PyDoc_STRVAR(audioop_reverse__doc__, {"reverse", (PyCFunction)audioop_reverse, METH_VARARGS, audioop_reverse__doc__}, static PyObject * -audioop_reverse_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_reverse_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_reverse(PyModuleDef *module, PyObject *args) +audioop_reverse(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -582,10 +581,10 @@ PyDoc_STRVAR(audioop_byteswap__doc__, {"byteswap", (PyCFunction)audioop_byteswap, METH_VARARGS, audioop_byteswap__doc__}, static PyObject * -audioop_byteswap_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_byteswap_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_byteswap(PyModuleDef *module, PyObject *args) +audioop_byteswap(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -614,11 +613,11 @@ PyDoc_STRVAR(audioop_lin2lin__doc__, {"lin2lin", (PyCFunction)audioop_lin2lin, METH_VARARGS, audioop_lin2lin__doc__}, static PyObject * -audioop_lin2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2lin_impl(PyObject *module, Py_buffer *fragment, int width, int newwidth); static PyObject * -audioop_lin2lin(PyModuleDef *module, PyObject *args) +audioop_lin2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -649,12 +648,12 @@ PyDoc_STRVAR(audioop_ratecv__doc__, {"ratecv", (PyCFunction)audioop_ratecv, METH_VARARGS, audioop_ratecv__doc__}, static PyObject * -audioop_ratecv_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width, int nchannels, int inrate, int outrate, PyObject *state, int weightA, int weightB); static PyObject * -audioop_ratecv(PyModuleDef *module, PyObject *args) +audioop_ratecv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -689,10 +688,10 @@ PyDoc_STRVAR(audioop_lin2ulaw__doc__, {"lin2ulaw", (PyCFunction)audioop_lin2ulaw, METH_VARARGS, audioop_lin2ulaw__doc__}, static PyObject * -audioop_lin2ulaw_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_lin2ulaw_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_lin2ulaw(PyModuleDef *module, PyObject *args) +audioop_lin2ulaw(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -721,10 +720,10 @@ PyDoc_STRVAR(audioop_ulaw2lin__doc__, {"ulaw2lin", (PyCFunction)audioop_ulaw2lin, METH_VARARGS, audioop_ulaw2lin__doc__}, static PyObject * -audioop_ulaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_ulaw2lin_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_ulaw2lin(PyModuleDef *module, PyObject *args) +audioop_ulaw2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -753,10 +752,10 @@ PyDoc_STRVAR(audioop_lin2alaw__doc__, {"lin2alaw", (PyCFunction)audioop_lin2alaw, METH_VARARGS, audioop_lin2alaw__doc__}, static PyObject * -audioop_lin2alaw_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_lin2alaw_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_lin2alaw(PyModuleDef *module, PyObject *args) +audioop_lin2alaw(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -785,10 +784,10 @@ PyDoc_STRVAR(audioop_alaw2lin__doc__, {"alaw2lin", (PyCFunction)audioop_alaw2lin, METH_VARARGS, audioop_alaw2lin__doc__}, static PyObject * -audioop_alaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_alaw2lin_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_alaw2lin(PyModuleDef *module, PyObject *args) +audioop_alaw2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -817,11 +816,11 @@ PyDoc_STRVAR(audioop_lin2adpcm__doc__, {"lin2adpcm", (PyCFunction)audioop_lin2adpcm, METH_VARARGS, audioop_lin2adpcm__doc__}, static PyObject * -audioop_lin2adpcm_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2adpcm_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state); static PyObject * -audioop_lin2adpcm(PyModuleDef *module, PyObject *args) +audioop_lin2adpcm(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -851,11 +850,11 @@ PyDoc_STRVAR(audioop_adpcm2lin__doc__, {"adpcm2lin", (PyCFunction)audioop_adpcm2lin, METH_VARARGS, audioop_adpcm2lin__doc__}, static PyObject * -audioop_adpcm2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_adpcm2lin_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state); static PyObject * -audioop_adpcm2lin(PyModuleDef *module, PyObject *args) +audioop_adpcm2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -874,4 +873,4 @@ exit: return return_value; } -/*[clinic end generated code: output=a076e1b213a8727b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=385fb09fa21a62c0 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h index e348bee..6ace4d5 100644 --- a/Modules/clinic/binascii.c.h +++ b/Modules/clinic/binascii.c.h @@ -12,10 +12,10 @@ PyDoc_STRVAR(binascii_a2b_uu__doc__, {"a2b_uu", (PyCFunction)binascii_a2b_uu, METH_O, binascii_a2b_uu__doc__}, static PyObject * -binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data); +binascii_a2b_uu_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_a2b_uu(PyModuleDef *module, PyObject *arg) +binascii_a2b_uu(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -42,10 +42,10 @@ PyDoc_STRVAR(binascii_b2a_uu__doc__, {"b2a_uu", (PyCFunction)binascii_b2a_uu, METH_O, binascii_b2a_uu__doc__}, static PyObject * -binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_uu_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_b2a_uu(PyModuleDef *module, PyObject *arg) +binascii_b2a_uu(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -72,10 +72,10 @@ PyDoc_STRVAR(binascii_a2b_base64__doc__, {"a2b_base64", (PyCFunction)binascii_a2b_base64, METH_O, binascii_a2b_base64__doc__}, static PyObject * -binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data); +binascii_a2b_base64_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_a2b_base64(PyModuleDef *module, PyObject *arg) +binascii_a2b_base64(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -102,10 +102,10 @@ PyDoc_STRVAR(binascii_b2a_base64__doc__, {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_O, binascii_b2a_base64__doc__}, static PyObject * -binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_base64_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_b2a_base64(PyModuleDef *module, PyObject *arg) +binascii_b2a_base64(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -132,10 +132,10 @@ PyDoc_STRVAR(binascii_a2b_hqx__doc__, {"a2b_hqx", (PyCFunction)binascii_a2b_hqx, METH_O, binascii_a2b_hqx__doc__}, static PyObject * -binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_a2b_hqx(PyModuleDef *module, PyObject *arg) +binascii_a2b_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -162,10 +162,10 @@ PyDoc_STRVAR(binascii_rlecode_hqx__doc__, {"rlecode_hqx", (PyCFunction)binascii_rlecode_hqx, METH_O, binascii_rlecode_hqx__doc__}, static PyObject * -binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_rlecode_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_rlecode_hqx(PyModuleDef *module, PyObject *arg) +binascii_rlecode_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -192,10 +192,10 @@ PyDoc_STRVAR(binascii_b2a_hqx__doc__, {"b2a_hqx", (PyCFunction)binascii_b2a_hqx, METH_O, binascii_b2a_hqx__doc__}, static PyObject * -binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_b2a_hqx(PyModuleDef *module, PyObject *arg) +binascii_b2a_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -222,10 +222,10 @@ PyDoc_STRVAR(binascii_rledecode_hqx__doc__, {"rledecode_hqx", (PyCFunction)binascii_rledecode_hqx, METH_O, binascii_rledecode_hqx__doc__}, static PyObject * -binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_rledecode_hqx(PyModuleDef *module, PyObject *arg) +binascii_rledecode_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -246,16 +246,16 @@ PyDoc_STRVAR(binascii_crc_hqx__doc__, "crc_hqx($module, data, crc, /)\n" "--\n" "\n" -"Compute hqx CRC incrementally."); +"Compute CRC-CCITT incrementally."); #define BINASCII_CRC_HQX_METHODDEF \ {"crc_hqx", (PyCFunction)binascii_crc_hqx, METH_VARARGS, binascii_crc_hqx__doc__}, static unsigned int -binascii_crc_hqx_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc); +binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc); static PyObject * -binascii_crc_hqx(PyModuleDef *module, PyObject *args) +binascii_crc_hqx(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -288,10 +288,10 @@ PyDoc_STRVAR(binascii_crc32__doc__, {"crc32", (PyCFunction)binascii_crc32, METH_VARARGS, binascii_crc32__doc__}, static unsigned int -binascii_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc); +binascii_crc32_impl(PyObject *module, Py_buffer *data, unsigned int crc); static PyObject * -binascii_crc32(PyModuleDef *module, PyObject *args) +binascii_crc32(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -327,10 +327,10 @@ PyDoc_STRVAR(binascii_b2a_hex__doc__, {"b2a_hex", (PyCFunction)binascii_b2a_hex, METH_O, binascii_b2a_hex__doc__}, static PyObject * -binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_hex_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_b2a_hex(PyModuleDef *module, PyObject *arg) +binascii_b2a_hex(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -359,10 +359,10 @@ PyDoc_STRVAR(binascii_hexlify__doc__, {"hexlify", (PyCFunction)binascii_hexlify, METH_O, binascii_hexlify__doc__}, static PyObject * -binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data); +binascii_hexlify_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_hexlify(PyModuleDef *module, PyObject *arg) +binascii_hexlify(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -392,10 +392,10 @@ PyDoc_STRVAR(binascii_a2b_hex__doc__, {"a2b_hex", (PyCFunction)binascii_a2b_hex, METH_O, binascii_a2b_hex__doc__}, static PyObject * -binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr); +binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr); static PyObject * -binascii_a2b_hex(PyModuleDef *module, PyObject *arg) +binascii_a2b_hex(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; @@ -424,10 +424,10 @@ PyDoc_STRVAR(binascii_unhexlify__doc__, {"unhexlify", (PyCFunction)binascii_unhexlify, METH_O, binascii_unhexlify__doc__}, static PyObject * -binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr); +binascii_unhexlify_impl(PyObject *module, Py_buffer *hexstr); static PyObject * -binascii_unhexlify(PyModuleDef *module, PyObject *arg) +binascii_unhexlify(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; @@ -454,10 +454,10 @@ PyDoc_STRVAR(binascii_a2b_qp__doc__, {"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_VARARGS|METH_KEYWORDS, binascii_a2b_qp__doc__}, static PyObject * -binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header); +binascii_a2b_qp_impl(PyObject *module, Py_buffer *data, int header); static PyObject * -binascii_a2b_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs) +binascii_a2b_qp(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"data", "header", NULL}; @@ -491,11 +491,11 @@ PyDoc_STRVAR(binascii_b2a_qp__doc__, {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_VARARGS|METH_KEYWORDS, binascii_b2a_qp__doc__}, static PyObject * -binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, +binascii_b2a_qp_impl(PyObject *module, Py_buffer *data, int quotetabs, int istext, int header); static PyObject * -binascii_b2a_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs) +binascii_b2a_qp(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"data", "quotetabs", "istext", "header", NULL}; @@ -516,4 +516,4 @@ exit: return return_value; } -/*[clinic end generated code: output=b1a3cbf7660ebaa5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6d70d5edd9373d92 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h index 7d61649..a255353 100644 --- a/Modules/clinic/cmathmodule.c.h +++ b/Modules/clinic/cmathmodule.c.h @@ -12,10 +12,10 @@ PyDoc_STRVAR(cmath_acos__doc__, {"acos", (PyCFunction)cmath_acos, METH_O, cmath_acos__doc__}, static Py_complex -cmath_acos_impl(PyModuleDef *module, Py_complex z); +cmath_acos_impl(PyObject *module, Py_complex z); static PyObject * -cmath_acos(PyModuleDef *module, PyObject *arg) +cmath_acos(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -53,10 +53,10 @@ PyDoc_STRVAR(cmath_acosh__doc__, {"acosh", (PyCFunction)cmath_acosh, METH_O, cmath_acosh__doc__}, static Py_complex -cmath_acosh_impl(PyModuleDef *module, Py_complex z); +cmath_acosh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_acosh(PyModuleDef *module, PyObject *arg) +cmath_acosh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -94,10 +94,10 @@ PyDoc_STRVAR(cmath_asin__doc__, {"asin", (PyCFunction)cmath_asin, METH_O, cmath_asin__doc__}, static Py_complex -cmath_asin_impl(PyModuleDef *module, Py_complex z); +cmath_asin_impl(PyObject *module, Py_complex z); static PyObject * -cmath_asin(PyModuleDef *module, PyObject *arg) +cmath_asin(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -135,10 +135,10 @@ PyDoc_STRVAR(cmath_asinh__doc__, {"asinh", (PyCFunction)cmath_asinh, METH_O, cmath_asinh__doc__}, static Py_complex -cmath_asinh_impl(PyModuleDef *module, Py_complex z); +cmath_asinh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_asinh(PyModuleDef *module, PyObject *arg) +cmath_asinh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -176,10 +176,10 @@ PyDoc_STRVAR(cmath_atan__doc__, {"atan", (PyCFunction)cmath_atan, METH_O, cmath_atan__doc__}, static Py_complex -cmath_atan_impl(PyModuleDef *module, Py_complex z); +cmath_atan_impl(PyObject *module, Py_complex z); static PyObject * -cmath_atan(PyModuleDef *module, PyObject *arg) +cmath_atan(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -217,10 +217,10 @@ PyDoc_STRVAR(cmath_atanh__doc__, {"atanh", (PyCFunction)cmath_atanh, METH_O, cmath_atanh__doc__}, static Py_complex -cmath_atanh_impl(PyModuleDef *module, Py_complex z); +cmath_atanh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_atanh(PyModuleDef *module, PyObject *arg) +cmath_atanh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -258,10 +258,10 @@ PyDoc_STRVAR(cmath_cos__doc__, {"cos", (PyCFunction)cmath_cos, METH_O, cmath_cos__doc__}, static Py_complex -cmath_cos_impl(PyModuleDef *module, Py_complex z); +cmath_cos_impl(PyObject *module, Py_complex z); static PyObject * -cmath_cos(PyModuleDef *module, PyObject *arg) +cmath_cos(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -299,10 +299,10 @@ PyDoc_STRVAR(cmath_cosh__doc__, {"cosh", (PyCFunction)cmath_cosh, METH_O, cmath_cosh__doc__}, static Py_complex -cmath_cosh_impl(PyModuleDef *module, Py_complex z); +cmath_cosh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_cosh(PyModuleDef *module, PyObject *arg) +cmath_cosh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -340,10 +340,10 @@ PyDoc_STRVAR(cmath_exp__doc__, {"exp", (PyCFunction)cmath_exp, METH_O, cmath_exp__doc__}, static Py_complex -cmath_exp_impl(PyModuleDef *module, Py_complex z); +cmath_exp_impl(PyObject *module, Py_complex z); static PyObject * -cmath_exp(PyModuleDef *module, PyObject *arg) +cmath_exp(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -381,10 +381,10 @@ PyDoc_STRVAR(cmath_log10__doc__, {"log10", (PyCFunction)cmath_log10, METH_O, cmath_log10__doc__}, static Py_complex -cmath_log10_impl(PyModuleDef *module, Py_complex z); +cmath_log10_impl(PyObject *module, Py_complex z); static PyObject * -cmath_log10(PyModuleDef *module, PyObject *arg) +cmath_log10(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -422,10 +422,10 @@ PyDoc_STRVAR(cmath_sin__doc__, {"sin", (PyCFunction)cmath_sin, METH_O, cmath_sin__doc__}, static Py_complex -cmath_sin_impl(PyModuleDef *module, Py_complex z); +cmath_sin_impl(PyObject *module, Py_complex z); static PyObject * -cmath_sin(PyModuleDef *module, PyObject *arg) +cmath_sin(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -463,10 +463,10 @@ PyDoc_STRVAR(cmath_sinh__doc__, {"sinh", (PyCFunction)cmath_sinh, METH_O, cmath_sinh__doc__}, static Py_complex -cmath_sinh_impl(PyModuleDef *module, Py_complex z); +cmath_sinh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_sinh(PyModuleDef *module, PyObject *arg) +cmath_sinh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -504,10 +504,10 @@ PyDoc_STRVAR(cmath_sqrt__doc__, {"sqrt", (PyCFunction)cmath_sqrt, METH_O, cmath_sqrt__doc__}, static Py_complex -cmath_sqrt_impl(PyModuleDef *module, Py_complex z); +cmath_sqrt_impl(PyObject *module, Py_complex z); static PyObject * -cmath_sqrt(PyModuleDef *module, PyObject *arg) +cmath_sqrt(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -545,10 +545,10 @@ PyDoc_STRVAR(cmath_tan__doc__, {"tan", (PyCFunction)cmath_tan, METH_O, cmath_tan__doc__}, static Py_complex -cmath_tan_impl(PyModuleDef *module, Py_complex z); +cmath_tan_impl(PyObject *module, Py_complex z); static PyObject * -cmath_tan(PyModuleDef *module, PyObject *arg) +cmath_tan(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -586,10 +586,10 @@ PyDoc_STRVAR(cmath_tanh__doc__, {"tanh", (PyCFunction)cmath_tanh, METH_O, cmath_tanh__doc__}, static Py_complex -cmath_tanh_impl(PyModuleDef *module, Py_complex z); +cmath_tanh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_tanh(PyModuleDef *module, PyObject *arg) +cmath_tanh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -629,10 +629,10 @@ PyDoc_STRVAR(cmath_log__doc__, {"log", (PyCFunction)cmath_log, METH_VARARGS, cmath_log__doc__}, static PyObject * -cmath_log_impl(PyModuleDef *module, Py_complex x, PyObject *y_obj); +cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj); static PyObject * -cmath_log(PyModuleDef *module, PyObject *args) +cmath_log(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_complex x; @@ -657,10 +657,10 @@ PyDoc_STRVAR(cmath_phase__doc__, {"phase", (PyCFunction)cmath_phase, METH_O, cmath_phase__doc__}, static PyObject * -cmath_phase_impl(PyModuleDef *module, Py_complex z); +cmath_phase_impl(PyObject *module, Py_complex z); static PyObject * -cmath_phase(PyModuleDef *module, PyObject *arg) +cmath_phase(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -685,10 +685,10 @@ PyDoc_STRVAR(cmath_polar__doc__, {"polar", (PyCFunction)cmath_polar, METH_O, cmath_polar__doc__}, static PyObject * -cmath_polar_impl(PyModuleDef *module, Py_complex z); +cmath_polar_impl(PyObject *module, Py_complex z); static PyObject * -cmath_polar(PyModuleDef *module, PyObject *arg) +cmath_polar(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -711,10 +711,10 @@ PyDoc_STRVAR(cmath_rect__doc__, {"rect", (PyCFunction)cmath_rect, METH_VARARGS, cmath_rect__doc__}, static PyObject * -cmath_rect_impl(PyModuleDef *module, double r, double phi); +cmath_rect_impl(PyObject *module, double r, double phi); static PyObject * -cmath_rect(PyModuleDef *module, PyObject *args) +cmath_rect(PyObject *module, PyObject *args) { PyObject *return_value = NULL; double r; @@ -739,10 +739,10 @@ PyDoc_STRVAR(cmath_isfinite__doc__, {"isfinite", (PyCFunction)cmath_isfinite, METH_O, cmath_isfinite__doc__}, static PyObject * -cmath_isfinite_impl(PyModuleDef *module, Py_complex z); +cmath_isfinite_impl(PyObject *module, Py_complex z); static PyObject * -cmath_isfinite(PyModuleDef *module, PyObject *arg) +cmath_isfinite(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -765,10 +765,10 @@ PyDoc_STRVAR(cmath_isnan__doc__, {"isnan", (PyCFunction)cmath_isnan, METH_O, cmath_isnan__doc__}, static PyObject * -cmath_isnan_impl(PyModuleDef *module, Py_complex z); +cmath_isnan_impl(PyObject *module, Py_complex z); static PyObject * -cmath_isnan(PyModuleDef *module, PyObject *arg) +cmath_isnan(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -791,10 +791,10 @@ PyDoc_STRVAR(cmath_isinf__doc__, {"isinf", (PyCFunction)cmath_isinf, METH_O, cmath_isinf__doc__}, static PyObject * -cmath_isinf_impl(PyModuleDef *module, Py_complex z); +cmath_isinf_impl(PyObject *module, Py_complex z); static PyObject * -cmath_isinf(PyModuleDef *module, PyObject *arg) +cmath_isinf(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -832,11 +832,11 @@ PyDoc_STRVAR(cmath_isclose__doc__, {"isclose", (PyCFunction)cmath_isclose, METH_VARARGS|METH_KEYWORDS, cmath_isclose__doc__}, static int -cmath_isclose_impl(PyModuleDef *module, Py_complex a, Py_complex b, +cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b, double rel_tol, double abs_tol); static PyObject * -cmath_isclose(PyModuleDef *module, PyObject *args, PyObject *kwargs) +cmath_isclose(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"a", "b", "rel_tol", "abs_tol", NULL}; @@ -857,4 +857,4 @@ cmath_isclose(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=229e9c48c9d27362 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=732194029b7fb1e7 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/fcntlmodule.c.h b/Modules/clinic/fcntlmodule.c.h index d9a1517..67660eb 100644 --- a/Modules/clinic/fcntlmodule.c.h +++ b/Modules/clinic/fcntlmodule.c.h @@ -22,10 +22,10 @@ PyDoc_STRVAR(fcntl_fcntl__doc__, {"fcntl", (PyCFunction)fcntl_fcntl, METH_VARARGS, fcntl_fcntl__doc__}, static PyObject * -fcntl_fcntl_impl(PyModuleDef *module, int fd, int code, PyObject *arg); +fcntl_fcntl_impl(PyObject *module, int fd, int code, PyObject *arg); static PyObject * -fcntl_fcntl(PyModuleDef *module, PyObject *args) +fcntl_fcntl(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -78,11 +78,11 @@ PyDoc_STRVAR(fcntl_ioctl__doc__, {"ioctl", (PyCFunction)fcntl_ioctl, METH_VARARGS, fcntl_ioctl__doc__}, static PyObject * -fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, +fcntl_ioctl_impl(PyObject *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg); static PyObject * -fcntl_ioctl(PyModuleDef *module, PyObject *args) +fcntl_ioctl(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -112,10 +112,10 @@ PyDoc_STRVAR(fcntl_flock__doc__, {"flock", (PyCFunction)fcntl_flock, METH_VARARGS, fcntl_flock__doc__}, static PyObject * -fcntl_flock_impl(PyModuleDef *module, int fd, int code); +fcntl_flock_impl(PyObject *module, int fd, int code); static PyObject * -fcntl_flock(PyModuleDef *module, PyObject *args) +fcntl_flock(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -161,11 +161,11 @@ PyDoc_STRVAR(fcntl_lockf__doc__, {"lockf", (PyCFunction)fcntl_lockf, METH_VARARGS, fcntl_lockf__doc__}, static PyObject * -fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, +fcntl_lockf_impl(PyObject *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence); static PyObject * -fcntl_lockf(PyModuleDef *module, PyObject *args) +fcntl_lockf(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -182,4 +182,4 @@ fcntl_lockf(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=b7d6e8fc2ad09c48 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=97b1306b864c01c8 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/grpmodule.c.h b/Modules/clinic/grpmodule.c.h index eb5b59d..2c47a42 100644 --- a/Modules/clinic/grpmodule.c.h +++ b/Modules/clinic/grpmodule.c.h @@ -14,10 +14,10 @@ PyDoc_STRVAR(grp_getgrgid__doc__, {"getgrgid", (PyCFunction)grp_getgrgid, METH_VARARGS|METH_KEYWORDS, grp_getgrgid__doc__}, static PyObject * -grp_getgrgid_impl(PyModuleDef *module, PyObject *id); +grp_getgrgid_impl(PyObject *module, PyObject *id); static PyObject * -grp_getgrgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) +grp_getgrgid(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"id", NULL}; @@ -44,10 +44,10 @@ PyDoc_STRVAR(grp_getgrnam__doc__, {"getgrnam", (PyCFunction)grp_getgrnam, METH_VARARGS|METH_KEYWORDS, grp_getgrnam__doc__}, static PyObject * -grp_getgrnam_impl(PyModuleDef *module, PyObject *name); +grp_getgrnam_impl(PyObject *module, PyObject *name); static PyObject * -grp_getgrnam(PyModuleDef *module, PyObject *args, PyObject *kwargs) +grp_getgrnam(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"name", NULL}; @@ -75,11 +75,11 @@ PyDoc_STRVAR(grp_getgrall__doc__, {"getgrall", (PyCFunction)grp_getgrall, METH_NOARGS, grp_getgrall__doc__}, static PyObject * -grp_getgrall_impl(PyModuleDef *module); +grp_getgrall_impl(PyObject *module); static PyObject * -grp_getgrall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +grp_getgrall(PyObject *module, PyObject *Py_UNUSED(ignored)) { return grp_getgrall_impl(module); } -/*[clinic end generated code: output=5191c25600afb1bd input=a9049054013a1b77]*/ +/*[clinic end generated code: output=bee09feefc54a2cb input=a9049054013a1b77]*/ diff --git a/Modules/clinic/md5module.c.h b/Modules/clinic/md5module.c.h index f5a3117..0bd958a 100644 --- a/Modules/clinic/md5module.c.h +++ b/Modules/clinic/md5module.c.h @@ -75,10 +75,10 @@ PyDoc_STRVAR(_md5_md5__doc__, {"md5", (PyCFunction)_md5_md5, METH_VARARGS|METH_KEYWORDS, _md5_md5__doc__}, static PyObject * -_md5_md5_impl(PyModuleDef *module, PyObject *string); +_md5_md5_impl(PyObject *module, PyObject *string); static PyObject * -_md5_md5(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_md5_md5(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -92,4 +92,4 @@ _md5_md5(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=0f803ded701aca54 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=4cd3cc96e35563d2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 9ef702a..b3521d8 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -30,11 +30,10 @@ PyDoc_STRVAR(os_stat__doc__, {"stat", (PyCFunction)os_stat, METH_VARARGS|METH_KEYWORDS, os_stat__doc__}, static PyObject * -os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, - int follow_symlinks); +os_stat_impl(PyObject *module, path_t *path, int dir_fd, int follow_symlinks); static PyObject * -os_stat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_stat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", "follow_symlinks", NULL}; @@ -67,10 +66,10 @@ PyDoc_STRVAR(os_lstat__doc__, {"lstat", (PyCFunction)os_lstat, METH_VARARGS|METH_KEYWORDS, os_lstat__doc__}, static PyObject * -os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd); +os_lstat_impl(PyObject *module, path_t *path, int dir_fd); static PyObject * -os_lstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lstat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -97,7 +96,7 @@ PyDoc_STRVAR(os_access__doc__, "Use the real uid/gid to test for access to a path.\n" "\n" " path\n" -" Path to be tested; can be string, bytes, or open-file-descriptor int.\n" +" Path to be tested; can be string or bytes\n" " mode\n" " Operating-system mode bitfield. Can be F_OK to test existence,\n" " or the inclusive-OR of R_OK, W_OK, and X_OK.\n" @@ -125,15 +124,15 @@ PyDoc_STRVAR(os_access__doc__, {"access", (PyCFunction)os_access, METH_VARARGS|METH_KEYWORDS, os_access__doc__}, static int -os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_access_impl(PyObject *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks); static PyObject * -os_access(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_access(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL}; - path_t path = PATH_T_INITIALIZE("access", "path", 0, 1); + path_t path = PATH_T_INITIALIZE("access", "path", 0, 0); int mode; int dir_fd = DEFAULT_DIR_FD; int effective_ids = 0; @@ -170,10 +169,10 @@ PyDoc_STRVAR(os_ttyname__doc__, {"ttyname", (PyCFunction)os_ttyname, METH_O, os_ttyname__doc__}, static char * -os_ttyname_impl(PyModuleDef *module, int fd); +os_ttyname_impl(PyObject *module, int fd); static PyObject * -os_ttyname(PyModuleDef *module, PyObject *arg) +os_ttyname(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -204,10 +203,10 @@ PyDoc_STRVAR(os_ctermid__doc__, {"ctermid", (PyCFunction)os_ctermid, METH_NOARGS, os_ctermid__doc__}, static PyObject * -os_ctermid_impl(PyModuleDef *module); +os_ctermid_impl(PyObject *module); static PyObject * -os_ctermid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_ctermid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_ctermid_impl(module); } @@ -228,10 +227,10 @@ PyDoc_STRVAR(os_chdir__doc__, {"chdir", (PyCFunction)os_chdir, METH_VARARGS|METH_KEYWORDS, os_chdir__doc__}, static PyObject * -os_chdir_impl(PyModuleDef *module, path_t *path); +os_chdir_impl(PyObject *module, path_t *path); static PyObject * -os_chdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -264,10 +263,10 @@ PyDoc_STRVAR(os_fchdir__doc__, {"fchdir", (PyCFunction)os_fchdir, METH_VARARGS|METH_KEYWORDS, os_fchdir__doc__}, static PyObject * -os_fchdir_impl(PyModuleDef *module, int fd); +os_fchdir_impl(PyObject *module, int fd); static PyObject * -os_fchdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fchdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -314,11 +313,11 @@ PyDoc_STRVAR(os_chmod__doc__, {"chmod", (PyCFunction)os_chmod, METH_VARARGS|METH_KEYWORDS, os_chmod__doc__}, static PyObject * -os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd, int follow_symlinks); static PyObject * -os_chmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", "follow_symlinks", NULL}; @@ -353,10 +352,10 @@ PyDoc_STRVAR(os_fchmod__doc__, {"fchmod", (PyCFunction)os_fchmod, METH_VARARGS|METH_KEYWORDS, os_fchmod__doc__}, static PyObject * -os_fchmod_impl(PyModuleDef *module, int fd, int mode); +os_fchmod_impl(PyObject *module, int fd, int mode); static PyObject * -os_fchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fchmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", "mode", NULL}; @@ -389,10 +388,10 @@ PyDoc_STRVAR(os_lchmod__doc__, {"lchmod", (PyCFunction)os_lchmod, METH_VARARGS|METH_KEYWORDS, os_lchmod__doc__}, static PyObject * -os_lchmod_impl(PyModuleDef *module, path_t *path, int mode); +os_lchmod_impl(PyObject *module, path_t *path, int mode); static PyObject * -os_lchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lchmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", NULL}; @@ -431,11 +430,11 @@ PyDoc_STRVAR(os_chflags__doc__, {"chflags", (PyCFunction)os_chflags, METH_VARARGS|METH_KEYWORDS, os_chflags__doc__}, static PyObject * -os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, +os_chflags_impl(PyObject *module, path_t *path, unsigned long flags, int follow_symlinks); static PyObject * -os_chflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chflags(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "flags", "follow_symlinks", NULL}; @@ -472,10 +471,10 @@ PyDoc_STRVAR(os_lchflags__doc__, {"lchflags", (PyCFunction)os_lchflags, METH_VARARGS|METH_KEYWORDS, os_lchflags__doc__}, static PyObject * -os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags); +os_lchflags_impl(PyObject *module, path_t *path, unsigned long flags); static PyObject * -os_lchflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lchflags(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "flags", NULL}; @@ -508,10 +507,10 @@ PyDoc_STRVAR(os_chroot__doc__, {"chroot", (PyCFunction)os_chroot, METH_VARARGS|METH_KEYWORDS, os_chroot__doc__}, static PyObject * -os_chroot_impl(PyModuleDef *module, path_t *path); +os_chroot_impl(PyObject *module, path_t *path); static PyObject * -os_chroot(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chroot(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -543,10 +542,10 @@ PyDoc_STRVAR(os_fsync__doc__, {"fsync", (PyCFunction)os_fsync, METH_VARARGS|METH_KEYWORDS, os_fsync__doc__}, static PyObject * -os_fsync_impl(PyModuleDef *module, int fd); +os_fsync_impl(PyObject *module, int fd); static PyObject * -os_fsync(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fsync(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -575,10 +574,10 @@ PyDoc_STRVAR(os_sync__doc__, {"sync", (PyCFunction)os_sync, METH_NOARGS, os_sync__doc__}, static PyObject * -os_sync_impl(PyModuleDef *module); +os_sync_impl(PyObject *module); static PyObject * -os_sync(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_sync(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_sync_impl(module); } @@ -597,10 +596,10 @@ PyDoc_STRVAR(os_fdatasync__doc__, {"fdatasync", (PyCFunction)os_fdatasync, METH_VARARGS|METH_KEYWORDS, os_fdatasync__doc__}, static PyObject * -os_fdatasync_impl(PyModuleDef *module, int fd); +os_fdatasync_impl(PyObject *module, int fd); static PyObject * -os_fdatasync(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fdatasync(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -653,11 +652,11 @@ PyDoc_STRVAR(os_chown__doc__, {"chown", (PyCFunction)os_chown, METH_VARARGS|METH_KEYWORDS, os_chown__doc__}, static PyObject * -os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, +os_chown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks); static PyObject * -os_chown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "uid", "gid", "dir_fd", "follow_symlinks", NULL}; @@ -695,10 +694,10 @@ PyDoc_STRVAR(os_fchown__doc__, {"fchown", (PyCFunction)os_fchown, METH_VARARGS|METH_KEYWORDS, os_fchown__doc__}, static PyObject * -os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid); +os_fchown_impl(PyObject *module, int fd, uid_t uid, gid_t gid); static PyObject * -os_fchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fchown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", "uid", "gid", NULL}; @@ -732,10 +731,10 @@ PyDoc_STRVAR(os_lchown__doc__, {"lchown", (PyCFunction)os_lchown, METH_VARARGS|METH_KEYWORDS, os_lchown__doc__}, static PyObject * -os_lchown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid); +os_lchown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid); static PyObject * -os_lchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lchown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "uid", "gid", NULL}; @@ -767,10 +766,10 @@ PyDoc_STRVAR(os_getcwd__doc__, {"getcwd", (PyCFunction)os_getcwd, METH_NOARGS, os_getcwd__doc__}, static PyObject * -os_getcwd_impl(PyModuleDef *module); +os_getcwd_impl(PyObject *module); static PyObject * -os_getcwd(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getcwd(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getcwd_impl(module); } @@ -785,10 +784,10 @@ PyDoc_STRVAR(os_getcwdb__doc__, {"getcwdb", (PyCFunction)os_getcwdb, METH_NOARGS, os_getcwdb__doc__}, static PyObject * -os_getcwdb_impl(PyModuleDef *module); +os_getcwdb_impl(PyObject *module); static PyObject * -os_getcwdb(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getcwdb(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getcwdb_impl(module); } @@ -816,11 +815,11 @@ PyDoc_STRVAR(os_link__doc__, {"link", (PyCFunction)os_link, METH_VARARGS|METH_KEYWORDS, os_link__doc__}, static PyObject * -os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks); static PyObject * -os_link(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_link(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", "follow_symlinks", NULL}; @@ -867,10 +866,10 @@ PyDoc_STRVAR(os_listdir__doc__, {"listdir", (PyCFunction)os_listdir, METH_VARARGS|METH_KEYWORDS, os_listdir__doc__}, static PyObject * -os_listdir_impl(PyModuleDef *module, path_t *path); +os_listdir_impl(PyObject *module, path_t *path); static PyObject * -os_listdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_listdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -899,10 +898,10 @@ PyDoc_STRVAR(os__getfullpathname__doc__, {"_getfullpathname", (PyCFunction)os__getfullpathname, METH_O, os__getfullpathname__doc__}, static PyObject * -os__getfullpathname_impl(PyModuleDef *module, path_t *path); +os__getfullpathname_impl(PyObject *module, path_t *path); static PyObject * -os__getfullpathname(PyModuleDef *module, PyObject *arg) +os__getfullpathname(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; path_t path = PATH_T_INITIALIZE("_getfullpathname", "path", 0, 0); @@ -932,10 +931,10 @@ PyDoc_STRVAR(os__getfinalpathname__doc__, {"_getfinalpathname", (PyCFunction)os__getfinalpathname, METH_O, os__getfinalpathname__doc__}, static PyObject * -os__getfinalpathname_impl(PyModuleDef *module, PyObject *path); +os__getfinalpathname_impl(PyObject *module, PyObject *path); static PyObject * -os__getfinalpathname(PyModuleDef *module, PyObject *arg) +os__getfinalpathname(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *path; @@ -955,16 +954,17 @@ exit: PyDoc_STRVAR(os__isdir__doc__, "_isdir($module, path, /)\n" "--\n" -"\n"); +"\n" +"Return true if the pathname refers to an existing directory."); #define OS__ISDIR_METHODDEF \ {"_isdir", (PyCFunction)os__isdir, METH_O, os__isdir__doc__}, static PyObject * -os__isdir_impl(PyModuleDef *module, path_t *path); +os__isdir_impl(PyObject *module, path_t *path); static PyObject * -os__isdir(PyModuleDef *module, PyObject *arg) +os__isdir(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; path_t path = PATH_T_INITIALIZE("_isdir", "path", 0, 0); @@ -994,10 +994,10 @@ PyDoc_STRVAR(os__getvolumepathname__doc__, {"_getvolumepathname", (PyCFunction)os__getvolumepathname, METH_VARARGS|METH_KEYWORDS, os__getvolumepathname__doc__}, static PyObject * -os__getvolumepathname_impl(PyModuleDef *module, PyObject *path); +os__getvolumepathname_impl(PyObject *module, PyObject *path); static PyObject * -os__getvolumepathname(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os__getvolumepathname(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -1031,10 +1031,10 @@ PyDoc_STRVAR(os_mkdir__doc__, {"mkdir", (PyCFunction)os_mkdir, METH_VARARGS|METH_KEYWORDS, os_mkdir__doc__}, static PyObject * -os_mkdir_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); +os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd); static PyObject * -os_mkdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_mkdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; @@ -1066,10 +1066,10 @@ PyDoc_STRVAR(os_nice__doc__, {"nice", (PyCFunction)os_nice, METH_O, os_nice__doc__}, static PyObject * -os_nice_impl(PyModuleDef *module, int increment); +os_nice_impl(PyObject *module, int increment); static PyObject * -os_nice(PyModuleDef *module, PyObject *arg) +os_nice(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int increment; @@ -1096,10 +1096,10 @@ PyDoc_STRVAR(os_getpriority__doc__, {"getpriority", (PyCFunction)os_getpriority, METH_VARARGS|METH_KEYWORDS, os_getpriority__doc__}, static PyObject * -os_getpriority_impl(PyModuleDef *module, int which, int who); +os_getpriority_impl(PyObject *module, int which, int who); static PyObject * -os_getpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_getpriority(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"which", "who", NULL}; @@ -1129,10 +1129,10 @@ PyDoc_STRVAR(os_setpriority__doc__, {"setpriority", (PyCFunction)os_setpriority, METH_VARARGS|METH_KEYWORDS, os_setpriority__doc__}, static PyObject * -os_setpriority_impl(PyModuleDef *module, int which, int who, int priority); +os_setpriority_impl(PyObject *module, int which, int who, int priority); static PyObject * -os_setpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_setpriority(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"which", "who", "priority", NULL}; @@ -1167,11 +1167,11 @@ PyDoc_STRVAR(os_rename__doc__, {"rename", (PyCFunction)os_rename, METH_VARARGS|METH_KEYWORDS, os_rename__doc__}, static PyObject * -os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_rename_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); static PyObject * -os_rename(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_rename(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; @@ -1210,11 +1210,11 @@ PyDoc_STRVAR(os_replace__doc__, {"replace", (PyCFunction)os_replace, METH_VARARGS|METH_KEYWORDS, os_replace__doc__}, static PyObject * -os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, - int src_dir_fd, int dst_dir_fd); +os_replace_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, + int dst_dir_fd); static PyObject * -os_replace(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_replace(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; @@ -1252,10 +1252,10 @@ PyDoc_STRVAR(os_rmdir__doc__, {"rmdir", (PyCFunction)os_rmdir, METH_VARARGS|METH_KEYWORDS, os_rmdir__doc__}, static PyObject * -os_rmdir_impl(PyModuleDef *module, path_t *path, int dir_fd); +os_rmdir_impl(PyObject *module, path_t *path, int dir_fd); static PyObject * -os_rmdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_rmdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -1286,10 +1286,10 @@ PyDoc_STRVAR(os_system__doc__, {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, static long -os_system_impl(PyModuleDef *module, Py_UNICODE *command); +os_system_impl(PyObject *module, Py_UNICODE *command); static PyObject * -os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_system(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"command", NULL}; @@ -1322,10 +1322,10 @@ PyDoc_STRVAR(os_system__doc__, {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, static long -os_system_impl(PyModuleDef *module, PyObject *command); +os_system_impl(PyObject *module, PyObject *command); static PyObject * -os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_system(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"command", NULL}; @@ -1359,10 +1359,10 @@ PyDoc_STRVAR(os_umask__doc__, {"umask", (PyCFunction)os_umask, METH_O, os_umask__doc__}, static PyObject * -os_umask_impl(PyModuleDef *module, int mask); +os_umask_impl(PyObject *module, int mask); static PyObject * -os_umask(PyModuleDef *module, PyObject *arg) +os_umask(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int mask; @@ -1390,10 +1390,10 @@ PyDoc_STRVAR(os_unlink__doc__, {"unlink", (PyCFunction)os_unlink, METH_VARARGS|METH_KEYWORDS, os_unlink__doc__}, static PyObject * -os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd); +os_unlink_impl(PyObject *module, path_t *path, int dir_fd); static PyObject * -os_unlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_unlink(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -1427,10 +1427,10 @@ PyDoc_STRVAR(os_remove__doc__, {"remove", (PyCFunction)os_remove, METH_VARARGS|METH_KEYWORDS, os_remove__doc__}, static PyObject * -os_remove_impl(PyModuleDef *module, path_t *path, int dir_fd); +os_remove_impl(PyObject *module, path_t *path, int dir_fd); static PyObject * -os_remove(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_remove(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -1464,10 +1464,10 @@ PyDoc_STRVAR(os_uname__doc__, {"uname", (PyCFunction)os_uname, METH_NOARGS, os_uname__doc__}, static PyObject * -os_uname_impl(PyModuleDef *module); +os_uname_impl(PyObject *module); static PyObject * -os_uname(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_uname(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_uname_impl(module); } @@ -1507,11 +1507,11 @@ PyDoc_STRVAR(os_utime__doc__, {"utime", (PyCFunction)os_utime, METH_VARARGS|METH_KEYWORDS, os_utime__doc__}, static PyObject * -os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, - PyObject *ns, int dir_fd, int follow_symlinks); +os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, + int dir_fd, int follow_symlinks); static PyObject * -os_utime(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_utime(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "times", "ns", "dir_fd", "follow_symlinks", NULL}; @@ -1543,10 +1543,10 @@ PyDoc_STRVAR(os__exit__doc__, {"_exit", (PyCFunction)os__exit, METH_VARARGS|METH_KEYWORDS, os__exit__doc__}, static PyObject * -os__exit_impl(PyModuleDef *module, int status); +os__exit_impl(PyObject *module, int status); static PyObject * -os__exit(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os__exit(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -1578,10 +1578,10 @@ PyDoc_STRVAR(os_execv__doc__, {"execv", (PyCFunction)os_execv, METH_VARARGS, os_execv__doc__}, static PyObject * -os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv); +os_execv_impl(PyObject *module, PyObject *path, PyObject *argv); static PyObject * -os_execv(PyModuleDef *module, PyObject *args) +os_execv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *path = NULL; @@ -1620,11 +1620,10 @@ PyDoc_STRVAR(os_execve__doc__, {"execve", (PyCFunction)os_execve, METH_VARARGS|METH_KEYWORDS, os_execve__doc__}, static PyObject * -os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, - PyObject *env); +os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env); static PyObject * -os_execve(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_execve(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "argv", "env", NULL}; @@ -1665,10 +1664,10 @@ PyDoc_STRVAR(os_spawnv__doc__, {"spawnv", (PyCFunction)os_spawnv, METH_VARARGS, os_spawnv__doc__}, static PyObject * -os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv); +os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv); static PyObject * -os_spawnv(PyModuleDef *module, PyObject *args) +os_spawnv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int mode; @@ -1710,11 +1709,11 @@ PyDoc_STRVAR(os_spawnve__doc__, {"spawnve", (PyCFunction)os_spawnve, METH_VARARGS, os_spawnve__doc__}, static PyObject * -os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, - PyObject *argv, PyObject *env); +os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, + PyObject *env); static PyObject * -os_spawnve(PyModuleDef *module, PyObject *args) +os_spawnve(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int mode; @@ -1750,10 +1749,10 @@ PyDoc_STRVAR(os_fork1__doc__, {"fork1", (PyCFunction)os_fork1, METH_NOARGS, os_fork1__doc__}, static PyObject * -os_fork1_impl(PyModuleDef *module); +os_fork1_impl(PyObject *module); static PyObject * -os_fork1(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_fork1(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_fork1_impl(module); } @@ -1774,10 +1773,10 @@ PyDoc_STRVAR(os_fork__doc__, {"fork", (PyCFunction)os_fork, METH_NOARGS, os_fork__doc__}, static PyObject * -os_fork_impl(PyModuleDef *module); +os_fork_impl(PyObject *module); static PyObject * -os_fork(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_fork(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_fork_impl(module); } @@ -1796,10 +1795,10 @@ PyDoc_STRVAR(os_sched_get_priority_max__doc__, {"sched_get_priority_max", (PyCFunction)os_sched_get_priority_max, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_max__doc__}, static PyObject * -os_sched_get_priority_max_impl(PyModuleDef *module, int policy); +os_sched_get_priority_max_impl(PyObject *module, int policy); static PyObject * -os_sched_get_priority_max(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_sched_get_priority_max(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"policy", NULL}; @@ -1828,10 +1827,10 @@ PyDoc_STRVAR(os_sched_get_priority_min__doc__, {"sched_get_priority_min", (PyCFunction)os_sched_get_priority_min, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_min__doc__}, static PyObject * -os_sched_get_priority_min_impl(PyModuleDef *module, int policy); +os_sched_get_priority_min_impl(PyObject *module, int policy); static PyObject * -os_sched_get_priority_min(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_sched_get_priority_min(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"policy", NULL}; @@ -1862,10 +1861,10 @@ PyDoc_STRVAR(os_sched_getscheduler__doc__, {"sched_getscheduler", (PyCFunction)os_sched_getscheduler, METH_O, os_sched_getscheduler__doc__}, static PyObject * -os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid); +os_sched_getscheduler_impl(PyObject *module, pid_t pid); static PyObject * -os_sched_getscheduler(PyModuleDef *module, PyObject *arg) +os_sched_getscheduler(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -1927,11 +1926,11 @@ PyDoc_STRVAR(os_sched_setscheduler__doc__, {"sched_setscheduler", (PyCFunction)os_sched_setscheduler, METH_VARARGS, os_sched_setscheduler__doc__}, static PyObject * -os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, +os_sched_setscheduler_impl(PyObject *module, pid_t pid, int policy, struct sched_param *param); static PyObject * -os_sched_setscheduler(PyModuleDef *module, PyObject *args) +os_sched_setscheduler(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -1964,10 +1963,10 @@ PyDoc_STRVAR(os_sched_getparam__doc__, {"sched_getparam", (PyCFunction)os_sched_getparam, METH_O, os_sched_getparam__doc__}, static PyObject * -os_sched_getparam_impl(PyModuleDef *module, pid_t pid); +os_sched_getparam_impl(PyObject *module, pid_t pid); static PyObject * -os_sched_getparam(PyModuleDef *module, PyObject *arg) +os_sched_getparam(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -1997,11 +1996,11 @@ PyDoc_STRVAR(os_sched_setparam__doc__, {"sched_setparam", (PyCFunction)os_sched_setparam, METH_VARARGS, os_sched_setparam__doc__}, static PyObject * -os_sched_setparam_impl(PyModuleDef *module, pid_t pid, +os_sched_setparam_impl(PyObject *module, pid_t pid, struct sched_param *param); static PyObject * -os_sched_setparam(PyModuleDef *module, PyObject *args) +os_sched_setparam(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2032,10 +2031,10 @@ PyDoc_STRVAR(os_sched_rr_get_interval__doc__, {"sched_rr_get_interval", (PyCFunction)os_sched_rr_get_interval, METH_O, os_sched_rr_get_interval__doc__}, static double -os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid); +os_sched_rr_get_interval_impl(PyObject *module, pid_t pid); static PyObject * -os_sched_rr_get_interval(PyModuleDef *module, PyObject *arg) +os_sched_rr_get_interval(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -2066,10 +2065,10 @@ PyDoc_STRVAR(os_sched_yield__doc__, {"sched_yield", (PyCFunction)os_sched_yield, METH_NOARGS, os_sched_yield__doc__}, static PyObject * -os_sched_yield_impl(PyModuleDef *module); +os_sched_yield_impl(PyObject *module); static PyObject * -os_sched_yield(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_sched_yield(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_sched_yield_impl(module); } @@ -2090,10 +2089,10 @@ PyDoc_STRVAR(os_sched_setaffinity__doc__, {"sched_setaffinity", (PyCFunction)os_sched_setaffinity, METH_VARARGS, os_sched_setaffinity__doc__}, static PyObject * -os_sched_setaffinity_impl(PyModuleDef *module, pid_t pid, PyObject *mask); +os_sched_setaffinity_impl(PyObject *module, pid_t pid, PyObject *mask); static PyObject * -os_sched_setaffinity(PyModuleDef *module, PyObject *args) +os_sched_setaffinity(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2124,10 +2123,10 @@ PyDoc_STRVAR(os_sched_getaffinity__doc__, {"sched_getaffinity", (PyCFunction)os_sched_getaffinity, METH_O, os_sched_getaffinity__doc__}, static PyObject * -os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid); +os_sched_getaffinity_impl(PyObject *module, pid_t pid); static PyObject * -os_sched_getaffinity(PyModuleDef *module, PyObject *arg) +os_sched_getaffinity(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -2157,10 +2156,10 @@ PyDoc_STRVAR(os_openpty__doc__, {"openpty", (PyCFunction)os_openpty, METH_NOARGS, os_openpty__doc__}, static PyObject * -os_openpty_impl(PyModuleDef *module); +os_openpty_impl(PyObject *module); static PyObject * -os_openpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_openpty(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_openpty_impl(module); } @@ -2184,10 +2183,10 @@ PyDoc_STRVAR(os_forkpty__doc__, {"forkpty", (PyCFunction)os_forkpty, METH_NOARGS, os_forkpty__doc__}, static PyObject * -os_forkpty_impl(PyModuleDef *module); +os_forkpty_impl(PyObject *module); static PyObject * -os_forkpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_forkpty(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_forkpty_impl(module); } @@ -2206,10 +2205,10 @@ PyDoc_STRVAR(os_getegid__doc__, {"getegid", (PyCFunction)os_getegid, METH_NOARGS, os_getegid__doc__}, static PyObject * -os_getegid_impl(PyModuleDef *module); +os_getegid_impl(PyObject *module); static PyObject * -os_getegid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getegid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getegid_impl(module); } @@ -2228,10 +2227,10 @@ PyDoc_STRVAR(os_geteuid__doc__, {"geteuid", (PyCFunction)os_geteuid, METH_NOARGS, os_geteuid__doc__}, static PyObject * -os_geteuid_impl(PyModuleDef *module); +os_geteuid_impl(PyObject *module); static PyObject * -os_geteuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_geteuid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_geteuid_impl(module); } @@ -2250,10 +2249,10 @@ PyDoc_STRVAR(os_getgid__doc__, {"getgid", (PyCFunction)os_getgid, METH_NOARGS, os_getgid__doc__}, static PyObject * -os_getgid_impl(PyModuleDef *module); +os_getgid_impl(PyObject *module); static PyObject * -os_getgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getgid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getgid_impl(module); } @@ -2270,10 +2269,10 @@ PyDoc_STRVAR(os_getpid__doc__, {"getpid", (PyCFunction)os_getpid, METH_NOARGS, os_getpid__doc__}, static PyObject * -os_getpid_impl(PyModuleDef *module); +os_getpid_impl(PyObject *module); static PyObject * -os_getpid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getpid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getpid_impl(module); } @@ -2290,10 +2289,10 @@ PyDoc_STRVAR(os_getgroups__doc__, {"getgroups", (PyCFunction)os_getgroups, METH_NOARGS, os_getgroups__doc__}, static PyObject * -os_getgroups_impl(PyModuleDef *module); +os_getgroups_impl(PyObject *module); static PyObject * -os_getgroups(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getgroups(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getgroups_impl(module); } @@ -2312,10 +2311,10 @@ PyDoc_STRVAR(os_getpgid__doc__, {"getpgid", (PyCFunction)os_getpgid, METH_VARARGS|METH_KEYWORDS, os_getpgid__doc__}, static PyObject * -os_getpgid_impl(PyModuleDef *module, pid_t pid); +os_getpgid_impl(PyObject *module, pid_t pid); static PyObject * -os_getpgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_getpgid(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"pid", NULL}; @@ -2344,10 +2343,10 @@ PyDoc_STRVAR(os_getpgrp__doc__, {"getpgrp", (PyCFunction)os_getpgrp, METH_NOARGS, os_getpgrp__doc__}, static PyObject * -os_getpgrp_impl(PyModuleDef *module); +os_getpgrp_impl(PyObject *module); static PyObject * -os_getpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getpgrp(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getpgrp_impl(module); } @@ -2366,10 +2365,10 @@ PyDoc_STRVAR(os_setpgrp__doc__, {"setpgrp", (PyCFunction)os_setpgrp, METH_NOARGS, os_setpgrp__doc__}, static PyObject * -os_setpgrp_impl(PyModuleDef *module); +os_setpgrp_impl(PyObject *module); static PyObject * -os_setpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_setpgrp(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_setpgrp_impl(module); } @@ -2391,10 +2390,10 @@ PyDoc_STRVAR(os_getppid__doc__, {"getppid", (PyCFunction)os_getppid, METH_NOARGS, os_getppid__doc__}, static PyObject * -os_getppid_impl(PyModuleDef *module); +os_getppid_impl(PyObject *module); static PyObject * -os_getppid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getppid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getppid_impl(module); } @@ -2413,10 +2412,10 @@ PyDoc_STRVAR(os_getlogin__doc__, {"getlogin", (PyCFunction)os_getlogin, METH_NOARGS, os_getlogin__doc__}, static PyObject * -os_getlogin_impl(PyModuleDef *module); +os_getlogin_impl(PyObject *module); static PyObject * -os_getlogin(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getlogin(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getlogin_impl(module); } @@ -2435,10 +2434,10 @@ PyDoc_STRVAR(os_getuid__doc__, {"getuid", (PyCFunction)os_getuid, METH_NOARGS, os_getuid__doc__}, static PyObject * -os_getuid_impl(PyModuleDef *module); +os_getuid_impl(PyObject *module); static PyObject * -os_getuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getuid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getuid_impl(module); } @@ -2457,10 +2456,10 @@ PyDoc_STRVAR(os_kill__doc__, {"kill", (PyCFunction)os_kill, METH_VARARGS, os_kill__doc__}, static PyObject * -os_kill_impl(PyModuleDef *module, pid_t pid, Py_ssize_t signal); +os_kill_impl(PyObject *module, pid_t pid, Py_ssize_t signal); static PyObject * -os_kill(PyModuleDef *module, PyObject *args) +os_kill(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2489,10 +2488,10 @@ PyDoc_STRVAR(os_killpg__doc__, {"killpg", (PyCFunction)os_killpg, METH_VARARGS, os_killpg__doc__}, static PyObject * -os_killpg_impl(PyModuleDef *module, pid_t pgid, int signal); +os_killpg_impl(PyObject *module, pid_t pgid, int signal); static PyObject * -os_killpg(PyModuleDef *module, PyObject *args) +os_killpg(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pgid; @@ -2521,10 +2520,10 @@ PyDoc_STRVAR(os_plock__doc__, {"plock", (PyCFunction)os_plock, METH_O, os_plock__doc__}, static PyObject * -os_plock_impl(PyModuleDef *module, int op); +os_plock_impl(PyObject *module, int op); static PyObject * -os_plock(PyModuleDef *module, PyObject *arg) +os_plock(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int op; @@ -2551,10 +2550,10 @@ PyDoc_STRVAR(os_setuid__doc__, {"setuid", (PyCFunction)os_setuid, METH_O, os_setuid__doc__}, static PyObject * -os_setuid_impl(PyModuleDef *module, uid_t uid); +os_setuid_impl(PyObject *module, uid_t uid); static PyObject * -os_setuid(PyModuleDef *module, PyObject *arg) +os_setuid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; uid_t uid; @@ -2581,10 +2580,10 @@ PyDoc_STRVAR(os_seteuid__doc__, {"seteuid", (PyCFunction)os_seteuid, METH_O, os_seteuid__doc__}, static PyObject * -os_seteuid_impl(PyModuleDef *module, uid_t euid); +os_seteuid_impl(PyObject *module, uid_t euid); static PyObject * -os_seteuid(PyModuleDef *module, PyObject *arg) +os_seteuid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; uid_t euid; @@ -2611,10 +2610,10 @@ PyDoc_STRVAR(os_setegid__doc__, {"setegid", (PyCFunction)os_setegid, METH_O, os_setegid__doc__}, static PyObject * -os_setegid_impl(PyModuleDef *module, gid_t egid); +os_setegid_impl(PyObject *module, gid_t egid); static PyObject * -os_setegid(PyModuleDef *module, PyObject *arg) +os_setegid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; gid_t egid; @@ -2641,10 +2640,10 @@ PyDoc_STRVAR(os_setreuid__doc__, {"setreuid", (PyCFunction)os_setreuid, METH_VARARGS, os_setreuid__doc__}, static PyObject * -os_setreuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid); +os_setreuid_impl(PyObject *module, uid_t ruid, uid_t euid); static PyObject * -os_setreuid(PyModuleDef *module, PyObject *args) +os_setreuid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; uid_t ruid; @@ -2673,10 +2672,10 @@ PyDoc_STRVAR(os_setregid__doc__, {"setregid", (PyCFunction)os_setregid, METH_VARARGS, os_setregid__doc__}, static PyObject * -os_setregid_impl(PyModuleDef *module, gid_t rgid, gid_t egid); +os_setregid_impl(PyObject *module, gid_t rgid, gid_t egid); static PyObject * -os_setregid(PyModuleDef *module, PyObject *args) +os_setregid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; gid_t rgid; @@ -2705,10 +2704,10 @@ PyDoc_STRVAR(os_setgid__doc__, {"setgid", (PyCFunction)os_setgid, METH_O, os_setgid__doc__}, static PyObject * -os_setgid_impl(PyModuleDef *module, gid_t gid); +os_setgid_impl(PyObject *module, gid_t gid); static PyObject * -os_setgid(PyModuleDef *module, PyObject *arg) +os_setgid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; gid_t gid; @@ -2751,10 +2750,10 @@ PyDoc_STRVAR(os_wait3__doc__, {"wait3", (PyCFunction)os_wait3, METH_VARARGS|METH_KEYWORDS, os_wait3__doc__}, static PyObject * -os_wait3_impl(PyModuleDef *module, int options); +os_wait3_impl(PyObject *module, int options); static PyObject * -os_wait3(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_wait3(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"options", NULL}; @@ -2786,10 +2785,10 @@ PyDoc_STRVAR(os_wait4__doc__, {"wait4", (PyCFunction)os_wait4, METH_VARARGS|METH_KEYWORDS, os_wait4__doc__}, static PyObject * -os_wait4_impl(PyModuleDef *module, pid_t pid, int options); +os_wait4_impl(PyObject *module, pid_t pid, int options); static PyObject * -os_wait4(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_wait4(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"pid", "options", NULL}; @@ -2830,10 +2829,10 @@ PyDoc_STRVAR(os_waitid__doc__, {"waitid", (PyCFunction)os_waitid, METH_VARARGS, os_waitid__doc__}, static PyObject * -os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options); +os_waitid_impl(PyObject *module, idtype_t idtype, id_t id, int options); static PyObject * -os_waitid(PyModuleDef *module, PyObject *args) +os_waitid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; idtype_t idtype; @@ -2868,10 +2867,10 @@ PyDoc_STRVAR(os_waitpid__doc__, {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, static PyObject * -os_waitpid_impl(PyModuleDef *module, pid_t pid, int options); +os_waitpid_impl(PyObject *module, pid_t pid, int options); static PyObject * -os_waitpid(PyModuleDef *module, PyObject *args) +os_waitpid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2905,10 +2904,10 @@ PyDoc_STRVAR(os_waitpid__doc__, {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, static PyObject * -os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options); +os_waitpid_impl(PyObject *module, Py_intptr_t pid, int options); static PyObject * -os_waitpid(PyModuleDef *module, PyObject *args) +os_waitpid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_intptr_t pid; @@ -2940,10 +2939,10 @@ PyDoc_STRVAR(os_wait__doc__, {"wait", (PyCFunction)os_wait, METH_NOARGS, os_wait__doc__}, static PyObject * -os_wait_impl(PyModuleDef *module); +os_wait_impl(PyObject *module); static PyObject * -os_wait(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_wait(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_wait_impl(module); } @@ -2972,11 +2971,11 @@ PyDoc_STRVAR(os_symlink__doc__, {"symlink", (PyCFunction)os_symlink, METH_VARARGS|METH_KEYWORDS, os_symlink__doc__}, static PyObject * -os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, +os_symlink_impl(PyObject *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd); static PyObject * -os_symlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_symlink(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "target_is_directory", "dir_fd", NULL}; @@ -3017,10 +3016,10 @@ PyDoc_STRVAR(os_times__doc__, {"times", (PyCFunction)os_times, METH_NOARGS, os_times__doc__}, static PyObject * -os_times_impl(PyModuleDef *module); +os_times_impl(PyObject *module); static PyObject * -os_times(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_times(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_times_impl(module); } @@ -3039,10 +3038,10 @@ PyDoc_STRVAR(os_getsid__doc__, {"getsid", (PyCFunction)os_getsid, METH_O, os_getsid__doc__}, static PyObject * -os_getsid_impl(PyModuleDef *module, pid_t pid); +os_getsid_impl(PyObject *module, pid_t pid); static PyObject * -os_getsid(PyModuleDef *module, PyObject *arg) +os_getsid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -3069,10 +3068,10 @@ PyDoc_STRVAR(os_setsid__doc__, {"setsid", (PyCFunction)os_setsid, METH_NOARGS, os_setsid__doc__}, static PyObject * -os_setsid_impl(PyModuleDef *module); +os_setsid_impl(PyObject *module); static PyObject * -os_setsid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_setsid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_setsid_impl(module); } @@ -3091,10 +3090,10 @@ PyDoc_STRVAR(os_setpgid__doc__, {"setpgid", (PyCFunction)os_setpgid, METH_VARARGS, os_setpgid__doc__}, static PyObject * -os_setpgid_impl(PyModuleDef *module, pid_t pid, pid_t pgrp); +os_setpgid_impl(PyObject *module, pid_t pid, pid_t pgrp); static PyObject * -os_setpgid(PyModuleDef *module, PyObject *args) +os_setpgid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -3123,10 +3122,10 @@ PyDoc_STRVAR(os_tcgetpgrp__doc__, {"tcgetpgrp", (PyCFunction)os_tcgetpgrp, METH_O, os_tcgetpgrp__doc__}, static PyObject * -os_tcgetpgrp_impl(PyModuleDef *module, int fd); +os_tcgetpgrp_impl(PyObject *module, int fd); static PyObject * -os_tcgetpgrp(PyModuleDef *module, PyObject *arg) +os_tcgetpgrp(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -3153,10 +3152,10 @@ PyDoc_STRVAR(os_tcsetpgrp__doc__, {"tcsetpgrp", (PyCFunction)os_tcsetpgrp, METH_VARARGS, os_tcsetpgrp__doc__}, static PyObject * -os_tcsetpgrp_impl(PyModuleDef *module, int fd, pid_t pgid); +os_tcsetpgrp_impl(PyObject *module, int fd, pid_t pgid); static PyObject * -os_tcsetpgrp(PyModuleDef *module, PyObject *args) +os_tcsetpgrp(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3188,11 +3187,10 @@ PyDoc_STRVAR(os_open__doc__, {"open", (PyCFunction)os_open, METH_VARARGS|METH_KEYWORDS, os_open__doc__}, static int -os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, - int dir_fd); +os_open_impl(PyObject *module, path_t *path, int flags, int mode, int dir_fd); static PyObject * -os_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_open(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "flags", "mode", "dir_fd", NULL}; @@ -3227,10 +3225,10 @@ PyDoc_STRVAR(os_close__doc__, {"close", (PyCFunction)os_close, METH_VARARGS|METH_KEYWORDS, os_close__doc__}, static PyObject * -os_close_impl(PyModuleDef *module, int fd); +os_close_impl(PyObject *module, int fd); static PyObject * -os_close(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_close(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -3255,10 +3253,10 @@ PyDoc_STRVAR(os_closerange__doc__, {"closerange", (PyCFunction)os_closerange, METH_VARARGS, os_closerange__doc__}, static PyObject * -os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high); +os_closerange_impl(PyObject *module, int fd_low, int fd_high); static PyObject * -os_closerange(PyModuleDef *module, PyObject *args) +os_closerange(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd_low; @@ -3283,10 +3281,10 @@ PyDoc_STRVAR(os_dup__doc__, {"dup", (PyCFunction)os_dup, METH_O, os_dup__doc__}, static int -os_dup_impl(PyModuleDef *module, int fd); +os_dup_impl(PyObject *module, int fd); static PyObject * -os_dup(PyModuleDef *module, PyObject *arg) +os_dup(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -3313,10 +3311,10 @@ PyDoc_STRVAR(os_dup2__doc__, {"dup2", (PyCFunction)os_dup2, METH_VARARGS|METH_KEYWORDS, os_dup2__doc__}, static PyObject * -os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable); +os_dup2_impl(PyObject *module, int fd, int fd2, int inheritable); static PyObject * -os_dup2(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_dup2(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", "fd2", "inheritable", NULL}; @@ -3352,10 +3350,10 @@ PyDoc_STRVAR(os_lockf__doc__, {"lockf", (PyCFunction)os_lockf, METH_VARARGS, os_lockf__doc__}, static PyObject * -os_lockf_impl(PyModuleDef *module, int fd, int command, Py_off_t length); +os_lockf_impl(PyObject *module, int fd, int command, Py_off_t length); static PyObject * -os_lockf(PyModuleDef *module, PyObject *args) +os_lockf(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3386,10 +3384,10 @@ PyDoc_STRVAR(os_lseek__doc__, {"lseek", (PyCFunction)os_lseek, METH_VARARGS, os_lseek__doc__}, static Py_off_t -os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how); +os_lseek_impl(PyObject *module, int fd, Py_off_t position, int how); static PyObject * -os_lseek(PyModuleDef *module, PyObject *args) +os_lseek(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3419,10 +3417,10 @@ PyDoc_STRVAR(os_read__doc__, {"read", (PyCFunction)os_read, METH_VARARGS, os_read__doc__}, static PyObject * -os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length); +os_read_impl(PyObject *module, int fd, Py_ssize_t length); static PyObject * -os_read(PyModuleDef *module, PyObject *args) +os_read(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3457,10 +3455,10 @@ PyDoc_STRVAR(os_readv__doc__, {"readv", (PyCFunction)os_readv, METH_VARARGS, os_readv__doc__}, static Py_ssize_t -os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers); +os_readv_impl(PyObject *module, int fd, PyObject *buffers); static PyObject * -os_readv(PyModuleDef *module, PyObject *args) +os_readv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3496,10 +3494,10 @@ PyDoc_STRVAR(os_pread__doc__, {"pread", (PyCFunction)os_pread, METH_VARARGS, os_pread__doc__}, static PyObject * -os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset); +os_pread_impl(PyObject *module, int fd, int length, Py_off_t offset); static PyObject * -os_pread(PyModuleDef *module, PyObject *args) +os_pread(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3527,10 +3525,10 @@ PyDoc_STRVAR(os_write__doc__, {"write", (PyCFunction)os_write, METH_VARARGS, os_write__doc__}, static Py_ssize_t -os_write_impl(PyModuleDef *module, int fd, Py_buffer *data); +os_write_impl(PyObject *module, int fd, Py_buffer *data); static PyObject * -os_write(PyModuleDef *module, PyObject *args) +os_write(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3566,10 +3564,10 @@ PyDoc_STRVAR(os_fstat__doc__, {"fstat", (PyCFunction)os_fstat, METH_VARARGS|METH_KEYWORDS, os_fstat__doc__}, static PyObject * -os_fstat_impl(PyModuleDef *module, int fd); +os_fstat_impl(PyObject *module, int fd); static PyObject * -os_fstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fstat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -3597,10 +3595,10 @@ PyDoc_STRVAR(os_isatty__doc__, {"isatty", (PyCFunction)os_isatty, METH_O, os_isatty__doc__}, static int -os_isatty_impl(PyModuleDef *module, int fd); +os_isatty_impl(PyObject *module, int fd); static PyObject * -os_isatty(PyModuleDef *module, PyObject *arg) +os_isatty(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -3632,10 +3630,10 @@ PyDoc_STRVAR(os_pipe__doc__, {"pipe", (PyCFunction)os_pipe, METH_NOARGS, os_pipe__doc__}, static PyObject * -os_pipe_impl(PyModuleDef *module); +os_pipe_impl(PyObject *module); static PyObject * -os_pipe(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_pipe(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_pipe_impl(module); } @@ -3660,10 +3658,10 @@ PyDoc_STRVAR(os_pipe2__doc__, {"pipe2", (PyCFunction)os_pipe2, METH_O, os_pipe2__doc__}, static PyObject * -os_pipe2_impl(PyModuleDef *module, int flags); +os_pipe2_impl(PyObject *module, int flags); static PyObject * -os_pipe2(PyModuleDef *module, PyObject *arg) +os_pipe2(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int flags; @@ -3693,10 +3691,10 @@ PyDoc_STRVAR(os_writev__doc__, {"writev", (PyCFunction)os_writev, METH_VARARGS, os_writev__doc__}, static Py_ssize_t -os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers); +os_writev_impl(PyObject *module, int fd, PyObject *buffers); static PyObject * -os_writev(PyModuleDef *module, PyObject *args) +os_writev(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3733,11 +3731,10 @@ PyDoc_STRVAR(os_pwrite__doc__, {"pwrite", (PyCFunction)os_pwrite, METH_VARARGS, os_pwrite__doc__}, static Py_ssize_t -os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, - Py_off_t offset); +os_pwrite_impl(PyObject *module, int fd, Py_buffer *buffer, Py_off_t offset); static PyObject * -os_pwrite(PyModuleDef *module, PyObject *args) +os_pwrite(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3780,10 +3777,10 @@ PyDoc_STRVAR(os_mkfifo__doc__, {"mkfifo", (PyCFunction)os_mkfifo, METH_VARARGS|METH_KEYWORDS, os_mkfifo__doc__}, static PyObject * -os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); +os_mkfifo_impl(PyObject *module, path_t *path, int mode, int dir_fd); static PyObject * -os_mkfifo(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_mkfifo(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; @@ -3829,11 +3826,11 @@ PyDoc_STRVAR(os_mknod__doc__, {"mknod", (PyCFunction)os_mknod, METH_VARARGS|METH_KEYWORDS, os_mknod__doc__}, static PyObject * -os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, +os_mknod_impl(PyObject *module, path_t *path, int mode, dev_t device, int dir_fd); static PyObject * -os_mknod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_mknod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "device", "dir_fd", NULL}; @@ -3868,10 +3865,10 @@ PyDoc_STRVAR(os_major__doc__, {"major", (PyCFunction)os_major, METH_O, os_major__doc__}, static unsigned int -os_major_impl(PyModuleDef *module, dev_t device); +os_major_impl(PyObject *module, dev_t device); static PyObject * -os_major(PyModuleDef *module, PyObject *arg) +os_major(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; dev_t device; @@ -3902,10 +3899,10 @@ PyDoc_STRVAR(os_minor__doc__, {"minor", (PyCFunction)os_minor, METH_O, os_minor__doc__}, static unsigned int -os_minor_impl(PyModuleDef *module, dev_t device); +os_minor_impl(PyObject *module, dev_t device); static PyObject * -os_minor(PyModuleDef *module, PyObject *arg) +os_minor(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; dev_t device; @@ -3936,10 +3933,10 @@ PyDoc_STRVAR(os_makedev__doc__, {"makedev", (PyCFunction)os_makedev, METH_VARARGS, os_makedev__doc__}, static dev_t -os_makedev_impl(PyModuleDef *module, int major, int minor); +os_makedev_impl(PyObject *module, int major, int minor); static PyObject * -os_makedev(PyModuleDef *module, PyObject *args) +os_makedev(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int major; @@ -3972,10 +3969,10 @@ PyDoc_STRVAR(os_ftruncate__doc__, {"ftruncate", (PyCFunction)os_ftruncate, METH_VARARGS, os_ftruncate__doc__}, static PyObject * -os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length); +os_ftruncate_impl(PyObject *module, int fd, Py_off_t length); static PyObject * -os_ftruncate(PyModuleDef *module, PyObject *args) +os_ftruncate(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4007,10 +4004,10 @@ PyDoc_STRVAR(os_truncate__doc__, {"truncate", (PyCFunction)os_truncate, METH_VARARGS|METH_KEYWORDS, os_truncate__doc__}, static PyObject * -os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length); +os_truncate_impl(PyObject *module, path_t *path, Py_off_t length); static PyObject * -os_truncate(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_truncate(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "length", NULL}; @@ -4046,11 +4043,11 @@ PyDoc_STRVAR(os_posix_fallocate__doc__, {"posix_fallocate", (PyCFunction)os_posix_fallocate, METH_VARARGS, os_posix_fallocate__doc__}, static PyObject * -os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fallocate_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length); static PyObject * -os_posix_fallocate(PyModuleDef *module, PyObject *args) +os_posix_fallocate(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4088,11 +4085,11 @@ PyDoc_STRVAR(os_posix_fadvise__doc__, {"posix_fadvise", (PyCFunction)os_posix_fadvise, METH_VARARGS, os_posix_fadvise__doc__}, static PyObject * -os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fadvise_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length, int advice); static PyObject * -os_posix_fadvise(PyModuleDef *module, PyObject *args) +os_posix_fadvise(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4123,10 +4120,10 @@ PyDoc_STRVAR(os_putenv__doc__, {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value); static PyObject * -os_putenv(PyModuleDef *module, PyObject *args) +os_putenv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *name; @@ -4155,10 +4152,10 @@ PyDoc_STRVAR(os_putenv__doc__, {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value); static PyObject * -os_putenv(PyModuleDef *module, PyObject *args) +os_putenv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *name = NULL; @@ -4192,10 +4189,10 @@ PyDoc_STRVAR(os_unsetenv__doc__, {"unsetenv", (PyCFunction)os_unsetenv, METH_O, os_unsetenv__doc__}, static PyObject * -os_unsetenv_impl(PyModuleDef *module, PyObject *name); +os_unsetenv_impl(PyObject *module, PyObject *name); static PyObject * -os_unsetenv(PyModuleDef *module, PyObject *arg) +os_unsetenv(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name = NULL; @@ -4223,10 +4220,10 @@ PyDoc_STRVAR(os_strerror__doc__, {"strerror", (PyCFunction)os_strerror, METH_O, os_strerror__doc__}, static PyObject * -os_strerror_impl(PyModuleDef *module, int code); +os_strerror_impl(PyObject *module, int code); static PyObject * -os_strerror(PyModuleDef *module, PyObject *arg) +os_strerror(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int code; @@ -4251,10 +4248,10 @@ PyDoc_STRVAR(os_WCOREDUMP__doc__, {"WCOREDUMP", (PyCFunction)os_WCOREDUMP, METH_O, os_WCOREDUMP__doc__}, static int -os_WCOREDUMP_impl(PyModuleDef *module, int status); +os_WCOREDUMP_impl(PyObject *module, int status); static PyObject * -os_WCOREDUMP(PyModuleDef *module, PyObject *arg) +os_WCOREDUMP(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int status; @@ -4288,10 +4285,10 @@ PyDoc_STRVAR(os_WIFCONTINUED__doc__, {"WIFCONTINUED", (PyCFunction)os_WIFCONTINUED, METH_VARARGS|METH_KEYWORDS, os_WIFCONTINUED__doc__}, static int -os_WIFCONTINUED_impl(PyModuleDef *module, int status); +os_WIFCONTINUED_impl(PyObject *module, int status); static PyObject * -os_WIFCONTINUED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFCONTINUED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4324,10 +4321,10 @@ PyDoc_STRVAR(os_WIFSTOPPED__doc__, {"WIFSTOPPED", (PyCFunction)os_WIFSTOPPED, METH_VARARGS|METH_KEYWORDS, os_WIFSTOPPED__doc__}, static int -os_WIFSTOPPED_impl(PyModuleDef *module, int status); +os_WIFSTOPPED_impl(PyObject *module, int status); static PyObject * -os_WIFSTOPPED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFSTOPPED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4360,10 +4357,10 @@ PyDoc_STRVAR(os_WIFSIGNALED__doc__, {"WIFSIGNALED", (PyCFunction)os_WIFSIGNALED, METH_VARARGS|METH_KEYWORDS, os_WIFSIGNALED__doc__}, static int -os_WIFSIGNALED_impl(PyModuleDef *module, int status); +os_WIFSIGNALED_impl(PyObject *module, int status); static PyObject * -os_WIFSIGNALED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFSIGNALED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4396,10 +4393,10 @@ PyDoc_STRVAR(os_WIFEXITED__doc__, {"WIFEXITED", (PyCFunction)os_WIFEXITED, METH_VARARGS|METH_KEYWORDS, os_WIFEXITED__doc__}, static int -os_WIFEXITED_impl(PyModuleDef *module, int status); +os_WIFEXITED_impl(PyObject *module, int status); static PyObject * -os_WIFEXITED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFEXITED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4432,10 +4429,10 @@ PyDoc_STRVAR(os_WEXITSTATUS__doc__, {"WEXITSTATUS", (PyCFunction)os_WEXITSTATUS, METH_VARARGS|METH_KEYWORDS, os_WEXITSTATUS__doc__}, static int -os_WEXITSTATUS_impl(PyModuleDef *module, int status); +os_WEXITSTATUS_impl(PyObject *module, int status); static PyObject * -os_WEXITSTATUS(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WEXITSTATUS(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4468,10 +4465,10 @@ PyDoc_STRVAR(os_WTERMSIG__doc__, {"WTERMSIG", (PyCFunction)os_WTERMSIG, METH_VARARGS|METH_KEYWORDS, os_WTERMSIG__doc__}, static int -os_WTERMSIG_impl(PyModuleDef *module, int status); +os_WTERMSIG_impl(PyObject *module, int status); static PyObject * -os_WTERMSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WTERMSIG(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4504,10 +4501,10 @@ PyDoc_STRVAR(os_WSTOPSIG__doc__, {"WSTOPSIG", (PyCFunction)os_WSTOPSIG, METH_VARARGS|METH_KEYWORDS, os_WSTOPSIG__doc__}, static int -os_WSTOPSIG_impl(PyModuleDef *module, int status); +os_WSTOPSIG_impl(PyObject *module, int status); static PyObject * -os_WSTOPSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WSTOPSIG(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4542,10 +4539,10 @@ PyDoc_STRVAR(os_fstatvfs__doc__, {"fstatvfs", (PyCFunction)os_fstatvfs, METH_O, os_fstatvfs__doc__}, static PyObject * -os_fstatvfs_impl(PyModuleDef *module, int fd); +os_fstatvfs_impl(PyObject *module, int fd); static PyObject * -os_fstatvfs(PyModuleDef *module, PyObject *arg) +os_fstatvfs(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -4576,10 +4573,10 @@ PyDoc_STRVAR(os_statvfs__doc__, {"statvfs", (PyCFunction)os_statvfs, METH_VARARGS|METH_KEYWORDS, os_statvfs__doc__}, static PyObject * -os_statvfs_impl(PyModuleDef *module, path_t *path); +os_statvfs_impl(PyObject *module, path_t *path); static PyObject * -os_statvfs(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_statvfs(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -4611,10 +4608,10 @@ PyDoc_STRVAR(os__getdiskusage__doc__, {"_getdiskusage", (PyCFunction)os__getdiskusage, METH_VARARGS|METH_KEYWORDS, os__getdiskusage__doc__}, static PyObject * -os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path); +os__getdiskusage_impl(PyObject *module, Py_UNICODE *path); static PyObject * -os__getdiskusage(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os__getdiskusage(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -4645,10 +4642,10 @@ PyDoc_STRVAR(os_fpathconf__doc__, {"fpathconf", (PyCFunction)os_fpathconf, METH_VARARGS, os_fpathconf__doc__}, static long -os_fpathconf_impl(PyModuleDef *module, int fd, int name); +os_fpathconf_impl(PyObject *module, int fd, int name); static PyObject * -os_fpathconf(PyModuleDef *module, PyObject *args) +os_fpathconf(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4685,10 +4682,10 @@ PyDoc_STRVAR(os_pathconf__doc__, {"pathconf", (PyCFunction)os_pathconf, METH_VARARGS|METH_KEYWORDS, os_pathconf__doc__}, static long -os_pathconf_impl(PyModuleDef *module, path_t *path, int name); +os_pathconf_impl(PyObject *module, path_t *path, int name); static PyObject * -os_pathconf(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_pathconf(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "name", NULL}; @@ -4725,10 +4722,10 @@ PyDoc_STRVAR(os_confstr__doc__, {"confstr", (PyCFunction)os_confstr, METH_O, os_confstr__doc__}, static PyObject * -os_confstr_impl(PyModuleDef *module, int name); +os_confstr_impl(PyObject *module, int name); static PyObject * -os_confstr(PyModuleDef *module, PyObject *arg) +os_confstr(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int name; @@ -4755,10 +4752,10 @@ PyDoc_STRVAR(os_sysconf__doc__, {"sysconf", (PyCFunction)os_sysconf, METH_O, os_sysconf__doc__}, static long -os_sysconf_impl(PyModuleDef *module, int name); +os_sysconf_impl(PyObject *module, int name); static PyObject * -os_sysconf(PyModuleDef *module, PyObject *arg) +os_sysconf(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int name; @@ -4790,10 +4787,10 @@ PyDoc_STRVAR(os_abort__doc__, {"abort", (PyCFunction)os_abort, METH_NOARGS, os_abort__doc__}, static PyObject * -os_abort_impl(PyModuleDef *module); +os_abort_impl(PyObject *module); static PyObject * -os_abort(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_abort(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_abort_impl(module); } @@ -4814,10 +4811,10 @@ PyDoc_STRVAR(os_getloadavg__doc__, {"getloadavg", (PyCFunction)os_getloadavg, METH_NOARGS, os_getloadavg__doc__}, static PyObject * -os_getloadavg_impl(PyModuleDef *module); +os_getloadavg_impl(PyObject *module); static PyObject * -os_getloadavg(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getloadavg(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getloadavg_impl(module); } @@ -4837,10 +4834,10 @@ PyDoc_STRVAR(os_device_encoding__doc__, {"device_encoding", (PyCFunction)os_device_encoding, METH_VARARGS|METH_KEYWORDS, os_device_encoding__doc__}, static PyObject * -os_device_encoding_impl(PyModuleDef *module, int fd); +os_device_encoding_impl(PyObject *module, int fd); static PyObject * -os_device_encoding(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_device_encoding(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -4867,10 +4864,10 @@ PyDoc_STRVAR(os_setresuid__doc__, {"setresuid", (PyCFunction)os_setresuid, METH_VARARGS, os_setresuid__doc__}, static PyObject * -os_setresuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid, uid_t suid); +os_setresuid_impl(PyObject *module, uid_t ruid, uid_t euid, uid_t suid); static PyObject * -os_setresuid(PyModuleDef *module, PyObject *args) +os_setresuid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; uid_t ruid; @@ -4900,10 +4897,10 @@ PyDoc_STRVAR(os_setresgid__doc__, {"setresgid", (PyCFunction)os_setresgid, METH_VARARGS, os_setresgid__doc__}, static PyObject * -os_setresgid_impl(PyModuleDef *module, gid_t rgid, gid_t egid, gid_t sgid); +os_setresgid_impl(PyObject *module, gid_t rgid, gid_t egid, gid_t sgid); static PyObject * -os_setresgid(PyModuleDef *module, PyObject *args) +os_setresgid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; gid_t rgid; @@ -4933,10 +4930,10 @@ PyDoc_STRVAR(os_getresuid__doc__, {"getresuid", (PyCFunction)os_getresuid, METH_NOARGS, os_getresuid__doc__}, static PyObject * -os_getresuid_impl(PyModuleDef *module); +os_getresuid_impl(PyObject *module); static PyObject * -os_getresuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getresuid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getresuid_impl(module); } @@ -4955,10 +4952,10 @@ PyDoc_STRVAR(os_getresgid__doc__, {"getresgid", (PyCFunction)os_getresgid, METH_NOARGS, os_getresgid__doc__}, static PyObject * -os_getresgid_impl(PyModuleDef *module); +os_getresgid_impl(PyObject *module); static PyObject * -os_getresgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getresgid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getresgid_impl(module); } @@ -4982,11 +4979,11 @@ PyDoc_STRVAR(os_getxattr__doc__, {"getxattr", (PyCFunction)os_getxattr, METH_VARARGS|METH_KEYWORDS, os_getxattr__doc__}, static PyObject * -os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_getxattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks); static PyObject * -os_getxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_getxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; @@ -5028,11 +5025,11 @@ PyDoc_STRVAR(os_setxattr__doc__, {"setxattr", (PyCFunction)os_setxattr, METH_VARARGS|METH_KEYWORDS, os_setxattr__doc__}, static PyObject * -os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_setxattr_impl(PyObject *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks); static PyObject * -os_setxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_setxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "attribute", "value", "flags", "follow_symlinks", NULL}; @@ -5078,11 +5075,11 @@ PyDoc_STRVAR(os_removexattr__doc__, {"removexattr", (PyCFunction)os_removexattr, METH_VARARGS|METH_KEYWORDS, os_removexattr__doc__}, static PyObject * -os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_removexattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks); static PyObject * -os_removexattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_removexattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; @@ -5124,10 +5121,10 @@ PyDoc_STRVAR(os_listxattr__doc__, {"listxattr", (PyCFunction)os_listxattr, METH_VARARGS|METH_KEYWORDS, os_listxattr__doc__}, static PyObject * -os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks); +os_listxattr_impl(PyObject *module, path_t *path, int follow_symlinks); static PyObject * -os_listxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_listxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "follow_symlinks", NULL}; @@ -5158,10 +5155,10 @@ PyDoc_STRVAR(os_urandom__doc__, {"urandom", (PyCFunction)os_urandom, METH_O, os_urandom__doc__}, static PyObject * -os_urandom_impl(PyModuleDef *module, Py_ssize_t size); +os_urandom_impl(PyObject *module, Py_ssize_t size); static PyObject * -os_urandom(PyModuleDef *module, PyObject *arg) +os_urandom(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_ssize_t size; @@ -5184,10 +5181,10 @@ PyDoc_STRVAR(os_cpu_count__doc__, {"cpu_count", (PyCFunction)os_cpu_count, METH_NOARGS, os_cpu_count__doc__}, static PyObject * -os_cpu_count_impl(PyModuleDef *module); +os_cpu_count_impl(PyObject *module); static PyObject * -os_cpu_count(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_cpu_count(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_cpu_count_impl(module); } @@ -5202,10 +5199,10 @@ PyDoc_STRVAR(os_get_inheritable__doc__, {"get_inheritable", (PyCFunction)os_get_inheritable, METH_O, os_get_inheritable__doc__}, static int -os_get_inheritable_impl(PyModuleDef *module, int fd); +os_get_inheritable_impl(PyObject *module, int fd); static PyObject * -os_get_inheritable(PyModuleDef *module, PyObject *arg) +os_get_inheritable(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -5232,10 +5229,10 @@ PyDoc_STRVAR(os_set_inheritable__doc__, {"set_inheritable", (PyCFunction)os_set_inheritable, METH_VARARGS, os_set_inheritable__doc__}, static PyObject * -os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable); +os_set_inheritable_impl(PyObject *module, int fd, int inheritable); static PyObject * -os_set_inheritable(PyModuleDef *module, PyObject *args) +os_set_inheritable(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -5262,10 +5259,10 @@ PyDoc_STRVAR(os_get_handle_inheritable__doc__, {"get_handle_inheritable", (PyCFunction)os_get_handle_inheritable, METH_O, os_get_handle_inheritable__doc__}, static int -os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle); +os_get_handle_inheritable_impl(PyObject *module, Py_intptr_t handle); static PyObject * -os_get_handle_inheritable(PyModuleDef *module, PyObject *arg) +os_get_handle_inheritable(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_intptr_t handle; @@ -5296,11 +5293,11 @@ PyDoc_STRVAR(os_set_handle_inheritable__doc__, {"set_handle_inheritable", (PyCFunction)os_set_handle_inheritable, METH_VARARGS, os_set_handle_inheritable__doc__}, static PyObject * -os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, +os_set_handle_inheritable_impl(PyObject *module, Py_intptr_t handle, int inheritable); static PyObject * -os_set_handle_inheritable(PyModuleDef *module, PyObject *args) +os_set_handle_inheritable(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_intptr_t handle; @@ -5788,4 +5785,4 @@ exit: #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=95824c52fd034654 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7690b72549d2524e input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pwdmodule.c.h b/Modules/clinic/pwdmodule.c.h index 9de2e4f..cb191a0 100644 --- a/Modules/clinic/pwdmodule.c.h +++ b/Modules/clinic/pwdmodule.c.h @@ -25,10 +25,10 @@ PyDoc_STRVAR(pwd_getpwnam__doc__, {"getpwnam", (PyCFunction)pwd_getpwnam, METH_O, pwd_getpwnam__doc__}, static PyObject * -pwd_getpwnam_impl(PyModuleDef *module, PyObject *arg); +pwd_getpwnam_impl(PyObject *module, PyObject *arg); static PyObject * -pwd_getpwnam(PyModuleDef *module, PyObject *arg_) +pwd_getpwnam(PyObject *module, PyObject *arg_) { PyObject *return_value = NULL; PyObject *arg; @@ -55,10 +55,10 @@ PyDoc_STRVAR(pwd_getpwall__doc__, {"getpwall", (PyCFunction)pwd_getpwall, METH_NOARGS, pwd_getpwall__doc__}, static PyObject * -pwd_getpwall_impl(PyModuleDef *module); +pwd_getpwall_impl(PyObject *module); static PyObject * -pwd_getpwall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +pwd_getpwall(PyObject *module, PyObject *Py_UNUSED(ignored)) { return pwd_getpwall_impl(module); } @@ -68,4 +68,4 @@ pwd_getpwall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) #ifndef PWD_GETPWALL_METHODDEF #define PWD_GETPWALL_METHODDEF #endif /* !defined(PWD_GETPWALL_METHODDEF) */ -/*[clinic end generated code: output=2ed0ecf34fd3f98f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d0ea1c5c832f0c1a input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h index 379c5db..c5b5c71 100644 --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -231,11 +231,11 @@ PyDoc_STRVAR(pyexpat_ParserCreate__doc__, {"ParserCreate", (PyCFunction)pyexpat_ParserCreate, METH_VARARGS|METH_KEYWORDS, pyexpat_ParserCreate__doc__}, static PyObject * -pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, +pyexpat_ParserCreate_impl(PyObject *module, const char *encoding, const char *namespace_separator, PyObject *intern); static PyObject * -pyexpat_ParserCreate(PyModuleDef *module, PyObject *args, PyObject *kwargs) +pyexpat_ParserCreate(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"encoding", "namespace_separator", "intern", NULL}; @@ -262,10 +262,10 @@ PyDoc_STRVAR(pyexpat_ErrorString__doc__, {"ErrorString", (PyCFunction)pyexpat_ErrorString, METH_O, pyexpat_ErrorString__doc__}, static PyObject * -pyexpat_ErrorString_impl(PyModuleDef *module, long code); +pyexpat_ErrorString_impl(PyObject *module, long code); static PyObject * -pyexpat_ErrorString(PyModuleDef *module, PyObject *arg) +pyexpat_ErrorString(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; long code; @@ -281,4 +281,4 @@ exit: #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=bf4d99c9702d8a6c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d479cfab607e9dc8 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha1module.c.h b/Modules/clinic/sha1module.c.h index fa865ba..5b8db80 100644 --- a/Modules/clinic/sha1module.c.h +++ b/Modules/clinic/sha1module.c.h @@ -75,10 +75,10 @@ PyDoc_STRVAR(_sha1_sha1__doc__, {"sha1", (PyCFunction)_sha1_sha1, METH_VARARGS|METH_KEYWORDS, _sha1_sha1__doc__}, static PyObject * -_sha1_sha1_impl(PyModuleDef *module, PyObject *string); +_sha1_sha1_impl(PyObject *module, PyObject *string); static PyObject * -_sha1_sha1(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha1_sha1(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -92,4 +92,4 @@ _sha1_sha1(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=be19102f3120490a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0b6a194fbb0b94f2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha256module.c.h b/Modules/clinic/sha256module.c.h index c5fe188..661569c 100644 --- a/Modules/clinic/sha256module.c.h +++ b/Modules/clinic/sha256module.c.h @@ -75,10 +75,10 @@ PyDoc_STRVAR(_sha256_sha256__doc__, {"sha256", (PyCFunction)_sha256_sha256, METH_VARARGS|METH_KEYWORDS, _sha256_sha256__doc__}, static PyObject * -_sha256_sha256_impl(PyModuleDef *module, PyObject *string); +_sha256_sha256_impl(PyObject *module, PyObject *string); static PyObject * -_sha256_sha256(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha256_sha256(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -103,10 +103,10 @@ PyDoc_STRVAR(_sha256_sha224__doc__, {"sha224", (PyCFunction)_sha256_sha224, METH_VARARGS|METH_KEYWORDS, _sha256_sha224__doc__}, static PyObject * -_sha256_sha224_impl(PyModuleDef *module, PyObject *string); +_sha256_sha224_impl(PyObject *module, PyObject *string); static PyObject * -_sha256_sha224(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha256_sha224(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -120,4 +120,4 @@ _sha256_sha224(PyModuleDef *module, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=354cedf3b632c7b2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5a1fc5480e399f95 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha512module.c.h b/Modules/clinic/sha512module.c.h index c308739..d64c2a4 100644 --- a/Modules/clinic/sha512module.c.h +++ b/Modules/clinic/sha512module.c.h @@ -93,10 +93,10 @@ PyDoc_STRVAR(_sha512_sha512__doc__, {"sha512", (PyCFunction)_sha512_sha512, METH_VARARGS|METH_KEYWORDS, _sha512_sha512__doc__}, static PyObject * -_sha512_sha512_impl(PyModuleDef *module, PyObject *string); +_sha512_sha512_impl(PyObject *module, PyObject *string); static PyObject * -_sha512_sha512(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha512_sha512(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -125,10 +125,10 @@ PyDoc_STRVAR(_sha512_sha384__doc__, {"sha384", (PyCFunction)_sha512_sha384, METH_VARARGS|METH_KEYWORDS, _sha512_sha384__doc__}, static PyObject * -_sha512_sha384_impl(PyModuleDef *module, PyObject *string); +_sha512_sha384_impl(PyObject *module, PyObject *string); static PyObject * -_sha512_sha384(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha512_sha384(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -168,4 +168,4 @@ exit: #ifndef _SHA512_SHA384_METHODDEF #define _SHA512_SHA384_METHODDEF #endif /* !defined(_SHA512_SHA384_METHODDEF) */ -/*[clinic end generated code: output=1c7d385731fee7c0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=bb87f494df50ffc0 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/signalmodule.c.h b/Modules/clinic/signalmodule.c.h index ec07ef1..c8f4cd5 100644 --- a/Modules/clinic/signalmodule.c.h +++ b/Modules/clinic/signalmodule.c.h @@ -14,10 +14,10 @@ PyDoc_STRVAR(signal_alarm__doc__, {"alarm", (PyCFunction)signal_alarm, METH_O, signal_alarm__doc__}, static long -signal_alarm_impl(PyModuleDef *module, int seconds); +signal_alarm_impl(PyObject *module, int seconds); static PyObject * -signal_alarm(PyModuleDef *module, PyObject *arg) +signal_alarm(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int seconds; @@ -48,10 +48,10 @@ PyDoc_STRVAR(signal_pause__doc__, {"pause", (PyCFunction)signal_pause, METH_NOARGS, signal_pause__doc__}, static PyObject * -signal_pause_impl(PyModuleDef *module); +signal_pause_impl(PyObject *module); static PyObject * -signal_pause(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +signal_pause(PyObject *module, PyObject *Py_UNUSED(ignored)) { return signal_pause_impl(module); } @@ -75,10 +75,10 @@ PyDoc_STRVAR(signal_signal__doc__, {"signal", (PyCFunction)signal_signal, METH_VARARGS, signal_signal__doc__}, static PyObject * -signal_signal_impl(PyModuleDef *module, int signalnum, PyObject *handler); +signal_signal_impl(PyObject *module, int signalnum, PyObject *handler); static PyObject * -signal_signal(PyModuleDef *module, PyObject *args) +signal_signal(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int signalnum; @@ -109,10 +109,10 @@ PyDoc_STRVAR(signal_getsignal__doc__, {"getsignal", (PyCFunction)signal_getsignal, METH_O, signal_getsignal__doc__}, static PyObject * -signal_getsignal_impl(PyModuleDef *module, int signalnum); +signal_getsignal_impl(PyObject *module, int signalnum); static PyObject * -signal_getsignal(PyModuleDef *module, PyObject *arg) +signal_getsignal(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int signalnum; @@ -140,10 +140,10 @@ PyDoc_STRVAR(signal_siginterrupt__doc__, {"siginterrupt", (PyCFunction)signal_siginterrupt, METH_VARARGS, signal_siginterrupt__doc__}, static PyObject * -signal_siginterrupt_impl(PyModuleDef *module, int signalnum, int flag); +signal_siginterrupt_impl(PyObject *module, int signalnum, int flag); static PyObject * -signal_siginterrupt(PyModuleDef *module, PyObject *args) +signal_siginterrupt(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int signalnum; @@ -177,11 +177,11 @@ PyDoc_STRVAR(signal_setitimer__doc__, {"setitimer", (PyCFunction)signal_setitimer, METH_VARARGS, signal_setitimer__doc__}, static PyObject * -signal_setitimer_impl(PyModuleDef *module, int which, double seconds, +signal_setitimer_impl(PyObject *module, int which, double seconds, double interval); static PyObject * -signal_setitimer(PyModuleDef *module, PyObject *args) +signal_setitimer(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int which; @@ -211,10 +211,10 @@ PyDoc_STRVAR(signal_getitimer__doc__, {"getitimer", (PyCFunction)signal_getitimer, METH_O, signal_getitimer__doc__}, static PyObject * -signal_getitimer_impl(PyModuleDef *module, int which); +signal_getitimer_impl(PyObject *module, int which); static PyObject * -signal_getitimer(PyModuleDef *module, PyObject *arg) +signal_getitimer(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int which; @@ -241,10 +241,10 @@ PyDoc_STRVAR(signal_pthread_sigmask__doc__, {"pthread_sigmask", (PyCFunction)signal_pthread_sigmask, METH_VARARGS, signal_pthread_sigmask__doc__}, static PyObject * -signal_pthread_sigmask_impl(PyModuleDef *module, int how, PyObject *mask); +signal_pthread_sigmask_impl(PyObject *module, int how, PyObject *mask); static PyObject * -signal_pthread_sigmask(PyModuleDef *module, PyObject *args) +signal_pthread_sigmask(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int how; @@ -276,10 +276,10 @@ PyDoc_STRVAR(signal_sigpending__doc__, {"sigpending", (PyCFunction)signal_sigpending, METH_NOARGS, signal_sigpending__doc__}, static PyObject * -signal_sigpending_impl(PyModuleDef *module); +signal_sigpending_impl(PyObject *module); static PyObject * -signal_sigpending(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +signal_sigpending(PyObject *module, PyObject *Py_UNUSED(ignored)) { return signal_sigpending_impl(module); } @@ -332,11 +332,11 @@ PyDoc_STRVAR(signal_sigtimedwait__doc__, {"sigtimedwait", (PyCFunction)signal_sigtimedwait, METH_VARARGS, signal_sigtimedwait__doc__}, static PyObject * -signal_sigtimedwait_impl(PyModuleDef *module, PyObject *sigset, +signal_sigtimedwait_impl(PyObject *module, PyObject *sigset, PyObject *timeout_obj); static PyObject * -signal_sigtimedwait(PyModuleDef *module, PyObject *args) +signal_sigtimedwait(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *sigset; @@ -366,10 +366,10 @@ PyDoc_STRVAR(signal_pthread_kill__doc__, {"pthread_kill", (PyCFunction)signal_pthread_kill, METH_VARARGS, signal_pthread_kill__doc__}, static PyObject * -signal_pthread_kill_impl(PyModuleDef *module, long thread_id, int signalnum); +signal_pthread_kill_impl(PyObject *module, long thread_id, int signalnum); static PyObject * -signal_pthread_kill(PyModuleDef *module, PyObject *args) +signal_pthread_kill(PyObject *module, PyObject *args) { PyObject *return_value = NULL; long thread_id; @@ -429,4 +429,4 @@ exit: #ifndef SIGNAL_PTHREAD_KILL_METHODDEF #define SIGNAL_PTHREAD_KILL_METHODDEF #endif /* !defined(SIGNAL_PTHREAD_KILL_METHODDEF) */ -/*[clinic end generated code: output=b99278c16c40ea43 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=dafa598412bfb8d2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/spwdmodule.c.h b/Modules/clinic/spwdmodule.c.h index c0d18db..e26acf1 100644 --- a/Modules/clinic/spwdmodule.c.h +++ b/Modules/clinic/spwdmodule.c.h @@ -16,10 +16,10 @@ PyDoc_STRVAR(spwd_getspnam__doc__, {"getspnam", (PyCFunction)spwd_getspnam, METH_O, spwd_getspnam__doc__}, static PyObject * -spwd_getspnam_impl(PyModuleDef *module, PyObject *arg); +spwd_getspnam_impl(PyObject *module, PyObject *arg); static PyObject * -spwd_getspnam(PyModuleDef *module, PyObject *arg_) +spwd_getspnam(PyObject *module, PyObject *arg_) { PyObject *return_value = NULL; PyObject *arg; @@ -48,10 +48,10 @@ PyDoc_STRVAR(spwd_getspall__doc__, {"getspall", (PyCFunction)spwd_getspall, METH_NOARGS, spwd_getspall__doc__}, static PyObject * -spwd_getspall_impl(PyModuleDef *module); +spwd_getspall_impl(PyObject *module); static PyObject * -spwd_getspall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +spwd_getspall(PyObject *module, PyObject *Py_UNUSED(ignored)) { return spwd_getspall_impl(module); } @@ -65,4 +65,4 @@ spwd_getspall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) #ifndef SPWD_GETSPALL_METHODDEF #define SPWD_GETSPALL_METHODDEF #endif /* !defined(SPWD_GETSPALL_METHODDEF) */ -/*[clinic end generated code: output=6c178830413f7763 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=510f681b36f54c30 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index 602ae1d..b1af7ce 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -17,10 +17,10 @@ PyDoc_STRVAR(zlib_compress__doc__, {"compress", (PyCFunction)zlib_compress, METH_VARARGS, zlib_compress__doc__}, static PyObject * -zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int level); +zlib_compress_impl(PyObject *module, Py_buffer *bytes, int level); static PyObject * -zlib_compress(PyModuleDef *module, PyObject *args) +zlib_compress(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer bytes = {NULL, NULL}; @@ -56,19 +56,19 @@ PyDoc_STRVAR(zlib_decompress__doc__, {"decompress", (PyCFunction)zlib_decompress, METH_VARARGS, zlib_decompress__doc__}, static PyObject * -zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, - unsigned int bufsize); +zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, + Py_ssize_t bufsize); static PyObject * -zlib_decompress(PyModuleDef *module, PyObject *args) +zlib_decompress(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; int wbits = MAX_WBITS; - unsigned int bufsize = DEF_BUF_SIZE; + Py_ssize_t bufsize = DEF_BUF_SIZE; if (!PyArg_ParseTuple(args, "y*|iO&:decompress", - &data, &wbits, capped_uint_converter, &bufsize)) + &data, &wbits, ssize_t_converter, &bufsize)) goto exit; return_value = zlib_decompress_impl(module, &data, wbits, bufsize); @@ -114,11 +114,11 @@ PyDoc_STRVAR(zlib_compressobj__doc__, {"compressobj", (PyCFunction)zlib_compressobj, METH_VARARGS|METH_KEYWORDS, zlib_compressobj__doc__}, static PyObject * -zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, +zlib_compressobj_impl(PyObject *module, int level, int method, int wbits, int memLevel, int strategy, Py_buffer *zdict); static PyObject * -zlib_compressobj(PyModuleDef *module, PyObject *args, PyObject *kwargs) +zlib_compressobj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"level", "method", "wbits", "memLevel", "strategy", "zdict", NULL}; @@ -158,10 +158,10 @@ PyDoc_STRVAR(zlib_decompressobj__doc__, {"decompressobj", (PyCFunction)zlib_decompressobj, METH_VARARGS|METH_KEYWORDS, zlib_decompressobj__doc__}, static PyObject * -zlib_decompressobj_impl(PyModuleDef *module, int wbits, PyObject *zdict); +zlib_decompressobj_impl(PyObject *module, int wbits, PyObject *zdict); static PyObject * -zlib_decompressobj(PyModuleDef *module, PyObject *args, PyObject *kwargs) +zlib_decompressobj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"wbits", "zdict", NULL}; @@ -236,17 +236,17 @@ PyDoc_STRVAR(zlib_Decompress_decompress__doc__, static PyObject * zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, - unsigned int max_length); + Py_ssize_t max_length); static PyObject * zlib_Decompress_decompress(compobject *self, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - unsigned int max_length = 0; + Py_ssize_t max_length = 0; if (!PyArg_ParseTuple(args, "y*|O&:decompress", - &data, capped_uint_converter, &max_length)) + &data, ssize_t_converter, &max_length)) goto exit; return_value = zlib_Decompress_decompress_impl(self, &data, max_length); @@ -348,16 +348,16 @@ PyDoc_STRVAR(zlib_Decompress_flush__doc__, {"flush", (PyCFunction)zlib_Decompress_flush, METH_VARARGS, zlib_Decompress_flush__doc__}, static PyObject * -zlib_Decompress_flush_impl(compobject *self, unsigned int length); +zlib_Decompress_flush_impl(compobject *self, Py_ssize_t length); static PyObject * zlib_Decompress_flush(compobject *self, PyObject *args) { PyObject *return_value = NULL; - unsigned int length = DEF_BUF_SIZE; + Py_ssize_t length = DEF_BUF_SIZE; if (!PyArg_ParseTuple(args, "|O&:flush", - capped_uint_converter, &length)) + ssize_t_converter, &length)) goto exit; return_value = zlib_Decompress_flush_impl(self, length); @@ -380,10 +380,10 @@ PyDoc_STRVAR(zlib_adler32__doc__, {"adler32", (PyCFunction)zlib_adler32, METH_VARARGS, zlib_adler32__doc__}, static PyObject * -zlib_adler32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value); +zlib_adler32_impl(PyObject *module, Py_buffer *data, unsigned int value); static PyObject * -zlib_adler32(PyModuleDef *module, PyObject *args) +zlib_adler32(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -417,10 +417,10 @@ PyDoc_STRVAR(zlib_crc32__doc__, {"crc32", (PyCFunction)zlib_crc32, METH_VARARGS, zlib_crc32__doc__}, static PyObject * -zlib_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value); +zlib_crc32_impl(PyObject *module, Py_buffer *data, unsigned int value); static PyObject * -zlib_crc32(PyModuleDef *module, PyObject *args) +zlib_crc32(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -442,4 +442,4 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=f31627b314a7bd2f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7711ef02d1d5776c input=a9049054013a1b77]*/ diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index 82ea589..cba42a7 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -82,12 +82,12 @@ else { #define CM_SCALE_DOWN (-(CM_SCALE_UP+1)/2) /* forward declarations */ -static Py_complex cmath_asinh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_atanh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_cosh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_sinh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_sqrt_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_tanh_impl(PyModuleDef *, Py_complex); +static Py_complex cmath_asinh_impl(PyObject *, Py_complex); +static Py_complex cmath_atanh_impl(PyObject *, Py_complex); +static Py_complex cmath_cosh_impl(PyObject *, Py_complex); +static Py_complex cmath_sinh_impl(PyObject *, Py_complex); +static Py_complex cmath_sqrt_impl(PyObject *, Py_complex); +static Py_complex cmath_tanh_impl(PyObject *, Py_complex); static PyObject * math_error(void); /* Code to deal with special values (infinities, NaNs, etc.). */ @@ -167,8 +167,8 @@ Return the arc cosine of z. [clinic start generated code]*/ static Py_complex -cmath_acos_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=7c1dd21ff818db6b input=bd6cbd78ae851927]*/ +cmath_acos_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=40bd42853fd460ae input=bd6cbd78ae851927]*/ { Py_complex s1, s2, r; @@ -210,8 +210,8 @@ Return the inverse hyperbolic cosine of z. [clinic start generated code]*/ static Py_complex -cmath_acosh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=c23c776429def981 input=3f61bee7d703e53c]*/ +cmath_acosh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=3e2454d4fcf404ca input=3f61bee7d703e53c]*/ { Py_complex s1, s2, r; @@ -242,8 +242,8 @@ Return the arc sine of z. [clinic start generated code]*/ static Py_complex -cmath_asin_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=42d2346d46690826 input=be0bf0cfdd5239c5]*/ +cmath_asin_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=3b264cd1b16bf4e1 input=be0bf0cfdd5239c5]*/ { /* asin(z) = -i asinh(iz) */ Py_complex s, r; @@ -265,8 +265,8 @@ Return the inverse hyperbolic sine of z. [clinic start generated code]*/ static Py_complex -cmath_asinh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=0c6664823c7b1b35 input=5c09448fcfc89a79]*/ +cmath_asinh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=733d8107841a7599 input=5c09448fcfc89a79]*/ { Py_complex s1, s2, r; @@ -303,8 +303,8 @@ Return the arc tangent of z. [clinic start generated code]*/ static Py_complex -cmath_atan_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=b7d44f02c6a5c3b5 input=3b21ff7d5eac632a]*/ +cmath_atan_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=b6bfc497058acba4 input=3b21ff7d5eac632a]*/ { /* atan(z) = -i atanh(iz) */ Py_complex s, r; @@ -356,8 +356,8 @@ Return the inverse hyperbolic tangent of z. [clinic start generated code]*/ static Py_complex -cmath_atanh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=279e0b9fefc8da7c input=2b3fdb82fb34487b]*/ +cmath_atanh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=e83355f93a989c9e input=2b3fdb82fb34487b]*/ { Py_complex r; double ay, h; @@ -411,8 +411,8 @@ Return the cosine of z. [clinic start generated code]*/ static Py_complex -cmath_cos_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=9d1cdc1b5e761667 input=6022e39b77127ac7]*/ +cmath_cos_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=fd64918d5b3186db input=6022e39b77127ac7]*/ { /* cos(z) = cosh(iz) */ Py_complex r; @@ -433,8 +433,8 @@ Return the hyperbolic cosine of z. [clinic start generated code]*/ static Py_complex -cmath_cosh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=f3b5d3282b3024d3 input=d6b66339e9cc332b]*/ +cmath_cosh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=2e969047da601bdb input=d6b66339e9cc332b]*/ { Py_complex r; double x_minus_one; @@ -495,8 +495,8 @@ Return the exponential value e**z. [clinic start generated code]*/ static Py_complex -cmath_exp_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=6f8825eb2bcad9ba input=8b9e6cf8a92174c3]*/ +cmath_exp_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=edcec61fb9dfda6c input=8b9e6cf8a92174c3]*/ { Py_complex r; double l; @@ -624,8 +624,8 @@ Return the base-10 logarithm of z. [clinic start generated code]*/ static Py_complex -cmath_log10_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=c7c426ca0e782341 input=cff5644f73c1519c]*/ +cmath_log10_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=2922779a7c38cbe1 input=cff5644f73c1519c]*/ { Py_complex r; int errno_save; @@ -646,8 +646,8 @@ Return the sine of z. [clinic start generated code]*/ static Py_complex -cmath_sin_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=e7f5e2b253825ac7 input=2d3519842a8b4b85]*/ +cmath_sin_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=980370d2ff0bb5aa input=2d3519842a8b4b85]*/ { /* sin(z) = -i sin(iz) */ Py_complex s, r; @@ -670,8 +670,8 @@ Return the hyperbolic sine of z. [clinic start generated code]*/ static Py_complex -cmath_sinh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=d71fff8298043a95 input=d2d3fc8c1ddfd2dd]*/ +cmath_sinh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=38b0a6cce26f3536 input=d2d3fc8c1ddfd2dd]*/ { Py_complex r; double x_minus_one; @@ -729,8 +729,8 @@ Return the square root of z. [clinic start generated code]*/ static Py_complex -cmath_sqrt_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=b6bda283d0c5a7b4 input=7088b166fc9a58c7]*/ +cmath_sqrt_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=b6507b3029c339fc input=7088b166fc9a58c7]*/ { /* Method: use symmetries to reduce to the case when x = z.real and y @@ -804,8 +804,8 @@ Return the tangent of z. [clinic start generated code]*/ static Py_complex -cmath_tan_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=df374bacf36d99b4 input=fc167e528767888e]*/ +cmath_tan_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=7c5f13158a72eb13 input=fc167e528767888e]*/ { /* tan(z) = -i tanh(iz) */ Py_complex s, r; @@ -828,8 +828,8 @@ Return the hyperbolic tangent of z. [clinic start generated code]*/ static Py_complex -cmath_tanh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=f578773d27a18e96 input=22f67f9dc6d29685]*/ +cmath_tanh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=36d547ef7aca116c input=22f67f9dc6d29685]*/ { /* Formula: @@ -906,8 +906,8 @@ If the base not specified, returns the natural logarithm (base e) of z. [clinic start generated code]*/ static PyObject * -cmath_log_impl(PyModuleDef *module, Py_complex x, PyObject *y_obj) -/*[clinic end generated code: output=35e2a1e5229b5a46 input=ee0e823a7c6e68ea]*/ +cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj) +/*[clinic end generated code: output=4effdb7d258e0d94 input=ee0e823a7c6e68ea]*/ { Py_complex y; @@ -954,8 +954,8 @@ Return argument, also known as the phase angle, of a complex. [clinic start generated code]*/ static PyObject * -cmath_phase_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=e09eaf373cb624c3 input=5cf75228ba94b69d]*/ +cmath_phase_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=50725086a7bfd253 input=5cf75228ba94b69d]*/ { double phi; @@ -981,8 +981,8 @@ r is the distance from 0 and phi the phase angle. [clinic start generated code]*/ static PyObject * -cmath_polar_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=07d41b16c877875a input=26c353574fd1a861]*/ +cmath_polar_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=d0a8147c41dbb654 input=26c353574fd1a861]*/ { double r, phi; @@ -1021,8 +1021,8 @@ Convert from polar coordinates to rectangular coordinates. [clinic start generated code]*/ static PyObject * -cmath_rect_impl(PyModuleDef *module, double r, double phi) -/*[clinic end generated code: output=d97a8749bd63e9d5 input=24c5646d147efd69]*/ +cmath_rect_impl(PyObject *module, double r, double phi) +/*[clinic end generated code: output=385a0690925df2d5 input=24c5646d147efd69]*/ { Py_complex z; errno = 0; @@ -1082,8 +1082,8 @@ Return True if both the real and imaginary parts of z are finite, else False. [clinic start generated code]*/ static PyObject * -cmath_isfinite_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=8f6682fa93de45d6 input=848e7ee701895815]*/ +cmath_isfinite_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=ac76611e2c774a36 input=848e7ee701895815]*/ { return PyBool_FromLong(Py_IS_FINITE(z.real) && Py_IS_FINITE(z.imag)); } @@ -1095,8 +1095,8 @@ Checks if the real or imaginary part of z not a number (NaN). [clinic start generated code]*/ static PyObject * -cmath_isnan_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=b85fe8c2047718ee input=71799f5d284c9baf]*/ +cmath_isnan_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=e7abf6e0b28beab7 input=71799f5d284c9baf]*/ { return PyBool_FromLong(Py_IS_NAN(z.real) || Py_IS_NAN(z.imag)); } @@ -1108,8 +1108,8 @@ Checks if the real or imaginary part of z is infinite. [clinic start generated code]*/ static PyObject * -cmath_isinf_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=8ca9c6109e468bf4 input=363df155c7181329]*/ +cmath_isinf_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=502a75a79c773469 input=363df155c7181329]*/ { return PyBool_FromLong(Py_IS_INFINITY(z.real) || Py_IS_INFINITY(z.imag)); @@ -1140,9 +1140,9 @@ not close to anything, even itself. inf and -inf are only close to themselves. [clinic start generated code]*/ static int -cmath_isclose_impl(PyModuleDef *module, Py_complex a, Py_complex b, +cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b, double rel_tol, double abs_tol) -/*[clinic end generated code: output=da0c535fb54e2310 input=df9636d7de1d4ac3]*/ +/*[clinic end generated code: output=8a2486cc6e0014d1 input=df9636d7de1d4ac3]*/ { double diff; diff --git a/Modules/expat/xmlrole.c b/Modules/expat/xmlrole.c index 9a8f85d..44772e2 100644 --- a/Modules/expat/xmlrole.c +++ b/Modules/expat/xmlrole.c @@ -2,6 +2,8 @@ See the file COPYING for copying permission. */ +#include + #ifdef COMPILED_FROM_DSP #include "winconfig.h" #elif defined(MACOS_CLASSIC) @@ -16,8 +18,6 @@ #endif #endif /* ndef COMPILED_FROM_DSP */ -#include - #include "expat_external.h" #include "internal.h" #include "xmlrole.h" diff --git a/Modules/expat/xmltok.c b/Modules/expat/xmltok.c index 205c07e..bf09dfc 100644 --- a/Modules/expat/xmltok.c +++ b/Modules/expat/xmltok.c @@ -2,6 +2,8 @@ See the file COPYING for copying permission. */ +#include + #ifdef COMPILED_FROM_DSP #include "winconfig.h" #elif defined(MACOS_CLASSIC) @@ -16,8 +18,6 @@ #endif #endif /* ndef COMPILED_FROM_DSP */ -#include - #include "expat_external.h" #include "internal.h" #include "xmltok.h" diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c index 4e6eb72..8875b26 100644 --- a/Modules/fcntlmodule.c +++ b/Modules/fcntlmodule.c @@ -26,7 +26,7 @@ conv_descriptor(PyObject *object, int *target) int fd = PyObject_AsFileDescriptor(object); if (fd < 0) - return 0; + return 0; *target = fd; return 1; } @@ -56,8 +56,8 @@ corresponding to the return value of the fcntl call in the C code. [clinic start generated code]*/ static PyObject * -fcntl_fcntl_impl(PyModuleDef *module, int fd, int code, PyObject *arg) -/*[clinic end generated code: output=afc5bfa74a03ef0d input=8cefbe59b29efbe2]*/ +fcntl_fcntl_impl(PyObject *module, int fd, int code, PyObject *arg) +/*[clinic end generated code: output=888fc93b51c295bd input=8cefbe59b29efbe2]*/ { unsigned int int_arg = 0; int ret; @@ -146,9 +146,9 @@ code. [clinic start generated code]*/ static PyObject * -fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, +fcntl_ioctl_impl(PyObject *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg) -/*[clinic end generated code: output=102faa0f7ebe2210 input=ede70c433cccbbb2]*/ +/*[clinic end generated code: output=7f7f5840c65991be input=ede70c433cccbbb2]*/ { #define IOCTL_BUFSZ 1024 /* We use the unsigned non-checked 'I' format for the 'code' parameter @@ -279,8 +279,8 @@ function is emulated using fcntl()). [clinic start generated code]*/ static PyObject * -fcntl_flock_impl(PyModuleDef *module, int fd, int code) -/*[clinic end generated code: output=c9035133a7dbfc96 input=b70a0a41ca22a8a0]*/ +fcntl_flock_impl(PyObject *module, int fd, int code) +/*[clinic end generated code: output=84059e2b37d2fc64 input=b70a0a41ca22a8a0]*/ { int ret; @@ -358,9 +358,9 @@ starts. `whence` is as with fileobj.seek(), specifically: [clinic start generated code]*/ static PyObject * -fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, +fcntl_lockf_impl(PyObject *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence) -/*[clinic end generated code: output=31af35eba08b9af7 input=3a5dc01b04371f1a]*/ +/*[clinic end generated code: output=4985e7a172e7461a input=3a5dc01b04371f1a]*/ { int ret; diff --git a/Modules/getpath.c b/Modules/getpath.c index 18deb60..c438b8e 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -762,7 +762,10 @@ calculate_path(void) if (defpath[0] != SEP) { wcscat(buf, prefix); - wcscat(buf, separator); + if (prefixsz >= 2 && prefix[prefixsz - 2] != SEP && + defpath[0] != (delim ? DELIM : L'\0')) { /* not empty */ + wcscat(buf, separator); + } } if (delim) { diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c index 403e434..3a134a0 100644 --- a/Modules/grpmodule.c +++ b/Modules/grpmodule.c @@ -93,8 +93,8 @@ If id is not valid, raise KeyError. [clinic start generated code]*/ static PyObject * -grp_getgrgid_impl(PyModuleDef *module, PyObject *id) -/*[clinic end generated code: output=8a11f5fdeb8c78a0 input=15fa0e2ccf5cda25]*/ +grp_getgrgid_impl(PyObject *module, PyObject *id) +/*[clinic end generated code: output=30797c289504a1ba input=15fa0e2ccf5cda25]*/ { PyObject *py_int_id; gid_t gid; @@ -131,8 +131,8 @@ If name is not valid, raise KeyError. [clinic start generated code]*/ static PyObject * -grp_getgrnam_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=cd47511f4854da8e input=08ded29affa3c863]*/ +grp_getgrnam_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=67905086f403c21c input=08ded29affa3c863]*/ { char *name_chars; struct group *p; @@ -163,8 +163,8 @@ to use YP/NIS and may not be accessible via getgrnam or getgrgid. [clinic start generated code]*/ static PyObject * -grp_getgrall_impl(PyModuleDef *module) -/*[clinic end generated code: output=add9037a20c202de input=d7df76c825c367df]*/ +grp_getgrall_impl(PyObject *module) +/*[clinic end generated code: output=585dad35e2e763d7 input=d7df76c825c367df]*/ { PyObject *d; struct group *p; diff --git a/Modules/hashtable.c b/Modules/hashtable.c index 133f313..fdddc19 100644 --- a/Modules/hashtable.c +++ b/Modules/hashtable.c @@ -327,7 +327,8 @@ _Py_hashtable_set(_Py_hashtable_t *ht, const void *key, entry->key_hash = key_hash; assert(data_size == ht->data_size); - memcpy(_Py_HASHTABLE_ENTRY_DATA(entry), data, data_size); + if (data) + memcpy(_Py_HASHTABLE_ENTRY_DATA(entry), data, data_size); _Py_slist_prepend(&ht->buckets[index], (_Py_slist_item_t*)entry); ht->entries++; diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 409922a..be0f498 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -155,8 +155,13 @@ static PyObject * groupby_setstate(groupbyobject *lz, PyObject *state) { PyObject *currkey, *currvalue, *tgtkey; - if (!PyArg_ParseTuple(state, "OOO", &currkey, &currvalue, &tgtkey)) + if (!PyTuple_Check(state)) { + PyErr_SetString(PyExc_TypeError, "state is not a tuple"); return NULL; + } + if (!PyArg_ParseTuple(state, "OOO", &currkey, &currvalue, &tgtkey)) { + return NULL; + } Py_INCREF(currkey); Py_XSETREF(lz->currkey, currkey); Py_INCREF(currvalue); @@ -736,8 +741,13 @@ tee_setstate(teeobject *to, PyObject *state) { teedataobject *tdo; int index; - if (!PyArg_ParseTuple(state, "O!i", &teedataobject_type, &tdo, &index)) + if (!PyTuple_Check(state)) { + PyErr_SetString(PyExc_TypeError, "state is not a tuple"); + return NULL; + } + if (!PyArg_ParseTuple(state, "O!i", &teedataobject_type, &tdo, &index)) { return NULL; + } if (index < 0 || index > LINKCELLS) { PyErr_SetString(PyExc_ValueError, "Index out of range"); return NULL; @@ -966,8 +976,13 @@ cycle_setstate(cycleobject *lz, PyObject *state) { PyObject *saved=NULL; int firstpass; - if (!PyArg_ParseTuple(state, "Oi", &saved, &firstpass)) + if (!PyTuple_Check(state)) { + PyErr_SetString(PyExc_TypeError, "state is not a tuple"); + return NULL; + } + if (!PyArg_ParseTuple(state, "O!i", &PyList_Type, &saved, &firstpass)) { return NULL; + } Py_XINCREF(saved); Py_XSETREF(lz->saved, saved); lz->firstpass = firstpass != 0; @@ -1891,8 +1906,18 @@ static PyObject * chain_setstate(chainobject *lz, PyObject *state) { PyObject *source, *active=NULL; - if (! PyArg_ParseTuple(state, "O|O", &source, &active)) + + if (!PyTuple_Check(state)) { + PyErr_SetString(PyExc_TypeError, "state is not a tuple"); + return NULL; + } + if (!PyArg_ParseTuple(state, "O|O", &source, &active)) { return NULL; + } + if (!PyIter_Check(source) || (active != NULL && !PyIter_Check(active))) { + PyErr_SetString(PyExc_TypeError, "Arguments must be iterators."); + return NULL; + } Py_INCREF(source); Py_XSETREF(lz->source, source); @@ -1911,7 +1936,7 @@ iterable, until all of the iterables are exhausted."); PyDoc_STRVAR(chain_from_iterable_doc, "chain.from_iterable(iterable) --> chain object\n\ \n\ -Alternate chain() contructor taking a single iterable argument\n\ +Alternate chain() constructor taking a single iterable argument\n\ that evaluates lazily."); static PyMethodDef chain_methods[] = { @@ -3251,10 +3276,15 @@ permutations_setstate(permutationsobject *po, PyObject *state) PyObject *indices, *cycles, *result; Py_ssize_t n, i; + if (!PyTuple_Check(state)) { + PyErr_SetString(PyExc_TypeError, "state is not a tuple"); + return NULL; + } if (!PyArg_ParseTuple(state, "O!O!", &PyTuple_Type, &indices, - &PyTuple_Type, &cycles)) + &PyTuple_Type, &cycles)) { return NULL; + } n = PyTuple_GET_SIZE(po->pool); if (PyTuple_GET_SIZE(indices) != n || @@ -3905,7 +3935,7 @@ static PyObject * count_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { countobject *lz; - int slow_mode = 0; + int fast_mode; Py_ssize_t cnt = 0; PyObject *long_cnt = NULL; PyObject *long_step = NULL; @@ -3922,16 +3952,26 @@ count_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return NULL; } + fast_mode = (long_cnt == NULL || PyLong_Check(long_cnt)) && + (long_step == NULL || PyLong_Check(long_step)); + + /* If not specified, start defaults to 0 */ if (long_cnt != NULL) { - cnt = PyLong_AsSsize_t(long_cnt); - if ((cnt == -1 && PyErr_Occurred()) || !PyLong_Check(long_cnt)) { - PyErr_Clear(); - slow_mode = 1; + if (fast_mode) { + assert(PyLong_Check(long_cnt)); + cnt = PyLong_AsSsize_t(long_cnt); + if (cnt == -1 && PyErr_Occurred()) { + PyErr_Clear(); + fast_mode = 0; + } } Py_INCREF(long_cnt); } else { cnt = 0; long_cnt = PyLong_FromLong(0); + if (long_cnt == NULL) { + return NULL; + } } /* If not specified, step defaults to 1 */ @@ -3947,21 +3987,24 @@ count_new(PyTypeObject *type, PyObject *args, PyObject *kwds) assert(long_cnt != NULL && long_step != NULL); /* Fast mode only works when the step is 1 */ - step = PyLong_AsLong(long_step); - if (step != 1) { - slow_mode = 1; - if (step == -1 && PyErr_Occurred()) - PyErr_Clear(); + if (fast_mode) { + assert(PyLong_Check(long_step)); + step = PyLong_AsLong(long_step); + if (step != 1) { + fast_mode = 0; + if (step == -1 && PyErr_Occurred()) + PyErr_Clear(); + } } - if (slow_mode) - cnt = PY_SSIZE_T_MAX; - else + if (fast_mode) Py_CLEAR(long_cnt); + else + cnt = PY_SSIZE_T_MAX; - assert((cnt != PY_SSIZE_T_MAX && long_cnt == NULL && !slow_mode) || - (cnt == PY_SSIZE_T_MAX && long_cnt != NULL && slow_mode)); - assert(slow_mode || + assert((cnt != PY_SSIZE_T_MAX && long_cnt == NULL && fast_mode) || + (cnt == PY_SSIZE_T_MAX && long_cnt != NULL && !fast_mode)); + assert(!fast_mode || (PyLong_Check(long_step) && PyLong_AS_LONG(long_step) == 1)); /* create countobject structure */ diff --git a/Modules/ld_so_aix.in b/Modules/ld_so_aix.in index add6b3e..f4eab40 100644 --- a/Modules/ld_so_aix.in +++ b/Modules/ld_so_aix.in @@ -70,6 +70,7 @@ if test ! -n "$*"; then fi makexp=`dirname $0`/makexp_aix +test -x "${makexp}" || makexp="@abs_srcdir@/makexp_aix" # Check for existence of compiler. CC=$1; shift diff --git a/Modules/makesetup b/Modules/makesetup index 90db42e..e204a05 100755 --- a/Modules/makesetup +++ b/Modules/makesetup @@ -29,6 +29,7 @@ # # Copying Makefile.pre to Makefile: # - insert an identifying comment at the start +# - replace _MODNAMES_ by the list of modules from Setup # - replace _MODOBJS_ by the list of objects from Setup (except for # Setup files after a -n option) # - replace _MODLIBS_ by the list of libraries from Setup @@ -82,7 +83,7 @@ esac NL='\ ' -# Setup to link with extra libraries when makeing shared extensions. +# Setup to link with extra libraries when making shared extensions. # Currently, only Cygwin needs this baggage. case `uname -s` in CYGWIN*) if test $libdir = . @@ -110,6 +111,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | # Rules appended by makedepend " >$rulesf DEFS= + NAMES= MODS= SHAREDMODS= OBJS= @@ -181,7 +183,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | *.*) echo 1>&2 "bad word $arg in $line" exit 1;; -u) skip=libs; libs="$libs -u";; - [a-zA-Z_]*) mods="$mods $arg";; + [a-zA-Z_]*) NAMES="$NAMES $arg"; mods="$mods $arg";; *) echo 1>&2 "bad word $arg in $line" exit 1;; esac @@ -280,6 +282,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | echo "1i\\" >$sedf str="# Generated automatically from $makepre by makesetup." echo "$str" >>$sedf + echo "s%_MODNAMES_%$NAMES%" >>$sedf echo "s%_MODOBJS_%$OBJS%" >>$sedf echo "s%_MODLIBS_%$LIBS%" >>$sedf echo "/Definitions added by makesetup/a$NL$NL$DEFS" >>$sedf diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index 7ebf8e8..b945bd6 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -1274,7 +1274,7 @@ count_set_bits(unsigned long n) /* Divide-and-conquer factorial algorithm * - * Based on the formula and psuedo-code provided at: + * Based on the formula and pseudo-code provided at: * http://www.luschny.de/math/factorial/binarysplitfact.html * * Faster algorithms exist, but they're more complicated and depend on diff --git a/Modules/md5module.c b/Modules/md5module.c index a9ebc8c..f94acc7 100644 --- a/Modules/md5module.c +++ b/Modules/md5module.c @@ -509,8 +509,8 @@ Return a new MD5 hash object; optionally initialized with a string. [clinic start generated code]*/ static PyObject * -_md5_md5_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=3527436a2090b956 input=d12ef8f72d684f7b]*/ +_md5_md5_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=2cfd0f8c091b97e6 input=d12ef8f72d684f7b]*/ { MD5object *new; Py_buffer buf; diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index bb98a99..4eb9274 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -90,8 +90,8 @@ typedef enum typedef struct { PyObject_HEAD char * data; - size_t size; - size_t pos; /* relative to offset */ + Py_ssize_t size; + Py_ssize_t pos; /* relative to offset */ #ifdef MS_WINDOWS PY_LONG_LONG offset; #else @@ -210,33 +210,32 @@ mmap_read_byte_method(mmap_object *self, PyObject *unused) { CHECK_VALID(NULL); - if (self->pos < self->size) { - char value = self->data[self->pos]; - self->pos += 1; - return Py_BuildValue("B", (unsigned char)value); - } else { + if (self->pos >= self->size) { PyErr_SetString(PyExc_ValueError, "read byte out of range"); return NULL; } + return PyLong_FromLong((unsigned char)self->data[self->pos++]); } static PyObject * mmap_read_line_method(mmap_object *self, PyObject *unused) { - char *start = self->data+self->pos; - char *eof = self->data+self->size; - char *eol; + Py_ssize_t remaining; + char *start, *eol; PyObject *result; CHECK_VALID(NULL); - eol = memchr(start, '\n', self->size - self->pos); + remaining = (self->pos < self->size) ? self->size - self->pos : 0; + if (!remaining) + return PyBytes_FromString(""); + start = self->data + self->pos; + eol = memchr(start, '\n', remaining); if (!eol) - eol = eof; + eol = self->data + self->size; else - ++eol; /* we're interested in the position after the - newline. */ + ++eol; /* advance past newline */ result = PyBytes_FromStringAndSize(start, (eol - start)); self->pos += (eol - start); return result; @@ -268,7 +267,7 @@ static PyObject * mmap_read_method(mmap_object *self, PyObject *args) { - Py_ssize_t num_bytes = -1, n; + Py_ssize_t num_bytes = PY_SSIZE_T_MAX, remaining; PyObject *result; CHECK_VALID(NULL); @@ -276,20 +275,10 @@ mmap_read_method(mmap_object *self, return(NULL); /* silently 'adjust' out-of-range requests */ - assert(self->size >= self->pos); - n = self->size - self->pos; - /* The difference can overflow, only if self->size is greater than - * PY_SSIZE_T_MAX. But then the operation cannot possibly succeed, - * because the mapped area and the returned string each need more - * than half of the addressable memory. So we clip the size, and let - * the code below raise MemoryError. - */ - if (n < 0) - n = PY_SSIZE_T_MAX; - if (num_bytes < 0 || num_bytes > n) { - num_bytes = n; - } - result = PyBytes_FromStringAndSize(self->data+self->pos, num_bytes); + remaining = (self->pos < self->size) ? self->size - self->pos : 0; + if (num_bytes < 0 || num_bytes > remaining) + num_bytes = remaining; + result = PyBytes_FromStringAndSize(&self->data[self->pos], num_bytes); self->pos += num_bytes; return result; } @@ -317,14 +306,14 @@ mmap_gfind(mmap_object *self, start += self->size; if (start < 0) start = 0; - else if ((size_t)start > self->size) + else if (start > self->size) start = self->size; if (end < 0) end += self->size; if (end < 0) end = 0; - else if ((size_t)end > self->size) + else if (end > self->size) end = self->size; start_p = self->data + start; @@ -399,13 +388,14 @@ mmap_write_method(mmap_object *self, return NULL; } - if ((self->pos + data.len) > self->size) { - PyErr_SetString(PyExc_ValueError, "data out of range"); + if (self->pos > self->size || self->size - self->pos < data.len) { PyBuffer_Release(&data); + PyErr_SetString(PyExc_ValueError, "data out of range"); return NULL; } - memcpy(self->data + self->pos, data.buf, data.len); - self->pos = self->pos + data.len; + + memcpy(&self->data[self->pos], data.buf, data.len); + self->pos += data.len; PyBuffer_Release(&data); Py_INCREF(Py_None); return Py_None; @@ -425,8 +415,7 @@ mmap_write_byte_method(mmap_object *self, return NULL; if (self->pos < self->size) { - *(self->data+self->pos) = value; - self->pos += 1; + self->data[self->pos++] = value; Py_INCREF(Py_None); return Py_None; } @@ -495,8 +484,14 @@ mmap_resize_method(mmap_object *self, if (!PyArg_ParseTuple(args, "n:resize", &new_size) || !is_resizeable(self)) { return NULL; + } + if (new_size < 0 || PY_SSIZE_T_MAX - new_size < self->offset) { + PyErr_SetString(PyExc_ValueError, "new size out of range"); + return NULL; + } + + { #ifdef MS_WINDOWS - } else { DWORD dwErrCode = 0; DWORD off_hi, off_lo, newSizeLow, newSizeHigh; /* First, unmap the file view */ @@ -546,15 +541,13 @@ mmap_resize_method(mmap_object *self, #ifdef UNIX #ifndef HAVE_MREMAP - } else { PyErr_SetString(PyExc_SystemError, "mmap: resizing not available--no mremap()"); return NULL; #else - } else { void *newmap; - if (ftruncate(self->fd, self->offset + new_size) == -1) { + if (self->fd != -1 && ftruncate(self->fd, self->offset + new_size) == -1) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } @@ -562,11 +555,11 @@ mmap_resize_method(mmap_object *self, #ifdef MREMAP_MAYMOVE newmap = mremap(self->data, self->size, new_size, MREMAP_MAYMOVE); #else - #if defined(__NetBSD__) - newmap = mremap(self->data, self->size, self->data, new_size, 0); - #else - newmap = mremap(self->data, self->size, new_size, 0); - #endif /* __NetBSD__ */ +#if defined(__NetBSD__) + newmap = mremap(self->data, self->size, self->data, new_size, 0); +#else + newmap = mremap(self->data, self->size, new_size, 0); +#endif /* __NetBSD__ */ #endif if (newmap == (void *)-1) { @@ -597,7 +590,7 @@ mmap_flush_method(mmap_object *self, PyObject *args) CHECK_VALID(NULL); if (!PyArg_ParseTuple(args, "|nn:flush", &offset, &size)) return NULL; - if ((size_t)(offset + size) > self->size) { + if (size < 0 || offset < 0 || self->size - offset < size) { PyErr_SetString(PyExc_ValueError, "flush values out of range"); return NULL; } @@ -630,20 +623,18 @@ mmap_seek_method(mmap_object *self, PyObject *args) if (!PyArg_ParseTuple(args, "n|i:seek", &dist, &how)) return NULL; else { - size_t where; + Py_ssize_t where; switch (how) { case 0: /* relative to start */ - if (dist < 0) - goto onoutofrange; where = dist; break; case 1: /* relative to current position */ - if ((Py_ssize_t)self->pos + dist < 0) + if (PY_SSIZE_T_MAX - self->pos < dist) goto onoutofrange; where = self->pos + dist; break; case 2: /* relative to end */ - if ((Py_ssize_t)self->size + dist < 0) + if (PY_SSIZE_T_MAX - self->size < dist) goto onoutofrange; where = self->size + dist; break; @@ -651,7 +642,7 @@ mmap_seek_method(mmap_object *self, PyObject *args) PyErr_SetString(PyExc_ValueError, "unknown seek type"); return NULL; } - if (where > self->size) + if (where > self->size || where < 0) goto onoutofrange; self->pos = where; Py_INCREF(Py_None); @@ -666,23 +657,27 @@ mmap_seek_method(mmap_object *self, PyObject *args) static PyObject * mmap_move_method(mmap_object *self, PyObject *args) { - unsigned long dest, src, cnt; + Py_ssize_t dest, src, cnt; CHECK_VALID(NULL); - if (!PyArg_ParseTuple(args, "kkk:move", &dest, &src, &cnt) || + if (!PyArg_ParseTuple(args, "nnn:move", &dest, &src, &cnt) || !is_writable(self)) { return NULL; } else { /* bounds check the values */ - if ((cnt + dest) < cnt || (cnt + src) < cnt || - src > self->size || (src + cnt) > self->size || - dest > self->size || (dest + cnt) > self->size) { - PyErr_SetString(PyExc_ValueError, - "source, destination, or count out of range"); - return NULL; - } - memmove(self->data+dest, self->data+src, cnt); + if (dest < 0 || src < 0 || cnt < 0) + goto bounds; + if (self->size - dest < cnt || self->size - src < cnt) + goto bounds; + + memmove(&self->data[dest], &self->data[src], cnt); + Py_INCREF(Py_None); return Py_None; + + bounds: + PyErr_SetString(PyExc_ValueError, + "source, destination, or count out of range"); + return NULL; } } @@ -785,7 +780,7 @@ static PyObject * mmap_item(mmap_object *self, Py_ssize_t i) { CHECK_VALID(NULL); - if (i < 0 || (size_t)i >= self->size) { + if (i < 0 || i >= self->size) { PyErr_SetString(PyExc_IndexError, "mmap index out of range"); return NULL; } @@ -802,7 +797,7 @@ mmap_subscript(mmap_object *self, PyObject *item) return NULL; if (i < 0) i += self->size; - if (i < 0 || (size_t)i >= self->size) { + if (i < 0 || i >= self->size) { PyErr_SetString(PyExc_IndexError, "mmap index out of range"); return NULL; @@ -870,7 +865,7 @@ mmap_ass_item(mmap_object *self, Py_ssize_t i, PyObject *v) const char *buf; CHECK_VALID(-1); - if (i < 0 || (size_t)i >= self->size) { + if (i < 0 || i >= self->size) { PyErr_SetString(PyExc_IndexError, "mmap index out of range"); return -1; } @@ -907,7 +902,7 @@ mmap_ass_subscript(mmap_object *self, PyObject *item, PyObject *value) return -1; if (i < 0) i += self->size; - if (i < 0 || (size_t)i >= self->size) { + if (i < 0 || i >= self->size) { PyErr_SetString(PyExc_IndexError, "mmap index out of range"); return -1; @@ -1074,32 +1069,6 @@ static PyTypeObject mmap_object_type = { }; -/* extract the map size from the given PyObject - - Returns -1 on error, with an appropriate Python exception raised. On - success, the map size is returned. */ -static Py_ssize_t -_GetMapSize(PyObject *o, const char* param) -{ - if (o == NULL) - return 0; - if (PyIndex_Check(o)) { - Py_ssize_t i = PyNumber_AsSsize_t(o, PyExc_OverflowError); - if (i==-1 && PyErr_Occurred()) - return -1; - if (i < 0) { - PyErr_Format(PyExc_OverflowError, - "memory mapped %s must be positive", - param); - return -1; - } - return i; - } - - PyErr_SetString(PyExc_TypeError, "map size must be an integral value"); - return -1; -} - #ifdef UNIX #ifdef HAVE_LARGEFILE_SUPPORT #define _Py_PARSE_OFF_T "L" @@ -1112,7 +1081,6 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) { struct _Py_stat_struct status; mmap_object *m_obj; - PyObject *map_size_obj = NULL; Py_ssize_t map_size; off_t offset = 0; int fd, flags = MAP_SHARED, prot = PROT_WRITE | PROT_READ; @@ -1122,13 +1090,15 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) "flags", "prot", "access", "offset", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iO|iii" _Py_PARSE_OFF_T, keywords, - &fd, &map_size_obj, &flags, &prot, + if (!PyArg_ParseTupleAndKeywords(args, kwdict, "in|iii" _Py_PARSE_OFF_T, keywords, + &fd, &map_size, &flags, &prot, &access, &offset)) return NULL; - map_size = _GetMapSize(map_size_obj, "size"); - if (map_size < 0) + if (map_size < 0) { + PyErr_SetString(PyExc_OverflowError, + "memory mapped length must be postiive"); return NULL; + } if (offset < 0) { PyErr_SetString(PyExc_OverflowError, "memory mapped offset must be positive"); @@ -1194,7 +1164,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) return NULL; } map_size = (Py_ssize_t) (status.st_size - offset); - } else if (offset + map_size > status.st_size) { + } else if (offset > status.st_size || status.st_size - offset < map_size) { PyErr_SetString(PyExc_ValueError, "mmap length is greater than file size"); return NULL; @@ -1203,8 +1173,8 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) m_obj = (mmap_object *)type->tp_alloc(type, 0); if (m_obj == NULL) {return NULL;} m_obj->data = NULL; - m_obj->size = (size_t) map_size; - m_obj->pos = (size_t) 0; + m_obj->size = map_size; + m_obj->pos = 0; m_obj->weakreflist = NULL; m_obj->exports = 0; m_obj->offset = offset; @@ -1264,7 +1234,6 @@ static PyObject * new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) { mmap_object *m_obj; - PyObject *map_size_obj = NULL; Py_ssize_t map_size; PY_LONG_LONG offset = 0, size; DWORD off_hi; /* upper 32 bits of offset */ @@ -1281,8 +1250,8 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) "tagname", "access", "offset", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iO|ziL", keywords, - &fileno, &map_size_obj, + if (!PyArg_ParseTupleAndKeywords(args, kwdict, "in|ziL", keywords, + &fileno, &map_size, &tagname, &access, &offset)) { return NULL; } @@ -1305,9 +1274,11 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) "mmap invalid access parameter."); } - map_size = _GetMapSize(map_size_obj, "size"); - if (map_size < 0) + if (map_size < 0) { + PyErr_SetString(PyExc_OverflowError, + "memory mapped length must be postiive"); return NULL; + } if (offset < 0) { PyErr_SetString(PyExc_OverflowError, "memory mapped offset must be positive"); diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c index d2fd5c8..5423308 100644 --- a/Modules/ossaudiodev.c +++ b/Modules/ossaudiodev.c @@ -925,11 +925,14 @@ static PyMethodDef oss_mixer_methods[] = { static PyObject * oss_getattro(oss_audio_t *self, PyObject *nameobj) { - char *name = ""; + const char *name = ""; PyObject * rval = NULL; - if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + if (PyUnicode_Check(nameobj)) { + name = PyUnicode_AsUTF8(nameobj); + if (name == NULL) + return NULL; + } if (strcmp(name, "closed") == 0) { rval = (self->fd == -1) ? Py_True : Py_False; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e5f58ab..3e446a5 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1515,7 +1515,9 @@ win32_xstat_impl(const char *path, struct _Py_stat_struct *result, /* Either the target doesn't exist, or we don't have access to get a handle to it. If the former, we need to return an error. If the latter, we can use attributes_from_dir. */ - if (GetLastError() != ERROR_SHARING_VIOLATION) + DWORD lastError = GetLastError(); + if (lastError != ERROR_ACCESS_DENIED && + lastError != ERROR_SHARING_VIOLATION) return -1; /* Could not get attributes on open file. Fall back to reading the directory. */ @@ -1525,7 +1527,7 @@ win32_xstat_impl(const char *path, struct _Py_stat_struct *result, if (info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) { if (traverse) { /* Should traverse, but could not open reparse point handle */ - SetLastError(ERROR_SHARING_VIOLATION); + SetLastError(lastError); return -1; } } @@ -1605,7 +1607,9 @@ win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, /* Either the target doesn't exist, or we don't have access to get a handle to it. If the former, we need to return an error. If the latter, we can use attributes_from_dir. */ - if (GetLastError() != ERROR_SHARING_VIOLATION) + DWORD lastError = GetLastError(); + if (lastError != ERROR_ACCESS_DENIED && + lastError != ERROR_SHARING_VIOLATION) return -1; /* Could not get attributes on open file. Fall back to reading the directory. */ @@ -1615,7 +1619,7 @@ win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result, if (info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) { if (traverse) { /* Should traverse, but could not open reparse point handle */ - SetLastError(ERROR_SHARING_VIOLATION); + SetLastError(lastError); return -1; } } @@ -2483,9 +2487,8 @@ It's an error to use dir_fd or follow_symlinks when specifying path as [clinic start generated code]*/ static PyObject * -os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, - int follow_symlinks) -/*[clinic end generated code: output=e4f7569f95d523ca input=099d356c306fa24a]*/ +os_stat_impl(PyObject *module, path_t *path, int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=7d4976e6f18a59c5 input=099d356c306fa24a]*/ { return posix_do_stat("stat", path, dir_fd, follow_symlinks); } @@ -2507,8 +2510,8 @@ Equivalent to stat(path, follow_symlinks=False). [clinic start generated code]*/ static PyObject * -os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=7a748e333fcb39bd input=0b7474765927b925]*/ +os_lstat_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=ef82a5d35ce8ab37 input=0b7474765927b925]*/ { int follow_symlinks = 0; return posix_do_stat("lstat", path, dir_fd, follow_symlinks); @@ -2518,8 +2521,8 @@ os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd) /*[clinic input] os.access -> bool - path: path_t(allow_fd=True) - Path to be tested; can be string, bytes, or open-file-descriptor int. + path: path_t + Path to be tested; can be string or bytes mode: int Operating-system mode bitfield. Can be F_OK to test existence, @@ -2555,9 +2558,9 @@ Note that most operations will use the effective uid/gid, therefore this [clinic start generated code]*/ static int -os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_access_impl(PyObject *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks) -/*[clinic end generated code: output=abaa53340210088d input=b75a756797af45ec]*/ +/*[clinic end generated code: output=cf84158bc90b1a77 input=8e8c3a6ba791fee3]*/ { int return_value; @@ -2648,8 +2651,8 @@ Return the name of the terminal device connected to 'fd'. [clinic start generated code]*/ static char * -os_ttyname_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=03ad3d5ccaef75c3 input=5f72ca83e76b3b45]*/ +os_ttyname_impl(PyObject *module, int fd) +/*[clinic end generated code: output=ed16ad216d813591 input=5f72ca83e76b3b45]*/ { char *ret; @@ -2668,8 +2671,8 @@ Return the name of the controlling terminal for this process. [clinic start generated code]*/ static PyObject * -os_ctermid_impl(PyModuleDef *module) -/*[clinic end generated code: output=1b73788201e0aebd input=3b87fdd52556382d]*/ +os_ctermid_impl(PyObject *module) +/*[clinic end generated code: output=02f017e6c9e620db input=3b87fdd52556382d]*/ { char *ret; char buffer[L_ctermid]; @@ -2699,8 +2702,8 @@ On some platforms, path may also be specified as an open file descriptor. [clinic start generated code]*/ static PyObject * -os_chdir_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=7358e3a20fb5aa93 input=1a4a15b4d12cb15d]*/ +os_chdir_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=3be6400eee26eaae input=1a4a15b4d12cb15d]*/ { int result; @@ -2743,8 +2746,8 @@ Equivalent to os.chdir(fd). [clinic start generated code]*/ static PyObject * -os_fchdir_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=361d30df6b2d3418 input=18e816479a2fa985]*/ +os_fchdir_impl(PyObject *module, int fd) +/*[clinic end generated code: output=42e064ec4dc00ab0 input=18e816479a2fa985]*/ { return posix_fildes_fd(fd, fchdir); } @@ -2784,9 +2787,9 @@ dir_fd and follow_symlinks may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=05e7f73b1a843ba2 input=7f1618e5e15cc196]*/ +/*[clinic end generated code: output=5cf6a94915cc7bff input=7f1618e5e15cc196]*/ { int result; @@ -2898,8 +2901,8 @@ Equivalent to os.chmod(fd, mode). [clinic start generated code]*/ static PyObject * -os_fchmod_impl(PyModuleDef *module, int fd, int mode) -/*[clinic end generated code: output=2ee31ca226d1ed33 input=8ab11975ca01ee5b]*/ +os_fchmod_impl(PyObject *module, int fd, int mode) +/*[clinic end generated code: output=afd9bc05b4e426b3 input=8ab11975ca01ee5b]*/ { int res; int async_err = 0; @@ -2931,8 +2934,8 @@ Equivalent to chmod(path, mode, follow_symlinks=False)." [clinic start generated code]*/ static PyObject * -os_lchmod_impl(PyModuleDef *module, path_t *path, int mode) -/*[clinic end generated code: output=7c0cc46588d89e46 input=90c5663c7465d24f]*/ +os_lchmod_impl(PyObject *module, path_t *path, int mode) +/*[clinic end generated code: output=082344022b51a1d5 input=90c5663c7465d24f]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -2966,9 +2969,9 @@ unavailable, using it will raise a NotImplementedError. [clinic start generated code]*/ static PyObject * -os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, +os_chflags_impl(PyObject *module, path_t *path, unsigned long flags, int follow_symlinks) -/*[clinic end generated code: output=ff2d6e73534a95b9 input=0327e29feb876236]*/ +/*[clinic end generated code: output=85571c6737661ce9 input=0327e29feb876236]*/ { int result; @@ -3008,8 +3011,8 @@ Equivalent to chflags(path, flags, follow_symlinks=False). [clinic start generated code]*/ static PyObject * -os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags) -/*[clinic end generated code: output=6741322fb949661b input=f9f82ea8b585ca9d]*/ +os_lchflags_impl(PyObject *module, path_t *path, unsigned long flags) +/*[clinic end generated code: output=30ae958695c07316 input=f9f82ea8b585ca9d]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3033,8 +3036,8 @@ Change root directory to path. [clinic start generated code]*/ static PyObject * -os_chroot_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=b6dbfabe74ecaa9d input=14822965652c3dc3]*/ +os_chroot_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=de80befc763a4475 input=14822965652c3dc3]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3057,8 +3060,8 @@ Force write of fd to disk. [clinic start generated code]*/ static PyObject * -os_fsync_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=83a350851064aea7 input=21c3645c056967f2]*/ +os_fsync_impl(PyObject *module, int fd) +/*[clinic end generated code: output=4a10d773f52b3584 input=21c3645c056967f2]*/ { return posix_fildes_fd(fd, fsync); } @@ -3073,8 +3076,8 @@ Force write of everything to disk. [clinic start generated code]*/ static PyObject * -os_sync_impl(PyModuleDef *module) -/*[clinic end generated code: output=ba524f656c201c40 input=84749fe5e9b404ff]*/ +os_sync_impl(PyObject *module) +/*[clinic end generated code: output=2796b1f0818cd71c input=84749fe5e9b404ff]*/ { Py_BEGIN_ALLOW_THREADS sync(); @@ -3098,8 +3101,8 @@ Force write of fd to disk without forcing update of metadata. [clinic start generated code]*/ static PyObject * -os_fdatasync_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=e0f04a3aff515b75 input=bc74791ee54dd291]*/ +os_fdatasync_impl(PyObject *module, int fd) +/*[clinic end generated code: output=b4b9698b5d7e26dd input=bc74791ee54dd291]*/ { return posix_fildes_fd(fd, fdatasync); } @@ -3147,9 +3150,9 @@ dir_fd and follow_symlinks may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, +os_chown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=e0a4559f394dbd91 input=a61cc35574814d5d]*/ +/*[clinic end generated code: output=4beadab0db5f70cd input=a61cc35574814d5d]*/ { int result; @@ -3217,8 +3220,8 @@ Equivalent to os.chown(fd, uid, gid). [clinic start generated code]*/ static PyObject * -os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid) -/*[clinic end generated code: output=7545abf8f6086d76 input=3af544ba1b13a0d7]*/ +os_fchown_impl(PyObject *module, int fd, uid_t uid, gid_t gid) +/*[clinic end generated code: output=97d21cbd5a4350a6 input=3af544ba1b13a0d7]*/ { int res; int async_err = 0; @@ -3251,8 +3254,8 @@ Equivalent to os.chown(path, uid, gid, follow_symlinks=False). [clinic start generated code]*/ static PyObject * -os_lchown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid) -/*[clinic end generated code: output=bb0d2da1579ac275 input=b1c6014d563a7161]*/ +os_lchown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid) +/*[clinic end generated code: output=25eaf6af412fdf2f input=b1c6014d563a7161]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3346,8 +3349,8 @@ Return a unicode string representing the current working directory. [clinic start generated code]*/ static PyObject * -os_getcwd_impl(PyModuleDef *module) -/*[clinic end generated code: output=efe3a8c0121525ea input=f069211bb70e3d39]*/ +os_getcwd_impl(PyObject *module) +/*[clinic end generated code: output=21badfae2ea99ddc input=f069211bb70e3d39]*/ { return posix_getcwd(0); } @@ -3360,8 +3363,8 @@ Return a bytes string representing the current working directory. [clinic start generated code]*/ static PyObject * -os_getcwdb_impl(PyModuleDef *module) -/*[clinic end generated code: output=7fce42ee4b2a296a input=f6f6a378dad3d9cb]*/ +os_getcwdb_impl(PyObject *module) +/*[clinic end generated code: output=3dd47909480e4824 input=f6f6a378dad3d9cb]*/ { return posix_getcwd(1); } @@ -3397,9 +3400,9 @@ src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your [clinic start generated code]*/ static PyObject * -os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks) -/*[clinic end generated code: output=f47a7e88f7b391b6 input=b0095ebbcbaa7e04]*/ +/*[clinic end generated code: output=7f00f6007fd5269a input=b0095ebbcbaa7e04]*/ { #ifdef MS_WINDOWS BOOL result; @@ -3738,8 +3741,8 @@ entries '.' and '..' even if they are present in the directory. [clinic start generated code]*/ static PyObject * -os_listdir_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=1fbe67c1f780c8b7 input=09e300416e3cd729]*/ +os_listdir_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=293045673fcd1a75 input=09e300416e3cd729]*/ { #if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR) return _listdir_windows_no_opendir(path, NULL); @@ -3759,8 +3762,8 @@ os._getfullpathname [clinic start generated code]*/ static PyObject * -os__getfullpathname_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=b90b1f103b08773f input=332ed537c29d0a3e]*/ +os__getfullpathname_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=bb8679d56845bc9b input=332ed537c29d0a3e]*/ { if (!path->narrow) { @@ -3810,8 +3813,8 @@ A helper function for samepath on windows. [clinic start generated code]*/ static PyObject * -os__getfinalpathname_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=8be81a5f51a34bcf input=71d5e89334891bf4]*/ +os__getfinalpathname_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=9bd78d0e52782e75 input=71d5e89334891bf4]*/ { HANDLE hFile; int buf_size; @@ -3862,27 +3865,27 @@ os__getfinalpathname_impl(PyModuleDef *module, PyObject *path) return result; } -PyDoc_STRVAR(posix__isdir__doc__, -"Return true if the pathname refers to an existing directory."); - /*[clinic input] os._isdir path: path_t / +Return true if the pathname refers to an existing directory. [clinic start generated code]*/ static PyObject * -os__isdir_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=f17b2d4e1994b0ff input=e794f12faab62a2a]*/ +os__isdir_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=75f56f32720836cb input=5e0800149c0ad95f]*/ { DWORD attributes; + Py_BEGIN_ALLOW_THREADS if (!path->narrow) attributes = GetFileAttributesW(path->wide); else attributes = GetFileAttributesA(path->narrow); + Py_END_ALLOW_THREADS if (attributes == INVALID_FILE_ATTRIBUTES) Py_RETURN_FALSE; @@ -3903,8 +3906,8 @@ A helper function for ismount on Win32. [clinic start generated code]*/ static PyObject * -os__getvolumepathname_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=79a0ba729f956dbe input=7eacadc40acbda6b]*/ +os__getvolumepathname_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=cbdcbd1059ceef4c input=7eacadc40acbda6b]*/ { PyObject *result; wchar_t *path_wchar, *mountpath=NULL; @@ -3971,8 +3974,8 @@ The mode argument is ignored on Windows. [clinic start generated code]*/ static PyObject * -os_mkdir_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd) -/*[clinic end generated code: output=8bf1f738873ef2c5 input=e965f68377e9b1ce]*/ +os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd) +/*[clinic end generated code: output=a70446903abe821f input=e965f68377e9b1ce]*/ { int result; @@ -4023,8 +4026,8 @@ Add increment to the priority of process and return the new priority. [clinic start generated code]*/ static PyObject * -os_nice_impl(PyModuleDef *module, int increment) -/*[clinic end generated code: output=8870418a3fc07b51 input=864be2d402a21da2]*/ +os_nice_impl(PyObject *module, int increment) +/*[clinic end generated code: output=9dad8a9da8109943 input=864be2d402a21da2]*/ { int value; @@ -4063,8 +4066,8 @@ Return program scheduling priority. [clinic start generated code]*/ static PyObject * -os_getpriority_impl(PyModuleDef *module, int which, int who) -/*[clinic end generated code: output=4759937aa5b67ed6 input=9be615d40e2544ef]*/ +os_getpriority_impl(PyObject *module, int which, int who) +/*[clinic end generated code: output=c41b7b63c7420228 input=9be615d40e2544ef]*/ { int retval; @@ -4089,8 +4092,8 @@ Set program scheduling priority. [clinic start generated code]*/ static PyObject * -os_setpriority_impl(PyModuleDef *module, int which, int who, int priority) -/*[clinic end generated code: output=6497d3301547e7d5 input=710ccbf65b9dc513]*/ +os_setpriority_impl(PyObject *module, int which, int who, int priority) +/*[clinic end generated code: output=3d910d95a7771eb2 input=710ccbf65b9dc513]*/ { int retval; @@ -4177,9 +4180,9 @@ src_dir_fd and dst_dir_fd, may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_rename_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=08033bb2ec27fb5f input=faa61c847912c850]*/ +/*[clinic end generated code: output=59e803072cf41230 input=faa61c847912c850]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 0); } @@ -4198,9 +4201,9 @@ src_dir_fd and dst_dir_fd, may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, - int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=131d012eed8d3b8b input=25515dfb107c8421]*/ +os_replace_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, + int dst_dir_fd) +/*[clinic end generated code: output=1968c02e7857422b input=25515dfb107c8421]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 1); } @@ -4222,8 +4225,8 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_rmdir_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=cabadec80d5a77c7 input=38c8b375ca34a7e2]*/ +os_rmdir_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=080eb54f506e8301 input=38c8b375ca34a7e2]*/ { int result; @@ -4262,8 +4265,8 @@ Execute the command in a subshell. [clinic start generated code]*/ static long -os_system_impl(PyModuleDef *module, Py_UNICODE *command) -/*[clinic end generated code: output=4c3bd5abcd9c29e7 input=303f5ce97df606b0]*/ +os_system_impl(PyObject *module, Py_UNICODE *command) +/*[clinic end generated code: output=96c4dffee36dfb48 input=303f5ce97df606b0]*/ { long result; Py_BEGIN_ALLOW_THREADS @@ -4281,8 +4284,8 @@ Execute the command in a subshell. [clinic start generated code]*/ static long -os_system_impl(PyModuleDef *module, PyObject *command) -/*[clinic end generated code: output=800f775e10b7be55 input=86a58554ba6094af]*/ +os_system_impl(PyObject *module, PyObject *command) +/*[clinic end generated code: output=290fc437dd4f33a0 input=86a58554ba6094af]*/ { long result; char *bytes = PyBytes_AsString(command); @@ -4305,8 +4308,8 @@ Set the current numeric umask and return the previous umask. [clinic start generated code]*/ static PyObject * -os_umask_impl(PyModuleDef *module, int mask) -/*[clinic end generated code: output=9e1fe3c9f14d6a05 input=ab6bfd9b24d8a7e8]*/ +os_umask_impl(PyObject *module, int mask) +/*[clinic end generated code: output=a2e33ce3bc1a6e33 input=ab6bfd9b24d8a7e8]*/ { int i = (int)umask(mask); if (i < 0) @@ -4371,8 +4374,8 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=474afd5cd09b237e input=d7bcde2b1b2a2552]*/ +os_unlink_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=621797807b9963b1 input=d7bcde2b1b2a2552]*/ { int result; @@ -4414,8 +4417,8 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_remove_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=d0d5149e64832b9e input=e05c5ab55cd30983]*/ +os_remove_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=a8535b28f0068883 input=e05c5ab55cd30983]*/ { return os_unlink_impl(module, path, dir_fd); } @@ -4460,8 +4463,8 @@ The object behaves like a named tuple with the following fields: [clinic start generated code]*/ static PyObject * -os_uname_impl(PyModuleDef *module) -/*[clinic end generated code: output=01e1421b757e753f input=e68bd246db3043ed]*/ +os_uname_impl(PyObject *module) +/*[clinic end generated code: output=e6a49cf1a1508a19 input=e68bd246db3043ed]*/ { struct utsname u; int res; @@ -4710,9 +4713,9 @@ dir_fd and follow_symlinks may not be available on your platform. [clinic start generated code]*/ static PyObject * -os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, - PyObject *ns, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=31f3434e560ba2f0 input=081cdc54ca685385]*/ +os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, + int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=cfcac69d027b82cf input=081cdc54ca685385]*/ { #ifdef MS_WINDOWS HANDLE hFile; @@ -4880,8 +4883,8 @@ Exit to the system with specified status, without normal exit processing. [clinic start generated code]*/ static PyObject * -os__exit_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=472a3cbaf68f3621 input=5e6d57556b0c4a62]*/ +os__exit_impl(PyObject *module, int status) +/*[clinic end generated code: output=116e52d9c2260d54 input=5e6d57556b0c4a62]*/ { _exit(status); return NULL; /* Make gcc -Wall happy */ @@ -5036,8 +5039,8 @@ Execute an executable path with arguments, replacing current process. [clinic start generated code]*/ static PyObject * -os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv) -/*[clinic end generated code: output=9221f08143146fff input=96041559925e5229]*/ +os_execv_impl(PyObject *module, PyObject *path, PyObject *argv) +/*[clinic end generated code: output=b21dc34deeb5b004 input=96041559925e5229]*/ { char *path_char; char **argvlist; @@ -5086,9 +5089,8 @@ Execute an executable path with arguments, replacing current process. [clinic start generated code]*/ static PyObject * -os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, - PyObject *env) -/*[clinic end generated code: output=181884fcdb21508e input=626804fa092606d9]*/ +os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env) +/*[clinic end generated code: output=ff9fa8e4da8bde58 input=626804fa092606d9]*/ { char **argvlist = NULL; char **envlist; @@ -5157,8 +5159,8 @@ Execute the program specified by path in a new process. [clinic start generated code]*/ static PyObject * -os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv) -/*[clinic end generated code: output=140a7945484c8cc5 input=042c91dfc1e6debc]*/ +os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv) +/*[clinic end generated code: output=c427c0ce40f10638 input=042c91dfc1e6debc]*/ { char *path_char; char **argvlist; @@ -5184,6 +5186,16 @@ os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv) "spawnv() arg 2 must be a tuple or list"); return NULL; } +#ifdef MS_WINDOWS + /* Avoid changing behavior in maintenance release, but + the previous Windows behavior was to crash, so this + is a "compatible" improvement. */ + if (argc == 0) { + PyErr_SetString(PyExc_ValueError, + "spawnv() arg 2 cannot be empty"); + return NULL; + } +#endif argvlist = PyMem_NEW(char *, argc+1); if (argvlist == NULL) { @@ -5198,6 +5210,15 @@ os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv) "spawnv() arg 2 must contain only strings"); return NULL; } +#ifdef MS_WINDOWS + if (i == 0 && !argvlist[0][0]) { + free_string_array(argvlist, i); + PyErr_SetString( + PyExc_ValueError, + "spawnv() arg 2 first element cannot be empty"); + return NULL; + } +#endif } argvlist[argc] = NULL; @@ -5205,7 +5226,9 @@ os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv) mode = _P_OVERLAY; Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH spawnval = _spawnv(mode, path_char, argvlist); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS free_string_array(argvlist, argc); @@ -5234,9 +5257,9 @@ Execute the program specified by path in a new process. [clinic start generated code]*/ static PyObject * -os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, - PyObject *argv, PyObject *env) -/*[clinic end generated code: output=e7f5f0703610531f input=02362fd937963f8f]*/ +os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, + PyObject *env) +/*[clinic end generated code: output=ebcfa5f7ba2f4219 input=02362fd937963f8f]*/ { char *path_char; char **argvlist; @@ -5295,7 +5318,9 @@ os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, mode = _P_OVERLAY; Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH spawnval = _spawnve(mode, path_char, argvlist, envlist); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (spawnval == -1) @@ -5325,8 +5350,8 @@ Return 0 to child process and PID of child to parent process. [clinic start generated code]*/ static PyObject * -os_fork1_impl(PyModuleDef *module) -/*[clinic end generated code: output=e27b4f66419c9dcf input=12db02167893926e]*/ +os_fork1_impl(PyObject *module) +/*[clinic end generated code: output=0de8e67ce2a310bc input=12db02167893926e]*/ { pid_t pid; int result = 0; @@ -5362,8 +5387,8 @@ Return 0 to child process and PID of child to parent process. [clinic start generated code]*/ static PyObject * -os_fork_impl(PyModuleDef *module) -/*[clinic end generated code: output=898b1ecd3498ba12 input=13c956413110eeaa]*/ +os_fork_impl(PyObject *module) +/*[clinic end generated code: output=3626c81f98985d49 input=13c956413110eeaa]*/ { pid_t pid; int result = 0; @@ -5400,8 +5425,8 @@ Get the maximum scheduling priority for policy. [clinic start generated code]*/ static PyObject * -os_sched_get_priority_max_impl(PyModuleDef *module, int policy) -/*[clinic end generated code: output=a6a30fa5071f2d81 input=2097b7998eca6874]*/ +os_sched_get_priority_max_impl(PyObject *module, int policy) +/*[clinic end generated code: output=9e465c6e43130521 input=2097b7998eca6874]*/ { int max; @@ -5421,8 +5446,8 @@ Get the minimum scheduling priority for policy. [clinic start generated code]*/ static PyObject * -os_sched_get_priority_min_impl(PyModuleDef *module, int policy) -/*[clinic end generated code: output=5ca3ed6bc43e9b20 input=21bc8fa0d70983bf]*/ +os_sched_get_priority_min_impl(PyObject *module, int policy) +/*[clinic end generated code: output=7595c1138cc47a6d input=21bc8fa0d70983bf]*/ { int min = sched_get_priority_min(policy); if (min < 0) @@ -5444,8 +5469,8 @@ Passing 0 for pid returns the scheduling policy for the calling process. [clinic start generated code]*/ static PyObject * -os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=8cd63c15caf54fa9 input=5f14cfd1f189e1a0]*/ +os_sched_getscheduler_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=dce4c0bd3f1b34c8 input=5f14cfd1f189e1a0]*/ { int policy; @@ -5537,9 +5562,9 @@ param is an instance of sched_param. [clinic start generated code]*/ static PyObject * -os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, +os_sched_setscheduler_impl(PyObject *module, pid_t pid, int policy, struct sched_param *param) -/*[clinic end generated code: output=37053e5c528c35c9 input=c581f9469a5327dd]*/ +/*[clinic end generated code: output=b0ac0a70d3b1d705 input=c581f9469a5327dd]*/ { /* ** sched_setscheduler() returns 0 in Linux, but the previous @@ -5566,8 +5591,8 @@ Return value is an instance of sched_param. [clinic start generated code]*/ static PyObject * -os_sched_getparam_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=f42c5bd2604ecd08 input=18a1ef9c2efae296]*/ +os_sched_getparam_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=b194e8708dcf2db8 input=18a1ef9c2efae296]*/ { struct sched_param param; PyObject *result; @@ -5601,9 +5626,9 @@ param should be an instance of sched_param. [clinic start generated code]*/ static PyObject * -os_sched_setparam_impl(PyModuleDef *module, pid_t pid, +os_sched_setparam_impl(PyObject *module, pid_t pid, struct sched_param *param) -/*[clinic end generated code: output=b7a3c589436cec9b input=6b8d6dfcecdc21bd]*/ +/*[clinic end generated code: output=8af013f78a32b591 input=6b8d6dfcecdc21bd]*/ { if (sched_setparam(pid, param)) return posix_error(); @@ -5624,8 +5649,8 @@ Value returned is a float. [clinic start generated code]*/ static double -os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=7adc137a86dea581 input=2a973da15cca6fae]*/ +os_sched_rr_get_interval_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=7e2d935833ab47dc input=2a973da15cca6fae]*/ { struct timespec interval; if (sched_rr_get_interval(pid, &interval)) { @@ -5644,8 +5669,8 @@ Voluntarily relinquish the CPU. [clinic start generated code]*/ static PyObject * -os_sched_yield_impl(PyModuleDef *module) -/*[clinic end generated code: output=d7bd51869c4cb6a8 input=e54d6f98189391d4]*/ +os_sched_yield_impl(PyObject *module) +/*[clinic end generated code: output=902323500f222cac input=e54d6f98189391d4]*/ { if (sched_yield()) return posix_error(); @@ -5668,8 +5693,8 @@ mask should be an iterable of integers identifying CPUs. [clinic start generated code]*/ static PyObject * -os_sched_setaffinity_impl(PyModuleDef *module, pid_t pid, PyObject *mask) -/*[clinic end generated code: output=582bcbf40d3253a9 input=a0791a597c7085ba]*/ +os_sched_setaffinity_impl(PyObject *module, pid_t pid, PyObject *mask) +/*[clinic end generated code: output=882d7dd9a229335b input=a0791a597c7085ba]*/ { int ncpus; size_t setsize; @@ -5764,8 +5789,8 @@ The affinity is returned as a set of CPU identifiers. [clinic start generated code]*/ static PyObject * -os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=b431a8f310e369e7 input=eaf161936874b8a1]*/ +os_sched_getaffinity_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=f726f2c193c17a4f input=eaf161936874b8a1]*/ { int cpu, ncpus, count; size_t setsize; @@ -5860,8 +5885,8 @@ for both the master and slave ends. [clinic start generated code]*/ static PyObject * -os_openpty_impl(PyModuleDef *module) -/*[clinic end generated code: output=358e571c1ba135ee input=f3d99fd99e762907]*/ +os_openpty_impl(PyObject *module) +/*[clinic end generated code: output=98841ce5ec9cef3c input=f3d99fd99e762907]*/ { int master_fd = -1, slave_fd = -1; #ifndef HAVE_OPENPTY @@ -5962,8 +5987,8 @@ To both, return fd of newly opened pseudo-terminal. [clinic start generated code]*/ static PyObject * -os_forkpty_impl(PyModuleDef *module) -/*[clinic end generated code: output=a11b8391dce3cb57 input=f1f7f4bae3966010]*/ +os_forkpty_impl(PyObject *module) +/*[clinic end generated code: output=60d0a5c7512e4087 input=f1f7f4bae3966010]*/ { int master_fd = -1, result = 0; pid_t pid; @@ -5998,8 +6023,8 @@ Return the current process's effective group id. [clinic start generated code]*/ static PyObject * -os_getegid_impl(PyModuleDef *module) -/*[clinic end generated code: output=90f433a8c0b1d919 input=1596f79ad1107d5d]*/ +os_getegid_impl(PyObject *module) +/*[clinic end generated code: output=67d9be7ac68898a2 input=1596f79ad1107d5d]*/ { return _PyLong_FromGid(getegid()); } @@ -6014,8 +6039,8 @@ Return the current process's effective user id. [clinic start generated code]*/ static PyObject * -os_geteuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=1a532c4a66874357 input=4644c662d3bd9f19]*/ +os_geteuid_impl(PyObject *module) +/*[clinic end generated code: output=ea1b60f0d6abb66e input=4644c662d3bd9f19]*/ { return _PyLong_FromUid(geteuid()); } @@ -6030,8 +6055,8 @@ Return the current process's group id. [clinic start generated code]*/ static PyObject * -os_getgid_impl(PyModuleDef *module) -/*[clinic end generated code: output=91a22021b74ea46b input=58796344cd87c0f6]*/ +os_getgid_impl(PyObject *module) +/*[clinic end generated code: output=4f28ebc9d3e5dfcf input=58796344cd87c0f6]*/ { return _PyLong_FromGid(getgid()); } @@ -6045,8 +6070,8 @@ Return the current process id. [clinic start generated code]*/ static PyObject * -os_getpid_impl(PyModuleDef *module) -/*[clinic end generated code: output=8fbf3a934ee09e62 input=5a9a00f0ab68aa00]*/ +os_getpid_impl(PyObject *module) +/*[clinic end generated code: output=9ea6fdac01ed2b3c input=5a9a00f0ab68aa00]*/ { return PyLong_FromPid(getpid()); } @@ -6137,8 +6162,8 @@ Return list of supplemental group IDs for the process. [clinic start generated code]*/ static PyObject * -os_getgroups_impl(PyModuleDef *module) -/*[clinic end generated code: output=6e7c4fd2db6d5c60 input=d3f109412e6a155c]*/ +os_getgroups_impl(PyObject *module) +/*[clinic end generated code: output=42b0c17758561b56 input=d3f109412e6a155c]*/ { PyObject *result = NULL; @@ -6292,8 +6317,8 @@ Call the system call getpgid(), and return the result. [clinic start generated code]*/ static PyObject * -os_getpgid_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=70e713b4d54b7c61 input=39d710ae3baaf1c7]*/ +os_getpgid_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=1db95a97be205d18 input=39d710ae3baaf1c7]*/ { pid_t pgid = getpgid(pid); if (pgid < 0) @@ -6311,8 +6336,8 @@ Return the current process group id. [clinic start generated code]*/ static PyObject * -os_getpgrp_impl(PyModuleDef *module) -/*[clinic end generated code: output=cf3403585846811f input=6846fb2bb9a3705e]*/ +os_getpgrp_impl(PyObject *module) +/*[clinic end generated code: output=c4fc381e51103cf3 input=6846fb2bb9a3705e]*/ { #ifdef GETPGRP_HAVE_ARG return PyLong_FromPid(getpgrp(0)); @@ -6331,8 +6356,8 @@ Make the current process the leader of its process group. [clinic start generated code]*/ static PyObject * -os_setpgrp_impl(PyModuleDef *module) -/*[clinic end generated code: output=59650f55a963d7ac input=1f0619fcb5731e7e]*/ +os_setpgrp_impl(PyObject *module) +/*[clinic end generated code: output=2554735b0a60f0a0 input=1f0619fcb5731e7e]*/ { #ifdef SETPGRP_HAVE_ARG if (setpgrp(0, 0) < 0) @@ -6400,8 +6425,8 @@ return its id; others systems will return the id of the 'init' process (1). [clinic start generated code]*/ static PyObject * -os_getppid_impl(PyModuleDef *module) -/*[clinic end generated code: output=4e49c8e7a8738cd2 input=e637cb87539c030e]*/ +os_getppid_impl(PyObject *module) +/*[clinic end generated code: output=43b2a946a8c603b4 input=e637cb87539c030e]*/ { #ifdef MS_WINDOWS return win32_getppid(); @@ -6420,8 +6445,8 @@ Return the actual login name. [clinic start generated code]*/ static PyObject * -os_getlogin_impl(PyModuleDef *module) -/*[clinic end generated code: output=037ebdb3e4b5dac1 input=2a21ab1e917163df]*/ +os_getlogin_impl(PyObject *module) +/*[clinic end generated code: output=a32e66a7e5715dac input=2a21ab1e917163df]*/ { PyObject *result = NULL; #ifdef MS_WINDOWS @@ -6463,8 +6488,8 @@ Return the current process's user id. [clinic start generated code]*/ static PyObject * -os_getuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=03a8b894cefb3fa5 input=b53c8b35f110a516]*/ +os_getuid_impl(PyObject *module) +/*[clinic end generated code: output=415c0b401ebed11a input=b53c8b35f110a516]*/ { return _PyLong_FromUid(getuid()); } @@ -6487,8 +6512,8 @@ Kill a process with a signal. [clinic start generated code]*/ static PyObject * -os_kill_impl(PyModuleDef *module, pid_t pid, Py_ssize_t signal) -/*[clinic end generated code: output=74f907dd00a83c26 input=61a36b86ca275ab9]*/ +os_kill_impl(PyObject *module, pid_t pid, Py_ssize_t signal) +/*[clinic end generated code: output=8e346a6701c88568 input=61a36b86ca275ab9]*/ #ifndef MS_WINDOWS { if (kill(pid, (int)signal) == -1) @@ -6548,8 +6573,8 @@ Kill a process group with a signal. [clinic start generated code]*/ static PyObject * -os_killpg_impl(PyModuleDef *module, pid_t pgid, int signal) -/*[clinic end generated code: output=3434a766ef945f93 input=38b5449eb8faec19]*/ +os_killpg_impl(PyObject *module, pid_t pgid, int signal) +/*[clinic end generated code: output=6dbcd2f1fdf5fdba input=38b5449eb8faec19]*/ { /* XXX some man pages make the `pgid` parameter an int, others a pid_t. Since getpgrp() returns a pid_t, we assume killpg should @@ -6576,8 +6601,8 @@ Lock program segments into memory."); [clinic start generated code]*/ static PyObject * -os_plock_impl(PyModuleDef *module, int op) -/*[clinic end generated code: output=5cb851f81b914984 input=e6e5e348e1525f60]*/ +os_plock_impl(PyObject *module, int op) +/*[clinic end generated code: output=81424167033b168e input=e6e5e348e1525f60]*/ { if (plock(op) == -1) return posix_error(); @@ -6597,8 +6622,8 @@ Set the current process's user id. [clinic start generated code]*/ static PyObject * -os_setuid_impl(PyModuleDef *module, uid_t uid) -/*[clinic end generated code: output=941ea9a8d1e5d565 input=c921a3285aa22256]*/ +os_setuid_impl(PyObject *module, uid_t uid) +/*[clinic end generated code: output=a0a41fd0d1ec555f input=c921a3285aa22256]*/ { if (setuid(uid) < 0) return posix_error(); @@ -6618,8 +6643,8 @@ Set the current process's effective user id. [clinic start generated code]*/ static PyObject * -os_seteuid_impl(PyModuleDef *module, uid_t euid) -/*[clinic end generated code: output=66f4f6823a648d6d input=ba93d927e4781aa9]*/ +os_seteuid_impl(PyObject *module, uid_t euid) +/*[clinic end generated code: output=102e3ad98361519a input=ba93d927e4781aa9]*/ { if (seteuid(euid) < 0) return posix_error(); @@ -6639,8 +6664,8 @@ Set the current process's effective group id. [clinic start generated code]*/ static PyObject * -os_setegid_impl(PyModuleDef *module, gid_t egid) -/*[clinic end generated code: output=ca094a69a081a60f input=4080526d0ccd6ce3]*/ +os_setegid_impl(PyObject *module, gid_t egid) +/*[clinic end generated code: output=4e4b825a6a10258d input=4080526d0ccd6ce3]*/ { if (setegid(egid) < 0) return posix_error(); @@ -6661,8 +6686,8 @@ Set the current process's real and effective user ids. [clinic start generated code]*/ static PyObject * -os_setreuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid) -/*[clinic end generated code: output=b2938c3e73d27ec7 input=0ca8978de663880c]*/ +os_setreuid_impl(PyObject *module, uid_t ruid, uid_t euid) +/*[clinic end generated code: output=62d991210006530a input=0ca8978de663880c]*/ { if (setreuid(ruid, euid) < 0) { return posix_error(); @@ -6686,8 +6711,8 @@ Set the current process's real and effective group ids. [clinic start generated code]*/ static PyObject * -os_setregid_impl(PyModuleDef *module, gid_t rgid, gid_t egid) -/*[clinic end generated code: output=db18f1839ababe3d input=c59499f72846db78]*/ +os_setregid_impl(PyObject *module, gid_t rgid, gid_t egid) +/*[clinic end generated code: output=aa803835cf5342f3 input=c59499f72846db78]*/ { if (setregid(rgid, egid) < 0) return posix_error(); @@ -6706,8 +6731,8 @@ Set the current process's group id. [clinic start generated code]*/ static PyObject * -os_setgid_impl(PyModuleDef *module, gid_t gid) -/*[clinic end generated code: output=756cb42c6abd9d87 input=27d30c4059045dc6]*/ +os_setgid_impl(PyObject *module, gid_t gid) +/*[clinic end generated code: output=bdccd7403f6ad8c3 input=27d30c4059045dc6]*/ { if (setgid(gid) < 0) return posix_error(); @@ -6727,8 +6752,8 @@ Set the groups of the current process to list. [clinic start generated code]*/ static PyObject * -os_setgroups(PyModuleDef *module, PyObject *groups) -/*[clinic end generated code: output=7945c2e3cc817c58 input=fa742ca3daf85a7e]*/ +os_setgroups(PyObject *module, PyObject *groups) +/*[clinic end generated code: output=3fcb32aad58c5ecd input=fa742ca3daf85a7e]*/ { int i, len; gid_t grouplist[MAX_GROUPS]; @@ -6842,8 +6867,8 @@ Returns a tuple of information about the child process: [clinic start generated code]*/ static PyObject * -os_wait3_impl(PyModuleDef *module, int options) -/*[clinic end generated code: output=e18af4924dc54945 input=8ac4c56956b61710]*/ +os_wait3_impl(PyObject *module, int options) +/*[clinic end generated code: output=92c3224e6f28217a input=8ac4c56956b61710]*/ { pid_t pid; struct rusage ru; @@ -6879,8 +6904,8 @@ Returns a tuple of information about the child process: [clinic start generated code]*/ static PyObject * -os_wait4_impl(PyModuleDef *module, pid_t pid, int options) -/*[clinic end generated code: output=714f19e6ff01e099 input=d11deed0750600ba]*/ +os_wait4_impl(PyObject *module, pid_t pid, int options) +/*[clinic end generated code: output=66195aa507b35f70 input=d11deed0750600ba]*/ { pid_t res; struct rusage ru; @@ -6921,8 +6946,8 @@ no children in a waitable state. [clinic start generated code]*/ static PyObject * -os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options) -/*[clinic end generated code: output=5c0192750e22fa2e input=d8e7f76e052b7920]*/ +os_waitid_impl(PyObject *module, idtype_t idtype, id_t id, int options) +/*[clinic end generated code: output=5d2e1c0bde61f4d8 input=d8e7f76e052b7920]*/ { PyObject *result; int res; @@ -6976,8 +7001,8 @@ The options argument is ignored on Windows. [clinic start generated code]*/ static PyObject * -os_waitpid_impl(PyModuleDef *module, pid_t pid, int options) -/*[clinic end generated code: output=5e3593353d54b15b input=0bf1666b8758fda3]*/ +os_waitpid_impl(PyObject *module, pid_t pid, int options) +/*[clinic end generated code: output=5c37c06887a20270 input=0bf1666b8758fda3]*/ { pid_t res; int async_err = 0; @@ -7011,8 +7036,8 @@ The options argument is ignored on Windows. [clinic start generated code]*/ static PyObject * -os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options) -/*[clinic end generated code: output=fc1d520db019625f input=444c8f51cca5b862]*/ +os_waitpid_impl(PyObject *module, Py_intptr_t pid, int options) +/*[clinic end generated code: output=15f1ce005a346b09 input=444c8f51cca5b862]*/ { int status; Py_intptr_t res; @@ -7020,7 +7045,9 @@ os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options) do { Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH res = _cwait(&status, pid, options); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS } while (res < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals())); if (res < 0) @@ -7043,8 +7070,8 @@ Returns a tuple of information about the child process: [clinic start generated code]*/ static PyObject * -os_wait_impl(PyModuleDef *module) -/*[clinic end generated code: output=4a7f4978393e0654 input=03b0182d4a4700ce]*/ +os_wait_impl(PyObject *module) +/*[clinic end generated code: output=6bc419ac32fb364b input=03b0182d4a4700ce]*/ { pid_t pid; int async_err = 0; @@ -7083,7 +7110,7 @@ posix_readlink(PyObject *self, PyObject *args, PyObject *kwargs) { path_t path; int dir_fd = DEFAULT_DIR_FD; - char buffer[MAXPATHLEN]; + char buffer[MAXPATHLEN+1]; ssize_t length; PyObject *return_value = NULL; static char *keywords[] = {"path", "dir_fd", NULL}; @@ -7098,16 +7125,17 @@ posix_readlink(PyObject *self, PyObject *args, PyObject *kwargs) Py_BEGIN_ALLOW_THREADS #ifdef HAVE_READLINKAT if (dir_fd != DEFAULT_DIR_FD) - length = readlinkat(dir_fd, path.narrow, buffer, sizeof(buffer)); + length = readlinkat(dir_fd, path.narrow, buffer, MAXPATHLEN); else #endif - length = readlink(path.narrow, buffer, sizeof(buffer)); + length = readlink(path.narrow, buffer, MAXPATHLEN); Py_END_ALLOW_THREADS if (length < 0) { return_value = path_error(&path); goto exit; } + buffer[length] = '\0'; if (PyUnicode_Check(path.object)) return_value = PyUnicode_DecodeFSDefaultAndSize(buffer, length); @@ -7371,9 +7399,9 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, +os_symlink_impl(PyObject *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd) -/*[clinic end generated code: output=a01b4bcf32403ccd input=e820ec4472547bc3]*/ +/*[clinic end generated code: output=08ca9f3f3cf960f6 input=e820ec4472547bc3]*/ { #ifdef MS_WINDOWS DWORD result; @@ -7521,8 +7549,8 @@ All fields are floating point numbers. [clinic start generated code]*/ static PyObject * -os_times_impl(PyModuleDef *module) -/*[clinic end generated code: output=df0a63ebe6e6f091 input=2bf9df3d6ab2e48b]*/ +os_times_impl(PyObject *module) +/*[clinic end generated code: output=35f640503557d32a input=2bf9df3d6ab2e48b]*/ #ifdef MS_WINDOWS { FILETIME create, exit, kernel, user; @@ -7575,8 +7603,8 @@ Call the system call getsid(pid) and return the result. [clinic start generated code]*/ static PyObject * -os_getsid_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=a074f80c0e6bfb38 input=eeb2b923a30ce04e]*/ +os_getsid_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=112deae56b306460 input=eeb2b923a30ce04e]*/ { int sid; sid = getsid(pid); @@ -7595,8 +7623,8 @@ Call the system call setsid(). [clinic start generated code]*/ static PyObject * -os_setsid_impl(PyModuleDef *module) -/*[clinic end generated code: output=398fc152ae327330 input=5fff45858e2f0776]*/ +os_setsid_impl(PyObject *module) +/*[clinic end generated code: output=e2ddedd517086d77 input=5fff45858e2f0776]*/ { if (setsid() < 0) return posix_error(); @@ -7617,8 +7645,8 @@ Call the system call setpgid(pid, pgrp). [clinic start generated code]*/ static PyObject * -os_setpgid_impl(PyModuleDef *module, pid_t pid, pid_t pgrp) -/*[clinic end generated code: output=7079a8e932912841 input=fceb395eca572e1a]*/ +os_setpgid_impl(PyObject *module, pid_t pid, pid_t pgrp) +/*[clinic end generated code: output=6461160319a43d6a input=fceb395eca572e1a]*/ { if (setpgid(pid, pgrp) < 0) return posix_error(); @@ -7638,8 +7666,8 @@ Return the process group associated with the terminal specified by fd. [clinic start generated code]*/ static PyObject * -os_tcgetpgrp_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=ebb6dc5f111c7dc0 input=7f6c18eac10ada86]*/ +os_tcgetpgrp_impl(PyObject *module, int fd) +/*[clinic end generated code: output=f865e88be86c272b input=7f6c18eac10ada86]*/ { pid_t pgid = tcgetpgrp(fd); if (pgid < 0) @@ -7661,8 +7689,8 @@ Set the process group associated with the terminal specified by fd. [clinic start generated code]*/ static PyObject * -os_tcsetpgrp_impl(PyModuleDef *module, int fd, pid_t pgid) -/*[clinic end generated code: output=3e4b05177462cd22 input=5bdc997c6a619020]*/ +os_tcsetpgrp_impl(PyObject *module, int fd, pid_t pgid) +/*[clinic end generated code: output=f1821a381b9daa39 input=5bdc997c6a619020]*/ { if (tcsetpgrp(fd, pgid) < 0) return posix_error(); @@ -7696,9 +7724,8 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ static int -os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, - int dir_fd) -/*[clinic end generated code: output=47e8cc63559f5ddd input=ad8623b29acd2934]*/ +os_open_impl(PyObject *module, path_t *path, int flags, int mode, int dir_fd) +/*[clinic end generated code: output=abc7227888c8bc73 input=ad8623b29acd2934]*/ { int fd; int async_err = 0; @@ -7759,8 +7786,8 @@ Close a file descriptor. [clinic start generated code]*/ static PyObject * -os_close_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=47bf2ea536445a26 input=2bc42451ca5c3223]*/ +os_close_impl(PyObject *module, int fd) +/*[clinic end generated code: output=2fe4e93602822c14 input=2bc42451ca5c3223]*/ { int res; if (!_PyVerify_fd(fd)) @@ -7791,8 +7818,8 @@ Closes all file descriptors in [fd_low, fd_high), ignoring errors. [clinic start generated code]*/ static PyObject * -os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high) -/*[clinic end generated code: output=70e6adb95220ba96 input=5855a3d053ebd4ec]*/ +os_closerange_impl(PyObject *module, int fd_low, int fd_high) +/*[clinic end generated code: output=0ce5c20fcda681c2 input=5855a3d053ebd4ec]*/ { int i; Py_BEGIN_ALLOW_THREADS @@ -7816,8 +7843,8 @@ Return a duplicate of a file descriptor. [clinic start generated code]*/ static int -os_dup_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=f4bbac8c7652d05e input=6f10f7ea97f7852a]*/ +os_dup_impl(PyObject *module, int fd) +/*[clinic end generated code: output=486f4860636b2a9f input=6f10f7ea97f7852a]*/ { return _Py_dup(fd); } @@ -7833,8 +7860,8 @@ Duplicate file descriptor. [clinic start generated code]*/ static PyObject * -os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable) -/*[clinic end generated code: output=9a099d95881a7923 input=76e96f511be0352f]*/ +os_dup2_impl(PyObject *module, int fd, int fd2, int inheritable) +/*[clinic end generated code: output=db832a2d872ccc5f input=76e96f511be0352f]*/ { int res; #if defined(HAVE_DUP3) && \ @@ -7930,8 +7957,8 @@ Apply, test or remove a POSIX lock on an open file descriptor. [clinic start generated code]*/ static PyObject * -os_lockf_impl(PyModuleDef *module, int fd, int command, Py_off_t length) -/*[clinic end generated code: output=25ff778f9e2fbf1b input=65da41d2106e9b79]*/ +os_lockf_impl(PyObject *module, int fd, int command, Py_off_t length) +/*[clinic end generated code: output=af7051f3e7c29651 input=65da41d2106e9b79]*/ { int res; @@ -7962,8 +7989,8 @@ relative to the beginning of the file. [clinic start generated code]*/ static Py_off_t -os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how) -/*[clinic end generated code: output=65d4ab96d664998c input=902654ad3f96a6d3]*/ +os_lseek_impl(PyObject *module, int fd, Py_off_t position, int how) +/*[clinic end generated code: output=971e1efb6b30bd2f input=902654ad3f96a6d3]*/ { Py_off_t result; @@ -8013,8 +8040,8 @@ Read from a file descriptor. Returns a bytes object. [clinic start generated code]*/ static PyObject * -os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length) -/*[clinic end generated code: output=be24f44178455e8b input=1df2eaa27c0bf1d3]*/ +os_read_impl(PyObject *module, int fd, Py_ssize_t length) +/*[clinic end generated code: output=dafbe9a5cddb987b input=1df2eaa27c0bf1d3]*/ { Py_ssize_t n; PyObject *buffer; @@ -8125,8 +8152,8 @@ which may be less than the total capacity of all the buffers. [clinic start generated code]*/ static Py_ssize_t -os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers) -/*[clinic end generated code: output=00fc56ff1800059f input=e679eb5dbfa0357d]*/ +os_readv_impl(PyObject *module, int fd, PyObject *buffers) +/*[clinic end generated code: output=792da062d3fcebdb input=e679eb5dbfa0357d]*/ { int cnt; Py_ssize_t n; @@ -8180,8 +8207,8 @@ the beginning of the file. The file offset remains unchanged. [clinic start generated code]*/ static PyObject * -os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset) -/*[clinic end generated code: output=90d1fed87f68fa33 input=084948dcbaa35d4c]*/ +os_pread_impl(PyObject *module, int fd, int length, Py_off_t offset) +/*[clinic end generated code: output=435b29ee32b54a78 input=084948dcbaa35d4c]*/ { Py_ssize_t n; int async_err = 0; @@ -8229,8 +8256,8 @@ Write a bytes object to a file descriptor. [clinic start generated code]*/ static Py_ssize_t -os_write_impl(PyModuleDef *module, int fd, Py_buffer *data) -/*[clinic end generated code: output=58845c93c9ee1dda input=3207e28963234f3c]*/ +os_write_impl(PyObject *module, int fd, Py_buffer *data) +/*[clinic end generated code: output=e4ef5bc904b58ef9 input=3207e28963234f3c]*/ { return _Py_write(fd, data->buf, data->len); } @@ -8400,8 +8427,8 @@ Equivalent to os.stat(fd). [clinic start generated code]*/ static PyObject * -os_fstat_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=d71fe98bf042b626 input=27e0e0ebbe5600c9]*/ +os_fstat_impl(PyObject *module, int fd) +/*[clinic end generated code: output=efc038cb5f654492 input=27e0e0ebbe5600c9]*/ { STRUCT_STAT st; int res; @@ -8436,8 +8463,8 @@ connected to the slave end of a terminal. [clinic start generated code]*/ static int -os_isatty_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=acec9d3c29d16d33 input=08ce94aa1eaf7b5e]*/ +os_isatty_impl(PyObject *module, int fd) +/*[clinic end generated code: output=6a48c8b4e644ca00 input=08ce94aa1eaf7b5e]*/ { int return_value; if (!_PyVerify_fd(fd)) @@ -8460,8 +8487,8 @@ Returns a tuple of two file descriptors: [clinic start generated code]*/ static PyObject * -os_pipe_impl(PyModuleDef *module) -/*[clinic end generated code: output=6b0cd3f868ec3c40 input=02535e8c8fa6c4d4]*/ +os_pipe_impl(PyObject *module) +/*[clinic end generated code: output=ff9b76255793b440 input=02535e8c8fa6c4d4]*/ { int fds[2]; #ifdef MS_WINDOWS @@ -8547,8 +8574,8 @@ O_NONBLOCK, O_CLOEXEC. [clinic start generated code]*/ static PyObject * -os_pipe2_impl(PyModuleDef *module, int flags) -/*[clinic end generated code: output=c15b6075d0c6b2e7 input=f261b6e7e63c6817]*/ +os_pipe2_impl(PyObject *module, int flags) +/*[clinic end generated code: output=25751fb43a45540f input=f261b6e7e63c6817]*/ { int fds[2]; int res; @@ -8575,8 +8602,8 @@ buffers must be a sequence of bytes-like objects. [clinic start generated code]*/ static Py_ssize_t -os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers) -/*[clinic end generated code: output=a48925dbf2d5c238 input=5b8d17fe4189d2fe]*/ +os_writev_impl(PyObject *module, int fd, PyObject *buffers) +/*[clinic end generated code: output=56565cfac3aac15b input=5b8d17fe4189d2fe]*/ { int cnt; Py_ssize_t result; @@ -8627,9 +8654,8 @@ current file offset. [clinic start generated code]*/ static Py_ssize_t -os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, - Py_off_t offset) -/*[clinic end generated code: output=93aabdb40e17d325 input=19903f1b3dd26377]*/ +os_pwrite_impl(PyObject *module, int fd, Py_buffer *buffer, Py_off_t offset) +/*[clinic end generated code: output=c74da630758ee925 input=19903f1b3dd26377]*/ { Py_ssize_t size; int async_err = 0; @@ -8672,8 +8698,8 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd) -/*[clinic end generated code: output=8f5f5e72c630049a input=73032e98a36e0e19]*/ +os_mkfifo_impl(PyObject *module, path_t *path, int mode, int dir_fd) +/*[clinic end generated code: output=ce41cfad0e68c940 input=73032e98a36e0e19]*/ { int result; int async_err = 0; @@ -8723,9 +8749,9 @@ dir_fd may not be implemented on your platform. [clinic start generated code]*/ static PyObject * -os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, +os_mknod_impl(PyObject *module, path_t *path, int mode, dev_t device, int dir_fd) -/*[clinic end generated code: output=5151a8a9f754d272 input=ee44531551a4d83b]*/ +/*[clinic end generated code: output=92e55d3ca8917461 input=ee44531551a4d83b]*/ { int result; int async_err = 0; @@ -8760,8 +8786,8 @@ Extracts a device major number from a raw device number. [clinic start generated code]*/ static unsigned int -os_major_impl(PyModuleDef *module, dev_t device) -/*[clinic end generated code: output=ba55693ab49bac34 input=1e16a4d30c4d4462]*/ +os_major_impl(PyObject *module, dev_t device) +/*[clinic end generated code: output=5b3b2589bafb498e input=1e16a4d30c4d4462]*/ { return major(device); } @@ -8777,8 +8803,8 @@ Extracts a device minor number from a raw device number. [clinic start generated code]*/ static unsigned int -os_minor_impl(PyModuleDef *module, dev_t device) -/*[clinic end generated code: output=2867219ebf274e27 input=0842c6d23f24c65e]*/ +os_minor_impl(PyObject *module, dev_t device) +/*[clinic end generated code: output=5e1a25e630b0157d input=0842c6d23f24c65e]*/ { return minor(device); } @@ -8795,8 +8821,8 @@ Composes a raw device number from the major and minor device numbers. [clinic start generated code]*/ static dev_t -os_makedev_impl(PyModuleDef *module, int major, int minor) -/*[clinic end generated code: output=7cb6264352437660 input=4b9fd8fc73cbe48f]*/ +os_makedev_impl(PyObject *module, int major, int minor) +/*[clinic end generated code: output=881aaa4aba6f6a52 input=4b9fd8fc73cbe48f]*/ { return makedev(major, minor); } @@ -8815,8 +8841,8 @@ Truncate a file, specified by file descriptor, to a specific length. [clinic start generated code]*/ static PyObject * -os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length) -/*[clinic end generated code: output=3666f401d76bf834 input=63b43641e52818f2]*/ +os_ftruncate_impl(PyObject *module, int fd, Py_off_t length) +/*[clinic end generated code: output=fba15523721be7e4 input=63b43641e52818f2]*/ { int result; int async_err = 0; @@ -8856,8 +8882,8 @@ On some platforms, path may also be specified as an open file descriptor. [clinic start generated code]*/ static PyObject * -os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length) -/*[clinic end generated code: output=f60a9e08370e9e2e input=77229cf0b50a9b77]*/ +os_truncate_impl(PyObject *module, path_t *path, Py_off_t length) +/*[clinic end generated code: output=43009c8df5c0a12b input=77229cf0b50a9b77]*/ { int result; #ifdef MS_WINDOWS @@ -8920,9 +8946,9 @@ starting at offset bytes from the beginning and continuing for length bytes. [clinic start generated code]*/ static PyObject * -os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fallocate_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length) -/*[clinic end generated code: output=7f6f87a8c751e1b4 input=d7a2ef0ab2ca52fb]*/ +/*[clinic end generated code: output=73f107139564aa9d input=d7a2ef0ab2ca52fb]*/ { int result; int async_err = 0; @@ -8962,9 +8988,9 @@ POSIX_FADV_DONTNEED. [clinic start generated code]*/ static PyObject * -os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fadvise_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length, int advice) -/*[clinic end generated code: output=457ce6a67189e10d input=0fbe554edc2f04b5]*/ +/*[clinic end generated code: output=412ef4aa70c98642 input=0fbe554edc2f04b5]*/ { int result; int async_err = 0; @@ -9014,8 +9040,8 @@ Change or add an environment variable. [clinic start generated code]*/ static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) -/*[clinic end generated code: output=a2438cf95e5a0c1c input=ba586581c2e6105f]*/ +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value) +/*[clinic end generated code: output=d29a567d6b2327d2 input=ba586581c2e6105f]*/ { wchar_t *env; @@ -9058,8 +9084,8 @@ Change or add an environment variable. [clinic start generated code]*/ static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) -/*[clinic end generated code: output=a2438cf95e5a0c1c input=a97bc6152f688d31]*/ +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value) +/*[clinic end generated code: output=d29a567d6b2327d2 input=a97bc6152f688d31]*/ { PyObject *bytes = NULL; char *env; @@ -9095,8 +9121,8 @@ Delete an environment variable. [clinic start generated code]*/ static PyObject * -os_unsetenv_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=25994b57016a2dc9 input=2bb5288a599c7107]*/ +os_unsetenv_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=54c4137ab1834f02 input=2bb5288a599c7107]*/ { #ifndef HAVE_BROKEN_UNSETENV int err; @@ -9134,8 +9160,8 @@ Translate an error code to a message string. [clinic start generated code]*/ static PyObject * -os_strerror_impl(PyModuleDef *module, int code) -/*[clinic end generated code: output=0280c6af51e5c9fe input=75a8673d97915a91]*/ +os_strerror_impl(PyObject *module, int code) +/*[clinic end generated code: output=baebf09fa02a78f2 input=75a8673d97915a91]*/ { char *message = strerror(code); if (message == NULL) { @@ -9159,8 +9185,8 @@ Return True if the process returning status was dumped to a core file. [clinic start generated code]*/ static int -os_WCOREDUMP_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=134f70bbe63fbf41 input=8b05e7ab38528d04]*/ +os_WCOREDUMP_impl(PyObject *module, int status) +/*[clinic end generated code: output=1a584b147b16bd18 input=8b05e7ab38528d04]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9182,8 +9208,8 @@ job control stop. [clinic start generated code]*/ static int -os_WIFCONTINUED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=9cdd26543ebb6dcd input=e777e7d38eb25bd9]*/ +os_WIFCONTINUED_impl(PyObject *module, int status) +/*[clinic end generated code: output=1e35295d844364bd input=e777e7d38eb25bd9]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9202,8 +9228,8 @@ Return True if the process returning status was stopped. [clinic start generated code]*/ static int -os_WIFSTOPPED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=73bf35e44994a724 input=043cb7f1289ef904]*/ +os_WIFSTOPPED_impl(PyObject *module, int status) +/*[clinic end generated code: output=fdb57122a5c9b4cb input=043cb7f1289ef904]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9222,8 +9248,8 @@ Return True if the process returning status was terminated by a signal. [clinic start generated code]*/ static int -os_WIFSIGNALED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=2697975771872420 input=d55ba7cc9ce5dc43]*/ +os_WIFSIGNALED_impl(PyObject *module, int status) +/*[clinic end generated code: output=d1dde4dcc819a5f5 input=d55ba7cc9ce5dc43]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9242,8 +9268,8 @@ Return True if the process returning status exited via the exit() system call. [clinic start generated code]*/ static int -os_WIFEXITED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=ca8f8c61f0b8532e input=d63775a6791586c0]*/ +os_WIFEXITED_impl(PyObject *module, int status) +/*[clinic end generated code: output=01c09d6ebfeea397 input=d63775a6791586c0]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9262,8 +9288,8 @@ Return the process return code from status. [clinic start generated code]*/ static int -os_WEXITSTATUS_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=ea54da23d9e0f6af input=e1fb4944e377585b]*/ +os_WEXITSTATUS_impl(PyObject *module, int status) +/*[clinic end generated code: output=6e3efbba11f6488d input=e1fb4944e377585b]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9282,8 +9308,8 @@ Return the signal that terminated the process that provided the status value. [clinic start generated code]*/ static int -os_WTERMSIG_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=4d25367026cb852c input=727fd7f84ec3f243]*/ +os_WTERMSIG_impl(PyObject *module, int status) +/*[clinic end generated code: output=172f7dfc8dcfc3ad input=727fd7f84ec3f243]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9302,8 +9328,8 @@ Return the signal that stopped the process that provided the status value. [clinic start generated code]*/ static int -os_WSTOPSIG_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=54eb9c13b001adb4 input=46ebf1d1b293c5c1]*/ +os_WSTOPSIG_impl(PyObject *module, int status) +/*[clinic end generated code: output=0ab7586396f5d82b input=46ebf1d1b293c5c1]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9376,8 +9402,8 @@ Equivalent to statvfs(fd). [clinic start generated code]*/ static PyObject * -os_fstatvfs_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=584a94a754497ac0 input=d8122243ac50975e]*/ +os_fstatvfs_impl(PyObject *module, int fd) +/*[clinic end generated code: output=53547cf0cc55e6c5 input=d8122243ac50975e]*/ { int result; int async_err = 0; @@ -9412,8 +9438,8 @@ On some platforms, path may also be specified as an open file descriptor. [clinic start generated code]*/ static PyObject * -os_statvfs_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=5ced07a2cf931f41 input=3f5c35791c669bd9]*/ +os_statvfs_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=87106dd1beb8556e input=3f5c35791c669bd9]*/ { int result; struct statvfs st; @@ -9454,8 +9480,8 @@ Return disk usage statistics about the given path as a (total, free) tuple. [clinic start generated code]*/ static PyObject * -os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path) -/*[clinic end generated code: output=60a9cf33449db1dd input=6458133aed893c78]*/ +os__getdiskusage_impl(PyObject *module, Py_UNICODE *path) +/*[clinic end generated code: output=76d6adcd86b1db0b input=6458133aed893c78]*/ { BOOL retval; ULARGE_INTEGER _, total, free; @@ -9640,8 +9666,8 @@ If there is no limit, return -1. [clinic start generated code]*/ static long -os_fpathconf_impl(PyModuleDef *module, int fd, int name) -/*[clinic end generated code: output=082b2922d4441de7 input=5942a024d3777810]*/ +os_fpathconf_impl(PyObject *module, int fd, int name) +/*[clinic end generated code: output=d5b7042425fc3e21 input=5942a024d3777810]*/ { long limit; @@ -9669,8 +9695,8 @@ On some platforms, path may also be specified as an open file descriptor. [clinic start generated code]*/ static long -os_pathconf_impl(PyModuleDef *module, path_t *path, int name) -/*[clinic end generated code: output=3713029e9501f5ab input=bc3e2a985af27e5e]*/ +os_pathconf_impl(PyObject *module, path_t *path, int name) +/*[clinic end generated code: output=5bedee35b293a089 input=bc3e2a985af27e5e]*/ { long limit; @@ -9866,8 +9892,8 @@ Return a string-valued system configuration variable. [clinic start generated code]*/ static PyObject * -os_confstr_impl(PyModuleDef *module, int name) -/*[clinic end generated code: output=6ff79c9eed8c2daf input=18fb4d0567242e65]*/ +os_confstr_impl(PyObject *module, int name) +/*[clinic end generated code: output=bfb0b1b1e49b9383 input=18fb4d0567242e65]*/ { PyObject *result = NULL; char buffer[255]; @@ -10416,8 +10442,8 @@ Return an integer-valued system configuration variable. [clinic start generated code]*/ static long -os_sysconf_impl(PyModuleDef *module, int name) -/*[clinic end generated code: output=ed567306f58d69c4 input=279e3430a33f29e4]*/ +os_sysconf_impl(PyObject *module, int name) +/*[clinic end generated code: output=3662f945fc0cc756 input=279e3430a33f29e4]*/ { long value; @@ -10514,8 +10540,8 @@ on the hosting operating system. This function never returns. [clinic start generated code]*/ static PyObject * -os_abort_impl(PyModuleDef *module) -/*[clinic end generated code: output=486bb96647c299b3 input=cf2c7d98bc504047]*/ +os_abort_impl(PyObject *module) +/*[clinic end generated code: output=dcf52586dad2467c input=cf2c7d98bc504047]*/ { abort(); /*NOTREACHED*/ @@ -10672,8 +10698,8 @@ Raises OSError if the load average was unobtainable. [clinic start generated code]*/ static PyObject * -os_getloadavg_impl(PyModuleDef *module) -/*[clinic end generated code: output=2b64c5b675d74c14 input=3d6d826b76d8a34e]*/ +os_getloadavg_impl(PyObject *module) +/*[clinic end generated code: output=9ad3a11bfb4f4bd2 input=3d6d826b76d8a34e]*/ { double loadavg[3]; if (getloadavg(loadavg, 3)!=3) { @@ -10696,8 +10722,8 @@ If the device is not a terminal, return None. [clinic start generated code]*/ static PyObject * -os_device_encoding_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=34f14e33468419c1 input=9e1d4a42b66df312]*/ +os_device_encoding_impl(PyObject *module, int fd) +/*[clinic end generated code: output=e0d294bbab7e8c2b input=9e1d4a42b66df312]*/ { return _Py_device_encoding(fd); } @@ -10716,8 +10742,8 @@ Set the current process's real, effective, and saved user ids. [clinic start generated code]*/ static PyObject * -os_setresuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid, uid_t suid) -/*[clinic end generated code: output=92cc330812c6ed0f input=9e33cb79a82792f3]*/ +os_setresuid_impl(PyObject *module, uid_t ruid, uid_t euid, uid_t suid) +/*[clinic end generated code: output=834a641e15373e97 input=9e33cb79a82792f3]*/ { if (setresuid(ruid, euid, suid) < 0) return posix_error(); @@ -10739,8 +10765,8 @@ Set the current process's real, effective, and saved group ids. [clinic start generated code]*/ static PyObject * -os_setresgid_impl(PyModuleDef *module, gid_t rgid, gid_t egid, gid_t sgid) -/*[clinic end generated code: output=e91dc4842a604429 input=33e9e0785ef426b1]*/ +os_setresgid_impl(PyObject *module, gid_t rgid, gid_t egid, gid_t sgid) +/*[clinic end generated code: output=6aa402f3d2e514a9 input=33e9e0785ef426b1]*/ { if (setresgid(rgid, egid, sgid) < 0) return posix_error(); @@ -10757,8 +10783,8 @@ Return a tuple of the current process's real, effective, and saved user ids. [clinic start generated code]*/ static PyObject * -os_getresuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=9ddef62faae8e477 input=41ccfa8e1f6517ad]*/ +os_getresuid_impl(PyObject *module) +/*[clinic end generated code: output=8e0becff5dece5bf input=41ccfa8e1f6517ad]*/ { uid_t ruid, euid, suid; if (getresuid(&ruid, &euid, &suid) < 0) @@ -10778,8 +10804,8 @@ Return a tuple of the current process's real, effective, and saved group ids. [clinic start generated code]*/ static PyObject * -os_getresgid_impl(PyModuleDef *module) -/*[clinic end generated code: output=e1a553cbcf16234c input=517e68db9ca32df6]*/ +os_getresgid_impl(PyObject *module) +/*[clinic end generated code: output=2719c4bfcf27fb9f input=517e68db9ca32df6]*/ { gid_t rgid, egid, sgid; if (getresgid(&rgid, &egid, &sgid) < 0) @@ -10810,9 +10836,9 @@ If follow_symlinks is False, and the last element of the path is a symbolic [clinic start generated code]*/ static PyObject * -os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_getxattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=cf2cede74bd5d412 input=8c8ea3bab78d89c2]*/ +/*[clinic end generated code: output=5f2f44200a43cff2 input=8c8ea3bab78d89c2]*/ { Py_ssize_t i; PyObject *buffer = NULL; @@ -10882,9 +10908,9 @@ If follow_symlinks is False, and the last element of the path is a symbolic [clinic start generated code]*/ static PyObject * -os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_setxattr_impl(PyObject *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks) -/*[clinic end generated code: output=1b395ef82880fea0 input=f0d26833992015c2]*/ +/*[clinic end generated code: output=98b83f63fdde26bb input=f0d26833992015c2]*/ { ssize_t result; @@ -10930,9 +10956,9 @@ If follow_symlinks is False, and the last element of the path is a symbolic [clinic start generated code]*/ static PyObject * -os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_removexattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=f92bb39ab992650d input=cdb54834161e3329]*/ +/*[clinic end generated code: output=521a51817980cda6 input=cdb54834161e3329]*/ { ssize_t result; @@ -10973,8 +10999,8 @@ If follow_symlinks is False, and the last element of the path is a symbolic [clinic start generated code]*/ static PyObject * -os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks) -/*[clinic end generated code: output=a87ad6ce56e42a4f input=08cca53ac0b07c13]*/ +os_listxattr_impl(PyObject *module, path_t *path, int follow_symlinks) +/*[clinic end generated code: output=bebdb4e2ad0ce435 input=08cca53ac0b07c13]*/ { Py_ssize_t i; PyObject *result = NULL; @@ -11067,8 +11093,8 @@ Return a bytes object containing random bytes suitable for cryptographic use. [clinic start generated code]*/ static PyObject * -os_urandom_impl(PyModuleDef *module, Py_ssize_t size) -/*[clinic end generated code: output=e0011f021501f03b input=4067cdb1b6776c29]*/ +os_urandom_impl(PyObject *module, Py_ssize_t size) +/*[clinic end generated code: output=42c5cca9d18068e9 input=4067cdb1b6776c29]*/ { PyObject *bytes; int result; @@ -11204,8 +11230,8 @@ Return the number of CPUs in the system; return None if indeterminable. [clinic start generated code]*/ static PyObject * -os_cpu_count_impl(PyModuleDef *module) -/*[clinic end generated code: output=c59ee7f6bce832b8 input=d55e2f8f3823a628]*/ +os_cpu_count_impl(PyObject *module) +/*[clinic end generated code: output=5fc29463c3936a9c input=d55e2f8f3823a628]*/ { int ncpu = 0; #ifdef MS_WINDOWS @@ -11245,8 +11271,8 @@ Get the close-on-exe flag of the specified file descriptor. [clinic start generated code]*/ static int -os_get_inheritable_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=36110bb36efaa21e input=89ac008dc9ab6b95]*/ +os_get_inheritable_impl(PyObject *module, int fd) +/*[clinic end generated code: output=0445e20e149aa5b8 input=89ac008dc9ab6b95]*/ { int return_value; if (!_PyVerify_fd(fd)) { @@ -11271,8 +11297,8 @@ Set the inheritable flag of the specified file descriptor. [clinic start generated code]*/ static PyObject * -os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable) -/*[clinic end generated code: output=2ac5c6ce8623f045 input=9ceaead87a1e2402]*/ +os_set_inheritable_impl(PyObject *module, int fd, int inheritable) +/*[clinic end generated code: output=f1b1918a2f3c38c2 input=9ceaead87a1e2402]*/ { int result; if (!_PyVerify_fd(fd)) @@ -11297,8 +11323,8 @@ Get the close-on-exe flag of the specified file descriptor. [clinic start generated code]*/ static int -os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle) -/*[clinic end generated code: output=3b7b3e1b43f312b6 input=5f7759443aae3dc5]*/ +os_get_handle_inheritable_impl(PyObject *module, Py_intptr_t handle) +/*[clinic end generated code: output=9e5389b0aa0916ce input=5f7759443aae3dc5]*/ { DWORD flags; @@ -11321,9 +11347,9 @@ Set the inheritable flag of the specified handle. [clinic start generated code]*/ static PyObject * -os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, +os_set_handle_inheritable_impl(PyObject *module, Py_intptr_t handle, int inheritable) -/*[clinic end generated code: output=d2e111a96c9eb296 input=e64b2b2730469def]*/ +/*[clinic end generated code: output=b1e67bfa3213d745 input=e64b2b2730469def]*/ { DWORD flags = inheritable ? HANDLE_FLAG_INHERIT : 0; if (!SetHandleInformation((HANDLE)handle, HANDLE_FLAG_INHERIT, flags)) { @@ -12752,9 +12778,15 @@ all_ins(PyObject *m) #endif #ifdef HAVE_SCHED_H +#ifdef SCHED_OTHER if (PyModule_AddIntMacro(m, SCHED_OTHER)) return -1; +#endif +#ifdef SCHED_FIFO if (PyModule_AddIntMacro(m, SCHED_FIFO)) return -1; +#endif +#ifdef SCHED_RR if (PyModule_AddIntMacro(m, SCHED_RR)) return -1; +#endif #ifdef SCHED_SPORADIC if (PyModule_AddIntMacro(m, SCHED_SPORADIC) return -1; #endif diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c index 281c30b..7416cf7 100644 --- a/Modules/pwdmodule.c +++ b/Modules/pwdmodule.c @@ -105,8 +105,8 @@ See `help(pwd)` for more on password database entries. [clinic start generated code]*/ static PyObject * -pwd_getpwuid(PyModuleDef *module, PyObject *uidobj) -/*[clinic end generated code: output=cba29ae4c2bcb8e1 input=ae64d507a1c6d3e8]*/ +pwd_getpwuid(PyObject *module, PyObject *uidobj) +/*[clinic end generated code: output=c4ee1d4d429b86c4 input=ae64d507a1c6d3e8]*/ { uid_t uid; struct passwd *p; @@ -141,8 +141,8 @@ See `help(pwd)` for more on password database entries. [clinic start generated code]*/ static PyObject * -pwd_getpwnam_impl(PyModuleDef *module, PyObject *arg) -/*[clinic end generated code: output=66848d42d386fca3 input=d5f7e700919b02d3]*/ +pwd_getpwnam_impl(PyObject *module, PyObject *arg) +/*[clinic end generated code: output=6abeee92430e43d2 input=d5f7e700919b02d3]*/ { char *name; struct passwd *p; @@ -173,8 +173,8 @@ See help(pwd) for more on password database entries. [clinic start generated code]*/ static PyObject * -pwd_getpwall_impl(PyModuleDef *module) -/*[clinic end generated code: output=ab30e37bf26d431d input=d7ecebfd90219b85]*/ +pwd_getpwall_impl(PyObject *module) +/*[clinic end generated code: output=4853d2f5a0afac8a input=d7ecebfd90219b85]*/ { PyObject *d; struct passwd *p; diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 9a6da73..00c96a1 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -1247,8 +1247,7 @@ handlername2int(PyObject *name) { int i; for (i = 0; handler_info[i].name != NULL; i++) { - if (PyUnicode_CompareWithASCIIString( - name, handler_info[i].name) == 0) { + if (_PyUnicode_EqualToASCIIString(name, handler_info[i].name)) { return i; } } @@ -1286,45 +1285,45 @@ xmlparse_getattro(xmlparseobject *self, PyObject *nameobj) first_char = PyUnicode_READ_CHAR(nameobj, 0); if (first_char == 'E') { - if (PyUnicode_CompareWithASCIIString(nameobj, "ErrorCode") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "ErrorCode")) return PyLong_FromLong((long) XML_GetErrorCode(self->itself)); - if (PyUnicode_CompareWithASCIIString(nameobj, "ErrorLineNumber") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "ErrorLineNumber")) return PyLong_FromLong((long) XML_GetErrorLineNumber(self->itself)); - if (PyUnicode_CompareWithASCIIString(nameobj, "ErrorColumnNumber") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "ErrorColumnNumber")) return PyLong_FromLong((long) XML_GetErrorColumnNumber(self->itself)); - if (PyUnicode_CompareWithASCIIString(nameobj, "ErrorByteIndex") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "ErrorByteIndex")) return PyLong_FromLong((long) XML_GetErrorByteIndex(self->itself)); } if (first_char == 'C') { - if (PyUnicode_CompareWithASCIIString(nameobj, "CurrentLineNumber") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "CurrentLineNumber")) return PyLong_FromLong((long) XML_GetCurrentLineNumber(self->itself)); - if (PyUnicode_CompareWithASCIIString(nameobj, "CurrentColumnNumber") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "CurrentColumnNumber")) return PyLong_FromLong((long) XML_GetCurrentColumnNumber(self->itself)); - if (PyUnicode_CompareWithASCIIString(nameobj, "CurrentByteIndex") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "CurrentByteIndex")) return PyLong_FromLong((long) XML_GetCurrentByteIndex(self->itself)); } if (first_char == 'b') { - if (PyUnicode_CompareWithASCIIString(nameobj, "buffer_size") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "buffer_size")) return PyLong_FromLong((long) self->buffer_size); - if (PyUnicode_CompareWithASCIIString(nameobj, "buffer_text") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "buffer_text")) return get_pybool(self->buffer != NULL); - if (PyUnicode_CompareWithASCIIString(nameobj, "buffer_used") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "buffer_used")) return PyLong_FromLong((long) self->buffer_used); } - if (PyUnicode_CompareWithASCIIString(nameobj, "namespace_prefixes") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "namespace_prefixes")) return get_pybool(self->ns_prefixes); - if (PyUnicode_CompareWithASCIIString(nameobj, "ordered_attributes") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "ordered_attributes")) return get_pybool(self->ordered_attributes); - if (PyUnicode_CompareWithASCIIString(nameobj, "specified_attributes") == 0) + if (_PyUnicode_EqualToASCIIString(nameobj, "specified_attributes")) return get_pybool((long) self->specified_attributes); - if (PyUnicode_CompareWithASCIIString(nameobj, "intern") == 0) { + if (_PyUnicode_EqualToASCIIString(nameobj, "intern")) { if (self->intern == NULL) { Py_INCREF(Py_None); return Py_None; @@ -1388,7 +1387,7 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v) PyErr_SetString(PyExc_RuntimeError, "Cannot delete attribute"); return -1; } - if (PyUnicode_CompareWithASCIIString(name, "buffer_text") == 0) { + if (_PyUnicode_EqualToASCIIString(name, "buffer_text")) { int b = PyObject_IsTrue(v); if (b < 0) return -1; @@ -1410,7 +1409,7 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v) } return 0; } - if (PyUnicode_CompareWithASCIIString(name, "namespace_prefixes") == 0) { + if (_PyUnicode_EqualToASCIIString(name, "namespace_prefixes")) { int b = PyObject_IsTrue(v); if (b < 0) return -1; @@ -1418,14 +1417,14 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v) XML_SetReturnNSTriplet(self->itself, self->ns_prefixes); return 0; } - if (PyUnicode_CompareWithASCIIString(name, "ordered_attributes") == 0) { + if (_PyUnicode_EqualToASCIIString(name, "ordered_attributes")) { int b = PyObject_IsTrue(v); if (b < 0) return -1; self->ordered_attributes = b; return 0; } - if (PyUnicode_CompareWithASCIIString(name, "specified_attributes") == 0) { + if (_PyUnicode_EqualToASCIIString(name, "specified_attributes")) { int b = PyObject_IsTrue(v); if (b < 0) return -1; @@ -1433,7 +1432,7 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v) return 0; } - if (PyUnicode_CompareWithASCIIString(name, "buffer_size") == 0) { + if (_PyUnicode_EqualToASCIIString(name, "buffer_size")) { long new_buffer_size; if (!PyLong_Check(v)) { PyErr_SetString(PyExc_TypeError, "buffer_size must be an integer"); @@ -1479,7 +1478,7 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v) return 0; } - if (PyUnicode_CompareWithASCIIString(name, "CharacterDataHandler") == 0) { + if (_PyUnicode_EqualToASCIIString(name, "CharacterDataHandler")) { /* If we're changing the character data handler, flush all * cached data with the old handler. Not sure there's a * "right" thing to do, though, but this probably won't @@ -1560,9 +1559,9 @@ Return a new XML parser object. [clinic start generated code]*/ static PyObject * -pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, +pyexpat_ParserCreate_impl(PyObject *module, const char *encoding, const char *namespace_separator, PyObject *intern) -/*[clinic end generated code: output=81fccd233e1743a8 input=23d29704acad385d]*/ +/*[clinic end generated code: output=295c0cf01ab1146c input=23d29704acad385d]*/ { PyObject *result; int intern_decref = 0; @@ -1606,8 +1605,8 @@ Returns string error for given number. [clinic start generated code]*/ static PyObject * -pyexpat_ErrorString_impl(PyModuleDef *module, long code) -/*[clinic end generated code: output=d87668108b6868e5 input=cc67de010d9e62b3]*/ +pyexpat_ErrorString_impl(PyObject *module, long code) +/*[clinic end generated code: output=2feae50d166f2174 input=cc67de010d9e62b3]*/ { return Py_BuildValue("z", XML_ErrorString((int)code)); } diff --git a/Modules/readline.c b/Modules/readline.c index 8c00dec..54f15bc 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -128,20 +128,40 @@ static PyModuleDef readlinemodule; #define readlinestate_global ((readlinestate *)PyModule_GetState(PyState_FindModule(&readlinemodule))) +/* Convert to/from multibyte C strings */ + +static PyObject * +encode(PyObject *b) +{ + return PyUnicode_EncodeLocale(b, "surrogateescape"); +} + +static PyObject * +decode(const char *s) +{ + return PyUnicode_DecodeLocale(s, "surrogateescape"); +} + + /* Exported function to send one line to readline's init file parser */ static PyObject * -parse_and_bind(PyObject *self, PyObject *args) +parse_and_bind(PyObject *self, PyObject *string) { - char *s, *copy; - if (!PyArg_ParseTuple(args, "s:parse_and_bind", &s)) + char *copy; + PyObject *encoded = encode(string); + if (encoded == NULL) { return NULL; + } /* Make a copy -- rl_parse_and_bind() modifies its argument */ /* Bernard Herzog */ - copy = PyMem_Malloc(1 + strlen(s)); - if (copy == NULL) + copy = PyMem_Malloc(1 + PyBytes_GET_SIZE(encoded)); + if (copy == NULL) { + Py_DECREF(encoded); return PyErr_NoMemory(); - strcpy(copy, s); + } + strcpy(copy, PyBytes_AS_STRING(encoded)); + Py_DECREF(encoded); rl_parse_and_bind(copy); PyMem_Free(copy); /* Free the copy */ Py_RETURN_NONE; @@ -441,17 +461,18 @@ get the ending index of the completion scope"); /* Set the tab-completion word-delimiters that readline uses */ static PyObject * -set_completer_delims(PyObject *self, PyObject *args) +set_completer_delims(PyObject *self, PyObject *string) { char *break_chars; - - if (!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) { + PyObject *encoded = encode(string); + if (encoded == NULL) { return NULL; } /* Keep a reference to the allocated memory in the module state in case some other module modifies rl_completer_word_break_characters (see issue #17289). */ - break_chars = strdup(break_chars); + break_chars = strdup(PyBytes_AS_STRING(encoded)); + Py_DECREF(encoded); if (break_chars) { free(completer_word_break_characters); completer_word_break_characters = break_chars; @@ -531,10 +552,11 @@ static PyObject * py_replace_history(PyObject *self, PyObject *args) { int entry_number; - char *line; + PyObject *line; + PyObject *encoded; HIST_ENTRY *old_entry; - if (!PyArg_ParseTuple(args, "is:replace_history_item", &entry_number, + if (!PyArg_ParseTuple(args, "iU:replace_history_item", &entry_number, &line)) { return NULL; } @@ -543,7 +565,12 @@ py_replace_history(PyObject *self, PyObject *args) "History index cannot be negative"); return NULL; } - old_entry = replace_history_entry(entry_number, line, (void *)NULL); + encoded = encode(line); + if (encoded == NULL) { + return NULL; + } + old_entry = replace_history_entry(entry_number, PyBytes_AS_STRING(encoded), (void *)NULL); + Py_DECREF(encoded); if (!old_entry) { PyErr_Format(PyExc_ValueError, "No history item at position %d", @@ -562,14 +589,14 @@ replaces history item given by its position with contents of line"); /* Add a line to the history buffer */ static PyObject * -py_add_history(PyObject *self, PyObject *args) +py_add_history(PyObject *self, PyObject *string) { - char *line; - - if(!PyArg_ParseTuple(args, "s:add_history", &line)) { + PyObject *encoded = encode(string); + if (encoded == NULL) { return NULL; } - add_history(line); + add_history(PyBytes_AS_STRING(encoded)); + Py_DECREF(encoded); Py_RETURN_NONE; } @@ -583,7 +610,7 @@ add an item to the history buffer"); static PyObject * get_completer_delims(PyObject *self, PyObject *noarg) { - return PyUnicode_FromString(rl_completer_word_break_characters); + return decode(rl_completer_word_break_characters); } PyDoc_STRVAR(doc_get_completer_delims, @@ -673,7 +700,7 @@ get_history_item(PyObject *self, PyObject *args) } #endif /* __APPLE__ */ if ((hist_ent = history_get(idx))) - return PyUnicode_FromString(hist_ent->line); + return decode(hist_ent->line); else { Py_RETURN_NONE; } @@ -702,7 +729,7 @@ return the current (not the maximum) length of history."); static PyObject * get_line_buffer(PyObject *self, PyObject *noarg) { - return PyUnicode_FromString(rl_line_buffer); + return decode(rl_line_buffer); } PyDoc_STRVAR(doc_get_line_buffer, @@ -730,12 +757,14 @@ Clear the current readline history."); /* Exported function to insert text into the line buffer */ static PyObject * -insert_text(PyObject *self, PyObject *args) +insert_text(PyObject *self, PyObject *string) { - char *s; - if (!PyArg_ParseTuple(args, "s:insert_text", &s)) + PyObject *encoded = encode(string); + if (encoded == NULL) { return NULL; - rl_insert_text(s); + } + rl_insert_text(PyBytes_AS_STRING(encoded)); + Py_DECREF(encoded); Py_RETURN_NONE; } @@ -763,9 +792,9 @@ contents of the line buffer."); static struct PyMethodDef readline_methods[] = { - {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind}, + {"parse_and_bind", parse_and_bind, METH_O, doc_parse_and_bind}, {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer}, - {"insert_text", insert_text, METH_VARARGS, doc_insert_text}, + {"insert_text", insert_text, METH_O, doc_insert_text}, {"redisplay", redisplay, METH_NOARGS, doc_redisplay}, {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file}, {"read_history_file", read_history_file, @@ -792,8 +821,8 @@ static struct PyMethodDef readline_methods[] = {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx}, {"set_completer_delims", set_completer_delims, - METH_VARARGS, doc_set_completer_delims}, - {"add_history", py_add_history, METH_VARARGS, doc_add_history}, + METH_O, doc_set_completer_delims}, + {"add_history", py_add_history, METH_O, doc_add_history}, {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history}, {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history}, {"get_completer_delims", get_completer_delims, @@ -890,7 +919,7 @@ on_completion_display_matches_hook(char **matches, int num_matches, int max_length) { int i; - PyObject *m=NULL, *s=NULL, *r=NULL; + PyObject *sub, *m=NULL, *s=NULL, *r=NULL; #ifdef WITH_THREAD PyGILState_STATE gilstate = PyGILState_Ensure(); #endif @@ -898,16 +927,17 @@ on_completion_display_matches_hook(char **matches, if (m == NULL) goto error; for (i = 0; i < num_matches; i++) { - s = PyUnicode_FromString(matches[i+1]); + s = decode(matches[i+1]); if (s == NULL) goto error; if (PyList_SetItem(m, i, s) == -1) goto error; } + sub = decode(matches[0]); r = PyObject_CallFunction(readlinestate_global->completion_display_matches_hook, - "sOi", matches[0], m, max_length); + "NNi", sub, m, max_length); - Py_DECREF(m); m=NULL; + m=NULL; if (r == NULL || (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { @@ -955,22 +985,24 @@ on_completion(const char *text, int state) { char *result = NULL; if (readlinestate_global->completer != NULL) { - PyObject *r; + PyObject *r = NULL, *t; #ifdef WITH_THREAD PyGILState_STATE gilstate = PyGILState_Ensure(); #endif rl_attempted_completion_over = 1; - r = PyObject_CallFunction(readlinestate_global->completer, "si", text, state); + t = decode(text); + r = PyObject_CallFunction(readlinestate_global->completer, "Ni", t, state); if (r == NULL) goto error; if (r == Py_None) { result = NULL; } else { - char *s = _PyUnicode_AsString(r); - if (s == NULL) + PyObject *encoded = encode(r); + if (encoded == NULL) goto error; - result = strdup(s); + result = strdup(PyBytes_AS_STRING(encoded)); + Py_DECREF(encoded); } Py_DECREF(r); goto done; @@ -994,6 +1026,9 @@ static char ** flex_complete(const char *text, int start, int end) { char **result; + char saved; + size_t start_size, end_size; + wchar_t *s; #ifdef WITH_THREAD PyGILState_STATE gilstate = PyGILState_Ensure(); #endif @@ -1003,11 +1038,32 @@ flex_complete(const char *text, int start, int end) #ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND rl_completion_suppress_append = 0; #endif + + saved = rl_line_buffer[start]; + rl_line_buffer[start] = 0; + s = Py_DecodeLocale(rl_line_buffer, &start_size); + rl_line_buffer[start] = saved; + if (s == NULL) { + goto done; + } + PyMem_RawFree(s); + saved = rl_line_buffer[end]; + rl_line_buffer[end] = 0; + s = Py_DecodeLocale(rl_line_buffer + start, &end_size); + rl_line_buffer[end] = saved; + if (s == NULL) { + goto done; + } + PyMem_RawFree(s); + start = (int)start_size; + end = start + (int)end_size; + +done: Py_XDECREF(readlinestate_global->begidx); Py_XDECREF(readlinestate_global->endidx); readlinestate_global->begidx = PyLong_FromLong((long) start); readlinestate_global->endidx = PyLong_FromLong((long) end); - result = completion_matches(text, *on_completion); + result = completion_matches((char *)text, *on_completion); #ifdef WITH_THREAD PyGILState_Release(gilstate); #endif @@ -1073,19 +1129,22 @@ setup_readline(readlinestate *mod_state) mod_state->begidx = PyLong_FromLong(0L); mod_state->endidx = PyLong_FromLong(0L); -#ifndef __APPLE__ - if (!isatty(STDOUT_FILENO)) { - /* Issue #19884: stdout is not a terminal. Disable meta modifier - keys to not write the ANSI sequence "\033[1034h" into stdout. On - terminals supporting 8 bit characters like TERM=xterm-256color - (which is now the default Fedora since Fedora 18), the meta key is - used to enable support of 8 bit characters (ANSI sequence - "\033[1034h"). - - With libedit, this call makes readline() crash. */ - rl_variable_bind ("enable-meta-key", "off"); - } +#ifdef __APPLE__ + if (!using_libedit_emulation) #endif + { + if (!isatty(STDOUT_FILENO)) { + /* Issue #19884: stdout is not a terminal. Disable meta modifier + keys to not write the ANSI sequence "\033[1034h" into stdout. On + terminals supporting 8 bit characters like TERM=xterm-256color + (which is now the default Fedora since Fedora 18), the meta key is + used to enable support of 8 bit characters (ANSI sequence + "\033[1034h"). + + With libedit, this call makes readline() crash. */ + rl_variable_bind ("enable-meta-key", "off"); + } + } /* Initialize (allows .inputrc to override) * diff --git a/Modules/resource.c b/Modules/resource.c index 3a1cf09..970ee84 100644 --- a/Modules/resource.c +++ b/Modules/resource.c @@ -107,29 +107,46 @@ resource_getrusage(PyObject *self, PyObject *args) } static int -py2rlimit(PyObject *curobj, PyObject *maxobj, struct rlimit *rl_out) +py2rlimit(PyObject *limits, struct rlimit *rl_out) { + PyObject *curobj, *maxobj; + limits = PySequence_Tuple(limits); + if (!limits) + /* Here limits is a borrowed reference */ + return -1; + + if (PyTuple_GET_SIZE(limits) != 2) { + PyErr_SetString(PyExc_ValueError, + "expected a tuple of 2 integers"); + goto error; + } + curobj = PyTuple_GET_ITEM(limits, 0); + maxobj = PyTuple_GET_ITEM(limits, 1); #if !defined(HAVE_LARGEFILE_SUPPORT) rl_out->rlim_cur = PyLong_AsLong(curobj); if (rl_out->rlim_cur == (rlim_t)-1 && PyErr_Occurred()) - return -1; + goto error; rl_out->rlim_max = PyLong_AsLong(maxobj); if (rl_out->rlim_max == (rlim_t)-1 && PyErr_Occurred()) - return -1; + goto error; #else /* The limits are probably bigger than a long */ rl_out->rlim_cur = PyLong_AsLongLong(curobj); if (rl_out->rlim_cur == (rlim_t)-1 && PyErr_Occurred()) - return -1; + goto error; rl_out->rlim_max = PyLong_AsLongLong(maxobj); if (rl_out->rlim_max == (rlim_t)-1 && PyErr_Occurred()) - return -1; + goto error; #endif + Py_DECREF(limits); rl_out->rlim_cur = rl_out->rlim_cur & RLIM_INFINITY; rl_out->rlim_max = rl_out->rlim_max & RLIM_INFINITY; return 0; +error: + Py_DECREF(limits); + return -1; } static PyObject* @@ -172,7 +189,7 @@ resource_setrlimit(PyObject *self, PyObject *args) { struct rlimit rl; int resource; - PyObject *limits, *curobj, *maxobj; + PyObject *limits; if (!PyArg_ParseTuple(args, "iO:setrlimit", &resource, &limits)) return NULL; @@ -183,21 +200,8 @@ resource_setrlimit(PyObject *self, PyObject *args) return NULL; } - limits = PySequence_Tuple(limits); - if (!limits) - /* Here limits is a borrowed reference */ + if (py2rlimit(limits, &rl) < 0) { return NULL; - - if (PyTuple_GET_SIZE(limits) != 2) { - PyErr_SetString(PyExc_ValueError, - "expected a tuple of 2 integers"); - goto error; - } - curobj = PyTuple_GET_ITEM(limits, 0); - maxobj = PyTuple_GET_ITEM(limits, 1); - - if (py2rlimit(curobj, maxobj, &rl) < 0) { - goto error; } if (setrlimit(resource, &rl) == -1) { @@ -209,15 +213,9 @@ resource_setrlimit(PyObject *self, PyObject *args) "not allowed to raise maximum limit"); else PyErr_SetFromErrno(PyExc_OSError); - goto error; + return NULL; } - Py_DECREF(limits); - Py_INCREF(Py_None); - return Py_None; - - error: - Py_DECREF(limits); - return NULL; + Py_RETURN_NONE; } #ifdef HAVE_PRLIMIT @@ -227,10 +225,10 @@ resource_prlimit(PyObject *self, PyObject *args) struct rlimit old_limit, new_limit; int resource, retval; pid_t pid; - PyObject *curobj=NULL, *maxobj=NULL; + PyObject *limits = NULL; - if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i|(OO):prlimit", - &pid, &resource, &curobj, &maxobj)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i|O:prlimit", + &pid, &resource, &limits)) return NULL; if (resource < 0 || resource >= RLIM_NLIMITS) { @@ -239,8 +237,8 @@ resource_prlimit(PyObject *self, PyObject *args) return NULL; } - if (curobj != NULL) { - if (py2rlimit(curobj, maxobj, &new_limit) < 0) { + if (limits != NULL) { + if (py2rlimit(limits, &new_limit) < 0) { return NULL; } retval = prlimit(pid, resource, &new_limit, &old_limit); diff --git a/Modules/sha1module.c b/Modules/sha1module.c index 74b94ba..6cb32ed 100644 --- a/Modules/sha1module.c +++ b/Modules/sha1module.c @@ -486,8 +486,8 @@ Return a new SHA1 hash object; optionally initialized with a string. [clinic start generated code]*/ static PyObject * -_sha1_sha1_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=3e4e841386b9e8db input=27ea54281d995ec2]*/ +_sha1_sha1_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=e5982830d1dece51 input=27ea54281d995ec2]*/ { SHA1object *new; Py_buffer buf; diff --git a/Modules/sha256module.c b/Modules/sha256module.c index 70c2b5b..8f067f1 100644 --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -607,8 +607,8 @@ Return a new SHA-256 hash object; optionally initialized with a string. [clinic start generated code]*/ static PyObject * -_sha256_sha256_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=d70e6e2d97112844 input=09cce3fb855056b2]*/ +_sha256_sha256_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=fa644436dcea5c31 input=09cce3fb855056b2]*/ { SHAobject *new; Py_buffer buf; @@ -647,8 +647,8 @@ Return a new SHA-224 hash object; optionally initialized with a string. [clinic start generated code]*/ static PyObject * -_sha256_sha224_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=f2822bf28416b42a input=27a04ba24c353a73]*/ +_sha256_sha224_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=21e3ba22c3404f93 input=27a04ba24c353a73]*/ { SHAobject *new; Py_buffer buf; diff --git a/Modules/sha512module.c b/Modules/sha512module.c index 76942aa..f9ff0ea 100644 --- a/Modules/sha512module.c +++ b/Modules/sha512module.c @@ -678,8 +678,8 @@ Return a new SHA-512 hash object; optionally initialized with a string. [clinic start generated code]*/ static PyObject * -_sha512_sha512_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=da13bc0a94da6de3 input=e69bad9ae9b6a308]*/ +_sha512_sha512_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=8b865a2df73bd387 input=e69bad9ae9b6a308]*/ { SHAobject *new; Py_buffer buf; @@ -718,8 +718,8 @@ Return a new SHA-384 hash object; optionally initialized with a string. [clinic start generated code]*/ static PyObject * -_sha512_sha384_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=ac731aea5509174d input=c9327788d4ea4545]*/ +_sha512_sha384_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=ae4b2e26decf81e8 input=c9327788d4ea4545]*/ { SHAobject *new; Py_buffer buf; diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index da454de..753d987 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -154,18 +154,18 @@ itimer_retval(struct itimerval *iv) r = PyTuple_New(2); if (r == NULL) - return NULL; + return NULL; if(!(v = PyFloat_FromDouble(double_from_timeval(&iv->it_value)))) { - Py_DECREF(r); - return NULL; + Py_DECREF(r); + return NULL; } PyTuple_SET_ITEM(r, 0, v); if(!(v = PyFloat_FromDouble(double_from_timeval(&iv->it_interval)))) { - Py_DECREF(r); - return NULL; + Py_DECREF(r); + return NULL; } PyTuple_SET_ITEM(r, 1, v); @@ -340,8 +340,8 @@ Arrange for SIGALRM to arrive after the given number of seconds. [clinic start generated code]*/ static long -signal_alarm_impl(PyModuleDef *module, int seconds) -/*[clinic end generated code: output=f5f9badaab25d3e7 input=0d5e97e0e6f39e86]*/ +signal_alarm_impl(PyObject *module, int seconds) +/*[clinic end generated code: output=144232290814c298 input=0d5e97e0e6f39e86]*/ { /* alarm() returns the number of seconds remaining */ return (long)alarm(seconds); @@ -358,8 +358,8 @@ Wait until a signal arrives. [clinic start generated code]*/ static PyObject * -signal_pause_impl(PyModuleDef *module) -/*[clinic end generated code: output=9245704caa63bbe9 input=f03de0f875752062]*/ +signal_pause_impl(PyObject *module) +/*[clinic end generated code: output=391656788b3c3929 input=f03de0f875752062]*/ { Py_BEGIN_ALLOW_THREADS (void)pause(); @@ -394,8 +394,8 @@ the first is the signal number, the second is the interrupted stack frame. [clinic start generated code]*/ static PyObject * -signal_signal_impl(PyModuleDef *module, int signalnum, PyObject *handler) -/*[clinic end generated code: output=622d7d0beebea546 input=deee84af5fa0432c]*/ +signal_signal_impl(PyObject *module, int signalnum, PyObject *handler) +/*[clinic end generated code: output=b44cfda43780f3a1 input=deee84af5fa0432c]*/ { PyObject *old_handler; void (*func)(int); @@ -472,8 +472,8 @@ The return value can be: [clinic start generated code]*/ static PyObject * -signal_getsignal_impl(PyModuleDef *module, int signalnum) -/*[clinic end generated code: output=d50ec355757e360c input=ac23a00f19dfa509]*/ +signal_getsignal_impl(PyObject *module, int signalnum) +/*[clinic end generated code: output=35b3e0e796fd555e input=ac23a00f19dfa509]*/ { PyObject *old_handler; if (signalnum < 1 || signalnum >= NSIG) { @@ -507,8 +507,8 @@ signal sig, else system calls will be interrupted. [clinic start generated code]*/ static PyObject * -signal_siginterrupt_impl(PyModuleDef *module, int signalnum, int flag) -/*[clinic end generated code: output=5dcf8b031b0e8044 input=4160acacca3e2099]*/ +signal_siginterrupt_impl(PyObject *module, int signalnum, int flag) +/*[clinic end generated code: output=063816243d85dd19 input=4160acacca3e2099]*/ { if (signalnum < 1 || signalnum >= NSIG) { PyErr_SetString(PyExc_ValueError, @@ -682,9 +682,9 @@ Returns old values as a tuple: (delay, interval). [clinic start generated code]*/ static PyObject * -signal_setitimer_impl(PyModuleDef *module, int which, double seconds, +signal_setitimer_impl(PyObject *module, int which, double seconds, double interval) -/*[clinic end generated code: output=9a9227a27bd05988 input=0d27d417cfcbd51a]*/ +/*[clinic end generated code: output=6f51da0fe0787f2c input=0d27d417cfcbd51a]*/ { struct itimerval new, old; @@ -714,8 +714,8 @@ Returns current value of given itimer. [clinic start generated code]*/ static PyObject * -signal_getitimer_impl(PyModuleDef *module, int which) -/*[clinic end generated code: output=d1349ab18aadc569 input=f7d21d38f3490627]*/ +signal_getitimer_impl(PyObject *module, int which) +/*[clinic end generated code: output=9e053175d517db40 input=f7d21d38f3490627]*/ { struct itimerval old; @@ -829,8 +829,8 @@ Fetch and/or change the signal mask of the calling thread. [clinic start generated code]*/ static PyObject * -signal_pthread_sigmask_impl(PyModuleDef *module, int how, PyObject *mask) -/*[clinic end generated code: output=b043a9f0eeb1e075 input=f3b7d7a61b7b8283]*/ +signal_pthread_sigmask_impl(PyObject *module, int how, PyObject *mask) +/*[clinic end generated code: output=ff640fe092bc9181 input=f3b7d7a61b7b8283]*/ { sigset_t newmask, previous; int err; @@ -867,8 +867,8 @@ the calling thread. [clinic start generated code]*/ static PyObject * -signal_sigpending_impl(PyModuleDef *module) -/*[clinic end generated code: output=bf4ced803e7e51dd input=e0036c016f874e29]*/ +signal_sigpending_impl(PyObject *module) +/*[clinic end generated code: output=53375ffe89325022 input=e0036c016f874e29]*/ { int err; sigset_t mask; @@ -897,8 +897,8 @@ and returns the signal number. [clinic start generated code]*/ static PyObject * -signal_sigwait(PyModuleDef *module, PyObject *sigset) -/*[clinic end generated code: output=dae53048b0336a5c input=11af2d82d83c2e94]*/ +signal_sigwait(PyObject *module, PyObject *sigset) +/*[clinic end generated code: output=557173647424f6e4 input=11af2d82d83c2e94]*/ { sigset_t set; int err, signum; @@ -986,8 +986,8 @@ Returns a struct_siginfo containing information about the signal. [clinic start generated code]*/ static PyObject * -signal_sigwaitinfo(PyModuleDef *module, PyObject *sigset) -/*[clinic end generated code: output=0bb53b07e5e926b5 input=f3779a74a991e171]*/ +signal_sigwaitinfo(PyObject *module, PyObject *sigset) +/*[clinic end generated code: output=c40f27b269cd2309 input=f3779a74a991e171]*/ { sigset_t set; siginfo_t si; @@ -1026,9 +1026,9 @@ The timeout is specified in seconds, with floating point numbers allowed. [clinic start generated code]*/ static PyObject * -signal_sigtimedwait_impl(PyModuleDef *module, PyObject *sigset, +signal_sigtimedwait_impl(PyObject *module, PyObject *sigset, PyObject *timeout_obj) -/*[clinic end generated code: output=c1960b5cea139929 input=53fd4ea3e3724eb8]*/ +/*[clinic end generated code: output=f7eff31e679f4312 input=53fd4ea3e3724eb8]*/ { struct timespec ts; sigset_t set; @@ -1097,8 +1097,8 @@ Send a signal to a thread. [clinic start generated code]*/ static PyObject * -signal_pthread_kill_impl(PyModuleDef *module, long thread_id, int signalnum) -/*[clinic end generated code: output=35aed2713c756d7a input=77ed6a3b6f2a8122]*/ +signal_pthread_kill_impl(PyObject *module, long thread_id, int signalnum) +/*[clinic end generated code: output=2a09ce41f1c4228a input=77ed6a3b6f2a8122]*/ { int err; @@ -1479,9 +1479,9 @@ PyInit__signal(void) #if defined (HAVE_SETITIMER) || defined (HAVE_GETITIMER) ItimerError = PyErr_NewException("signal.ItimerError", - PyExc_IOError, NULL); + PyExc_IOError, NULL); if (ItimerError != NULL) - PyDict_SetItemString(d, "ItimerError", ItimerError); + PyDict_SetItemString(d, "ItimerError", ItimerError); #endif #ifdef CTRL_C_EVENT diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 8f571a2..af6cc94 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -168,12 +168,14 @@ if_indextoname(index) -- return the corresponding interface name\n\ #endif #ifdef HAVE_GETHOSTBYNAME_R -# if defined(_AIX) +# if defined(_AIX) && !defined(_LINUX_SOURCE_COMPAT) # define HAVE_GETHOSTBYNAME_R_3_ARG # elif defined(__sun) || defined(__sgi) # define HAVE_GETHOSTBYNAME_R_5_ARG # elif defined(linux) /* Rely on the configure script */ +# elif defined(_LINUX_SOURCE_COMPAT) /* Linux compatibility on AIX */ +# define HAVE_GETHOSTBYNAME_R_6_ARG # else # undef HAVE_GETHOSTBYNAME_R # endif @@ -648,7 +650,7 @@ internal_select(PySocketSockObject *s, int writing, _PyTime_t interval, assert(!(connect && !writing)); /* Guard against closed socket */ - if (s->sock_fd < 0) + if (s->sock_fd == INVALID_SOCKET) return 0; /* Prefer poll, if available, since you can poll() any fd @@ -1967,12 +1969,13 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret) return 1; } #endif /* AF_UNIX */ + #if defined(AF_NETLINK) - case AF_NETLINK: - { - *len_ret = sizeof (struct sockaddr_nl); - return 1; - } + case AF_NETLINK: + { + *len_ret = sizeof (struct sockaddr_nl); + return 1; + } #endif #ifdef AF_RDS @@ -2568,8 +2571,9 @@ sock_close(PySocketSockObject *s) * and http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html * for more details. */ - if ((fd = s->sock_fd) != -1) { - s->sock_fd = -1; + fd = s->sock_fd; + if (fd != INVALID_SOCKET) { + s->sock_fd = INVALID_SOCKET; Py_BEGIN_ALLOW_THREADS (void) SOCKETCLOSE(fd); Py_END_ALLOW_THREADS @@ -2587,7 +2591,7 @@ static PyObject * sock_detach(PySocketSockObject *s) { SOCKET_T fd = s->sock_fd; - s->sock_fd = -1; + s->sock_fd = INVALID_SOCKET; return PyLong_FromSocket_t(fd); } @@ -4165,7 +4169,7 @@ static PyGetSetDef sock_getsetlist[] = { static void sock_dealloc(PySocketSockObject *s) { - if (s->sock_fd != -1) { + if (s->sock_fd != INVALID_SOCKET) { PyObject *exc, *val, *tb; Py_ssize_t old_refcount = Py_REFCNT(s); ++Py_REFCNT(s); @@ -4221,7 +4225,7 @@ sock_new(PyTypeObject *type, PyObject *args, PyObject *kwds) new = type->tp_alloc(type, 0); if (new != NULL) { - ((PySocketSockObject *)new)->sock_fd = -1; + ((PySocketSockObject *)new)->sock_fd = INVALID_SOCKET; ((PySocketSockObject *)new)->sock_timeout = _PyTime_FromSeconds(-1); ((PySocketSockObject *)new)->errorhandler = &set_error; } @@ -6537,7 +6541,7 @@ PyInit__socket(void) PyModule_AddIntConstant(m, "SOMAXCONN", 5); /* Common value */ #endif - /* Ancilliary message types */ + /* Ancillary message types */ #ifdef SCM_RIGHTS PyModule_AddIntMacro(m, SCM_RIGHTS); #endif diff --git a/Modules/spwdmodule.c b/Modules/spwdmodule.c index 49324d5..4b9f3cd 100644 --- a/Modules/spwdmodule.c +++ b/Modules/spwdmodule.c @@ -125,8 +125,8 @@ See `help(spwd)` for more on shadow password database entries. [clinic start generated code]*/ static PyObject * -spwd_getspnam_impl(PyModuleDef *module, PyObject *arg) -/*[clinic end generated code: output=9f6bbe51a4eb3b21 input=dd89429e6167a00f]*/ +spwd_getspnam_impl(PyObject *module, PyObject *arg) +/*[clinic end generated code: output=701250cf57dc6ebe input=dd89429e6167a00f]*/ { char *name; struct spwd *p; @@ -159,8 +159,8 @@ See `help(spwd)` for more on shadow password database entries. [clinic start generated code]*/ static PyObject * -spwd_getspall_impl(PyModuleDef *module) -/*[clinic end generated code: output=b12d8ec7bdb29612 input=b2c84b7857d622bd]*/ +spwd_getspall_impl(PyObject *module) +/*[clinic end generated code: output=4fda298d6bf6d057 input=b2c84b7857d622bd]*/ { PyObject *d; struct spwd *p; diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index fe4e908..1f9ba78 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -1041,8 +1041,8 @@ _cmpname(PyObject *self, int code, const char* name, int namelen) { /* check if code corresponds to the given name */ int i; - char buffer[NAME_MAXLEN]; - if (!_getucname(self, code, buffer, sizeof(buffer), 1)) + char buffer[NAME_MAXLEN+1]; + if (!_getucname(self, code, buffer, NAME_MAXLEN, 1)) return 0; for (i = 0; i < namelen; i++) { if (Py_TOUPPER(Py_CHARMASK(name[i])) != buffer[i]) @@ -1195,10 +1195,10 @@ static PyObject * unicodedata_UCD_name_impl(PyObject *self, int chr, PyObject *default_value) /*[clinic end generated code: output=6bbb37a326407707 input=3e0367f534de56d9]*/ { - char name[NAME_MAXLEN]; + char name[NAME_MAXLEN+1]; Py_UCS4 c = (Py_UCS4)chr; - if (!_getucname(self, c, name, sizeof(name), 0)) { + if (!_getucname(self, c, name, NAME_MAXLEN, 0)) { if (default_value == NULL) { PyErr_SetString(PyExc_ValueError, "no such name"); return NULL; @@ -1232,7 +1232,7 @@ unicodedata_UCD_lookup_impl(PyObject *self, const char *name, { Py_UCS4 code; unsigned int index; - if (name_length > INT_MAX) { + if (name_length > NAME_MAXLEN) { PyErr_SetString(PyExc_KeyError, "name too long"); return NULL; } diff --git a/Modules/zipimport.c b/Modules/zipimport.c index e840271..7473a8f 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -1315,7 +1315,7 @@ unmarshal_code(PyObject *pathname, PyObject *data, time_t mtime) return code; } -/* Replace any occurances of "\r\n?" in the input string with "\n". +/* Replace any occurrences of "\r\n?" in the input string with "\n". This converts DOS and Mac line endings to Unix line endings. Also append a trailing "\n" to be compatible with PyParser_SimpleParseFile(). Returns a new reference. */ @@ -1362,22 +1362,16 @@ normalize_line_endings(PyObject *source) static PyObject * compile_source(PyObject *pathname, PyObject *source) { - PyObject *code, *fixed_source, *pathbytes; - - pathbytes = PyUnicode_EncodeFSDefault(pathname); - if (pathbytes == NULL) - return NULL; + PyObject *code, *fixed_source; fixed_source = normalize_line_endings(source); if (fixed_source == NULL) { - Py_DECREF(pathbytes); return NULL; } - code = Py_CompileString(PyBytes_AsString(fixed_source), - PyBytes_AsString(pathbytes), - Py_file_input); - Py_DECREF(pathbytes); + code = Py_CompileStringObject(PyBytes_AsString(fixed_source), + pathname, Py_file_input, NULL, -1); + Py_DECREF(fixed_source); return code; } diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 16cc178..fccb616 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -1,5 +1,5 @@ /* zlibmodule.c -- gzip-compatible data compression */ -/* See http://www.gzip.org/zlib/ */ +/* See http://zlib.net/ */ /* Windows users: read Python's PCbuild\readme.txt */ @@ -23,7 +23,7 @@ #endif #if defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1221 -#define AT_LEAST_ZLIB_1_2_2_1 +# define AT_LEAST_ZLIB_1_2_2_1 #endif /* The following parameters are copied from zutil.h, version 0.95 */ @@ -115,6 +115,7 @@ newcompobject(PyTypeObject *type) #ifdef WITH_THREAD self->lock = PyThread_allocate_lock(); if (self->lock == NULL) { + Py_DECREF(self); PyErr_SetString(PyExc_MemoryError, "Unable to allocate lock"); return NULL; } @@ -138,6 +139,63 @@ PyZlib_Free(voidpf ctx, void *ptr) PyMem_RawFree(ptr); } +static void +arrange_input_buffer(z_stream *zst, Py_ssize_t *remains) +{ + zst->avail_in = Py_MIN((size_t)*remains, UINT_MAX); + *remains -= zst->avail_in; +} + +static Py_ssize_t +arrange_output_buffer_with_maximum(z_stream *zst, PyObject **buffer, + Py_ssize_t length, + Py_ssize_t max_length) +{ + Py_ssize_t occupied; + + if (*buffer == NULL) { + if (!(*buffer = PyBytes_FromStringAndSize(NULL, length))) + return -1; + occupied = 0; + } + else { + occupied = zst->next_out - (Byte *)PyBytes_AS_STRING(*buffer); + + if (length == occupied) { + Py_ssize_t new_length; + assert(length <= max_length); + /* can not scale the buffer over max_length */ + if (length == max_length) + return -2; + if (length <= (max_length >> 1)) + new_length = length << 1; + else + new_length = max_length; + if (_PyBytes_Resize(buffer, new_length) < 0) + return -1; + length = new_length; + } + } + + zst->avail_out = Py_MIN((size_t)(length - occupied), UINT_MAX); + zst->next_out = (Byte *)PyBytes_AS_STRING(*buffer) + occupied; + + return length; +} + +static Py_ssize_t +arrange_output_buffer(z_stream *zst, PyObject **buffer, Py_ssize_t length) +{ + Py_ssize_t ret; + + ret = arrange_output_buffer_with_maximum(zst, buffer, length, + PY_SSIZE_T_MAX); + if (ret == -2) + PyErr_NoMemory(); + + return ret; +} + /*[clinic input] zlib.compress @@ -151,53 +209,33 @@ Returns a bytes object containing compressed data. [clinic start generated code]*/ static PyObject * -zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int level) -/*[clinic end generated code: output=5d7dd4588788efd3 input=be3abe9934bda4b3]*/ +zlib_compress_impl(PyObject *module, Py_buffer *bytes, int level) +/*[clinic end generated code: output=ae64c2c3076321a0 input=be3abe9934bda4b3]*/ { - PyObject *ReturnVal = NULL; - Byte *input, *output = NULL; - unsigned int length; - int err; + PyObject *RetVal = NULL; + Byte *ibuf; + Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE; + int err, flush; z_stream zst; - if ((size_t)bytes->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); - goto error; - } - input = bytes->buf; - length = (unsigned int)bytes->len; - - zst.avail_out = length + length/1000 + 12 + 1; - - output = (Byte*)PyMem_Malloc(zst.avail_out); - if (output == NULL) { - PyErr_SetString(PyExc_MemoryError, - "Can't allocate memory to compress data"); - goto error; - } - - /* Past the point of no return. From here on out, we need to make sure - we clean up mallocs & INCREFs. */ + ibuf = bytes->buf; + ibuflen = bytes->len; zst.opaque = NULL; zst.zalloc = PyZlib_Malloc; zst.zfree = PyZlib_Free; - zst.next_out = (Byte *)output; - zst.next_in = (Byte *)input; - zst.avail_in = length; + zst.next_in = ibuf; err = deflateInit(&zst, level); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Out of memory while compressing data"); goto error; - case(Z_STREAM_ERROR): - PyErr_SetString(ZlibError, - "Bad compression level"); + case Z_STREAM_ERROR: + PyErr_SetString(ZlibError, "Bad compression level"); goto error; default: deflateEnd(&zst); @@ -205,41 +243,59 @@ zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int level) goto error; } - Py_BEGIN_ALLOW_THREADS; - err = deflate(&zst, Z_FINISH); - Py_END_ALLOW_THREADS; + do { + arrange_input_buffer(&zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - if (err != Z_STREAM_END) { - zlib_error(zst, err, "while compressing data"); - deflateEnd(&zst); - goto error; - } + do { + obuflen = arrange_output_buffer(&zst, &RetVal, obuflen); + if (obuflen < 0) { + deflateEnd(&zst); + goto error; + } + + Py_BEGIN_ALLOW_THREADS + err = deflate(&zst, flush); + Py_END_ALLOW_THREADS + + if (err == Z_STREAM_ERROR) { + deflateEnd(&zst); + zlib_error(zst, err, "while compressing data"); + goto error; + } - err=deflateEnd(&zst); - if (err == Z_OK) - ReturnVal = PyBytes_FromStringAndSize((char *)output, - zst.total_out); + } while (zst.avail_out == 0); + assert(zst.avail_in == 0); + + } while (flush != Z_FINISH); + assert(err == Z_STREAM_END); + + err = deflateEnd(&zst); + if (err == Z_OK) { + if (_PyBytes_Resize(&RetVal, zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) < 0) + goto error; + return RetVal; + } else zlib_error(zst, err, "while finishing compression"); - error: - PyMem_Free(output); - - return ReturnVal; + Py_XDECREF(RetVal); + return NULL; } /*[python input] -class capped_uint_converter(CConverter): - type = 'unsigned int' - converter = 'capped_uint_converter' +class ssize_t_converter(CConverter): + type = 'Py_ssize_t' + converter = 'ssize_t_converter' c_ignored_default = "0" [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=35521e4e733823c7]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=5f34ba1b394cb8e7]*/ static int -capped_uint_converter(PyObject *obj, void *ptr) +ssize_t_converter(PyObject *obj, void *ptr) { PyObject *long_obj; Py_ssize_t val; @@ -253,19 +309,7 @@ capped_uint_converter(PyObject *obj, void *ptr) if (val == -1 && PyErr_Occurred()) { return 0; } - if (val < 0) { - PyErr_SetString(PyExc_ValueError, - "value must be positive"); - return 0; - } - - if ((size_t)val > UINT_MAX) { - *(unsigned int *)ptr = UINT_MAX; - } - else { - *(unsigned int *)ptr = Py_SAFE_DOWNCAST(val, Py_ssize_t, - unsigned int); - } + *(Py_ssize_t *)ptr = val; return 1; } @@ -276,7 +320,7 @@ zlib.decompress Compressed data. wbits: int(c_default="MAX_WBITS") = MAX_WBITS The window buffer size and container format. - bufsize: capped_uint(c_default="DEF_BUF_SIZE") = DEF_BUF_SIZE + bufsize: ssize_t(c_default="DEF_BUF_SIZE") = DEF_BUF_SIZE The initial output buffer size. / @@ -284,45 +328,37 @@ Returns a bytes object containing the uncompressed data. [clinic start generated code]*/ static PyObject * -zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, - unsigned int bufsize) -/*[clinic end generated code: output=444d0987f3429574 input=75123b0d4ff0541d]*/ +zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, + Py_ssize_t bufsize) +/*[clinic end generated code: output=77c7e35111dc8c42 input=c13dd2c5696cd17f]*/ { - PyObject *result_str = NULL; - Byte *input; - unsigned int length; - int err; - unsigned int new_bufsize; + PyObject *RetVal = NULL; + Byte *ibuf; + Py_ssize_t ibuflen; + int err, flush; z_stream zst; - if ((size_t)data->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); - goto error; - } - input = data->buf; - length = (unsigned int)data->len; - - if (bufsize == 0) + if (bufsize < 0) { + PyErr_SetString(PyExc_ValueError, "bufsize must be non-negative"); + return NULL; + } else if (bufsize == 0) { bufsize = 1; + } - zst.avail_in = length; - zst.avail_out = bufsize; - - if (!(result_str = PyBytes_FromStringAndSize(NULL, bufsize))) - goto error; + ibuf = data->buf; + ibuflen = data->len; zst.opaque = NULL; zst.zalloc = PyZlib_Malloc; zst.zfree = PyZlib_Free; - zst.next_out = (Byte *)PyBytes_AS_STRING(result_str); - zst.next_in = (Byte *)input; + zst.avail_in = 0; + zst.next_in = ibuf; err = inflateInit2(&zst, wbits); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Out of memory while decompressing data"); goto error; @@ -333,46 +369,46 @@ zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, } do { - Py_BEGIN_ALLOW_THREADS - err=inflate(&zst, Z_FINISH); - Py_END_ALLOW_THREADS + arrange_input_buffer(&zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - switch(err) { - case(Z_STREAM_END): - break; - case(Z_BUF_ERROR): - /* - * If there is at least 1 byte of room according to zst.avail_out - * and we get this error, assume that it means zlib cannot - * process the inflate call() due to an error in the data. - */ - if (zst.avail_out > 0) { - zlib_error(zst, err, "while decompressing data"); + do { + bufsize = arrange_output_buffer(&zst, &RetVal, bufsize); + if (bufsize < 0) { inflateEnd(&zst); goto error; } - /* fall through */ - case(Z_OK): - /* need more memory */ - if (bufsize <= (UINT_MAX >> 1)) - new_bufsize = bufsize << 1; - else - new_bufsize = UINT_MAX; - if (_PyBytes_Resize(&result_str, new_bufsize) < 0) { + + Py_BEGIN_ALLOW_THREADS + err = inflate(&zst, flush); + Py_END_ALLOW_THREADS + + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + case Z_MEM_ERROR: inflateEnd(&zst); + PyErr_SetString(PyExc_MemoryError, + "Out of memory while decompressing data"); + goto error; + default: + inflateEnd(&zst); + zlib_error(zst, err, "while decompressing data"); goto error; } - zst.next_out = - (unsigned char *)PyBytes_AS_STRING(result_str) + bufsize; - zst.avail_out = bufsize; - bufsize = new_bufsize; - break; - default: - inflateEnd(&zst); - zlib_error(zst, err, "while decompressing data"); - goto error; - } - } while (err != Z_STREAM_END); + + } while (zst.avail_out == 0); + + } while (err != Z_STREAM_END && ibuflen != 0); + + + if (err != Z_STREAM_END) { + inflateEnd(&zst); + zlib_error(zst, err, "while decompressing data"); + goto error; + } err = inflateEnd(&zst); if (err != Z_OK) { @@ -380,13 +416,14 @@ zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, goto error; } - if (_PyBytes_Resize(&result_str, zst.total_out) < 0) + if (_PyBytes_Resize(&RetVal, zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) < 0) goto error; - return result_str; + return RetVal; error: - Py_XDECREF(result_str); + Py_XDECREF(RetVal); return NULL; } @@ -419,9 +456,9 @@ Return a compressor object. [clinic start generated code]*/ static PyObject * -zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, +zlib_compressobj_impl(PyObject *module, int level, int method, int wbits, int memLevel, int strategy, Py_buffer *zdict) -/*[clinic end generated code: output=2949bbb9a5723ccd input=2fa3d026f90ab8d5]*/ +/*[clinic end generated code: output=8b5bed9c8fc3814d input=2fa3d026f90ab8d5]*/ { compobject *self = NULL; int err; @@ -433,7 +470,7 @@ zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, } self = newcompobject(&Comptype); - if (self==NULL) + if (self == NULL) goto error; self->zst.opaque = NULL; self->zst.zalloc = PyZlib_Malloc; @@ -441,8 +478,8 @@ zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, self->zst.next_in = NULL; self->zst.avail_in = 0; err = deflateInit2(&self->zst, level, method, wbits, memLevel, strategy); - switch(err) { - case (Z_OK): + switch (err) { + case Z_OK: self->is_initialised = 1; if (zdict->buf == NULL) { goto success; @@ -450,9 +487,9 @@ zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, err = deflateSetDictionary(&self->zst, zdict->buf, (unsigned int)zdict->len); switch (err) { - case (Z_OK): + case Z_OK: goto success; - case (Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Invalid dictionary"); goto error; default: @@ -460,11 +497,11 @@ zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, goto error; } } - case (Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for compression object"); goto error; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Invalid initialization option"); goto error; default: @@ -475,7 +512,7 @@ zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, error: Py_CLEAR(self); success: - return (PyObject*)self; + return (PyObject *)self; } static int @@ -493,7 +530,7 @@ set_inflate_zdict(compobject *self) PyBuffer_Release(&zdict_buf); return -1; } - err = inflateSetDictionary(&(self->zst), + err = inflateSetDictionary(&self->zst, zdict_buf.buf, (unsigned int)zdict_buf.len); PyBuffer_Release(&zdict_buf); if (err != Z_OK) { @@ -516,8 +553,8 @@ Return a decompressor object. [clinic start generated code]*/ static PyObject * -zlib_decompressobj_impl(PyModuleDef *module, int wbits, PyObject *zdict) -/*[clinic end generated code: output=8ccd583fbd631798 input=d3832b8511fc977b]*/ +zlib_decompressobj_impl(PyObject *module, int wbits, PyObject *zdict) +/*[clinic end generated code: output=3069b99994f36906 input=d3832b8511fc977b]*/ { int err; compobject *self; @@ -530,7 +567,7 @@ zlib_decompressobj_impl(PyModuleDef *module, int wbits, PyObject *zdict) self = newcompobject(&Decomptype); if (self == NULL) - return(NULL); + return NULL; self->zst.opaque = NULL; self->zst.zalloc = PyZlib_Malloc; self->zst.zfree = PyZlib_Free; @@ -541,8 +578,8 @@ zlib_decompressobj_impl(PyModuleDef *module, int wbits, PyObject *zdict) self->zdict = zdict; } err = inflateInit2(&self->zst, wbits); - switch(err) { - case (Z_OK): + switch (err) { + case Z_OK: self->is_initialised = 1; if (self->zdict != NULL && wbits < 0) { #ifdef AT_LEAST_ZLIB_1_2_2_1 @@ -558,12 +595,12 @@ zlib_decompressobj_impl(PyModuleDef *module, int wbits, PyObject *zdict) return NULL; #endif } - return (PyObject*)self; - case(Z_STREAM_ERROR): + return (PyObject *)self; + case Z_STREAM_ERROR: Py_DECREF(self); PyErr_SetString(PyExc_ValueError, "Invalid initialization option"); return NULL; - case (Z_MEM_ERROR): + case Z_MEM_ERROR: Py_DECREF(self); PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for decompression object"); @@ -621,113 +658,90 @@ static PyObject * zlib_Compress_compress_impl(compobject *self, Py_buffer *data) /*[clinic end generated code: output=5d5cd791cbc6a7f4 input=0d95908d6e64fab8]*/ { + PyObject *RetVal = NULL; + Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE; int err; - unsigned int inplen; - unsigned int length = DEF_BUF_SIZE, new_length; - PyObject *RetVal; - Byte *input; - unsigned long start_total_out; - - if ((size_t)data->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); - return NULL; - } - input = data->buf; - inplen = (unsigned int)data->len; - if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) - return NULL; + self->zst.next_in = data->buf; + ibuflen = data->len; ENTER_ZLIB(self); - start_total_out = self->zst.total_out; - self->zst.avail_in = inplen; - self->zst.next_in = input; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); - - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), Z_NO_FLUSH); - Py_END_ALLOW_THREADS - - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while (err == Z_OK && self->zst.avail_out == 0) { - if (length <= (UINT_MAX >> 1)) - new_length = length << 1; - else - new_length = UINT_MAX; - if (_PyBytes_Resize(&RetVal, new_length) < 0) { - Py_CLEAR(RetVal); - goto done; - } - self->zst.next_out = - (unsigned char *)PyBytes_AS_STRING(RetVal) + length; - self->zst.avail_out = length; - length = new_length; + do { + arrange_input_buffer(&self->zst, &ibuflen); - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), Z_NO_FLUSH); - Py_END_ALLOW_THREADS - } - /* We will only get Z_BUF_ERROR if the output buffer was full but - there wasn't more output when we tried again, so it is not an error - condition. - */ + do { + obuflen = arrange_output_buffer(&self->zst, &RetVal, obuflen); + if (obuflen < 0) + goto error; - if (err != Z_OK && err != Z_BUF_ERROR) { - zlib_error(self->zst, err, "while compressing data"); - Py_CLEAR(RetVal); - goto done; - } - if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { - Py_CLEAR(RetVal); - } + Py_BEGIN_ALLOW_THREADS + err = deflate(&self->zst, Z_NO_FLUSH); + Py_END_ALLOW_THREADS + + if (err == Z_STREAM_ERROR) { + zlib_error(self->zst, err, "while compressing data"); + goto error; + } + + } while (self->zst.avail_out == 0); + assert(self->zst.avail_in == 0); + + } while (ibuflen != 0); + + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) == 0) + goto success; - done: + error: + Py_CLEAR(RetVal); + success: LEAVE_ZLIB(self); return RetVal; } -/* Helper for objdecompress() and unflush(). Saves any unconsumed input data in +/* Helper for objdecompress() and flush(). Saves any unconsumed input data in self->unused_data or self->unconsumed_tail, as appropriate. */ static int -save_unconsumed_input(compobject *self, int err) +save_unconsumed_input(compobject *self, Py_buffer *data, int err) { if (err == Z_STREAM_END) { /* The end of the compressed data has been reached. Store the leftover input data in self->unused_data. */ if (self->zst.avail_in > 0) { Py_ssize_t old_size = PyBytes_GET_SIZE(self->unused_data); - Py_ssize_t new_size; + Py_ssize_t new_size, left_size; PyObject *new_data; - if ((size_t)self->zst.avail_in > (size_t)UINT_MAX - (size_t)old_size) { + left_size = (Byte *)data->buf + data->len - self->zst.next_in; + if (left_size > (PY_SSIZE_T_MAX - old_size)) { PyErr_NoMemory(); return -1; } - new_size = old_size + self->zst.avail_in; + new_size = old_size + left_size; new_data = PyBytes_FromStringAndSize(NULL, new_size); if (new_data == NULL) return -1; Py_MEMCPY(PyBytes_AS_STRING(new_data), PyBytes_AS_STRING(self->unused_data), old_size); Py_MEMCPY(PyBytes_AS_STRING(new_data) + old_size, - self->zst.next_in, self->zst.avail_in); + self->zst.next_in, left_size); Py_SETREF(self->unused_data, new_data); self->zst.avail_in = 0; } } + if (self->zst.avail_in > 0 || PyBytes_GET_SIZE(self->unconsumed_tail)) { /* This code handles two distinct cases: 1. Output limit was reached. Save leftover input in unconsumed_tail. 2. All input data was consumed. Clear unconsumed_tail. */ + Py_ssize_t left_size = (Byte *)data->buf + data->len - self->zst.next_in; PyObject *new_data = PyBytes_FromStringAndSize( - (char *)self->zst.next_in, self->zst.avail_in); + (char *)self->zst.next_in, left_size); if (new_data == NULL) return -1; Py_SETREF(self->unconsumed_tail, new_data); } + return 0; } @@ -736,7 +750,7 @@ zlib.Decompress.decompress data: Py_buffer The binary data to decompress. - max_length: capped_uint = 0 + max_length: ssize_t = 0 The maximum allowable length of the decompressed data. Unconsumed input data will be stored in the unconsumed_tail attribute. @@ -751,85 +765,72 @@ Call the flush() method to clear these buffers. static PyObject * zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, - unsigned int max_length) -/*[clinic end generated code: output=b82e2a2c19f5fe7b input=68b6508ab07c2cf0]*/ + Py_ssize_t max_length) +/*[clinic end generated code: output=6e5173c74e710352 input=d6de9b53c4566b8a]*/ { - int err; - unsigned int old_length, length = DEF_BUF_SIZE; + int err = Z_OK; + Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE, hard_limit; PyObject *RetVal = NULL; - unsigned long start_total_out; - if ((size_t)data->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); + if (max_length < 0) { + PyErr_SetString(PyExc_ValueError, "max_length must be non-negative"); return NULL; - } - - /* limit amount of data allocated to max_length */ - if (max_length && length > max_length) - length = max_length; - if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) - return NULL; - - ENTER_ZLIB(self); + } else if (max_length == 0) + hard_limit = PY_SSIZE_T_MAX; + else + hard_limit = max_length; - start_total_out = self->zst.total_out; - self->zst.avail_in = (unsigned int)data->len; self->zst.next_in = data->buf; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); + ibuflen = data->len; - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_SYNC_FLUSH); - Py_END_ALLOW_THREADS + /* limit amount of data allocated to max_length */ + if (max_length && obuflen > max_length) + obuflen = max_length; - if (err == Z_NEED_DICT && self->zdict != NULL) { - if (set_inflate_zdict(self) < 0) { - Py_DECREF(RetVal); - RetVal = NULL; - goto error; - } + ENTER_ZLIB(self); - /* Repeat the call to inflate. */ - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_SYNC_FLUSH); - Py_END_ALLOW_THREADS - } + do { + arrange_input_buffer(&self->zst, &ibuflen); + + do { + obuflen = arrange_output_buffer_with_maximum(&self->zst, &RetVal, + obuflen, hard_limit); + if (obuflen == -2) { + if (max_length > 0) { + goto save; + } + PyErr_NoMemory(); + } + if (obuflen < 0) { + goto abort; + } - /* While Z_OK and the output buffer is full, there might be more output. - So extend the output buffer and try again. - */ - while (err == Z_OK && self->zst.avail_out == 0) { - /* If max_length set, don't continue decompressing if we've already - reached the limit. - */ - if (max_length && length >= max_length) - break; + Py_BEGIN_ALLOW_THREADS + err = inflate(&self->zst, Z_SYNC_FLUSH); + Py_END_ALLOW_THREADS - /* otherwise, ... */ - old_length = length; - length = length << 1; - if (max_length && length > max_length) - length = max_length; + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + default: + if (err == Z_NEED_DICT && self->zdict != NULL) { + if (set_inflate_zdict(self) < 0) + goto abort; + else + break; + } + goto save; + } - if (_PyBytes_Resize(&RetVal, length) < 0) { - Py_CLEAR(RetVal); - goto error; - } - self->zst.next_out = - (unsigned char *)PyBytes_AS_STRING(RetVal) + old_length; - self->zst.avail_out = length - old_length; + } while (self->zst.avail_out == 0 || err == Z_NEED_DICT); - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_SYNC_FLUSH); - Py_END_ALLOW_THREADS - } + } while (err != Z_STREAM_END && ibuflen != 0); - if (save_unconsumed_input(self, err) < 0) { - Py_DECREF(RetVal); - RetVal = NULL; - goto error; - } + save: + if (save_unconsumed_input(self, data, err) < 0) + goto abort; if (err == Z_STREAM_END) { /* This is the logical place to call inflateEnd, but the old behaviour @@ -841,16 +842,16 @@ zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, not an error condition. */ zlib_error(self->zst, err, "while decompressing data"); - Py_DECREF(RetVal); - RetVal = NULL; - goto error; + goto abort; } - if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { - Py_CLEAR(RetVal); - } + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) == 0) + goto success; - error: + abort: + Py_CLEAR(RetVal); + success: LEAVE_ZLIB(self); return RetVal; } @@ -873,9 +874,8 @@ zlib_Compress_flush_impl(compobject *self, int mode) /*[clinic end generated code: output=a203f4cefc9de727 input=73ed066794bd15bc]*/ { int err; - unsigned int length = DEF_BUF_SIZE, new_length; - PyObject *RetVal; - unsigned long start_total_out; + Py_ssize_t length = DEF_BUF_SIZE; + PyObject *RetVal = NULL; /* Flushing with Z_NO_FLUSH is a no-op, so there's no point in doing any work at all; just return an empty string. */ @@ -883,50 +883,37 @@ zlib_Compress_flush_impl(compobject *self, int mode) return PyBytes_FromStringAndSize(NULL, 0); } - if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) - return NULL; - ENTER_ZLIB(self); - start_total_out = self->zst.total_out; self->zst.avail_in = 0; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); - - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), mode); - Py_END_ALLOW_THREADS - - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while (err == Z_OK && self->zst.avail_out == 0) { - if (length <= (UINT_MAX >> 1)) - new_length = length << 1; - else - new_length = UINT_MAX; - if (_PyBytes_Resize(&RetVal, new_length) < 0) { + + do { + length = arrange_output_buffer(&self->zst, &RetVal, length); + if (length < 0) { Py_CLEAR(RetVal); goto error; } - self->zst.next_out = - (unsigned char *)PyBytes_AS_STRING(RetVal) + length; - self->zst.avail_out = length; - length = new_length; Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), mode); + err = deflate(&self->zst, mode); Py_END_ALLOW_THREADS - } + + if (err == Z_STREAM_ERROR) { + zlib_error(self->zst, err, "while flushing"); + Py_CLEAR(RetVal); + goto error; + } + } while (self->zst.avail_out == 0); + assert(self->zst.avail_in == 0); /* If mode is Z_FINISH, we also have to call deflateEnd() to free various data structures. Note we should only get Z_STREAM_END when mode is Z_FINISH, but checking both for safety*/ if (err == Z_STREAM_END && mode == Z_FINISH) { - err = deflateEnd(&(self->zst)); + err = deflateEnd(&self->zst); if (err != Z_OK) { zlib_error(self->zst, err, "while finishing compression"); - Py_DECREF(RetVal); - RetVal = NULL; + Py_CLEAR(RetVal); goto error; } else @@ -936,20 +923,18 @@ zlib_Compress_flush_impl(compobject *self, int mode) but there wasn't more output when we tried again, so it is not an error condition. */ - } else if (err!=Z_OK && err!=Z_BUF_ERROR) { + } else if (err != Z_OK && err != Z_BUF_ERROR) { zlib_error(self->zst, err, "while flushing"); - Py_DECREF(RetVal); - RetVal = NULL; + Py_CLEAR(RetVal); goto error; } - if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) < 0) Py_CLEAR(RetVal); - } error: LEAVE_ZLIB(self); - return RetVal; } @@ -976,13 +961,13 @@ zlib_Compress_copy_impl(compobject *self) */ ENTER_ZLIB(self); err = deflateCopy(&retval->zst, &self->zst); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Inconsistent stream state"); goto error; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for compression object"); goto error; @@ -1031,13 +1016,13 @@ zlib_Decompress_copy_impl(compobject *self) */ ENTER_ZLIB(self); err = inflateCopy(&retval->zst, &self->zst); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Inconsistent stream state"); goto error; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for decompression object"); goto error; @@ -1070,7 +1055,7 @@ error: /*[clinic input] zlib.Decompress.flush - length: capped_uint(c_default="DEF_BUF_SIZE") = zlib.DEF_BUF_SIZE + length: ssize_t(c_default="DEF_BUF_SIZE") = zlib.DEF_BUF_SIZE the initial size of the output buffer. / @@ -1078,88 +1063,84 @@ Return a bytes object containing any remaining decompressed data. [clinic start generated code]*/ static PyObject * -zlib_Decompress_flush_impl(compobject *self, unsigned int length) -/*[clinic end generated code: output=db6fb753ab698e22 input=1bb961eb21b62aa0]*/ +zlib_Decompress_flush_impl(compobject *self, Py_ssize_t length) +/*[clinic end generated code: output=68c75ea127cbe654 input=aa4ec37f3aef4da0]*/ { - int err; - unsigned int new_length; - PyObject * retval = NULL; - unsigned long start_total_out; - Py_ssize_t size; + int err, flush; + Py_buffer data; + PyObject *RetVal = NULL; + Py_ssize_t ibuflen; - if (length == 0) { + if (length <= 0) { PyErr_SetString(PyExc_ValueError, "length must be greater than zero"); return NULL; } - if (!(retval = PyBytes_FromStringAndSize(NULL, length))) + if (PyObject_GetBuffer(self->unconsumed_tail, &data, PyBUF_SIMPLE) == -1) return NULL; - ENTER_ZLIB(self); - size = PyBytes_GET_SIZE(self->unconsumed_tail); - - start_total_out = self->zst.total_out; - /* save_unconsumed_input() ensures that unconsumed_tail length is lesser - or equal than UINT_MAX */ - self->zst.avail_in = Py_SAFE_DOWNCAST(size, Py_ssize_t, unsigned int); - self->zst.next_in = (Byte *)PyBytes_AS_STRING(self->unconsumed_tail); - self->zst.avail_out = length; - self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval); - - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_FINISH); - Py_END_ALLOW_THREADS - - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while ((err == Z_OK || err == Z_BUF_ERROR) && self->zst.avail_out == 0) { - if (length <= (UINT_MAX >> 1)) - new_length = length << 1; - else - new_length = UINT_MAX; - if (_PyBytes_Resize(&retval, new_length) < 0) { - Py_CLEAR(retval); - goto error; - } - self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval) + length; - self->zst.avail_out = length; - length = new_length; + self->zst.next_in = data.buf; + ibuflen = data.len; - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_FINISH); - Py_END_ALLOW_THREADS - } + do { + arrange_input_buffer(&self->zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - if (save_unconsumed_input(self, err) < 0) { - Py_DECREF(retval); - retval = NULL; - goto error; - } + do { + length = arrange_output_buffer(&self->zst, &RetVal, length); + if (length < 0) + goto abort; + + Py_BEGIN_ALLOW_THREADS + err = inflate(&self->zst, flush); + Py_END_ALLOW_THREADS + + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + default: + if (err == Z_NEED_DICT && self->zdict != NULL) { + if (set_inflate_zdict(self) < 0) + goto abort; + else + break; + } + goto save; + } + + } while (self->zst.avail_out == 0 || err == Z_NEED_DICT); + + } while (err != Z_STREAM_END && ibuflen != 0); + + save: + if (save_unconsumed_input(self, &data, err) < 0) + goto abort; /* If at end of stream, clean up any memory allocated by zlib. */ if (err == Z_STREAM_END) { self->eof = 1; self->is_initialised = 0; - err = inflateEnd(&(self->zst)); + err = inflateEnd(&self->zst); if (err != Z_OK) { zlib_error(self->zst, err, "while finishing decompression"); - Py_DECREF(retval); - retval = NULL; - goto error; + goto abort; } } - if (_PyBytes_Resize(&retval, self->zst.total_out - start_total_out) < 0) { - Py_CLEAR(retval); - } - -error: + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) == 0) + goto success; + abort: + Py_CLEAR(RetVal); + success: + PyBuffer_Release(&data); LEAVE_ZLIB(self); - - return retval; + return RetVal; } #include "clinic/zlibmodule.c.h" @@ -1206,8 +1187,8 @@ The returned checksum is an integer. [clinic start generated code]*/ static PyObject * -zlib_adler32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value) -/*[clinic end generated code: output=51d6d75ee655c78a input=6ff4557872160e88]*/ +zlib_adler32_impl(PyObject *module, Py_buffer *data, unsigned int value) +/*[clinic end generated code: output=422106f5ca8c92c0 input=6ff4557872160e88]*/ { /* Releasing the GIL for very small buffers is inefficient and may lower performance */ @@ -1245,8 +1226,8 @@ The returned checksum is an integer. [clinic start generated code]*/ static PyObject * -zlib_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value) -/*[clinic end generated code: output=c1e986e74fe7b623 input=26c3ed430fa00b4c]*/ +zlib_crc32_impl(PyObject *module, Py_buffer *data, unsigned int value) +/*[clinic end generated code: output=63499fa20af7ea25 input=26c3ed430fa00b4c]*/ { int signed_val; diff --git a/Objects/abstract.c b/Objects/abstract.c index a0362e7..88205bd 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -1724,21 +1724,22 @@ PySequence_Tuple(PyObject *v) break; } if (j >= n) { - Py_ssize_t oldn = n; + size_t newn = (size_t)n; /* The over-allocation strategy can grow a bit faster than for lists because unlike lists the over-allocation isn't permanent -- we reclaim the excess before the end of this routine. So, grow by ten and then add 25%. */ - n += 10; - n += n >> 2; - if (n < oldn) { + newn += 10u; + newn += newn >> 2; + if (newn > PY_SSIZE_T_MAX) { /* Check for overflow */ PyErr_NoMemory(); Py_DECREF(item); goto Fail; } + n = (Py_ssize_t)newn; if (_PyTuple_Resize(&result, n) != 0) { Py_DECREF(item); goto Fail; @@ -2109,7 +2110,7 @@ _Py_CheckFunctionResult(PyObject *func, PyObject *result, const char *where) "%s returned NULL without setting an error", where); #ifdef Py_DEBUG - /* Ensure that the bug is catched in debug mode */ + /* Ensure that the bug is caught in debug mode */ Py_FatalError("a function returned NULL without setting an error"); #endif return NULL; @@ -2132,7 +2133,7 @@ _Py_CheckFunctionResult(PyObject *func, PyObject *result, const char *where) where); _PyErr_ChainExceptions(exc, val, tb); #ifdef Py_DEBUG - /* Ensure that the bug is catched in debug mode */ + /* Ensure that the bug is caught in debug mode */ Py_FatalError("a function returned a result with an error set"); #endif return NULL; diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c index 277be59..3fad6d8 100644 --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -246,7 +246,6 @@ PyByteArray_Resize(PyObject *self, Py_ssize_t requested_size) PyObject * PyByteArray_Concat(PyObject *a, PyObject *b) { - Py_ssize_t size; Py_buffer va, vb; PyByteArrayObject *result = NULL; @@ -259,13 +258,13 @@ PyByteArray_Concat(PyObject *a, PyObject *b) goto done; } - size = va.len + vb.len; - if (size < 0) { - PyErr_NoMemory(); - goto done; + if (va.len > PY_SSIZE_T_MAX - vb.len) { + PyErr_NoMemory(); + goto done; } - result = (PyByteArrayObject *) PyByteArray_FromStringAndSize(NULL, size); + result = (PyByteArrayObject *) \ + PyByteArray_FromStringAndSize(NULL, va.len + vb.len); if (result != NULL) { memcpy(result->ob_bytes, va.buf, va.len); memcpy(result->ob_bytes + va.len, vb.buf, vb.len); @@ -284,13 +283,15 @@ bytearray_format(PyByteArrayObject *self, PyObject *args) { PyObject *bytes_in, *bytes_out, *res; char *bytestring; + Py_ssize_t bytesize; if (self == NULL || !PyByteArray_Check(self) || args == NULL) { PyErr_BadInternalCall(); return NULL; } bytestring = PyByteArray_AS_STRING(self); - bytes_in = PyBytes_FromString(bytestring); + bytesize = PyByteArray_GET_SIZE(self); + bytes_in = PyBytes_FromStringAndSize(bytestring, bytesize); if (bytes_in == NULL) return NULL; bytes_out = _PyBytes_Format(bytes_in, args); @@ -315,7 +316,6 @@ bytearray_length(PyByteArrayObject *self) static PyObject * bytearray_iconcat(PyByteArrayObject *self, PyObject *other) { - Py_ssize_t mysize; Py_ssize_t size; Py_buffer vo; @@ -325,17 +325,16 @@ bytearray_iconcat(PyByteArrayObject *self, PyObject *other) return NULL; } - mysize = Py_SIZE(self); - size = mysize + vo.len; - if (size < 0) { + size = Py_SIZE(self); + if (size > PY_SSIZE_T_MAX - vo.len) { PyBuffer_Release(&vo); return PyErr_NoMemory(); } - if (PyByteArray_Resize((PyObject *)self, size) < 0) { + if (PyByteArray_Resize((PyObject *)self, size + vo.len) < 0) { PyBuffer_Release(&vo); return NULL; } - memcpy(PyByteArray_AS_STRING(self) + mysize, vo.buf, vo.len); + memcpy(PyByteArray_AS_STRING(self) + size, vo.buf, vo.len); PyBuffer_Release(&vo); Py_INCREF(self); return (PyObject *)self; @@ -509,7 +508,7 @@ bytearray_setslice_linear(PyByteArrayObject *self, If growth < 0 and lo != 0, the operation is completed, but a MemoryError is still raised and the memory block is not - shrinked. Otherwise, the bytearray is restored in its previous + shrunk. Otherwise, the bytearray is restored in its previous state and a MemoryError is raised. */ if (lo == 0) { self->ob_start += growth; @@ -2477,7 +2476,17 @@ bytearray_extend(PyByteArrayObject *self, PyObject *iterable_of_ints) Py_DECREF(item); if (len >= buf_size) { - buf_size = len + (len >> 1) + 1; + Py_ssize_t addition; + if (len == PY_SSIZE_T_MAX) { + Py_DECREF(it); + Py_DECREF(bytearray_obj); + return PyErr_NoMemory(); + } + addition = len >> 1; + if (addition > PY_SSIZE_T_MAX - len - 1) + buf_size = PY_SSIZE_T_MAX; + else + buf_size = len + addition + 1; if (PyByteArray_Resize((PyObject *)bytearray_obj, buf_size) < 0) { Py_DECREF(it); Py_DECREF(bytearray_obj); @@ -3192,8 +3201,12 @@ static PyObject * bytearrayiter_length_hint(bytesiterobject *it) { Py_ssize_t len = 0; - if (it->it_seq) + if (it->it_seq) { len = PyByteArray_GET_SIZE(it->it_seq) - it->it_index; + if (len < 0) { + len = 0; + } + } return PyLong_FromSsize_t(len); } diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index c2aa65c..673bb00 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -882,7 +882,7 @@ _PyBytes_Format(PyObject *format, PyObject *args) if (width > len) width--; } - if ((flags & F_ALT) && (c == 'x' || c == 'X')) { + if ((flags & F_ALT) && (c == 'o' || c == 'x' || c == 'X')) { assert(pbuf[0] == '0'); assert(pbuf[1] == c); if (fill != ' ') { @@ -904,8 +904,7 @@ _PyBytes_Format(PyObject *format, PyObject *args) if (fill == ' ') { if (sign) *res++ = sign; - if ((flags & F_ALT) && - (c == 'x' || c == 'X')) { + if ((flags & F_ALT) && (c == 'o' || c == 'x' || c == 'X')) { assert(pbuf[0] == '0'); assert(pbuf[1] == c); *res++ = *pbuf++; @@ -1265,7 +1264,6 @@ bytes_length(PyBytesObject *a) static PyObject * bytes_concat(PyObject *a, PyObject *b) { - Py_ssize_t size; Py_buffer va, vb; PyObject *result = NULL; @@ -1290,13 +1288,12 @@ bytes_concat(PyObject *a, PyObject *b) goto done; } - size = va.len + vb.len; - if (size < 0) { + if (va.len > PY_SSIZE_T_MAX - vb.len) { PyErr_NoMemory(); goto done; } - result = PyBytes_FromStringAndSize(NULL, size); + result = PyBytes_FromStringAndSize(NULL, va.len + vb.len); if (result != NULL) { memcpy(PyBytes_AS_STRING(result), va.buf, va.len); memcpy(PyBytes_AS_STRING(result) + va.len, vb.buf, vb.len); @@ -3552,11 +3549,15 @@ _PyBytes_Resize(PyObject **pv, Py_ssize_t newsize) PyObject *v; PyBytesObject *sv; v = *pv; - if (!PyBytes_Check(v) || Py_REFCNT(v) != 1 || newsize < 0) { - *pv = 0; - Py_DECREF(v); - PyErr_BadInternalCall(); - return -1; + if (!PyBytes_Check(v) || newsize < 0) { + goto error; + } + if (Py_SIZE(v) == newsize) { + /* return early if newsize equals to v->ob_size */ + return 0; + } + if (Py_REFCNT(v) != 1) { + goto error; } /* XXX UNREF/NEWREF interface should be more symmetrical */ _Py_DEC_REFTOTAL; @@ -3574,6 +3575,11 @@ _PyBytes_Resize(PyObject **pv, Py_ssize_t newsize) sv->ob_sval[newsize] = '\0'; sv->ob_shash = -1; /* invalidate cached hash value */ return 0; +error: + *pv = 0; + Py_DECREF(v); + PyErr_BadInternalCall(); + return -1; } void diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 964ae62..c334626 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -11,21 +11,21 @@ static int all_name_chars(PyObject *o) { static char ok_name_char[256]; - static unsigned char *name_chars = (unsigned char *)NAME_CHARS; - PyUnicodeObject *u = (PyUnicodeObject *)o; - const unsigned char *s; + static const unsigned char *name_chars = (unsigned char *)NAME_CHARS; + const unsigned char *s, *e; - if (!PyUnicode_Check(o) || PyUnicode_READY(u) == -1 || - PyUnicode_MAX_CHAR_VALUE(u) >= 128) + if (!PyUnicode_Check(o) || PyUnicode_READY(o) == -1 || + !PyUnicode_IS_ASCII(o)) return 0; if (ok_name_char[*name_chars] == 0) { - unsigned char *p; + const unsigned char *p; for (p = name_chars; *p; p++) ok_name_char[*p] = 1; } - s = PyUnicode_1BYTE_DATA(u); - while (*s) { + s = PyUnicode_1BYTE_DATA(o); + e = s + PyUnicode_GET_LENGTH(o); + while (s != e) { if (ok_name_char[*s++] == 0) return 0; } @@ -46,6 +46,52 @@ intern_strings(PyObject *tuple) } } +/* Intern selected string constants */ +static int +intern_string_constants(PyObject *tuple) +{ + int modified = 0; + Py_ssize_t i; + + for (i = PyTuple_GET_SIZE(tuple); --i >= 0; ) { + PyObject *v = PyTuple_GET_ITEM(tuple, i); + if (PyUnicode_CheckExact(v)) { + if (all_name_chars(v)) { + PyObject *w = v; + PyUnicode_InternInPlace(&v); + if (w != v) { + PyTuple_SET_ITEM(tuple, i, v); + modified = 1; + } + } + } + else if (PyTuple_CheckExact(v)) { + intern_string_constants(v); + } + else if (PyFrozenSet_CheckExact(v)) { + PyObject *w = v; + PyObject *tmp = PySequence_Tuple(v); + if (tmp == NULL) { + PyErr_Clear(); + continue; + } + if (intern_string_constants(tmp)) { + v = PyFrozenSet_New(tmp); + if (v == NULL) { + PyErr_Clear(); + } + else { + PyTuple_SET_ITEM(tuple, i, v); + Py_DECREF(w); + modified = 1; + } + } + Py_DECREF(tmp); + } + } + return modified; +} + PyCodeObject * PyCode_New(int argcount, int kwonlyargcount, @@ -84,13 +130,7 @@ PyCode_New(int argcount, int kwonlyargcount, intern_strings(varnames); intern_strings(freevars); intern_strings(cellvars); - /* Intern selected string constants */ - for (i = PyTuple_GET_SIZE(consts); --i >= 0; ) { - PyObject *v = PyTuple_GetItem(consts, i); - if (!all_name_chars(v)) - continue; - PyUnicode_InternInPlace(&PyTuple_GET_ITEM(consts, i)); - } + intern_string_constants(consts); /* Create mapping between cells and arguments if needed. */ if (n_cellvars) { Py_ssize_t total_args = argcount + kwonlyargcount + @@ -718,7 +758,7 @@ _PyCode_CheckLineNumber(PyCodeObject* co, int lasti, PyAddrPair *bounds) /* possible optimization: if f->f_lasti == instr_ub (likely to be a common case) then we already know instr_lb -- if we stored the matching value of p - somwhere we could skip the first while loop. */ + somewhere we could skip the first while loop. */ /* See lnotab_notes.txt for the description of co_lnotab. A point to remember: increments to p diff --git a/Objects/complexobject.c b/Objects/complexobject.c index a5bfb66..d82c5eb 100644 --- a/Objects/complexobject.c +++ b/Objects/complexobject.c @@ -954,18 +954,29 @@ complex_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } nbr = r->ob_type->tp_as_number; - if (i != NULL) - nbi = i->ob_type->tp_as_number; - if (nbr == NULL || nbr->nb_float == NULL || - ((i != NULL) && (nbi == NULL || nbi->nb_float == NULL))) { + if (nbr == NULL || nbr->nb_float == NULL) { PyErr_Format(PyExc_TypeError, - "complex() argument must be a string or a number, not '%.200s'", - Py_TYPE(r)->tp_name); + "complex() first argument must be a string or a number, " + "not '%.200s'", + Py_TYPE(r)->tp_name); if (own_r) { Py_DECREF(r); } return NULL; } + if (i != NULL) { + nbi = i->ob_type->tp_as_number; + if (nbi == NULL || nbi->nb_float == NULL) { + PyErr_Format(PyExc_TypeError, + "complex() second argument must be a number, " + "not '%.200s'", + Py_TYPE(i)->tp_name); + if (own_r) { + Py_DECREF(r); + } + return NULL; + } + } /* If we get this far, then the "real" and "imag" parts should both be treated as numbers, and the constructor should return a diff --git a/Objects/dictobject.c b/Objects/dictobject.c index d774586..747d218 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -88,20 +88,17 @@ it's USABLE_FRACTION (currently two-thirds) full. /* Major subtleties ahead: Most hash schemes depend on having a "good" hash function, in the sense of simulating randomness. Python doesn't: its most -important hash functions (for strings and ints) are very regular in common +important hash functions (for ints) are very regular in common cases: - >>> map(hash, (0, 1, 2, 3)) + >>>[hash(i) for i in range(4)] [0, 1, 2, 3] - >>> map(hash, ("namea", "nameb", "namec", "named")) - [-1658398457, -1658398460, -1658398459, -1658398462] - >>> This isn't necessarily bad! To the contrary, in a table of size 2**i, taking the low-order i bits as the initial table index is extremely fast, and there -are no collisions at all for dicts indexed by a contiguous range of ints. -The same is approximately true when keys are "consecutive" strings. So this -gives better-than-random behavior in common cases, and that's very desirable. +are no collisions at all for dicts indexed by a contiguous range of ints. So +this gives better-than-random behavior in common cases, and that's very +desirable. OTOH, when collisions occur, the tendency to fill contiguous slices of the hash table makes a good collision resolution strategy crucial. Taking only @@ -988,8 +985,10 @@ make_keys_shared(PyObject *op) return NULL; } else if (mp->ma_keys->dk_lookup == lookdict_unicode) { - /* Remove dummy keys */ - if (dictresize(mp, DK_SIZE(mp->ma_keys))) + /* Remove dummy keys + * -1 is required since dictresize() uses key size > minused + */ + if (dictresize(mp, DK_SIZE(mp->ma_keys) - 1)) return NULL; } assert(mp->ma_keys->dk_lookup == lookdict_unicode_nodummy); @@ -1247,13 +1246,31 @@ _PyDict_SetItem_KnownHash(PyObject *op, PyObject *key, PyObject *value, return insertdict(mp, key, hash, value); } +static int +delitem_common(PyDictObject *mp, PyDictKeyEntry *ep, PyObject **value_addr) +{ + PyObject *old_key, *old_value; + + old_value = *value_addr; + *value_addr = NULL; + mp->ma_used--; + if (!_PyDict_HasSplitTable(mp)) { + ENSURE_ALLOWS_DELETIONS(mp); + old_key = ep->me_key; + Py_INCREF(dummy); + ep->me_key = dummy; + Py_DECREF(old_key); + } + Py_DECREF(old_value); + return 0; +} + int PyDict_DelItem(PyObject *op, PyObject *key) { PyDictObject *mp; Py_hash_t hash; PyDictKeyEntry *ep; - PyObject *old_key, *old_value; PyObject **value_addr; if (!PyDict_Check(op)) { @@ -1275,18 +1292,7 @@ PyDict_DelItem(PyObject *op, PyObject *key) _PyErr_SetKeyError(key); return -1; } - old_value = *value_addr; - *value_addr = NULL; - mp->ma_used--; - if (!_PyDict_HasSplitTable(mp)) { - ENSURE_ALLOWS_DELETIONS(mp); - old_key = ep->me_key; - Py_INCREF(dummy); - ep->me_key = dummy; - Py_DECREF(old_key); - } - Py_DECREF(old_value); - return 0; + return delitem_common(mp, ep, value_addr); } int @@ -1294,7 +1300,6 @@ _PyDict_DelItem_KnownHash(PyObject *op, PyObject *key, Py_hash_t hash) { PyDictObject *mp; PyDictKeyEntry *ep; - PyObject *old_key, *old_value; PyObject **value_addr; if (!PyDict_Check(op)) { @@ -1311,20 +1316,45 @@ _PyDict_DelItem_KnownHash(PyObject *op, PyObject *key, Py_hash_t hash) _PyErr_SetKeyError(key); return -1; } - old_value = *value_addr; - *value_addr = NULL; - mp->ma_used--; - if (!_PyDict_HasSplitTable(mp)) { - ENSURE_ALLOWS_DELETIONS(mp); - old_key = ep->me_key; - Py_INCREF(dummy); - ep->me_key = dummy; - Py_DECREF(old_key); + return delitem_common(mp, ep, value_addr); +} + +int +_PyDict_DelItemIf(PyObject *op, PyObject *key, + int (*predicate)(PyObject *value)) +{ + PyDictObject *mp; + Py_hash_t hash; + PyDictKeyEntry *ep; + PyObject **value_addr; + int res; + + if (!PyDict_Check(op)) { + PyErr_BadInternalCall(); + return -1; } - Py_DECREF(old_value); - return 0; + assert(key); + hash = PyObject_Hash(key); + if (hash == -1) + return -1; + mp = (PyDictObject *)op; + ep = (mp->ma_keys->dk_lookup)(mp, key, hash, &value_addr); + if (ep == NULL) + return -1; + if (*value_addr == NULL) { + _PyErr_SetKeyError(key); + return -1; + } + res = predicate(*value_addr); + if (res == -1) + return -1; + if (res > 0) + return delitem_common(mp, ep, value_addr); + else + return 0; } + void PyDict_Clear(PyObject *op) { @@ -2476,7 +2506,8 @@ dict_popitem(PyDictObject *mp) } /* Convert split table to combined table */ if (mp->ma_keys->dk_lookup == lookdict_split) { - if (dictresize(mp, DK_SIZE(mp->ma_keys))) { + /* -1 is required since dictresize() uses key size > minused */ + if (dictresize(mp, DK_SIZE(mp->ma_keys) - 1)) { Py_DECREF(res); return NULL; } @@ -3657,7 +3688,7 @@ dictitems_contains(_PyDictViewObject *dv, PyObject *obj) return 0; key = PyTuple_GET_ITEM(obj, 0); value = PyTuple_GET_ITEM(obj, 1); - found = PyDict_GetItem((PyObject *)dv->dv_dict, key); + found = PyDict_GetItemWithError((PyObject *)dv->dv_dict, key); if (found == NULL) { if (PyErr_Occurred()) return -1; @@ -3851,10 +3882,16 @@ _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr, CACHED_KEYS(tp) = NULL; DK_DECREF(cached); } - } else { + } + else { + int was_shared = cached == ((PyDictObject *)dict)->ma_keys; res = PyDict_SetItem(dict, key, value); - if (cached != ((PyDictObject *)dict)->ma_keys) { - /* Either update tp->ht_cached_keys or delete it */ + /* PyDict_SetItem() may call dictresize() and convert split table + * into combined table. In such case, convert it to split + * table again and update type's shared key only when this is + * the only dict sharing key with the type. + */ + if (was_shared && cached != ((PyDictObject *)dict)->ma_keys) { if (cached->dk_refcnt == 1) { CACHED_KEYS(tp) = make_keys_shared(dict); } else { diff --git a/Objects/exceptions.c b/Objects/exceptions.c index aaff0bc..981ead2 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -618,36 +618,38 @@ SimpleExtendsException(PyExc_BaseException, KeyboardInterrupt, static int ImportError_init(PyImportErrorObject *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = {"name", "path", 0}; + PyObject *empty_tuple; PyObject *msg = NULL; PyObject *name = NULL; PyObject *path = NULL; -/* Macro replacement doesn't allow ## to start the first line of a macro, - so we move the assignment and NULL check into the if-statement. */ -#define GET_KWD(kwd) { \ - kwd = PyDict_GetItemString(kwds, #kwd); \ - if (kwd) { \ - Py_INCREF(kwd); \ - Py_XSETREF(self->kwd, kwd); \ - if (PyDict_DelItemString(kwds, #kwd)) \ - return -1; \ - } \ - } - - if (kwds) { - GET_KWD(name); - GET_KWD(path); - } + if (BaseException_init((PyBaseExceptionObject *)self, args, NULL) == -1) + return -1; - if (BaseException_init((PyBaseExceptionObject *)self, args, kwds) == -1) + empty_tuple = PyTuple_New(0); + if (!empty_tuple) return -1; - if (PyTuple_GET_SIZE(args) != 1) - return 0; - if (!PyArg_UnpackTuple(args, "ImportError", 1, 1, &msg)) + if (!PyArg_ParseTupleAndKeywords(empty_tuple, kwds, "|$OO:ImportError", kwlist, + &name, &path)) { + Py_DECREF(empty_tuple); return -1; + } + Py_DECREF(empty_tuple); - Py_INCREF(msg); - Py_XSETREF(self->msg, msg); + if (name) { + Py_INCREF(name); + Py_XSETREF(self->name, name); + } + if (path) { + Py_INCREF(path); + Py_XSETREF(self->path, path); + } + if (PyTuple_GET_SIZE(args) == 1) { + msg = PyTuple_GET_ITEM(args, 0); + Py_INCREF(msg); + Py_XSETREF(self->msg, msg); + } return 0; } @@ -1263,7 +1265,7 @@ SimpleExtendsException(PyExc_Exception, AttributeError, * SyntaxError extends Exception */ -/* Helper function to customise error message for some syntax errors */ +/* Helper function to customize error message for some syntax errors */ static int _report_missing_parentheses(PySyntaxErrorObject *self); static int @@ -1855,7 +1857,7 @@ UnicodeEncodeError_str(PyObject *self) return PyUnicode_FromString(""); /* Get reason and encoding as strings, which they might not be if - they've been modified after we were contructed. */ + they've been modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; @@ -1980,7 +1982,7 @@ UnicodeDecodeError_str(PyObject *self) return PyUnicode_FromString(""); /* Get reason and encoding as strings, which they might not be if - they've been modified after we were contructed. */ + they've been modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; @@ -2078,7 +2080,7 @@ UnicodeTranslateError_str(PyObject *self) return PyUnicode_FromString(""); /* Get reason as a string, which it might not be if it's been - modified after we were contructed. */ + modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; diff --git a/Objects/funcobject.c b/Objects/funcobject.c index e6c327d..4cd6590 100644 --- a/Objects/funcobject.c +++ b/Objects/funcobject.c @@ -697,8 +697,9 @@ PyTypeObject PyFunction_Type = { To declare a class method, use this idiom: class C: - def f(cls, arg1, arg2, ...): ... - f = classmethod(f) + @classmethod + def f(cls, arg1, arg2, ...): + ... It can be called either on the class (e.g. C.f()) or on an instance (e.g. C().f()); the instance is ignored except for its class. @@ -808,8 +809,9 @@ just like an instance method receives the instance.\n\ To declare a class method, use this idiom:\n\ \n\ class C:\n\ - def f(cls, arg1, arg2, ...): ...\n\ - f = classmethod(f)\n\ + @classmethod\n\ + def f(cls, arg1, arg2, ...):\n\ + ...\n\ \n\ It can be called either on the class (e.g. C.f()) or on an instance\n\ (e.g. C().f()). The instance is ignored except for its class.\n\ @@ -880,8 +882,9 @@ PyClassMethod_New(PyObject *callable) To declare a static method, use this idiom: class C: - def f(arg1, arg2, ...): ... - f = staticmethod(f) + @staticmethod + def f(arg1, arg2, ...): + ... It can be called either on the class (e.g. C.f()) or on an instance (e.g. C().f()); the instance is ignored except for its class. @@ -986,8 +989,9 @@ A static method does not receive an implicit first argument.\n\ To declare a static method, use this idiom:\n\ \n\ class C:\n\ - def f(arg1, arg2, ...): ...\n\ - f = staticmethod(f)\n\ + @staticmethod\n\ + def f(arg1, arg2, ...):\n\ + ...\n\ \n\ It can be called either on the class (e.g. C.f()) or on an instance\n\ (e.g. C().f()). The instance is ignored except for its class.\n\ diff --git a/Objects/genobject.c b/Objects/genobject.c index b3e0a46..d403598 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -21,21 +21,9 @@ void _PyGen_Finalize(PyObject *self) { PyGenObject *gen = (PyGenObject *)self; - PyObject *res; + PyObject *res = NULL; PyObject *error_type, *error_value, *error_traceback; - /* If `gen` is a coroutine, and if it was never awaited on, - issue a RuntimeWarning. */ - if (gen->gi_code != NULL - && ((PyCodeObject *)gen->gi_code)->co_flags & CO_COROUTINE - && gen->gi_frame != NULL - && gen->gi_frame->f_lasti == -1 - && !PyErr_Occurred() - && PyErr_WarnFormat(PyExc_RuntimeWarning, 1, - "coroutine '%.50S' was never awaited", - gen->gi_qualname)) - return; - if (gen->gi_frame == NULL || gen->gi_frame->f_stacktop == NULL) /* Generator isn't paused, so no need to close */ return; @@ -43,12 +31,28 @@ _PyGen_Finalize(PyObject *self) /* Save the current exception, if any. */ PyErr_Fetch(&error_type, &error_value, &error_traceback); - res = gen_close(gen, NULL); + /* If `gen` is a coroutine, and if it was never awaited on, + issue a RuntimeWarning. */ + if (gen->gi_code != NULL && + ((PyCodeObject *)gen->gi_code)->co_flags & CO_COROUTINE && + gen->gi_frame->f_lasti == -1) { + if (!error_value) { + PyErr_WarnFormat(PyExc_RuntimeWarning, 1, + "coroutine '%.50S' was never awaited", + gen->gi_qualname); + } + } + else { + res = gen_close(gen, NULL); + } - if (res == NULL) - PyErr_WriteUnraisable(self); - else + if (res == NULL) { + if (PyErr_Occurred()) + PyErr_WriteUnraisable(self); + } + else { Py_DECREF(res); + } /* Restore the saved exception. */ PyErr_Restore(error_type, error_value, error_traceback); @@ -70,7 +74,10 @@ gen_dealloc(PyGenObject *gen) return; /* resurrected. :( */ _PyObject_GC_UNTRACK(self); - Py_CLEAR(gen->gi_frame); + if (gen->gi_frame != NULL) { + gen->gi_frame->f_gen = NULL; + Py_CLEAR(gen->gi_frame); + } Py_CLEAR(gen->gi_code); Py_CLEAR(gen->gi_name); Py_CLEAR(gen->gi_qualname); @@ -147,12 +154,7 @@ gen_send_ex(PyGenObject *gen, PyObject *arg, int exc, int closing) /* Delay exception instantiation if we can */ PyErr_SetNone(PyExc_StopIteration); } else { - PyObject *e = PyObject_CallFunctionObjArgs( - PyExc_StopIteration, result, NULL); - if (e != NULL) { - PyErr_SetObject(PyExc_StopIteration, e); - Py_DECREF(e); - } + _PyGen_SetStopIterationValue(result); } Py_CLEAR(result); } @@ -453,6 +455,43 @@ gen_iternext(PyGenObject *gen) } /* + * Set StopIteration with specified value. Value can be arbitrary object + * or NULL. + * + * Returns 0 if StopIteration is set and -1 if any other exception is set. + */ +int +_PyGen_SetStopIterationValue(PyObject *value) +{ + PyObject *e; + + if (value == NULL || + (!PyTuple_Check(value) && + !PyObject_TypeCheck(value, (PyTypeObject *) PyExc_StopIteration))) + { + /* Delay exception instantiation if we can */ + PyErr_SetObject(PyExc_StopIteration, value); + return 0; + } + /* Construct an exception instance manually with + * PyObject_CallFunctionObjArgs and pass it to PyErr_SetObject. + * + * We do this to handle a situation when "value" is a tuple, in which + * case PyErr_SetObject would set the value of StopIteration to + * the first element of the tuple. + * + * (See PyErr_SetObject/_PyErr_CreateException code for details.) + */ + e = PyObject_CallFunctionObjArgs(PyExc_StopIteration, value, NULL); + if (e == NULL) { + return -1; + } + PyErr_SetObject(PyExc_StopIteration, e); + Py_DECREF(e); + return 0; +} + +/* * If StopIteration exception is set, fetches its 'value' * attribute if any, otherwise sets pvalue to None. * @@ -462,7 +501,8 @@ gen_iternext(PyGenObject *gen) */ int -_PyGen_FetchStopIterationValue(PyObject **pvalue) { +_PyGen_FetchStopIterationValue(PyObject **pvalue) +{ PyObject *et, *ev, *tb; PyObject *value = NULL; @@ -474,8 +514,15 @@ _PyGen_FetchStopIterationValue(PyObject **pvalue) { value = ((PyStopIterationObject *)ev)->value; Py_INCREF(value); Py_DECREF(ev); - } else if (et == PyExc_StopIteration) { - /* avoid normalisation and take ev as value */ + } else if (et == PyExc_StopIteration && !PyTuple_Check(ev)) { + /* Avoid normalisation and take ev as value. + * + * Normalization is required if the value is a tuple, in + * that case the value of StopIteration would be set to + * the first element of the tuple. + * + * (See _PyErr_CreateException code for details.) + */ value = ev; } else { /* normalisation required */ @@ -984,7 +1031,7 @@ PyTypeObject _PyCoroWrapper_Type = { 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ - PyObject_Del, /* tp_free */ + 0, /* tp_free */ }; PyObject * @@ -1005,7 +1052,7 @@ typedef struct { static PyObject * aiter_wrapper_iternext(PyAIterWrapper *aw) { - PyErr_SetObject(PyExc_StopIteration, aw->aw_aiter); + _PyGen_SetStopIterationValue(aw->aw_aiter); return NULL; } @@ -1069,7 +1116,7 @@ PyTypeObject _PyAIterWrapper_Type = { 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ - PyObject_Del, /* tp_free */ + 0, /* tp_free */ }; diff --git a/Objects/listobject.c b/Objects/listobject.c index d688179..815a1b9 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -634,14 +634,17 @@ list_ass_slice(PyListObject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v) item = a->ob_item; /* recycle the items that we are about to remove */ s = norig * sizeof(PyObject *); - if (s > sizeof(recycle_on_stack)) { - recycle = (PyObject **)PyMem_MALLOC(s); - if (recycle == NULL) { - PyErr_NoMemory(); - goto Error; + /* If norig == 0, item might be NULL, in which case we may not memcpy from it. */ + if (s) { + if (s > sizeof(recycle_on_stack)) { + recycle = (PyObject **)PyMem_MALLOC(s); + if (recycle == NULL) { + PyErr_NoMemory(); + goto Error; + } } + memcpy(recycle, &item[ilow], s); } - memcpy(recycle, &item[ilow], s); if (d < 0) { /* Delete -d items */ Py_ssize_t tail; diff --git a/Objects/listsort.txt b/Objects/listsort.txt index 832e4f2..152a270 100644 --- a/Objects/listsort.txt +++ b/Objects/listsort.txt @@ -694,7 +694,7 @@ search doesn't reduce the quadratic data movement costs. But in CPython's case, comparisons are extraordinarily expensive compared to moving data, and the details matter. Moving objects is just copying -pointers. Comparisons can be arbitrarily expensive (can invoke arbitary +pointers. Comparisons can be arbitrarily expensive (can invoke arbitrary user-supplied Python code), but even in simple cases (like 3 < 4) _all_ decisions are made at runtime: what's the type of the left comparand? the type of the right? do they need to be coerced to a common type? where's the diff --git a/Objects/longobject.c b/Objects/longobject.c index f68d15e..8510e90 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -234,7 +234,7 @@ PyLong_FromLong(long ival) unsigned long abs_ival; unsigned long t; /* unsigned so >> doesn't propagate sign bit */ int ndigits = 0; - int sign = 1; + int sign; CHECK_SMALL_INT(ival); @@ -246,6 +246,7 @@ PyLong_FromLong(long ival) } else { abs_ival = (unsigned long)ival; + sign = ival == 0 ? 0 : 1; } /* Fast path for single-digit ints */ @@ -368,7 +369,7 @@ PyLong_FromDouble(double dval) /* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define * anything about what happens when a signed integer operation overflows, * and some compilers think they're doing you a favor by being "clever" - * then. The bit pattern for the largest postive signed long is + * then. The bit pattern for the largest positive signed long is * (unsigned long)LONG_MAX, and for the smallest negative signed long * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN. * However, some other compilers warn about applying unary minus to an @@ -775,10 +776,10 @@ _PyLong_FromByteArray(const unsigned char* bytes, size_t n, size_t i; const unsigned char* p = pendbyte; const int pincr = -incr; /* search MSB to LSB */ - const unsigned char insignficant = is_signed ? 0xff : 0x00; + const unsigned char insignificant = is_signed ? 0xff : 0x00; for (i = 0; i < n; ++i, p += pincr) { - if (*p != insignficant) + if (*p != insignificant) break; } numsignificantbytes = n - i; @@ -4935,9 +4936,9 @@ long_to_bytes(PyLongObject *v, PyObject *args, PyObject *kwds) return NULL; } - if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little")) + if (_PyUnicode_EqualToASCIIString(byteorder_str, "little")) little_endian = 1; - else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big")) + else if (_PyUnicode_EqualToASCIIString(byteorder_str, "big")) little_endian = 0; else { PyErr_SetString(PyExc_ValueError, @@ -5018,9 +5019,9 @@ long_from_bytes(PyTypeObject *type, PyObject *args, PyObject *kwds) return NULL; } - if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little")) + if (_PyUnicode_EqualToASCIIString(byteorder_str, "little")) little_endian = 1; - else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big")) + else if (_PyUnicode_EqualToASCIIString(byteorder_str, "big")) little_endian = 0; else { PyErr_SetString(PyExc_ValueError, diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index 10162cb..e261ee0 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -221,7 +221,7 @@ PyTypeObject _PyManagedBuffer_Type = { PyDoc_STRVAR(memory_doc, -"memoryview($module, object)\n--\n\ +"memoryview(object)\n--\n\ \n\ Create a new memoryview object which references the given object."); diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index a4cdc20..ae72da6 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -130,6 +130,34 @@ check_api_version(const char *name, int module_api_version) return 1; } +static int +_add_methods_to_object(PyObject *module, PyObject *name, PyMethodDef *functions) +{ + PyObject *func; + PyMethodDef *fdef; + + for (fdef = functions; fdef->ml_name != NULL; fdef++) { + if ((fdef->ml_flags & METH_CLASS) || + (fdef->ml_flags & METH_STATIC)) { + PyErr_SetString(PyExc_ValueError, + "module functions cannot set" + " METH_CLASS or METH_STATIC"); + return -1; + } + func = PyCFunction_NewEx(fdef, (PyObject*)module, name); + if (func == NULL) { + return -1; + } + if (PyObject_SetAttrString(module, fdef->ml_name, func) != 0) { + Py_DECREF(func); + return -1; + } + Py_DECREF(func); + } + + return 0; +} + PyObject * PyModule_Create2(struct PyModuleDef* module, int module_api_version) { @@ -269,7 +297,7 @@ PyModule_FromDefAndSpec2(struct PyModuleDef* def, PyObject *spec, int module_api } } } else { - m = PyModule_New(name); + m = PyModule_NewObject(nameobj); if (m == NULL) { goto error; } @@ -297,7 +325,7 @@ PyModule_FromDefAndSpec2(struct PyModuleDef* def, PyObject *spec, int module_api } if (def->m_methods != NULL) { - ret = PyModule_AddFunctions(m, def->m_methods); + ret = _add_methods_to_object(m, nameobj, def->m_methods); if (ret != 0) { goto error; } @@ -331,7 +359,7 @@ PyModule_ExecDef(PyObject *module, PyModuleDef *def) return -1; } - if (PyModule_Check(module) && def->m_size >= 0) { + if (def->m_size >= 0) { PyModuleObject *md = (PyModuleObject*)module; if (md->md_state == NULL) { /* Always set a state pointer; this serves as a marker to skip @@ -387,37 +415,15 @@ PyModule_ExecDef(PyObject *module, PyModuleDef *def) int PyModule_AddFunctions(PyObject *m, PyMethodDef *functions) { - PyObject *name, *func; - PyMethodDef *fdef; - - name = PyModule_GetNameObject(m); + int res; + PyObject *name = PyModule_GetNameObject(m); if (name == NULL) { return -1; } - for (fdef = functions; fdef->ml_name != NULL; fdef++) { - if ((fdef->ml_flags & METH_CLASS) || - (fdef->ml_flags & METH_STATIC)) { - PyErr_SetString(PyExc_ValueError, - "module functions cannot set" - " METH_CLASS or METH_STATIC"); - Py_DECREF(name); - return -1; - } - func = PyCFunction_NewEx(fdef, (PyObject*)m, name); - if (func == NULL) { - Py_DECREF(name); - return -1; - } - if (PyObject_SetAttrString(m, fdef->ml_name, func) != 0) { - Py_DECREF(func); - Py_DECREF(name); - return -1; - } - Py_DECREF(func); - } + res = _add_methods_to_object(m, name, functions); Py_DECREF(name); - return 0; + return res; } int @@ -581,7 +587,7 @@ _PyModule_ClearDict(PyObject *d) while (PyDict_Next(d, &pos, &key, &value)) { if (value != Py_None && PyUnicode_Check(key)) { if (PyUnicode_READ_CHAR(key, 0) != '_' || - PyUnicode_CompareWithASCIIString(key, "__builtins__") != 0) + !_PyUnicode_EqualToASCIIString(key, "__builtins__")) { if (Py_VerboseFlag > 1) { const char *s = _PyUnicode_AsString(key); diff --git a/Objects/object.c b/Objects/object.c index 8024889..d21fd90 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -1607,6 +1607,15 @@ _Py_ReadyTypes(void) if (PyType_Ready(&PyDict_Type) < 0) Py_FatalError("Can't initialize dict type"); + if (PyType_Ready(&PyDictKeys_Type) < 0) + Py_FatalError("Can't initialize dict keys type"); + + if (PyType_Ready(&PyDictValues_Type) < 0) + Py_FatalError("Can't initialize dict values type"); + + if (PyType_Ready(&PyDictItems_Type) < 0) + Py_FatalError("Can't initialize dict items type"); + if (PyType_Ready(&PyODict_Type) < 0) Py_FatalError("Can't initialize OrderedDict type"); diff --git a/Objects/odictobject.c b/Objects/odictobject.c index 1abdd02..a6963d7 100644 --- a/Objects/odictobject.c +++ b/Objects/odictobject.c @@ -194,7 +194,7 @@ the concrete API. Here are some ways to address this challenge: 1. Change the relevant usage of the concrete API in CPython and add - PyDict_CheckExact() calls to each of the concrete API funcions. + PyDict_CheckExact() calls to each of the concrete API functions. 2. Adjust the relevant concrete API functions to explicitly accommodate OrderedDict. 3. As with #1, add the checks, but improve the abstract API with smart fast diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c index 0e9eb20..899697a 100644 --- a/Objects/rangeobject.c +++ b/Objects/rangeobject.c @@ -406,7 +406,7 @@ range_contains_long(rangeobject *r, PyObject *ob) tmp2 = PyNumber_Remainder(tmp1, r->step); if (tmp2 == NULL) goto end; - /* result = (int(ob) - start % step) == 0 */ + /* result = ((int(ob) - start) % step) == 0 */ result = PyObject_RichCompareBool(tmp2, zero, Py_EQ); end: Py_XDECREF(tmp1); @@ -937,12 +937,20 @@ rangeiter_new(PyTypeObject *type, PyObject *args, PyObject *kw) { long start, stop, step; - if (!_PyArg_NoKeywords("rangeiter()", kw)) + if (!_PyArg_NoKeywords("range_iterator()", kw)) { return NULL; + } - if (!PyArg_ParseTuple(args, "lll;rangeiter() requires 3 int arguments", - &start, &stop, &step)) + if (!PyArg_ParseTuple(args, + "lll;range_iterator() requires 3 int arguments", + &start, &stop, &step)) { + return NULL; + } + if (step == 0) { + PyErr_SetString(PyExc_ValueError, + "range_iterator() arg 3 must not be zero"); return NULL; + } return fast_range_iter(start, stop, step); } diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 317334f..7b76e5c 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -858,7 +858,7 @@ type_repr(PyTypeObject *type) return NULL; } - if (mod != NULL && _PyUnicode_CompareWithId(mod, &PyId_builtins)) + if (mod != NULL && !_PyUnicode_EqualToASCIIId(mod, &PyId_builtins)) rtn = PyUnicode_FromFormat("", mod, name); else rtn = PyUnicode_FromFormat("", type->tp_name); @@ -1123,11 +1123,6 @@ subtype_dealloc(PyObject *self) Py_TRASHCAN_SAFE_BEGIN(self); --_PyTrash_delete_nesting; -- tstate->trash_delete_nesting; - /* DO NOT restore GC tracking at this point. weakref callbacks - * (if any, and whether directly here or indirectly in something we - * call) may trigger GC, and if self is tracked at that point, it - * will look like trash to GC and GC will try to delete self again. - */ /* Find the nearest base with a different tp_dealloc */ base = type; @@ -1138,30 +1133,36 @@ subtype_dealloc(PyObject *self) has_finalizer = type->tp_finalize || type->tp_del; - /* Maybe call finalizer; exit early if resurrected */ - if (has_finalizer) - _PyObject_GC_TRACK(self); - if (type->tp_finalize) { + _PyObject_GC_TRACK(self); if (PyObject_CallFinalizerFromDealloc(self) < 0) { /* Resurrected */ goto endlabel; } + _PyObject_GC_UNTRACK(self); } - /* If we added a weaklist, we clear it. Do this *before* calling - tp_del, clearing slots, or clearing the instance dict. */ + /* + If we added a weaklist, we clear it. Do this *before* calling tp_del, + clearing slots, or clearing the instance dict. + + GC tracking must be off at this point. weakref callbacks (if any, and + whether directly here or indirectly in something we call) may trigger GC, + and if self is tracked at that point, it will look like trash to GC and GC + will try to delete self again. + */ if (type->tp_weaklistoffset && !base->tp_weaklistoffset) PyObject_ClearWeakRefs(self); if (type->tp_del) { + _PyObject_GC_TRACK(self); type->tp_del(self); if (self->ob_refcnt > 0) { /* Resurrected */ goto endlabel; } + _PyObject_GC_UNTRACK(self); } if (has_finalizer) { - _PyObject_GC_UNTRACK(self); /* New weakrefs could be created during the finalizer call. If this occurs, clear them out without calling their finalizers since they might rely on part of the object @@ -1432,8 +1433,10 @@ call_method(PyObject *o, _Py_Identifier *nameid, char *format, ...) va_end(va); - if (args == NULL) + if (args == NULL) { + Py_DECREF(func); return NULL; + } assert(PyTuple_Check(args)); retval = PyObject_Call(func, args, NULL); @@ -1468,8 +1471,10 @@ call_maybe(PyObject *o, _Py_Identifier *nameid, char *format, ...) va_end(va); - if (args == NULL) + if (args == NULL) { + Py_DECREF(func); return NULL; + } assert(PyTuple_Check(args)); retval = PyObject_Call(func, args, NULL); @@ -1494,7 +1499,7 @@ call_maybe(PyObject *o, _Py_Identifier *nameid, char *format, ...) The next three properties are the 3 constraints in "C3". - Local precendece order. + Local precedence order. If A precedes B in C's MRO, then A will precede B in the MRO of all subclasses of C. @@ -2381,7 +2386,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) if (!valid_identifier(tmp)) goto error; assert(PyUnicode_Check(tmp)); - if (_PyUnicode_CompareWithId(tmp, &PyId___dict__) == 0) { + if (_PyUnicode_EqualToASCIIId(tmp, &PyId___dict__)) { if (!may_add_dict || add_dict) { PyErr_SetString(PyExc_TypeError, "__dict__ slot disallowed: " @@ -2390,7 +2395,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) } add_dict++; } - if (PyUnicode_CompareWithASCIIString(tmp, "__weakref__") == 0) { + if (_PyUnicode_EqualToASCIIString(tmp, "__weakref__")) { if (!may_add_weak || add_weak) { PyErr_SetString(PyExc_TypeError, "__weakref__ slot disallowed: " @@ -2412,9 +2417,9 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) for (i = j = 0; i < nslots; i++) { tmp = PyTuple_GET_ITEM(slots, i); if ((add_dict && - _PyUnicode_CompareWithId(tmp, &PyId___dict__) == 0) || + _PyUnicode_EqualToASCIIId(tmp, &PyId___dict__)) || (add_weak && - PyUnicode_CompareWithASCIIString(tmp, "__weakref__") == 0)) + _PyUnicode_EqualToASCIIString(tmp, "__weakref__"))) continue; tmp =_Py_Mangle(name, tmp); if (!tmp) { @@ -2864,11 +2869,25 @@ _PyType_Lookup(PyTypeObject *type, PyObject *name) /* Look in tp_dict of types in MRO */ mro = type->tp_mro; - /* If mro is NULL, the type is either not yet initialized - by PyType_Ready(), or already cleared by type_clear(). - Either way the safest thing to do is to return NULL. */ - if (mro == NULL) - return NULL; + if (mro == NULL) { + if ((type->tp_flags & Py_TPFLAGS_READYING) == 0 && + PyType_Ready(type) < 0) { + /* It's not ideal to clear the error condition, + but this function is documented as not setting + an exception, and I don't want to change that. + When PyType_Ready() can't proceed, it won't + set the "ready" flag, so future attempts to ready + the same type will call it again -- hopefully + in a context that propagates the exception out. + */ + PyErr_Clear(); + return NULL; + } + mro = type->tp_mro; + if (mro == NULL) { + return NULL; + } + } res = NULL; /* keep a strong reference to mro because type->tp_mro can be replaced @@ -3471,7 +3490,7 @@ object_repr(PyObject *self) Py_XDECREF(mod); return NULL; } - if (mod != NULL && _PyUnicode_CompareWithId(mod, &PyId_builtins)) + if (mod != NULL && !_PyUnicode_EqualToASCIIId(mod, &PyId_builtins)) rtn = PyUnicode_FromFormat("<%U.%U object at %p>", mod, name, self); else rtn = PyUnicode_FromFormat("<%s object at %p>", @@ -3755,7 +3774,7 @@ import_copyreg(void) /* Try to fetch cached copy of copyreg from sys.modules first in an attempt to avoid the import overhead. Previously this was implemented by storing a reference to the cached module in a static variable, but - this broke when multiple embeded interpreters were in use (see issue + this broke when multiple embedded interpreters were in use (see issue #17408 and #19088). */ copyreg_module = PyDict_GetItemWithError(interp->modules, copyreg_str); if (copyreg_module != NULL) { @@ -4299,13 +4318,6 @@ PyDoc_STRVAR(object_subclasshook_doc, "NotImplemented, the normal algorithm is used. Otherwise, it\n" "overrides the normal algorithm (and the outcome is cached).\n"); -/* - from PEP 3101, this code implements: - - class object: - def __format__(self, format_spec): - return format(str(self), format_spec) -*/ static PyObject * object_format(PyObject *self, PyObject *args) { @@ -4316,22 +4328,19 @@ object_format(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "U:__format__", &format_spec)) return NULL; + /* Issue 7994: If we're converting to a string, we + should reject format specifications */ + if (PyUnicode_GET_LENGTH(format_spec) > 0) { + PyErr_Format(PyExc_TypeError, + "unsupported format string passed to %.200s.__format__", + self->ob_type->tp_name); + return NULL; + } self_as_str = PyObject_Str(self); if (self_as_str != NULL) { - /* Issue 7994: If we're converting to a string, we - should reject format specifications */ - if (PyUnicode_GET_LENGTH(format_spec) > 0) { - PyErr_SetString(PyExc_TypeError, - "non-empty format string passed to object.__format__"); - goto done; - } - result = PyObject_Format(self_as_str, format_spec); + Py_DECREF(self_as_str); } - -done: - Py_XDECREF(self_as_str); - return result; } @@ -4509,8 +4518,10 @@ add_members(PyTypeObject *type, PyMemberDef *memb) descr = PyDescr_NewMember(type, memb); if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, memb->name, descr) < 0) + if (PyDict_SetItemString(dict, memb->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -4529,8 +4540,10 @@ add_getset(PyTypeObject *type, PyGetSetDef *gsp) if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, gsp->name, descr) < 0) + if (PyDict_SetItemString(dict, gsp->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -4811,6 +4824,12 @@ PyType_Ready(PyTypeObject *type) _Py_AddToAllObjects((PyObject *)type, 0); #endif + if (type->tp_name == NULL) { + PyErr_Format(PyExc_SystemError, + "Type does not define the tp_name field."); + goto error; + } + /* Initialize tp_base (defaults to BaseObject unless that's us) */ base = type->tp_base; if (base == NULL && type != &PyBaseObject_Type) { @@ -7010,8 +7029,10 @@ add_operators(PyTypeObject *type) descr = PyDescr_NewWrapper(type, p, *ptr); if (descr == NULL) return -1; - if (PyDict_SetItem(dict, p->name_strobj, descr) < 0) + if (PyDict_SetItem(dict, p->name_strobj, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } } @@ -7086,7 +7107,7 @@ super_getattro(PyObject *self, PyObject *name) (i.e. super, or a subclass), not the class of su->obj. */ if (PyUnicode_Check(name) && PyUnicode_GET_LENGTH(name) == 9 && - _PyUnicode_CompareWithId(name, &PyId___class__) == 0) + _PyUnicode_EqualToASCIIId(name, &PyId___class__)) goto skip; mro = starttype->tp_mro; @@ -7298,7 +7319,7 @@ super_init(PyObject *self, PyObject *args, PyObject *kwds) for (i = 0; i < n; i++) { PyObject *name = PyTuple_GET_ITEM(co->co_freevars, i); assert(PyUnicode_Check(name)); - if (!_PyUnicode_CompareWithId(name, &PyId___class__)) { + if (_PyUnicode_EqualToASCIIId(name, &PyId___class__)) { Py_ssize_t index = co->co_nlocals + PyTuple_GET_SIZE(co->co_cellvars) + i; PyObject *cell = f->f_localsplus[index]; diff --git a/Objects/typeslots.py b/Objects/typeslots.py index ba37c40..9b6d4ad 100755 --- a/Objects/typeslots.py +++ b/Objects/typeslots.py @@ -1,32 +1,43 @@ #!/usr/bin/python -# Usage: typeslots.py < Include/typeslots.h > typeslots.inc +# Usage: typeslots.py < Include/typeslots.h typeslots.inc import sys, re -print("/* Generated by typeslots.py */") -res = {} -for line in sys.stdin: - m = re.match("#define Py_([a-z_]+) ([0-9]+)", line) - if not m: - continue - member = m.group(1) - if member.startswith("tp_"): - member = "ht_type."+member - elif member.startswith("am_"): - member = "as_async."+member - elif member.startswith("nb_"): - member = "as_number."+member - elif member.startswith("mp_"): - member = "as_mapping."+member - elif member.startswith("sq_"): - member = "as_sequence."+member - elif member.startswith("bf_"): - member = "as_buffer."+member - res[int(m.group(2))] = member +def generate_typeslots(out=sys.stdout): + out.write("/* Generated by typeslots.py */\n") + res = {} + for line in sys.stdin: + m = re.match("#define Py_([a-z_]+) ([0-9]+)", line) + if not m: + continue + member = m.group(1) + if member.startswith("tp_"): + member = "ht_type."+member + elif member.startswith("am_"): + member = "as_async."+member + elif member.startswith("nb_"): + member = "as_number."+member + elif member.startswith("mp_"): + member = "as_mapping."+member + elif member.startswith("sq_"): + member = "as_sequence."+member + elif member.startswith("bf_"): + member = "as_buffer."+member + res[int(m.group(2))] = member -M = max(res.keys())+1 -for i in range(1,M): - if i in res: - print("offsetof(PyHeapTypeObject, %s)," % res[i]) + M = max(res.keys())+1 + for i in range(1,M): + if i in res: + out.write("offsetof(PyHeapTypeObject, %s),\n" % res[i]) + else: + out.write("0,\n") + +def main(): + if len(sys.argv) == 2: + with open(sys.argv[1], "w") as f: + generate_typeslots(f) else: - print("0,") + generate_typeslots() + +if __name__ == "__main__": + main() diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index f11a082..5787830 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -1366,15 +1366,19 @@ PyUnicode_CopyCharacters(PyObject *to, Py_ssize_t to_start, if (PyUnicode_READY(to) == -1) return -1; - if (from_start < 0) { + if ((size_t)from_start > (size_t)PyUnicode_GET_LENGTH(from)) { PyErr_SetString(PyExc_IndexError, "string index out of range"); return -1; } - if (to_start < 0) { + if ((size_t)to_start > (size_t)PyUnicode_GET_LENGTH(to)) { PyErr_SetString(PyExc_IndexError, "string index out of range"); return -1; } - how_many = Py_MIN(PyUnicode_GET_LENGTH(from), how_many); + if (how_many < 0) { + PyErr_SetString(PyExc_SystemError, "how_many cannot be negative"); + return -1; + } + how_many = Py_MIN(PyUnicode_GET_LENGTH(from)-from_start, how_many); if (to_start + how_many > PyUnicode_GET_LENGTH(to)) { PyErr_Format(PyExc_SystemError, "Cannot write %zi characters at %zi " @@ -2719,7 +2723,7 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) "PyUnicode_FromFormatV() expects an ASCII-encoded format " "string, got a non-ASCII byte: 0x%02x", (unsigned char)*p); - return NULL; + goto fail; } p++; } @@ -3005,7 +3009,7 @@ PyUnicode_Decode(const char *s, "'%.400s' decoder returned '%.400s' instead of 'str'; " "use codecs.decode() to decode to arbitrary types", encoding, - Py_TYPE(unicode)->tp_name, Py_TYPE(unicode)->tp_name); + Py_TYPE(unicode)->tp_name); Py_DECREF(unicode); goto onError; } @@ -3022,24 +3026,16 @@ PyUnicode_AsDecodedObject(PyObject *unicode, const char *encoding, const char *errors) { - PyObject *v; - if (!PyUnicode_Check(unicode)) { PyErr_BadArgument(); - goto onError; + return NULL; } if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); /* Decode via the codec registry */ - v = PyCodec_Decode(unicode, encoding, errors); - if (v == NULL) - goto onError; - return unicode_result(v); - - onError: - return NULL; + return PyCodec_Decode(unicode, encoding, errors); } PyObject * @@ -3066,7 +3062,7 @@ PyUnicode_AsDecodedUnicode(PyObject *unicode, "'%.400s' decoder returned '%.400s' instead of 'str'; " "use codecs.decode() to decode to arbitrary types", encoding, - Py_TYPE(unicode)->tp_name, Py_TYPE(unicode)->tp_name); + Py_TYPE(unicode)->tp_name); Py_DECREF(v); goto onError; } @@ -3394,7 +3390,7 @@ PyUnicode_AsEncodedString(PyObject *unicode, "'%.400s' encoder returned '%.400s' instead of 'bytes'; " "use codecs.encode() to encode to arbitrary types", encoding, - Py_TYPE(v)->tp_name, Py_TYPE(v)->tp_name); + Py_TYPE(v)->tp_name); Py_DECREF(v); return NULL; } @@ -3423,7 +3419,7 @@ PyUnicode_AsEncodedUnicode(PyObject *unicode, "'%.400s' encoder returned '%.400s' instead of 'str'; " "use codecs.encode() to encode to arbitrary types", encoding, - Py_TYPE(v)->tp_name, Py_TYPE(v)->tp_name); + Py_TYPE(v)->tp_name); Py_DECREF(v); goto onError; } @@ -3666,7 +3662,7 @@ PyUnicode_FSDecoder(PyObject* arg, void* addr) output = arg; Py_INCREF(output); } - else { + else if (PyObject_CheckBuffer(arg)) { arg = PyBytes_FromObject(arg); if (!arg) return 0; @@ -3681,6 +3677,12 @@ PyUnicode_FSDecoder(PyObject* arg, void* addr) return 0; } } + else { + PyErr_Format(PyExc_TypeError, + "path should be string or bytes, not %.200s", + Py_TYPE(arg)->tp_name); + return 0; + } if (PyUnicode_READY(output) == -1) { Py_DECREF(output); return 0; @@ -4814,7 +4816,7 @@ _Py_DecodeUTF8_surrogateescape(const char *s, Py_ssize_t size) #if SIZEOF_WCHAR_T == 4 assert(0); #else - assert(Py_UNICODE_IS_SURROGATE(ch)); + assert(ch > 0xFFFF && ch <= MAX_UNICODE); /* compute and append the two surrogates: */ unicode[outpos++] = (wchar_t)Py_UNICODE_HIGH_SURROGATE(ch); unicode[outpos++] = (wchar_t)Py_UNICODE_LOW_SURROGATE(ch); @@ -4938,7 +4940,7 @@ PyUnicode_DecodeUTF32Stateful(const char *s, mark is skipped, in all other modes, it is copied to the output stream as-is (giving a ZWNBSP character). */ if (bo == 0 && size >= 4) { - Py_UCS4 bom = (q[3] << 24) | (q[2] << 16) | (q[1] << 8) | q[0]; + Py_UCS4 bom = ((unsigned int)q[3] << 24) | (q[2] << 16) | (q[1] << 8) | q[0]; if (bom == 0x0000FEFF) { bo = -1; q += 4; @@ -4980,7 +4982,7 @@ PyUnicode_DecodeUTF32Stateful(const char *s, Py_ssize_t pos = writer.pos; if (le) { do { - ch = (q[3] << 24) | (q[2] << 16) | (q[1] << 8) | q[0]; + ch = ((unsigned int)q[3] << 24) | (q[2] << 16) | (q[1] << 8) | q[0]; if (ch > maxch) break; if (kind != PyUnicode_1BYTE_KIND && @@ -4992,7 +4994,7 @@ PyUnicode_DecodeUTF32Stateful(const char *s, } else { do { - ch = (q[0] << 24) | (q[1] << 16) | (q[2] << 8) | q[3]; + ch = ((unsigned int)q[0] << 24) | (q[1] << 16) | (q[2] << 8) | q[3]; if (ch > maxch) break; if (kind != PyUnicode_1BYTE_KIND && @@ -10791,10 +10793,24 @@ PyUnicode_CompareWithASCIIString(PyObject* uni, const char* str) Py_ssize_t i; int kind; Py_UCS4 chr; + const unsigned char *ustr = (const unsigned char *)str; assert(_PyUnicode_CHECK(uni)); - if (PyUnicode_READY(uni) == -1) - return -1; + if (!PyUnicode_IS_READY(uni)) { + const wchar_t *ws = _PyUnicode_WSTR(uni); + /* Compare Unicode string and source character set string */ + for (i = 0; (chr = ws[i]) && ustr[i]; i++) { + if (chr != ustr[i]) + return (chr < ustr[i]) ? -1 : 1; + } + /* This check keeps Python strings that end in '\0' from comparing equal + to C strings identical up to that point. */ + if (_PyUnicode_WSTR_LENGTH(uni) != i || chr) + return 1; /* uni is longer */ + if (ustr[i]) + return -1; /* str is longer */ + return 0; + } kind = PyUnicode_KIND(uni); if (kind == PyUnicode_1BYTE_KIND) { const void *data = PyUnicode_1BYTE_DATA(uni); @@ -10832,6 +10848,79 @@ PyUnicode_CompareWithASCIIString(PyObject* uni, const char* str) } } +static int +non_ready_unicode_equal_to_ascii_string(PyObject *unicode, const char *str) +{ + size_t i, len; + const wchar_t *p; + len = (size_t)_PyUnicode_WSTR_LENGTH(unicode); + if (strlen(str) != len) + return 0; + p = _PyUnicode_WSTR(unicode); + assert(p); + for (i = 0; i < len; i++) { + unsigned char c = (unsigned char)str[i]; + if (c >= 128 || p[i] != (wchar_t)c) + return 0; + } + return 1; +} + +int +_PyUnicode_EqualToASCIIString(PyObject *unicode, const char *str) +{ + size_t len; + assert(_PyUnicode_CHECK(unicode)); + if (PyUnicode_READY(unicode) == -1) { + /* Memory error or bad data */ + PyErr_Clear(); + return non_ready_unicode_equal_to_ascii_string(unicode, str); + } + if (!PyUnicode_IS_ASCII(unicode)) + return 0; + len = (size_t)PyUnicode_GET_LENGTH(unicode); + return strlen(str) == len && + memcmp(PyUnicode_1BYTE_DATA(unicode), str, len) == 0; +} + +int +_PyUnicode_EqualToASCIIId(PyObject *left, _Py_Identifier *right) +{ + PyObject *right_uni; + Py_hash_t hash; + + assert(_PyUnicode_CHECK(left)); + assert(right->string); + + if (PyUnicode_READY(left) == -1) { + /* memory error or bad data */ + PyErr_Clear(); + return non_ready_unicode_equal_to_ascii_string(left, right->string); + } + + if (!PyUnicode_IS_ASCII(left)) + return 0; + + right_uni = _PyUnicode_FromId(right); /* borrowed */ + if (right_uni == NULL) { + /* memory error or bad data */ + PyErr_Clear(); + return _PyUnicode_EqualToASCIIString(left, right->string); + } + + if (left == right_uni) + return 1; + + if (PyUnicode_CHECK_INTERNED(left)) + return 0; + + assert(_PyUnicode_HASH(right_uni) != 1); + hash = _PyUnicode_HASH(left); + if (hash != -1 && hash != _PyUnicode_HASH(right_uni)) + return 0; + + return unicode_compare_eq(left, right_uni); +} #define TEST_COND(cond) \ ((cond) ? Py_True : Py_False) @@ -14124,11 +14213,12 @@ formatchar(PyObject *v) if (iobj == NULL) { goto onError; } - v = iobj; + x = PyLong_AsLong(iobj); Py_DECREF(iobj); } - /* Integer input truncated to a character */ - x = PyLong_AsLong(v); + else { + x = PyLong_AsLong(v); + } if (x == -1 && PyErr_Occurred()) goto onError; diff --git a/PC/_msi.c b/PC/_msi.c index 86a5943..9e7e36d 100644 --- a/PC/_msi.c +++ b/PC/_msi.c @@ -955,6 +955,17 @@ static PyTypeObject msidb_Type = { 0, /*tp_is_gc*/ }; +#define Py_NOT_PERSIST(x, flag) \ + (x != (int)(flag) && \ + x != ((int)(flag) | MSIDBOPEN_PATCHFILE)) + +#define Py_INVALID_PERSIST(x) \ + (Py_NOT_PERSIST(x, MSIDBOPEN_READONLY) && \ + Py_NOT_PERSIST(x, MSIDBOPEN_TRANSACT) && \ + Py_NOT_PERSIST(x, MSIDBOPEN_DIRECT) && \ + Py_NOT_PERSIST(x, MSIDBOPEN_CREATE) && \ + Py_NOT_PERSIST(x, MSIDBOPEN_CREATEDIRECT)) + static PyObject* msiopendb(PyObject *obj, PyObject *args) { int status; @@ -962,11 +973,14 @@ static PyObject* msiopendb(PyObject *obj, PyObject *args) int persist; MSIHANDLE h; msiobj *result; - if (!PyArg_ParseTuple(args, "si:MSIOpenDatabase", &path, &persist)) return NULL; - - status = MsiOpenDatabase(path, (LPCSTR)persist, &h); + /* We need to validate that persist is a valid MSIDBOPEN_* value. Otherwise, + MsiOpenDatabase may treat the value as a pointer, leading to unexpected + behavior. */ + if (Py_INVALID_PERSIST(persist)) + return msierror(ERROR_INVALID_PARAMETER); + status = MsiOpenDatabase(path, (LPCSTR)persist, &h); if (status != ERROR_SUCCESS) return msierror(status); diff --git a/PC/bdist_wininst/install.c b/PC/bdist_wininst/install.c index cb037ff..adbb733 100644 --- a/PC/bdist_wininst/install.c +++ b/PC/bdist_wininst/install.c @@ -154,7 +154,7 @@ HANDLE hBitmap; char *bitmap_bytes; static const char *REGISTRY_SUFFIX_6432 = -#ifdef MS_WIN64 +#ifdef _WIN64 ""; #else "-32"; @@ -1657,16 +1657,16 @@ SelectPythonDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) PropSheet_SetWizButtons(GetParent(hwnd), PSWIZB_BACK | PSWIZB_NEXT); /* Get the python directory */ - ivi = (InstalledVersionInfo *) + ivi = (InstalledVersionInfo *) SendDlgItemMessage(hwnd, - IDC_VERSIONS_LIST, - LB_GETITEMDATA, - id, - 0); - hkey_root = ivi->hkey; - strcpy(python_dir, ivi->prefix); - SetDlgItemText(hwnd, IDC_PATH, python_dir); - /* retrieve the python version and pythondll to use */ + IDC_VERSIONS_LIST, + LB_GETITEMDATA, + id, + 0); + hkey_root = ivi->hkey; + strcpy(python_dir, ivi->prefix); + SetDlgItemText(hwnd, IDC_PATH, python_dir); + /* retrieve the python version and pythondll to use */ result = SendDlgItemMessage(hwnd, IDC_VERSIONS_LIST, LB_GETTEXTLEN, (WPARAM)id, 0); pbuf = (char *)malloc(result + 1); diff --git a/PC/clinic/msvcrtmodule.c.h b/PC/clinic/msvcrtmodule.c.h index c8e6ed8..e7a72c4 100644 --- a/PC/clinic/msvcrtmodule.c.h +++ b/PC/clinic/msvcrtmodule.c.h @@ -15,10 +15,10 @@ PyDoc_STRVAR(msvcrt_heapmin__doc__, {"heapmin", (PyCFunction)msvcrt_heapmin, METH_NOARGS, msvcrt_heapmin__doc__}, static PyObject * -msvcrt_heapmin_impl(PyModuleDef *module); +msvcrt_heapmin_impl(PyObject *module); static PyObject * -msvcrt_heapmin(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_heapmin(PyObject *module, PyObject *Py_UNUSED(ignored)) { return msvcrt_heapmin_impl(module); } @@ -40,10 +40,10 @@ PyDoc_STRVAR(msvcrt_locking__doc__, {"locking", (PyCFunction)msvcrt_locking, METH_VARARGS, msvcrt_locking__doc__}, static PyObject * -msvcrt_locking_impl(PyModuleDef *module, int fd, int mode, long nbytes); +msvcrt_locking_impl(PyObject *module, int fd, int mode, long nbytes); static PyObject * -msvcrt_locking(PyModuleDef *module, PyObject *args) +msvcrt_locking(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -74,10 +74,10 @@ PyDoc_STRVAR(msvcrt_setmode__doc__, {"setmode", (PyCFunction)msvcrt_setmode, METH_VARARGS, msvcrt_setmode__doc__}, static long -msvcrt_setmode_impl(PyModuleDef *module, int fd, int flags); +msvcrt_setmode_impl(PyObject *module, int fd, int flags); static PyObject * -msvcrt_setmode(PyModuleDef *module, PyObject *args) +msvcrt_setmode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -110,11 +110,10 @@ PyDoc_STRVAR(msvcrt_open_osfhandle__doc__, {"open_osfhandle", (PyCFunction)msvcrt_open_osfhandle, METH_VARARGS, msvcrt_open_osfhandle__doc__}, static long -msvcrt_open_osfhandle_impl(PyModuleDef *module, Py_intptr_t handle, - int flags); +msvcrt_open_osfhandle_impl(PyObject *module, Py_intptr_t handle, int flags); static PyObject * -msvcrt_open_osfhandle(PyModuleDef *module, PyObject *args) +msvcrt_open_osfhandle(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_intptr_t handle; @@ -145,10 +144,10 @@ PyDoc_STRVAR(msvcrt_get_osfhandle__doc__, {"get_osfhandle", (PyCFunction)msvcrt_get_osfhandle, METH_O, msvcrt_get_osfhandle__doc__}, static Py_intptr_t -msvcrt_get_osfhandle_impl(PyModuleDef *module, int fd); +msvcrt_get_osfhandle_impl(PyObject *module, int fd); static PyObject * -msvcrt_get_osfhandle(PyModuleDef *module, PyObject *arg) +msvcrt_get_osfhandle(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -175,10 +174,10 @@ PyDoc_STRVAR(msvcrt_kbhit__doc__, {"kbhit", (PyCFunction)msvcrt_kbhit, METH_NOARGS, msvcrt_kbhit__doc__}, static long -msvcrt_kbhit_impl(PyModuleDef *module); +msvcrt_kbhit_impl(PyObject *module); static PyObject * -msvcrt_kbhit(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_kbhit(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; long _return_value; @@ -208,10 +207,10 @@ PyDoc_STRVAR(msvcrt_getch__doc__, {"getch", (PyCFunction)msvcrt_getch, METH_NOARGS, msvcrt_getch__doc__}, static int -msvcrt_getch_impl(PyModuleDef *module); +msvcrt_getch_impl(PyObject *module); static PyObject * -msvcrt_getch(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getch(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; char s[1]; @@ -232,10 +231,10 @@ PyDoc_STRVAR(msvcrt_getwch__doc__, {"getwch", (PyCFunction)msvcrt_getwch, METH_NOARGS, msvcrt_getwch__doc__}, static wchar_t -msvcrt_getwch_impl(PyModuleDef *module); +msvcrt_getwch_impl(PyObject *module); static PyObject * -msvcrt_getwch(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getwch(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; wchar_t _return_value; @@ -256,10 +255,10 @@ PyDoc_STRVAR(msvcrt_getche__doc__, {"getche", (PyCFunction)msvcrt_getche, METH_NOARGS, msvcrt_getche__doc__}, static int -msvcrt_getche_impl(PyModuleDef *module); +msvcrt_getche_impl(PyObject *module); static PyObject * -msvcrt_getche(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getche(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; char s[1]; @@ -280,10 +279,10 @@ PyDoc_STRVAR(msvcrt_getwche__doc__, {"getwche", (PyCFunction)msvcrt_getwche, METH_NOARGS, msvcrt_getwche__doc__}, static wchar_t -msvcrt_getwche_impl(PyModuleDef *module); +msvcrt_getwche_impl(PyObject *module); static PyObject * -msvcrt_getwche(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getwche(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; wchar_t _return_value; @@ -304,10 +303,10 @@ PyDoc_STRVAR(msvcrt_putch__doc__, {"putch", (PyCFunction)msvcrt_putch, METH_O, msvcrt_putch__doc__}, static PyObject * -msvcrt_putch_impl(PyModuleDef *module, char char_value); +msvcrt_putch_impl(PyObject *module, char char_value); static PyObject * -msvcrt_putch(PyModuleDef *module, PyObject *arg) +msvcrt_putch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; char char_value; @@ -330,10 +329,10 @@ PyDoc_STRVAR(msvcrt_putwch__doc__, {"putwch", (PyCFunction)msvcrt_putwch, METH_O, msvcrt_putwch__doc__}, static PyObject * -msvcrt_putwch_impl(PyModuleDef *module, int unicode_char); +msvcrt_putwch_impl(PyObject *module, int unicode_char); static PyObject * -msvcrt_putwch(PyModuleDef *module, PyObject *arg) +msvcrt_putwch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int unicode_char; @@ -360,10 +359,10 @@ PyDoc_STRVAR(msvcrt_ungetch__doc__, {"ungetch", (PyCFunction)msvcrt_ungetch, METH_O, msvcrt_ungetch__doc__}, static PyObject * -msvcrt_ungetch_impl(PyModuleDef *module, char char_value); +msvcrt_ungetch_impl(PyObject *module, char char_value); static PyObject * -msvcrt_ungetch(PyModuleDef *module, PyObject *arg) +msvcrt_ungetch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; char char_value; @@ -386,10 +385,10 @@ PyDoc_STRVAR(msvcrt_ungetwch__doc__, {"ungetwch", (PyCFunction)msvcrt_ungetwch, METH_O, msvcrt_ungetwch__doc__}, static PyObject * -msvcrt_ungetwch_impl(PyModuleDef *module, int unicode_char); +msvcrt_ungetwch_impl(PyObject *module, int unicode_char); static PyObject * -msvcrt_ungetwch(PyModuleDef *module, PyObject *arg) +msvcrt_ungetwch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int unicode_char; @@ -416,10 +415,10 @@ PyDoc_STRVAR(msvcrt_CrtSetReportFile__doc__, {"CrtSetReportFile", (PyCFunction)msvcrt_CrtSetReportFile, METH_VARARGS, msvcrt_CrtSetReportFile__doc__}, static long -msvcrt_CrtSetReportFile_impl(PyModuleDef *module, int type, int file); +msvcrt_CrtSetReportFile_impl(PyObject *module, int type, int file); static PyObject * -msvcrt_CrtSetReportFile(PyModuleDef *module, PyObject *args) +msvcrt_CrtSetReportFile(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int type; @@ -454,10 +453,10 @@ PyDoc_STRVAR(msvcrt_CrtSetReportMode__doc__, {"CrtSetReportMode", (PyCFunction)msvcrt_CrtSetReportMode, METH_VARARGS, msvcrt_CrtSetReportMode__doc__}, static long -msvcrt_CrtSetReportMode_impl(PyModuleDef *module, int type, int mode); +msvcrt_CrtSetReportMode_impl(PyObject *module, int type, int mode); static PyObject * -msvcrt_CrtSetReportMode(PyModuleDef *module, PyObject *args) +msvcrt_CrtSetReportMode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int type; @@ -492,10 +491,10 @@ PyDoc_STRVAR(msvcrt_set_error_mode__doc__, {"set_error_mode", (PyCFunction)msvcrt_set_error_mode, METH_O, msvcrt_set_error_mode__doc__}, static long -msvcrt_set_error_mode_impl(PyModuleDef *module, int mode); +msvcrt_set_error_mode_impl(PyObject *module, int mode); static PyObject * -msvcrt_set_error_mode(PyModuleDef *module, PyObject *arg) +msvcrt_set_error_mode(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int mode; @@ -524,10 +523,10 @@ PyDoc_STRVAR(msvcrt_SetErrorMode__doc__, {"SetErrorMode", (PyCFunction)msvcrt_SetErrorMode, METH_O, msvcrt_SetErrorMode__doc__}, static PyObject * -msvcrt_SetErrorMode_impl(PyModuleDef *module, unsigned int mode); +msvcrt_SetErrorMode_impl(PyObject *module, unsigned int mode); static PyObject * -msvcrt_SetErrorMode(PyModuleDef *module, PyObject *arg) +msvcrt_SetErrorMode(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; unsigned int mode; @@ -551,4 +550,4 @@ exit: #ifndef MSVCRT_SET_ERROR_MODE_METHODDEF #define MSVCRT_SET_ERROR_MODE_METHODDEF #endif /* !defined(MSVCRT_SET_ERROR_MODE_METHODDEF) */ -/*[clinic end generated code: output=16613d3119a1fd44 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=2a794c520d6ae887 input=a9049054013a1b77]*/ diff --git a/PC/clinic/winreg.c.h b/PC/clinic/winreg.c.h index 338e33d..f6ae2c0 100644 --- a/PC/clinic/winreg.c.h +++ b/PC/clinic/winreg.c.h @@ -135,11 +135,11 @@ PyDoc_STRVAR(winreg_ConnectRegistry__doc__, {"ConnectRegistry", (PyCFunction)winreg_ConnectRegistry, METH_VARARGS, winreg_ConnectRegistry__doc__}, static HKEY -winreg_ConnectRegistry_impl(PyModuleDef *module, Py_UNICODE *computer_name, +winreg_ConnectRegistry_impl(PyObject *module, Py_UNICODE *computer_name, HKEY key); static PyObject * -winreg_ConnectRegistry(PyModuleDef *module, PyObject *args) +winreg_ConnectRegistry(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_UNICODE *computer_name; @@ -181,10 +181,10 @@ PyDoc_STRVAR(winreg_CreateKey__doc__, {"CreateKey", (PyCFunction)winreg_CreateKey, METH_VARARGS, winreg_CreateKey__doc__}, static HKEY -winreg_CreateKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key); +winreg_CreateKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key); static PyObject * -winreg_CreateKey(PyModuleDef *module, PyObject *args) +winreg_CreateKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -232,11 +232,11 @@ PyDoc_STRVAR(winreg_CreateKeyEx__doc__, {"CreateKeyEx", (PyCFunction)winreg_CreateKeyEx, METH_VARARGS|METH_KEYWORDS, winreg_CreateKeyEx__doc__}, static HKEY -winreg_CreateKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_CreateKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access); static PyObject * -winreg_CreateKeyEx(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_CreateKeyEx(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "reserved", "access", NULL}; @@ -280,10 +280,10 @@ PyDoc_STRVAR(winreg_DeleteKey__doc__, {"DeleteKey", (PyCFunction)winreg_DeleteKey, METH_VARARGS, winreg_DeleteKey__doc__}, static PyObject * -winreg_DeleteKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key); +winreg_DeleteKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key); static PyObject * -winreg_DeleteKey(PyModuleDef *module, PyObject *args) +winreg_DeleteKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -327,11 +327,11 @@ PyDoc_STRVAR(winreg_DeleteKeyEx__doc__, {"DeleteKeyEx", (PyCFunction)winreg_DeleteKeyEx, METH_VARARGS|METH_KEYWORDS, winreg_DeleteKeyEx__doc__}, static PyObject * -winreg_DeleteKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_DeleteKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, REGSAM access, int reserved); static PyObject * -winreg_DeleteKeyEx(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_DeleteKeyEx(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "access", "reserved", NULL}; @@ -364,10 +364,10 @@ PyDoc_STRVAR(winreg_DeleteValue__doc__, {"DeleteValue", (PyCFunction)winreg_DeleteValue, METH_VARARGS, winreg_DeleteValue__doc__}, static PyObject * -winreg_DeleteValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value); +winreg_DeleteValue_impl(PyObject *module, HKEY key, Py_UNICODE *value); static PyObject * -winreg_DeleteValue(PyModuleDef *module, PyObject *args) +winreg_DeleteValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -401,10 +401,10 @@ PyDoc_STRVAR(winreg_EnumKey__doc__, {"EnumKey", (PyCFunction)winreg_EnumKey, METH_VARARGS, winreg_EnumKey__doc__}, static PyObject * -winreg_EnumKey_impl(PyModuleDef *module, HKEY key, int index); +winreg_EnumKey_impl(PyObject *module, HKEY key, int index); static PyObject * -winreg_EnumKey(PyModuleDef *module, PyObject *args) +winreg_EnumKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -447,10 +447,10 @@ PyDoc_STRVAR(winreg_EnumValue__doc__, {"EnumValue", (PyCFunction)winreg_EnumValue, METH_VARARGS, winreg_EnumValue__doc__}, static PyObject * -winreg_EnumValue_impl(PyModuleDef *module, HKEY key, int index); +winreg_EnumValue_impl(PyObject *module, HKEY key, int index); static PyObject * -winreg_EnumValue(PyModuleDef *module, PyObject *args) +winreg_EnumValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -475,10 +475,10 @@ PyDoc_STRVAR(winreg_ExpandEnvironmentStrings__doc__, {"ExpandEnvironmentStrings", (PyCFunction)winreg_ExpandEnvironmentStrings, METH_O, winreg_ExpandEnvironmentStrings__doc__}, static PyObject * -winreg_ExpandEnvironmentStrings_impl(PyModuleDef *module, Py_UNICODE *string); +winreg_ExpandEnvironmentStrings_impl(PyObject *module, Py_UNICODE *string); static PyObject * -winreg_ExpandEnvironmentStrings(PyModuleDef *module, PyObject *arg) +winreg_ExpandEnvironmentStrings(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_UNICODE *string; @@ -514,10 +514,10 @@ PyDoc_STRVAR(winreg_FlushKey__doc__, {"FlushKey", (PyCFunction)winreg_FlushKey, METH_O, winreg_FlushKey__doc__}, static PyObject * -winreg_FlushKey_impl(PyModuleDef *module, HKEY key); +winreg_FlushKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_FlushKey(PyModuleDef *module, PyObject *arg) +winreg_FlushKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -562,11 +562,11 @@ PyDoc_STRVAR(winreg_LoadKey__doc__, {"LoadKey", (PyCFunction)winreg_LoadKey, METH_VARARGS, winreg_LoadKey__doc__}, static PyObject * -winreg_LoadKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_LoadKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, Py_UNICODE *file_name); static PyObject * -winreg_LoadKey(PyModuleDef *module, PyObject *args) +winreg_LoadKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -605,11 +605,11 @@ PyDoc_STRVAR(winreg_OpenKey__doc__, {"OpenKey", (PyCFunction)winreg_OpenKey, METH_VARARGS|METH_KEYWORDS, winreg_OpenKey__doc__}, static HKEY -winreg_OpenKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access); static PyObject * -winreg_OpenKey(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_OpenKey(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "reserved", "access", NULL}; @@ -654,11 +654,11 @@ PyDoc_STRVAR(winreg_OpenKeyEx__doc__, {"OpenKeyEx", (PyCFunction)winreg_OpenKeyEx, METH_VARARGS|METH_KEYWORDS, winreg_OpenKeyEx__doc__}, static HKEY -winreg_OpenKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access); static PyObject * -winreg_OpenKeyEx(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_OpenKeyEx(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "reserved", "access", NULL}; @@ -699,10 +699,10 @@ PyDoc_STRVAR(winreg_QueryInfoKey__doc__, {"QueryInfoKey", (PyCFunction)winreg_QueryInfoKey, METH_O, winreg_QueryInfoKey__doc__}, static PyObject * -winreg_QueryInfoKey_impl(PyModuleDef *module, HKEY key); +winreg_QueryInfoKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_QueryInfoKey(PyModuleDef *module, PyObject *arg) +winreg_QueryInfoKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -739,10 +739,10 @@ PyDoc_STRVAR(winreg_QueryValue__doc__, {"QueryValue", (PyCFunction)winreg_QueryValue, METH_VARARGS, winreg_QueryValue__doc__}, static PyObject * -winreg_QueryValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key); +winreg_QueryValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key); static PyObject * -winreg_QueryValue(PyModuleDef *module, PyObject *args) +winreg_QueryValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -777,10 +777,10 @@ PyDoc_STRVAR(winreg_QueryValueEx__doc__, {"QueryValueEx", (PyCFunction)winreg_QueryValueEx, METH_VARARGS, winreg_QueryValueEx__doc__}, static PyObject * -winreg_QueryValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *name); +winreg_QueryValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *name); static PyObject * -winreg_QueryValueEx(PyModuleDef *module, PyObject *args) +winreg_QueryValueEx(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -820,10 +820,10 @@ PyDoc_STRVAR(winreg_SaveKey__doc__, {"SaveKey", (PyCFunction)winreg_SaveKey, METH_VARARGS, winreg_SaveKey__doc__}, static PyObject * -winreg_SaveKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *file_name); +winreg_SaveKey_impl(PyObject *module, HKEY key, Py_UNICODE *file_name); static PyObject * -winreg_SaveKey(PyModuleDef *module, PyObject *args) +winreg_SaveKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -868,12 +868,12 @@ PyDoc_STRVAR(winreg_SetValue__doc__, {"SetValue", (PyCFunction)winreg_SetValue, METH_VARARGS, winreg_SetValue__doc__}, static PyObject * -winreg_SetValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_SetValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, DWORD type, Py_UNICODE *value, Py_ssize_clean_t value_length); static PyObject * -winreg_SetValue(PyModuleDef *module, PyObject *args) +winreg_SetValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -936,11 +936,11 @@ PyDoc_STRVAR(winreg_SetValueEx__doc__, {"SetValueEx", (PyCFunction)winreg_SetValueEx, METH_VARARGS, winreg_SetValueEx__doc__}, static PyObject * -winreg_SetValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value_name, +winreg_SetValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *value_name, PyObject *reserved, DWORD type, PyObject *value); static PyObject * -winreg_SetValueEx(PyModuleDef *module, PyObject *args) +winreg_SetValueEx(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -977,10 +977,10 @@ PyDoc_STRVAR(winreg_DisableReflectionKey__doc__, {"DisableReflectionKey", (PyCFunction)winreg_DisableReflectionKey, METH_O, winreg_DisableReflectionKey__doc__}, static PyObject * -winreg_DisableReflectionKey_impl(PyModuleDef *module, HKEY key); +winreg_DisableReflectionKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_DisableReflectionKey(PyModuleDef *module, PyObject *arg) +winreg_DisableReflectionKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -1010,10 +1010,10 @@ PyDoc_STRVAR(winreg_EnableReflectionKey__doc__, {"EnableReflectionKey", (PyCFunction)winreg_EnableReflectionKey, METH_O, winreg_EnableReflectionKey__doc__}, static PyObject * -winreg_EnableReflectionKey_impl(PyModuleDef *module, HKEY key); +winreg_EnableReflectionKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_EnableReflectionKey(PyModuleDef *module, PyObject *arg) +winreg_EnableReflectionKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -1041,10 +1041,10 @@ PyDoc_STRVAR(winreg_QueryReflectionKey__doc__, {"QueryReflectionKey", (PyCFunction)winreg_QueryReflectionKey, METH_O, winreg_QueryReflectionKey__doc__}, static PyObject * -winreg_QueryReflectionKey_impl(PyModuleDef *module, HKEY key); +winreg_QueryReflectionKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_QueryReflectionKey(PyModuleDef *module, PyObject *arg) +winreg_QueryReflectionKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -1056,4 +1056,4 @@ winreg_QueryReflectionKey(PyModuleDef *module, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=5e346dccc296f9f1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7b8940a23f605ddc input=a9049054013a1b77]*/ diff --git a/PC/clinic/winsound.c.h b/PC/clinic/winsound.c.h index dca5a42..b00b442 100644 --- a/PC/clinic/winsound.c.h +++ b/PC/clinic/winsound.c.h @@ -17,10 +17,10 @@ PyDoc_STRVAR(winsound_PlaySound__doc__, {"PlaySound", (PyCFunction)winsound_PlaySound, METH_VARARGS, winsound_PlaySound__doc__}, static PyObject * -winsound_PlaySound_impl(PyModuleDef *module, Py_UNICODE *sound, int flags); +winsound_PlaySound_impl(PyObject *module, Py_UNICODE *sound, int flags); static PyObject * -winsound_PlaySound(PyModuleDef *module, PyObject *args) +winsound_PlaySound(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_UNICODE *sound; @@ -51,10 +51,10 @@ PyDoc_STRVAR(winsound_Beep__doc__, {"Beep", (PyCFunction)winsound_Beep, METH_VARARGS, winsound_Beep__doc__}, static PyObject * -winsound_Beep_impl(PyModuleDef *module, int frequency, int duration); +winsound_Beep_impl(PyObject *module, int frequency, int duration); static PyObject * -winsound_Beep(PyModuleDef *module, PyObject *args) +winsound_Beep(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int frequency; @@ -81,10 +81,10 @@ PyDoc_STRVAR(winsound_MessageBeep__doc__, {"MessageBeep", (PyCFunction)winsound_MessageBeep, METH_VARARGS, winsound_MessageBeep__doc__}, static PyObject * -winsound_MessageBeep_impl(PyModuleDef *module, int x); +winsound_MessageBeep_impl(PyObject *module, int x); static PyObject * -winsound_MessageBeep(PyModuleDef *module, PyObject *args) +winsound_MessageBeep(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int x = MB_OK; @@ -97,4 +97,4 @@ winsound_MessageBeep(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=c5b018ac9dc1f500 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c0b290daf2330dc9 input=a9049054013a1b77]*/ diff --git a/PC/icons.mak b/PC/icons.mak deleted file mode 100644 index 4a132c9..0000000 --- a/PC/icons.mak +++ /dev/null @@ -1,9 +0,0 @@ -python_icon.exe: py.res empty.obj - link /out:python_icon.exe /machine:x86 /subsystem:windows py.res empty.obj - -py.res: py.ico pyc.ico pycon.ico icons.rc - rc /fo py.res icons.rc - -empty.obj: empty.c - cl /c empty.c - diff --git a/PC/icons.rc b/PC/icons.rc deleted file mode 100644 index d0b4410..0000000 --- a/PC/icons.rc +++ /dev/null @@ -1,4 +0,0 @@ -101 ICON "py.ico" -102 ICON "pyc.ico" -103 ICON "pycon.ico" - diff --git a/PC/launcher.c b/PC/launcher.c index db5226e..40d4cb5 100644 --- a/PC/launcher.c +++ b/PC/launcher.c @@ -1081,7 +1081,7 @@ static PYC_MAGIC magic_values[] = { { 3160, 3180, L"3.2" }, { 3190, 3230, L"3.3" }, { 3250, 3310, L"3.4" }, - { 3320, 3350, L"3.5" }, + { 3320, 3351, L"3.5" }, { 3360, 3361, L"3.6" }, { 0 } }; diff --git a/PC/make_versioninfo.c b/PC/make_versioninfo.c deleted file mode 100644 index e969671..0000000 --- a/PC/make_versioninfo.c +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include "patchlevel.h" -/* - * This program prints out an include file containing fields required to build - * the version info resource of pythonxx.dll because the resource compiler - * cannot do the arithmetic. - */ -/* - * FIELD3 is the third field of the version number. - * This is what we'd like FIELD3 to be: - * - * #define FIELD3 (PY_MICRO_VERSION*1000 + PY_RELEASE_LEVEL*10 + PY_RELEASE_SERIAL) - * - * but that neither gives an error nor comes anywhere close to working. - * - * For 2.4a0, - * PY_MICRO_VERSION = 0 - * PY_RELEASE_LEVEL = 'alpha' = 0xa - * PY_RELEASE_SERIAL = 0 - * - * gives FIELD3 = 0*1000 + 10*10 + 0 = 100 - */ -int main(int argc, char **argv) -{ - printf("/* This file created by make_versioninfo.exe */\n"); - printf("#define FIELD3 %d\n", - PY_MICRO_VERSION*1000 + PY_RELEASE_LEVEL*10 + PY_RELEASE_SERIAL); - printf("#define MS_DLL_ID \"%d.%d\"\n", - PY_MAJOR_VERSION, PY_MINOR_VERSION); - printf("#ifndef _DEBUG\n"); - printf("#define PYTHON_DLL_NAME \"python%d%d.dll\"\n", - PY_MAJOR_VERSION, PY_MINOR_VERSION); - printf("#else\n"); - printf("#define PYTHON_DLL_NAME \"python%d%d_d.dll\"\n", - PY_MAJOR_VERSION, PY_MINOR_VERSION); - printf("#endif\n"); - return 0; -} diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c index 52d4100..b0739d0 100644 --- a/PC/msvcrtmodule.c +++ b/PC/msvcrtmodule.c @@ -78,8 +78,8 @@ to the operating system. On failure, this raises OSError. [clinic start generated code]*/ static PyObject * -msvcrt_heapmin_impl(PyModuleDef *module) -/*[clinic end generated code: output=464f866feb57c436 input=82e1771d21bde2d8]*/ +msvcrt_heapmin_impl(PyObject *module) +/*[clinic end generated code: output=1ba00f344782dc19 input=82e1771d21bde2d8]*/ { if (_heapmin() != 0) return PyErr_SetFromErrno(PyExc_IOError); @@ -105,8 +105,8 @@ individually. [clinic start generated code]*/ static PyObject * -msvcrt_locking_impl(PyModuleDef *module, int fd, int mode, long nbytes) -/*[clinic end generated code: output=dff41e5e76d544de input=d9f13f0f6a713ba7]*/ +msvcrt_locking_impl(PyObject *module, int fd, int mode, long nbytes) +/*[clinic end generated code: output=a4a90deca9785a03 input=d9f13f0f6a713ba7]*/ { int err; @@ -135,8 +135,8 @@ Return value is the previous mode. [clinic start generated code]*/ static long -msvcrt_setmode_impl(PyModuleDef *module, int fd, int flags) -/*[clinic end generated code: output=8c84e5b37c586d0d input=76e7c01f6b137f75]*/ +msvcrt_setmode_impl(PyObject *module, int fd, int flags) +/*[clinic end generated code: output=24a9be5ea07ccb9b input=76e7c01f6b137f75]*/ { flags = _setmode(fd, flags); if (flags == -1) @@ -160,9 +160,8 @@ to os.fdopen() to create a file object. [clinic start generated code]*/ static long -msvcrt_open_osfhandle_impl(PyModuleDef *module, Py_intptr_t handle, - int flags) -/*[clinic end generated code: output=86bce32582c49c06 input=4d8516ed32db8f65]*/ +msvcrt_open_osfhandle_impl(PyObject *module, Py_intptr_t handle, int flags) +/*[clinic end generated code: output=bf65e422243a39f9 input=4d8516ed32db8f65]*/ { int fd; @@ -185,8 +184,8 @@ Raises IOError if fd is not recognized. [clinic start generated code]*/ static Py_intptr_t -msvcrt_get_osfhandle_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=376bff52586b55a6 input=c7d18d02c8017ec1]*/ +msvcrt_get_osfhandle_impl(PyObject *module, int fd) +/*[clinic end generated code: output=eac47643338c0baa input=c7d18d02c8017ec1]*/ { Py_intptr_t handle = -1; @@ -212,8 +211,8 @@ Return true if a keypress is waiting to be read. [clinic start generated code]*/ static long -msvcrt_kbhit_impl(PyModuleDef *module) -/*[clinic end generated code: output=2b7293fcbe5cb24e input=e70d678a5c2f6acc]*/ +msvcrt_kbhit_impl(PyObject *module) +/*[clinic end generated code: output=940dfce6587c1890 input=e70d678a5c2f6acc]*/ { return _kbhit(); } @@ -231,8 +230,8 @@ cannot be read with this function. [clinic start generated code]*/ static int -msvcrt_getch_impl(PyModuleDef *module) -/*[clinic end generated code: output=199e3d89f49c166a input=37a40cf0ed0d1153]*/ +msvcrt_getch_impl(PyObject *module) +/*[clinic end generated code: output=a4e51f0565064a7d input=37a40cf0ed0d1153]*/ { int ch; @@ -249,8 +248,8 @@ Wide char variant of getch(), returning a Unicode value. [clinic start generated code]*/ static wchar_t -msvcrt_getwch_impl(PyModuleDef *module) -/*[clinic end generated code: output=9d3762861328b1fe input=27b3dec8ad823d7c]*/ +msvcrt_getwch_impl(PyObject *module) +/*[clinic end generated code: output=be9937494e22f007 input=27b3dec8ad823d7c]*/ { wchar_t ch; @@ -267,8 +266,8 @@ Similar to getch(), but the keypress will be echoed if possible. [clinic start generated code]*/ static int -msvcrt_getche_impl(PyModuleDef *module) -/*[clinic end generated code: output=8aa369be6550068e input=43311ade9ed4a9c0]*/ +msvcrt_getche_impl(PyObject *module) +/*[clinic end generated code: output=d8f7db4fd2990401 input=43311ade9ed4a9c0]*/ { int ch; @@ -285,8 +284,8 @@ Wide char variant of getche(), returning a Unicode value. [clinic start generated code]*/ static wchar_t -msvcrt_getwche_impl(PyModuleDef *module) -/*[clinic end generated code: output=3693cf78e3ea0cf6 input=49337d59d1a591f8]*/ +msvcrt_getwche_impl(PyObject *module) +/*[clinic end generated code: output=d0dae5ba3829d596 input=49337d59d1a591f8]*/ { wchar_t ch; @@ -306,8 +305,8 @@ Print the byte string char to the console without buffering. [clinic start generated code]*/ static PyObject * -msvcrt_putch_impl(PyModuleDef *module, char char_value) -/*[clinic end generated code: output=c05548b11554f36f input=ec078dd10cb054d6]*/ +msvcrt_putch_impl(PyObject *module, char char_value) +/*[clinic end generated code: output=92ec9b81012d8f60 input=ec078dd10cb054d6]*/ { _putch(char_value); Py_RETURN_NONE; @@ -323,8 +322,8 @@ Wide char variant of putch(), accepting a Unicode value. [clinic start generated code]*/ static PyObject * -msvcrt_putwch_impl(PyModuleDef *module, int unicode_char) -/*[clinic end generated code: output=c216a73694ca73dd input=996ccd0bbcbac4c3]*/ +msvcrt_putwch_impl(PyObject *module, int unicode_char) +/*[clinic end generated code: output=a3bd1a8951d28eee input=996ccd0bbcbac4c3]*/ { _putwch(unicode_char); Py_RETURN_NONE; @@ -345,8 +344,8 @@ getch() or getche(). [clinic start generated code]*/ static PyObject * -msvcrt_ungetch_impl(PyModuleDef *module, char char_value) -/*[clinic end generated code: output=19a4cd3249709ec9 input=22f07ee9001bbf0f]*/ +msvcrt_ungetch_impl(PyObject *module, char char_value) +/*[clinic end generated code: output=c6942a0efa119000 input=22f07ee9001bbf0f]*/ { if (_ungetch(char_value) == EOF) return PyErr_SetFromErrno(PyExc_IOError); @@ -363,8 +362,8 @@ Wide char variant of ungetch(), accepting a Unicode value. [clinic start generated code]*/ static PyObject * -msvcrt_ungetwch_impl(PyModuleDef *module, int unicode_char) -/*[clinic end generated code: output=1ee7674710322bd1 input=83ec0492be04d564]*/ +msvcrt_ungetwch_impl(PyObject *module, int unicode_char) +/*[clinic end generated code: output=e63af05438b8ba3d input=83ec0492be04d564]*/ { if (_ungetwch(unicode_char) == WEOF) return PyErr_SetFromErrno(PyExc_IOError); @@ -385,8 +384,8 @@ Only available on Debug builds. [clinic start generated code]*/ static long -msvcrt_CrtSetReportFile_impl(PyModuleDef *module, int type, int file) -/*[clinic end generated code: output=8c3644fb2edfa808 input=bb8f721a604fcc45]*/ +msvcrt_CrtSetReportFile_impl(PyObject *module, int type, int file) +/*[clinic end generated code: output=df291c7fe032eb68 input=bb8f721a604fcc45]*/ { return (long)_CrtSetReportFile(type, (_HFILE)file); } @@ -404,8 +403,8 @@ Only available on Debug builds. [clinic start generated code]*/ static long -msvcrt_CrtSetReportMode_impl(PyModuleDef *module, int type, int mode) -/*[clinic end generated code: output=b407fbf8716a52b9 input=9319d29b4319426b]*/ +msvcrt_CrtSetReportMode_impl(PyObject *module, int type, int mode) +/*[clinic end generated code: output=b2863761523de317 input=9319d29b4319426b]*/ { int res; @@ -427,8 +426,8 @@ Only available on Debug builds. [clinic start generated code]*/ static long -msvcrt_set_error_mode_impl(PyModuleDef *module, int mode) -/*[clinic end generated code: output=62148adffa90867d input=046fca59c0f20872]*/ +msvcrt_set_error_mode_impl(PyObject *module, int mode) +/*[clinic end generated code: output=ac4a09040d8ac4e3 input=046fca59c0f20872]*/ { return _set_error_mode(mode); } @@ -444,8 +443,8 @@ Wrapper around SetErrorMode. [clinic start generated code]*/ static PyObject * -msvcrt_SetErrorMode_impl(PyModuleDef *module, unsigned int mode) -/*[clinic end generated code: output=544c60b085be79c6 input=d8b167258d32d907]*/ +msvcrt_SetErrorMode_impl(PyObject *module, unsigned int mode) +/*[clinic end generated code: output=01d529293f00da8f input=d8b167258d32d907]*/ { unsigned int res; diff --git a/PC/pyshellext.cpp b/PC/pyshellext.cpp new file mode 100644 index 0000000..04fe61e --- /dev/null +++ b/PC/pyshellext.cpp @@ -0,0 +1,605 @@ +// Support back to Vista +#define _WIN32_WINNT _WIN32_WINNT_VISTA +#include + +// Use WRL to define a classic COM class +#define __WRL_CLASSIC_COM__ +#include + +#include +#include +#include +#include +#include + +#include "pyshellext_h.h" + +#define DDWM_UPDATEWINDOW (WM_USER+3) + +static HINSTANCE hModule; +static CLIPFORMAT cfDropDescription; +static CLIPFORMAT cfDragWindow; + +static const LPCWSTR CLASS_SUBKEY = L"Software\\Classes\\CLSID\\{BEA218D2-6950-497B-9434-61683EC065FE}"; +static const LPCWSTR DRAG_MESSAGE = L"Open with %1"; + +using namespace Microsoft::WRL; + +HRESULT FilenameListCchLengthA(LPCSTR pszSource, size_t cchMax, size_t *pcchLength, size_t *pcchCount) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource && pszSource[0]) { + size_t oneLength; + hr = StringCchLengthA(pszSource, cchMax - length, &oneLength); + if (FAILED(hr)) { + return hr; + } + count += 1; + length += oneLength + (strchr(pszSource, ' ') ? 3 : 1); + pszSource = &pszSource[oneLength + 1]; + } + + *pcchCount = count; + *pcchLength = length; + return hr; +} + +HRESULT FilenameListCchLengthW(LPCWSTR pszSource, size_t cchMax, size_t *pcchLength, size_t *pcchCount) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource && pszSource[0]) { + size_t oneLength; + hr = StringCchLengthW(pszSource, cchMax - length, &oneLength); + if (FAILED(hr)) { + return hr; + } + count += 1; + length += oneLength + (wcschr(pszSource, ' ') ? 3 : 1); + pszSource = &pszSource[oneLength + 1]; + } + + *pcchCount = count; + *pcchLength = length; + return hr; +} + +HRESULT FilenameListCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, LPCSTR pszSource, LPCSTR pszSeparator) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource[0]) { + STRSAFE_LPSTR newDest; + + hr = StringCchCopyExA(pszDest, cchDest, pszSource, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszSource += (newDest - pszDest) + 1; + pszDest = PathQuoteSpacesA(pszDest) ? newDest + 2 : newDest; + + if (pszSource[0]) { + hr = StringCchCopyExA(pszDest, cchDest, pszSeparator, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszDest = newDest; + } + } + + return hr; +} + +HRESULT FilenameListCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, LPCWSTR pszSource, LPCWSTR pszSeparator) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource[0]) { + STRSAFE_LPWSTR newDest; + + hr = StringCchCopyExW(pszDest, cchDest, pszSource, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszSource += (newDest - pszDest) + 1; + pszDest = PathQuoteSpacesW(pszDest) ? newDest + 2 : newDest; + + if (pszSource[0]) { + hr = StringCchCopyExW(pszDest, cchDest, pszSeparator, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszDest = newDest; + } + } + + return hr; +} + + +class PyShellExt : public RuntimeClass< + RuntimeClassFlags, + IDropTarget, + IPersistFile +> +{ + LPOLESTR target, target_dir; + DWORD target_mode; + + IDataObject *data_obj; + +public: + PyShellExt() : target(NULL), target_dir(NULL), target_mode(0), data_obj(NULL) { + OutputDebugString(L"PyShellExt::PyShellExt"); + } + + ~PyShellExt() { + if (target) { + CoTaskMemFree(target); + } + if (target_dir) { + CoTaskMemFree(target_dir); + } + if (data_obj) { + data_obj->Release(); + } + } + +private: + HRESULT UpdateDropDescription(IDataObject *pDataObj) { + STGMEDIUM medium; + FORMATETC fmt = { + cfDropDescription, + NULL, + DVASPECT_CONTENT, + -1, + TYMED_HGLOBAL + }; + + auto hr = pDataObj->GetData(&fmt, &medium); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::UpdateDropDescription - failed to get DROPDESCRIPTION format"); + return hr; + } + if (!medium.hGlobal) { + OutputDebugString(L"PyShellExt::UpdateDropDescription - DROPDESCRIPTION format had NULL hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + auto dd = (DROPDESCRIPTION*)GlobalLock(medium.hGlobal); + StringCchCopy(dd->szMessage, sizeof(dd->szMessage) / sizeof(dd->szMessage[0]), DRAG_MESSAGE); + StringCchCopy(dd->szInsert, sizeof(dd->szInsert) / sizeof(dd->szInsert[0]), PathFindFileNameW(target)); + dd->type = DROPIMAGE_MOVE; + + GlobalUnlock(medium.hGlobal); + ReleaseStgMedium(&medium); + + return S_OK; + } + + HRESULT GetDragWindow(IDataObject *pDataObj, HWND *phWnd) { + HRESULT hr; + HWND *pMem; + STGMEDIUM medium; + FORMATETC fmt = { + cfDragWindow, + NULL, + DVASPECT_CONTENT, + -1, + TYMED_HGLOBAL + }; + + hr = pDataObj->GetData(&fmt, &medium); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::GetDragWindow - failed to get DragWindow format"); + return hr; + } + if (!medium.hGlobal) { + OutputDebugString(L"PyShellExt::GetDragWindow - DragWindow format had NULL hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + pMem = (HWND*)GlobalLock(medium.hGlobal); + if (!pMem) { + OutputDebugString(L"PyShellExt::GetDragWindow - failed to lock DragWindow hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + *phWnd = *pMem; + + GlobalUnlock(medium.hGlobal); + ReleaseStgMedium(&medium); + + return S_OK; + } + + HRESULT GetArguments(IDataObject *pDataObj, LPCWSTR *pArguments) { + HRESULT hr; + DROPFILES *pdropfiles; + + STGMEDIUM medium; + FORMATETC fmt = { + CF_HDROP, + NULL, + DVASPECT_CONTENT, + -1, + TYMED_HGLOBAL + }; + + hr = pDataObj->GetData(&fmt, &medium); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::GetArguments - failed to get CF_HDROP format"); + return hr; + } + if (!medium.hGlobal) { + OutputDebugString(L"PyShellExt::GetArguments - CF_HDROP format had NULL hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + pdropfiles = (DROPFILES*)GlobalLock(medium.hGlobal); + if (!pdropfiles) { + OutputDebugString(L"PyShellExt::GetArguments - failed to lock CF_HDROP hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + if (pdropfiles->fWide) { + LPCWSTR files = (LPCWSTR)((char*)pdropfiles + pdropfiles->pFiles); + size_t len, count; + hr = FilenameListCchLengthW(files, 32767, &len, &count); + if (SUCCEEDED(hr)) { + LPWSTR args = (LPWSTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (args) { + hr = FilenameListCchCopyW(args, 32767, files, L" "); + if (SUCCEEDED(hr)) { + *pArguments = args; + } else { + CoTaskMemFree(args); + } + } else { + hr = E_OUTOFMEMORY; + } + } + } else { + LPCSTR files = (LPCSTR)((char*)pdropfiles + pdropfiles->pFiles); + size_t len, count; + hr = FilenameListCchLengthA(files, 32767, &len, &count); + if (SUCCEEDED(hr)) { + LPSTR temp = (LPSTR)CoTaskMemAlloc(sizeof(CHAR) * (len + 1)); + if (temp) { + hr = FilenameListCchCopyA(temp, 32767, files, " "); + if (SUCCEEDED(hr)) { + int wlen = MultiByteToWideChar(CP_ACP, 0, temp, (int)len, NULL, 0); + if (wlen) { + LPWSTR args = (LPWSTR)CoTaskMemAlloc(sizeof(WCHAR) * (wlen + 1)); + if (MultiByteToWideChar(CP_ACP, 0, temp, (int)len, args, wlen + 1)) { + *pArguments = args; + } else { + OutputDebugString(L"PyShellExt::GetArguments - failed to convert multi-byte to wide-char path"); + CoTaskMemFree(args); + hr = E_FAIL; + } + } else { + OutputDebugString(L"PyShellExt::GetArguments - failed to get length of wide-char path"); + hr = E_FAIL; + } + } + CoTaskMemFree(temp); + } else { + hr = E_OUTOFMEMORY; + } + } + } + + GlobalUnlock(medium.hGlobal); + ReleaseStgMedium(&medium); + + return hr; + } + + HRESULT NotifyDragWindow(HWND hwnd) { + LRESULT res; + + if (!hwnd) { + return S_FALSE; + } + + res = SendMessage(hwnd, DDWM_UPDATEWINDOW, 0, NULL); + + if (res) { + OutputDebugString(L"PyShellExt::NotifyDragWindow - failed to post DDWM_UPDATEWINDOW"); + return E_FAIL; + } + + return S_OK; + } + +public: + // IDropTarget implementation + + STDMETHODIMP DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) { + HWND hwnd; + + OutputDebugString(L"PyShellExt::DragEnter"); + + pDataObj->AddRef(); + data_obj = pDataObj; + + *pdwEffect = DROPEFFECT_MOVE; + + if (FAILED(UpdateDropDescription(data_obj))) { + OutputDebugString(L"PyShellExt::DragEnter - failed to update drop description"); + } + if (FAILED(GetDragWindow(data_obj, &hwnd))) { + OutputDebugString(L"PyShellExt::DragEnter - failed to get drag window"); + } + if (FAILED(NotifyDragWindow(hwnd))) { + OutputDebugString(L"PyShellExt::DragEnter - failed to notify drag window"); + } + + return S_OK; + } + + STDMETHODIMP DragLeave() { + return S_OK; + } + + STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) { + return S_OK; + } + + STDMETHODIMP Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) { + LPCWSTR args; + + OutputDebugString(L"PyShellExt::Drop"); + *pdwEffect = DROPEFFECT_NONE; + + if (pDataObj != data_obj) { + OutputDebugString(L"PyShellExt::Drop - unexpected data object"); + return E_FAIL; + } + + data_obj->Release(); + data_obj = NULL; + + if (SUCCEEDED(GetArguments(pDataObj, &args))) { + OutputDebugString(args); + ShellExecute(NULL, NULL, target, args, target_dir, SW_NORMAL); + + CoTaskMemFree((LPVOID)args); + } else { + OutputDebugString(L"PyShellExt::Drop - failed to get launch arguments"); + } + + return S_OK; + } + + // IPersistFile implementation + + STDMETHODIMP GetCurFile(LPOLESTR *ppszFileName) { + HRESULT hr; + size_t len; + + if (!ppszFileName) { + return E_POINTER; + } + + hr = StringCchLength(target, STRSAFE_MAX_CCH - 1, &len); + if (FAILED(hr)) { + return E_FAIL; + } + + *ppszFileName = (LPOLESTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (!*ppszFileName) { + return E_OUTOFMEMORY; + } + + hr = StringCchCopy(*ppszFileName, len + 1, target); + if (FAILED(hr)) { + CoTaskMemFree(*ppszFileName); + *ppszFileName = NULL; + return E_FAIL; + } + + return S_OK; + } + + STDMETHODIMP IsDirty() { + return S_FALSE; + } + + STDMETHODIMP Load(LPCOLESTR pszFileName, DWORD dwMode) { + HRESULT hr; + size_t len; + + OutputDebugString(L"PyShellExt::Load"); + OutputDebugString(pszFileName); + + hr = StringCchLength(pszFileName, STRSAFE_MAX_CCH - 1, &len); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::Load - failed to get string length"); + return hr; + } + + if (target) { + CoTaskMemFree(target); + } + if (target_dir) { + CoTaskMemFree(target_dir); + } + + target = (LPOLESTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (!target) { + OutputDebugString(L"PyShellExt::Load - E_OUTOFMEMORY"); + return E_OUTOFMEMORY; + } + target_dir = (LPOLESTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (!target_dir) { + OutputDebugString(L"PyShellExt::Load - E_OUTOFMEMORY"); + return E_OUTOFMEMORY; + } + + hr = StringCchCopy(target, len + 1, pszFileName); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::Load - failed to copy string"); + return hr; + } + + hr = StringCchCopy(target_dir, len + 1, pszFileName); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::Load - failed to copy string"); + return hr; + } + if (!PathRemoveFileSpecW(target_dir)) { + OutputDebugStringW(L"PyShellExt::Load - failed to remove filespec from target"); + return E_FAIL; + } + + OutputDebugString(target); + target_mode = dwMode; + OutputDebugString(L"PyShellExt::Load - S_OK"); + return S_OK; + } + + STDMETHODIMP Save(LPCOLESTR pszFileName, BOOL fRemember) { + return E_NOTIMPL; + } + + STDMETHODIMP SaveCompleted(LPCOLESTR pszFileName) { + return E_NOTIMPL; + } + + STDMETHODIMP GetClassID(CLSID *pClassID) { + *pClassID = CLSID_PyShellExt; + return S_OK; + } +}; + +CoCreatableClass(PyShellExt); + +STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, _COM_Outptr_ void** ppv) { + return Module::GetModule().GetClassObject(rclsid, riid, ppv); +} + +STDAPI DllCanUnloadNow() { + return Module::GetModule().Terminate() ? S_OK : S_FALSE; +} + +STDAPI DllRegisterServer() { + LONG res; + SECURITY_ATTRIBUTES secattr = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE }; + LPSECURITY_ATTRIBUTES psecattr = NULL; + HKEY key, ipsKey; + WCHAR modname[MAX_PATH]; + DWORD modname_len; + + OutputDebugString(L"PyShellExt::DllRegisterServer"); + if (!hModule) { + OutputDebugString(L"PyShellExt::DllRegisterServer - module handle was not set"); + return SELFREG_E_CLASS; + } + modname_len = GetModuleFileName(hModule, modname, MAX_PATH); + if (modname_len == 0 || + (modname_len == MAX_PATH && GetLastError() == ERROR_INSUFFICIENT_BUFFER)) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to get module file name"); + return SELFREG_E_CLASS; + } + + DWORD disp; + res = RegCreateKeyEx(HKEY_LOCAL_MACHINE, CLASS_SUBKEY, 0, NULL, 0, + KEY_ALL_ACCESS, psecattr, &key, &disp); + if (res == ERROR_ACCESS_DENIED) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to write per-machine registration. Attempting per-user instead."); + res = RegCreateKeyEx(HKEY_CURRENT_USER, CLASS_SUBKEY, 0, NULL, 0, + KEY_ALL_ACCESS, psecattr, &key, &disp); + } + if (res != ERROR_SUCCESS) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to create class key"); + return SELFREG_E_CLASS; + } + + res = RegCreateKeyEx(key, L"InProcServer32", 0, NULL, 0, + KEY_ALL_ACCESS, psecattr, &ipsKey, NULL); + if (res != ERROR_SUCCESS) { + RegCloseKey(key); + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to create InProcServer32 key"); + return SELFREG_E_CLASS; + } + + res = RegSetValueEx(ipsKey, NULL, 0, + REG_SZ, (LPBYTE)modname, modname_len * sizeof(modname[0])); + + if (res != ERROR_SUCCESS) { + RegCloseKey(ipsKey); + RegCloseKey(key); + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to set server path"); + return SELFREG_E_CLASS; + } + + res = RegSetValueEx(ipsKey, L"ThreadingModel", 0, + REG_SZ, (LPBYTE)(L"Apartment"), sizeof(L"Apartment")); + + RegCloseKey(ipsKey); + RegCloseKey(key); + if (res != ERROR_SUCCESS) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to set threading model"); + return SELFREG_E_CLASS; + } + + SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); + + OutputDebugString(L"PyShellExt::DllRegisterServer - S_OK"); + return S_OK; +} + +STDAPI DllUnregisterServer() { + LONG res_lm, res_cu; + + res_lm = RegDeleteTree(HKEY_LOCAL_MACHINE, CLASS_SUBKEY); + if (res_lm != ERROR_SUCCESS && res_lm != ERROR_FILE_NOT_FOUND) { + OutputDebugString(L"PyShellExt::DllUnregisterServer - failed to delete per-machine registration"); + return SELFREG_E_CLASS; + } + + res_cu = RegDeleteTree(HKEY_CURRENT_USER, CLASS_SUBKEY); + if (res_cu != ERROR_SUCCESS && res_cu != ERROR_FILE_NOT_FOUND) { + OutputDebugString(L"PyShellExt::DllUnregisterServer - failed to delete per-user registration"); + return SELFREG_E_CLASS; + } + + if (res_lm == ERROR_FILE_NOT_FOUND && res_cu == ERROR_FILE_NOT_FOUND) { + OutputDebugString(L"PyShellExt::DllUnregisterServer - extension was not registered"); + return SELFREG_E_CLASS; + } + + SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); + + OutputDebugString(L"PyShellExt::DllUnregisterServer - S_OK"); + return S_OK; +} + +STDAPI_(BOOL) DllMain(_In_opt_ HINSTANCE hinst, DWORD reason, _In_opt_ void*) { + if (reason == DLL_PROCESS_ATTACH) { + hModule = hinst; + + cfDropDescription = RegisterClipboardFormat(CFSTR_DROPDESCRIPTION); + if (!cfDropDescription) { + OutputDebugString(L"PyShellExt::DllMain - failed to get CFSTR_DROPDESCRIPTION format"); + } + cfDragWindow = RegisterClipboardFormat(L"DragWindow"); + if (!cfDragWindow) { + OutputDebugString(L"PyShellExt::DllMain - failed to get DragWindow format"); + } + + DisableThreadLibraryCalls(hinst); + } + return TRUE; +} \ No newline at end of file diff --git a/PC/pyshellext.def b/PC/pyshellext.def new file mode 100644 index 0000000..5424bd1 --- /dev/null +++ b/PC/pyshellext.def @@ -0,0 +1,6 @@ +LIBRARY "pyshellext" +EXPORTS + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE diff --git a/PC/pyshellext.idl b/PC/pyshellext.idl new file mode 100644 index 0000000..c0a1838 --- /dev/null +++ b/PC/pyshellext.idl @@ -0,0 +1,12 @@ +import "ocidl.idl"; + +[uuid(44039A76-3BDD-41C1-A31B-71C00202CE81), version(1.0)] +library PyShellExtLib +{ + [uuid(BEA218D2-6950-497B-9434-61683EC065FE), version(1.0)] + coclass PyShellExt + { + [default] interface IDropTarget; + interface IPersistFile; + } +}; \ No newline at end of file diff --git a/PC/pyshellext.rc b/PC/pyshellext.rc new file mode 100644 index 0000000..e5924a4 --- /dev/null +++ b/PC/pyshellext.rc @@ -0,0 +1,46 @@ +#include + +#include "python_ver_rc.h" + +// Include the manifest file that indicates we support all +// current versions of Windows. +#include +1 RT_MANIFEST "python.manifest" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION PYVERSION64 + PRODUCTVERSION PYVERSION64 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", PYTHON_COMPANY "\0" + VALUE "FileDescription", "Python\0" + VALUE "FileVersion", PYTHON_VERSION + VALUE "InternalName", "Python Launcher Shell Extension\0" + VALUE "LegalCopyright", PYTHON_COPYRIGHT "\0" + VALUE "OriginalFilename", "pyshellext" PYTHON_DEBUG_EXT ".dll\0" + VALUE "ProductName", "Python\0" + VALUE "ProductVersion", PYTHON_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END \ No newline at end of file diff --git a/PC/pyshellext_d.def b/PC/pyshellext_d.def new file mode 100644 index 0000000..7d2148b --- /dev/null +++ b/PC/pyshellext_d.def @@ -0,0 +1,6 @@ +LIBRARY "pyshellext_d" +EXPORTS + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE diff --git a/PC/python.manifest b/PC/python.manifest index 9b7b2f8..d6e4bba 100644 --- a/PC/python.manifest +++ b/PC/python.manifest @@ -16,4 +16,10 @@ + + + + + \ No newline at end of file diff --git a/PC/python3.def b/PC/python3.def index 88c0742..d753049 100644 --- a/PC/python3.def +++ b/PC/python3.def @@ -68,6 +68,7 @@ EXPORTS PyCodec_IncrementalEncoder=python35.PyCodec_IncrementalEncoder PyCodec_KnownEncoding=python35.PyCodec_KnownEncoding PyCodec_LookupError=python35.PyCodec_LookupError + PyCodec_NameReplaceErrors=python35.PyCodec_NameReplaceErrors PyCodec_Register=python35.PyCodec_Register PyCodec_RegisterError=python35.PyCodec_RegisterError PyCodec_ReplaceErrors=python35.PyCodec_ReplaceErrors @@ -122,6 +123,7 @@ EXPORTS PyErr_Fetch=python35.PyErr_Fetch PyErr_Format=python35.PyErr_Format PyErr_FormatV=python35.PyErr_FormatV + PyErr_GetExcInfo=python35.PyErr_GetExcInfo PyErr_GivenExceptionMatches=python35.PyErr_GivenExceptionMatches PyErr_NewException=python35.PyErr_NewException PyErr_NewExceptionWithDoc=python35.PyErr_NewExceptionWithDoc @@ -132,14 +134,24 @@ EXPORTS PyErr_PrintEx=python35.PyErr_PrintEx PyErr_ProgramText=python35.PyErr_ProgramText PyErr_Restore=python35.PyErr_Restore + PyErr_SetExcFromWindowsErr=python35.PyErr_SetExcFromWindowsErr + PyErr_SetExcFromWindowsErrWithFilename=python35.PyErr_SetExcFromWindowsErrWithFilename + PyErr_SetExcFromWindowsErrWithFilenameObject=python35.PyErr_SetExcFromWindowsErrWithFilenameObject + PyErr_SetExcFromWindowsErrWithFilenameObjects=python35.PyErr_SetExcFromWindowsErrWithFilenameObjects + PyErr_SetExcInfo=python35.PyErr_SetExcInfo PyErr_SetFromErrno=python35.PyErr_SetFromErrno PyErr_SetFromErrnoWithFilename=python35.PyErr_SetFromErrnoWithFilename PyErr_SetFromErrnoWithFilenameObject=python35.PyErr_SetFromErrnoWithFilenameObject + PyErr_SetFromErrnoWithFilenameObjects=python35.PyErr_SetFromErrnoWithFilenameObjects + PyErr_SetFromWindowsErr=python35.PyErr_SetFromWindowsErr + PyErr_SetFromWindowsErrWithFilename=python35.PyErr_SetFromWindowsErrWithFilename + PyErr_SetImportError=python35.PyErr_SetImportError PyErr_SetInterrupt=python35.PyErr_SetInterrupt PyErr_SetNone=python35.PyErr_SetNone PyErr_SetObject=python35.PyErr_SetObject PyErr_SetString=python35.PyErr_SetString PyErr_SyntaxLocation=python35.PyErr_SyntaxLocation + PyErr_SyntaxLocationEx=python35.PyErr_SyntaxLocationEx PyErr_WarnEx=python35.PyErr_WarnEx PyErr_WarnExplicit=python35.PyErr_WarnExplicit PyErr_WarnFormat=python35.PyErr_WarnFormat @@ -171,12 +183,21 @@ EXPORTS PyExc_AssertionError=python35.PyExc_AssertionError DATA PyExc_AttributeError=python35.PyExc_AttributeError DATA PyExc_BaseException=python35.PyExc_BaseException DATA + PyExc_BlockingIOError=python35.PyExc_BlockingIOError DATA + PyExc_BrokenPipeError=python35.PyExc_BrokenPipeError DATA PyExc_BufferError=python35.PyExc_BufferError DATA PyExc_BytesWarning=python35.PyExc_BytesWarning DATA + PyExc_ChildProcessError=python35.PyExc_ChildProcessError DATA + PyExc_ConnectionAbortedError=python35.PyExc_ConnectionAbortedError DATA + PyExc_ConnectionError=python35.PyExc_ConnectionError DATA + PyExc_ConnectionRefusedError=python35.PyExc_ConnectionRefusedError DATA + PyExc_ConnectionResetError=python35.PyExc_ConnectionResetError DATA PyExc_DeprecationWarning=python35.PyExc_DeprecationWarning DATA PyExc_EOFError=python35.PyExc_EOFError DATA PyExc_EnvironmentError=python35.PyExc_EnvironmentError DATA PyExc_Exception=python35.PyExc_Exception DATA + PyExc_FileExistsError=python35.PyExc_FileExistsError DATA + PyExc_FileNotFoundError=python35.PyExc_FileNotFoundError DATA PyExc_FloatingPointError=python35.PyExc_FloatingPointError DATA PyExc_FutureWarning=python35.PyExc_FutureWarning DATA PyExc_GeneratorExit=python35.PyExc_GeneratorExit DATA @@ -185,26 +206,34 @@ EXPORTS PyExc_ImportWarning=python35.PyExc_ImportWarning DATA PyExc_IndentationError=python35.PyExc_IndentationError DATA PyExc_IndexError=python35.PyExc_IndexError DATA + PyExc_InterruptedError=python35.PyExc_InterruptedError DATA + PyExc_IsADirectoryError=python35.PyExc_IsADirectoryError DATA PyExc_KeyError=python35.PyExc_KeyError DATA PyExc_KeyboardInterrupt=python35.PyExc_KeyboardInterrupt DATA PyExc_LookupError=python35.PyExc_LookupError DATA PyExc_MemoryError=python35.PyExc_MemoryError DATA - PyExc_MemoryErrorInst=python35.PyExc_MemoryErrorInst DATA PyExc_NameError=python35.PyExc_NameError DATA + PyExc_NotADirectoryError=python35.PyExc_NotADirectoryError DATA PyExc_NotImplementedError=python35.PyExc_NotImplementedError DATA PyExc_OSError=python35.PyExc_OSError DATA PyExc_OverflowError=python35.PyExc_OverflowError DATA PyExc_PendingDeprecationWarning=python35.PyExc_PendingDeprecationWarning DATA + PyExc_PermissionError=python35.PyExc_PermissionError DATA + PyExc_ProcessLookupError=python35.PyExc_ProcessLookupError DATA + PyExc_RecursionError=python35.PyExc_RecursionError DATA PyExc_RecursionErrorInst=python35.PyExc_RecursionErrorInst DATA PyExc_ReferenceError=python35.PyExc_ReferenceError DATA + PyExc_ResourceWarning=python35.PyExc_ResourceWarning DATA PyExc_RuntimeError=python35.PyExc_RuntimeError DATA PyExc_RuntimeWarning=python35.PyExc_RuntimeWarning DATA + PyExc_StopAsyncIteration=python35.PyExc_StopAsyncIteration DATA PyExc_StopIteration=python35.PyExc_StopIteration DATA PyExc_SyntaxError=python35.PyExc_SyntaxError DATA PyExc_SyntaxWarning=python35.PyExc_SyntaxWarning DATA PyExc_SystemError=python35.PyExc_SystemError DATA PyExc_SystemExit=python35.PyExc_SystemExit DATA PyExc_TabError=python35.PyExc_TabError DATA + PyExc_TimeoutError=python35.PyExc_TimeoutError DATA PyExc_TypeError=python35.PyExc_TypeError DATA PyExc_UnboundLocalError=python35.PyExc_UnboundLocalError DATA PyExc_UnicodeDecodeError=python35.PyExc_UnicodeDecodeError DATA @@ -215,6 +244,7 @@ EXPORTS PyExc_UserWarning=python35.PyExc_UserWarning DATA PyExc_ValueError=python35.PyExc_ValueError DATA PyExc_Warning=python35.PyExc_Warning DATA + PyExc_WindowsError=python35.PyExc_WindowsError DATA PyExc_ZeroDivisionError=python35.PyExc_ZeroDivisionError DATA PyException_GetCause=python35.PyException_GetCause PyException_GetContext=python35.PyException_GetContext @@ -242,10 +272,12 @@ EXPORTS PyGILState_Release=python35.PyGILState_Release PyGetSetDescr_Type=python35.PyGetSetDescr_Type DATA PyImport_AddModule=python35.PyImport_AddModule + PyImport_AddModuleObject=python35.PyImport_AddModuleObject PyImport_AppendInittab=python35.PyImport_AppendInittab PyImport_Cleanup=python35.PyImport_Cleanup PyImport_ExecCodeModule=python35.PyImport_ExecCodeModule PyImport_ExecCodeModuleEx=python35.PyImport_ExecCodeModuleEx + PyImport_ExecCodeModuleObject=python35.PyImport_ExecCodeModuleObject PyImport_ExecCodeModuleWithPathnames=python35.PyImport_ExecCodeModuleWithPathnames PyImport_GetImporter=python35.PyImport_GetImporter PyImport_GetMagicNumber=python35.PyImport_GetMagicNumber @@ -253,8 +285,10 @@ EXPORTS PyImport_GetModuleDict=python35.PyImport_GetModuleDict PyImport_Import=python35.PyImport_Import PyImport_ImportFrozenModule=python35.PyImport_ImportFrozenModule + PyImport_ImportFrozenModuleObject=python35.PyImport_ImportFrozenModuleObject PyImport_ImportModule=python35.PyImport_ImportModule PyImport_ImportModuleLevel=python35.PyImport_ImportModuleLevel + PyImport_ImportModuleLevelObject=python35.PyImport_ImportModuleLevelObject PyImport_ImportModuleNoBlock=python35.PyImport_ImportModuleNoBlock PyImport_ReloadModule=python35.PyImport_ReloadModule PyInterpreterState_Clear=python35.PyInterpreterState_Clear @@ -310,28 +344,36 @@ EXPORTS PyMapping_SetItemString=python35.PyMapping_SetItemString PyMapping_Size=python35.PyMapping_Size PyMapping_Values=python35.PyMapping_Values + PyMem_Calloc=python35.PyMem_Calloc PyMem_Free=python35.PyMem_Free PyMem_Malloc=python35.PyMem_Malloc PyMem_Realloc=python35.PyMem_Realloc PyMemberDescr_Type=python35.PyMemberDescr_Type DATA + PyMemoryView_FromMemory=python35.PyMemoryView_FromMemory PyMemoryView_FromObject=python35.PyMemoryView_FromObject PyMemoryView_GetContiguous=python35.PyMemoryView_GetContiguous PyMemoryView_Type=python35.PyMemoryView_Type DATA PyMethodDescr_Type=python35.PyMethodDescr_Type DATA + PyModuleDef_Init=python35.PyModuleDef_Init + PyModuleDef_Type=python35.PyModuleDef_Type DATA + PyModule_AddFunctions=python35.PyModule_AddFunctions PyModule_AddIntConstant=python35.PyModule_AddIntConstant PyModule_AddObject=python35.PyModule_AddObject PyModule_AddStringConstant=python35.PyModule_AddStringConstant PyModule_Create2=python35.PyModule_Create2 + PyModule_ExecDef=python35.PyModule_ExecDef + PyModule_FromDefAndSpec2=python35.PyModule_FromDefAndSpec2 PyModule_GetDef=python35.PyModule_GetDef PyModule_GetDict=python35.PyModule_GetDict PyModule_GetFilename=python35.PyModule_GetFilename PyModule_GetFilenameObject=python35.PyModule_GetFilenameObject PyModule_GetName=python35.PyModule_GetName + PyModule_GetNameObject=python35.PyModule_GetNameObject PyModule_GetState=python35.PyModule_GetState PyModule_New=python35.PyModule_New + PyModule_NewObject=python35.PyModule_NewObject + PyModule_SetDocString=python35.PyModule_SetDocString PyModule_Type=python35.PyModule_Type DATA - PyModuleDef_Init=python35.PyModuleDef_Init - PyModuleDef_Type=python35.PyModuleDef_Type DATA PyNullImporter_Type=python35.PyNullImporter_Type DATA PyNumber_Absolute=python35.PyNumber_Absolute PyNumber_Add=python35.PyNumber_Add @@ -345,6 +387,7 @@ EXPORTS PyNumber_InPlaceAnd=python35.PyNumber_InPlaceAnd PyNumber_InPlaceFloorDivide=python35.PyNumber_InPlaceFloorDivide PyNumber_InPlaceLshift=python35.PyNumber_InPlaceLshift + PyNumber_InPlaceMatrixMultiply=python35.PyNumber_InPlaceMatrixMultiply PyNumber_InPlaceMultiply=python35.PyNumber_InPlaceMultiply PyNumber_InPlaceOr=python35.PyNumber_InPlaceOr PyNumber_InPlacePower=python35.PyNumber_InPlacePower @@ -357,6 +400,7 @@ EXPORTS PyNumber_Invert=python35.PyNumber_Invert PyNumber_Long=python35.PyNumber_Long PyNumber_Lshift=python35.PyNumber_Lshift + PyNumber_MatrixMultiply=python35.PyNumber_MatrixMultiply PyNumber_Multiply=python35.PyNumber_Multiply PyNumber_Negative=python35.PyNumber_Negative PyNumber_Or=python35.PyNumber_Or @@ -368,7 +412,16 @@ EXPORTS PyNumber_ToBase=python35.PyNumber_ToBase PyNumber_TrueDivide=python35.PyNumber_TrueDivide PyNumber_Xor=python35.PyNumber_Xor + PyODictItems_Type=python35.PyODictItems_Type DATA + PyODictIter_Type=python35.PyODictIter_Type DATA + PyODictKeys_Type=python35.PyODictKeys_Type DATA + PyODictValues_Type=python35.PyODictValues_Type DATA + PyODict_DelItem=python35.PyODict_DelItem + PyODict_New=python35.PyODict_New + PyODict_SetItem=python35.PyODict_SetItem + PyODict_Type=python35.PyODict_Type DATA PyOS_AfterFork=python35.PyOS_AfterFork + PyOS_CheckStack=python35.PyOS_CheckStack PyOS_InitInterrupts=python35.PyOS_InitInterrupts PyOS_InputHook=python35.PyOS_InputHook DATA PyOS_InterruptOccurred=python35.PyOS_InterruptOccurred @@ -395,6 +448,7 @@ EXPORTS PyObject_CallMethod=python35.PyObject_CallMethod PyObject_CallMethodObjArgs=python35.PyObject_CallMethodObjArgs PyObject_CallObject=python35.PyObject_CallObject + PyObject_Calloc=python35.PyObject_Calloc PyObject_CheckReadBuffer=python35.PyObject_CheckReadBuffer PyObject_ClearWeakRefs=python35.PyObject_ClearWeakRefs PyObject_DelItem=python35.PyObject_DelItem @@ -407,6 +461,7 @@ EXPORTS PyObject_GC_UnTrack=python35.PyObject_GC_UnTrack PyObject_GenericGetAttr=python35.PyObject_GenericGetAttr PyObject_GenericSetAttr=python35.PyObject_GenericSetAttr + PyObject_GenericSetDict=python35.PyObject_GenericSetDict PyObject_GetAttr=python35.PyObject_GetAttr PyObject_GetAttrString=python35.PyObject_GetAttrString PyObject_GetItem=python35.PyObject_GetItem @@ -433,17 +488,10 @@ EXPORTS PyObject_SetItem=python35.PyObject_SetItem PyObject_Size=python35.PyObject_Size PyObject_Str=python35.PyObject_Str - PyObject_Type=python35.PyObject_Type DATA - PyODict_DelItem=python35.PyODict_DelItem - PyODict_New=python35.PyODict_New - PyODict_SetItem=python35.PyODict_SetItem - PyODict_Type=python35.PyODict_Type DATA - PyODictItems_Type=python35.PyODictItems_Type DATA - PyODictIter_Type=python35.PyODictIter_Type DATA - PyODictKeys_Type=python35.PyODictKeys_Type DATA - PyODictValues_Type=python35.PyODictValues_Type DATA + PyObject_Type=python35.PyObject_Type PyParser_SimpleParseFileFlags=python35.PyParser_SimpleParseFileFlags PyParser_SimpleParseStringFlags=python35.PyParser_SimpleParseStringFlags + PyParser_SimpleParseStringFlagsFilename=python35.PyParser_SimpleParseStringFlagsFilename PyProperty_Type=python35.PyProperty_Type DATA PyRangeIter_Type=python35.PyRangeIter_Type DATA PyRange_Type=python35.PyRange_Type DATA @@ -484,8 +532,8 @@ EXPORTS PySlice_New=python35.PySlice_New PySlice_Type=python35.PySlice_Type DATA PySortWrapper_Type=python35.PySortWrapper_Type DATA - PyState_FindModule=python35.PyState_FindModule PyState_AddModule=python35.PyState_AddModule + PyState_FindModule=python35.PyState_FindModule PyState_RemoveModule=python35.PyState_RemoveModule PyStructSequence_GetItem=python35.PyStructSequence_GetItem PyStructSequence_New=python35.PyStructSequence_New @@ -494,9 +542,11 @@ EXPORTS PySuper_Type=python35.PySuper_Type DATA PySys_AddWarnOption=python35.PySys_AddWarnOption PySys_AddWarnOptionUnicode=python35.PySys_AddWarnOptionUnicode + PySys_AddXOption=python35.PySys_AddXOption PySys_FormatStderr=python35.PySys_FormatStderr PySys_FormatStdout=python35.PySys_FormatStdout PySys_GetObject=python35.PySys_GetObject + PySys_GetXOptions=python35.PySys_GetXOptions PySys_HasWarnOptions=python35.PySys_HasWarnOptions PySys_ResetWarnOptions=python35.PySys_ResetWarnOptions PySys_SetArgv=python35.PySys_SetArgv @@ -571,34 +621,51 @@ EXPORTS PyUnicode_AsEncodedString=python35.PyUnicode_AsEncodedString PyUnicode_AsEncodedUnicode=python35.PyUnicode_AsEncodedUnicode PyUnicode_AsLatin1String=python35.PyUnicode_AsLatin1String + PyUnicode_AsMBCSString=python35.PyUnicode_AsMBCSString PyUnicode_AsRawUnicodeEscapeString=python35.PyUnicode_AsRawUnicodeEscapeString + PyUnicode_AsUCS4=python35.PyUnicode_AsUCS4 + PyUnicode_AsUCS4Copy=python35.PyUnicode_AsUCS4Copy PyUnicode_AsUTF16String=python35.PyUnicode_AsUTF16String PyUnicode_AsUTF32String=python35.PyUnicode_AsUTF32String PyUnicode_AsUTF8String=python35.PyUnicode_AsUTF8String PyUnicode_AsUnicodeEscapeString=python35.PyUnicode_AsUnicodeEscapeString PyUnicode_AsWideChar=python35.PyUnicode_AsWideChar - PyUnicode_ClearFreelist=python35.PyUnicode_ClearFreelist + PyUnicode_AsWideCharString=python35.PyUnicode_AsWideCharString + PyUnicode_BuildEncodingMap=python35.PyUnicode_BuildEncodingMap + PyUnicode_ClearFreeList=python35.PyUnicode_ClearFreeList PyUnicode_Compare=python35.PyUnicode_Compare + PyUnicode_CompareWithASCIIString=python35.PyUnicode_CompareWithASCIIString PyUnicode_Concat=python35.PyUnicode_Concat PyUnicode_Contains=python35.PyUnicode_Contains PyUnicode_Count=python35.PyUnicode_Count PyUnicode_Decode=python35.PyUnicode_Decode PyUnicode_DecodeASCII=python35.PyUnicode_DecodeASCII PyUnicode_DecodeCharmap=python35.PyUnicode_DecodeCharmap + PyUnicode_DecodeCodePageStateful=python35.PyUnicode_DecodeCodePageStateful PyUnicode_DecodeFSDefault=python35.PyUnicode_DecodeFSDefault PyUnicode_DecodeFSDefaultAndSize=python35.PyUnicode_DecodeFSDefaultAndSize PyUnicode_DecodeLatin1=python35.PyUnicode_DecodeLatin1 + PyUnicode_DecodeLocale=python35.PyUnicode_DecodeLocale + PyUnicode_DecodeLocaleAndSize=python35.PyUnicode_DecodeLocaleAndSize + PyUnicode_DecodeMBCS=python35.PyUnicode_DecodeMBCS + PyUnicode_DecodeMBCSStateful=python35.PyUnicode_DecodeMBCSStateful PyUnicode_DecodeRawUnicodeEscape=python35.PyUnicode_DecodeRawUnicodeEscape PyUnicode_DecodeUTF16=python35.PyUnicode_DecodeUTF16 PyUnicode_DecodeUTF16Stateful=python35.PyUnicode_DecodeUTF16Stateful PyUnicode_DecodeUTF32=python35.PyUnicode_DecodeUTF32 PyUnicode_DecodeUTF32Stateful=python35.PyUnicode_DecodeUTF32Stateful + PyUnicode_DecodeUTF7=python35.PyUnicode_DecodeUTF7 + PyUnicode_DecodeUTF7Stateful=python35.PyUnicode_DecodeUTF7Stateful PyUnicode_DecodeUTF8=python35.PyUnicode_DecodeUTF8 PyUnicode_DecodeUTF8Stateful=python35.PyUnicode_DecodeUTF8Stateful PyUnicode_DecodeUnicodeEscape=python35.PyUnicode_DecodeUnicodeEscape + PyUnicode_EncodeCodePage=python35.PyUnicode_EncodeCodePage + PyUnicode_EncodeFSDefault=python35.PyUnicode_EncodeFSDefault + PyUnicode_EncodeLocale=python35.PyUnicode_EncodeLocale PyUnicode_FSConverter=python35.PyUnicode_FSConverter PyUnicode_FSDecoder=python35.PyUnicode_FSDecoder PyUnicode_Find=python35.PyUnicode_Find + PyUnicode_FindChar=python35.PyUnicode_FindChar PyUnicode_Format=python35.PyUnicode_Format PyUnicode_FromEncodedObject=python35.PyUnicode_FromEncodedObject PyUnicode_FromFormat=python35.PyUnicode_FromFormat @@ -609,30 +676,28 @@ EXPORTS PyUnicode_FromStringAndSize=python35.PyUnicode_FromStringAndSize PyUnicode_FromWideChar=python35.PyUnicode_FromWideChar PyUnicode_GetDefaultEncoding=python35.PyUnicode_GetDefaultEncoding + PyUnicode_GetLength=python35.PyUnicode_GetLength PyUnicode_GetSize=python35.PyUnicode_GetSize + PyUnicode_InternFromString=python35.PyUnicode_InternFromString + PyUnicode_InternImmortal=python35.PyUnicode_InternImmortal + PyUnicode_InternInPlace=python35.PyUnicode_InternInPlace PyUnicode_IsIdentifier=python35.PyUnicode_IsIdentifier PyUnicode_Join=python35.PyUnicode_Join PyUnicode_Partition=python35.PyUnicode_Partition PyUnicode_RPartition=python35.PyUnicode_RPartition PyUnicode_RSplit=python35.PyUnicode_RSplit + PyUnicode_ReadChar=python35.PyUnicode_ReadChar PyUnicode_Replace=python35.PyUnicode_Replace PyUnicode_Resize=python35.PyUnicode_Resize PyUnicode_RichCompare=python35.PyUnicode_RichCompare - PyUnicode_SetDefaultEncoding=python35.PyUnicode_SetDefaultEncoding PyUnicode_Split=python35.PyUnicode_Split PyUnicode_Splitlines=python35.PyUnicode_Splitlines + PyUnicode_Substring=python35.PyUnicode_Substring PyUnicode_Tailmatch=python35.PyUnicode_Tailmatch PyUnicode_Translate=python35.PyUnicode_Translate - PyUnicode_BuildEncodingMap=python35.PyUnicode_BuildEncodingMap - PyUnicode_CompareWithASCIIString=python35.PyUnicode_CompareWithASCIIString - PyUnicode_DecodeUTF7=python35.PyUnicode_DecodeUTF7 - PyUnicode_DecodeUTF7Stateful=python35.PyUnicode_DecodeUTF7Stateful - PyUnicode_EncodeFSDefault=python35.PyUnicode_EncodeFSDefault - PyUnicode_InternFromString=python35.PyUnicode_InternFromString - PyUnicode_InternImmortal=python35.PyUnicode_InternImmortal - PyUnicode_InternInPlace=python35.PyUnicode_InternInPlace PyUnicode_Type=python35.PyUnicode_Type DATA - PyWeakref_GetObject=python35.PyWeakref_GetObject DATA + PyUnicode_WriteChar=python35.PyUnicode_WriteChar + PyWeakref_GetObject=python35.PyWeakref_GetObject PyWeakref_NewProxy=python35.PyWeakref_NewProxy PyWeakref_NewRef=python35.PyWeakref_NewRef PyWrapperDescr_Type=python35.PyWrapperDescr_Type DATA @@ -643,6 +708,8 @@ EXPORTS Py_BuildValue=python35.Py_BuildValue Py_CompileString=python35.Py_CompileString Py_DecRef=python35.Py_DecRef + Py_DecodeLocale=python35.Py_DecodeLocale + Py_EncodeLocale=python35.Py_EncodeLocale Py_EndInterpreter=python35.Py_EndInterpreter Py_Exit=python35.Py_Exit Py_FatalError=python35.Py_FatalError @@ -670,11 +737,17 @@ EXPORTS Py_NewInterpreter=python35.Py_NewInterpreter Py_ReprEnter=python35.Py_ReprEnter Py_ReprLeave=python35.Py_ReprLeave + Py_SetPath=python35.Py_SetPath Py_SetProgramName=python35.Py_SetProgramName Py_SetPythonHome=python35.Py_SetPythonHome Py_SetRecursionLimit=python35.Py_SetRecursionLimit Py_SymtableString=python35.Py_SymtableString Py_VaBuildValue=python35.Py_VaBuildValue + _PyArg_ParseTupleAndKeywords_SizeT=python35._PyArg_ParseTupleAndKeywords_SizeT + _PyArg_ParseTuple_SizeT=python35._PyArg_ParseTuple_SizeT + _PyArg_Parse_SizeT=python35._PyArg_Parse_SizeT + _PyArg_VaParseTupleAndKeywords_SizeT=python35._PyArg_VaParseTupleAndKeywords_SizeT + _PyArg_VaParse_SizeT=python35._PyArg_VaParse_SizeT _PyErr_BadInternalCall=python35._PyErr_BadInternalCall _PyObject_CallFunction_SizeT=python35._PyObject_CallFunction_SizeT _PyObject_CallMethod_SizeT=python35._PyObject_CallMethod_SizeT @@ -691,6 +764,8 @@ EXPORTS _PyTrash_delete_nesting=python35._PyTrash_delete_nesting DATA _PyTrash_deposit_object=python35._PyTrash_deposit_object _PyTrash_destroy_chain=python35._PyTrash_destroy_chain + _PyTrash_thread_deposit_object=python35._PyTrash_thread_deposit_object + _PyTrash_thread_destroy_chain=python35._PyTrash_thread_destroy_chain _PyWeakref_CallableProxyType=python35._PyWeakref_CallableProxyType DATA _PyWeakref_ProxyType=python35._PyWeakref_ProxyType DATA _PyWeakref_RefType=python35._PyWeakref_RefType DATA @@ -705,9 +780,3 @@ EXPORTS _Py_SwappedOp=python35._Py_SwappedOp DATA _Py_TrueStruct=python35._Py_TrueStruct DATA _Py_VaBuildValue_SizeT=python35._Py_VaBuildValue_SizeT - _PyArg_Parse_SizeT=python35._PyArg_Parse_SizeT - _PyArg_ParseTuple_SizeT=python35._PyArg_ParseTuple_SizeT - _PyArg_ParseTupleAndKeywords_SizeT=python35._PyArg_ParseTupleAndKeywords_SizeT - _PyArg_VaParse_SizeT=python35._PyArg_VaParse_SizeT - _PyArg_VaParseTupleAndKeywords_SizeT=python35._PyArg_VaParseTupleAndKeywords_SizeT - _Py_BuildValue_SizeT=python35._Py_BuildValue_SizeT diff --git a/PC/validate_ucrtbase.py b/PC/validate_ucrtbase.py index 6145d59..0ba54ab 100644 --- a/PC/validate_ucrtbase.py +++ b/PC/validate_ucrtbase.py @@ -82,7 +82,8 @@ print('{} is version {}.{}.{}.{}'.format(name.value, *ver)) if ver < (10, 0, 10586): print('WARN: ucrtbased contains known issues. ' - 'Please update Visual Studio or the Windows SDK.') + 'Please update the Windows 10 SDK.') print('See:') - print(' http://bugs.python.org/issue26624') + print(' http://bugs.python.org/issue27705') + print(' https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk') sys.exit(1) diff --git a/PC/winreg.c b/PC/winreg.c index d1c3f39..f08d9a4 100644 --- a/PC/winreg.c +++ b/PC/winreg.c @@ -774,8 +774,8 @@ closed when the hkey object is destroyed by Python. [clinic start generated code]*/ static PyObject * -winreg_CloseKey(PyModuleDef *module, PyObject *hkey) -/*[clinic end generated code: output=d96f73439403a064 input=5b1aac65ba5127ad]*/ +winreg_CloseKey(PyObject *module, PyObject *hkey) +/*[clinic end generated code: output=a4fa537019a80d15 input=5b1aac65ba5127ad]*/ { if (!PyHKEY_Close(hkey)) return NULL; @@ -799,9 +799,9 @@ If the function fails, an OSError exception is raised. [clinic start generated code]*/ static HKEY -winreg_ConnectRegistry_impl(PyModuleDef *module, Py_UNICODE *computer_name, +winreg_ConnectRegistry_impl(PyObject *module, Py_UNICODE *computer_name, HKEY key) -/*[clinic end generated code: output=5c52f6f7ba6e7b46 input=5f98a891a347e68e]*/ +/*[clinic end generated code: output=5ab79d02aa3167b4 input=5f98a891a347e68e]*/ { HKEY retKey; long rc; @@ -836,8 +836,8 @@ If the function fails, an OSError exception is raised. [clinic start generated code]*/ static HKEY -winreg_CreateKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key) -/*[clinic end generated code: output=cd6843f30a73fc0e input=3cdd1622488acea2]*/ +winreg_CreateKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key) +/*[clinic end generated code: output=9c81d4095527c927 input=3cdd1622488acea2]*/ { HKEY retKey; long rc; @@ -875,9 +875,9 @@ If the function fails, an OSError exception is raised. [clinic start generated code]*/ static HKEY -winreg_CreateKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_CreateKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access) -/*[clinic end generated code: output=db835d5be84e72b2 input=42c2b03f98406b66]*/ +/*[clinic end generated code: output=b9fce6dc5c4e39b1 input=42c2b03f98406b66]*/ { HKEY retKey; long rc; @@ -910,8 +910,8 @@ is removed. If the function fails, an OSError exception is raised. [clinic start generated code]*/ static PyObject * -winreg_DeleteKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key) -/*[clinic end generated code: output=875c8917dacbc99d input=b31d225b935e4211]*/ +winreg_DeleteKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key) +/*[clinic end generated code: output=7734b1e431991ae4 input=b31d225b935e4211]*/ { long rc; rc = RegDeleteKeyW(key, sub_key ); @@ -945,9 +945,9 @@ On unsupported Windows versions, NotImplementedError is raised. [clinic start generated code]*/ static PyObject * -winreg_DeleteKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_DeleteKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, REGSAM access, int reserved) -/*[clinic end generated code: output=0362a0ac6502379f input=711d9d89e7ecbed7]*/ +/*[clinic end generated code: output=01378d86ad3eb936 input=711d9d89e7ecbed7]*/ { HMODULE hMod; typedef LONG (WINAPI *RDKEFunc)(HKEY, const wchar_t*, REGSAM, int); @@ -987,8 +987,8 @@ Removes a named value from a registry key. [clinic start generated code]*/ static PyObject * -winreg_DeleteValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value) -/*[clinic end generated code: output=308550b8cdcfd8e1 input=a78d3407a4197b21]*/ +winreg_DeleteValue_impl(PyObject *module, HKEY key, Py_UNICODE *value) +/*[clinic end generated code: output=67e7e9a514f84951 input=a78d3407a4197b21]*/ { long rc; Py_BEGIN_ALLOW_THREADS @@ -1017,8 +1017,8 @@ raised, indicating no more values are available. [clinic start generated code]*/ static PyObject * -winreg_EnumKey_impl(PyModuleDef *module, HKEY key, int index) -/*[clinic end generated code: output=58074ffabbc67896 input=fad9a7c00ab0e04b]*/ +winreg_EnumKey_impl(PyObject *module, HKEY key, int index) +/*[clinic end generated code: output=25a6ec52cd147bc4 input=fad9a7c00ab0e04b]*/ { long rc; PyObject *retStr; @@ -1068,8 +1068,8 @@ The result is a tuple of 3 items: [clinic start generated code]*/ static PyObject * -winreg_EnumValue_impl(PyModuleDef *module, HKEY key, int index) -/*[clinic end generated code: output=4570367ebaf0e979 input=4414f47a6fb238b5]*/ +winreg_EnumValue_impl(PyObject *module, HKEY key, int index) +/*[clinic end generated code: output=d363b5a06f8789ac input=4414f47a6fb238b5]*/ { long rc; wchar_t *retValueBuf; @@ -1155,8 +1155,8 @@ Expand environment vars. [clinic start generated code]*/ static PyObject * -winreg_ExpandEnvironmentStrings_impl(PyModuleDef *module, Py_UNICODE *string) -/*[clinic end generated code: output=4cb6914065a8663c input=b2a9714d2b751aa6]*/ +winreg_ExpandEnvironmentStrings_impl(PyObject *module, Py_UNICODE *string) +/*[clinic end generated code: output=cba46ac293a8af1a input=b2a9714d2b751aa6]*/ { wchar_t *retValue = NULL; DWORD retValueSize; @@ -1205,8 +1205,8 @@ a FlushKey() call is required, it probably isn't. [clinic start generated code]*/ static PyObject * -winreg_FlushKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=b9a7a6e405466420 input=f57457c12297d82f]*/ +winreg_FlushKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=e6fc230d4c5dc049 input=f57457c12297d82f]*/ { long rc; Py_BEGIN_ALLOW_THREADS @@ -1248,9 +1248,9 @@ tree. [clinic start generated code]*/ static PyObject * -winreg_LoadKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_LoadKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, Py_UNICODE *file_name) -/*[clinic end generated code: output=b8b700e39c695b90 input=e3b5b45ade311582]*/ +/*[clinic end generated code: output=87344005c5905cde input=e3b5b45ade311582]*/ { long rc; @@ -1282,9 +1282,9 @@ If the function fails, an OSError exception is raised. [clinic start generated code]*/ static HKEY -winreg_OpenKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access) -/*[clinic end generated code: output=79818ea356490a55 input=098505ac36a9ae28]*/ +/*[clinic end generated code: output=a905f1b947f3ce85 input=098505ac36a9ae28]*/ { HKEY retKey; long rc; @@ -1309,9 +1309,9 @@ If the function fails, an OSError exception is raised. [clinic start generated code]*/ static HKEY -winreg_OpenKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access) -/*[clinic end generated code: output=2dd9f29e84ea2dbc input=c6c4972af8622959]*/ +/*[clinic end generated code: output=226042593b37e940 input=c6c4972af8622959]*/ { return winreg_OpenKey_impl(module, key, sub_key, reserved, access); } @@ -1333,8 +1333,8 @@ as 100's of nanoseconds since Jan 1, 1600. [clinic start generated code]*/ static PyObject * -winreg_QueryInfoKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=ae885222fe966a34 input=c3593802390cde1f]*/ +winreg_QueryInfoKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=dc657b8356a4f438 input=c3593802390cde1f]*/ { long rc; DWORD nSubKeys, nValues; @@ -1379,8 +1379,8 @@ completeness. [clinic start generated code]*/ static PyObject * -winreg_QueryValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key) -/*[clinic end generated code: output=f91cb6f623c3b65a input=41cafbbf423b21d6]*/ +winreg_QueryValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key) +/*[clinic end generated code: output=2bb8d1e02c10d0b6 input=41cafbbf423b21d6]*/ { long rc; PyObject *retStr; @@ -1446,8 +1446,8 @@ The return value is a tuple of the value and the type_id. [clinic start generated code]*/ static PyObject * -winreg_QueryValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *name) -/*[clinic end generated code: output=a4b07f7807194f23 input=cf366cada4836891]*/ +winreg_QueryValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *name) +/*[clinic end generated code: output=5b4fa3e33d6d3e8f input=cf366cada4836891]*/ { long rc; BYTE *retBuf, *tmp; @@ -1519,8 +1519,8 @@ to the API. [clinic start generated code]*/ static PyObject * -winreg_SaveKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *file_name) -/*[clinic end generated code: output=33109b96bfabef8f input=da735241f91ac7a2]*/ +winreg_SaveKey_impl(PyObject *module, HKEY key, Py_UNICODE *file_name) +/*[clinic end generated code: output=1dda1502bd4c30d8 input=da735241f91ac7a2]*/ { LPSECURITY_ATTRIBUTES pSA = NULL; @@ -1565,10 +1565,10 @@ KEY_SET_VALUE access. [clinic start generated code]*/ static PyObject * -winreg_SetValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_SetValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, DWORD type, Py_UNICODE *value, Py_ssize_clean_t value_length) -/*[clinic end generated code: output=3c9c7c2769e8f953 input=2cd2adab79339c53]*/ +/*[clinic end generated code: output=1e31931174820631 input=2cd2adab79339c53]*/ { long rc; @@ -1629,9 +1629,9 @@ the configuration registry to help the registry perform efficiently. [clinic start generated code]*/ static PyObject * -winreg_SetValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value_name, +winreg_SetValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *value_name, PyObject *reserved, DWORD type, PyObject *value) -/*[clinic end generated code: output=ea092a935c361582 input=f1b16cbcc3ed4101]*/ +/*[clinic end generated code: output=c88c8426b6c00ec7 input=f1b16cbcc3ed4101]*/ { BYTE *data; DWORD len; @@ -1672,8 +1672,8 @@ of any subkeys. [clinic start generated code]*/ static PyObject * -winreg_DisableReflectionKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=50fe6e2604324cdd input=a6c9e5ca5410193c]*/ +winreg_DisableReflectionKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=830cce504cc764b4 input=a6c9e5ca5410193c]*/ { HMODULE hMod; typedef LONG (WINAPI *RDRKFunc)(HKEY); @@ -1715,8 +1715,8 @@ subkeys. [clinic start generated code]*/ static PyObject * -winreg_EnableReflectionKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=e3f23edb414f24a4 input=7748abbacd1e166a]*/ +winreg_EnableReflectionKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=86fa1385fdd9ce57 input=7748abbacd1e166a]*/ { HMODULE hMod; typedef LONG (WINAPI *RERKFunc)(HKEY); @@ -1756,8 +1756,8 @@ Will generally raise NotImplemented if executed on a 32bit OS. [clinic start generated code]*/ static PyObject * -winreg_QueryReflectionKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=2a49c564ca162e50 input=9f325eacb5a65d88]*/ +winreg_QueryReflectionKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=4e774af288c3ebb9 input=9f325eacb5a65d88]*/ { HMODULE hMod; typedef LONG (WINAPI *RQRKFunc)(HKEY, BOOL *); diff --git a/PC/winsound.c b/PC/winsound.c index 8e77d13..6b79d23 100644 --- a/PC/winsound.c +++ b/PC/winsound.c @@ -74,8 +74,8 @@ A wrapper around the Windows PlaySound API. [clinic start generated code]*/ static PyObject * -winsound_PlaySound_impl(PyModuleDef *module, Py_UNICODE *sound, int flags) -/*[clinic end generated code: output=614273784bf59e5c input=3411b1b7c1f36d93]*/ +winsound_PlaySound_impl(PyObject *module, Py_UNICODE *sound, int flags) +/*[clinic end generated code: output=ec24b3a2b4368378 input=3411b1b7c1f36d93]*/ { int ok; @@ -111,8 +111,8 @@ A wrapper around the Windows Beep API. [clinic start generated code]*/ static PyObject * -winsound_Beep_impl(PyModuleDef *module, int frequency, int duration) -/*[clinic end generated code: output=c75f282035a872bd input=628a99d2ddf73798]*/ +winsound_Beep_impl(PyObject *module, int frequency, int duration) +/*[clinic end generated code: output=f32382e52ee9b2fb input=628a99d2ddf73798]*/ { BOOL ok; @@ -145,8 +145,8 @@ x defaults to MB_OK. [clinic start generated code]*/ static PyObject * -winsound_MessageBeep_impl(PyModuleDef *module, int x) -/*[clinic end generated code: output=92aa6a822bdc66ad input=a776c8a85c9853f6]*/ +winsound_MessageBeep_impl(PyObject *module, int x) +/*[clinic end generated code: output=1ad89e4d8d30a957 input=a776c8a85c9853f6]*/ { MessageBeep(x); Py_RETURN_NONE; diff --git a/PCbuild/build.bat b/PCbuild/build.bat index 88b1f06..9e63a84 100644 --- a/PCbuild/build.bat +++ b/PCbuild/build.bat @@ -105,6 +105,10 @@ if "%platf%"=="x64" ( ) ) +if not exist "%HG%" where hg > "%TEMP%\hg.loc" 2> nul && set /P HG= < "%TEMP%\hg.loc" & del "%TEMP%\hg.loc" +if exist "%HG%" set HGProperty=/p:HG="%HG%" +if not exist "%HG%" echo Cannot find Mercurial on PATH & set HGProperty= + rem Setup the environment call "%dir%env.bat" %vs_platf% >nul @@ -141,7 +145,7 @@ msbuild "%dir%pcbuild.proj" /t:%target% %parallel% %verbose%^ /p:Configuration=%conf% /p:Platform=%platf%^ /p:IncludeExternals=%IncludeExternals%^ /p:IncludeSSL=%IncludeSSL% /p:IncludeTkinter=%IncludeTkinter%^ - /p:UseTestMarker=%UseTestMarker%^ + /p:UseTestMarker=%UseTestMarker% %HGProperty%^ %1 %2 %3 %4 %5 %6 %7 %8 %9 @echo off diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat index 9b2a084..1c3cdee 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -54,7 +54,7 @@ echo.Fetching external libraries... set libraries= set libraries=%libraries% bzip2-1.0.6 if NOT "%IncludeSSL%"=="false" set libraries=%libraries% nasm-2.11.06 -if NOT "%IncludeSSL%"=="false" set libraries=%libraries% openssl-1.0.2h +if NOT "%IncludeSSL%"=="false" set libraries=%libraries% openssl-1.0.2j set libraries=%libraries% sqlite-3.8.11.0 if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tcl-core-8.6.4.2 if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tk-8.6.4.2 diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj index 36621c9..c320434 100644 --- a/PCbuild/pcbuild.proj +++ b/PCbuild/pcbuild.proj @@ -21,6 +21,15 @@ CleanAll true + + $(Platform) + $(Configuration) + + Build + Clean + CleanAll + true + @@ -33,12 +42,12 @@ false - - + + @@ -58,16 +67,33 @@ false + + + + false + + + + 10.0.30319.1 10.0 $(BuildPath) - $(Py_OutDir) $(OutDir)\ - $(SolutionDir)obj\ - $(IntDir)\ + $(MSBuildThisFileDirectory)obj\ $(Py_IntDir)\$(ArchName)_$(Configuration)\$(ProjectName)\ $(Py_IntDir)\$(ArchName)_PGO\$(ProjectName)\ $(ProjectName) @@ -29,7 +27,7 @@ - $(PySourcePath)Include;$(PySourcePath)PC;%(AdditionalIncludeDirectories) + $(PySourcePath)Include;$(PySourcePath)PC;$(IntDir);%(AdditionalIncludeDirectories) WIN32;$(_PlatformPreprocessorDefinition)$(_DebugPreprocessorDefinition)$(_PydPreprocessorDefinition)%(PreprocessorDefinitions) MaxSpeed @@ -85,9 +83,9 @@ true Win32 X64 - $(OutDir)wininst.tlb - - + $(IntDir) + $(MSBuildProjectName)_i.c + $(MSBuildProjectName)_p.c diff --git a/PCbuild/pyshellext.vcxproj b/PCbuild/pyshellext.vcxproj new file mode 100644 index 0000000..0293935 --- /dev/null +++ b/PCbuild/pyshellext.vcxproj @@ -0,0 +1,87 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + PGInstrument + Win32 + + + PGInstrument + x64 + + + PGUpdate + Win32 + + + PGUpdate + x64 + + + Release + Win32 + + + Release + x64 + + + + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782} + pyshellext + pyshellext + false + + + + + DynamicLibrary + Unicode + + + + + + ClCompile + + + + + + + + + _CONSOLE;%(PreprocessorDefinitions) + + + version.lib;shlwapi.lib;%(AdditionalDependencies) + Console + ..\PC\pyshellext$(PyDebugExt).def + + + true + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PCbuild/pyshellext.vcxproj.filters b/PCbuild/pyshellext.vcxproj.filters new file mode 100644 index 0000000..648e499 --- /dev/null +++ b/PCbuild/pyshellext.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Source Files + + + + + Resource Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/PCbuild/python.props b/PCbuild/python.props index 843771d..1553731 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -32,8 +32,13 @@ $(PySourcePath)\ - $(PySourcePath)PCBuild\$(ArchName)\ - $(PyBuildPath) + $(PySourcePath)PCBuild\win32\ + $(Py_OutDir)\win32\ + $(PySourcePath)PCBuild\amd64\ + $(Py_OutDir)\amd64\ + $(BuildPath32) + $(BuildPath64) + $(PySourcePath)PCBuild\$(ArchName)\ $(BuildPath)\ @@ -41,7 +46,7 @@ $(ExternalsDir)sqlite-3.8.11.0\ $(ExternalsDir)bzip2-1.0.6\ $(ExternalsDir)xz-5.0.5\ - $(ExternalsDir)openssl-1.0.2h\ + $(ExternalsDir)openssl-1.0.2j\ $(opensslDir)include32 $(opensslDir)include64 $(ExternalsDir)\nasm-2.11.06\ diff --git a/PCbuild/python.vcxproj b/PCbuild/python.vcxproj index 60116df..807213f 100644 --- a/PCbuild/python.vcxproj +++ b/PCbuild/python.vcxproj @@ -88,7 +88,9 @@ ucrtbase ucrtbased - + @@ -99,6 +101,8 @@ @rem This is only meant as a convenience for developing CPython @rem and using it outside of that context is ill-advised. @echo Running $(Configuration)^|$(Platform) interpreter... +@setlocal +@set PYTHONHOME=$(PySourcePath) @"$(OutDir)python$(PyDebugExt).exe" %* <_ExistingContent Condition="Exists('$(PySourcePath)python.bat')">$([System.IO.File]::ReadAllText('$(PySourcePath)python.bat')) diff --git a/PCbuild/python3dll.vcxproj b/PCbuild/python3dll.vcxproj index cbb618f..c66c8ef 100644 --- a/PCbuild/python3dll.vcxproj +++ b/PCbuild/python3dll.vcxproj @@ -58,6 +58,7 @@ <_ProjectFileVersion>10.0.30319.1 <_Machine>X86 <_Machine Condition="$(Platform) == 'x64'">X64 + $(ExtensionsToDeleteOnClean);$(IntDir)python3_d.def;$(IntDir)python3stub.def @@ -133,9 +134,4 @@ - - - - - \ No newline at end of file diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj index 3a1b5ba..970344f 100644 --- a/PCbuild/pythoncore.vcxproj +++ b/PCbuild/pythoncore.vcxproj @@ -69,7 +69,7 @@ _USRDLL;Py_BUILD_CORE;Py_ENABLE_SHARED;MS_DLL_ID="$(SysWinVer)";%(PreprocessorDefinitions) - ws2_32.lib;%(AdditionalDependencies) + version.lib;ws2_32.lib;%(AdditionalDependencies) 0x1e000000 @@ -399,9 +399,16 @@ - - - + + hg + <_HG>$(HG) + <_HG Condition="$(HG.Contains(` `))">"$(HG)" + + + + + + $([System.IO.File]::ReadAllText('$(IntDir)hgbranch.txt').Trim()) $([System.IO.File]::ReadAllText('$(IntDir)hgversion.txt').Trim()) diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt index d45eb27..2462012 100644 --- a/PCbuild/readme.txt +++ b/PCbuild/readme.txt @@ -169,7 +169,7 @@ _lzma Homepage: http://tukaani.org/xz/ _ssl - Python wrapper for version 1.0.2h of the OpenSSL secure sockets + Python wrapper for version 1.0.2j of the OpenSSL secure sockets library, which is built by ssl.vcxproj Homepage: http://www.openssl.org/ diff --git a/PCbuild/tcl.vcxproj b/PCbuild/tcl.vcxproj index 464c83c..3dfd155 100644 --- a/PCbuild/tcl.vcxproj +++ b/PCbuild/tcl.vcxproj @@ -88,4 +88,6 @@ nmake -f makefile.vc MACHINE=$(TclMachine) OPTS=$(TclOpts) $(TclDirs) $(DebugFla + + \ No newline at end of file diff --git a/PCbuild/tix.vcxproj b/PCbuild/tix.vcxproj index f857f9e..d1bc0ab 100644 --- a/PCbuild/tix.vcxproj +++ b/PCbuild/tix.vcxproj @@ -89,4 +89,6 @@ nmake /nologo -f makefile.vc MACHINE=$(TclMachine) $(DebugFlags) $(TclShortVersi + + \ No newline at end of file diff --git a/PCbuild/tk.vcxproj b/PCbuild/tk.vcxproj index 20749f7..a26318b 100644 --- a/PCbuild/tk.vcxproj +++ b/PCbuild/tk.vcxproj @@ -92,4 +92,6 @@ nmake /nologo -f makefile.vc RC=rc MACHINE=$(TclMachine) OPTS=$(TkOpts) $(TkDirs + + \ No newline at end of file diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py index f38c253..ac9d2b6 100755 --- a/Parser/asdl_c.py +++ b/Parser/asdl_c.py @@ -526,6 +526,13 @@ class Obj2ModVisitor(PickleVisitor): self.emit("res = obj2ast_%s(PyList_GET_ITEM(tmp, i), &value, arena);" % field.type, depth+2, reflow=False) self.emit("if (res != 0) goto failed;", depth+2) + self.emit("if (len != PyList_GET_SIZE(tmp)) {", depth+2) + self.emit("PyErr_SetString(PyExc_RuntimeError, \"%s field \\\"%s\\\" " + "changed size during iteration\");" % + (name, field.name), + depth+3, reflow=False) + self.emit("goto failed;", depth+3) + self.emit("}", depth+2) self.emit("asdl_seq_SET(%s, i, value);" % field.name, depth+2) self.emit("}", depth+1) else: diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index 184ffe7..612cb23 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -497,16 +497,12 @@ error: static int fp_setreadl(struct tok_state *tok, const char* enc) { - PyObject *readline = NULL, *stream = NULL, *io = NULL; + PyObject *readline, *io, *stream; _Py_IDENTIFIER(open); _Py_IDENTIFIER(readline); int fd; long pos; - io = PyImport_ImportModuleNoBlock("io"); - if (io == NULL) - goto cleanup; - fd = fileno(tok->fp); /* Due to buffering the file offset for fd can be different from the file * position of tok->fp. If tok->fp was opened in text mode on Windows, @@ -517,27 +513,33 @@ fp_setreadl(struct tok_state *tok, const char* enc) if (pos == -1 || lseek(fd, (off_t)(pos > 0 ? pos - 1 : pos), SEEK_SET) == (off_t)-1) { PyErr_SetFromErrnoWithFilename(PyExc_OSError, NULL); - goto cleanup; + return 0; } + io = PyImport_ImportModuleNoBlock("io"); + if (io == NULL) + return 0; + stream = _PyObject_CallMethodId(io, &PyId_open, "isisOOO", fd, "r", -1, enc, Py_None, Py_None, Py_False); + Py_DECREF(io); if (stream == NULL) - goto cleanup; + return 0; readline = _PyObject_GetAttrId(stream, &PyId_readline); + Py_DECREF(stream); + if (readline == NULL) + return 0; Py_XSETREF(tok->decoding_readline, readline); + if (pos > 0) { - if (PyObject_CallObject(readline, NULL) == NULL) { - readline = NULL; - goto cleanup; - } + PyObject *bufobj = PyObject_CallObject(readline, NULL); + if (bufobj == NULL) + return 0; + Py_DECREF(bufobj); } - cleanup: - Py_XDECREF(stream); - Py_XDECREF(io); - return readline != NULL; + return 1; } /* Fetch the next byte from TOK. */ @@ -1023,7 +1025,7 @@ tok_nextc(struct tok_state *tok) else { tok->done = E_OK; tok->inp = strchr(tok->buf, '\0'); - done = tok->inp[-1] == '\n'; + done = tok->inp == tok->buf || tok->inp[-1] == '\n'; } } else { diff --git a/Programs/_freeze_importlib.c b/Programs/_freeze_importlib.c index aecb123..0793984 100644 --- a/Programs/_freeze_importlib.c +++ b/Programs/_freeze_importlib.c @@ -77,6 +77,7 @@ main(int argc, char *argv[]) Py_NoUserSiteDirectory++; Py_NoSiteFlag++; Py_IgnoreEnvironmentFlag++; + Py_FrozenFlag++; Py_SetProgramName(L"./_freeze_importlib"); /* Don't install importlib, since it could execute outdated bytecode. */ diff --git a/Python/Python-ast.c b/Python/Python-ast.c index edfcbad..ad53ba3 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -3797,6 +3797,10 @@ obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -3832,6 +3836,10 @@ obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -3889,6 +3897,10 @@ obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Suite field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -3992,6 +4004,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -4016,6 +4032,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"decorator_list\" changed size during iteration"); + goto failed; + } asdl_seq_SET(decorator_list, i, value); } Py_CLEAR(tmp); @@ -4088,6 +4108,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -4112,6 +4136,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"decorator_list\" changed size during iteration"); + goto failed; + } asdl_seq_SET(decorator_list, i, value); } Py_CLEAR(tmp); @@ -4173,6 +4201,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration"); + goto failed; + } asdl_seq_SET(bases, i, value); } Py_CLEAR(tmp); @@ -4197,6 +4229,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) keyword_ty value; res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"keywords\" changed size during iteration"); + goto failed; + } asdl_seq_SET(keywords, i, value); } Py_CLEAR(tmp); @@ -4221,6 +4257,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -4245,6 +4285,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"decorator_list\" changed size during iteration"); + goto failed; + } asdl_seq_SET(decorator_list, i, value); } Py_CLEAR(tmp); @@ -4302,6 +4346,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration"); + goto failed; + } asdl_seq_SET(targets, i, value); } Py_CLEAR(tmp); @@ -4338,6 +4386,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration"); + goto failed; + } asdl_seq_SET(targets, i, value); } Py_CLEAR(tmp); @@ -4455,6 +4507,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -4479,6 +4535,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration"); + goto failed; + } asdl_seq_SET(orelse, i, value); } Py_CLEAR(tmp); @@ -4539,6 +4599,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -4563,6 +4627,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"orelse\" changed size during iteration"); + goto failed; + } asdl_seq_SET(orelse, i, value); } Py_CLEAR(tmp); @@ -4611,6 +4679,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -4635,6 +4707,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration"); + goto failed; + } asdl_seq_SET(orelse, i, value); } Py_CLEAR(tmp); @@ -4683,6 +4759,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -4707,6 +4787,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration"); + goto failed; + } asdl_seq_SET(orelse, i, value); } Py_CLEAR(tmp); @@ -4743,6 +4827,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) withitem_ty value; res = obj2ast_withitem(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "With field \"items\" changed size during iteration"); + goto failed; + } asdl_seq_SET(items, i, value); } Py_CLEAR(tmp); @@ -4767,6 +4855,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -4803,6 +4895,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) withitem_ty value; res = obj2ast_withitem(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"items\" changed size during iteration"); + goto failed; + } asdl_seq_SET(items, i, value); } Py_CLEAR(tmp); @@ -4827,6 +4923,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -4897,6 +4997,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Try field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -4921,6 +5025,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) excepthandler_ty value; res = obj2ast_excepthandler(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Try field \"handlers\" changed size during iteration"); + goto failed; + } asdl_seq_SET(handlers, i, value); } Py_CLEAR(tmp); @@ -4945,6 +5053,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Try field \"orelse\" changed size during iteration"); + goto failed; + } asdl_seq_SET(orelse, i, value); } Py_CLEAR(tmp); @@ -4969,6 +5081,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Try field \"finalbody\" changed size during iteration"); + goto failed; + } asdl_seq_SET(finalbody, i, value); } Py_CLEAR(tmp); @@ -5038,6 +5154,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) alias_ty value; res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration"); + goto failed; + } asdl_seq_SET(names, i, value); } Py_CLEAR(tmp); @@ -5085,6 +5205,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) alias_ty value; res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration"); + goto failed; + } asdl_seq_SET(names, i, value); } Py_CLEAR(tmp); @@ -5130,6 +5254,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) identifier value; res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration"); + goto failed; + } asdl_seq_SET(names, i, value); } Py_CLEAR(tmp); @@ -5165,6 +5293,10 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) identifier value; res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Nonlocal field \"names\" changed size during iteration"); + goto failed; + } asdl_seq_SET(names, i, value); } Py_CLEAR(tmp); @@ -5306,6 +5438,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration"); + goto failed; + } asdl_seq_SET(values, i, value); } Py_CLEAR(tmp); @@ -5502,6 +5638,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration"); + goto failed; + } asdl_seq_SET(keys, i, value); } Py_CLEAR(tmp); @@ -5526,6 +5666,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration"); + goto failed; + } asdl_seq_SET(values, i, value); } Py_CLEAR(tmp); @@ -5561,6 +5705,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration"); + goto failed; + } asdl_seq_SET(elts, i, value); } Py_CLEAR(tmp); @@ -5608,6 +5756,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) comprehension_ty value; res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration"); + goto failed; + } asdl_seq_SET(generators, i, value); } Py_CLEAR(tmp); @@ -5655,6 +5807,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) comprehension_ty value; res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration"); + goto failed; + } asdl_seq_SET(generators, i, value); } Py_CLEAR(tmp); @@ -5714,6 +5870,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) comprehension_ty value; res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration"); + goto failed; + } asdl_seq_SET(generators, i, value); } Py_CLEAR(tmp); @@ -5761,6 +5921,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) comprehension_ty value; res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration"); + goto failed; + } asdl_seq_SET(generators, i, value); } Py_CLEAR(tmp); @@ -5874,6 +6038,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) cmpop_ty value; res = obj2ast_cmpop(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration"); + goto failed; + } asdl_seq_SET(ops, i, value); } Py_CLEAR(tmp); @@ -5898,6 +6066,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration"); + goto failed; + } asdl_seq_SET(comparators, i, value); } Py_CLEAR(tmp); @@ -5946,6 +6118,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration"); + goto failed; + } asdl_seq_SET(args, i, value); } Py_CLEAR(tmp); @@ -5970,6 +6146,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) keyword_ty value; res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration"); + goto failed; + } asdl_seq_SET(keywords, i, value); } Py_CLEAR(tmp); @@ -6264,6 +6444,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration"); + goto failed; + } asdl_seq_SET(elts, i, value); } Py_CLEAR(tmp); @@ -6311,6 +6495,10 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration"); + goto failed; + } asdl_seq_SET(elts, i, value); } Py_CLEAR(tmp); @@ -6476,6 +6664,10 @@ obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena) slice_ty value; res = obj2ast_slice(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "ExtSlice field \"dims\" changed size during iteration"); + goto failed; + } asdl_seq_SET(dims, i, value); } Py_CLEAR(tmp); @@ -6835,6 +7027,10 @@ obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration"); + goto failed; + } asdl_seq_SET(ifs, i, value); } Py_CLEAR(tmp); @@ -6930,6 +7126,10 @@ obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena) stmt_ty value; res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration"); + goto failed; + } asdl_seq_SET(body, i, value); } Py_CLEAR(tmp); @@ -6976,6 +7176,10 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) arg_ty value; res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "arguments field \"args\" changed size during iteration"); + goto failed; + } asdl_seq_SET(args, i, value); } Py_CLEAR(tmp); @@ -7010,6 +7214,10 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) arg_ty value; res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "arguments field \"kwonlyargs\" changed size during iteration"); + goto failed; + } asdl_seq_SET(kwonlyargs, i, value); } Py_CLEAR(tmp); @@ -7034,6 +7242,10 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "arguments field \"kw_defaults\" changed size during iteration"); + goto failed; + } asdl_seq_SET(kw_defaults, i, value); } Py_CLEAR(tmp); @@ -7068,6 +7280,10 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration"); + goto failed; + } asdl_seq_SET(defaults, i, value); } Py_CLEAR(tmp); diff --git a/Python/_warnings.c b/Python/_warnings.c index 978bad1..3928153 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -431,7 +431,7 @@ warn_explicit(PyObject *category, PyObject *message, if (action == NULL) goto cleanup; - if (PyUnicode_CompareWithASCIIString(action, "error") == 0) { + if (_PyUnicode_EqualToASCIIString(action, "error")) { PyErr_SetObject(category, message); goto cleanup; } @@ -439,13 +439,13 @@ warn_explicit(PyObject *category, PyObject *message, /* Store in the registry that we've been here, *except* when the action is "always". */ rc = 0; - if (PyUnicode_CompareWithASCIIString(action, "always") != 0) { + if (!_PyUnicode_EqualToASCIIString(action, "always")) { if (registry != NULL && registry != Py_None && PyDict_SetItem(registry, key, Py_True) < 0) goto cleanup; - else if (PyUnicode_CompareWithASCIIString(action, "ignore") == 0) + else if (_PyUnicode_EqualToASCIIString(action, "ignore")) goto return_none; - else if (PyUnicode_CompareWithASCIIString(action, "once") == 0) { + else if (_PyUnicode_EqualToASCIIString(action, "once")) { if (registry == NULL || registry == Py_None) { registry = get_once_registry(); if (registry == NULL) @@ -454,12 +454,12 @@ warn_explicit(PyObject *category, PyObject *message, /* _once_registry[(text, category)] = 1 */ rc = update_registry(registry, text, category, 0); } - else if (PyUnicode_CompareWithASCIIString(action, "module") == 0) { + else if (_PyUnicode_EqualToASCIIString(action, "module")) { /* registry[(text, category, 0)] = 1 */ if (registry != NULL && registry != Py_None) rc = update_registry(registry, text, category, 0); } - else if (PyUnicode_CompareWithASCIIString(action, "default") != 0) { + else if (!_PyUnicode_EqualToASCIIString(action, "default")) { PyErr_Format(PyExc_RuntimeError, "Unrecognized action (%R) in warnings.filters:\n %R", action, item); @@ -665,7 +665,7 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno, } else { *filename = NULL; - if (*module != Py_None && PyUnicode_CompareWithASCIIString(*module, "__main__") == 0) { + if (*module != Py_None && _PyUnicode_EqualToASCIIString(*module, "__main__")) { PyObject *argv = _PySys_GetObjectId(&PyId_argv); /* PyList_Check() is needed because sys.argv is set to None during Python finalization */ diff --git a/Python/ast.c b/Python/ast.c index 7743c31..d36a9b7 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -876,14 +876,14 @@ forbidden_name(struct compiling *c, identifier name, const node *n, int full_checks) { assert(PyUnicode_Check(name)); - if (PyUnicode_CompareWithASCIIString(name, "__debug__") == 0) { + if (_PyUnicode_EqualToASCIIString(name, "__debug__")) { ast_error(c, n, "assignment to keyword"); return 1; } if (full_checks) { const char **p; for (p = FORBIDDEN; *p; p++) { - if (PyUnicode_CompareWithASCIIString(name, *p) == 0) { + if (_PyUnicode_EqualToASCIIString(name, *p)) { ast_error(c, n, "assignment to keyword"); return 1; } @@ -2024,16 +2024,18 @@ ast_for_atom(struct compiling *c, const node *n) errtype = "value error"; if (errtype) { char buf[128]; + const char *s = NULL; PyObject *type, *value, *tback, *errstr; PyErr_Fetch(&type, &value, &tback); errstr = PyObject_Str(value); - if (errstr) { - char *s = _PyUnicode_AsString(errstr); + if (errstr) + s = PyUnicode_AsUTF8(errstr); + if (s) { PyOS_snprintf(buf, sizeof(buf), "(%s) %s", errtype, s); - Py_DECREF(errstr); } else { PyOS_snprintf(buf, sizeof(buf), "(%s) unknown error", errtype); } + Py_XDECREF(errstr); ast_error(c, n, buf); Py_DECREF(type); Py_XDECREF(value); @@ -2810,7 +2812,7 @@ ast_for_expr_stmt(struct compiling *c, const node *n) testlist_star_expr: (test|star_expr) (',' test|star_expr)* [','] augassign: '+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '**=' | '//=' - test: ... here starts the operator precendence dance + test: ... here starts the operator precedence dance */ if (NCH(n) == 1) { diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index f3d0c9a..9f5db2a 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -242,8 +242,8 @@ Return the absolute value of the argument. [clinic start generated code]*/ static PyObject * -builtin_abs(PyModuleDef *module, PyObject *x) -/*[clinic end generated code: output=6833047c493ecea2 input=bed4ca14e29c20d1]*/ +builtin_abs(PyObject *module, PyObject *x) +/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/ { return PyNumber_Absolute(x); } @@ -260,8 +260,8 @@ If the iterable is empty, return True. [clinic start generated code]*/ static PyObject * -builtin_all(PyModuleDef *module, PyObject *iterable) -/*[clinic end generated code: output=089e6d1b7bde27b1 input=1a7c5d1bc3438a21]*/ +builtin_all(PyObject *module, PyObject *iterable) +/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/ { PyObject *it, *item; PyObject *(*iternext)(PyObject *); @@ -309,8 +309,8 @@ If the iterable is empty, return False. [clinic start generated code]*/ static PyObject * -builtin_any(PyModuleDef *module, PyObject *iterable) -/*[clinic end generated code: output=1be994b2c2307492 input=41d7451c23384f24]*/ +builtin_any(PyObject *module, PyObject *iterable) +/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/ { PyObject *it, *item; PyObject *(*iternext)(PyObject *); @@ -361,8 +361,8 @@ to that returned by repr() in Python 2. [clinic start generated code]*/ static PyObject * -builtin_ascii(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=d4e862c48af2a933 input=4c62732e1b3a3cc9]*/ +builtin_ascii(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/ { return PyObject_ASCII(obj); } @@ -381,8 +381,8 @@ Return the binary representation of an integer. [clinic start generated code]*/ static PyObject * -builtin_bin(PyModuleDef *module, PyObject *number) -/*[clinic end generated code: output=25ee26c6cf3bbb54 input=53f8a0264bacaf90]*/ +builtin_bin(PyObject *module, PyObject *number) +/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/ { return PyNumber_ToBase(number, 2); } @@ -401,8 +401,8 @@ __call__() method. [clinic start generated code]*/ static PyObject * -builtin_callable(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=f4df2ce92364b656 input=1423bab99cc41f58]*/ +builtin_callable(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/ { return PyBool_FromLong((long)PyCallable_Check(obj)); } @@ -574,9 +574,8 @@ format_spec defaults to the empty string [clinic start generated code]*/ static PyObject * -builtin_format_impl(PyModuleDef *module, PyObject *value, - PyObject *format_spec) -/*[clinic end generated code: output=4341fd78a5f01764 input=6325e751a1b29b86]*/ +builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec) +/*[clinic end generated code: output=2f40bdfa4954b077 input=6325e751a1b29b86]*/ { return PyObject_Format(value, format_spec); } @@ -591,8 +590,8 @@ Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff. [clinic start generated code]*/ static PyObject * -builtin_chr_impl(PyModuleDef *module, int i) -/*[clinic end generated code: output=67fe4d87e690f373 input=3f604ef45a70750d]*/ +builtin_chr_impl(PyObject *module, int i) +/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/ { return PyUnicode_FromOrdinal(i); } @@ -672,10 +671,10 @@ in addition to any features explicitly specified. [clinic start generated code]*/ static PyObject * -builtin_compile_impl(PyModuleDef *module, PyObject *source, - PyObject *filename, const char *mode, int flags, - int dont_inherit, int optimize) -/*[clinic end generated code: output=31881762c1bb90c4 input=9d53e8cfb3c86414]*/ +builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename, + const char *mode, int flags, int dont_inherit, + int optimize) +/*[clinic end generated code: output=1fa176e33452bb63 input=9d53e8cfb3c86414]*/ { PyObject *source_copy; const char *str; @@ -800,8 +799,8 @@ Return the tuple (x//y, x%y). Invariant: div*y + mod == x. [clinic start generated code]*/ static PyObject * -builtin_divmod_impl(PyModuleDef *module, PyObject *x, PyObject *y) -/*[clinic end generated code: output=9ad0076120ebf9ac input=175ad9c84ff41a85]*/ +builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y) +/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/ { return PyNumber_Divmod(x, y); } @@ -825,9 +824,9 @@ If only globals is given, locals defaults to it. [clinic start generated code]*/ static PyObject * -builtin_eval_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals) -/*[clinic end generated code: output=7284501fb7b4d666 input=11ee718a8640e527]*/ +/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/ { PyObject *result, *source_copy; const char *str; @@ -908,9 +907,9 @@ If only globals is given, locals defaults to it. [clinic start generated code]*/ static PyObject * -builtin_exec_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals) -/*[clinic end generated code: output=83d574ef9d5d0b46 input=01ca3e1c01692829]*/ +/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/ { PyObject *v; @@ -1024,8 +1023,8 @@ global scope and vice-versa. [clinic start generated code]*/ static PyObject * -builtin_globals_impl(PyModuleDef *module) -/*[clinic end generated code: output=4958645e96dd8138 input=9327576f92bb48ba]*/ +builtin_globals_impl(PyObject *module) +/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/ { PyObject *d; @@ -1048,8 +1047,8 @@ This is done by calling getattr(obj, name) and catching AttributeError. [clinic start generated code]*/ static PyObject * -builtin_hasattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name) -/*[clinic end generated code: output=81154fdd63634696 input=0faec9787d979542]*/ +builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name) +/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/ { PyObject *v; @@ -1324,9 +1323,9 @@ setattr(x, 'y', v) is equivalent to ``x.y = v'' [clinic start generated code]*/ static PyObject * -builtin_setattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name, +builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name, PyObject *value) -/*[clinic end generated code: output=d881c655c0f7e34f input=bd2b7ca6875a1899]*/ +/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/ { if (PyObject_SetAttr(obj, name, value) != 0) return NULL; @@ -1348,8 +1347,8 @@ delattr(x, 'y') is equivalent to ``del x.y'' [clinic start generated code]*/ static PyObject * -builtin_delattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name) -/*[clinic end generated code: output=ef653e698a0b4187 input=db16685d6b4b9410]*/ +builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name) +/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/ { if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0) return NULL; @@ -1371,8 +1370,8 @@ reverse is not necessarily true. [clinic start generated code]*/ static PyObject * -builtin_hash(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=1f32ff154c1f751a input=58c48be822bf9c54]*/ +builtin_hash(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/ { Py_hash_t x; @@ -1396,8 +1395,8 @@ Return the hexadecimal representation of an integer. [clinic start generated code]*/ static PyObject * -builtin_hex(PyModuleDef *module, PyObject *number) -/*[clinic end generated code: output=618489ce3cbc5858 input=e645aff5fc7d540e]*/ +builtin_hex(PyObject *module, PyObject *number) +/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/ { return PyNumber_ToBase(number, 16); } @@ -1440,8 +1439,8 @@ Return the number of items in a container. [clinic start generated code]*/ static PyObject * -builtin_len(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=8e5837b6f81d915b input=bc55598da9e9c9b5]*/ +builtin_len(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/ { Py_ssize_t res; @@ -1463,8 +1462,8 @@ covered by any backwards compatibility guarantees. [clinic start generated code]*/ static PyObject * -builtin_locals_impl(PyModuleDef *module) -/*[clinic end generated code: output=8b5a41f12e19d13a input=7874018d478d5c4b]*/ +builtin_locals_impl(PyObject *module) +/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/ { PyObject *d; @@ -1622,8 +1621,8 @@ Return the octal representation of an integer. [clinic start generated code]*/ static PyObject * -builtin_oct(PyModuleDef *module, PyObject *number) -/*[clinic end generated code: output=18f701bc6d8f804a input=ad6b274af4016c72]*/ +builtin_oct(PyObject *module, PyObject *number) +/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/ { return PyNumber_ToBase(number, 8); } @@ -1639,8 +1638,8 @@ Return the Unicode code point for a one-character string. [clinic start generated code]*/ static PyObject * -builtin_ord(PyModuleDef *module, PyObject *c) -/*[clinic end generated code: output=04fd27272d9462f6 input=3064e5d6203ad012]*/ +builtin_ord(PyObject *module, PyObject *c) +/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/ { long ord; Py_ssize_t size; @@ -1699,8 +1698,8 @@ invoked using the three argument form. [clinic start generated code]*/ static PyObject * -builtin_pow_impl(PyModuleDef *module, PyObject *x, PyObject *y, PyObject *z) -/*[clinic end generated code: output=1fba268adba9b45f input=653d57d38d41fc07]*/ +builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z) +/*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/ { return PyNumber_Power(x, y, z); } @@ -1818,8 +1817,8 @@ On *nix systems, readline is used if available. [clinic start generated code]*/ static PyObject * -builtin_input_impl(PyModuleDef *module, PyObject *prompt) -/*[clinic end generated code: output=b77731f59e1515c4 input=5e8bb70c2908fe3c]*/ +builtin_input_impl(PyObject *module, PyObject *prompt) +/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/ { PyObject *fin = _PySys_GetObjectId(&PyId_stdin); PyObject *fout = _PySys_GetObjectId(&PyId_stdout); @@ -2005,8 +2004,8 @@ For many object types, including most builtins, eval(repr(obj)) == obj. [clinic start generated code]*/ static PyObject * -builtin_repr(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=dc41784fa4341834 input=1c9e6d66d3e3be04]*/ +builtin_repr(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/ { return PyObject_Repr(obj); } @@ -2040,7 +2039,7 @@ builtin_round(PyObject *self, PyObject *args, PyObject *kwds) return NULL; } - if (ndigits == NULL) + if (ndigits == NULL || ndigits == Py_None) result = PyObject_CallFunctionObjArgs(round, NULL); else result = PyObject_CallFunctionObjArgs(round, ndigits, NULL); @@ -2069,7 +2068,7 @@ sorted as builtin_sorted Return a new list containing all items from the iterable in ascending order. -A custom key function can be supplied to customise the sort order, and the +A custom key function can be supplied to customize the sort order, and the reverse flag can be set to request the result in descending order. [end disabled clinic input]*/ @@ -2079,7 +2078,7 @@ PyDoc_STRVAR(builtin_sorted__doc__, "\n" "Return a new list containing all items from the iterable in ascending order.\n" "\n" -"A custom key function can be supplied to customise the sort order, and the\n" +"A custom key function can be supplied to customize the sort order, and the\n" "reverse flag can be set to request the result in descending order."); #define BUILTIN_SORTED_METHODDEF \ @@ -2175,8 +2174,8 @@ reject non-numeric types. [clinic start generated code]*/ static PyObject * -builtin_sum_impl(PyModuleDef *module, PyObject *iterable, PyObject *start) -/*[clinic end generated code: output=33655b248b21d581 input=3b5b7a9d7611c73a]*/ +builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start) +/*[clinic end generated code: output=df758cec7d1d302f input=3b5b7a9d7611c73a]*/ { PyObject *result = start; PyObject *temp, *item, *iter; @@ -2352,9 +2351,9 @@ or ...`` etc. [clinic start generated code]*/ static PyObject * -builtin_isinstance_impl(PyModuleDef *module, PyObject *obj, +builtin_isinstance_impl(PyObject *module, PyObject *obj, PyObject *class_or_tuple) -/*[clinic end generated code: output=f960b7c12dbbeda0 input=ffa743db1daf7549]*/ +/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/ { int retval; @@ -2380,9 +2379,9 @@ or ...`` etc. [clinic start generated code]*/ static PyObject * -builtin_issubclass_impl(PyModuleDef *module, PyObject *cls, +builtin_issubclass_impl(PyObject *module, PyObject *cls, PyObject *class_or_tuple) -/*[clinic end generated code: output=8b012a151940bbf2 input=af5f35e9ceaddaf6]*/ +/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/ { int retval; diff --git a/Python/ceval.c b/Python/ceval.c index 3d69038..7b40518 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1563,7 +1563,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) { sum = unicode_concatenate(left, right, f, next_instr); - /* unicode_concatenate consumed the ref to v */ + /* unicode_concatenate consumed the ref to left */ } else { sum = PyNumber_Add(left, right); @@ -1762,7 +1762,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyObject *sum; if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) { sum = unicode_concatenate(left, right, f, next_instr); - /* unicode_concatenate consumed the ref to v */ + /* unicode_concatenate consumed the ref to left */ } else { sum = PyNumber_InPlaceAdd(left, right); @@ -1853,7 +1853,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyObject *v = THIRD(); int err; STACKADJ(-3); - /* v[w] = u */ + /* container[sub] = v */ err = PyObject_SetItem(container, sub, v); Py_DECREF(v); Py_DECREF(container); @@ -1868,7 +1868,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyObject *container = SECOND(); int err; STACKADJ(-2); - /* del v[w] */ + /* del container[sub] */ err = PyObject_DelItem(container, sub); Py_DECREF(container); Py_DECREF(sub); @@ -2107,7 +2107,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) SET_TOP(val); DISPATCH(); } - /* x remains on stack, retval is value to be yielded */ + /* receiver remains on stack, retval is value to be yielded */ f->f_stacktop = stack_pointer; why = WHY_YIELD; /* and repeat... */ @@ -2196,7 +2196,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) else { PyObject *build_class_str = _PyUnicode_FromId(&PyId___build_class__); if (build_class_str == NULL) - break; + goto error; bc = PyObject_GetItem(f->f_builtins, build_class_str); if (bc == NULL) { if (PyErr_ExceptionMatches(PyExc_KeyError)) @@ -2580,14 +2580,16 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) TARGET(BUILD_SET) { PyObject *set = PySet_New(NULL); int err = 0; + int i; if (set == NULL) goto error; - while (--oparg >= 0) { - PyObject *item = POP(); + for (i = oparg; i > 0; i--) { + PyObject *item = PEEK(i); if (err == 0) err = PySet_Add(set, item); Py_DECREF(item); } + STACKADJ(-oparg); if (err != 0) { Py_DECREF(set); goto error; @@ -2644,14 +2646,12 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) _build_map_unpack: { int with_call = opcode == BUILD_MAP_UNPACK_WITH_CALL; int num_maps; - int function_location; int i; PyObject *sum = PyDict_New(); if (sum == NULL) goto error; if (with_call) { num_maps = oparg & 0xff; - function_location = (oparg>>8) & 0xff; } else { num_maps = oparg; @@ -2663,7 +2663,9 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyObject *intersection = _PyDictView_Intersect(sum, arg); if (intersection == NULL) { - if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + if (PyErr_ExceptionMatches(PyExc_AttributeError) || + !PyMapping_Check(arg)) { + int function_location = (oparg>>8) & 0xff; PyObject *func = ( PEEK(function_location + num_maps)); PyErr_Format(PyExc_TypeError, @@ -2680,6 +2682,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) if (PySet_GET_SIZE(intersection)) { Py_ssize_t idx = 0; PyObject *key; + int function_location = (oparg>>8) & 0xff; PyObject *func = PEEK(function_location + num_maps); Py_hash_t hash; _PySet_NextEntry(intersection, &idx, &key, &hash); @@ -2705,9 +2708,21 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) if (PyDict_Update(sum, arg) < 0) { if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_TypeError, - "'%.200s' object is not a mapping", - arg->ob_type->tp_name); + if (with_call) { + int function_location = (oparg>>8) & 0xff; + PyObject *func = PEEK(function_location + num_maps); + PyErr_Format(PyExc_TypeError, + "%.200s%.200s argument after ** " + "must be a mapping, not %.200s", + PyEval_GetFuncName(func), + PyEval_GetFuncDesc(func), + arg->ob_type->tp_name); + } + else { + PyErr_Format(PyExc_TypeError, + "'%.200s' object is not a mapping", + arg->ob_type->tp_name); + } } Py_DECREF(sum); goto error; @@ -2728,7 +2743,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) STACKADJ(-2); map = stack_pointer[-oparg]; /* dict */ assert(PyDict_CheckExact(map)); - err = PyDict_SetItem(map, key, value); /* v[w] = u */ + err = PyDict_SetItem(map, key, value); /* map[key] = value */ Py_DECREF(value); Py_DECREF(key); if (err != 0) @@ -4123,7 +4138,7 @@ do_raise(PyObject *exc, PyObject *cause) type = tstate->exc_type; value = tstate->exc_value; tb = tstate->exc_traceback; - if (type == Py_None) { + if (type == Py_None || type == NULL) { PyErr_SetString(PyExc_RuntimeError, "No active exception to reraise"); return 0; diff --git a/Python/clinic/bltinmodule.c.h b/Python/clinic/bltinmodule.c.h index 90995e5..4e2b1f1 100644 --- a/Python/clinic/bltinmodule.c.h +++ b/Python/clinic/bltinmodule.c.h @@ -83,11 +83,10 @@ PyDoc_STRVAR(builtin_format__doc__, {"format", (PyCFunction)builtin_format, METH_VARARGS, builtin_format__doc__}, static PyObject * -builtin_format_impl(PyModuleDef *module, PyObject *value, - PyObject *format_spec); +builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec); static PyObject * -builtin_format(PyModuleDef *module, PyObject *args) +builtin_format(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *value; @@ -112,10 +111,10 @@ PyDoc_STRVAR(builtin_chr__doc__, {"chr", (PyCFunction)builtin_chr, METH_O, builtin_chr__doc__}, static PyObject * -builtin_chr_impl(PyModuleDef *module, int i); +builtin_chr_impl(PyObject *module, int i); static PyObject * -builtin_chr(PyModuleDef *module, PyObject *arg) +builtin_chr(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int i; @@ -150,12 +149,12 @@ PyDoc_STRVAR(builtin_compile__doc__, {"compile", (PyCFunction)builtin_compile, METH_VARARGS|METH_KEYWORDS, builtin_compile__doc__}, static PyObject * -builtin_compile_impl(PyModuleDef *module, PyObject *source, - PyObject *filename, const char *mode, int flags, - int dont_inherit, int optimize); +builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename, + const char *mode, int flags, int dont_inherit, + int optimize); static PyObject * -builtin_compile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +builtin_compile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"source", "filename", "mode", "flags", "dont_inherit", "optimize", NULL}; @@ -185,10 +184,10 @@ PyDoc_STRVAR(builtin_divmod__doc__, {"divmod", (PyCFunction)builtin_divmod, METH_VARARGS, builtin_divmod__doc__}, static PyObject * -builtin_divmod_impl(PyModuleDef *module, PyObject *x, PyObject *y); +builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y); static PyObject * -builtin_divmod(PyModuleDef *module, PyObject *args) +builtin_divmod(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *x; @@ -220,11 +219,11 @@ PyDoc_STRVAR(builtin_eval__doc__, {"eval", (PyCFunction)builtin_eval, METH_VARARGS, builtin_eval__doc__}, static PyObject * -builtin_eval_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals); static PyObject * -builtin_eval(PyModuleDef *module, PyObject *args) +builtin_eval(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *source; @@ -257,11 +256,11 @@ PyDoc_STRVAR(builtin_exec__doc__, {"exec", (PyCFunction)builtin_exec, METH_VARARGS, builtin_exec__doc__}, static PyObject * -builtin_exec_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals); static PyObject * -builtin_exec(PyModuleDef *module, PyObject *args) +builtin_exec(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *source; @@ -291,10 +290,10 @@ PyDoc_STRVAR(builtin_globals__doc__, {"globals", (PyCFunction)builtin_globals, METH_NOARGS, builtin_globals__doc__}, static PyObject * -builtin_globals_impl(PyModuleDef *module); +builtin_globals_impl(PyObject *module); static PyObject * -builtin_globals(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +builtin_globals(PyObject *module, PyObject *Py_UNUSED(ignored)) { return builtin_globals_impl(module); } @@ -311,10 +310,10 @@ PyDoc_STRVAR(builtin_hasattr__doc__, {"hasattr", (PyCFunction)builtin_hasattr, METH_VARARGS, builtin_hasattr__doc__}, static PyObject * -builtin_hasattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name); +builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name); static PyObject * -builtin_hasattr(PyModuleDef *module, PyObject *args) +builtin_hasattr(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -354,11 +353,11 @@ PyDoc_STRVAR(builtin_setattr__doc__, {"setattr", (PyCFunction)builtin_setattr, METH_VARARGS, builtin_setattr__doc__}, static PyObject * -builtin_setattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name, +builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name, PyObject *value); static PyObject * -builtin_setattr(PyModuleDef *module, PyObject *args) +builtin_setattr(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -387,10 +386,10 @@ PyDoc_STRVAR(builtin_delattr__doc__, {"delattr", (PyCFunction)builtin_delattr, METH_VARARGS, builtin_delattr__doc__}, static PyObject * -builtin_delattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name); +builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name); static PyObject * -builtin_delattr(PyModuleDef *module, PyObject *args) +builtin_delattr(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -453,10 +452,10 @@ PyDoc_STRVAR(builtin_locals__doc__, {"locals", (PyCFunction)builtin_locals, METH_NOARGS, builtin_locals__doc__}, static PyObject * -builtin_locals_impl(PyModuleDef *module); +builtin_locals_impl(PyObject *module); static PyObject * -builtin_locals(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +builtin_locals(PyObject *module, PyObject *Py_UNUSED(ignored)) { return builtin_locals_impl(module); } @@ -495,10 +494,10 @@ PyDoc_STRVAR(builtin_pow__doc__, {"pow", (PyCFunction)builtin_pow, METH_VARARGS, builtin_pow__doc__}, static PyObject * -builtin_pow_impl(PyModuleDef *module, PyObject *x, PyObject *y, PyObject *z); +builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z); static PyObject * -builtin_pow(PyModuleDef *module, PyObject *args) +builtin_pow(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *x; @@ -531,10 +530,10 @@ PyDoc_STRVAR(builtin_input__doc__, {"input", (PyCFunction)builtin_input, METH_VARARGS, builtin_input__doc__}, static PyObject * -builtin_input_impl(PyModuleDef *module, PyObject *prompt); +builtin_input_impl(PyObject *module, PyObject *prompt); static PyObject * -builtin_input(PyModuleDef *module, PyObject *args) +builtin_input(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *prompt = NULL; @@ -574,10 +573,10 @@ PyDoc_STRVAR(builtin_sum__doc__, {"sum", (PyCFunction)builtin_sum, METH_VARARGS, builtin_sum__doc__}, static PyObject * -builtin_sum_impl(PyModuleDef *module, PyObject *iterable, PyObject *start); +builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start); static PyObject * -builtin_sum(PyModuleDef *module, PyObject *args) +builtin_sum(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *iterable; @@ -607,11 +606,11 @@ PyDoc_STRVAR(builtin_isinstance__doc__, {"isinstance", (PyCFunction)builtin_isinstance, METH_VARARGS, builtin_isinstance__doc__}, static PyObject * -builtin_isinstance_impl(PyModuleDef *module, PyObject *obj, +builtin_isinstance_impl(PyObject *module, PyObject *obj, PyObject *class_or_tuple); static PyObject * -builtin_isinstance(PyModuleDef *module, PyObject *args) +builtin_isinstance(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -641,11 +640,11 @@ PyDoc_STRVAR(builtin_issubclass__doc__, {"issubclass", (PyCFunction)builtin_issubclass, METH_VARARGS, builtin_issubclass__doc__}, static PyObject * -builtin_issubclass_impl(PyModuleDef *module, PyObject *cls, +builtin_issubclass_impl(PyObject *module, PyObject *cls, PyObject *class_or_tuple); static PyObject * -builtin_issubclass(PyModuleDef *module, PyObject *args) +builtin_issubclass(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *cls; @@ -660,4 +659,4 @@ builtin_issubclass(PyModuleDef *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=4bef16b6aa432879 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9031270b64c794b8 input=a9049054013a1b77]*/ diff --git a/Python/clinic/import.c.h b/Python/clinic/import.c.h index 2477665..05d79ac 100644 --- a/Python/clinic/import.c.h +++ b/Python/clinic/import.c.h @@ -14,10 +14,10 @@ PyDoc_STRVAR(_imp_lock_held__doc__, {"lock_held", (PyCFunction)_imp_lock_held, METH_NOARGS, _imp_lock_held__doc__}, static PyObject * -_imp_lock_held_impl(PyModuleDef *module); +_imp_lock_held_impl(PyObject *module); static PyObject * -_imp_lock_held(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_lock_held(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_lock_held_impl(module); } @@ -35,10 +35,10 @@ PyDoc_STRVAR(_imp_acquire_lock__doc__, {"acquire_lock", (PyCFunction)_imp_acquire_lock, METH_NOARGS, _imp_acquire_lock__doc__}, static PyObject * -_imp_acquire_lock_impl(PyModuleDef *module); +_imp_acquire_lock_impl(PyObject *module); static PyObject * -_imp_acquire_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_acquire_lock(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_acquire_lock_impl(module); } @@ -55,10 +55,10 @@ PyDoc_STRVAR(_imp_release_lock__doc__, {"release_lock", (PyCFunction)_imp_release_lock, METH_NOARGS, _imp_release_lock__doc__}, static PyObject * -_imp_release_lock_impl(PyModuleDef *module); +_imp_release_lock_impl(PyObject *module); static PyObject * -_imp_release_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_release_lock(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_release_lock_impl(module); } @@ -78,11 +78,11 @@ PyDoc_STRVAR(_imp__fix_co_filename__doc__, {"_fix_co_filename", (PyCFunction)_imp__fix_co_filename, METH_VARARGS, _imp__fix_co_filename__doc__}, static PyObject * -_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, +_imp__fix_co_filename_impl(PyObject *module, PyCodeObject *code, PyObject *path); static PyObject * -_imp__fix_co_filename(PyModuleDef *module, PyObject *args) +_imp__fix_co_filename(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyCodeObject *code; @@ -116,10 +116,10 @@ PyDoc_STRVAR(_imp_extension_suffixes__doc__, {"extension_suffixes", (PyCFunction)_imp_extension_suffixes, METH_NOARGS, _imp_extension_suffixes__doc__}, static PyObject * -_imp_extension_suffixes_impl(PyModuleDef *module); +_imp_extension_suffixes_impl(PyObject *module); static PyObject * -_imp_extension_suffixes(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_extension_suffixes(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_extension_suffixes_impl(module); } @@ -134,10 +134,10 @@ PyDoc_STRVAR(_imp_init_frozen__doc__, {"init_frozen", (PyCFunction)_imp_init_frozen, METH_O, _imp_init_frozen__doc__}, static PyObject * -_imp_init_frozen_impl(PyModuleDef *module, PyObject *name); +_imp_init_frozen_impl(PyObject *module, PyObject *name); static PyObject * -_imp_init_frozen(PyModuleDef *module, PyObject *arg) +_imp_init_frozen(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -160,10 +160,10 @@ PyDoc_STRVAR(_imp_get_frozen_object__doc__, {"get_frozen_object", (PyCFunction)_imp_get_frozen_object, METH_O, _imp_get_frozen_object__doc__}, static PyObject * -_imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name); +_imp_get_frozen_object_impl(PyObject *module, PyObject *name); static PyObject * -_imp_get_frozen_object(PyModuleDef *module, PyObject *arg) +_imp_get_frozen_object(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -186,10 +186,10 @@ PyDoc_STRVAR(_imp_is_frozen_package__doc__, {"is_frozen_package", (PyCFunction)_imp_is_frozen_package, METH_O, _imp_is_frozen_package__doc__}, static PyObject * -_imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name); +_imp_is_frozen_package_impl(PyObject *module, PyObject *name); static PyObject * -_imp_is_frozen_package(PyModuleDef *module, PyObject *arg) +_imp_is_frozen_package(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -212,10 +212,10 @@ PyDoc_STRVAR(_imp_is_builtin__doc__, {"is_builtin", (PyCFunction)_imp_is_builtin, METH_O, _imp_is_builtin__doc__}, static PyObject * -_imp_is_builtin_impl(PyModuleDef *module, PyObject *name); +_imp_is_builtin_impl(PyObject *module, PyObject *name); static PyObject * -_imp_is_builtin(PyModuleDef *module, PyObject *arg) +_imp_is_builtin(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -238,10 +238,10 @@ PyDoc_STRVAR(_imp_is_frozen__doc__, {"is_frozen", (PyCFunction)_imp_is_frozen, METH_O, _imp_is_frozen__doc__}, static PyObject * -_imp_is_frozen_impl(PyModuleDef *module, PyObject *name); +_imp_is_frozen_impl(PyObject *module, PyObject *name); static PyObject * -_imp_is_frozen(PyModuleDef *module, PyObject *arg) +_imp_is_frozen(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -266,10 +266,10 @@ PyDoc_STRVAR(_imp_create_dynamic__doc__, {"create_dynamic", (PyCFunction)_imp_create_dynamic, METH_VARARGS, _imp_create_dynamic__doc__}, static PyObject * -_imp_create_dynamic_impl(PyModuleDef *module, PyObject *spec, PyObject *file); +_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file); static PyObject * -_imp_create_dynamic(PyModuleDef *module, PyObject *args) +_imp_create_dynamic(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *spec; @@ -299,10 +299,10 @@ PyDoc_STRVAR(_imp_exec_dynamic__doc__, {"exec_dynamic", (PyCFunction)_imp_exec_dynamic, METH_O, _imp_exec_dynamic__doc__}, static int -_imp_exec_dynamic_impl(PyModuleDef *module, PyObject *mod); +_imp_exec_dynamic_impl(PyObject *module, PyObject *mod); static PyObject * -_imp_exec_dynamic(PyModuleDef *module, PyObject *mod) +_imp_exec_dynamic(PyObject *module, PyObject *mod) { PyObject *return_value = NULL; int _return_value; @@ -328,10 +328,10 @@ PyDoc_STRVAR(_imp_exec_builtin__doc__, {"exec_builtin", (PyCFunction)_imp_exec_builtin, METH_O, _imp_exec_builtin__doc__}, static int -_imp_exec_builtin_impl(PyModuleDef *module, PyObject *mod); +_imp_exec_builtin_impl(PyObject *module, PyObject *mod); static PyObject * -_imp_exec_builtin(PyModuleDef *module, PyObject *mod) +_imp_exec_builtin(PyObject *module, PyObject *mod) { PyObject *return_value = NULL; int _return_value; @@ -352,4 +352,4 @@ exit: #ifndef _IMP_EXEC_DYNAMIC_METHODDEF #define _IMP_EXEC_DYNAMIC_METHODDEF #endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */ -/*[clinic end generated code: output=32324a5e46cdfc4b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=90ad6e5833e6170d input=a9049054013a1b77]*/ diff --git a/Python/compile.c b/Python/compile.c index 1e720ea..adc33ac 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1390,7 +1390,7 @@ get_ref_type(struct compiler *c, PyObject *name) { int scope; if (c->u->u_scope_type == COMPILER_SCOPE_CLASS && - !PyUnicode_CompareWithASCIIString(name, "__class__")) + _PyUnicode_EqualToASCIIString(name, "__class__")) return CELL; scope = PyST_GetScope(c->u->u_ste, name); if (scope == 0) { @@ -1494,6 +1494,9 @@ static int compiler_visit_kwonlydefaults(struct compiler *c, asdl_seq *kwonlyargs, asdl_seq *kw_defaults) { + /* Return the number of defaults + 1. + Returns 0 on error. + */ int i, default_count = 0; for (i = 0; i < asdl_seq_LEN(kwonlyargs); i++) { arg_ty arg = asdl_seq_GET(kwonlyargs, i); @@ -1501,16 +1504,16 @@ compiler_visit_kwonlydefaults(struct compiler *c, asdl_seq *kwonlyargs, if (default_) { PyObject *mangled = _Py_Mangle(c->u->u_private, arg->arg); if (!mangled) - return -1; + return 0; ADDOP_O(c, LOAD_CONST, mangled, consts); Py_DECREF(mangled); if (!compiler_visit_expr(c, default_)) { - return -1; + return 0; } default_count++; } } - return default_count; + return default_count + 1; } static int @@ -1554,17 +1557,17 @@ compiler_visit_annotations(struct compiler *c, arguments_ty args, expr_ty returns) { /* Push arg annotations and a list of the argument names. Return the # - of items pushed. The expressions are evaluated out-of-order wrt the + of items pushed + 1. The expressions are evaluated out-of-order wrt the source code. - More than 2^16-1 annotations is a SyntaxError. Returns -1 on error. + More than 2^16-1 annotations is a SyntaxError. Returns 0 on error. */ static identifier return_str; PyObject *names; Py_ssize_t len; names = PyList_New(0); if (!names) - return -1; + return 0; if (!compiler_visit_argannotations(c, args->args, names)) goto error; @@ -1614,11 +1617,11 @@ compiler_visit_annotations(struct compiler *c, arguments_ty args, Py_DECREF(names); /* We just checked that len <= 65535, see above */ - return Py_SAFE_DOWNCAST(len, Py_ssize_t, int); + return Py_SAFE_DOWNCAST(len + 1, Py_ssize_t, int); error: Py_DECREF(names); - return -1; + return 0; } static int @@ -1667,13 +1670,14 @@ compiler_function(struct compiler *c, stmt_ty s, int is_async) if (args->kwonlyargs) { int res = compiler_visit_kwonlydefaults(c, args->kwonlyargs, args->kw_defaults); - if (res < 0) + if (res == 0) return 0; - kw_default_count = res; + kw_default_count = res - 1; } num_annotations = compiler_visit_annotations(c, args, returns); - if (num_annotations < 0) + if (num_annotations == 0) return 0; + num_annotations--; assert((num_annotations & 0xFFFF) == num_annotations); if (!compiler_enter_scope(c, name, @@ -1889,8 +1893,8 @@ compiler_lambda(struct compiler *c, expr_ty e) if (args->kwonlyargs) { int res = compiler_visit_kwonlydefaults(c, args->kwonlyargs, args->kw_defaults); - if (res < 0) return 0; - kw_default_count = res; + if (res == 0) return 0; + kw_default_count = res - 1; } if (!compiler_enter_scope(c, name, COMPILER_SCOPE_LAMBDA, (void *)e, e->lineno)) @@ -2403,7 +2407,7 @@ compiler_import_as(struct compiler *c, identifier name, identifier asname) Py_ssize_t dot = PyUnicode_FindChar(name, '.', 0, PyUnicode_GET_LENGTH(name), 1); if (dot == -2) - return -1; + return 0; if (dot != -1) { /* Consume the base module name to get the first attribute */ Py_ssize_t pos = dot + 1; @@ -2412,12 +2416,12 @@ compiler_import_as(struct compiler *c, identifier name, identifier asname) dot = PyUnicode_FindChar(name, '.', pos, PyUnicode_GET_LENGTH(name), 1); if (dot == -2) - return -1; + return 0; attr = PyUnicode_Substring(name, pos, (dot != -1) ? dot : PyUnicode_GET_LENGTH(name)); if (!attr) - return -1; + return 0; ADDOP_O(c, LOAD_ATTR, attr, names); Py_DECREF(attr); pos = dot + 1; @@ -2509,7 +2513,7 @@ compiler_from_import(struct compiler *c, stmt_ty s) } if (s->lineno > c->c_future->ff_lineno && s->v.ImportFrom.module && - !PyUnicode_CompareWithASCIIString(s->v.ImportFrom.module, "__future__")) { + _PyUnicode_EqualToASCIIString(s->v.ImportFrom.module, "__future__")) { Py_DECREF(level); Py_DECREF(names); return compiler_error(c, "from __future__ imports must occur " @@ -2833,9 +2837,9 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) if (!mangled) return 0; - assert(PyUnicode_CompareWithASCIIString(name, "None") && - PyUnicode_CompareWithASCIIString(name, "True") && - PyUnicode_CompareWithASCIIString(name, "False")); + assert(!_PyUnicode_EqualToASCIIString(name, "None") && + !_PyUnicode_EqualToASCIIString(name, "True") && + !_PyUnicode_EqualToASCIIString(name, "False")); op = 0; optype = OP_NAME; @@ -3262,7 +3266,7 @@ compiler_call_helper(struct compiler *c, code |= 2; if (nsubkwargs > 1) { /* Pack it all up */ - int function_pos = n + (code & 1) + nkw + 1; + int function_pos = n + (code & 1) + 2 * nkw + 1; ADDOP_I(c, BUILD_MAP_UNPACK_WITH_CALL, nsubkwargs | (function_pos << 8)); } } @@ -3976,7 +3980,7 @@ compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b) { struct fblockinfo *f; if (c->u->u_nfblocks >= CO_MAXBLOCKS) { - PyErr_SetString(PyExc_SystemError, + PyErr_SetString(PyExc_SyntaxError, "too many statically nested blocks"); return 0; } diff --git a/Python/condvar.h b/Python/condvar.h index bb5b1b6..ced910f 100644 --- a/Python/condvar.h +++ b/Python/condvar.h @@ -238,7 +238,7 @@ _PyCOND_WAIT_MS(PyCOND_T *cv, PyMUTEX_T *cs, DWORD ms) cv->waiting++; PyMUTEX_UNLOCK(cs); /* "lost wakeup bug" would occur if the caller were interrupted here, - * but we are safe because we are using a semaphore wich has an internal + * but we are safe because we are using a semaphore which has an internal * count. */ wait = WaitForSingleObjectEx(cv->sem, ms, FALSE); diff --git a/Python/errors.c b/Python/errors.c index e151cab..b820722 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -388,8 +388,11 @@ _PyErr_ChainExceptions(PyObject *exc, PyObject *val, PyObject *tb) PyObject *exc2, *val2, *tb2; PyErr_Fetch(&exc2, &val2, &tb2); PyErr_NormalizeException(&exc, &val, &tb); + if (tb != NULL) { + PyException_SetTraceback(val, tb); + Py_DECREF(tb); + } Py_DECREF(exc); - Py_XDECREF(tb); PyErr_NormalizeException(&exc2, &val2, &tb2); PyException_SetContext(val2, val); PyErr_Restore(exc2, val2, tb2); @@ -931,7 +934,7 @@ PyErr_WriteUnraisable(PyObject *obj) goto done; } else { - if (_PyUnicode_CompareWithId(moduleName, &PyId_builtins) != 0) { + if (!_PyUnicode_EqualToASCIIId(moduleName, &PyId_builtins)) { if (PyFile_WriteObject(moduleName, f, Py_PRINT_RAW) < 0) goto done; if (PyFile_WriteString(".", f) < 0) @@ -1006,16 +1009,15 @@ PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset) PyErr_Clear(); Py_DECREF(tmp); } + tmp = NULL; if (col_offset >= 0) { tmp = PyLong_FromLong(col_offset); if (tmp == NULL) PyErr_Clear(); - else { - if (_PyObject_SetAttrId(v, &PyId_offset, tmp)) - PyErr_Clear(); - Py_DECREF(tmp); - } } + if (_PyObject_SetAttrId(v, &PyId_offset, tmp ? tmp : Py_None)) + PyErr_Clear(); + Py_XDECREF(tmp); if (filename != NULL) { if (_PyObject_SetAttrId(v, &PyId_filename, filename)) PyErr_Clear(); @@ -1027,9 +1029,6 @@ PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset) Py_DECREF(tmp); } } - if (_PyObject_SetAttrId(v, &PyId_offset, Py_None)) { - PyErr_Clear(); - } if (exc != PyExc_SyntaxError) { if (!_PyObject_HasAttrId(v, &PyId_msg)) { tmp = PyObject_Str(v); @@ -1095,11 +1094,8 @@ err_programtext(FILE *fp, int lineno) } fclose(fp); if (i == lineno) { - char *p = linebuf; PyObject *res; - while (*p == ' ' || *p == '\t' || *p == '\014') - p++; - res = PyUnicode_FromString(p); + res = PyUnicode_FromString(linebuf); if (res == NULL) PyErr_Clear(); return res; diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c index 8e9c502..617d58b 100644 --- a/Python/formatter_unicode.c +++ b/Python/formatter_unicode.c @@ -118,7 +118,7 @@ typedef struct { } InternalFormatSpec; #if 0 -/* Occassionally useful for debugging. Should normally be commented out. */ +/* Occasionally useful for debugging. Should normally be commented out. */ static void DEBUG_PRINT_FORMAT_SPEC(InternalFormatSpec *format) { @@ -347,9 +347,11 @@ fill_padding(_PyUnicodeWriter *writer, /************************************************************************/ /* Locale type codes. */ -#define LT_CURRENT_LOCALE 0 -#define LT_DEFAULT_LOCALE 1 -#define LT_NO_LOCALE 2 +enum LocaleType { + LT_CURRENT_LOCALE, + LT_DEFAULT_LOCALE, + LT_NO_LOCALE +}; /* Locale info needed for formatting integers and the part of floats before and including the decimal. Note that locales only support @@ -663,7 +665,7 @@ static char no_grouping[1] = {CHAR_MAX}; LT_CURRENT_LOCALE, a hard-coded locale if LT_DEFAULT_LOCALE, or none if LT_NO_LOCALE. */ static int -get_locale_info(int type, LocaleInfo *locale_info) +get_locale_info(enum LocaleType type, LocaleInfo *locale_info) { switch (type) { case LT_CURRENT_LOCALE: { @@ -676,21 +678,16 @@ get_locale_info(int type, LocaleInfo *locale_info) locale_info->thousands_sep = PyUnicode_DecodeLocale( locale_data->thousands_sep, NULL); - if (locale_info->thousands_sep == NULL) { - Py_DECREF(locale_info->decimal_point); + if (locale_info->thousands_sep == NULL) return -1; - } locale_info->grouping = locale_data->grouping; break; } case LT_DEFAULT_LOCALE: locale_info->decimal_point = PyUnicode_FromOrdinal('.'); locale_info->thousands_sep = PyUnicode_FromOrdinal(','); - if (!locale_info->decimal_point || !locale_info->thousands_sep) { - Py_XDECREF(locale_info->decimal_point); - Py_XDECREF(locale_info->thousands_sep); + if (!locale_info->decimal_point || !locale_info->thousands_sep) return -1; - } locale_info->grouping = "\3"; /* Group every 3 characters. The (implicit) trailing 0 means repeat infinitely. */ @@ -698,15 +695,10 @@ get_locale_info(int type, LocaleInfo *locale_info) case LT_NO_LOCALE: locale_info->decimal_point = PyUnicode_FromOrdinal('.'); locale_info->thousands_sep = PyUnicode_New(0, 0); - if (!locale_info->decimal_point || !locale_info->thousands_sep) { - Py_XDECREF(locale_info->decimal_point); - Py_XDECREF(locale_info->thousands_sep); + if (!locale_info->decimal_point || !locale_info->thousands_sep) return -1; - } locale_info->grouping = no_grouping; break; - default: - assert(0); } return 0; } diff --git a/Python/future.c b/Python/future.c index 163f87f..4de801b 100644 --- a/Python/future.c +++ b/Python/future.c @@ -99,7 +99,7 @@ future_parse(PyFutureFeatures *ff, mod_ty mod, PyObject *filename) if (s->kind == ImportFrom_kind) { identifier modname = s->v.ImportFrom.module; if (modname && - !PyUnicode_CompareWithASCIIString(modname, "__future__")) { + _PyUnicode_EqualToASCIIString(modname, "__future__")) { if (done) { PyErr_SetString(PyExc_SyntaxError, ERR_LATE_FUTURE); diff --git a/Python/getargs.c b/Python/getargs.c index 8aab067..b10e776 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -1618,7 +1618,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, return cleanreturn(0, &freelist); } for (i = 0; i < len; i++) { - if (!PyUnicode_CompareWithASCIIString(key, kwlist[i])) { + if (_PyUnicode_EqualToASCIIString(key, kwlist[i])) { match = 1; break; } diff --git a/Python/getcopyright.c b/Python/getcopyright.c index c3f1e89..cac647c 100644 --- a/Python/getcopyright.c +++ b/Python/getcopyright.c @@ -4,7 +4,7 @@ static const char cprt[] = "\ -Copyright (c) 2001-2016 Python Software Foundation.\n\ +Copyright (c) 2001-2017 Python Software Foundation.\n\ All Rights Reserved.\n\ \n\ Copyright (c) 2000 BeOpen.com.\n\ diff --git a/Python/import.c b/Python/import.c index 0b843da..3579273 100644 --- a/Python/import.c +++ b/Python/import.c @@ -242,8 +242,8 @@ On platforms without threads, return False. [clinic start generated code]*/ static PyObject * -_imp_lock_held_impl(PyModuleDef *module) -/*[clinic end generated code: output=d7a8cc3a5169081a input=9b088f9b217d9bdf]*/ +_imp_lock_held_impl(PyObject *module) +/*[clinic end generated code: output=8b89384b5e1963fc input=9b088f9b217d9bdf]*/ { #ifdef WITH_THREAD return PyBool_FromLong(import_lock_thread != -1); @@ -262,8 +262,8 @@ modules. On platforms without threads, this function does nothing. [clinic start generated code]*/ static PyObject * -_imp_acquire_lock_impl(PyModuleDef *module) -/*[clinic end generated code: output=cc143b1d16422cae input=4a2d4381866d5fdc]*/ +_imp_acquire_lock_impl(PyObject *module) +/*[clinic end generated code: output=1aff58cb0ee1b026 input=4a2d4381866d5fdc]*/ { #ifdef WITH_THREAD _PyImport_AcquireLock(); @@ -281,8 +281,8 @@ On platforms without threads, this function does nothing. [clinic start generated code]*/ static PyObject * -_imp_release_lock_impl(PyModuleDef *module) -/*[clinic end generated code: output=74d28e38ebe2b224 input=934fb11516dd778b]*/ +_imp_release_lock_impl(PyObject *module) +/*[clinic end generated code: output=7faab6d0be178b0a input=934fb11516dd778b]*/ { #ifdef WITH_THREAD if (_PyImport_ReleaseLock() < 0) { @@ -926,9 +926,9 @@ Changes code.co_filename to specify the passed-in file path. [clinic start generated code]*/ static PyObject * -_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, +_imp__fix_co_filename_impl(PyObject *module, PyCodeObject *code, PyObject *path) -/*[clinic end generated code: output=f4db56aac0a1327f input=895ba50e78b82f05]*/ +/*[clinic end generated code: output=1d002f100235587d input=895ba50e78b82f05]*/ { update_compiled_module(code, path); @@ -946,10 +946,9 @@ static const struct _frozen * find_frozen(PyObject *); static int is_builtin(PyObject *name) { - int i, cmp; + int i; for (i = 0; PyImport_Inittab[i].name != NULL; i++) { - cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name); - if (cmp == 0) { + if (_PyUnicode_EqualToASCIIString(name, PyImport_Inittab[i].name)) { if (PyImport_Inittab[i].initfunc == NULL) return -1; else @@ -960,12 +959,13 @@ is_builtin(PyObject *name) } -/* Return an importer object for a sys.path/pkg.__path__ item 'p', +/* Return a finder object for a sys.path/pkg.__path__ item 'p', possibly by fetching it from the path_importer_cache dict. If it wasn't yet cached, traverse path_hooks until a hook is found that can handle the path item. Return None if no hook could; - this tells our caller it should fall back to the builtin - import mechanism. Cache the result in path_importer_cache. + this tells our caller that the path based finder could not find + a finder for this path item. Cache the result in + path_importer_cache. Returns a borrowed reference. */ static PyObject * @@ -1040,8 +1040,8 @@ Create an extension module. [clinic start generated code]*/ static PyObject * -_imp_create_builtin(PyModuleDef *module, PyObject *spec) -/*[clinic end generated code: output=5038f467617226bd input=37f966f890384e47]*/ +_imp_create_builtin(PyObject *module, PyObject *spec) +/*[clinic end generated code: output=ace7ff22271e6f39 input=37f966f890384e47]*/ { struct _inittab *p; PyObject *name; @@ -1056,7 +1056,7 @@ _imp_create_builtin(PyModuleDef *module, PyObject *spec) mod = _PyImport_FindExtensionObject(name, name); if (mod || PyErr_Occurred()) { Py_DECREF(name); - Py_INCREF(mod); + Py_XINCREF(mod); return mod; } @@ -1068,7 +1068,7 @@ _imp_create_builtin(PyModuleDef *module, PyObject *spec) for (p = PyImport_Inittab; p->name != NULL; p++) { PyModuleDef *def; - if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) { + if (_PyUnicode_EqualToASCIIString(name, p->name)) { if (p->initfunc == NULL) { /* Cannot re-init internal module ("sys" or "builtins") */ mod = PyImport_AddModule(namestr); @@ -1114,7 +1114,7 @@ find_frozen(PyObject *name) for (p = PyImport_FrozenModules; ; p++) { if (p->name == NULL) return NULL; - if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) + if (_PyUnicode_EqualToASCIIString(name, p->name)) break; } return p; @@ -1315,12 +1315,8 @@ remove_importlib_frames(void) int now_in_importlib; assert(PyTraceBack_Check(tb)); - now_in_importlib = (PyUnicode_CompareWithASCIIString( - code->co_filename, - importlib_filename) == 0) || - (PyUnicode_CompareWithASCIIString( - code->co_filename, - external_filename) == 0); + now_in_importlib = _PyUnicode_EqualToASCIIString(code->co_filename, importlib_filename) || + _PyUnicode_EqualToASCIIString(code->co_filename, external_filename); if (now_in_importlib && !in_importlib) { /* This is the link to this chunk of importlib tracebacks */ outer_link = prev_link; @@ -1329,8 +1325,7 @@ remove_importlib_frames(void) if (in_importlib && (always_trim || - PyUnicode_CompareWithASCIIString(code->co_name, - remove_frames) == 0)) { + _PyUnicode_EqualToASCIIString(code->co_name, remove_frames))) { PyObject *tmp = *outer_link; *outer_link = next; Py_XINCREF(next); @@ -1438,6 +1433,7 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, } else if (!PyUnicode_Check(package)) { PyErr_SetString(PyExc_TypeError, "__name__ must be a string"); + goto error; } Py_INCREF(package); @@ -1525,15 +1521,13 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, _PyImport_AcquireLock(); #endif /* From this point forward, goto error_with_unlock! */ - if (PyDict_Check(globals)) { - builtins_import = _PyDict_GetItemId(globals, &PyId___import__); - } + /* XXX interp->builtins_copy is NULL in subinterpreter! */ + builtins_import = _PyDict_GetItemId(interp->builtins_copy ? + interp->builtins_copy : + interp->builtins, &PyId___import__); if (builtins_import == NULL) { - builtins_import = _PyDict_GetItemId(interp->builtins, &PyId___import__); - if (builtins_import == NULL) { - PyErr_SetString(PyExc_ImportError, "__import__ not found"); - goto error_with_unlock; - } + PyErr_SetString(PyExc_ImportError, "__import__ not found"); + goto error_with_unlock; } Py_INCREF(builtins_import); @@ -1823,8 +1817,8 @@ Returns the list of file suffixes used to identify extension modules. [clinic start generated code]*/ static PyObject * -_imp_extension_suffixes_impl(PyModuleDef *module) -/*[clinic end generated code: output=d44c1566ef362229 input=ecdeeecfcb6f839e]*/ +_imp_extension_suffixes_impl(PyObject *module) +/*[clinic end generated code: output=0bf346e25a8f0cd3 input=ecdeeecfcb6f839e]*/ { PyObject *list; const char *suffix; @@ -1862,8 +1856,8 @@ Initializes a frozen module. [clinic start generated code]*/ static PyObject * -_imp_init_frozen_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=a9de493bdd711878 input=13019adfc04f3fb3]*/ +_imp_init_frozen_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=fc0511ed869fd69c input=13019adfc04f3fb3]*/ { int ret; PyObject *m; @@ -1890,8 +1884,8 @@ Create a code object for a frozen module. [clinic start generated code]*/ static PyObject * -_imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=3114c970a47f2e3c input=ed689bc05358fdbd]*/ +_imp_get_frozen_object_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=2568cc5b7aa0da63 input=ed689bc05358fdbd]*/ { return get_frozen_object(name); } @@ -1906,8 +1900,8 @@ Returns True if the module name is of a frozen package. [clinic start generated code]*/ static PyObject * -_imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=3e4cab802b56d649 input=81b6cdecd080fbb8]*/ +_imp_is_frozen_package_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=e70cbdb45784a1c9 input=81b6cdecd080fbb8]*/ { return is_frozen_package(name); } @@ -1922,8 +1916,8 @@ Returns True if the module name corresponds to a built-in module. [clinic start generated code]*/ static PyObject * -_imp_is_builtin_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=2deec9cac6fb9a7e input=86befdac021dd1c7]*/ +_imp_is_builtin_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=3bfd1162e2d3be82 input=86befdac021dd1c7]*/ { return PyLong_FromLong(is_builtin(name)); } @@ -1938,8 +1932,8 @@ Returns True if the module name corresponds to a frozen module. [clinic start generated code]*/ static PyObject * -_imp_is_frozen_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=7de8e260c8e36aed input=7301dbca1897d66b]*/ +_imp_is_frozen_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=01f408f5ec0f2577 input=7301dbca1897d66b]*/ { const struct _frozen *p; @@ -1988,8 +1982,8 @@ Create an extension module. [clinic start generated code]*/ static PyObject * -_imp_create_dynamic_impl(PyModuleDef *module, PyObject *spec, PyObject *file) -/*[clinic end generated code: output=935cde5b3872d56d input=c31b954f4cf4e09d]*/ +_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file) +/*[clinic end generated code: output=83249b827a4fde77 input=c31b954f4cf4e09d]*/ { PyObject *mod, *name, *path; FILE *fp; @@ -2043,8 +2037,8 @@ Initialize an extension module. [clinic start generated code]*/ static int -_imp_exec_dynamic_impl(PyModuleDef *module, PyObject *mod) -/*[clinic end generated code: output=4b84f1301b22d4bd input=9fdbfcb250280d3a]*/ +_imp_exec_dynamic_impl(PyObject *module, PyObject *mod) +/*[clinic end generated code: output=f5720ac7b465877d input=9fdbfcb250280d3a]*/ { return exec_builtin_or_dynamic(mod); } @@ -2062,8 +2056,8 @@ Initialize a built-in module. [clinic start generated code]*/ static int -_imp_exec_builtin_impl(PyModuleDef *module, PyObject *mod) -/*[clinic end generated code: output=215e99876a27e284 input=7beed5a2f12a60ca]*/ +_imp_exec_builtin_impl(PyObject *module, PyObject *mod) +/*[clinic end generated code: output=0262447b240c038e input=7beed5a2f12a60ca]*/ { return exec_builtin_or_dynamic(mod); } diff --git a/Python/importdl.c b/Python/importdl.c index 1aa585d..ea4f0e7 100644 --- a/Python/importdl.c +++ b/Python/importdl.c @@ -147,6 +147,10 @@ _PyImport_LoadDynamicModuleWithSpec(PyObject *spec, FILE *fp) /* Package context is needed for single-phase init */ oldcontext = _Py_PackageContext; _Py_PackageContext = PyUnicode_AsUTF8(name_unicode); + if (_Py_PackageContext == NULL) { + _Py_PackageContext = oldcontext; + goto error; + } m = p0(); _Py_PackageContext = oldcontext; diff --git a/Python/importlib.h b/Python/importlib.h index 7f6b753..a5fc936 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -1920,70 +1920,69 @@ const unsigned char _Py_M__importlib[] = { 115,32,109,117,115,116,32,98,101,32,101,120,112,108,105,99, 105,116,108,121,32,112,97,115,115,101,100,32,105,110,46,10, 10,32,32,32,32,114,141,0,0,0,114,34,0,0,0,78, - 114,62,0,0,0,41,1,122,9,95,119,97,114,110,105,110, - 103,115,41,16,114,57,0,0,0,114,14,0,0,0,114,13, - 0,0,0,114,21,0,0,0,218,5,105,116,101,109,115,114, - 177,0,0,0,114,76,0,0,0,114,150,0,0,0,114,82, - 0,0,0,114,160,0,0,0,114,132,0,0,0,114,137,0, - 0,0,114,1,0,0,0,114,200,0,0,0,114,5,0,0, - 0,114,77,0,0,0,41,12,218,10,115,121,115,95,109,111, - 100,117,108,101,218,11,95,105,109,112,95,109,111,100,117,108, - 101,90,11,109,111,100,117,108,101,95,116,121,112,101,114,15, - 0,0,0,114,89,0,0,0,114,99,0,0,0,114,88,0, - 0,0,90,11,115,101,108,102,95,109,111,100,117,108,101,90, - 12,98,117,105,108,116,105,110,95,110,97,109,101,90,14,98, - 117,105,108,116,105,110,95,109,111,100,117,108,101,90,13,116, - 104,114,101,97,100,95,109,111,100,117,108,101,90,14,119,101, - 97,107,114,101,102,95,109,111,100,117,108,101,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,218,6,95,115,101, - 116,117,112,61,4,0,0,115,50,0,0,0,0,9,6,1, - 6,3,12,1,28,1,15,1,15,1,9,1,15,1,9,2, - 3,1,15,1,17,3,13,1,13,1,15,1,15,2,13,1, - 20,3,3,1,16,1,13,2,11,1,16,3,12,1,114,204, - 0,0,0,99,2,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,67,0,0,0,115,87,0,0,0,116,0,0, - 124,0,0,124,1,0,131,2,0,1,116,1,0,106,2,0, - 106,3,0,116,4,0,131,1,0,1,116,1,0,106,2,0, - 106,3,0,116,5,0,131,1,0,1,100,1,0,100,2,0, - 108,6,0,125,2,0,124,2,0,97,7,0,124,2,0,106, - 8,0,116,1,0,106,9,0,116,10,0,25,131,1,0,1, - 100,2,0,83,41,3,122,50,73,110,115,116,97,108,108,32, - 105,109,112,111,114,116,108,105,98,32,97,115,32,116,104,101, - 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, - 111,102,32,105,109,112,111,114,116,46,114,33,0,0,0,78, - 41,11,114,204,0,0,0,114,14,0,0,0,114,174,0,0, - 0,114,113,0,0,0,114,150,0,0,0,114,160,0,0,0, - 218,26,95,102,114,111,122,101,110,95,105,109,112,111,114,116, - 108,105,98,95,101,120,116,101,114,110,97,108,114,119,0,0, - 0,218,8,95,105,110,115,116,97,108,108,114,21,0,0,0, - 114,1,0,0,0,41,3,114,202,0,0,0,114,203,0,0, - 0,114,205,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,11,0,0,0,114,206,0,0,0,108,4,0,0,115,12, - 0,0,0,0,2,13,2,16,1,16,3,12,1,6,1,114, - 206,0,0,0,41,51,114,3,0,0,0,114,119,0,0,0, - 114,12,0,0,0,114,16,0,0,0,114,17,0,0,0,114, - 59,0,0,0,114,41,0,0,0,114,48,0,0,0,114,31, - 0,0,0,114,32,0,0,0,114,53,0,0,0,114,54,0, - 0,0,114,56,0,0,0,114,63,0,0,0,114,65,0,0, - 0,114,75,0,0,0,114,81,0,0,0,114,84,0,0,0, - 114,90,0,0,0,114,101,0,0,0,114,102,0,0,0,114, - 106,0,0,0,114,85,0,0,0,218,6,111,98,106,101,99, - 116,90,9,95,80,79,80,85,76,65,84,69,114,132,0,0, - 0,114,137,0,0,0,114,144,0,0,0,114,97,0,0,0, - 114,86,0,0,0,114,148,0,0,0,114,149,0,0,0,114, - 87,0,0,0,114,150,0,0,0,114,160,0,0,0,114,165, - 0,0,0,114,171,0,0,0,114,173,0,0,0,114,176,0, - 0,0,114,181,0,0,0,114,191,0,0,0,114,182,0,0, - 0,114,184,0,0,0,114,185,0,0,0,114,186,0,0,0, - 114,194,0,0,0,114,196,0,0,0,114,199,0,0,0,114, - 200,0,0,0,114,204,0,0,0,114,206,0,0,0,114,10, - 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, - 0,0,218,8,60,109,111,100,117,108,101,62,8,0,0,0, - 115,96,0,0,0,6,17,6,2,12,8,12,4,19,20,6, - 2,6,3,22,4,19,68,19,21,19,19,12,19,12,19,12, - 11,18,8,12,11,12,12,12,16,12,36,19,27,19,101,24, - 26,9,3,18,45,18,60,12,18,12,17,12,25,12,29,12, - 23,12,16,19,73,19,77,19,13,12,9,12,9,15,40,12, - 17,6,1,10,2,12,27,12,6,18,24,12,32,12,15,24, - 35,12,7,12,47, + 114,62,0,0,0,41,1,114,141,0,0,0,41,16,114,57, + 0,0,0,114,14,0,0,0,114,13,0,0,0,114,21,0, + 0,0,218,5,105,116,101,109,115,114,177,0,0,0,114,76, + 0,0,0,114,150,0,0,0,114,82,0,0,0,114,160,0, + 0,0,114,132,0,0,0,114,137,0,0,0,114,1,0,0, + 0,114,200,0,0,0,114,5,0,0,0,114,77,0,0,0, + 41,12,218,10,115,121,115,95,109,111,100,117,108,101,218,11, + 95,105,109,112,95,109,111,100,117,108,101,90,11,109,111,100, + 117,108,101,95,116,121,112,101,114,15,0,0,0,114,89,0, + 0,0,114,99,0,0,0,114,88,0,0,0,90,11,115,101, + 108,102,95,109,111,100,117,108,101,90,12,98,117,105,108,116, + 105,110,95,110,97,109,101,90,14,98,117,105,108,116,105,110, + 95,109,111,100,117,108,101,90,13,116,104,114,101,97,100,95, + 109,111,100,117,108,101,90,14,119,101,97,107,114,101,102,95, + 109,111,100,117,108,101,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,218,6,95,115,101,116,117,112,61,4,0, + 0,115,50,0,0,0,0,9,6,1,6,3,12,1,28,1, + 15,1,15,1,9,1,15,1,9,2,3,1,15,1,17,3, + 13,1,13,1,15,1,15,2,13,1,20,3,3,1,16,1, + 13,2,11,1,16,3,12,1,114,204,0,0,0,99,2,0, + 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, + 0,0,115,87,0,0,0,116,0,0,124,0,0,124,1,0, + 131,2,0,1,116,1,0,106,2,0,106,3,0,116,4,0, + 131,1,0,1,116,1,0,106,2,0,106,3,0,116,5,0, + 131,1,0,1,100,1,0,100,2,0,108,6,0,125,2,0, + 124,2,0,97,7,0,124,2,0,106,8,0,116,1,0,106, + 9,0,116,10,0,25,131,1,0,1,100,2,0,83,41,3, + 122,50,73,110,115,116,97,108,108,32,105,109,112,111,114,116, + 108,105,98,32,97,115,32,116,104,101,32,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,32,111,102,32,105,109,112, + 111,114,116,46,114,33,0,0,0,78,41,11,114,204,0,0, + 0,114,14,0,0,0,114,174,0,0,0,114,113,0,0,0, + 114,150,0,0,0,114,160,0,0,0,218,26,95,102,114,111, + 122,101,110,95,105,109,112,111,114,116,108,105,98,95,101,120, + 116,101,114,110,97,108,114,119,0,0,0,218,8,95,105,110, + 115,116,97,108,108,114,21,0,0,0,114,1,0,0,0,41, + 3,114,202,0,0,0,114,203,0,0,0,114,205,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 206,0,0,0,108,4,0,0,115,12,0,0,0,0,2,13, + 2,16,1,16,3,12,1,6,1,114,206,0,0,0,41,51, + 114,3,0,0,0,114,119,0,0,0,114,12,0,0,0,114, + 16,0,0,0,114,17,0,0,0,114,59,0,0,0,114,41, + 0,0,0,114,48,0,0,0,114,31,0,0,0,114,32,0, + 0,0,114,53,0,0,0,114,54,0,0,0,114,56,0,0, + 0,114,63,0,0,0,114,65,0,0,0,114,75,0,0,0, + 114,81,0,0,0,114,84,0,0,0,114,90,0,0,0,114, + 101,0,0,0,114,102,0,0,0,114,106,0,0,0,114,85, + 0,0,0,218,6,111,98,106,101,99,116,90,9,95,80,79, + 80,85,76,65,84,69,114,132,0,0,0,114,137,0,0,0, + 114,144,0,0,0,114,97,0,0,0,114,86,0,0,0,114, + 148,0,0,0,114,149,0,0,0,114,87,0,0,0,114,150, + 0,0,0,114,160,0,0,0,114,165,0,0,0,114,171,0, + 0,0,114,173,0,0,0,114,176,0,0,0,114,181,0,0, + 0,114,191,0,0,0,114,182,0,0,0,114,184,0,0,0, + 114,185,0,0,0,114,186,0,0,0,114,194,0,0,0,114, + 196,0,0,0,114,199,0,0,0,114,200,0,0,0,114,204, + 0,0,0,114,206,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,8,60,109, + 111,100,117,108,101,62,8,0,0,0,115,96,0,0,0,6, + 17,6,2,12,8,12,4,19,20,6,2,6,3,22,4,19, + 68,19,21,19,19,12,19,12,19,12,11,18,8,12,11,12, + 12,12,16,12,36,19,27,19,101,24,26,9,3,18,45,18, + 60,12,18,12,17,12,25,12,29,12,23,12,16,19,73,19, + 77,19,13,12,9,12,9,15,40,12,17,6,1,10,2,12, + 27,12,6,18,24,12,32,12,15,24,35,12,7,12,47, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 47f5c62..5ee843a 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1,53 +1,54 @@ /* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__importlib_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,64,0,0,0,115,228,2,0,0,100,0,0,90,0,0, - 100,96,0,90,1,0,100,4,0,100,5,0,132,0,0,90, - 2,0,100,6,0,100,7,0,132,0,0,90,3,0,100,8, - 0,100,9,0,132,0,0,90,4,0,100,10,0,100,11,0, - 132,0,0,90,5,0,100,12,0,100,13,0,132,0,0,90, - 6,0,100,14,0,100,15,0,132,0,0,90,7,0,100,16, - 0,100,17,0,132,0,0,90,8,0,100,18,0,100,19,0, - 132,0,0,90,9,0,100,20,0,100,21,0,132,0,0,90, - 10,0,100,22,0,100,23,0,100,24,0,132,1,0,90,11, - 0,101,12,0,101,11,0,106,13,0,131,1,0,90,14,0, - 100,25,0,106,15,0,100,26,0,100,27,0,131,2,0,100, - 28,0,23,90,16,0,101,17,0,106,18,0,101,16,0,100, - 27,0,131,2,0,90,19,0,100,29,0,90,20,0,100,30, - 0,90,21,0,100,31,0,103,1,0,90,22,0,100,32,0, - 103,1,0,90,23,0,101,23,0,4,90,24,0,90,25,0, + 0,64,0,0,0,115,244,2,0,0,100,0,0,90,0,0, + 100,96,0,90,1,0,100,97,0,90,2,0,101,2,0,101, + 1,0,23,90,3,0,100,4,0,100,5,0,132,0,0,90, + 4,0,100,6,0,100,7,0,132,0,0,90,5,0,100,8, + 0,100,9,0,132,0,0,90,6,0,100,10,0,100,11,0, + 132,0,0,90,7,0,100,12,0,100,13,0,132,0,0,90, + 8,0,100,14,0,100,15,0,132,0,0,90,9,0,100,16, + 0,100,17,0,132,0,0,90,10,0,100,18,0,100,19,0, + 132,0,0,90,11,0,100,20,0,100,21,0,132,0,0,90, + 12,0,100,22,0,100,23,0,100,24,0,132,1,0,90,13, + 0,101,14,0,101,13,0,106,15,0,131,1,0,90,16,0, + 100,25,0,106,17,0,100,26,0,100,27,0,131,2,0,100, + 28,0,23,90,18,0,101,19,0,106,20,0,101,18,0,100, + 27,0,131,2,0,90,21,0,100,29,0,90,22,0,100,30, + 0,90,23,0,100,31,0,103,1,0,90,24,0,100,32,0, + 103,1,0,90,25,0,101,25,0,4,90,26,0,90,27,0, 100,33,0,100,34,0,100,33,0,100,35,0,100,36,0,132, - 1,1,90,26,0,100,37,0,100,38,0,132,0,0,90,27, - 0,100,39,0,100,40,0,132,0,0,90,28,0,100,41,0, - 100,42,0,132,0,0,90,29,0,100,43,0,100,44,0,132, - 0,0,90,30,0,100,45,0,100,46,0,100,47,0,100,48, - 0,132,0,1,90,31,0,100,49,0,100,50,0,132,0,0, - 90,32,0,100,51,0,100,52,0,132,0,0,90,33,0,100, + 1,1,90,28,0,100,37,0,100,38,0,132,0,0,90,29, + 0,100,39,0,100,40,0,132,0,0,90,30,0,100,41,0, + 100,42,0,132,0,0,90,31,0,100,43,0,100,44,0,132, + 0,0,90,32,0,100,45,0,100,46,0,100,47,0,100,48, + 0,132,0,1,90,33,0,100,49,0,100,50,0,132,0,0, + 90,34,0,100,51,0,100,52,0,132,0,0,90,35,0,100, 33,0,100,33,0,100,33,0,100,53,0,100,54,0,132,3, - 0,90,34,0,100,33,0,100,33,0,100,33,0,100,55,0, - 100,56,0,132,3,0,90,35,0,100,57,0,100,57,0,100, - 58,0,100,59,0,132,2,0,90,36,0,100,60,0,100,61, - 0,132,0,0,90,37,0,101,38,0,131,0,0,90,39,0, - 100,33,0,100,62,0,100,33,0,100,63,0,101,39,0,100, - 64,0,100,65,0,132,1,2,90,40,0,71,100,66,0,100, - 67,0,132,0,0,100,67,0,131,2,0,90,41,0,71,100, - 68,0,100,69,0,132,0,0,100,69,0,131,2,0,90,42, - 0,71,100,70,0,100,71,0,132,0,0,100,71,0,101,42, - 0,131,3,0,90,43,0,71,100,72,0,100,73,0,132,0, - 0,100,73,0,131,2,0,90,44,0,71,100,74,0,100,75, - 0,132,0,0,100,75,0,101,44,0,101,43,0,131,4,0, - 90,45,0,71,100,76,0,100,77,0,132,0,0,100,77,0, - 101,44,0,101,42,0,131,4,0,90,46,0,103,0,0,90, - 47,0,71,100,78,0,100,79,0,132,0,0,100,79,0,101, - 44,0,101,42,0,131,4,0,90,48,0,71,100,80,0,100, - 81,0,132,0,0,100,81,0,131,2,0,90,49,0,71,100, - 82,0,100,83,0,132,0,0,100,83,0,131,2,0,90,50, + 0,90,36,0,100,33,0,100,33,0,100,33,0,100,55,0, + 100,56,0,132,3,0,90,37,0,100,57,0,100,57,0,100, + 58,0,100,59,0,132,2,0,90,38,0,100,60,0,100,61, + 0,132,0,0,90,39,0,101,40,0,131,0,0,90,41,0, + 100,33,0,100,62,0,100,33,0,100,63,0,101,41,0,100, + 64,0,100,65,0,132,1,2,90,42,0,71,100,66,0,100, + 67,0,132,0,0,100,67,0,131,2,0,90,43,0,71,100, + 68,0,100,69,0,132,0,0,100,69,0,131,2,0,90,44, + 0,71,100,70,0,100,71,0,132,0,0,100,71,0,101,44, + 0,131,3,0,90,45,0,71,100,72,0,100,73,0,132,0, + 0,100,73,0,131,2,0,90,46,0,71,100,74,0,100,75, + 0,132,0,0,100,75,0,101,46,0,101,45,0,131,4,0, + 90,47,0,71,100,76,0,100,77,0,132,0,0,100,77,0, + 101,46,0,101,44,0,131,4,0,90,48,0,103,0,0,90, + 49,0,71,100,78,0,100,79,0,132,0,0,100,79,0,101, + 46,0,101,44,0,131,4,0,90,50,0,71,100,80,0,100, + 81,0,132,0,0,100,81,0,131,2,0,90,51,0,71,100, + 82,0,100,83,0,132,0,0,100,83,0,131,2,0,90,52, 0,71,100,84,0,100,85,0,132,0,0,100,85,0,131,2, - 0,90,51,0,71,100,86,0,100,87,0,132,0,0,100,87, - 0,131,2,0,90,52,0,100,33,0,100,88,0,100,89,0, - 132,1,0,90,53,0,100,90,0,100,91,0,132,0,0,90, - 54,0,100,92,0,100,93,0,132,0,0,90,55,0,100,94, - 0,100,95,0,132,0,0,90,56,0,100,33,0,83,41,97, + 0,90,53,0,71,100,86,0,100,87,0,132,0,0,100,87, + 0,131,2,0,90,54,0,100,33,0,100,88,0,100,89,0, + 132,1,0,90,55,0,100,90,0,100,91,0,132,0,0,90, + 56,0,100,92,0,100,93,0,132,0,0,90,57,0,100,94, + 0,100,95,0,132,0,0,90,58,0,100,33,0,83,41,98, 97,94,1,0,0,67,111,114,101,32,105,109,112,108,101,109, 101,110,116,97,116,105,111,110,32,111,102,32,112,97,116,104, 45,98,97,115,101,100,32,105,109,112,111,114,116,46,10,10, @@ -72,2525 +73,2533 @@ const unsigned char _Py_M__importlib_external[] = { 110,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101, 46,10,10,218,3,119,105,110,218,6,99,121,103,119,105,110, 218,6,100,97,114,119,105,110,99,0,0,0,0,0,0,0, - 0,1,0,0,0,2,0,0,0,67,0,0,0,115,49,0, + 0,1,0,0,0,3,0,0,0,3,0,0,0,115,88,0, 0,0,116,0,0,106,1,0,106,2,0,116,3,0,131,1, - 0,114,33,0,100,1,0,100,2,0,132,0,0,125,0,0, - 110,12,0,100,3,0,100,2,0,132,0,0,125,0,0,124, - 0,0,83,41,4,78,99,0,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,83,0,0,0,115,13,0,0,0, - 100,1,0,116,0,0,106,1,0,107,6,0,83,41,2,122, - 53,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, - 101,115,32,109,117,115,116,32,98,101,32,99,104,101,99,107, - 101,100,32,99,97,115,101,45,105,110,115,101,110,115,105,116, - 105,118,101,108,121,46,115,12,0,0,0,80,89,84,72,79, - 78,67,65,83,69,79,75,41,2,218,3,95,111,115,90,7, - 101,110,118,105,114,111,110,169,0,114,4,0,0,0,114,4, - 0,0,0,250,38,60,102,114,111,122,101,110,32,105,109,112, - 111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97, - 112,95,101,120,116,101,114,110,97,108,62,218,11,95,114,101, - 108,97,120,95,99,97,115,101,30,0,0,0,115,2,0,0, - 0,0,2,122,37,95,109,97,107,101,95,114,101,108,97,120, - 95,99,97,115,101,46,60,108,111,99,97,108,115,62,46,95, - 114,101,108,97,120,95,99,97,115,101,99,0,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,83,0,0,0,115, - 4,0,0,0,100,1,0,83,41,2,122,53,84,114,117,101, - 32,105,102,32,102,105,108,101,110,97,109,101,115,32,109,117, - 115,116,32,98,101,32,99,104,101,99,107,101,100,32,99,97, - 115,101,45,105,110,115,101,110,115,105,116,105,118,101,108,121, - 46,70,114,4,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,6,0,0,0, - 34,0,0,0,115,2,0,0,0,0,2,41,4,218,3,115, - 121,115,218,8,112,108,97,116,102,111,114,109,218,10,115,116, - 97,114,116,115,119,105,116,104,218,27,95,67,65,83,69,95, - 73,78,83,69,78,83,73,84,73,86,69,95,80,76,65,84, - 70,79,82,77,83,41,1,114,6,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,16,95,109,97, - 107,101,95,114,101,108,97,120,95,99,97,115,101,28,0,0, - 0,115,8,0,0,0,0,1,18,1,15,4,12,3,114,11, - 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,115,26,0,0,0,116,0,0, - 124,0,0,131,1,0,100,1,0,64,106,1,0,100,2,0, - 100,3,0,131,2,0,83,41,4,122,42,67,111,110,118,101, - 114,116,32,97,32,51,50,45,98,105,116,32,105,110,116,101, - 103,101,114,32,116,111,32,108,105,116,116,108,101,45,101,110, - 100,105,97,110,46,108,3,0,0,0,255,127,255,127,3,0, - 233,4,0,0,0,218,6,108,105,116,116,108,101,41,2,218, - 3,105,110,116,218,8,116,111,95,98,121,116,101,115,41,1, - 218,1,120,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,7,95,119,95,108,111,110,103,40,0,0,0,115, - 2,0,0,0,0,2,114,17,0,0,0,99,1,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 115,16,0,0,0,116,0,0,106,1,0,124,0,0,100,1, - 0,131,2,0,83,41,2,122,47,67,111,110,118,101,114,116, - 32,52,32,98,121,116,101,115,32,105,110,32,108,105,116,116, - 108,101,45,101,110,100,105,97,110,32,116,111,32,97,110,32, - 105,110,116,101,103,101,114,46,114,13,0,0,0,41,2,114, - 14,0,0,0,218,10,102,114,111,109,95,98,121,116,101,115, - 41,1,90,9,105,110,116,95,98,121,116,101,115,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,7,95,114, - 95,108,111,110,103,45,0,0,0,115,2,0,0,0,0,2, - 114,19,0,0,0,99,0,0,0,0,0,0,0,0,1,0, - 0,0,3,0,0,0,71,0,0,0,115,26,0,0,0,116, - 0,0,106,1,0,100,1,0,100,2,0,132,0,0,124,0, - 0,68,131,1,0,131,1,0,83,41,3,122,31,82,101,112, - 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, - 112,97,116,104,46,106,111,105,110,40,41,46,99,1,0,0, - 0,0,0,0,0,2,0,0,0,4,0,0,0,83,0,0, - 0,115,37,0,0,0,103,0,0,124,0,0,93,27,0,125, - 1,0,124,1,0,114,6,0,124,1,0,106,0,0,116,1, - 0,131,1,0,145,2,0,113,6,0,83,114,4,0,0,0, - 41,2,218,6,114,115,116,114,105,112,218,15,112,97,116,104, - 95,115,101,112,97,114,97,116,111,114,115,41,2,218,2,46, - 48,218,4,112,97,114,116,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,250,10,60,108,105,115,116,99,111,109, - 112,62,52,0,0,0,115,2,0,0,0,9,1,122,30,95, - 112,97,116,104,95,106,111,105,110,46,60,108,111,99,97,108, - 115,62,46,60,108,105,115,116,99,111,109,112,62,41,2,218, - 8,112,97,116,104,95,115,101,112,218,4,106,111,105,110,41, - 1,218,10,112,97,116,104,95,112,97,114,116,115,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,10,95,112, - 97,116,104,95,106,111,105,110,50,0,0,0,115,4,0,0, - 0,0,2,15,1,114,28,0,0,0,99,1,0,0,0,0, - 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, - 134,0,0,0,116,0,0,116,1,0,131,1,0,100,1,0, - 107,2,0,114,52,0,124,0,0,106,2,0,116,3,0,131, - 1,0,92,3,0,125,1,0,125,2,0,125,3,0,124,1, - 0,124,3,0,102,2,0,83,120,69,0,116,4,0,124,0, - 0,131,1,0,68,93,55,0,125,4,0,124,4,0,116,1, - 0,107,6,0,114,65,0,124,0,0,106,5,0,124,4,0, - 100,2,0,100,1,0,131,1,1,92,2,0,125,1,0,125, - 3,0,124,1,0,124,3,0,102,2,0,83,113,65,0,87, - 100,3,0,124,0,0,102,2,0,83,41,4,122,32,82,101, - 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, - 46,112,97,116,104,46,115,112,108,105,116,40,41,46,233,1, - 0,0,0,90,8,109,97,120,115,112,108,105,116,218,0,41, - 6,218,3,108,101,110,114,21,0,0,0,218,10,114,112,97, - 114,116,105,116,105,111,110,114,25,0,0,0,218,8,114,101, - 118,101,114,115,101,100,218,6,114,115,112,108,105,116,41,5, - 218,4,112,97,116,104,90,5,102,114,111,110,116,218,1,95, - 218,4,116,97,105,108,114,16,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,11,95,112,97,116, - 104,95,115,112,108,105,116,56,0,0,0,115,16,0,0,0, - 0,2,18,1,24,1,10,1,19,1,12,1,27,1,14,1, - 114,38,0,0,0,99,1,0,0,0,0,0,0,0,1,0, - 0,0,2,0,0,0,67,0,0,0,115,13,0,0,0,116, - 0,0,106,1,0,124,0,0,131,1,0,83,41,1,122,126, - 83,116,97,116,32,116,104,101,32,112,97,116,104,46,10,10, - 32,32,32,32,77,97,100,101,32,97,32,115,101,112,97,114, - 97,116,101,32,102,117,110,99,116,105,111,110,32,116,111,32, - 109,97,107,101,32,105,116,32,101,97,115,105,101,114,32,116, - 111,32,111,118,101,114,114,105,100,101,32,105,110,32,101,120, - 112,101,114,105,109,101,110,116,115,10,32,32,32,32,40,101, - 46,103,46,32,99,97,99,104,101,32,115,116,97,116,32,114, - 101,115,117,108,116,115,41,46,10,10,32,32,32,32,41,2, - 114,3,0,0,0,90,4,115,116,97,116,41,1,114,35,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,10,95,112,97,116,104,95,115,116,97,116,68,0,0, - 0,115,2,0,0,0,0,7,114,39,0,0,0,99,2,0, - 0,0,0,0,0,0,3,0,0,0,11,0,0,0,67,0, - 0,0,115,58,0,0,0,121,16,0,116,0,0,124,0,0, - 131,1,0,125,2,0,87,110,22,0,4,116,1,0,107,10, - 0,114,40,0,1,1,1,100,1,0,83,89,110,1,0,88, - 124,2,0,106,2,0,100,2,0,64,124,1,0,107,2,0, - 83,41,3,122,49,84,101,115,116,32,119,104,101,116,104,101, - 114,32,116,104,101,32,112,97,116,104,32,105,115,32,116,104, - 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,101, - 32,116,121,112,101,46,70,105,0,240,0,0,41,3,114,39, - 0,0,0,218,7,79,83,69,114,114,111,114,218,7,115,116, - 95,109,111,100,101,41,3,114,35,0,0,0,218,4,109,111, - 100,101,90,9,115,116,97,116,95,105,110,102,111,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,18,95,112, - 97,116,104,95,105,115,95,109,111,100,101,95,116,121,112,101, - 78,0,0,0,115,10,0,0,0,0,2,3,1,16,1,13, - 1,9,1,114,43,0,0,0,99,1,0,0,0,0,0,0, - 0,1,0,0,0,3,0,0,0,67,0,0,0,115,13,0, - 0,0,116,0,0,124,0,0,100,1,0,131,2,0,83,41, - 2,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102, - 111,114,32,111,115,46,112,97,116,104,46,105,115,102,105,108, - 101,46,105,0,128,0,0,41,1,114,43,0,0,0,41,1, - 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,12,95,112,97,116,104,95,105,115,102,105, - 108,101,87,0,0,0,115,2,0,0,0,0,2,114,44,0, - 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,67,0,0,0,115,31,0,0,0,124,0,0,115, - 18,0,116,0,0,106,1,0,131,0,0,125,0,0,116,2, - 0,124,0,0,100,1,0,131,2,0,83,41,2,122,30,82, - 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, - 115,46,112,97,116,104,46,105,115,100,105,114,46,105,0,64, - 0,0,41,3,114,3,0,0,0,218,6,103,101,116,99,119, - 100,114,43,0,0,0,41,1,114,35,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,11,95,112, - 97,116,104,95,105,115,100,105,114,92,0,0,0,115,6,0, - 0,0,0,2,6,1,12,1,114,46,0,0,0,105,182,1, - 0,0,99,3,0,0,0,0,0,0,0,6,0,0,0,17, - 0,0,0,67,0,0,0,115,193,0,0,0,100,1,0,106, - 0,0,124,0,0,116,1,0,124,0,0,131,1,0,131,2, - 0,125,3,0,116,2,0,106,3,0,124,3,0,116,2,0, - 106,4,0,116,2,0,106,5,0,66,116,2,0,106,6,0, - 66,124,2,0,100,2,0,64,131,3,0,125,4,0,121,61, - 0,116,7,0,106,8,0,124,4,0,100,3,0,131,2,0, - 143,20,0,125,5,0,124,5,0,106,9,0,124,1,0,131, - 1,0,1,87,100,4,0,81,82,88,116,2,0,106,10,0, - 124,3,0,124,0,0,131,2,0,1,87,110,59,0,4,116, - 11,0,107,10,0,114,188,0,1,1,1,121,17,0,116,2, - 0,106,12,0,124,3,0,131,1,0,1,87,110,18,0,4, - 116,11,0,107,10,0,114,180,0,1,1,1,89,110,1,0, - 88,130,0,0,89,110,1,0,88,100,4,0,83,41,5,122, - 162,66,101,115,116,45,101,102,102,111,114,116,32,102,117,110, - 99,116,105,111,110,32,116,111,32,119,114,105,116,101,32,100, - 97,116,97,32,116,111,32,97,32,112,97,116,104,32,97,116, - 111,109,105,99,97,108,108,121,46,10,32,32,32,32,66,101, - 32,112,114,101,112,97,114,101,100,32,116,111,32,104,97,110, - 100,108,101,32,97,32,70,105,108,101,69,120,105,115,116,115, - 69,114,114,111,114,32,105,102,32,99,111,110,99,117,114,114, - 101,110,116,32,119,114,105,116,105,110,103,32,111,102,32,116, - 104,101,10,32,32,32,32,116,101,109,112,111,114,97,114,121, - 32,102,105,108,101,32,105,115,32,97,116,116,101,109,112,116, - 101,100,46,122,5,123,125,46,123,125,105,182,1,0,0,90, - 2,119,98,78,41,13,218,6,102,111,114,109,97,116,218,2, - 105,100,114,3,0,0,0,90,4,111,112,101,110,90,6,79, - 95,69,88,67,76,90,7,79,95,67,82,69,65,84,90,8, - 79,95,87,82,79,78,76,89,218,3,95,105,111,218,6,70, - 105,108,101,73,79,218,5,119,114,105,116,101,218,7,114,101, - 112,108,97,99,101,114,40,0,0,0,90,6,117,110,108,105, - 110,107,41,6,114,35,0,0,0,218,4,100,97,116,97,114, - 42,0,0,0,90,8,112,97,116,104,95,116,109,112,90,2, - 102,100,218,4,102,105,108,101,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,13,95,119,114,105,116,101,95, - 97,116,111,109,105,99,99,0,0,0,115,26,0,0,0,0, - 5,24,1,9,1,33,1,3,3,21,1,20,1,20,1,13, - 1,3,1,17,1,13,1,5,1,114,55,0,0,0,105,22, - 13,0,0,233,2,0,0,0,114,13,0,0,0,115,2,0, - 0,0,13,10,90,11,95,95,112,121,99,97,99,104,101,95, - 95,122,4,111,112,116,45,122,3,46,112,121,122,4,46,112, - 121,99,78,218,12,111,112,116,105,109,105,122,97,116,105,111, - 110,99,2,0,0,0,1,0,0,0,11,0,0,0,6,0, - 0,0,67,0,0,0,115,87,1,0,0,124,1,0,100,1, - 0,107,9,0,114,76,0,116,0,0,106,1,0,100,2,0, - 116,2,0,131,2,0,1,124,2,0,100,1,0,107,9,0, - 114,58,0,100,3,0,125,3,0,116,3,0,124,3,0,131, - 1,0,130,1,0,124,1,0,114,70,0,100,4,0,110,3, - 0,100,5,0,125,2,0,116,4,0,124,0,0,131,1,0, - 92,2,0,125,4,0,125,5,0,124,5,0,106,5,0,100, - 6,0,131,1,0,92,3,0,125,6,0,125,7,0,125,8, - 0,116,6,0,106,7,0,106,8,0,125,9,0,124,9,0, - 100,1,0,107,8,0,114,154,0,116,9,0,100,7,0,131, - 1,0,130,1,0,100,4,0,106,10,0,124,6,0,114,172, - 0,124,6,0,110,3,0,124,8,0,124,7,0,124,9,0, - 103,3,0,131,1,0,125,10,0,124,2,0,100,1,0,107, - 8,0,114,241,0,116,6,0,106,11,0,106,12,0,100,8, - 0,107,2,0,114,229,0,100,4,0,125,2,0,110,12,0, - 116,6,0,106,11,0,106,12,0,125,2,0,116,13,0,124, - 2,0,131,1,0,125,2,0,124,2,0,100,4,0,107,3, - 0,114,63,1,124,2,0,106,14,0,131,0,0,115,42,1, - 116,15,0,100,9,0,106,16,0,124,2,0,131,1,0,131, - 1,0,130,1,0,100,10,0,106,16,0,124,10,0,116,17, - 0,124,2,0,131,3,0,125,10,0,116,18,0,124,4,0, - 116,19,0,124,10,0,116,20,0,100,8,0,25,23,131,3, - 0,83,41,11,97,254,2,0,0,71,105,118,101,110,32,116, - 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, - 32,102,105,108,101,44,32,114,101,116,117,114,110,32,116,104, - 101,32,112,97,116,104,32,116,111,32,105,116,115,32,46,112, - 121,99,32,102,105,108,101,46,10,10,32,32,32,32,84,104, - 101,32,46,112,121,32,102,105,108,101,32,100,111,101,115,32, - 110,111,116,32,110,101,101,100,32,116,111,32,101,120,105,115, - 116,59,32,116,104,105,115,32,115,105,109,112,108,121,32,114, - 101,116,117,114,110,115,32,116,104,101,32,112,97,116,104,32, - 116,111,32,116,104,101,10,32,32,32,32,46,112,121,99,32, - 102,105,108,101,32,99,97,108,99,117,108,97,116,101,100,32, - 97,115,32,105,102,32,116,104,101,32,46,112,121,32,102,105, - 108,101,32,119,101,114,101,32,105,109,112,111,114,116,101,100, - 46,10,10,32,32,32,32,84,104,101,32,39,111,112,116,105, - 109,105,122,97,116,105,111,110,39,32,112,97,114,97,109,101, - 116,101,114,32,99,111,110,116,114,111,108,115,32,116,104,101, - 32,112,114,101,115,117,109,101,100,32,111,112,116,105,109,105, - 122,97,116,105,111,110,32,108,101,118,101,108,32,111,102,10, - 32,32,32,32,116,104,101,32,98,121,116,101,99,111,100,101, - 32,102,105,108,101,46,32,73,102,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,105,115,32,110,111,116,32, - 78,111,110,101,44,32,116,104,101,32,115,116,114,105,110,103, - 32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,10, - 32,32,32,32,111,102,32,116,104,101,32,97,114,103,117,109, - 101,110,116,32,105,115,32,116,97,107,101,110,32,97,110,100, - 32,118,101,114,105,102,105,101,100,32,116,111,32,98,101,32, - 97,108,112,104,97,110,117,109,101,114,105,99,32,40,101,108, - 115,101,32,86,97,108,117,101,69,114,114,111,114,10,32,32, - 32,32,105,115,32,114,97,105,115,101,100,41,46,10,10,32, - 32,32,32,84,104,101,32,100,101,98,117,103,95,111,118,101, - 114,114,105,100,101,32,112,97,114,97,109,101,116,101,114,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,73, - 102,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, - 32,105,115,32,110,111,116,32,78,111,110,101,44,10,32,32, - 32,32,97,32,84,114,117,101,32,118,97,108,117,101,32,105, - 115,32,116,104,101,32,115,97,109,101,32,97,115,32,115,101, - 116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,116,111,32,116,104,101,32,101,109,112,116, - 121,32,115,116,114,105,110,103,10,32,32,32,32,119,104,105, - 108,101,32,97,32,70,97,108,115,101,32,118,97,108,117,101, - 32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116, - 111,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,116,111,32,39,49,39,46, - 10,10,32,32,32,32,73,102,32,115,121,115,46,105,109,112, - 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104, - 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104, - 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101, - 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, - 46,10,10,32,32,32,32,78,122,70,116,104,101,32,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114, - 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99, - 97,116,101,100,59,32,117,115,101,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,105,110,115,116,101,97,100, - 122,50,100,101,98,117,103,95,111,118,101,114,114,105,100,101, - 32,111,114,32,111,112,116,105,109,105,122,97,116,105,111,110, - 32,109,117,115,116,32,98,101,32,115,101,116,32,116,111,32, - 78,111,110,101,114,30,0,0,0,114,29,0,0,0,218,1, - 46,122,36,115,121,115,46,105,109,112,108,101,109,101,110,116, - 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, - 105,115,32,78,111,110,101,233,0,0,0,0,122,24,123,33, - 114,125,32,105,115,32,110,111,116,32,97,108,112,104,97,110, - 117,109,101,114,105,99,122,7,123,125,46,123,125,123,125,41, - 21,218,9,95,119,97,114,110,105,110,103,115,218,4,119,97, - 114,110,218,18,68,101,112,114,101,99,97,116,105,111,110,87, - 97,114,110,105,110,103,218,9,84,121,112,101,69,114,114,111, - 114,114,38,0,0,0,114,32,0,0,0,114,7,0,0,0, - 218,14,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 218,9,99,97,99,104,101,95,116,97,103,218,19,78,111,116, - 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, - 114,26,0,0,0,218,5,102,108,97,103,115,218,8,111,112, - 116,105,109,105,122,101,218,3,115,116,114,218,7,105,115,97, - 108,110,117,109,218,10,86,97,108,117,101,69,114,114,111,114, - 114,47,0,0,0,218,4,95,79,80,84,114,28,0,0,0, - 218,8,95,80,89,67,65,67,72,69,218,17,66,89,84,69, - 67,79,68,69,95,83,85,70,70,73,88,69,83,41,11,114, - 35,0,0,0,90,14,100,101,98,117,103,95,111,118,101,114, - 114,105,100,101,114,57,0,0,0,218,7,109,101,115,115,97, - 103,101,218,4,104,101,97,100,114,37,0,0,0,90,4,98, - 97,115,101,218,3,115,101,112,218,4,114,101,115,116,90,3, - 116,97,103,90,15,97,108,109,111,115,116,95,102,105,108,101, - 110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,17,99,97,99,104,101,95,102,114,111,109,95, - 115,111,117,114,99,101,246,0,0,0,115,46,0,0,0,0, - 18,12,1,9,1,7,1,12,1,6,1,12,1,18,1,18, - 1,24,1,12,1,12,1,12,1,36,1,12,1,18,1,9, - 2,12,1,12,1,12,1,12,1,21,1,21,1,114,79,0, - 0,0,99,1,0,0,0,0,0,0,0,8,0,0,0,5, - 0,0,0,67,0,0,0,115,62,1,0,0,116,0,0,106, - 1,0,106,2,0,100,1,0,107,8,0,114,30,0,116,3, - 0,100,2,0,131,1,0,130,1,0,116,4,0,124,0,0, - 131,1,0,92,2,0,125,1,0,125,2,0,116,4,0,124, - 1,0,131,1,0,92,2,0,125,1,0,125,3,0,124,3, - 0,116,5,0,107,3,0,114,102,0,116,6,0,100,3,0, - 106,7,0,116,5,0,124,0,0,131,2,0,131,1,0,130, - 1,0,124,2,0,106,8,0,100,4,0,131,1,0,125,4, - 0,124,4,0,100,11,0,107,7,0,114,153,0,116,6,0, - 100,7,0,106,7,0,124,2,0,131,1,0,131,1,0,130, - 1,0,110,125,0,124,4,0,100,6,0,107,2,0,114,22, - 1,124,2,0,106,9,0,100,4,0,100,5,0,131,2,0, - 100,12,0,25,125,5,0,124,5,0,106,10,0,116,11,0, - 131,1,0,115,223,0,116,6,0,100,8,0,106,7,0,116, - 11,0,131,1,0,131,1,0,130,1,0,124,5,0,116,12, - 0,116,11,0,131,1,0,100,1,0,133,2,0,25,125,6, - 0,124,6,0,106,13,0,131,0,0,115,22,1,116,6,0, - 100,9,0,106,7,0,124,5,0,131,1,0,131,1,0,130, - 1,0,124,2,0,106,14,0,100,4,0,131,1,0,100,10, - 0,25,125,7,0,116,15,0,124,1,0,124,7,0,116,16, - 0,100,10,0,25,23,131,2,0,83,41,13,97,110,1,0, - 0,71,105,118,101,110,32,116,104,101,32,112,97,116,104,32, - 116,111,32,97,32,46,112,121,99,46,32,102,105,108,101,44, - 32,114,101,116,117,114,110,32,116,104,101,32,112,97,116,104, - 32,116,111,32,105,116,115,32,46,112,121,32,102,105,108,101, - 46,10,10,32,32,32,32,84,104,101,32,46,112,121,99,32, - 102,105,108,101,32,100,111,101,115,32,110,111,116,32,110,101, - 101,100,32,116,111,32,101,120,105,115,116,59,32,116,104,105, - 115,32,115,105,109,112,108,121,32,114,101,116,117,114,110,115, - 32,116,104,101,32,112,97,116,104,32,116,111,10,32,32,32, - 32,116,104,101,32,46,112,121,32,102,105,108,101,32,99,97, - 108,99,117,108,97,116,101,100,32,116,111,32,99,111,114,114, - 101,115,112,111,110,100,32,116,111,32,116,104,101,32,46,112, - 121,99,32,102,105,108,101,46,32,32,73,102,32,112,97,116, - 104,32,100,111,101,115,10,32,32,32,32,110,111,116,32,99, - 111,110,102,111,114,109,32,116,111,32,80,69,80,32,51,49, - 52,55,47,52,56,56,32,102,111,114,109,97,116,44,32,86, - 97,108,117,101,69,114,114,111,114,32,119,105,108,108,32,98, - 101,32,114,97,105,115,101,100,46,32,73,102,10,32,32,32, - 32,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, - 32,78,111,110,101,32,116,104,101,110,32,78,111,116,73,109, - 112,108,101,109,101,110,116,101,100,69,114,114,111,114,32,105, - 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, - 122,36,115,121,115,46,105,109,112,108,101,109,101,110,116,97, - 116,105,111,110,46,99,97,99,104,101,95,116,97,103,32,105, - 115,32,78,111,110,101,122,37,123,125,32,110,111,116,32,98, - 111,116,116,111,109,45,108,101,118,101,108,32,100,105,114,101, - 99,116,111,114,121,32,105,110,32,123,33,114,125,114,58,0, - 0,0,114,56,0,0,0,233,3,0,0,0,122,33,101,120, - 112,101,99,116,101,100,32,111,110,108,121,32,50,32,111,114, - 32,51,32,100,111,116,115,32,105,110,32,123,33,114,125,122, - 57,111,112,116,105,109,105,122,97,116,105,111,110,32,112,111, - 114,116,105,111,110,32,111,102,32,102,105,108,101,110,97,109, - 101,32,100,111,101,115,32,110,111,116,32,115,116,97,114,116, - 32,119,105,116,104,32,123,33,114,125,122,52,111,112,116,105, - 109,105,122,97,116,105,111,110,32,108,101,118,101,108,32,123, - 33,114,125,32,105,115,32,110,111,116,32,97,110,32,97,108, - 112,104,97,110,117,109,101,114,105,99,32,118,97,108,117,101, - 114,59,0,0,0,62,2,0,0,0,114,56,0,0,0,114, - 80,0,0,0,233,254,255,255,255,41,17,114,7,0,0,0, - 114,64,0,0,0,114,65,0,0,0,114,66,0,0,0,114, - 38,0,0,0,114,73,0,0,0,114,71,0,0,0,114,47, - 0,0,0,218,5,99,111,117,110,116,114,34,0,0,0,114, - 9,0,0,0,114,72,0,0,0,114,31,0,0,0,114,70, - 0,0,0,218,9,112,97,114,116,105,116,105,111,110,114,28, - 0,0,0,218,15,83,79,85,82,67,69,95,83,85,70,70, - 73,88,69,83,41,8,114,35,0,0,0,114,76,0,0,0, - 90,16,112,121,99,97,99,104,101,95,102,105,108,101,110,97, - 109,101,90,7,112,121,99,97,99,104,101,90,9,100,111,116, - 95,99,111,117,110,116,114,57,0,0,0,90,9,111,112,116, - 95,108,101,118,101,108,90,13,98,97,115,101,95,102,105,108, - 101,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,17,115,111,117,114,99,101,95,102,114,111, - 109,95,99,97,99,104,101,34,1,0,0,115,44,0,0,0, - 0,9,18,1,12,1,18,1,18,1,12,1,9,1,15,1, - 15,1,12,1,9,1,15,1,12,1,22,1,15,1,9,1, - 12,1,22,1,12,1,9,1,12,1,19,1,114,85,0,0, - 0,99,1,0,0,0,0,0,0,0,5,0,0,0,12,0, - 0,0,67,0,0,0,115,164,0,0,0,116,0,0,124,0, - 0,131,1,0,100,1,0,107,2,0,114,22,0,100,2,0, - 83,124,0,0,106,1,0,100,3,0,131,1,0,92,3,0, - 125,1,0,125,2,0,125,3,0,124,1,0,12,115,81,0, - 124,3,0,106,2,0,131,0,0,100,7,0,100,8,0,133, - 2,0,25,100,6,0,107,3,0,114,85,0,124,0,0,83, - 121,16,0,116,3,0,124,0,0,131,1,0,125,4,0,87, - 110,40,0,4,116,4,0,116,5,0,102,2,0,107,10,0, - 114,143,0,1,1,1,124,0,0,100,2,0,100,9,0,133, - 2,0,25,125,4,0,89,110,1,0,88,116,6,0,124,4, - 0,131,1,0,114,160,0,124,4,0,83,124,0,0,83,41, - 10,122,188,67,111,110,118,101,114,116,32,97,32,98,121,116, - 101,99,111,100,101,32,102,105,108,101,32,112,97,116,104,32, - 116,111,32,97,32,115,111,117,114,99,101,32,112,97,116,104, - 32,40,105,102,32,112,111,115,115,105,98,108,101,41,46,10, - 10,32,32,32,32,84,104,105,115,32,102,117,110,99,116,105, - 111,110,32,101,120,105,115,116,115,32,112,117,114,101,108,121, - 32,102,111,114,32,98,97,99,107,119,97,114,100,115,45,99, - 111,109,112,97,116,105,98,105,108,105,116,121,32,102,111,114, - 10,32,32,32,32,80,121,73,109,112,111,114,116,95,69,120, - 101,99,67,111,100,101,77,111,100,117,108,101,87,105,116,104, - 70,105,108,101,110,97,109,101,115,40,41,32,105,110,32,116, - 104,101,32,67,32,65,80,73,46,10,10,32,32,32,32,114, - 59,0,0,0,78,114,58,0,0,0,114,80,0,0,0,114, - 29,0,0,0,90,2,112,121,233,253,255,255,255,233,255,255, - 255,255,114,87,0,0,0,41,7,114,31,0,0,0,114,32, - 0,0,0,218,5,108,111,119,101,114,114,85,0,0,0,114, - 66,0,0,0,114,71,0,0,0,114,44,0,0,0,41,5, - 218,13,98,121,116,101,99,111,100,101,95,112,97,116,104,114, - 78,0,0,0,114,36,0,0,0,90,9,101,120,116,101,110, - 115,105,111,110,218,11,115,111,117,114,99,101,95,112,97,116, - 104,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,15,95,103,101,116,95,115,111,117,114,99,101,102,105,108, - 101,67,1,0,0,115,20,0,0,0,0,7,18,1,4,1, - 24,1,35,1,4,1,3,1,16,1,19,1,21,1,114,91, - 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, - 11,0,0,0,67,0,0,0,115,92,0,0,0,124,0,0, - 106,0,0,116,1,0,116,2,0,131,1,0,131,1,0,114, - 59,0,121,14,0,116,3,0,124,0,0,131,1,0,83,87, - 113,88,0,4,116,4,0,107,10,0,114,55,0,1,1,1, - 89,113,88,0,88,110,29,0,124,0,0,106,0,0,116,1, - 0,116,5,0,131,1,0,131,1,0,114,84,0,124,0,0, - 83,100,0,0,83,100,0,0,83,41,1,78,41,6,218,8, - 101,110,100,115,119,105,116,104,218,5,116,117,112,108,101,114, - 84,0,0,0,114,79,0,0,0,114,66,0,0,0,114,74, - 0,0,0,41,1,218,8,102,105,108,101,110,97,109,101,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,11, - 95,103,101,116,95,99,97,99,104,101,100,86,1,0,0,115, - 16,0,0,0,0,1,21,1,3,1,14,1,13,1,8,1, - 21,1,4,2,114,95,0,0,0,99,1,0,0,0,0,0, - 0,0,2,0,0,0,11,0,0,0,67,0,0,0,115,60, - 0,0,0,121,19,0,116,0,0,124,0,0,131,1,0,106, - 1,0,125,1,0,87,110,24,0,4,116,2,0,107,10,0, - 114,45,0,1,1,1,100,1,0,125,1,0,89,110,1,0, - 88,124,1,0,100,2,0,79,125,1,0,124,1,0,83,41, - 3,122,51,67,97,108,99,117,108,97,116,101,32,116,104,101, - 32,109,111,100,101,32,112,101,114,109,105,115,115,105,111,110, - 115,32,102,111,114,32,97,32,98,121,116,101,99,111,100,101, - 32,102,105,108,101,46,105,182,1,0,0,233,128,0,0,0, - 41,3,114,39,0,0,0,114,41,0,0,0,114,40,0,0, - 0,41,2,114,35,0,0,0,114,42,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,10,95,99, - 97,108,99,95,109,111,100,101,98,1,0,0,115,12,0,0, - 0,0,2,3,1,19,1,13,1,11,3,10,1,114,97,0, - 0,0,218,9,118,101,114,98,111,115,105,116,121,114,29,0, - 0,0,99,1,0,0,0,1,0,0,0,3,0,0,0,4, - 0,0,0,71,0,0,0,115,75,0,0,0,116,0,0,106, - 1,0,106,2,0,124,1,0,107,5,0,114,71,0,124,0, - 0,106,3,0,100,6,0,131,1,0,115,43,0,100,3,0, - 124,0,0,23,125,0,0,116,4,0,124,0,0,106,5,0, - 124,2,0,140,0,0,100,4,0,116,0,0,106,6,0,131, - 1,1,1,100,5,0,83,41,7,122,61,80,114,105,110,116, - 32,116,104,101,32,109,101,115,115,97,103,101,32,116,111,32, - 115,116,100,101,114,114,32,105,102,32,45,118,47,80,89,84, - 72,79,78,86,69,82,66,79,83,69,32,105,115,32,116,117, - 114,110,101,100,32,111,110,46,250,1,35,250,7,105,109,112, - 111,114,116,32,122,2,35,32,114,54,0,0,0,78,41,2, - 114,99,0,0,0,114,100,0,0,0,41,7,114,7,0,0, - 0,114,67,0,0,0,218,7,118,101,114,98,111,115,101,114, - 9,0,0,0,218,5,112,114,105,110,116,114,47,0,0,0, - 218,6,115,116,100,101,114,114,41,3,114,75,0,0,0,114, - 98,0,0,0,218,4,97,114,103,115,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,16,95,118,101,114,98, - 111,115,101,95,109,101,115,115,97,103,101,110,1,0,0,115, - 8,0,0,0,0,2,18,1,15,1,10,1,114,105,0,0, - 0,99,1,0,0,0,0,0,0,0,3,0,0,0,11,0, - 0,0,3,0,0,0,115,84,0,0,0,100,1,0,135,0, - 0,102,1,0,100,2,0,100,3,0,134,1,0,125,1,0, - 121,13,0,116,0,0,106,1,0,125,2,0,87,110,30,0, - 4,116,2,0,107,10,0,114,66,0,1,1,1,100,4,0, - 100,5,0,132,0,0,125,2,0,89,110,1,0,88,124,2, - 0,124,1,0,136,0,0,131,2,0,1,124,1,0,83,41, - 6,122,252,68,101,99,111,114,97,116,111,114,32,116,111,32, - 118,101,114,105,102,121,32,116,104,97,116,32,116,104,101,32, - 109,111,100,117,108,101,32,98,101,105,110,103,32,114,101,113, - 117,101,115,116,101,100,32,109,97,116,99,104,101,115,32,116, - 104,101,32,111,110,101,32,116,104,101,10,32,32,32,32,108, - 111,97,100,101,114,32,99,97,110,32,104,97,110,100,108,101, - 46,10,10,32,32,32,32,84,104,101,32,102,105,114,115,116, - 32,97,114,103,117,109,101,110,116,32,40,115,101,108,102,41, - 32,109,117,115,116,32,100,101,102,105,110,101,32,95,110,97, - 109,101,32,119,104,105,99,104,32,116,104,101,32,115,101,99, - 111,110,100,32,97,114,103,117,109,101,110,116,32,105,115,10, - 32,32,32,32,99,111,109,112,97,114,101,100,32,97,103,97, - 105,110,115,116,46,32,73,102,32,116,104,101,32,99,111,109, - 112,97,114,105,115,111,110,32,102,97,105,108,115,32,116,104, - 101,110,32,73,109,112,111,114,116,69,114,114,111,114,32,105, - 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, - 99,2,0,0,0,0,0,0,0,4,0,0,0,5,0,0, - 0,31,0,0,0,115,89,0,0,0,124,1,0,100,0,0, - 107,8,0,114,24,0,124,0,0,106,0,0,125,1,0,110, - 46,0,124,0,0,106,0,0,124,1,0,107,3,0,114,70, - 0,116,1,0,100,1,0,124,0,0,106,0,0,124,1,0, - 102,2,0,22,100,2,0,124,1,0,131,1,1,130,1,0, - 136,0,0,124,0,0,124,1,0,124,2,0,124,3,0,142, - 2,0,83,41,3,78,122,30,108,111,97,100,101,114,32,102, - 111,114,32,37,115,32,99,97,110,110,111,116,32,104,97,110, - 100,108,101,32,37,115,218,4,110,97,109,101,41,2,114,106, - 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114, - 41,4,218,4,115,101,108,102,114,106,0,0,0,114,104,0, - 0,0,90,6,107,119,97,114,103,115,41,1,218,6,109,101, - 116,104,111,100,114,4,0,0,0,114,5,0,0,0,218,19, - 95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112, - 112,101,114,126,1,0,0,115,12,0,0,0,0,1,12,1, - 12,1,15,1,6,1,25,1,122,40,95,99,104,101,99,107, - 95,110,97,109,101,46,60,108,111,99,97,108,115,62,46,95, - 99,104,101,99,107,95,110,97,109,101,95,119,114,97,112,112, - 101,114,99,2,0,0,0,0,0,0,0,3,0,0,0,7, - 0,0,0,83,0,0,0,115,92,0,0,0,120,66,0,100, - 1,0,100,2,0,100,3,0,100,4,0,103,4,0,68,93, - 46,0,125,2,0,116,0,0,124,1,0,124,2,0,131,2, - 0,114,19,0,116,1,0,124,0,0,124,2,0,116,2,0, - 124,1,0,124,2,0,131,2,0,131,3,0,1,113,19,0, - 87,124,0,0,106,3,0,106,4,0,124,1,0,106,3,0, - 131,1,0,1,100,0,0,83,41,5,78,218,10,95,95,109, - 111,100,117,108,101,95,95,218,8,95,95,110,97,109,101,95, - 95,218,12,95,95,113,117,97,108,110,97,109,101,95,95,218, - 7,95,95,100,111,99,95,95,41,5,218,7,104,97,115,97, - 116,116,114,218,7,115,101,116,97,116,116,114,218,7,103,101, - 116,97,116,116,114,218,8,95,95,100,105,99,116,95,95,218, - 6,117,112,100,97,116,101,41,3,90,3,110,101,119,90,3, - 111,108,100,114,52,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,5,95,119,114,97,112,137,1, - 0,0,115,8,0,0,0,0,1,25,1,15,1,29,1,122, - 26,95,99,104,101,99,107,95,110,97,109,101,46,60,108,111, - 99,97,108,115,62,46,95,119,114,97,112,41,3,218,10,95, - 98,111,111,116,115,116,114,97,112,114,120,0,0,0,218,9, - 78,97,109,101,69,114,114,111,114,41,3,114,109,0,0,0, - 114,110,0,0,0,114,120,0,0,0,114,4,0,0,0,41, - 1,114,109,0,0,0,114,5,0,0,0,218,11,95,99,104, - 101,99,107,95,110,97,109,101,118,1,0,0,115,14,0,0, - 0,0,8,21,7,3,1,13,1,13,2,17,5,13,1,114, - 123,0,0,0,99,2,0,0,0,0,0,0,0,5,0,0, - 0,4,0,0,0,67,0,0,0,115,84,0,0,0,124,0, - 0,106,0,0,124,1,0,131,1,0,92,2,0,125,2,0, - 125,3,0,124,2,0,100,1,0,107,8,0,114,80,0,116, - 1,0,124,3,0,131,1,0,114,80,0,100,2,0,125,4, - 0,116,2,0,106,3,0,124,4,0,106,4,0,124,3,0, - 100,3,0,25,131,1,0,116,5,0,131,2,0,1,124,2, - 0,83,41,4,122,155,84,114,121,32,116,111,32,102,105,110, - 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, - 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, - 117,108,101,32,98,121,32,100,101,108,101,103,97,116,105,110, - 103,32,116,111,10,32,32,32,32,115,101,108,102,46,102,105, - 110,100,95,108,111,97,100,101,114,40,41,46,10,10,32,32, - 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,32,105,110,32,102, - 97,118,111,114,32,111,102,32,102,105,110,100,101,114,46,102, - 105,110,100,95,115,112,101,99,40,41,46,10,10,32,32,32, - 32,78,122,44,78,111,116,32,105,109,112,111,114,116,105,110, - 103,32,100,105,114,101,99,116,111,114,121,32,123,125,58,32, - 109,105,115,115,105,110,103,32,95,95,105,110,105,116,95,95, - 114,59,0,0,0,41,6,218,11,102,105,110,100,95,108,111, - 97,100,101,114,114,31,0,0,0,114,60,0,0,0,114,61, - 0,0,0,114,47,0,0,0,218,13,73,109,112,111,114,116, - 87,97,114,110,105,110,103,41,5,114,108,0,0,0,218,8, - 102,117,108,108,110,97,109,101,218,6,108,111,97,100,101,114, - 218,8,112,111,114,116,105,111,110,115,218,3,109,115,103,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17, - 95,102,105,110,100,95,109,111,100,117,108,101,95,115,104,105, - 109,146,1,0,0,115,10,0,0,0,0,10,21,1,24,1, - 6,1,29,1,114,130,0,0,0,99,4,0,0,0,0,0, - 0,0,11,0,0,0,19,0,0,0,67,0,0,0,115,240, - 1,0,0,105,0,0,125,4,0,124,2,0,100,1,0,107, - 9,0,114,31,0,124,2,0,124,4,0,100,2,0,60,110, - 6,0,100,3,0,125,2,0,124,3,0,100,1,0,107,9, - 0,114,59,0,124,3,0,124,4,0,100,4,0,60,124,0, - 0,100,1,0,100,5,0,133,2,0,25,125,5,0,124,0, - 0,100,5,0,100,6,0,133,2,0,25,125,6,0,124,0, - 0,100,6,0,100,7,0,133,2,0,25,125,7,0,124,5, - 0,116,0,0,107,3,0,114,168,0,100,8,0,106,1,0, - 124,2,0,124,5,0,131,2,0,125,8,0,116,2,0,100, - 9,0,124,8,0,131,2,0,1,116,3,0,124,8,0,124, - 4,0,141,1,0,130,1,0,110,119,0,116,4,0,124,6, - 0,131,1,0,100,5,0,107,3,0,114,229,0,100,10,0, + 0,114,72,0,116,0,0,106,1,0,106,2,0,116,4,0, + 131,1,0,114,45,0,100,1,0,137,0,0,110,6,0,100, + 2,0,137,0,0,135,0,0,102,1,0,100,3,0,100,4, + 0,134,0,0,125,0,0,110,12,0,100,5,0,100,4,0, + 132,0,0,125,0,0,124,0,0,83,41,6,78,90,12,80, + 89,84,72,79,78,67,65,83,69,79,75,115,12,0,0,0, + 80,89,84,72,79,78,67,65,83,69,79,75,99,0,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,19,0,0, + 0,115,13,0,0,0,136,0,0,116,0,0,106,1,0,107, + 6,0,83,41,1,122,53,84,114,117,101,32,105,102,32,102, + 105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,101, + 32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,110, + 115,101,110,115,105,116,105,118,101,108,121,46,41,2,218,3, + 95,111,115,90,7,101,110,118,105,114,111,110,169,0,41,1, + 218,3,107,101,121,114,4,0,0,0,250,38,60,102,114,111, + 122,101,110,32,105,109,112,111,114,116,108,105,98,46,95,98, + 111,111,116,115,116,114,97,112,95,101,120,116,101,114,110,97, + 108,62,218,11,95,114,101,108,97,120,95,99,97,115,101,37, + 0,0,0,115,2,0,0,0,0,2,122,37,95,109,97,107, + 101,95,114,101,108,97,120,95,99,97,115,101,46,60,108,111, + 99,97,108,115,62,46,95,114,101,108,97,120,95,99,97,115, + 101,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,83,0,0,0,115,4,0,0,0,100,1,0,83,41, + 2,122,53,84,114,117,101,32,105,102,32,102,105,108,101,110, + 97,109,101,115,32,109,117,115,116,32,98,101,32,99,104,101, + 99,107,101,100,32,99,97,115,101,45,105,110,115,101,110,115, + 105,116,105,118,101,108,121,46,70,114,4,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,7,0,0,0,41,0,0,0,115,2,0,0,0, + 0,2,41,5,218,3,115,121,115,218,8,112,108,97,116,102, + 111,114,109,218,10,115,116,97,114,116,115,119,105,116,104,218, + 27,95,67,65,83,69,95,73,78,83,69,78,83,73,84,73, + 86,69,95,80,76,65,84,70,79,82,77,83,218,35,95,67, + 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95, + 80,76,65,84,70,79,82,77,83,95,83,84,82,95,75,69, + 89,41,1,114,7,0,0,0,114,4,0,0,0,41,1,114, + 5,0,0,0,114,6,0,0,0,218,16,95,109,97,107,101, + 95,114,101,108,97,120,95,99,97,115,101,30,0,0,0,115, + 14,0,0,0,0,1,18,1,18,1,9,2,6,2,21,4, + 12,3,114,13,0,0,0,99,1,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,0, + 0,116,0,0,124,0,0,131,1,0,100,1,0,64,106,1, + 0,100,2,0,100,3,0,131,2,0,83,41,4,122,42,67, + 111,110,118,101,114,116,32,97,32,51,50,45,98,105,116,32, + 105,110,116,101,103,101,114,32,116,111,32,108,105,116,116,108, + 101,45,101,110,100,105,97,110,46,108,3,0,0,0,255,127, + 255,127,3,0,233,4,0,0,0,218,6,108,105,116,116,108, + 101,41,2,218,3,105,110,116,218,8,116,111,95,98,121,116, + 101,115,41,1,218,1,120,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,7,95,119,95,108,111,110,103,47, + 0,0,0,115,2,0,0,0,0,2,114,19,0,0,0,99, + 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 67,0,0,0,115,16,0,0,0,116,0,0,106,1,0,124, + 0,0,100,1,0,131,2,0,83,41,2,122,47,67,111,110, + 118,101,114,116,32,52,32,98,121,116,101,115,32,105,110,32, + 108,105,116,116,108,101,45,101,110,100,105,97,110,32,116,111, + 32,97,110,32,105,110,116,101,103,101,114,46,114,15,0,0, + 0,41,2,114,16,0,0,0,218,10,102,114,111,109,95,98, + 121,116,101,115,41,1,90,9,105,110,116,95,98,121,116,101, + 115,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,7,95,114,95,108,111,110,103,52,0,0,0,115,2,0, + 0,0,0,2,114,21,0,0,0,99,0,0,0,0,0,0, + 0,0,1,0,0,0,3,0,0,0,71,0,0,0,115,26, + 0,0,0,116,0,0,106,1,0,100,1,0,100,2,0,132, + 0,0,124,0,0,68,131,1,0,131,1,0,83,41,3,122, + 31,82,101,112,108,97,99,101,109,101,110,116,32,102,111,114, + 32,111,115,46,112,97,116,104,46,106,111,105,110,40,41,46, + 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,83,0,0,0,115,37,0,0,0,103,0,0,124,0,0, + 93,27,0,125,1,0,124,1,0,114,6,0,124,1,0,106, + 0,0,116,1,0,131,1,0,145,2,0,113,6,0,83,114, + 4,0,0,0,41,2,218,6,114,115,116,114,105,112,218,15, + 112,97,116,104,95,115,101,112,97,114,97,116,111,114,115,41, + 2,218,2,46,48,218,4,112,97,114,116,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,250,10,60,108,105,115, + 116,99,111,109,112,62,59,0,0,0,115,2,0,0,0,9, + 1,122,30,95,112,97,116,104,95,106,111,105,110,46,60,108, + 111,99,97,108,115,62,46,60,108,105,115,116,99,111,109,112, + 62,41,2,218,8,112,97,116,104,95,115,101,112,218,4,106, + 111,105,110,41,1,218,10,112,97,116,104,95,112,97,114,116, + 115,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,10,95,112,97,116,104,95,106,111,105,110,57,0,0,0, + 115,4,0,0,0,0,2,15,1,114,30,0,0,0,99,1, + 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, + 0,0,0,115,134,0,0,0,116,0,0,116,1,0,131,1, + 0,100,1,0,107,2,0,114,52,0,124,0,0,106,2,0, + 116,3,0,131,1,0,92,3,0,125,1,0,125,2,0,125, + 3,0,124,1,0,124,3,0,102,2,0,83,120,69,0,116, + 4,0,124,0,0,131,1,0,68,93,55,0,125,4,0,124, + 4,0,116,1,0,107,6,0,114,65,0,124,0,0,106,5, + 0,124,4,0,100,2,0,100,1,0,131,1,1,92,2,0, + 125,1,0,125,3,0,124,1,0,124,3,0,102,2,0,83, + 113,65,0,87,100,3,0,124,0,0,102,2,0,83,41,4, + 122,32,82,101,112,108,97,99,101,109,101,110,116,32,102,111, + 114,32,111,115,46,112,97,116,104,46,115,112,108,105,116,40, + 41,46,233,1,0,0,0,90,8,109,97,120,115,112,108,105, + 116,218,0,41,6,218,3,108,101,110,114,23,0,0,0,218, + 10,114,112,97,114,116,105,116,105,111,110,114,27,0,0,0, + 218,8,114,101,118,101,114,115,101,100,218,6,114,115,112,108, + 105,116,41,5,218,4,112,97,116,104,90,5,102,114,111,110, + 116,218,1,95,218,4,116,97,105,108,114,18,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,11, + 95,112,97,116,104,95,115,112,108,105,116,63,0,0,0,115, + 16,0,0,0,0,2,18,1,24,1,10,1,19,1,12,1, + 27,1,14,1,114,40,0,0,0,99,1,0,0,0,0,0, + 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,13, + 0,0,0,116,0,0,106,1,0,124,0,0,131,1,0,83, + 41,1,122,126,83,116,97,116,32,116,104,101,32,112,97,116, + 104,46,10,10,32,32,32,32,77,97,100,101,32,97,32,115, + 101,112,97,114,97,116,101,32,102,117,110,99,116,105,111,110, + 32,116,111,32,109,97,107,101,32,105,116,32,101,97,115,105, + 101,114,32,116,111,32,111,118,101,114,114,105,100,101,32,105, + 110,32,101,120,112,101,114,105,109,101,110,116,115,10,32,32, + 32,32,40,101,46,103,46,32,99,97,99,104,101,32,115,116, + 97,116,32,114,101,115,117,108,116,115,41,46,10,10,32,32, + 32,32,41,2,114,3,0,0,0,90,4,115,116,97,116,41, + 1,114,37,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,10,95,112,97,116,104,95,115,116,97, + 116,75,0,0,0,115,2,0,0,0,0,7,114,41,0,0, + 0,99,2,0,0,0,0,0,0,0,3,0,0,0,11,0, + 0,0,67,0,0,0,115,58,0,0,0,121,16,0,116,0, + 0,124,0,0,131,1,0,125,2,0,87,110,22,0,4,116, + 1,0,107,10,0,114,40,0,1,1,1,100,1,0,83,89, + 110,1,0,88,124,2,0,106,2,0,100,2,0,64,124,1, + 0,107,2,0,83,41,3,122,49,84,101,115,116,32,119,104, + 101,116,104,101,114,32,116,104,101,32,112,97,116,104,32,105, + 115,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, + 109,111,100,101,32,116,121,112,101,46,70,105,0,240,0,0, + 41,3,114,41,0,0,0,218,7,79,83,69,114,114,111,114, + 218,7,115,116,95,109,111,100,101,41,3,114,37,0,0,0, + 218,4,109,111,100,101,90,9,115,116,97,116,95,105,110,102, + 111,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,18,95,112,97,116,104,95,105,115,95,109,111,100,101,95, + 116,121,112,101,85,0,0,0,115,10,0,0,0,0,2,3, + 1,16,1,13,1,9,1,114,45,0,0,0,99,1,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,13,0,0,0,116,0,0,124,0,0,100,1,0,131, + 2,0,83,41,2,122,31,82,101,112,108,97,99,101,109,101, + 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105, + 115,102,105,108,101,46,105,0,128,0,0,41,1,114,45,0, + 0,0,41,1,114,37,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,12,95,112,97,116,104,95, + 105,115,102,105,108,101,94,0,0,0,115,2,0,0,0,0, + 2,114,46,0,0,0,99,1,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,115,31,0,0,0, + 124,0,0,115,18,0,116,0,0,106,1,0,131,0,0,125, + 0,0,116,2,0,124,0,0,100,1,0,131,2,0,83,41, + 2,122,30,82,101,112,108,97,99,101,109,101,110,116,32,102, + 111,114,32,111,115,46,112,97,116,104,46,105,115,100,105,114, + 46,105,0,64,0,0,41,3,114,3,0,0,0,218,6,103, + 101,116,99,119,100,114,45,0,0,0,41,1,114,37,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,11,95,112,97,116,104,95,105,115,100,105,114,99,0,0, + 0,115,6,0,0,0,0,2,6,1,12,1,114,48,0,0, + 0,105,182,1,0,0,99,3,0,0,0,0,0,0,0,6, + 0,0,0,17,0,0,0,67,0,0,0,115,193,0,0,0, + 100,1,0,106,0,0,124,0,0,116,1,0,124,0,0,131, + 1,0,131,2,0,125,3,0,116,2,0,106,3,0,124,3, + 0,116,2,0,106,4,0,116,2,0,106,5,0,66,116,2, + 0,106,6,0,66,124,2,0,100,2,0,64,131,3,0,125, + 4,0,121,61,0,116,7,0,106,8,0,124,4,0,100,3, + 0,131,2,0,143,20,0,125,5,0,124,5,0,106,9,0, + 124,1,0,131,1,0,1,87,100,4,0,81,82,88,116,2, + 0,106,10,0,124,3,0,124,0,0,131,2,0,1,87,110, + 59,0,4,116,11,0,107,10,0,114,188,0,1,1,1,121, + 17,0,116,2,0,106,12,0,124,3,0,131,1,0,1,87, + 110,18,0,4,116,11,0,107,10,0,114,180,0,1,1,1, + 89,110,1,0,88,130,0,0,89,110,1,0,88,100,4,0, + 83,41,5,122,162,66,101,115,116,45,101,102,102,111,114,116, + 32,102,117,110,99,116,105,111,110,32,116,111,32,119,114,105, + 116,101,32,100,97,116,97,32,116,111,32,97,32,112,97,116, + 104,32,97,116,111,109,105,99,97,108,108,121,46,10,32,32, + 32,32,66,101,32,112,114,101,112,97,114,101,100,32,116,111, + 32,104,97,110,100,108,101,32,97,32,70,105,108,101,69,120, + 105,115,116,115,69,114,114,111,114,32,105,102,32,99,111,110, + 99,117,114,114,101,110,116,32,119,114,105,116,105,110,103,32, + 111,102,32,116,104,101,10,32,32,32,32,116,101,109,112,111, + 114,97,114,121,32,102,105,108,101,32,105,115,32,97,116,116, + 101,109,112,116,101,100,46,122,5,123,125,46,123,125,105,182, + 1,0,0,90,2,119,98,78,41,13,218,6,102,111,114,109, + 97,116,218,2,105,100,114,3,0,0,0,90,4,111,112,101, + 110,90,6,79,95,69,88,67,76,90,7,79,95,67,82,69, + 65,84,90,8,79,95,87,82,79,78,76,89,218,3,95,105, + 111,218,6,70,105,108,101,73,79,218,5,119,114,105,116,101, + 218,7,114,101,112,108,97,99,101,114,42,0,0,0,90,6, + 117,110,108,105,110,107,41,6,114,37,0,0,0,218,4,100, + 97,116,97,114,44,0,0,0,90,8,112,97,116,104,95,116, + 109,112,90,2,102,100,218,4,102,105,108,101,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,13,95,119,114, + 105,116,101,95,97,116,111,109,105,99,106,0,0,0,115,26, + 0,0,0,0,5,24,1,9,1,33,1,3,3,21,1,20, + 1,20,1,13,1,3,1,17,1,13,1,5,1,114,57,0, + 0,0,105,23,13,0,0,233,2,0,0,0,114,15,0,0, + 0,115,2,0,0,0,13,10,90,11,95,95,112,121,99,97, + 99,104,101,95,95,122,4,111,112,116,45,122,3,46,112,121, + 122,4,46,112,121,99,78,218,12,111,112,116,105,109,105,122, + 97,116,105,111,110,99,2,0,0,0,1,0,0,0,11,0, + 0,0,6,0,0,0,67,0,0,0,115,87,1,0,0,124, + 1,0,100,1,0,107,9,0,114,76,0,116,0,0,106,1, + 0,100,2,0,116,2,0,131,2,0,1,124,2,0,100,1, + 0,107,9,0,114,58,0,100,3,0,125,3,0,116,3,0, + 124,3,0,131,1,0,130,1,0,124,1,0,114,70,0,100, + 4,0,110,3,0,100,5,0,125,2,0,116,4,0,124,0, + 0,131,1,0,92,2,0,125,4,0,125,5,0,124,5,0, + 106,5,0,100,6,0,131,1,0,92,3,0,125,6,0,125, + 7,0,125,8,0,116,6,0,106,7,0,106,8,0,125,9, + 0,124,9,0,100,1,0,107,8,0,114,154,0,116,9,0, + 100,7,0,131,1,0,130,1,0,100,4,0,106,10,0,124, + 6,0,114,172,0,124,6,0,110,3,0,124,8,0,124,7, + 0,124,9,0,103,3,0,131,1,0,125,10,0,124,2,0, + 100,1,0,107,8,0,114,241,0,116,6,0,106,11,0,106, + 12,0,100,8,0,107,2,0,114,229,0,100,4,0,125,2, + 0,110,12,0,116,6,0,106,11,0,106,12,0,125,2,0, + 116,13,0,124,2,0,131,1,0,125,2,0,124,2,0,100, + 4,0,107,3,0,114,63,1,124,2,0,106,14,0,131,0, + 0,115,42,1,116,15,0,100,9,0,106,16,0,124,2,0, + 131,1,0,131,1,0,130,1,0,100,10,0,106,16,0,124, + 10,0,116,17,0,124,2,0,131,3,0,125,10,0,116,18, + 0,124,4,0,116,19,0,124,10,0,116,20,0,100,8,0, + 25,23,131,3,0,83,41,11,97,254,2,0,0,71,105,118, + 101,110,32,116,104,101,32,112,97,116,104,32,116,111,32,97, + 32,46,112,121,32,102,105,108,101,44,32,114,101,116,117,114, + 110,32,116,104,101,32,112,97,116,104,32,116,111,32,105,116, + 115,32,46,112,121,99,32,102,105,108,101,46,10,10,32,32, + 32,32,84,104,101,32,46,112,121,32,102,105,108,101,32,100, + 111,101,115,32,110,111,116,32,110,101,101,100,32,116,111,32, + 101,120,105,115,116,59,32,116,104,105,115,32,115,105,109,112, + 108,121,32,114,101,116,117,114,110,115,32,116,104,101,32,112, + 97,116,104,32,116,111,32,116,104,101,10,32,32,32,32,46, + 112,121,99,32,102,105,108,101,32,99,97,108,99,117,108,97, + 116,101,100,32,97,115,32,105,102,32,116,104,101,32,46,112, + 121,32,102,105,108,101,32,119,101,114,101,32,105,109,112,111, + 114,116,101,100,46,10,10,32,32,32,32,84,104,101,32,39, + 111,112,116,105,109,105,122,97,116,105,111,110,39,32,112,97, + 114,97,109,101,116,101,114,32,99,111,110,116,114,111,108,115, + 32,116,104,101,32,112,114,101,115,117,109,101,100,32,111,112, + 116,105,109,105,122,97,116,105,111,110,32,108,101,118,101,108, + 32,111,102,10,32,32,32,32,116,104,101,32,98,121,116,101, + 99,111,100,101,32,102,105,108,101,46,32,73,102,32,39,111, + 112,116,105,109,105,122,97,116,105,111,110,39,32,105,115,32, + 110,111,116,32,78,111,110,101,44,32,116,104,101,32,115,116, + 114,105,110,103,32,114,101,112,114,101,115,101,110,116,97,116, + 105,111,110,10,32,32,32,32,111,102,32,116,104,101,32,97, + 114,103,117,109,101,110,116,32,105,115,32,116,97,107,101,110, + 32,97,110,100,32,118,101,114,105,102,105,101,100,32,116,111, + 32,98,101,32,97,108,112,104,97,110,117,109,101,114,105,99, + 32,40,101,108,115,101,32,86,97,108,117,101,69,114,114,111, + 114,10,32,32,32,32,105,115,32,114,97,105,115,101,100,41, + 46,10,10,32,32,32,32,84,104,101,32,100,101,98,117,103, + 95,111,118,101,114,114,105,100,101,32,112,97,114,97,109,101, + 116,101,114,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,46,32,73,102,32,100,101,98,117,103,95,111,118,101,114, + 114,105,100,101,32,105,115,32,110,111,116,32,78,111,110,101, + 44,10,32,32,32,32,97,32,84,114,117,101,32,118,97,108, + 117,101,32,105,115,32,116,104,101,32,115,97,109,101,32,97, + 115,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109, + 105,122,97,116,105,111,110,39,32,116,111,32,116,104,101,32, + 101,109,112,116,121,32,115,116,114,105,110,103,10,32,32,32, + 32,119,104,105,108,101,32,97,32,70,97,108,115,101,32,118, + 97,108,117,101,32,105,115,32,101,113,117,105,118,97,108,101, + 110,116,32,116,111,32,115,101,116,116,105,110,103,32,39,111, + 112,116,105,109,105,122,97,116,105,111,110,39,32,116,111,32, + 39,49,39,46,10,10,32,32,32,32,73,102,32,115,121,115, + 46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,46, + 99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,110, + 101,32,116,104,101,110,32,78,111,116,73,109,112,108,101,109, + 101,110,116,101,100,69,114,114,111,114,32,105,115,32,114,97, + 105,115,101,100,46,10,10,32,32,32,32,78,122,70,116,104, + 101,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, + 32,112,97,114,97,109,101,116,101,114,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,59,32,117,115,101,32,39,111, + 112,116,105,109,105,122,97,116,105,111,110,39,32,105,110,115, + 116,101,97,100,122,50,100,101,98,117,103,95,111,118,101,114, + 114,105,100,101,32,111,114,32,111,112,116,105,109,105,122,97, + 116,105,111,110,32,109,117,115,116,32,98,101,32,115,101,116, + 32,116,111,32,78,111,110,101,114,32,0,0,0,114,31,0, + 0,0,218,1,46,122,36,115,121,115,46,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, + 116,97,103,32,105,115,32,78,111,110,101,233,0,0,0,0, + 122,24,123,33,114,125,32,105,115,32,110,111,116,32,97,108, + 112,104,97,110,117,109,101,114,105,99,122,7,123,125,46,123, + 125,123,125,41,21,218,9,95,119,97,114,110,105,110,103,115, + 218,4,119,97,114,110,218,18,68,101,112,114,101,99,97,116, + 105,111,110,87,97,114,110,105,110,103,218,9,84,121,112,101, + 69,114,114,111,114,114,40,0,0,0,114,34,0,0,0,114, + 8,0,0,0,218,14,105,109,112,108,101,109,101,110,116,97, + 116,105,111,110,218,9,99,97,99,104,101,95,116,97,103,218, + 19,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69, + 114,114,111,114,114,28,0,0,0,218,5,102,108,97,103,115, + 218,8,111,112,116,105,109,105,122,101,218,3,115,116,114,218, + 7,105,115,97,108,110,117,109,218,10,86,97,108,117,101,69, + 114,114,111,114,114,49,0,0,0,218,4,95,79,80,84,114, + 30,0,0,0,218,8,95,80,89,67,65,67,72,69,218,17, + 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, + 83,41,11,114,37,0,0,0,90,14,100,101,98,117,103,95, + 111,118,101,114,114,105,100,101,114,59,0,0,0,218,7,109, + 101,115,115,97,103,101,218,4,104,101,97,100,114,39,0,0, + 0,90,4,98,97,115,101,218,3,115,101,112,218,4,114,101, + 115,116,90,3,116,97,103,90,15,97,108,109,111,115,116,95, + 102,105,108,101,110,97,109,101,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,218,17,99,97,99,104,101,95,102, + 114,111,109,95,115,111,117,114,99,101,254,0,0,0,115,46, + 0,0,0,0,18,12,1,9,1,7,1,12,1,6,1,12, + 1,18,1,18,1,24,1,12,1,12,1,12,1,36,1,12, + 1,18,1,9,2,12,1,12,1,12,1,12,1,21,1,21, + 1,114,81,0,0,0,99,1,0,0,0,0,0,0,0,8, + 0,0,0,5,0,0,0,67,0,0,0,115,62,1,0,0, + 116,0,0,106,1,0,106,2,0,100,1,0,107,8,0,114, + 30,0,116,3,0,100,2,0,131,1,0,130,1,0,116,4, + 0,124,0,0,131,1,0,92,2,0,125,1,0,125,2,0, + 116,4,0,124,1,0,131,1,0,92,2,0,125,1,0,125, + 3,0,124,3,0,116,5,0,107,3,0,114,102,0,116,6, + 0,100,3,0,106,7,0,116,5,0,124,0,0,131,2,0, + 131,1,0,130,1,0,124,2,0,106,8,0,100,4,0,131, + 1,0,125,4,0,124,4,0,100,11,0,107,7,0,114,153, + 0,116,6,0,100,7,0,106,7,0,124,2,0,131,1,0, + 131,1,0,130,1,0,110,125,0,124,4,0,100,6,0,107, + 2,0,114,22,1,124,2,0,106,9,0,100,4,0,100,5, + 0,131,2,0,100,12,0,25,125,5,0,124,5,0,106,10, + 0,116,11,0,131,1,0,115,223,0,116,6,0,100,8,0, + 106,7,0,116,11,0,131,1,0,131,1,0,130,1,0,124, + 5,0,116,12,0,116,11,0,131,1,0,100,1,0,133,2, + 0,25,125,6,0,124,6,0,106,13,0,131,0,0,115,22, + 1,116,6,0,100,9,0,106,7,0,124,5,0,131,1,0, + 131,1,0,130,1,0,124,2,0,106,14,0,100,4,0,131, + 1,0,100,10,0,25,125,7,0,116,15,0,124,1,0,124, + 7,0,116,16,0,100,10,0,25,23,131,2,0,83,41,13, + 97,110,1,0,0,71,105,118,101,110,32,116,104,101,32,112, + 97,116,104,32,116,111,32,97,32,46,112,121,99,46,32,102, + 105,108,101,44,32,114,101,116,117,114,110,32,116,104,101,32, + 112,97,116,104,32,116,111,32,105,116,115,32,46,112,121,32, + 102,105,108,101,46,10,10,32,32,32,32,84,104,101,32,46, + 112,121,99,32,102,105,108,101,32,100,111,101,115,32,110,111, + 116,32,110,101,101,100,32,116,111,32,101,120,105,115,116,59, + 32,116,104,105,115,32,115,105,109,112,108,121,32,114,101,116, + 117,114,110,115,32,116,104,101,32,112,97,116,104,32,116,111, + 10,32,32,32,32,116,104,101,32,46,112,121,32,102,105,108, + 101,32,99,97,108,99,117,108,97,116,101,100,32,116,111,32, + 99,111,114,114,101,115,112,111,110,100,32,116,111,32,116,104, + 101,32,46,112,121,99,32,102,105,108,101,46,32,32,73,102, + 32,112,97,116,104,32,100,111,101,115,10,32,32,32,32,110, + 111,116,32,99,111,110,102,111,114,109,32,116,111,32,80,69, + 80,32,51,49,52,55,47,52,56,56,32,102,111,114,109,97, + 116,44,32,86,97,108,117,101,69,114,114,111,114,32,119,105, + 108,108,32,98,101,32,114,97,105,115,101,100,46,32,73,102, + 10,32,32,32,32,115,121,115,46,105,109,112,108,101,109,101, + 110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,97, + 103,32,105,115,32,78,111,110,101,32,116,104,101,110,32,78, + 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, + 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, + 32,32,32,78,122,36,115,121,115,46,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116, + 97,103,32,105,115,32,78,111,110,101,122,37,123,125,32,110, + 111,116,32,98,111,116,116,111,109,45,108,101,118,101,108,32, + 100,105,114,101,99,116,111,114,121,32,105,110,32,123,33,114, + 125,114,60,0,0,0,114,58,0,0,0,233,3,0,0,0, + 122,33,101,120,112,101,99,116,101,100,32,111,110,108,121,32, + 50,32,111,114,32,51,32,100,111,116,115,32,105,110,32,123, + 33,114,125,122,57,111,112,116,105,109,105,122,97,116,105,111, + 110,32,112,111,114,116,105,111,110,32,111,102,32,102,105,108, + 101,110,97,109,101,32,100,111,101,115,32,110,111,116,32,115, + 116,97,114,116,32,119,105,116,104,32,123,33,114,125,122,52, + 111,112,116,105,109,105,122,97,116,105,111,110,32,108,101,118, + 101,108,32,123,33,114,125,32,105,115,32,110,111,116,32,97, + 110,32,97,108,112,104,97,110,117,109,101,114,105,99,32,118, + 97,108,117,101,114,61,0,0,0,62,2,0,0,0,114,58, + 0,0,0,114,82,0,0,0,233,254,255,255,255,41,17,114, + 8,0,0,0,114,66,0,0,0,114,67,0,0,0,114,68, + 0,0,0,114,40,0,0,0,114,75,0,0,0,114,73,0, + 0,0,114,49,0,0,0,218,5,99,111,117,110,116,114,36, + 0,0,0,114,10,0,0,0,114,74,0,0,0,114,33,0, + 0,0,114,72,0,0,0,218,9,112,97,114,116,105,116,105, + 111,110,114,30,0,0,0,218,15,83,79,85,82,67,69,95, + 83,85,70,70,73,88,69,83,41,8,114,37,0,0,0,114, + 78,0,0,0,90,16,112,121,99,97,99,104,101,95,102,105, + 108,101,110,97,109,101,90,7,112,121,99,97,99,104,101,90, + 9,100,111,116,95,99,111,117,110,116,114,59,0,0,0,90, + 9,111,112,116,95,108,101,118,101,108,90,13,98,97,115,101, + 95,102,105,108,101,110,97,109,101,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,17,115,111,117,114,99,101, + 95,102,114,111,109,95,99,97,99,104,101,42,1,0,0,115, + 44,0,0,0,0,9,18,1,12,1,18,1,18,1,12,1, + 9,1,15,1,15,1,12,1,9,1,15,1,12,1,22,1, + 15,1,9,1,12,1,22,1,12,1,9,1,12,1,19,1, + 114,87,0,0,0,99,1,0,0,0,0,0,0,0,5,0, + 0,0,12,0,0,0,67,0,0,0,115,164,0,0,0,116, + 0,0,124,0,0,131,1,0,100,1,0,107,2,0,114,22, + 0,100,2,0,83,124,0,0,106,1,0,100,3,0,131,1, + 0,92,3,0,125,1,0,125,2,0,125,3,0,124,1,0, + 12,115,81,0,124,3,0,106,2,0,131,0,0,100,7,0, + 100,8,0,133,2,0,25,100,6,0,107,3,0,114,85,0, + 124,0,0,83,121,16,0,116,3,0,124,0,0,131,1,0, + 125,4,0,87,110,40,0,4,116,4,0,116,5,0,102,2, + 0,107,10,0,114,143,0,1,1,1,124,0,0,100,2,0, + 100,9,0,133,2,0,25,125,4,0,89,110,1,0,88,116, + 6,0,124,4,0,131,1,0,114,160,0,124,4,0,83,124, + 0,0,83,41,10,122,188,67,111,110,118,101,114,116,32,97, + 32,98,121,116,101,99,111,100,101,32,102,105,108,101,32,112, + 97,116,104,32,116,111,32,97,32,115,111,117,114,99,101,32, + 112,97,116,104,32,40,105,102,32,112,111,115,115,105,98,108, + 101,41,46,10,10,32,32,32,32,84,104,105,115,32,102,117, + 110,99,116,105,111,110,32,101,120,105,115,116,115,32,112,117, + 114,101,108,121,32,102,111,114,32,98,97,99,107,119,97,114, + 100,115,45,99,111,109,112,97,116,105,98,105,108,105,116,121, + 32,102,111,114,10,32,32,32,32,80,121,73,109,112,111,114, + 116,95,69,120,101,99,67,111,100,101,77,111,100,117,108,101, + 87,105,116,104,70,105,108,101,110,97,109,101,115,40,41,32, + 105,110,32,116,104,101,32,67,32,65,80,73,46,10,10,32, + 32,32,32,114,61,0,0,0,78,114,60,0,0,0,114,82, + 0,0,0,114,31,0,0,0,90,2,112,121,233,253,255,255, + 255,233,255,255,255,255,114,89,0,0,0,41,7,114,33,0, + 0,0,114,34,0,0,0,218,5,108,111,119,101,114,114,87, + 0,0,0,114,68,0,0,0,114,73,0,0,0,114,46,0, + 0,0,41,5,218,13,98,121,116,101,99,111,100,101,95,112, + 97,116,104,114,80,0,0,0,114,38,0,0,0,90,9,101, + 120,116,101,110,115,105,111,110,218,11,115,111,117,114,99,101, + 95,112,97,116,104,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,15,95,103,101,116,95,115,111,117,114,99, + 101,102,105,108,101,75,1,0,0,115,20,0,0,0,0,7, + 18,1,4,1,24,1,35,1,4,1,3,1,16,1,19,1, + 21,1,114,93,0,0,0,99,1,0,0,0,0,0,0,0, + 1,0,0,0,11,0,0,0,67,0,0,0,115,92,0,0, + 0,124,0,0,106,0,0,116,1,0,116,2,0,131,1,0, + 131,1,0,114,59,0,121,14,0,116,3,0,124,0,0,131, + 1,0,83,87,113,88,0,4,116,4,0,107,10,0,114,55, + 0,1,1,1,89,113,88,0,88,110,29,0,124,0,0,106, + 0,0,116,1,0,116,5,0,131,1,0,131,1,0,114,84, + 0,124,0,0,83,100,0,0,83,100,0,0,83,41,1,78, + 41,6,218,8,101,110,100,115,119,105,116,104,218,5,116,117, + 112,108,101,114,86,0,0,0,114,81,0,0,0,114,68,0, + 0,0,114,76,0,0,0,41,1,218,8,102,105,108,101,110, + 97,109,101,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,11,95,103,101,116,95,99,97,99,104,101,100,94, + 1,0,0,115,16,0,0,0,0,1,21,1,3,1,14,1, + 13,1,8,1,21,1,4,2,114,97,0,0,0,99,1,0, + 0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,0, + 0,0,115,60,0,0,0,121,19,0,116,0,0,124,0,0, + 131,1,0,106,1,0,125,1,0,87,110,24,0,4,116,2, + 0,107,10,0,114,45,0,1,1,1,100,1,0,125,1,0, + 89,110,1,0,88,124,1,0,100,2,0,79,125,1,0,124, + 1,0,83,41,3,122,51,67,97,108,99,117,108,97,116,101, + 32,116,104,101,32,109,111,100,101,32,112,101,114,109,105,115, + 115,105,111,110,115,32,102,111,114,32,97,32,98,121,116,101, + 99,111,100,101,32,102,105,108,101,46,105,182,1,0,0,233, + 128,0,0,0,41,3,114,41,0,0,0,114,43,0,0,0, + 114,42,0,0,0,41,2,114,37,0,0,0,114,44,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,10,95,99,97,108,99,95,109,111,100,101,106,1,0,0, + 115,12,0,0,0,0,2,3,1,19,1,13,1,11,3,10, + 1,114,99,0,0,0,218,9,118,101,114,98,111,115,105,116, + 121,114,31,0,0,0,99,1,0,0,0,1,0,0,0,3, + 0,0,0,4,0,0,0,71,0,0,0,115,75,0,0,0, + 116,0,0,106,1,0,106,2,0,124,1,0,107,5,0,114, + 71,0,124,0,0,106,3,0,100,6,0,131,1,0,115,43, + 0,100,3,0,124,0,0,23,125,0,0,116,4,0,124,0, + 0,106,5,0,124,2,0,140,0,0,100,4,0,116,0,0, + 106,6,0,131,1,1,1,100,5,0,83,41,7,122,61,80, + 114,105,110,116,32,116,104,101,32,109,101,115,115,97,103,101, + 32,116,111,32,115,116,100,101,114,114,32,105,102,32,45,118, + 47,80,89,84,72,79,78,86,69,82,66,79,83,69,32,105, + 115,32,116,117,114,110,101,100,32,111,110,46,250,1,35,250, + 7,105,109,112,111,114,116,32,122,2,35,32,114,56,0,0, + 0,78,41,2,114,101,0,0,0,114,102,0,0,0,41,7, + 114,8,0,0,0,114,69,0,0,0,218,7,118,101,114,98, + 111,115,101,114,10,0,0,0,218,5,112,114,105,110,116,114, + 49,0,0,0,218,6,115,116,100,101,114,114,41,3,114,77, + 0,0,0,114,100,0,0,0,218,4,97,114,103,115,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,218,16,95, + 118,101,114,98,111,115,101,95,109,101,115,115,97,103,101,118, + 1,0,0,115,8,0,0,0,0,2,18,1,15,1,10,1, + 114,107,0,0,0,99,1,0,0,0,0,0,0,0,3,0, + 0,0,11,0,0,0,3,0,0,0,115,84,0,0,0,100, + 1,0,135,0,0,102,1,0,100,2,0,100,3,0,134,1, + 0,125,1,0,121,13,0,116,0,0,106,1,0,125,2,0, + 87,110,30,0,4,116,2,0,107,10,0,114,66,0,1,1, + 1,100,4,0,100,5,0,132,0,0,125,2,0,89,110,1, + 0,88,124,2,0,124,1,0,136,0,0,131,2,0,1,124, + 1,0,83,41,6,122,252,68,101,99,111,114,97,116,111,114, + 32,116,111,32,118,101,114,105,102,121,32,116,104,97,116,32, + 116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103, + 32,114,101,113,117,101,115,116,101,100,32,109,97,116,99,104, + 101,115,32,116,104,101,32,111,110,101,32,116,104,101,10,32, + 32,32,32,108,111,97,100,101,114,32,99,97,110,32,104,97, + 110,100,108,101,46,10,10,32,32,32,32,84,104,101,32,102, + 105,114,115,116,32,97,114,103,117,109,101,110,116,32,40,115, + 101,108,102,41,32,109,117,115,116,32,100,101,102,105,110,101, + 32,95,110,97,109,101,32,119,104,105,99,104,32,116,104,101, + 32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116, + 32,105,115,10,32,32,32,32,99,111,109,112,97,114,101,100, + 32,97,103,97,105,110,115,116,46,32,73,102,32,116,104,101, + 32,99,111,109,112,97,114,105,115,111,110,32,102,97,105,108, + 115,32,116,104,101,110,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, + 32,32,32,78,99,2,0,0,0,0,0,0,0,4,0,0, + 0,5,0,0,0,31,0,0,0,115,89,0,0,0,124,1, + 0,100,0,0,107,8,0,114,24,0,124,0,0,106,0,0, + 125,1,0,110,46,0,124,0,0,106,0,0,124,1,0,107, + 3,0,114,70,0,116,1,0,100,1,0,124,0,0,106,0, + 0,124,1,0,102,2,0,22,100,2,0,124,1,0,131,1, + 1,130,1,0,136,0,0,124,0,0,124,1,0,124,2,0, + 124,3,0,142,2,0,83,41,3,78,122,30,108,111,97,100, + 101,114,32,102,111,114,32,37,115,32,99,97,110,110,111,116, + 32,104,97,110,100,108,101,32,37,115,218,4,110,97,109,101, + 41,2,114,108,0,0,0,218,11,73,109,112,111,114,116,69, + 114,114,111,114,41,4,218,4,115,101,108,102,114,108,0,0, + 0,114,106,0,0,0,90,6,107,119,97,114,103,115,41,1, + 218,6,109,101,116,104,111,100,114,4,0,0,0,114,6,0, + 0,0,218,19,95,99,104,101,99,107,95,110,97,109,101,95, + 119,114,97,112,112,101,114,134,1,0,0,115,12,0,0,0, + 0,1,12,1,12,1,15,1,6,1,25,1,122,40,95,99, + 104,101,99,107,95,110,97,109,101,46,60,108,111,99,97,108, + 115,62,46,95,99,104,101,99,107,95,110,97,109,101,95,119, + 114,97,112,112,101,114,99,2,0,0,0,0,0,0,0,3, + 0,0,0,7,0,0,0,83,0,0,0,115,92,0,0,0, + 120,66,0,100,1,0,100,2,0,100,3,0,100,4,0,103, + 4,0,68,93,46,0,125,2,0,116,0,0,124,1,0,124, + 2,0,131,2,0,114,19,0,116,1,0,124,0,0,124,2, + 0,116,2,0,124,1,0,124,2,0,131,2,0,131,3,0, + 1,113,19,0,87,124,0,0,106,3,0,106,4,0,124,1, + 0,106,3,0,131,1,0,1,100,0,0,83,41,5,78,218, + 10,95,95,109,111,100,117,108,101,95,95,218,8,95,95,110, + 97,109,101,95,95,218,12,95,95,113,117,97,108,110,97,109, + 101,95,95,218,7,95,95,100,111,99,95,95,41,5,218,7, + 104,97,115,97,116,116,114,218,7,115,101,116,97,116,116,114, + 218,7,103,101,116,97,116,116,114,218,8,95,95,100,105,99, + 116,95,95,218,6,117,112,100,97,116,101,41,3,90,3,110, + 101,119,90,3,111,108,100,114,54,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,5,95,119,114, + 97,112,145,1,0,0,115,8,0,0,0,0,1,25,1,15, + 1,29,1,122,26,95,99,104,101,99,107,95,110,97,109,101, + 46,60,108,111,99,97,108,115,62,46,95,119,114,97,112,41, + 3,218,10,95,98,111,111,116,115,116,114,97,112,114,122,0, + 0,0,218,9,78,97,109,101,69,114,114,111,114,41,3,114, + 111,0,0,0,114,112,0,0,0,114,122,0,0,0,114,4, + 0,0,0,41,1,114,111,0,0,0,114,6,0,0,0,218, + 11,95,99,104,101,99,107,95,110,97,109,101,126,1,0,0, + 115,14,0,0,0,0,8,21,7,3,1,13,1,13,2,17, + 5,13,1,114,125,0,0,0,99,2,0,0,0,0,0,0, + 0,5,0,0,0,4,0,0,0,67,0,0,0,115,84,0, + 0,0,124,0,0,106,0,0,124,1,0,131,1,0,92,2, + 0,125,2,0,125,3,0,124,2,0,100,1,0,107,8,0, + 114,80,0,116,1,0,124,3,0,131,1,0,114,80,0,100, + 2,0,125,4,0,116,2,0,106,3,0,124,4,0,106,4, + 0,124,3,0,100,3,0,25,131,1,0,116,5,0,131,2, + 0,1,124,2,0,83,41,4,122,155,84,114,121,32,116,111, + 32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102, + 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, + 32,109,111,100,117,108,101,32,98,121,32,100,101,108,101,103, + 97,116,105,110,103,32,116,111,10,32,32,32,32,115,101,108, + 102,46,102,105,110,100,95,108,111,97,100,101,114,40,41,46, + 10,10,32,32,32,32,84,104,105,115,32,109,101,116,104,111, + 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, + 105,110,32,102,97,118,111,114,32,111,102,32,102,105,110,100, + 101,114,46,102,105,110,100,95,115,112,101,99,40,41,46,10, + 10,32,32,32,32,78,122,44,78,111,116,32,105,109,112,111, + 114,116,105,110,103,32,100,105,114,101,99,116,111,114,121,32, + 123,125,58,32,109,105,115,115,105,110,103,32,95,95,105,110, + 105,116,95,95,114,61,0,0,0,41,6,218,11,102,105,110, + 100,95,108,111,97,100,101,114,114,33,0,0,0,114,62,0, + 0,0,114,63,0,0,0,114,49,0,0,0,218,13,73,109, + 112,111,114,116,87,97,114,110,105,110,103,41,5,114,110,0, + 0,0,218,8,102,117,108,108,110,97,109,101,218,6,108,111, + 97,100,101,114,218,8,112,111,114,116,105,111,110,115,218,3, + 109,115,103,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,17,95,102,105,110,100,95,109,111,100,117,108,101, + 95,115,104,105,109,154,1,0,0,115,10,0,0,0,0,10, + 21,1,24,1,6,1,29,1,114,132,0,0,0,99,4,0, + 0,0,0,0,0,0,11,0,0,0,19,0,0,0,67,0, + 0,0,115,240,1,0,0,105,0,0,125,4,0,124,2,0, + 100,1,0,107,9,0,114,31,0,124,2,0,124,4,0,100, + 2,0,60,110,6,0,100,3,0,125,2,0,124,3,0,100, + 1,0,107,9,0,114,59,0,124,3,0,124,4,0,100,4, + 0,60,124,0,0,100,1,0,100,5,0,133,2,0,25,125, + 5,0,124,0,0,100,5,0,100,6,0,133,2,0,25,125, + 6,0,124,0,0,100,6,0,100,7,0,133,2,0,25,125, + 7,0,124,5,0,116,0,0,107,3,0,114,168,0,100,8, + 0,106,1,0,124,2,0,124,5,0,131,2,0,125,8,0, + 116,2,0,100,9,0,124,8,0,131,2,0,1,116,3,0, + 124,8,0,124,4,0,141,1,0,130,1,0,110,119,0,116, + 4,0,124,6,0,131,1,0,100,5,0,107,3,0,114,229, + 0,100,10,0,106,1,0,124,2,0,131,1,0,125,8,0, + 116,2,0,100,9,0,124,8,0,131,2,0,1,116,5,0, + 124,8,0,131,1,0,130,1,0,110,58,0,116,4,0,124, + 7,0,131,1,0,100,5,0,107,3,0,114,31,1,100,11, + 0,106,1,0,124,2,0,131,1,0,125,8,0,116,2,0, + 100,9,0,124,8,0,131,2,0,1,116,5,0,124,8,0, + 131,1,0,130,1,0,124,1,0,100,1,0,107,9,0,114, + 226,1,121,20,0,116,6,0,124,1,0,100,12,0,25,131, + 1,0,125,9,0,87,110,18,0,4,116,7,0,107,10,0, + 114,83,1,1,1,1,89,110,62,0,88,116,8,0,124,6, + 0,131,1,0,124,9,0,107,3,0,114,145,1,100,13,0, 106,1,0,124,2,0,131,1,0,125,8,0,116,2,0,100, - 9,0,124,8,0,131,2,0,1,116,5,0,124,8,0,131, - 1,0,130,1,0,110,58,0,116,4,0,124,7,0,131,1, - 0,100,5,0,107,3,0,114,31,1,100,11,0,106,1,0, - 124,2,0,131,1,0,125,8,0,116,2,0,100,9,0,124, - 8,0,131,2,0,1,116,5,0,124,8,0,131,1,0,130, - 1,0,124,1,0,100,1,0,107,9,0,114,226,1,121,20, - 0,116,6,0,124,1,0,100,12,0,25,131,1,0,125,9, - 0,87,110,18,0,4,116,7,0,107,10,0,114,83,1,1, - 1,1,89,110,62,0,88,116,8,0,124,6,0,131,1,0, - 124,9,0,107,3,0,114,145,1,100,13,0,106,1,0,124, - 2,0,131,1,0,125,8,0,116,2,0,100,9,0,124,8, - 0,131,2,0,1,116,3,0,124,8,0,124,4,0,141,1, - 0,130,1,0,121,18,0,124,1,0,100,14,0,25,100,15, - 0,64,125,10,0,87,110,18,0,4,116,7,0,107,10,0, - 114,183,1,1,1,1,89,110,43,0,88,116,8,0,124,7, - 0,131,1,0,124,10,0,107,3,0,114,226,1,116,3,0, - 100,13,0,106,1,0,124,2,0,131,1,0,124,4,0,141, - 1,0,130,1,0,124,0,0,100,7,0,100,1,0,133,2, - 0,25,83,41,16,97,122,1,0,0,86,97,108,105,100,97, - 116,101,32,116,104,101,32,104,101,97,100,101,114,32,111,102, - 32,116,104,101,32,112,97,115,115,101,100,45,105,110,32,98, - 121,116,101,99,111,100,101,32,97,103,97,105,110,115,116,32, - 115,111,117,114,99,101,95,115,116,97,116,115,32,40,105,102, - 10,32,32,32,32,103,105,118,101,110,41,32,97,110,100,32, - 114,101,116,117,114,110,105,110,103,32,116,104,101,32,98,121, - 116,101,99,111,100,101,32,116,104,97,116,32,99,97,110,32, - 98,101,32,99,111,109,112,105,108,101,100,32,98,121,32,99, - 111,109,112,105,108,101,40,41,46,10,10,32,32,32,32,65, - 108,108,32,111,116,104,101,114,32,97,114,103,117,109,101,110, - 116,115,32,97,114,101,32,117,115,101,100,32,116,111,32,101, - 110,104,97,110,99,101,32,101,114,114,111,114,32,114,101,112, - 111,114,116,105,110,103,46,10,10,32,32,32,32,73,109,112, - 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, - 101,100,32,119,104,101,110,32,116,104,101,32,109,97,103,105, - 99,32,110,117,109,98,101,114,32,105,115,32,105,110,99,111, - 114,114,101,99,116,32,111,114,32,116,104,101,32,98,121,116, - 101,99,111,100,101,32,105,115,10,32,32,32,32,102,111,117, - 110,100,32,116,111,32,98,101,32,115,116,97,108,101,46,32, - 69,79,70,69,114,114,111,114,32,105,115,32,114,97,105,115, - 101,100,32,119,104,101,110,32,116,104,101,32,100,97,116,97, - 32,105,115,32,102,111,117,110,100,32,116,111,32,98,101,10, - 32,32,32,32,116,114,117,110,99,97,116,101,100,46,10,10, - 32,32,32,32,78,114,106,0,0,0,122,10,60,98,121,116, - 101,99,111,100,101,62,114,35,0,0,0,114,12,0,0,0, - 233,8,0,0,0,233,12,0,0,0,122,30,98,97,100,32, - 109,97,103,105,99,32,110,117,109,98,101,114,32,105,110,32, - 123,33,114,125,58,32,123,33,114,125,122,2,123,125,122,43, - 114,101,97,99,104,101,100,32,69,79,70,32,119,104,105,108, - 101,32,114,101,97,100,105,110,103,32,116,105,109,101,115,116, - 97,109,112,32,105,110,32,123,33,114,125,122,48,114,101,97, - 99,104,101,100,32,69,79,70,32,119,104,105,108,101,32,114, - 101,97,100,105,110,103,32,115,105,122,101,32,111,102,32,115, - 111,117,114,99,101,32,105,110,32,123,33,114,125,218,5,109, - 116,105,109,101,122,26,98,121,116,101,99,111,100,101,32,105, - 115,32,115,116,97,108,101,32,102,111,114,32,123,33,114,125, - 218,4,115,105,122,101,108,3,0,0,0,255,127,255,127,3, - 0,41,9,218,12,77,65,71,73,67,95,78,85,77,66,69, - 82,114,47,0,0,0,114,105,0,0,0,114,107,0,0,0, - 114,31,0,0,0,218,8,69,79,70,69,114,114,111,114,114, - 14,0,0,0,218,8,75,101,121,69,114,114,111,114,114,19, - 0,0,0,41,11,114,53,0,0,0,218,12,115,111,117,114, - 99,101,95,115,116,97,116,115,114,106,0,0,0,114,35,0, - 0,0,90,11,101,120,99,95,100,101,116,97,105,108,115,90, - 5,109,97,103,105,99,90,13,114,97,119,95,116,105,109,101, - 115,116,97,109,112,90,8,114,97,119,95,115,105,122,101,114, - 75,0,0,0,218,12,115,111,117,114,99,101,95,109,116,105, - 109,101,218,11,115,111,117,114,99,101,95,115,105,122,101,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,25, - 95,118,97,108,105,100,97,116,101,95,98,121,116,101,99,111, - 100,101,95,104,101,97,100,101,114,163,1,0,0,115,76,0, - 0,0,0,11,6,1,12,1,13,3,6,1,12,1,10,1, - 16,1,16,1,16,1,12,1,18,1,13,1,18,1,18,1, - 15,1,13,1,15,1,18,1,15,1,13,1,12,1,12,1, - 3,1,20,1,13,1,5,2,18,1,15,1,13,1,15,1, - 3,1,18,1,13,1,5,2,18,1,15,1,9,1,114,141, - 0,0,0,99,4,0,0,0,0,0,0,0,5,0,0,0, - 6,0,0,0,67,0,0,0,115,112,0,0,0,116,0,0, - 106,1,0,124,0,0,131,1,0,125,4,0,116,2,0,124, - 4,0,116,3,0,131,2,0,114,75,0,116,4,0,100,1, - 0,124,2,0,131,2,0,1,124,3,0,100,2,0,107,9, - 0,114,71,0,116,5,0,106,6,0,124,4,0,124,3,0, - 131,2,0,1,124,4,0,83,116,7,0,100,3,0,106,8, - 0,124,2,0,131,1,0,100,4,0,124,1,0,100,5,0, - 124,2,0,131,1,2,130,1,0,100,2,0,83,41,6,122, - 60,67,111,109,112,105,108,101,32,98,121,116,101,99,111,100, - 101,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121, - 32,95,118,97,108,105,100,97,116,101,95,98,121,116,101,99, - 111,100,101,95,104,101,97,100,101,114,40,41,46,122,21,99, - 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, - 123,33,114,125,78,122,23,78,111,110,45,99,111,100,101,32, - 111,98,106,101,99,116,32,105,110,32,123,33,114,125,114,106, - 0,0,0,114,35,0,0,0,41,9,218,7,109,97,114,115, - 104,97,108,90,5,108,111,97,100,115,218,10,105,115,105,110, - 115,116,97,110,99,101,218,10,95,99,111,100,101,95,116,121, - 112,101,114,105,0,0,0,218,4,95,105,109,112,90,16,95, - 102,105,120,95,99,111,95,102,105,108,101,110,97,109,101,114, - 107,0,0,0,114,47,0,0,0,41,5,114,53,0,0,0, - 114,106,0,0,0,114,89,0,0,0,114,90,0,0,0,218, - 4,99,111,100,101,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,17,95,99,111,109,112,105,108,101,95,98, - 121,116,101,99,111,100,101,218,1,0,0,115,16,0,0,0, - 0,2,15,1,15,1,13,1,12,1,16,1,4,2,18,1, - 114,147,0,0,0,114,59,0,0,0,99,3,0,0,0,0, - 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, - 76,0,0,0,116,0,0,116,1,0,131,1,0,125,3,0, - 124,3,0,106,2,0,116,3,0,124,1,0,131,1,0,131, - 1,0,1,124,3,0,106,2,0,116,3,0,124,2,0,131, - 1,0,131,1,0,1,124,3,0,106,2,0,116,4,0,106, - 5,0,124,0,0,131,1,0,131,1,0,1,124,3,0,83, - 41,1,122,80,67,111,109,112,105,108,101,32,97,32,99,111, - 100,101,32,111,98,106,101,99,116,32,105,110,116,111,32,98, - 121,116,101,99,111,100,101,32,102,111,114,32,119,114,105,116, - 105,110,103,32,111,117,116,32,116,111,32,97,32,98,121,116, - 101,45,99,111,109,112,105,108,101,100,10,32,32,32,32,102, - 105,108,101,46,41,6,218,9,98,121,116,101,97,114,114,97, - 121,114,135,0,0,0,218,6,101,120,116,101,110,100,114,17, - 0,0,0,114,142,0,0,0,90,5,100,117,109,112,115,41, - 4,114,146,0,0,0,114,133,0,0,0,114,140,0,0,0, - 114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,17,95,99,111,100,101,95,116,111,95,98, - 121,116,101,99,111,100,101,230,1,0,0,115,10,0,0,0, - 0,3,12,1,19,1,19,1,22,1,114,150,0,0,0,99, - 1,0,0,0,0,0,0,0,5,0,0,0,4,0,0,0, - 67,0,0,0,115,89,0,0,0,100,1,0,100,2,0,108, - 0,0,125,1,0,116,1,0,106,2,0,124,0,0,131,1, - 0,106,3,0,125,2,0,124,1,0,106,4,0,124,2,0, - 131,1,0,125,3,0,116,1,0,106,5,0,100,2,0,100, - 3,0,131,2,0,125,4,0,124,4,0,106,6,0,124,0, - 0,106,6,0,124,3,0,100,1,0,25,131,1,0,131,1, - 0,83,41,4,122,121,68,101,99,111,100,101,32,98,121,116, - 101,115,32,114,101,112,114,101,115,101,110,116,105,110,103,32, - 115,111,117,114,99,101,32,99,111,100,101,32,97,110,100,32, - 114,101,116,117,114,110,32,116,104,101,32,115,116,114,105,110, - 103,46,10,10,32,32,32,32,85,110,105,118,101,114,115,97, - 108,32,110,101,119,108,105,110,101,32,115,117,112,112,111,114, - 116,32,105,115,32,117,115,101,100,32,105,110,32,116,104,101, - 32,100,101,99,111,100,105,110,103,46,10,32,32,32,32,114, - 59,0,0,0,78,84,41,7,218,8,116,111,107,101,110,105, - 122,101,114,49,0,0,0,90,7,66,121,116,101,115,73,79, - 90,8,114,101,97,100,108,105,110,101,90,15,100,101,116,101, - 99,116,95,101,110,99,111,100,105,110,103,90,25,73,110,99, - 114,101,109,101,110,116,97,108,78,101,119,108,105,110,101,68, - 101,99,111,100,101,114,218,6,100,101,99,111,100,101,41,5, - 218,12,115,111,117,114,99,101,95,98,121,116,101,115,114,151, - 0,0,0,90,21,115,111,117,114,99,101,95,98,121,116,101, - 115,95,114,101,97,100,108,105,110,101,218,8,101,110,99,111, - 100,105,110,103,90,15,110,101,119,108,105,110,101,95,100,101, - 99,111,100,101,114,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,13,100,101,99,111,100,101,95,115,111,117, - 114,99,101,240,1,0,0,115,10,0,0,0,0,5,12,1, - 18,1,15,1,18,1,114,155,0,0,0,114,127,0,0,0, - 218,26,115,117,98,109,111,100,117,108,101,95,115,101,97,114, - 99,104,95,108,111,99,97,116,105,111,110,115,99,2,0,0, - 0,2,0,0,0,9,0,0,0,19,0,0,0,67,0,0, - 0,115,89,1,0,0,124,1,0,100,1,0,107,8,0,114, - 73,0,100,2,0,125,1,0,116,0,0,124,2,0,100,3, - 0,131,2,0,114,73,0,121,19,0,124,2,0,106,1,0, - 124,0,0,131,1,0,125,1,0,87,110,18,0,4,116,2, - 0,107,10,0,114,72,0,1,1,1,89,110,1,0,88,116, - 3,0,106,4,0,124,0,0,124,2,0,100,4,0,124,1, - 0,131,2,1,125,4,0,100,5,0,124,4,0,95,5,0, - 124,2,0,100,1,0,107,8,0,114,194,0,120,73,0,116, - 6,0,131,0,0,68,93,58,0,92,2,0,125,5,0,125, - 6,0,124,1,0,106,7,0,116,8,0,124,6,0,131,1, - 0,131,1,0,114,128,0,124,5,0,124,0,0,124,1,0, - 131,2,0,125,2,0,124,2,0,124,4,0,95,9,0,80, - 113,128,0,87,100,1,0,83,124,3,0,116,10,0,107,8, - 0,114,23,1,116,0,0,124,2,0,100,6,0,131,2,0, - 114,32,1,121,19,0,124,2,0,106,11,0,124,0,0,131, - 1,0,125,7,0,87,110,18,0,4,116,2,0,107,10,0, - 114,4,1,1,1,1,89,113,32,1,88,124,7,0,114,32, - 1,103,0,0,124,4,0,95,12,0,110,9,0,124,3,0, - 124,4,0,95,12,0,124,4,0,106,12,0,103,0,0,107, - 2,0,114,85,1,124,1,0,114,85,1,116,13,0,124,1, - 0,131,1,0,100,7,0,25,125,8,0,124,4,0,106,12, - 0,106,14,0,124,8,0,131,1,0,1,124,4,0,83,41, - 8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,109, - 111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100, - 32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,116, - 105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,100, - 105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,109, - 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, - 103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,109, - 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, - 97,116,105,111,110,115,32,116,111,32,97,32,108,105,115,116, - 32,111,102,32,100,105,114,101,99,116,111,114,121,32,112,97, - 116,104,115,46,32,32,65,110,10,32,32,32,32,101,109,112, - 116,121,32,108,105,115,116,32,105,115,32,115,117,102,102,105, - 99,105,101,110,116,44,32,116,104,111,117,103,104,32,105,116, - 115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32, - 117,115,101,102,117,108,32,116,111,32,116,104,101,10,32,32, - 32,32,105,109,112,111,114,116,32,115,121,115,116,101,109,46, - 10,10,32,32,32,32,84,104,101,32,108,111,97,100,101,114, - 32,109,117,115,116,32,116,97,107,101,32,97,32,115,112,101, - 99,32,97,115,32,105,116,115,32,111,110,108,121,32,95,95, - 105,110,105,116,95,95,40,41,32,97,114,103,46,10,10,32, - 32,32,32,78,122,9,60,117,110,107,110,111,119,110,62,218, - 12,103,101,116,95,102,105,108,101,110,97,109,101,218,6,111, - 114,105,103,105,110,84,218,10,105,115,95,112,97,99,107,97, - 103,101,114,59,0,0,0,41,15,114,115,0,0,0,114,157, - 0,0,0,114,107,0,0,0,114,121,0,0,0,218,10,77, - 111,100,117,108,101,83,112,101,99,90,13,95,115,101,116,95, - 102,105,108,101,97,116,116,114,218,27,95,103,101,116,95,115, - 117,112,112,111,114,116,101,100,95,102,105,108,101,95,108,111, - 97,100,101,114,115,114,92,0,0,0,114,93,0,0,0,114, - 127,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, - 159,0,0,0,114,156,0,0,0,114,38,0,0,0,218,6, - 97,112,112,101,110,100,41,9,114,106,0,0,0,90,8,108, - 111,99,97,116,105,111,110,114,127,0,0,0,114,156,0,0, - 0,218,4,115,112,101,99,218,12,108,111,97,100,101,114,95, - 99,108,97,115,115,218,8,115,117,102,102,105,120,101,115,114, - 159,0,0,0,90,7,100,105,114,110,97,109,101,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,23,115,112, - 101,99,95,102,114,111,109,95,102,105,108,101,95,108,111,99, - 97,116,105,111,110,1,2,0,0,115,60,0,0,0,0,12, - 12,4,6,1,15,2,3,1,19,1,13,1,5,8,24,1, - 9,3,12,1,22,1,21,1,15,1,9,1,5,2,4,3, - 12,2,15,1,3,1,19,1,13,1,5,2,6,1,12,2, - 9,1,15,1,6,1,16,1,16,2,114,167,0,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 64,0,0,0,115,121,0,0,0,101,0,0,90,1,0,100, - 0,0,90,2,0,100,1,0,90,3,0,100,2,0,90,4, - 0,100,3,0,90,5,0,100,4,0,90,6,0,101,7,0, - 100,5,0,100,6,0,132,0,0,131,1,0,90,8,0,101, - 7,0,100,7,0,100,8,0,132,0,0,131,1,0,90,9, - 0,101,7,0,100,9,0,100,9,0,100,10,0,100,11,0, - 132,2,0,131,1,0,90,10,0,101,7,0,100,9,0,100, - 12,0,100,13,0,132,1,0,131,1,0,90,11,0,100,9, - 0,83,41,14,218,21,87,105,110,100,111,119,115,82,101,103, - 105,115,116,114,121,70,105,110,100,101,114,122,62,77,101,116, - 97,32,112,97,116,104,32,102,105,110,100,101,114,32,102,111, - 114,32,109,111,100,117,108,101,115,32,100,101,99,108,97,114, - 101,100,32,105,110,32,116,104,101,32,87,105,110,100,111,119, - 115,32,114,101,103,105,115,116,114,121,46,122,59,83,111,102, - 116,119,97,114,101,92,80,121,116,104,111,110,92,80,121,116, - 104,111,110,67,111,114,101,92,123,115,121,115,95,118,101,114, - 115,105,111,110,125,92,77,111,100,117,108,101,115,92,123,102, - 117,108,108,110,97,109,101,125,122,65,83,111,102,116,119,97, - 114,101,92,80,121,116,104,111,110,92,80,121,116,104,111,110, - 67,111,114,101,92,123,115,121,115,95,118,101,114,115,105,111, - 110,125,92,77,111,100,117,108,101,115,92,123,102,117,108,108, - 110,97,109,101,125,92,68,101,98,117,103,70,99,2,0,0, - 0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,0, - 0,115,67,0,0,0,121,23,0,116,0,0,106,1,0,116, - 0,0,106,2,0,124,1,0,131,2,0,83,87,110,37,0, - 4,116,3,0,107,10,0,114,62,0,1,1,1,116,0,0, - 106,1,0,116,0,0,106,4,0,124,1,0,131,2,0,83, - 89,110,1,0,88,100,0,0,83,41,1,78,41,5,218,7, - 95,119,105,110,114,101,103,90,7,79,112,101,110,75,101,121, - 90,17,72,75,69,89,95,67,85,82,82,69,78,84,95,85, - 83,69,82,114,40,0,0,0,90,18,72,75,69,89,95,76, - 79,67,65,76,95,77,65,67,72,73,78,69,41,2,218,3, - 99,108,115,218,3,107,101,121,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,14,95,111,112,101,110,95,114, - 101,103,105,115,116,114,121,79,2,0,0,115,8,0,0,0, - 0,2,3,1,23,1,13,1,122,36,87,105,110,100,111,119, + 9,0,124,8,0,131,2,0,1,116,3,0,124,8,0,124, + 4,0,141,1,0,130,1,0,121,18,0,124,1,0,100,14, + 0,25,100,15,0,64,125,10,0,87,110,18,0,4,116,7, + 0,107,10,0,114,183,1,1,1,1,89,110,43,0,88,116, + 8,0,124,7,0,131,1,0,124,10,0,107,3,0,114,226, + 1,116,3,0,100,13,0,106,1,0,124,2,0,131,1,0, + 124,4,0,141,1,0,130,1,0,124,0,0,100,7,0,100, + 1,0,133,2,0,25,83,41,16,97,122,1,0,0,86,97, + 108,105,100,97,116,101,32,116,104,101,32,104,101,97,100,101, + 114,32,111,102,32,116,104,101,32,112,97,115,115,101,100,45, + 105,110,32,98,121,116,101,99,111,100,101,32,97,103,97,105, + 110,115,116,32,115,111,117,114,99,101,95,115,116,97,116,115, + 32,40,105,102,10,32,32,32,32,103,105,118,101,110,41,32, + 97,110,100,32,114,101,116,117,114,110,105,110,103,32,116,104, + 101,32,98,121,116,101,99,111,100,101,32,116,104,97,116,32, + 99,97,110,32,98,101,32,99,111,109,112,105,108,101,100,32, + 98,121,32,99,111,109,112,105,108,101,40,41,46,10,10,32, + 32,32,32,65,108,108,32,111,116,104,101,114,32,97,114,103, + 117,109,101,110,116,115,32,97,114,101,32,117,115,101,100,32, + 116,111,32,101,110,104,97,110,99,101,32,101,114,114,111,114, + 32,114,101,112,111,114,116,105,110,103,46,10,10,32,32,32, + 32,73,109,112,111,114,116,69,114,114,111,114,32,105,115,32, + 114,97,105,115,101,100,32,119,104,101,110,32,116,104,101,32, + 109,97,103,105,99,32,110,117,109,98,101,114,32,105,115,32, + 105,110,99,111,114,114,101,99,116,32,111,114,32,116,104,101, + 32,98,121,116,101,99,111,100,101,32,105,115,10,32,32,32, + 32,102,111,117,110,100,32,116,111,32,98,101,32,115,116,97, + 108,101,46,32,69,79,70,69,114,114,111,114,32,105,115,32, + 114,97,105,115,101,100,32,119,104,101,110,32,116,104,101,32, + 100,97,116,97,32,105,115,32,102,111,117,110,100,32,116,111, + 32,98,101,10,32,32,32,32,116,114,117,110,99,97,116,101, + 100,46,10,10,32,32,32,32,78,114,108,0,0,0,122,10, + 60,98,121,116,101,99,111,100,101,62,114,37,0,0,0,114, + 14,0,0,0,233,8,0,0,0,233,12,0,0,0,122,30, + 98,97,100,32,109,97,103,105,99,32,110,117,109,98,101,114, + 32,105,110,32,123,33,114,125,58,32,123,33,114,125,122,2, + 123,125,122,43,114,101,97,99,104,101,100,32,69,79,70,32, + 119,104,105,108,101,32,114,101,97,100,105,110,103,32,116,105, + 109,101,115,116,97,109,112,32,105,110,32,123,33,114,125,122, + 48,114,101,97,99,104,101,100,32,69,79,70,32,119,104,105, + 108,101,32,114,101,97,100,105,110,103,32,115,105,122,101,32, + 111,102,32,115,111,117,114,99,101,32,105,110,32,123,33,114, + 125,218,5,109,116,105,109,101,122,26,98,121,116,101,99,111, + 100,101,32,105,115,32,115,116,97,108,101,32,102,111,114,32, + 123,33,114,125,218,4,115,105,122,101,108,3,0,0,0,255, + 127,255,127,3,0,41,9,218,12,77,65,71,73,67,95,78, + 85,77,66,69,82,114,49,0,0,0,114,107,0,0,0,114, + 109,0,0,0,114,33,0,0,0,218,8,69,79,70,69,114, + 114,111,114,114,16,0,0,0,218,8,75,101,121,69,114,114, + 111,114,114,21,0,0,0,41,11,114,55,0,0,0,218,12, + 115,111,117,114,99,101,95,115,116,97,116,115,114,108,0,0, + 0,114,37,0,0,0,90,11,101,120,99,95,100,101,116,97, + 105,108,115,90,5,109,97,103,105,99,90,13,114,97,119,95, + 116,105,109,101,115,116,97,109,112,90,8,114,97,119,95,115, + 105,122,101,114,77,0,0,0,218,12,115,111,117,114,99,101, + 95,109,116,105,109,101,218,11,115,111,117,114,99,101,95,115, + 105,122,101,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,25,95,118,97,108,105,100,97,116,101,95,98,121, + 116,101,99,111,100,101,95,104,101,97,100,101,114,171,1,0, + 0,115,76,0,0,0,0,11,6,1,12,1,13,3,6,1, + 12,1,10,1,16,1,16,1,16,1,12,1,18,1,13,1, + 18,1,18,1,15,1,13,1,15,1,18,1,15,1,13,1, + 12,1,12,1,3,1,20,1,13,1,5,2,18,1,15,1, + 13,1,15,1,3,1,18,1,13,1,5,2,18,1,15,1, + 9,1,114,143,0,0,0,99,4,0,0,0,0,0,0,0, + 5,0,0,0,6,0,0,0,67,0,0,0,115,112,0,0, + 0,116,0,0,106,1,0,124,0,0,131,1,0,125,4,0, + 116,2,0,124,4,0,116,3,0,131,2,0,114,75,0,116, + 4,0,100,1,0,124,2,0,131,2,0,1,124,3,0,100, + 2,0,107,9,0,114,71,0,116,5,0,106,6,0,124,4, + 0,124,3,0,131,2,0,1,124,4,0,83,116,7,0,100, + 3,0,106,8,0,124,2,0,131,1,0,100,4,0,124,1, + 0,100,5,0,124,2,0,131,1,2,130,1,0,100,2,0, + 83,41,6,122,60,67,111,109,112,105,108,101,32,98,121,116, + 101,99,111,100,101,32,97,115,32,114,101,116,117,114,110,101, + 100,32,98,121,32,95,118,97,108,105,100,97,116,101,95,98, + 121,116,101,99,111,100,101,95,104,101,97,100,101,114,40,41, + 46,122,21,99,111,100,101,32,111,98,106,101,99,116,32,102, + 114,111,109,32,123,33,114,125,78,122,23,78,111,110,45,99, + 111,100,101,32,111,98,106,101,99,116,32,105,110,32,123,33, + 114,125,114,108,0,0,0,114,37,0,0,0,41,9,218,7, + 109,97,114,115,104,97,108,90,5,108,111,97,100,115,218,10, + 105,115,105,110,115,116,97,110,99,101,218,10,95,99,111,100, + 101,95,116,121,112,101,114,107,0,0,0,218,4,95,105,109, + 112,90,16,95,102,105,120,95,99,111,95,102,105,108,101,110, + 97,109,101,114,109,0,0,0,114,49,0,0,0,41,5,114, + 55,0,0,0,114,108,0,0,0,114,91,0,0,0,114,92, + 0,0,0,218,4,99,111,100,101,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,17,95,99,111,109,112,105, + 108,101,95,98,121,116,101,99,111,100,101,226,1,0,0,115, + 16,0,0,0,0,2,15,1,15,1,13,1,12,1,16,1, + 4,2,18,1,114,149,0,0,0,114,61,0,0,0,99,3, + 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, + 0,0,0,115,76,0,0,0,116,0,0,116,1,0,131,1, + 0,125,3,0,124,3,0,106,2,0,116,3,0,124,1,0, + 131,1,0,131,1,0,1,124,3,0,106,2,0,116,3,0, + 124,2,0,131,1,0,131,1,0,1,124,3,0,106,2,0, + 116,4,0,106,5,0,124,0,0,131,1,0,131,1,0,1, + 124,3,0,83,41,1,122,80,67,111,109,112,105,108,101,32, + 97,32,99,111,100,101,32,111,98,106,101,99,116,32,105,110, + 116,111,32,98,121,116,101,99,111,100,101,32,102,111,114,32, + 119,114,105,116,105,110,103,32,111,117,116,32,116,111,32,97, + 32,98,121,116,101,45,99,111,109,112,105,108,101,100,10,32, + 32,32,32,102,105,108,101,46,41,6,218,9,98,121,116,101, + 97,114,114,97,121,114,137,0,0,0,218,6,101,120,116,101, + 110,100,114,19,0,0,0,114,144,0,0,0,90,5,100,117, + 109,112,115,41,4,114,148,0,0,0,114,135,0,0,0,114, + 142,0,0,0,114,55,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,17,95,99,111,100,101,95, + 116,111,95,98,121,116,101,99,111,100,101,238,1,0,0,115, + 10,0,0,0,0,3,12,1,19,1,19,1,22,1,114,152, + 0,0,0,99,1,0,0,0,0,0,0,0,5,0,0,0, + 4,0,0,0,67,0,0,0,115,89,0,0,0,100,1,0, + 100,2,0,108,0,0,125,1,0,116,1,0,106,2,0,124, + 0,0,131,1,0,106,3,0,125,2,0,124,1,0,106,4, + 0,124,2,0,131,1,0,125,3,0,116,1,0,106,5,0, + 100,2,0,100,3,0,131,2,0,125,4,0,124,4,0,106, + 6,0,124,0,0,106,6,0,124,3,0,100,1,0,25,131, + 1,0,131,1,0,83,41,4,122,121,68,101,99,111,100,101, + 32,98,121,116,101,115,32,114,101,112,114,101,115,101,110,116, + 105,110,103,32,115,111,117,114,99,101,32,99,111,100,101,32, + 97,110,100,32,114,101,116,117,114,110,32,116,104,101,32,115, + 116,114,105,110,103,46,10,10,32,32,32,32,85,110,105,118, + 101,114,115,97,108,32,110,101,119,108,105,110,101,32,115,117, + 112,112,111,114,116,32,105,115,32,117,115,101,100,32,105,110, + 32,116,104,101,32,100,101,99,111,100,105,110,103,46,10,32, + 32,32,32,114,61,0,0,0,78,84,41,7,218,8,116,111, + 107,101,110,105,122,101,114,51,0,0,0,90,7,66,121,116, + 101,115,73,79,90,8,114,101,97,100,108,105,110,101,90,15, + 100,101,116,101,99,116,95,101,110,99,111,100,105,110,103,90, + 25,73,110,99,114,101,109,101,110,116,97,108,78,101,119,108, + 105,110,101,68,101,99,111,100,101,114,218,6,100,101,99,111, + 100,101,41,5,218,12,115,111,117,114,99,101,95,98,121,116, + 101,115,114,153,0,0,0,90,21,115,111,117,114,99,101,95, + 98,121,116,101,115,95,114,101,97,100,108,105,110,101,218,8, + 101,110,99,111,100,105,110,103,90,15,110,101,119,108,105,110, + 101,95,100,101,99,111,100,101,114,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,13,100,101,99,111,100,101, + 95,115,111,117,114,99,101,248,1,0,0,115,10,0,0,0, + 0,5,12,1,18,1,15,1,18,1,114,157,0,0,0,114, + 129,0,0,0,218,26,115,117,98,109,111,100,117,108,101,95, + 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, + 99,2,0,0,0,2,0,0,0,9,0,0,0,19,0,0, + 0,67,0,0,0,115,89,1,0,0,124,1,0,100,1,0, + 107,8,0,114,73,0,100,2,0,125,1,0,116,0,0,124, + 2,0,100,3,0,131,2,0,114,73,0,121,19,0,124,2, + 0,106,1,0,124,0,0,131,1,0,125,1,0,87,110,18, + 0,4,116,2,0,107,10,0,114,72,0,1,1,1,89,110, + 1,0,88,116,3,0,106,4,0,124,0,0,124,2,0,100, + 4,0,124,1,0,131,2,1,125,4,0,100,5,0,124,4, + 0,95,5,0,124,2,0,100,1,0,107,8,0,114,194,0, + 120,73,0,116,6,0,131,0,0,68,93,58,0,92,2,0, + 125,5,0,125,6,0,124,1,0,106,7,0,116,8,0,124, + 6,0,131,1,0,131,1,0,114,128,0,124,5,0,124,0, + 0,124,1,0,131,2,0,125,2,0,124,2,0,124,4,0, + 95,9,0,80,113,128,0,87,100,1,0,83,124,3,0,116, + 10,0,107,8,0,114,23,1,116,0,0,124,2,0,100,6, + 0,131,2,0,114,32,1,121,19,0,124,2,0,106,11,0, + 124,0,0,131,1,0,125,7,0,87,110,18,0,4,116,2, + 0,107,10,0,114,4,1,1,1,1,89,113,32,1,88,124, + 7,0,114,32,1,103,0,0,124,4,0,95,12,0,110,9, + 0,124,3,0,124,4,0,95,12,0,124,4,0,106,12,0, + 103,0,0,107,2,0,114,85,1,124,1,0,114,85,1,116, + 13,0,124,1,0,131,1,0,100,7,0,25,125,8,0,124, + 4,0,106,12,0,106,14,0,124,8,0,131,1,0,1,124, + 4,0,83,41,8,97,61,1,0,0,82,101,116,117,114,110, + 32,97,32,109,111,100,117,108,101,32,115,112,101,99,32,98, + 97,115,101,100,32,111,110,32,97,32,102,105,108,101,32,108, + 111,99,97,116,105,111,110,46,10,10,32,32,32,32,84,111, + 32,105,110,100,105,99,97,116,101,32,116,104,97,116,32,116, + 104,101,32,109,111,100,117,108,101,32,105,115,32,97,32,112, + 97,99,107,97,103,101,44,32,115,101,116,10,32,32,32,32, + 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, + 95,108,111,99,97,116,105,111,110,115,32,116,111,32,97,32, + 108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114, + 121,32,112,97,116,104,115,46,32,32,65,110,10,32,32,32, + 32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,115, + 117,102,102,105,99,105,101,110,116,44,32,116,104,111,117,103, + 104,32,105,116,115,32,110,111,116,32,111,116,104,101,114,119, + 105,115,101,32,117,115,101,102,117,108,32,116,111,32,116,104, + 101,10,32,32,32,32,105,109,112,111,114,116,32,115,121,115, + 116,101,109,46,10,10,32,32,32,32,84,104,101,32,108,111, + 97,100,101,114,32,109,117,115,116,32,116,97,107,101,32,97, + 32,115,112,101,99,32,97,115,32,105,116,115,32,111,110,108, + 121,32,95,95,105,110,105,116,95,95,40,41,32,97,114,103, + 46,10,10,32,32,32,32,78,122,9,60,117,110,107,110,111, + 119,110,62,218,12,103,101,116,95,102,105,108,101,110,97,109, + 101,218,6,111,114,105,103,105,110,84,218,10,105,115,95,112, + 97,99,107,97,103,101,114,61,0,0,0,41,15,114,117,0, + 0,0,114,159,0,0,0,114,109,0,0,0,114,123,0,0, + 0,218,10,77,111,100,117,108,101,83,112,101,99,90,13,95, + 115,101,116,95,102,105,108,101,97,116,116,114,218,27,95,103, + 101,116,95,115,117,112,112,111,114,116,101,100,95,102,105,108, + 101,95,108,111,97,100,101,114,115,114,94,0,0,0,114,95, + 0,0,0,114,129,0,0,0,218,9,95,80,79,80,85,76, + 65,84,69,114,161,0,0,0,114,158,0,0,0,114,40,0, + 0,0,218,6,97,112,112,101,110,100,41,9,114,108,0,0, + 0,90,8,108,111,99,97,116,105,111,110,114,129,0,0,0, + 114,158,0,0,0,218,4,115,112,101,99,218,12,108,111,97, + 100,101,114,95,99,108,97,115,115,218,8,115,117,102,102,105, + 120,101,115,114,161,0,0,0,90,7,100,105,114,110,97,109, + 101,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,23,115,112,101,99,95,102,114,111,109,95,102,105,108,101, + 95,108,111,99,97,116,105,111,110,9,2,0,0,115,60,0, + 0,0,0,12,12,4,6,1,15,2,3,1,19,1,13,1, + 5,8,24,1,9,3,12,1,22,1,21,1,15,1,9,1, + 5,2,4,3,12,2,15,1,3,1,19,1,13,1,5,2, + 6,1,12,2,9,1,15,1,6,1,16,1,16,2,114,169, + 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,64,0,0,0,115,121,0,0,0,101,0,0, + 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, + 2,0,90,4,0,100,3,0,90,5,0,100,4,0,90,6, + 0,101,7,0,100,5,0,100,6,0,132,0,0,131,1,0, + 90,8,0,101,7,0,100,7,0,100,8,0,132,0,0,131, + 1,0,90,9,0,101,7,0,100,9,0,100,9,0,100,10, + 0,100,11,0,132,2,0,131,1,0,90,10,0,101,7,0, + 100,9,0,100,12,0,100,13,0,132,1,0,131,1,0,90, + 11,0,100,9,0,83,41,14,218,21,87,105,110,100,111,119, + 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,122, + 62,77,101,116,97,32,112,97,116,104,32,102,105,110,100,101, + 114,32,102,111,114,32,109,111,100,117,108,101,115,32,100,101, + 99,108,97,114,101,100,32,105,110,32,116,104,101,32,87,105, + 110,100,111,119,115,32,114,101,103,105,115,116,114,121,46,122, + 59,83,111,102,116,119,97,114,101,92,80,121,116,104,111,110, + 92,80,121,116,104,111,110,67,111,114,101,92,123,115,121,115, + 95,118,101,114,115,105,111,110,125,92,77,111,100,117,108,101, + 115,92,123,102,117,108,108,110,97,109,101,125,122,65,83,111, + 102,116,119,97,114,101,92,80,121,116,104,111,110,92,80,121, + 116,104,111,110,67,111,114,101,92,123,115,121,115,95,118,101, + 114,115,105,111,110,125,92,77,111,100,117,108,101,115,92,123, + 102,117,108,108,110,97,109,101,125,92,68,101,98,117,103,70, + 99,2,0,0,0,0,0,0,0,2,0,0,0,11,0,0, + 0,67,0,0,0,115,67,0,0,0,121,23,0,116,0,0, + 106,1,0,116,0,0,106,2,0,124,1,0,131,2,0,83, + 87,110,37,0,4,116,3,0,107,10,0,114,62,0,1,1, + 1,116,0,0,106,1,0,116,0,0,106,4,0,124,1,0, + 131,2,0,83,89,110,1,0,88,100,0,0,83,41,1,78, + 41,5,218,7,95,119,105,110,114,101,103,90,7,79,112,101, + 110,75,101,121,90,17,72,75,69,89,95,67,85,82,82,69, + 78,84,95,85,83,69,82,114,42,0,0,0,90,18,72,75, + 69,89,95,76,79,67,65,76,95,77,65,67,72,73,78,69, + 41,2,218,3,99,108,115,114,5,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,14,95,111,112, + 101,110,95,114,101,103,105,115,116,114,121,87,2,0,0,115, + 8,0,0,0,0,2,3,1,23,1,13,1,122,36,87,105, + 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, + 100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,116, + 114,121,99,2,0,0,0,0,0,0,0,6,0,0,0,16, + 0,0,0,67,0,0,0,115,143,0,0,0,124,0,0,106, + 0,0,114,21,0,124,0,0,106,1,0,125,2,0,110,9, + 0,124,0,0,106,2,0,125,2,0,124,2,0,106,3,0, + 100,1,0,124,1,0,100,2,0,116,4,0,106,5,0,100, + 0,0,100,3,0,133,2,0,25,131,0,2,125,3,0,121, + 47,0,124,0,0,106,6,0,124,3,0,131,1,0,143,25, + 0,125,4,0,116,7,0,106,8,0,124,4,0,100,4,0, + 131,2,0,125,5,0,87,100,0,0,81,82,88,87,110,22, + 0,4,116,9,0,107,10,0,114,138,0,1,1,1,100,0, + 0,83,89,110,1,0,88,124,5,0,83,41,5,78,114,128, + 0,0,0,90,11,115,121,115,95,118,101,114,115,105,111,110, + 114,82,0,0,0,114,32,0,0,0,41,10,218,11,68,69, + 66,85,71,95,66,85,73,76,68,218,18,82,69,71,73,83, + 84,82,89,95,75,69,89,95,68,69,66,85,71,218,12,82, + 69,71,73,83,84,82,89,95,75,69,89,114,49,0,0,0, + 114,8,0,0,0,218,7,118,101,114,115,105,111,110,114,173, + 0,0,0,114,171,0,0,0,90,10,81,117,101,114,121,86, + 97,108,117,101,114,42,0,0,0,41,6,114,172,0,0,0, + 114,128,0,0,0,90,12,114,101,103,105,115,116,114,121,95, + 107,101,121,114,5,0,0,0,90,4,104,107,101,121,218,8, + 102,105,108,101,112,97,116,104,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,218,16,95,115,101,97,114,99,104, + 95,114,101,103,105,115,116,114,121,94,2,0,0,115,22,0, + 0,0,0,2,9,1,12,2,9,1,15,1,22,1,3,1, + 18,1,29,1,13,1,9,1,122,38,87,105,110,100,111,119, 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46, - 95,111,112,101,110,95,114,101,103,105,115,116,114,121,99,2, - 0,0,0,0,0,0,0,6,0,0,0,16,0,0,0,67, - 0,0,0,115,143,0,0,0,124,0,0,106,0,0,114,21, - 0,124,0,0,106,1,0,125,2,0,110,9,0,124,0,0, - 106,2,0,125,2,0,124,2,0,106,3,0,100,1,0,124, - 1,0,100,2,0,116,4,0,106,5,0,100,0,0,100,3, - 0,133,2,0,25,131,0,2,125,3,0,121,47,0,124,0, - 0,106,6,0,124,3,0,131,1,0,143,25,0,125,4,0, - 116,7,0,106,8,0,124,4,0,100,4,0,131,2,0,125, - 5,0,87,100,0,0,81,82,88,87,110,22,0,4,116,9, - 0,107,10,0,114,138,0,1,1,1,100,0,0,83,89,110, - 1,0,88,124,5,0,83,41,5,78,114,126,0,0,0,90, - 11,115,121,115,95,118,101,114,115,105,111,110,114,80,0,0, - 0,114,30,0,0,0,41,10,218,11,68,69,66,85,71,95, - 66,85,73,76,68,218,18,82,69,71,73,83,84,82,89,95, - 75,69,89,95,68,69,66,85,71,218,12,82,69,71,73,83, - 84,82,89,95,75,69,89,114,47,0,0,0,114,7,0,0, - 0,218,7,118,101,114,115,105,111,110,114,172,0,0,0,114, - 169,0,0,0,90,10,81,117,101,114,121,86,97,108,117,101, - 114,40,0,0,0,41,6,114,170,0,0,0,114,126,0,0, - 0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,114, - 171,0,0,0,90,4,104,107,101,121,218,8,102,105,108,101, - 112,97,116,104,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,103, - 105,115,116,114,121,86,2,0,0,115,22,0,0,0,0,2, - 9,1,12,2,9,1,15,1,22,1,3,1,18,1,29,1, - 13,1,9,1,122,38,87,105,110,100,111,119,115,82,101,103, - 105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,97, - 114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,0, - 0,0,0,0,0,0,8,0,0,0,14,0,0,0,67,0, - 0,0,115,158,0,0,0,124,0,0,106,0,0,124,1,0, - 131,1,0,125,4,0,124,4,0,100,0,0,107,8,0,114, - 31,0,100,0,0,83,121,14,0,116,1,0,124,4,0,131, - 1,0,1,87,110,22,0,4,116,2,0,107,10,0,114,69, - 0,1,1,1,100,0,0,83,89,110,1,0,88,120,81,0, - 116,3,0,131,0,0,68,93,70,0,92,2,0,125,5,0, - 125,6,0,124,4,0,106,4,0,116,5,0,124,6,0,131, - 1,0,131,1,0,114,80,0,116,6,0,106,7,0,124,1, - 0,124,5,0,124,1,0,124,4,0,131,2,0,100,1,0, - 124,4,0,131,2,1,125,7,0,124,7,0,83,113,80,0, - 87,100,0,0,83,41,2,78,114,158,0,0,0,41,8,114, - 178,0,0,0,114,39,0,0,0,114,40,0,0,0,114,161, - 0,0,0,114,92,0,0,0,114,93,0,0,0,114,121,0, - 0,0,218,16,115,112,101,99,95,102,114,111,109,95,108,111, - 97,100,101,114,41,8,114,170,0,0,0,114,126,0,0,0, - 114,35,0,0,0,218,6,116,97,114,103,101,116,114,177,0, - 0,0,114,127,0,0,0,114,166,0,0,0,114,164,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,9,102,105,110,100,95,115,112,101,99,101,2,0,0,115, - 26,0,0,0,0,2,15,1,12,1,4,1,3,1,14,1, - 13,1,9,1,22,1,21,1,9,1,15,1,9,1,122,31, - 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, - 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99, - 3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, - 67,0,0,0,115,45,0,0,0,124,0,0,106,0,0,124, - 1,0,124,2,0,131,2,0,125,3,0,124,3,0,100,1, - 0,107,9,0,114,37,0,124,3,0,106,1,0,83,100,1, - 0,83,100,1,0,83,41,2,122,108,70,105,110,100,32,109, - 111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116, - 104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32, - 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, - 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, - 32,32,32,32,32,32,78,41,2,114,181,0,0,0,114,127, - 0,0,0,41,4,114,170,0,0,0,114,126,0,0,0,114, - 35,0,0,0,114,164,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,11,102,105,110,100,95,109, - 111,100,117,108,101,117,2,0,0,115,8,0,0,0,0,7, - 18,1,12,1,7,2,122,33,87,105,110,100,111,119,115,82, - 101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105, - 110,100,95,109,111,100,117,108,101,41,12,114,112,0,0,0, - 114,111,0,0,0,114,113,0,0,0,114,114,0,0,0,114, - 175,0,0,0,114,174,0,0,0,114,173,0,0,0,218,11, - 99,108,97,115,115,109,101,116,104,111,100,114,172,0,0,0, - 114,178,0,0,0,114,181,0,0,0,114,182,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,168,0,0,0,67,2,0,0,115,20,0,0, - 0,12,2,6,3,6,3,6,2,6,2,18,7,18,15,3, - 1,21,15,3,1,114,168,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, - 70,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, - 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, - 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, - 0,100,7,0,132,0,0,90,6,0,100,8,0,100,9,0, - 132,0,0,90,7,0,100,10,0,83,41,11,218,13,95,76, - 111,97,100,101,114,66,97,115,105,99,115,122,83,66,97,115, - 101,32,99,108,97,115,115,32,111,102,32,99,111,109,109,111, - 110,32,99,111,100,101,32,110,101,101,100,101,100,32,98,121, - 32,98,111,116,104,32,83,111,117,114,99,101,76,111,97,100, - 101,114,32,97,110,100,10,32,32,32,32,83,111,117,114,99, - 101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,46, - 99,2,0,0,0,0,0,0,0,5,0,0,0,3,0,0, - 0,67,0,0,0,115,88,0,0,0,116,0,0,124,0,0, - 106,1,0,124,1,0,131,1,0,131,1,0,100,1,0,25, - 125,2,0,124,2,0,106,2,0,100,2,0,100,1,0,131, - 2,0,100,3,0,25,125,3,0,124,1,0,106,3,0,100, - 2,0,131,1,0,100,4,0,25,125,4,0,124,3,0,100, - 5,0,107,2,0,111,87,0,124,4,0,100,5,0,107,3, - 0,83,41,6,122,141,67,111,110,99,114,101,116,101,32,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, - 32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,105, - 115,95,112,97,99,107,97,103,101,32,98,121,32,99,104,101, - 99,107,105,110,103,32,105,102,10,32,32,32,32,32,32,32, - 32,116,104,101,32,112,97,116,104,32,114,101,116,117,114,110, - 101,100,32,98,121,32,103,101,116,95,102,105,108,101,110,97, - 109,101,32,104,97,115,32,97,32,102,105,108,101,110,97,109, - 101,32,111,102,32,39,95,95,105,110,105,116,95,95,46,112, - 121,39,46,114,29,0,0,0,114,58,0,0,0,114,59,0, - 0,0,114,56,0,0,0,218,8,95,95,105,110,105,116,95, - 95,41,4,114,38,0,0,0,114,157,0,0,0,114,34,0, - 0,0,114,32,0,0,0,41,5,114,108,0,0,0,114,126, - 0,0,0,114,94,0,0,0,90,13,102,105,108,101,110,97, - 109,101,95,98,97,115,101,90,9,116,97,105,108,95,110,97, - 109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,159,0,0,0,136,2,0,0,115,8,0,0,0,0, - 3,25,1,22,1,19,1,122,24,95,76,111,97,100,101,114, - 66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103, - 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,41, - 2,122,42,85,115,101,32,100,101,102,97,117,108,116,32,115, - 101,109,97,110,116,105,99,115,32,102,111,114,32,109,111,100, - 117,108,101,32,99,114,101,97,116,105,111,110,46,78,114,4, - 0,0,0,41,2,114,108,0,0,0,114,164,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,13, - 99,114,101,97,116,101,95,109,111,100,117,108,101,144,2,0, - 0,115,0,0,0,0,122,27,95,76,111,97,100,101,114,66, - 97,115,105,99,115,46,99,114,101,97,116,101,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,3,0,0,0, - 4,0,0,0,67,0,0,0,115,80,0,0,0,124,0,0, - 106,0,0,124,1,0,106,1,0,131,1,0,125,2,0,124, - 2,0,100,1,0,107,8,0,114,54,0,116,2,0,100,2, - 0,106,3,0,124,1,0,106,1,0,131,1,0,131,1,0, - 130,1,0,116,4,0,106,5,0,116,6,0,124,2,0,124, - 1,0,106,7,0,131,3,0,1,100,1,0,83,41,3,122, - 19,69,120,101,99,117,116,101,32,116,104,101,32,109,111,100, - 117,108,101,46,78,122,52,99,97,110,110,111,116,32,108,111, - 97,100,32,109,111,100,117,108,101,32,123,33,114,125,32,119, - 104,101,110,32,103,101,116,95,99,111,100,101,40,41,32,114, - 101,116,117,114,110,115,32,78,111,110,101,41,8,218,8,103, - 101,116,95,99,111,100,101,114,112,0,0,0,114,107,0,0, - 0,114,47,0,0,0,114,121,0,0,0,218,25,95,99,97, - 108,108,95,119,105,116,104,95,102,114,97,109,101,115,95,114, - 101,109,111,118,101,100,218,4,101,120,101,99,114,118,0,0, - 0,41,3,114,108,0,0,0,218,6,109,111,100,117,108,101, - 114,146,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,11,101,120,101,99,95,109,111,100,117,108, - 101,147,2,0,0,115,10,0,0,0,0,2,18,1,12,1, - 9,1,15,1,122,25,95,76,111,97,100,101,114,66,97,115, - 105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,99, - 2,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 67,0,0,0,115,16,0,0,0,116,0,0,106,1,0,124, - 0,0,124,1,0,131,2,0,83,41,1,78,41,2,114,121, - 0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,108, - 101,95,115,104,105,109,41,2,114,108,0,0,0,114,126,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,11,108,111,97,100,95,109,111,100,117,108,101,155,2, - 0,0,115,2,0,0,0,0,1,122,25,95,76,111,97,100, - 101,114,66,97,115,105,99,115,46,108,111,97,100,95,109,111, - 100,117,108,101,78,41,8,114,112,0,0,0,114,111,0,0, - 0,114,113,0,0,0,114,114,0,0,0,114,159,0,0,0, - 114,186,0,0,0,114,191,0,0,0,114,193,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,184,0,0,0,131,2,0,0,115,10,0,0, - 0,12,3,6,2,12,8,12,3,12,8,114,184,0,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,64,0,0,0,115,106,0,0,0,101,0,0,90,1,0, - 100,0,0,90,2,0,100,1,0,100,2,0,132,0,0,90, - 3,0,100,3,0,100,4,0,132,0,0,90,4,0,100,5, - 0,100,6,0,132,0,0,90,5,0,100,7,0,100,8,0, - 132,0,0,90,6,0,100,9,0,100,10,0,132,0,0,90, - 7,0,100,11,0,100,18,0,100,13,0,100,14,0,132,0, - 1,90,8,0,100,15,0,100,16,0,132,0,0,90,9,0, - 100,17,0,83,41,19,218,12,83,111,117,114,99,101,76,111, - 97,100,101,114,99,2,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,10,0,0,0,116,0, - 0,130,1,0,100,1,0,83,41,2,122,178,79,112,116,105, - 111,110,97,108,32,109,101,116,104,111,100,32,116,104,97,116, - 32,114,101,116,117,114,110,115,32,116,104,101,32,109,111,100, - 105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,40, - 97,110,32,105,110,116,41,32,102,111,114,32,116,104,101,10, - 32,32,32,32,32,32,32,32,115,112,101,99,105,102,105,101, - 100,32,112,97,116,104,44,32,119,104,101,114,101,32,112,97, - 116,104,32,105,115,32,97,32,115,116,114,46,10,10,32,32, - 32,32,32,32,32,32,82,97,105,115,101,115,32,73,79,69, - 114,114,111,114,32,119,104,101,110,32,116,104,101,32,112,97, - 116,104,32,99,97,110,110,111,116,32,98,101,32,104,97,110, - 100,108,101,100,46,10,32,32,32,32,32,32,32,32,78,41, - 1,218,7,73,79,69,114,114,111,114,41,2,114,108,0,0, - 0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,10,112,97,116,104,95,109,116,105,109, - 101,161,2,0,0,115,2,0,0,0,0,6,122,23,83,111, - 117,114,99,101,76,111,97,100,101,114,46,112,97,116,104,95, - 109,116,105,109,101,99,2,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,67,0,0,0,115,19,0,0,0,100, - 1,0,124,0,0,106,0,0,124,1,0,131,1,0,105,1, - 0,83,41,2,97,170,1,0,0,79,112,116,105,111,110,97, - 108,32,109,101,116,104,111,100,32,114,101,116,117,114,110,105, - 110,103,32,97,32,109,101,116,97,100,97,116,97,32,100,105, - 99,116,32,102,111,114,32,116,104,101,32,115,112,101,99,105, - 102,105,101,100,32,112,97,116,104,10,32,32,32,32,32,32, - 32,32,116,111,32,98,121,32,116,104,101,32,112,97,116,104, - 32,40,115,116,114,41,46,10,32,32,32,32,32,32,32,32, - 80,111,115,115,105,98,108,101,32,107,101,121,115,58,10,32, - 32,32,32,32,32,32,32,45,32,39,109,116,105,109,101,39, - 32,40,109,97,110,100,97,116,111,114,121,41,32,105,115,32, - 116,104,101,32,110,117,109,101,114,105,99,32,116,105,109,101, - 115,116,97,109,112,32,111,102,32,108,97,115,116,32,115,111, - 117,114,99,101,10,32,32,32,32,32,32,32,32,32,32,99, - 111,100,101,32,109,111,100,105,102,105,99,97,116,105,111,110, - 59,10,32,32,32,32,32,32,32,32,45,32,39,115,105,122, - 101,39,32,40,111,112,116,105,111,110,97,108,41,32,105,115, - 32,116,104,101,32,115,105,122,101,32,105,110,32,98,121,116, - 101,115,32,111,102,32,116,104,101,32,115,111,117,114,99,101, - 32,99,111,100,101,46,10,10,32,32,32,32,32,32,32,32, - 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, - 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, - 116,104,101,32,108,111,97,100,101,114,32,116,111,32,114,101, - 97,100,32,98,121,116,101,99,111,100,101,32,102,105,108,101, - 115,46,10,32,32,32,32,32,32,32,32,82,97,105,115,101, - 115,32,73,79,69,114,114,111,114,32,119,104,101,110,32,116, - 104,101,32,112,97,116,104,32,99,97,110,110,111,116,32,98, - 101,32,104,97,110,100,108,101,100,46,10,32,32,32,32,32, - 32,32,32,114,133,0,0,0,41,1,114,196,0,0,0,41, - 2,114,108,0,0,0,114,35,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,10,112,97,116,104, - 95,115,116,97,116,115,169,2,0,0,115,2,0,0,0,0, - 11,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, - 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, - 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, - 16,0,0,0,124,0,0,106,0,0,124,2,0,124,3,0, - 131,2,0,83,41,1,122,228,79,112,116,105,111,110,97,108, - 32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114, - 105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115, - 41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104, - 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32, - 32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,32, - 116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111, - 119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,105, - 110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,102, - 105,108,101,115,46,10,10,32,32,32,32,32,32,32,32,84, - 104,101,32,115,111,117,114,99,101,32,112,97,116,104,32,105, - 115,32,110,101,101,100,101,100,32,105,110,32,111,114,100,101, - 114,32,116,111,32,99,111,114,114,101,99,116,108,121,32,116, - 114,97,110,115,102,101,114,32,112,101,114,109,105,115,115,105, - 111,110,115,10,32,32,32,32,32,32,32,32,41,1,218,8, - 115,101,116,95,100,97,116,97,41,4,114,108,0,0,0,114, - 90,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104, - 114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,15,95,99,97,99,104,101,95,98,121,116, - 101,99,111,100,101,182,2,0,0,115,2,0,0,0,0,8, - 122,28,83,111,117,114,99,101,76,111,97,100,101,114,46,95, - 99,97,99,104,101,95,98,121,116,101,99,111,100,101,99,3, - 0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,1,0,83,41,2,122,150, + 95,115,101,97,114,99,104,95,114,101,103,105,115,116,114,121, + 78,99,4,0,0,0,0,0,0,0,8,0,0,0,14,0, + 0,0,67,0,0,0,115,158,0,0,0,124,0,0,106,0, + 0,124,1,0,131,1,0,125,4,0,124,4,0,100,0,0, + 107,8,0,114,31,0,100,0,0,83,121,14,0,116,1,0, + 124,4,0,131,1,0,1,87,110,22,0,4,116,2,0,107, + 10,0,114,69,0,1,1,1,100,0,0,83,89,110,1,0, + 88,120,81,0,116,3,0,131,0,0,68,93,70,0,92,2, + 0,125,5,0,125,6,0,124,4,0,106,4,0,116,5,0, + 124,6,0,131,1,0,131,1,0,114,80,0,116,6,0,106, + 7,0,124,1,0,124,5,0,124,1,0,124,4,0,131,2, + 0,100,1,0,124,4,0,131,2,1,125,7,0,124,7,0, + 83,113,80,0,87,100,0,0,83,41,2,78,114,160,0,0, + 0,41,8,114,179,0,0,0,114,41,0,0,0,114,42,0, + 0,0,114,163,0,0,0,114,94,0,0,0,114,95,0,0, + 0,114,123,0,0,0,218,16,115,112,101,99,95,102,114,111, + 109,95,108,111,97,100,101,114,41,8,114,172,0,0,0,114, + 128,0,0,0,114,37,0,0,0,218,6,116,97,114,103,101, + 116,114,178,0,0,0,114,129,0,0,0,114,168,0,0,0, + 114,166,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,9,102,105,110,100,95,115,112,101,99,109, + 2,0,0,115,26,0,0,0,0,2,15,1,12,1,4,1, + 3,1,14,1,13,1,9,1,22,1,21,1,9,1,15,1, + 9,1,122,31,87,105,110,100,111,119,115,82,101,103,105,115, + 116,114,121,70,105,110,100,101,114,46,102,105,110,100,95,115, + 112,101,99,99,3,0,0,0,0,0,0,0,4,0,0,0, + 3,0,0,0,67,0,0,0,115,45,0,0,0,124,0,0, + 106,0,0,124,1,0,124,2,0,131,2,0,125,3,0,124, + 3,0,100,1,0,107,9,0,114,37,0,124,3,0,106,1, + 0,83,100,1,0,83,100,1,0,83,41,2,122,108,70,105, + 110,100,32,109,111,100,117,108,101,32,110,97,109,101,100,32, + 105,110,32,116,104,101,32,114,101,103,105,115,116,114,121,46, + 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, + 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,46,32,32,85,115,101,32,101,120,101,99,95,109, + 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46, + 10,10,32,32,32,32,32,32,32,32,78,41,2,114,182,0, + 0,0,114,129,0,0,0,41,4,114,172,0,0,0,114,128, + 0,0,0,114,37,0,0,0,114,166,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,11,102,105, + 110,100,95,109,111,100,117,108,101,125,2,0,0,115,8,0, + 0,0,0,7,18,1,12,1,7,2,122,33,87,105,110,100, + 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, + 114,46,102,105,110,100,95,109,111,100,117,108,101,41,12,114, + 114,0,0,0,114,113,0,0,0,114,115,0,0,0,114,116, + 0,0,0,114,176,0,0,0,114,175,0,0,0,114,174,0, + 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, + 173,0,0,0,114,179,0,0,0,114,182,0,0,0,114,183, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,170,0,0,0,75,2,0,0, + 115,20,0,0,0,12,2,6,3,6,3,6,2,6,2,18, + 7,18,15,3,1,21,15,3,1,114,170,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64, + 0,0,0,115,70,0,0,0,101,0,0,90,1,0,100,0, + 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, + 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, + 5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,8, + 0,100,9,0,132,0,0,90,7,0,100,10,0,83,41,11, + 218,13,95,76,111,97,100,101,114,66,97,115,105,99,115,122, + 83,66,97,115,101,32,99,108,97,115,115,32,111,102,32,99, + 111,109,109,111,110,32,99,111,100,101,32,110,101,101,100,101, + 100,32,98,121,32,98,111,116,104,32,83,111,117,114,99,101, + 76,111,97,100,101,114,32,97,110,100,10,32,32,32,32,83, + 111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97, + 100,101,114,46,99,2,0,0,0,0,0,0,0,5,0,0, + 0,3,0,0,0,67,0,0,0,115,88,0,0,0,116,0, + 0,124,0,0,106,1,0,124,1,0,131,1,0,131,1,0, + 100,1,0,25,125,2,0,124,2,0,106,2,0,100,2,0, + 100,1,0,131,2,0,100,3,0,25,125,3,0,124,1,0, + 106,3,0,100,2,0,131,1,0,100,4,0,25,125,4,0, + 124,3,0,100,5,0,107,2,0,111,87,0,124,4,0,100, + 5,0,107,3,0,83,41,6,122,141,67,111,110,99,114,101, + 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, + 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, + 101,114,46,105,115,95,112,97,99,107,97,103,101,32,98,121, + 32,99,104,101,99,107,105,110,103,32,105,102,10,32,32,32, + 32,32,32,32,32,116,104,101,32,112,97,116,104,32,114,101, + 116,117,114,110,101,100,32,98,121,32,103,101,116,95,102,105, + 108,101,110,97,109,101,32,104,97,115,32,97,32,102,105,108, + 101,110,97,109,101,32,111,102,32,39,95,95,105,110,105,116, + 95,95,46,112,121,39,46,114,31,0,0,0,114,60,0,0, + 0,114,61,0,0,0,114,58,0,0,0,218,8,95,95,105, + 110,105,116,95,95,41,4,114,40,0,0,0,114,159,0,0, + 0,114,36,0,0,0,114,34,0,0,0,41,5,114,110,0, + 0,0,114,128,0,0,0,114,96,0,0,0,90,13,102,105, + 108,101,110,97,109,101,95,98,97,115,101,90,9,116,97,105, + 108,95,110,97,109,101,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,161,0,0,0,144,2,0,0,115,8, + 0,0,0,0,3,25,1,22,1,19,1,122,24,95,76,111, + 97,100,101,114,66,97,115,105,99,115,46,105,115,95,112,97, + 99,107,97,103,101,99,2,0,0,0,0,0,0,0,2,0, + 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, + 1,0,83,41,2,122,42,85,115,101,32,100,101,102,97,117, + 108,116,32,115,101,109,97,110,116,105,99,115,32,102,111,114, + 32,109,111,100,117,108,101,32,99,114,101,97,116,105,111,110, + 46,78,114,4,0,0,0,41,2,114,110,0,0,0,114,166, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,13,99,114,101,97,116,101,95,109,111,100,117,108, + 101,152,2,0,0,115,0,0,0,0,122,27,95,76,111,97, + 100,101,114,66,97,115,105,99,115,46,99,114,101,97,116,101, + 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, + 3,0,0,0,4,0,0,0,67,0,0,0,115,80,0,0, + 0,124,0,0,106,0,0,124,1,0,106,1,0,131,1,0, + 125,2,0,124,2,0,100,1,0,107,8,0,114,54,0,116, + 2,0,100,2,0,106,3,0,124,1,0,106,1,0,131,1, + 0,131,1,0,130,1,0,116,4,0,106,5,0,116,6,0, + 124,2,0,124,1,0,106,7,0,131,3,0,1,100,1,0, + 83,41,3,122,19,69,120,101,99,117,116,101,32,116,104,101, + 32,109,111,100,117,108,101,46,78,122,52,99,97,110,110,111, + 116,32,108,111,97,100,32,109,111,100,117,108,101,32,123,33, + 114,125,32,119,104,101,110,32,103,101,116,95,99,111,100,101, + 40,41,32,114,101,116,117,114,110,115,32,78,111,110,101,41, + 8,218,8,103,101,116,95,99,111,100,101,114,114,0,0,0, + 114,109,0,0,0,114,49,0,0,0,114,123,0,0,0,218, + 25,95,99,97,108,108,95,119,105,116,104,95,102,114,97,109, + 101,115,95,114,101,109,111,118,101,100,218,4,101,120,101,99, + 114,120,0,0,0,41,3,114,110,0,0,0,218,6,109,111, + 100,117,108,101,114,148,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,11,101,120,101,99,95,109, + 111,100,117,108,101,155,2,0,0,115,10,0,0,0,0,2, + 18,1,12,1,9,1,15,1,122,25,95,76,111,97,100,101, + 114,66,97,115,105,99,115,46,101,120,101,99,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,67,0,0,0,115,16,0,0,0,116,0,0, + 106,1,0,124,0,0,124,1,0,131,2,0,83,41,1,78, + 41,2,114,123,0,0,0,218,17,95,108,111,97,100,95,109, + 111,100,117,108,101,95,115,104,105,109,41,2,114,110,0,0, + 0,114,128,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,11,108,111,97,100,95,109,111,100,117, + 108,101,163,2,0,0,115,2,0,0,0,0,1,122,25,95, + 76,111,97,100,101,114,66,97,115,105,99,115,46,108,111,97, + 100,95,109,111,100,117,108,101,78,41,8,114,114,0,0,0, + 114,113,0,0,0,114,115,0,0,0,114,116,0,0,0,114, + 161,0,0,0,114,187,0,0,0,114,192,0,0,0,114,194, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,185,0,0,0,139,2,0,0, + 115,10,0,0,0,12,3,6,2,12,8,12,3,12,8,114, + 185,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,64,0,0,0,115,106,0,0,0,101,0, + 0,90,1,0,100,0,0,90,2,0,100,1,0,100,2,0, + 132,0,0,90,3,0,100,3,0,100,4,0,132,0,0,90, + 4,0,100,5,0,100,6,0,132,0,0,90,5,0,100,7, + 0,100,8,0,132,0,0,90,6,0,100,9,0,100,10,0, + 132,0,0,90,7,0,100,11,0,100,18,0,100,13,0,100, + 14,0,132,0,1,90,8,0,100,15,0,100,16,0,132,0, + 0,90,9,0,100,17,0,83,41,19,218,12,83,111,117,114, + 99,101,76,111,97,100,101,114,99,2,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,10,0, + 0,0,116,0,0,130,1,0,100,1,0,83,41,2,122,178, 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, - 119,104,105,99,104,32,119,114,105,116,101,115,32,100,97,116, - 97,32,40,98,121,116,101,115,41,32,116,111,32,97,32,102, - 105,108,101,32,112,97,116,104,32,40,97,32,115,116,114,41, - 46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,101, - 109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,116, - 104,111,100,32,97,108,108,111,119,115,32,102,111,114,32,116, - 104,101,32,119,114,105,116,105,110,103,32,111,102,32,98,121, - 116,101,99,111,100,101,32,102,105,108,101,115,46,10,32,32, - 32,32,32,32,32,32,78,114,4,0,0,0,41,3,114,108, - 0,0,0,114,35,0,0,0,114,53,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,198,0,0, - 0,192,2,0,0,115,0,0,0,0,122,21,83,111,117,114, - 99,101,76,111,97,100,101,114,46,115,101,116,95,100,97,116, - 97,99,2,0,0,0,0,0,0,0,5,0,0,0,16,0, - 0,0,67,0,0,0,115,105,0,0,0,124,0,0,106,0, - 0,124,1,0,131,1,0,125,2,0,121,19,0,124,0,0, - 106,1,0,124,2,0,131,1,0,125,3,0,87,110,58,0, - 4,116,2,0,107,10,0,114,94,0,1,125,4,0,1,122, - 26,0,116,3,0,100,1,0,100,2,0,124,1,0,131,1, - 1,124,4,0,130,2,0,87,89,100,3,0,100,3,0,125, - 4,0,126,4,0,88,110,1,0,88,116,4,0,124,3,0, - 131,1,0,83,41,4,122,52,67,111,110,99,114,101,116,101, - 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, - 111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,114, - 46,103,101,116,95,115,111,117,114,99,101,46,122,39,115,111, - 117,114,99,101,32,110,111,116,32,97,118,97,105,108,97,98, - 108,101,32,116,104,114,111,117,103,104,32,103,101,116,95,100, - 97,116,97,40,41,114,106,0,0,0,78,41,5,114,157,0, - 0,0,218,8,103,101,116,95,100,97,116,97,114,40,0,0, - 0,114,107,0,0,0,114,155,0,0,0,41,5,114,108,0, - 0,0,114,126,0,0,0,114,35,0,0,0,114,153,0,0, - 0,218,3,101,120,99,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,10,103,101,116,95,115,111,117,114,99, - 101,199,2,0,0,115,14,0,0,0,0,2,15,1,3,1, - 19,1,18,1,9,1,31,1,122,23,83,111,117,114,99,101, - 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, - 101,218,9,95,111,112,116,105,109,105,122,101,114,29,0,0, - 0,99,3,0,0,0,1,0,0,0,4,0,0,0,9,0, - 0,0,67,0,0,0,115,34,0,0,0,116,0,0,106,1, - 0,116,2,0,124,1,0,124,2,0,100,1,0,100,2,0, - 100,3,0,100,4,0,124,3,0,131,4,2,83,41,5,122, - 130,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, - 32,111,98,106,101,99,116,32,99,111,109,112,105,108,101,100, - 32,102,114,111,109,32,115,111,117,114,99,101,46,10,10,32, - 32,32,32,32,32,32,32,84,104,101,32,39,100,97,116,97, - 39,32,97,114,103,117,109,101,110,116,32,99,97,110,32,98, - 101,32,97,110,121,32,111,98,106,101,99,116,32,116,121,112, - 101,32,116,104,97,116,32,99,111,109,112,105,108,101,40,41, - 32,115,117,112,112,111,114,116,115,46,10,32,32,32,32,32, - 32,32,32,114,189,0,0,0,218,12,100,111,110,116,95,105, - 110,104,101,114,105,116,84,114,68,0,0,0,41,3,114,121, - 0,0,0,114,188,0,0,0,218,7,99,111,109,112,105,108, - 101,41,4,114,108,0,0,0,114,53,0,0,0,114,35,0, - 0,0,114,203,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,14,115,111,117,114,99,101,95,116, - 111,95,99,111,100,101,209,2,0,0,115,4,0,0,0,0, - 5,21,1,122,27,83,111,117,114,99,101,76,111,97,100,101, - 114,46,115,111,117,114,99,101,95,116,111,95,99,111,100,101, - 99,2,0,0,0,0,0,0,0,10,0,0,0,43,0,0, - 0,67,0,0,0,115,174,1,0,0,124,0,0,106,0,0, - 124,1,0,131,1,0,125,2,0,100,1,0,125,3,0,121, - 16,0,116,1,0,124,2,0,131,1,0,125,4,0,87,110, - 24,0,4,116,2,0,107,10,0,114,63,0,1,1,1,100, - 1,0,125,4,0,89,110,202,0,88,121,19,0,124,0,0, - 106,3,0,124,2,0,131,1,0,125,5,0,87,110,18,0, - 4,116,4,0,107,10,0,114,103,0,1,1,1,89,110,162, - 0,88,116,5,0,124,5,0,100,2,0,25,131,1,0,125, - 3,0,121,19,0,124,0,0,106,6,0,124,4,0,131,1, - 0,125,6,0,87,110,18,0,4,116,7,0,107,10,0,114, - 159,0,1,1,1,89,110,106,0,88,121,34,0,116,8,0, - 124,6,0,100,3,0,124,5,0,100,4,0,124,1,0,100, - 5,0,124,4,0,131,1,3,125,7,0,87,110,24,0,4, - 116,9,0,116,10,0,102,2,0,107,10,0,114,220,0,1, - 1,1,89,110,45,0,88,116,11,0,100,6,0,124,4,0, - 124,2,0,131,3,0,1,116,12,0,124,7,0,100,4,0, - 124,1,0,100,7,0,124,4,0,100,8,0,124,2,0,131, - 1,3,83,124,0,0,106,6,0,124,2,0,131,1,0,125, - 8,0,124,0,0,106,13,0,124,8,0,124,2,0,131,2, - 0,125,9,0,116,11,0,100,9,0,124,2,0,131,2,0, - 1,116,14,0,106,15,0,12,114,170,1,124,4,0,100,1, - 0,107,9,0,114,170,1,124,3,0,100,1,0,107,9,0, - 114,170,1,116,16,0,124,9,0,124,3,0,116,17,0,124, - 8,0,131,1,0,131,3,0,125,6,0,121,36,0,124,0, - 0,106,18,0,124,2,0,124,4,0,124,6,0,131,3,0, - 1,116,11,0,100,10,0,124,4,0,131,2,0,1,87,110, - 18,0,4,116,2,0,107,10,0,114,169,1,1,1,1,89, - 110,1,0,88,124,9,0,83,41,11,122,190,67,111,110,99, + 116,104,97,116,32,114,101,116,117,114,110,115,32,116,104,101, + 32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105, + 109,101,32,40,97,110,32,105,110,116,41,32,102,111,114,32, + 116,104,101,10,32,32,32,32,32,32,32,32,115,112,101,99, + 105,102,105,101,100,32,112,97,116,104,44,32,119,104,101,114, + 101,32,112,97,116,104,32,105,115,32,97,32,115,116,114,46, + 10,10,32,32,32,32,32,32,32,32,82,97,105,115,101,115, + 32,73,79,69,114,114,111,114,32,119,104,101,110,32,116,104, + 101,32,112,97,116,104,32,99,97,110,110,111,116,32,98,101, + 32,104,97,110,100,108,101,100,46,10,32,32,32,32,32,32, + 32,32,78,41,1,218,7,73,79,69,114,114,111,114,41,2, + 114,110,0,0,0,114,37,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,10,112,97,116,104,95, + 109,116,105,109,101,169,2,0,0,115,2,0,0,0,0,6, + 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,112, + 97,116,104,95,109,116,105,109,101,99,2,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,19, + 0,0,0,100,1,0,124,0,0,106,0,0,124,1,0,131, + 1,0,105,1,0,83,41,2,97,170,1,0,0,79,112,116, + 105,111,110,97,108,32,109,101,116,104,111,100,32,114,101,116, + 117,114,110,105,110,103,32,97,32,109,101,116,97,100,97,116, + 97,32,100,105,99,116,32,102,111,114,32,116,104,101,32,115, + 112,101,99,105,102,105,101,100,32,112,97,116,104,10,32,32, + 32,32,32,32,32,32,116,111,32,98,121,32,116,104,101,32, + 112,97,116,104,32,40,115,116,114,41,46,10,32,32,32,32, + 32,32,32,32,80,111,115,115,105,98,108,101,32,107,101,121, + 115,58,10,32,32,32,32,32,32,32,32,45,32,39,109,116, + 105,109,101,39,32,40,109,97,110,100,97,116,111,114,121,41, + 32,105,115,32,116,104,101,32,110,117,109,101,114,105,99,32, + 116,105,109,101,115,116,97,109,112,32,111,102,32,108,97,115, + 116,32,115,111,117,114,99,101,10,32,32,32,32,32,32,32, + 32,32,32,99,111,100,101,32,109,111,100,105,102,105,99,97, + 116,105,111,110,59,10,32,32,32,32,32,32,32,32,45,32, + 39,115,105,122,101,39,32,40,111,112,116,105,111,110,97,108, + 41,32,105,115,32,116,104,101,32,115,105,122,101,32,105,110, + 32,98,121,116,101,115,32,111,102,32,116,104,101,32,115,111, + 117,114,99,101,32,99,111,100,101,46,10,10,32,32,32,32, + 32,32,32,32,73,109,112,108,101,109,101,110,116,105,110,103, + 32,116,104,105,115,32,109,101,116,104,111,100,32,97,108,108, + 111,119,115,32,116,104,101,32,108,111,97,100,101,114,32,116, + 111,32,114,101,97,100,32,98,121,116,101,99,111,100,101,32, + 102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,82, + 97,105,115,101,115,32,73,79,69,114,114,111,114,32,119,104, + 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, + 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, + 32,32,32,32,32,32,32,114,135,0,0,0,41,1,114,197, + 0,0,0,41,2,114,110,0,0,0,114,37,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,10, + 112,97,116,104,95,115,116,97,116,115,177,2,0,0,115,2, + 0,0,0,0,11,122,23,83,111,117,114,99,101,76,111,97, + 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, + 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, + 0,0,0,115,16,0,0,0,124,0,0,106,0,0,124,2, + 0,124,3,0,131,2,0,83,41,1,122,228,79,112,116,105, + 111,110,97,108,32,109,101,116,104,111,100,32,119,104,105,99, + 104,32,119,114,105,116,101,115,32,100,97,116,97,32,40,98, + 121,116,101,115,41,32,116,111,32,97,32,102,105,108,101,32, + 112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32, + 32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,116, + 105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,32, + 97,108,108,111,119,115,32,102,111,114,32,116,104,101,32,119, + 114,105,116,105,110,103,32,111,102,32,98,121,116,101,99,111, + 100,101,32,102,105,108,101,115,46,10,10,32,32,32,32,32, + 32,32,32,84,104,101,32,115,111,117,114,99,101,32,112,97, + 116,104,32,105,115,32,110,101,101,100,101,100,32,105,110,32, + 111,114,100,101,114,32,116,111,32,99,111,114,114,101,99,116, + 108,121,32,116,114,97,110,115,102,101,114,32,112,101,114,109, + 105,115,115,105,111,110,115,10,32,32,32,32,32,32,32,32, + 41,1,218,8,115,101,116,95,100,97,116,97,41,4,114,110, + 0,0,0,114,92,0,0,0,90,10,99,97,99,104,101,95, + 112,97,116,104,114,55,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,15,95,99,97,99,104,101, + 95,98,121,116,101,99,111,100,101,190,2,0,0,115,2,0, + 0,0,0,8,122,28,83,111,117,114,99,101,76,111,97,100, + 101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111, + 100,101,99,3,0,0,0,0,0,0,0,3,0,0,0,1, + 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, + 41,2,122,150,79,112,116,105,111,110,97,108,32,109,101,116, + 104,111,100,32,119,104,105,99,104,32,119,114,105,116,101,115, + 32,100,97,116,97,32,40,98,121,116,101,115,41,32,116,111, + 32,97,32,102,105,108,101,32,112,97,116,104,32,40,97,32, + 115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,73, + 109,112,108,101,109,101,110,116,105,110,103,32,116,104,105,115, + 32,109,101,116,104,111,100,32,97,108,108,111,119,115,32,102, + 111,114,32,116,104,101,32,119,114,105,116,105,110,103,32,111, + 102,32,98,121,116,101,99,111,100,101,32,102,105,108,101,115, + 46,10,32,32,32,32,32,32,32,32,78,114,4,0,0,0, + 41,3,114,110,0,0,0,114,37,0,0,0,114,55,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 114,199,0,0,0,200,2,0,0,115,0,0,0,0,122,21, + 83,111,117,114,99,101,76,111,97,100,101,114,46,115,101,116, + 95,100,97,116,97,99,2,0,0,0,0,0,0,0,5,0, + 0,0,16,0,0,0,67,0,0,0,115,105,0,0,0,124, + 0,0,106,0,0,124,1,0,131,1,0,125,2,0,121,19, + 0,124,0,0,106,1,0,124,2,0,131,1,0,125,3,0, + 87,110,58,0,4,116,2,0,107,10,0,114,94,0,1,125, + 4,0,1,122,26,0,116,3,0,100,1,0,100,2,0,124, + 1,0,131,1,1,124,4,0,130,2,0,87,89,100,3,0, + 100,3,0,125,4,0,126,4,0,88,110,1,0,88,116,4, + 0,124,3,0,131,1,0,83,41,4,122,52,67,111,110,99, 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, - 97,100,101,114,46,103,101,116,95,99,111,100,101,46,10,10, - 32,32,32,32,32,32,32,32,82,101,97,100,105,110,103,32, - 111,102,32,98,121,116,101,99,111,100,101,32,114,101,113,117, - 105,114,101,115,32,112,97,116,104,95,115,116,97,116,115,32, - 116,111,32,98,101,32,105,109,112,108,101,109,101,110,116,101, - 100,46,32,84,111,32,119,114,105,116,101,10,32,32,32,32, - 32,32,32,32,98,121,116,101,99,111,100,101,44,32,115,101, - 116,95,100,97,116,97,32,109,117,115,116,32,97,108,115,111, - 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46, - 10,10,32,32,32,32,32,32,32,32,78,114,133,0,0,0, - 114,138,0,0,0,114,106,0,0,0,114,35,0,0,0,122, - 13,123,125,32,109,97,116,99,104,101,115,32,123,125,114,89, - 0,0,0,114,90,0,0,0,122,19,99,111,100,101,32,111, - 98,106,101,99,116,32,102,114,111,109,32,123,125,122,10,119, - 114,111,116,101,32,123,33,114,125,41,19,114,157,0,0,0, - 114,79,0,0,0,114,66,0,0,0,114,197,0,0,0,114, - 195,0,0,0,114,14,0,0,0,114,200,0,0,0,114,40, - 0,0,0,114,141,0,0,0,114,107,0,0,0,114,136,0, - 0,0,114,105,0,0,0,114,147,0,0,0,114,206,0,0, - 0,114,7,0,0,0,218,19,100,111,110,116,95,119,114,105, - 116,101,95,98,121,116,101,99,111,100,101,114,150,0,0,0, - 114,31,0,0,0,114,199,0,0,0,41,10,114,108,0,0, - 0,114,126,0,0,0,114,90,0,0,0,114,139,0,0,0, - 114,89,0,0,0,218,2,115,116,114,53,0,0,0,218,10, - 98,121,116,101,115,95,100,97,116,97,114,153,0,0,0,90, - 11,99,111,100,101,95,111,98,106,101,99,116,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,187,0,0,0, - 217,2,0,0,115,78,0,0,0,0,7,15,1,6,1,3, - 1,16,1,13,1,11,2,3,1,19,1,13,1,5,2,16, - 1,3,1,19,1,13,1,5,2,3,1,9,1,12,1,13, - 1,19,1,5,2,9,1,7,1,15,1,6,1,7,1,15, - 1,18,1,13,1,22,1,12,1,9,1,15,1,3,1,19, - 1,17,1,13,1,5,1,122,21,83,111,117,114,99,101,76, - 111,97,100,101,114,46,103,101,116,95,99,111,100,101,78,114, - 87,0,0,0,41,10,114,112,0,0,0,114,111,0,0,0, - 114,113,0,0,0,114,196,0,0,0,114,197,0,0,0,114, - 199,0,0,0,114,198,0,0,0,114,202,0,0,0,114,206, - 0,0,0,114,187,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,194,0,0, - 0,159,2,0,0,115,14,0,0,0,12,2,12,8,12,13, - 12,10,12,7,12,10,18,8,114,194,0,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, - 0,0,115,112,0,0,0,101,0,0,90,1,0,100,0,0, - 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, - 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, - 0,100,6,0,100,7,0,132,0,0,90,6,0,101,7,0, - 135,0,0,102,1,0,100,8,0,100,9,0,134,0,0,131, - 1,0,90,8,0,101,7,0,100,10,0,100,11,0,132,0, - 0,131,1,0,90,9,0,100,12,0,100,13,0,132,0,0, - 90,10,0,135,0,0,83,41,14,218,10,70,105,108,101,76, - 111,97,100,101,114,122,103,66,97,115,101,32,102,105,108,101, - 32,108,111,97,100,101,114,32,99,108,97,115,115,32,119,104, - 105,99,104,32,105,109,112,108,101,109,101,110,116,115,32,116, - 104,101,32,108,111,97,100,101,114,32,112,114,111,116,111,99, - 111,108,32,109,101,116,104,111,100,115,32,116,104,97,116,10, - 32,32,32,32,114,101,113,117,105,114,101,32,102,105,108,101, - 32,115,121,115,116,101,109,32,117,115,97,103,101,46,99,3, - 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67, - 0,0,0,115,22,0,0,0,124,1,0,124,0,0,95,0, - 0,124,2,0,124,0,0,95,1,0,100,1,0,83,41,2, - 122,75,67,97,99,104,101,32,116,104,101,32,109,111,100,117, - 108,101,32,110,97,109,101,32,97,110,100,32,116,104,101,32, - 112,97,116,104,32,116,111,32,116,104,101,32,102,105,108,101, - 32,102,111,117,110,100,32,98,121,32,116,104,101,10,32,32, - 32,32,32,32,32,32,102,105,110,100,101,114,46,78,41,2, - 114,106,0,0,0,114,35,0,0,0,41,3,114,108,0,0, - 0,114,126,0,0,0,114,35,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,185,0,0,0,18, - 3,0,0,115,4,0,0,0,0,3,9,1,122,19,70,105, - 108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, - 95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, - 0,0,67,0,0,0,115,34,0,0,0,124,0,0,106,0, - 0,124,1,0,106,0,0,107,2,0,111,33,0,124,0,0, - 106,1,0,124,1,0,106,1,0,107,2,0,83,41,1,78, - 41,2,218,9,95,95,99,108,97,115,115,95,95,114,118,0, - 0,0,41,2,114,108,0,0,0,218,5,111,116,104,101,114, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 6,95,95,101,113,95,95,24,3,0,0,115,4,0,0,0, - 0,1,18,1,122,17,70,105,108,101,76,111,97,100,101,114, - 46,95,95,101,113,95,95,99,1,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,0, - 0,116,0,0,124,0,0,106,1,0,131,1,0,116,0,0, - 124,0,0,106,2,0,131,1,0,65,83,41,1,78,41,3, - 218,4,104,97,115,104,114,106,0,0,0,114,35,0,0,0, - 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,8,95,95,104,97,115,104,95,95, - 28,3,0,0,115,2,0,0,0,0,1,122,19,70,105,108, - 101,76,111,97,100,101,114,46,95,95,104,97,115,104,95,95, - 99,2,0,0,0,0,0,0,0,2,0,0,0,3,0,0, - 0,3,0,0,0,115,22,0,0,0,116,0,0,116,1,0, - 124,0,0,131,2,0,106,2,0,124,1,0,131,1,0,83, - 41,1,122,100,76,111,97,100,32,97,32,109,111,100,117,108, - 101,32,102,114,111,109,32,97,32,102,105,108,101,46,10,10, - 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, - 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, - 32,32,32,32,32,32,32,32,41,3,218,5,115,117,112,101, - 114,114,210,0,0,0,114,193,0,0,0,41,2,114,108,0, - 0,0,114,126,0,0,0,41,1,114,211,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,193,0,0,0,31,3,0, - 0,115,2,0,0,0,0,10,122,22,70,105,108,101,76,111, - 97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101, - 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, - 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, - 83,41,1,122,58,82,101,116,117,114,110,32,116,104,101,32, - 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, - 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, - 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,41, - 1,114,35,0,0,0,41,2,114,108,0,0,0,114,126,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,157,0,0,0,43,3,0,0,115,2,0,0,0,0, - 3,122,23,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,0, - 0,0,0,3,0,0,0,9,0,0,0,67,0,0,0,115, - 42,0,0,0,116,0,0,106,1,0,124,1,0,100,1,0, - 131,2,0,143,17,0,125,2,0,124,2,0,106,2,0,131, - 0,0,83,87,100,2,0,81,82,88,100,2,0,83,41,3, - 122,39,82,101,116,117,114,110,32,116,104,101,32,100,97,116, - 97,32,102,114,111,109,32,112,97,116,104,32,97,115,32,114, - 97,119,32,98,121,116,101,115,46,218,1,114,78,41,3,114, - 49,0,0,0,114,50,0,0,0,90,4,114,101,97,100,41, - 3,114,108,0,0,0,114,35,0,0,0,114,54,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 200,0,0,0,48,3,0,0,115,4,0,0,0,0,2,21, - 1,122,19,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,100,97,116,97,41,11,114,112,0,0,0,114,111,0, - 0,0,114,113,0,0,0,114,114,0,0,0,114,185,0,0, - 0,114,213,0,0,0,114,215,0,0,0,114,123,0,0,0, - 114,193,0,0,0,114,157,0,0,0,114,200,0,0,0,114, - 4,0,0,0,114,4,0,0,0,41,1,114,211,0,0,0, - 114,5,0,0,0,114,210,0,0,0,13,3,0,0,115,14, - 0,0,0,12,3,6,2,12,6,12,4,12,3,24,12,18, - 5,114,210,0,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,64,0,0,0,115,64,0,0,0, - 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, - 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, - 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, - 100,8,0,100,9,0,132,0,1,90,6,0,100,10,0,83, - 41,11,218,16,83,111,117,114,99,101,70,105,108,101,76,111, - 97,100,101,114,122,62,67,111,110,99,114,101,116,101,32,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, - 32,83,111,117,114,99,101,76,111,97,100,101,114,32,117,115, - 105,110,103,32,116,104,101,32,102,105,108,101,32,115,121,115, - 116,101,109,46,99,2,0,0,0,0,0,0,0,3,0,0, - 0,4,0,0,0,67,0,0,0,115,34,0,0,0,116,0, - 0,124,1,0,131,1,0,125,2,0,100,1,0,124,2,0, - 106,1,0,100,2,0,124,2,0,106,2,0,105,2,0,83, - 41,3,122,33,82,101,116,117,114,110,32,116,104,101,32,109, - 101,116,97,100,97,116,97,32,102,111,114,32,116,104,101,32, - 112,97,116,104,46,114,133,0,0,0,114,134,0,0,0,41, - 3,114,39,0,0,0,218,8,115,116,95,109,116,105,109,101, - 90,7,115,116,95,115,105,122,101,41,3,114,108,0,0,0, - 114,35,0,0,0,114,208,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,197,0,0,0,58,3, - 0,0,115,4,0,0,0,0,2,12,1,122,27,83,111,117, - 114,99,101,70,105,108,101,76,111,97,100,101,114,46,112,97, - 116,104,95,115,116,97,116,115,99,4,0,0,0,0,0,0, - 0,5,0,0,0,5,0,0,0,67,0,0,0,115,34,0, - 0,0,116,0,0,124,1,0,131,1,0,125,4,0,124,0, - 0,106,1,0,124,2,0,124,3,0,100,1,0,124,4,0, - 131,2,1,83,41,2,78,218,5,95,109,111,100,101,41,2, - 114,97,0,0,0,114,198,0,0,0,41,5,114,108,0,0, - 0,114,90,0,0,0,114,89,0,0,0,114,53,0,0,0, - 114,42,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,199,0,0,0,63,3,0,0,115,4,0, - 0,0,0,2,12,1,122,32,83,111,117,114,99,101,70,105, - 108,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95, - 98,121,116,101,99,111,100,101,114,220,0,0,0,105,182,1, - 0,0,99,3,0,0,0,1,0,0,0,9,0,0,0,17, - 0,0,0,67,0,0,0,115,53,1,0,0,116,0,0,124, - 1,0,131,1,0,92,2,0,125,4,0,125,5,0,103,0, - 0,125,6,0,120,54,0,124,4,0,114,80,0,116,1,0, - 124,4,0,131,1,0,12,114,80,0,116,0,0,124,4,0, - 131,1,0,92,2,0,125,4,0,125,7,0,124,6,0,106, - 2,0,124,7,0,131,1,0,1,113,27,0,87,120,132,0, - 116,3,0,124,6,0,131,1,0,68,93,118,0,125,7,0, - 116,4,0,124,4,0,124,7,0,131,2,0,125,4,0,121, - 17,0,116,5,0,106,6,0,124,4,0,131,1,0,1,87, - 113,94,0,4,116,7,0,107,10,0,114,155,0,1,1,1, - 119,94,0,89,113,94,0,4,116,8,0,107,10,0,114,211, - 0,1,125,8,0,1,122,25,0,116,9,0,100,1,0,124, - 4,0,124,8,0,131,3,0,1,100,2,0,83,87,89,100, - 2,0,100,2,0,125,8,0,126,8,0,88,113,94,0,88, - 113,94,0,87,121,33,0,116,10,0,124,1,0,124,2,0, - 124,3,0,131,3,0,1,116,9,0,100,3,0,124,1,0, - 131,2,0,1,87,110,53,0,4,116,8,0,107,10,0,114, - 48,1,1,125,8,0,1,122,21,0,116,9,0,100,1,0, - 124,1,0,124,8,0,131,3,0,1,87,89,100,2,0,100, - 2,0,125,8,0,126,8,0,88,110,1,0,88,100,2,0, - 83,41,4,122,27,87,114,105,116,101,32,98,121,116,101,115, - 32,100,97,116,97,32,116,111,32,97,32,102,105,108,101,46, - 122,27,99,111,117,108,100,32,110,111,116,32,99,114,101,97, - 116,101,32,123,33,114,125,58,32,123,33,114,125,78,122,12, - 99,114,101,97,116,101,100,32,123,33,114,125,41,11,114,38, - 0,0,0,114,46,0,0,0,114,163,0,0,0,114,33,0, - 0,0,114,28,0,0,0,114,3,0,0,0,90,5,109,107, - 100,105,114,218,15,70,105,108,101,69,120,105,115,116,115,69, - 114,114,111,114,114,40,0,0,0,114,105,0,0,0,114,55, - 0,0,0,41,9,114,108,0,0,0,114,35,0,0,0,114, - 53,0,0,0,114,220,0,0,0,218,6,112,97,114,101,110, - 116,114,94,0,0,0,114,27,0,0,0,114,23,0,0,0, - 114,201,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,198,0,0,0,68,3,0,0,115,38,0, - 0,0,0,2,18,1,6,2,22,1,18,1,17,2,19,1, - 15,1,3,1,17,1,13,2,7,1,18,3,16,1,27,1, - 3,1,16,1,17,1,18,2,122,25,83,111,117,114,99,101, - 70,105,108,101,76,111,97,100,101,114,46,115,101,116,95,100, - 97,116,97,78,41,7,114,112,0,0,0,114,111,0,0,0, - 114,113,0,0,0,114,114,0,0,0,114,197,0,0,0,114, - 199,0,0,0,114,198,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,218,0, - 0,0,54,3,0,0,115,8,0,0,0,12,2,6,2,12, - 5,12,5,114,218,0,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,64,0,0,0,115,46,0, - 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, - 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, - 100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,83, - 41,7,218,20,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,122,45,76,111,97,100,101,114, - 32,119,104,105,99,104,32,104,97,110,100,108,101,115,32,115, - 111,117,114,99,101,108,101,115,115,32,102,105,108,101,32,105, - 109,112,111,114,116,115,46,99,2,0,0,0,0,0,0,0, - 5,0,0,0,6,0,0,0,67,0,0,0,115,76,0,0, - 0,124,0,0,106,0,0,124,1,0,131,1,0,125,2,0, - 124,0,0,106,1,0,124,2,0,131,1,0,125,3,0,116, - 2,0,124,3,0,100,1,0,124,1,0,100,2,0,124,2, - 0,131,1,2,125,4,0,116,3,0,124,4,0,100,1,0, - 124,1,0,100,3,0,124,2,0,131,1,2,83,41,4,78, - 114,106,0,0,0,114,35,0,0,0,114,89,0,0,0,41, - 4,114,157,0,0,0,114,200,0,0,0,114,141,0,0,0, - 114,147,0,0,0,41,5,114,108,0,0,0,114,126,0,0, - 0,114,35,0,0,0,114,53,0,0,0,114,209,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 187,0,0,0,101,3,0,0,115,8,0,0,0,0,1,15, - 1,15,1,24,1,122,29,83,111,117,114,99,101,108,101,115, - 115,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, - 99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, - 0,83,41,2,122,39,82,101,116,117,114,110,32,78,111,110, - 101,32,97,115,32,116,104,101,114,101,32,105,115,32,110,111, - 32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,4, - 0,0,0,41,2,114,108,0,0,0,114,126,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,202, - 0,0,0,107,3,0,0,115,2,0,0,0,0,2,122,31, - 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, - 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,78, - 41,6,114,112,0,0,0,114,111,0,0,0,114,113,0,0, - 0,114,114,0,0,0,114,187,0,0,0,114,202,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,223,0,0,0,97,3,0,0,115,6,0, - 0,0,12,2,6,2,12,6,114,223,0,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, - 0,0,115,136,0,0,0,101,0,0,90,1,0,100,0,0, - 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, - 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, - 0,100,6,0,100,7,0,132,0,0,90,6,0,100,8,0, - 100,9,0,132,0,0,90,7,0,100,10,0,100,11,0,132, - 0,0,90,8,0,100,12,0,100,13,0,132,0,0,90,9, - 0,100,14,0,100,15,0,132,0,0,90,10,0,100,16,0, - 100,17,0,132,0,0,90,11,0,101,12,0,100,18,0,100, - 19,0,132,0,0,131,1,0,90,13,0,100,20,0,83,41, - 21,218,19,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,122,93,76,111,97,100,101,114,32,102, - 111,114,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,115,46,10,10,32,32,32,32,84,104,101,32,99, - 111,110,115,116,114,117,99,116,111,114,32,105,115,32,100,101, - 115,105,103,110,101,100,32,116,111,32,119,111,114,107,32,119, - 105,116,104,32,70,105,108,101,70,105,110,100,101,114,46,10, - 10,32,32,32,32,99,3,0,0,0,0,0,0,0,3,0, - 0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,124, - 1,0,124,0,0,95,0,0,124,2,0,124,0,0,95,1, - 0,100,0,0,83,41,1,78,41,2,114,106,0,0,0,114, - 35,0,0,0,41,3,114,108,0,0,0,114,106,0,0,0, - 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,185,0,0,0,124,3,0,0,115,4,0, - 0,0,0,1,9,1,122,28,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110, - 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, - 0,2,0,0,0,67,0,0,0,115,34,0,0,0,124,0, - 0,106,0,0,124,1,0,106,0,0,107,2,0,111,33,0, - 124,0,0,106,1,0,124,1,0,106,1,0,107,2,0,83, - 41,1,78,41,2,114,211,0,0,0,114,118,0,0,0,41, - 2,114,108,0,0,0,114,212,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,213,0,0,0,128, - 3,0,0,115,4,0,0,0,0,1,18,1,122,26,69,120, - 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,46,95,95,101,113,95,95,99,1,0,0,0,0,0,0, - 0,1,0,0,0,3,0,0,0,67,0,0,0,115,26,0, - 0,0,116,0,0,124,0,0,106,1,0,131,1,0,116,0, - 0,124,0,0,106,2,0,131,1,0,65,83,41,1,78,41, - 3,114,214,0,0,0,114,106,0,0,0,114,35,0,0,0, - 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,215,0,0,0,132,3,0,0,115, - 2,0,0,0,0,1,122,28,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,95,95,104,97, - 115,104,95,95,99,2,0,0,0,0,0,0,0,3,0,0, - 0,4,0,0,0,67,0,0,0,115,47,0,0,0,116,0, - 0,106,1,0,116,2,0,106,3,0,124,1,0,131,2,0, - 125,2,0,116,4,0,100,1,0,124,1,0,106,5,0,124, - 0,0,106,6,0,131,3,0,1,124,2,0,83,41,2,122, - 38,67,114,101,97,116,101,32,97,110,32,117,110,105,116,105, - 97,108,105,122,101,100,32,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,122,38,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,32,123,33,114,125,32,108, - 111,97,100,101,100,32,102,114,111,109,32,123,33,114,125,41, - 7,114,121,0,0,0,114,188,0,0,0,114,145,0,0,0, - 90,14,99,114,101,97,116,101,95,100,121,110,97,109,105,99, - 114,105,0,0,0,114,106,0,0,0,114,35,0,0,0,41, - 3,114,108,0,0,0,114,164,0,0,0,114,190,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 186,0,0,0,135,3,0,0,115,10,0,0,0,0,2,6, - 1,15,1,6,1,16,1,122,33,69,120,116,101,110,115,105, - 111,110,70,105,108,101,76,111,97,100,101,114,46,99,114,101, - 97,116,101,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, - 45,0,0,0,116,0,0,106,1,0,116,2,0,106,3,0, - 124,1,0,131,2,0,1,116,4,0,100,1,0,124,0,0, - 106,5,0,124,0,0,106,6,0,131,3,0,1,100,2,0, - 83,41,3,122,30,73,110,105,116,105,97,108,105,122,101,32, - 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,122,40,101,120,116,101,110,115,105,111,110,32,109, - 111,100,117,108,101,32,123,33,114,125,32,101,120,101,99,117, - 116,101,100,32,102,114,111,109,32,123,33,114,125,78,41,7, - 114,121,0,0,0,114,188,0,0,0,114,145,0,0,0,90, - 12,101,120,101,99,95,100,121,110,97,109,105,99,114,105,0, - 0,0,114,106,0,0,0,114,35,0,0,0,41,2,114,108, - 0,0,0,114,190,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,191,0,0,0,143,3,0,0, - 115,6,0,0,0,0,2,19,1,6,1,122,31,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0, - 0,0,0,0,0,2,0,0,0,4,0,0,0,3,0,0, - 0,115,48,0,0,0,116,0,0,124,0,0,106,1,0,131, - 1,0,100,1,0,25,137,0,0,116,2,0,135,0,0,102, - 1,0,100,2,0,100,3,0,134,0,0,116,3,0,68,131, - 1,0,131,1,0,83,41,4,122,49,82,101,116,117,114,110, - 32,84,114,117,101,32,105,102,32,116,104,101,32,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,32,105,115, - 32,97,32,112,97,99,107,97,103,101,46,114,29,0,0,0, - 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,51,0,0,0,115,31,0,0,0,124,0,0,93,21,0, - 125,1,0,136,0,0,100,0,0,124,1,0,23,107,2,0, - 86,1,113,3,0,100,1,0,83,41,2,114,185,0,0,0, - 78,114,4,0,0,0,41,2,114,22,0,0,0,218,6,115, - 117,102,102,105,120,41,1,218,9,102,105,108,101,95,110,97, - 109,101,114,4,0,0,0,114,5,0,0,0,250,9,60,103, - 101,110,101,120,112,114,62,152,3,0,0,115,2,0,0,0, - 6,1,122,49,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, - 103,101,46,60,108,111,99,97,108,115,62,46,60,103,101,110, - 101,120,112,114,62,41,4,114,38,0,0,0,114,35,0,0, - 0,218,3,97,110,121,218,18,69,88,84,69,78,83,73,79, - 78,95,83,85,70,70,73,88,69,83,41,2,114,108,0,0, - 0,114,126,0,0,0,114,4,0,0,0,41,1,114,226,0, - 0,0,114,5,0,0,0,114,159,0,0,0,149,3,0,0, - 115,6,0,0,0,0,2,19,1,18,1,122,30,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,1,0,83,41,2,122,63,82,101,116, - 117,114,110,32,78,111,110,101,32,97,115,32,97,110,32,101, - 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, - 99,97,110,110,111,116,32,99,114,101,97,116,101,32,97,32, - 99,111,100,101,32,111,98,106,101,99,116,46,78,114,4,0, - 0,0,41,2,114,108,0,0,0,114,126,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,187,0, - 0,0,155,3,0,0,115,2,0,0,0,0,2,122,28,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,1,0,83,41,2,122,53,82,101,116, - 117,114,110,32,78,111,110,101,32,97,115,32,101,120,116,101, - 110,115,105,111,110,32,109,111,100,117,108,101,115,32,104,97, - 118,101,32,110,111,32,115,111,117,114,99,101,32,99,111,100, - 101,46,78,114,4,0,0,0,41,2,114,108,0,0,0,114, - 126,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,202,0,0,0,159,3,0,0,115,2,0,0, - 0,0,2,122,30,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, - 114,99,101,99,2,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,115,7,0,0,0,124,0,0, - 106,0,0,83,41,1,122,58,82,101,116,117,114,110,32,116, - 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115, - 111,117,114,99,101,32,102,105,108,101,32,97,115,32,102,111, - 117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,101, - 114,46,41,1,114,35,0,0,0,41,2,114,108,0,0,0, - 114,126,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,157,0,0,0,163,3,0,0,115,2,0, - 0,0,0,3,122,32,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, - 108,101,110,97,109,101,78,41,14,114,112,0,0,0,114,111, - 0,0,0,114,113,0,0,0,114,114,0,0,0,114,185,0, - 0,0,114,213,0,0,0,114,215,0,0,0,114,186,0,0, - 0,114,191,0,0,0,114,159,0,0,0,114,187,0,0,0, - 114,202,0,0,0,114,123,0,0,0,114,157,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,224,0,0,0,116,3,0,0,115,20,0,0, - 0,12,6,6,2,12,4,12,4,12,3,12,8,12,6,12, - 6,12,4,12,4,114,224,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, - 130,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,46, + 122,39,115,111,117,114,99,101,32,110,111,116,32,97,118,97, + 105,108,97,98,108,101,32,116,104,114,111,117,103,104,32,103, + 101,116,95,100,97,116,97,40,41,114,108,0,0,0,78,41, + 5,114,159,0,0,0,218,8,103,101,116,95,100,97,116,97, + 114,42,0,0,0,114,109,0,0,0,114,157,0,0,0,41, + 5,114,110,0,0,0,114,128,0,0,0,114,37,0,0,0, + 114,155,0,0,0,218,3,101,120,99,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,10,103,101,116,95,115, + 111,117,114,99,101,207,2,0,0,115,14,0,0,0,0,2, + 15,1,3,1,19,1,18,1,9,1,31,1,122,23,83,111, + 117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,115, + 111,117,114,99,101,218,9,95,111,112,116,105,109,105,122,101, + 114,31,0,0,0,99,3,0,0,0,1,0,0,0,4,0, + 0,0,9,0,0,0,67,0,0,0,115,34,0,0,0,116, + 0,0,106,1,0,116,2,0,124,1,0,124,2,0,100,1, + 0,100,2,0,100,3,0,100,4,0,124,3,0,131,4,2, + 83,41,5,122,130,82,101,116,117,114,110,32,116,104,101,32, + 99,111,100,101,32,111,98,106,101,99,116,32,99,111,109,112, + 105,108,101,100,32,102,114,111,109,32,115,111,117,114,99,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,39, + 100,97,116,97,39,32,97,114,103,117,109,101,110,116,32,99, + 97,110,32,98,101,32,97,110,121,32,111,98,106,101,99,116, + 32,116,121,112,101,32,116,104,97,116,32,99,111,109,112,105, + 108,101,40,41,32,115,117,112,112,111,114,116,115,46,10,32, + 32,32,32,32,32,32,32,114,190,0,0,0,218,12,100,111, + 110,116,95,105,110,104,101,114,105,116,84,114,70,0,0,0, + 41,3,114,123,0,0,0,114,189,0,0,0,218,7,99,111, + 109,112,105,108,101,41,4,114,110,0,0,0,114,55,0,0, + 0,114,37,0,0,0,114,204,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,14,115,111,117,114, + 99,101,95,116,111,95,99,111,100,101,217,2,0,0,115,4, + 0,0,0,0,5,21,1,122,27,83,111,117,114,99,101,76, + 111,97,100,101,114,46,115,111,117,114,99,101,95,116,111,95, + 99,111,100,101,99,2,0,0,0,0,0,0,0,10,0,0, + 0,43,0,0,0,67,0,0,0,115,174,1,0,0,124,0, + 0,106,0,0,124,1,0,131,1,0,125,2,0,100,1,0, + 125,3,0,121,16,0,116,1,0,124,2,0,131,1,0,125, + 4,0,87,110,24,0,4,116,2,0,107,10,0,114,63,0, + 1,1,1,100,1,0,125,4,0,89,110,202,0,88,121,19, + 0,124,0,0,106,3,0,124,2,0,131,1,0,125,5,0, + 87,110,18,0,4,116,4,0,107,10,0,114,103,0,1,1, + 1,89,110,162,0,88,116,5,0,124,5,0,100,2,0,25, + 131,1,0,125,3,0,121,19,0,124,0,0,106,6,0,124, + 4,0,131,1,0,125,6,0,87,110,18,0,4,116,7,0, + 107,10,0,114,159,0,1,1,1,89,110,106,0,88,121,34, + 0,116,8,0,124,6,0,100,3,0,124,5,0,100,4,0, + 124,1,0,100,5,0,124,4,0,131,1,3,125,7,0,87, + 110,24,0,4,116,9,0,116,10,0,102,2,0,107,10,0, + 114,220,0,1,1,1,89,110,45,0,88,116,11,0,100,6, + 0,124,4,0,124,2,0,131,3,0,1,116,12,0,124,7, + 0,100,4,0,124,1,0,100,7,0,124,4,0,100,8,0, + 124,2,0,131,1,3,83,124,0,0,106,6,0,124,2,0, + 131,1,0,125,8,0,124,0,0,106,13,0,124,8,0,124, + 2,0,131,2,0,125,9,0,116,11,0,100,9,0,124,2, + 0,131,2,0,1,116,14,0,106,15,0,12,114,170,1,124, + 4,0,100,1,0,107,9,0,114,170,1,124,3,0,100,1, + 0,107,9,0,114,170,1,116,16,0,124,9,0,124,3,0, + 116,17,0,124,8,0,131,1,0,131,3,0,125,6,0,121, + 36,0,124,0,0,106,18,0,124,2,0,124,4,0,124,6, + 0,131,3,0,1,116,11,0,100,10,0,124,4,0,131,2, + 0,1,87,110,18,0,4,116,2,0,107,10,0,114,169,1, + 1,1,1,89,110,1,0,88,124,9,0,83,41,11,122,190, + 67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,101, + 110,116,97,116,105,111,110,32,111,102,32,73,110,115,112,101, + 99,116,76,111,97,100,101,114,46,103,101,116,95,99,111,100, + 101,46,10,10,32,32,32,32,32,32,32,32,82,101,97,100, + 105,110,103,32,111,102,32,98,121,116,101,99,111,100,101,32, + 114,101,113,117,105,114,101,115,32,112,97,116,104,95,115,116, + 97,116,115,32,116,111,32,98,101,32,105,109,112,108,101,109, + 101,110,116,101,100,46,32,84,111,32,119,114,105,116,101,10, + 32,32,32,32,32,32,32,32,98,121,116,101,99,111,100,101, + 44,32,115,101,116,95,100,97,116,97,32,109,117,115,116,32, + 97,108,115,111,32,98,101,32,105,109,112,108,101,109,101,110, + 116,101,100,46,10,10,32,32,32,32,32,32,32,32,78,114, + 135,0,0,0,114,140,0,0,0,114,108,0,0,0,114,37, + 0,0,0,122,13,123,125,32,109,97,116,99,104,101,115,32, + 123,125,114,91,0,0,0,114,92,0,0,0,122,19,99,111, + 100,101,32,111,98,106,101,99,116,32,102,114,111,109,32,123, + 125,122,10,119,114,111,116,101,32,123,33,114,125,41,19,114, + 159,0,0,0,114,81,0,0,0,114,68,0,0,0,114,198, + 0,0,0,114,196,0,0,0,114,16,0,0,0,114,201,0, + 0,0,114,42,0,0,0,114,143,0,0,0,114,109,0,0, + 0,114,138,0,0,0,114,107,0,0,0,114,149,0,0,0, + 114,207,0,0,0,114,8,0,0,0,218,19,100,111,110,116, + 95,119,114,105,116,101,95,98,121,116,101,99,111,100,101,114, + 152,0,0,0,114,33,0,0,0,114,200,0,0,0,41,10, + 114,110,0,0,0,114,128,0,0,0,114,92,0,0,0,114, + 141,0,0,0,114,91,0,0,0,218,2,115,116,114,55,0, + 0,0,218,10,98,121,116,101,115,95,100,97,116,97,114,155, + 0,0,0,90,11,99,111,100,101,95,111,98,106,101,99,116, + 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, + 188,0,0,0,225,2,0,0,115,78,0,0,0,0,7,15, + 1,6,1,3,1,16,1,13,1,11,2,3,1,19,1,13, + 1,5,2,16,1,3,1,19,1,13,1,5,2,3,1,9, + 1,12,1,13,1,19,1,5,2,9,1,7,1,15,1,6, + 1,7,1,15,1,18,1,13,1,22,1,12,1,9,1,15, + 1,3,1,19,1,17,1,13,1,5,1,122,21,83,111,117, + 114,99,101,76,111,97,100,101,114,46,103,101,116,95,99,111, + 100,101,78,114,89,0,0,0,41,10,114,114,0,0,0,114, + 113,0,0,0,114,115,0,0,0,114,197,0,0,0,114,198, + 0,0,0,114,200,0,0,0,114,199,0,0,0,114,203,0, + 0,0,114,207,0,0,0,114,188,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 114,195,0,0,0,167,2,0,0,115,14,0,0,0,12,2, + 12,8,12,13,12,10,12,7,12,10,18,8,114,195,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,0,0,0,0,115,112,0,0,0,101,0,0,90,1, + 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, + 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, + 0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,6, + 0,101,7,0,135,0,0,102,1,0,100,8,0,100,9,0, + 134,0,0,131,1,0,90,8,0,101,7,0,100,10,0,100, + 11,0,132,0,0,131,1,0,90,9,0,100,12,0,100,13, + 0,132,0,0,90,10,0,135,0,0,83,41,14,218,10,70, + 105,108,101,76,111,97,100,101,114,122,103,66,97,115,101,32, + 102,105,108,101,32,108,111,97,100,101,114,32,99,108,97,115, + 115,32,119,104,105,99,104,32,105,109,112,108,101,109,101,110, + 116,115,32,116,104,101,32,108,111,97,100,101,114,32,112,114, + 111,116,111,99,111,108,32,109,101,116,104,111,100,115,32,116, + 104,97,116,10,32,32,32,32,114,101,113,117,105,114,101,32, + 102,105,108,101,32,115,121,115,116,101,109,32,117,115,97,103, + 101,46,99,3,0,0,0,0,0,0,0,3,0,0,0,2, + 0,0,0,67,0,0,0,115,22,0,0,0,124,1,0,124, + 0,0,95,0,0,124,2,0,124,0,0,95,1,0,100,1, + 0,83,41,2,122,75,67,97,99,104,101,32,116,104,101,32, + 109,111,100,117,108,101,32,110,97,109,101,32,97,110,100,32, + 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, + 102,105,108,101,32,102,111,117,110,100,32,98,121,32,116,104, + 101,10,32,32,32,32,32,32,32,32,102,105,110,100,101,114, + 46,78,41,2,114,108,0,0,0,114,37,0,0,0,41,3, + 114,110,0,0,0,114,128,0,0,0,114,37,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,186, + 0,0,0,26,3,0,0,115,4,0,0,0,0,3,9,1, + 122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,105, + 110,105,116,95,95,99,2,0,0,0,0,0,0,0,2,0, + 0,0,2,0,0,0,67,0,0,0,115,34,0,0,0,124, + 0,0,106,0,0,124,1,0,106,0,0,107,2,0,111,33, + 0,124,0,0,106,1,0,124,1,0,106,1,0,107,2,0, + 83,41,1,78,41,2,218,9,95,95,99,108,97,115,115,95, + 95,114,120,0,0,0,41,2,114,110,0,0,0,218,5,111, + 116,104,101,114,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,218,6,95,95,101,113,95,95,32,3,0,0,115, + 4,0,0,0,0,1,18,1,122,17,70,105,108,101,76,111, + 97,100,101,114,46,95,95,101,113,95,95,99,1,0,0,0, + 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, + 115,26,0,0,0,116,0,0,124,0,0,106,1,0,131,1, + 0,116,0,0,124,0,0,106,2,0,131,1,0,65,83,41, + 1,78,41,3,218,4,104,97,115,104,114,108,0,0,0,114, + 37,0,0,0,41,1,114,110,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,8,95,95,104,97, + 115,104,95,95,36,3,0,0,115,2,0,0,0,0,1,122, + 19,70,105,108,101,76,111,97,100,101,114,46,95,95,104,97, + 115,104,95,95,99,2,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,3,0,0,0,115,22,0,0,0,116,0, + 0,116,1,0,124,0,0,131,2,0,106,2,0,124,1,0, + 131,1,0,83,41,1,122,100,76,111,97,100,32,97,32,109, + 111,100,117,108,101,32,102,114,111,109,32,97,32,102,105,108, + 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,32,85,115,101,32,101,120,101,99, + 95,109,111,100,117,108,101,40,41,32,105,110,115,116,101,97, + 100,46,10,10,32,32,32,32,32,32,32,32,41,3,218,5, + 115,117,112,101,114,114,211,0,0,0,114,194,0,0,0,41, + 2,114,110,0,0,0,114,128,0,0,0,41,1,114,212,0, + 0,0,114,4,0,0,0,114,6,0,0,0,114,194,0,0, + 0,39,3,0,0,115,2,0,0,0,0,10,122,22,70,105, + 108,101,76,111,97,100,101,114,46,108,111,97,100,95,109,111, + 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, + 0,1,0,0,0,67,0,0,0,115,7,0,0,0,124,0, + 0,106,0,0,83,41,1,122,58,82,101,116,117,114,110,32, + 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, + 115,111,117,114,99,101,32,102,105,108,101,32,97,115,32,102, + 111,117,110,100,32,98,121,32,116,104,101,32,102,105,110,100, + 101,114,46,41,1,114,37,0,0,0,41,2,114,110,0,0, + 0,114,128,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,159,0,0,0,51,3,0,0,115,2, + 0,0,0,0,3,122,23,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,102,105,108,101,110,97,109,101,99,2, + 0,0,0,0,0,0,0,3,0,0,0,9,0,0,0,67, + 0,0,0,115,42,0,0,0,116,0,0,106,1,0,124,1, + 0,100,1,0,131,2,0,143,17,0,125,2,0,124,2,0, + 106,2,0,131,0,0,83,87,100,2,0,81,82,88,100,2, + 0,83,41,3,122,39,82,101,116,117,114,110,32,116,104,101, + 32,100,97,116,97,32,102,114,111,109,32,112,97,116,104,32, + 97,115,32,114,97,119,32,98,121,116,101,115,46,218,1,114, + 78,41,3,114,51,0,0,0,114,52,0,0,0,90,4,114, + 101,97,100,41,3,114,110,0,0,0,114,37,0,0,0,114, + 56,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,201,0,0,0,56,3,0,0,115,4,0,0, + 0,0,2,21,1,122,19,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,100,97,116,97,41,11,114,114,0,0, + 0,114,113,0,0,0,114,115,0,0,0,114,116,0,0,0, + 114,186,0,0,0,114,214,0,0,0,114,216,0,0,0,114, + 125,0,0,0,114,194,0,0,0,114,159,0,0,0,114,201, + 0,0,0,114,4,0,0,0,114,4,0,0,0,41,1,114, + 212,0,0,0,114,6,0,0,0,114,211,0,0,0,21,3, + 0,0,115,14,0,0,0,12,3,6,2,12,6,12,4,12, + 3,24,12,18,5,114,211,0,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,64,0,0,0,115, + 64,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, - 0,100,7,0,132,0,0,90,6,0,100,8,0,100,9,0, - 132,0,0,90,7,0,100,10,0,100,11,0,132,0,0,90, - 8,0,100,12,0,100,13,0,132,0,0,90,9,0,100,14, - 0,100,15,0,132,0,0,90,10,0,100,16,0,100,17,0, - 132,0,0,90,11,0,100,18,0,100,19,0,132,0,0,90, - 12,0,100,20,0,83,41,21,218,14,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,97,38,1,0,0,82,101,112, - 114,101,115,101,110,116,115,32,97,32,110,97,109,101,115,112, - 97,99,101,32,112,97,99,107,97,103,101,39,115,32,112,97, - 116,104,46,32,32,73,116,32,117,115,101,115,32,116,104,101, - 32,109,111,100,117,108,101,32,110,97,109,101,10,32,32,32, - 32,116,111,32,102,105,110,100,32,105,116,115,32,112,97,114, - 101,110,116,32,109,111,100,117,108,101,44,32,97,110,100,32, - 102,114,111,109,32,116,104,101,114,101,32,105,116,32,108,111, - 111,107,115,32,117,112,32,116,104,101,32,112,97,114,101,110, - 116,39,115,10,32,32,32,32,95,95,112,97,116,104,95,95, - 46,32,32,87,104,101,110,32,116,104,105,115,32,99,104,97, - 110,103,101,115,44,32,116,104,101,32,109,111,100,117,108,101, - 39,115,32,111,119,110,32,112,97,116,104,32,105,115,32,114, - 101,99,111,109,112,117,116,101,100,44,10,32,32,32,32,117, - 115,105,110,103,32,112,97,116,104,95,102,105,110,100,101,114, - 46,32,32,70,111,114,32,116,111,112,45,108,101,118,101,108, - 32,109,111,100,117,108,101,115,44,32,116,104,101,32,112,97, - 114,101,110,116,32,109,111,100,117,108,101,39,115,32,112,97, - 116,104,10,32,32,32,32,105,115,32,115,121,115,46,112,97, - 116,104,46,99,4,0,0,0,0,0,0,0,4,0,0,0, - 2,0,0,0,67,0,0,0,115,52,0,0,0,124,1,0, - 124,0,0,95,0,0,124,2,0,124,0,0,95,1,0,116, - 2,0,124,0,0,106,3,0,131,0,0,131,1,0,124,0, - 0,95,4,0,124,3,0,124,0,0,95,5,0,100,0,0, - 83,41,1,78,41,6,218,5,95,110,97,109,101,218,5,95, - 112,97,116,104,114,93,0,0,0,218,16,95,103,101,116,95, - 112,97,114,101,110,116,95,112,97,116,104,218,17,95,108,97, - 115,116,95,112,97,114,101,110,116,95,112,97,116,104,218,12, - 95,112,97,116,104,95,102,105,110,100,101,114,41,4,114,108, - 0,0,0,114,106,0,0,0,114,35,0,0,0,218,11,112, - 97,116,104,95,102,105,110,100,101,114,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,185,0,0,0,176,3, - 0,0,115,8,0,0,0,0,1,9,1,9,1,21,1,122, - 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, - 0,4,0,0,0,3,0,0,0,67,0,0,0,115,53,0, - 0,0,124,0,0,106,0,0,106,1,0,100,1,0,131,1, - 0,92,3,0,125,1,0,125,2,0,125,3,0,124,2,0, - 100,2,0,107,2,0,114,43,0,100,6,0,83,124,1,0, - 100,5,0,102,2,0,83,41,7,122,62,82,101,116,117,114, - 110,115,32,97,32,116,117,112,108,101,32,111,102,32,40,112, - 97,114,101,110,116,45,109,111,100,117,108,101,45,110,97,109, - 101,44,32,112,97,114,101,110,116,45,112,97,116,104,45,97, - 116,116,114,45,110,97,109,101,41,114,58,0,0,0,114,30, - 0,0,0,114,7,0,0,0,114,35,0,0,0,90,8,95, - 95,112,97,116,104,95,95,41,2,122,3,115,121,115,122,4, - 112,97,116,104,41,2,114,231,0,0,0,114,32,0,0,0, - 41,4,114,108,0,0,0,114,222,0,0,0,218,3,100,111, - 116,90,2,109,101,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,23,95,102,105,110,100,95,112,97,114,101, - 110,116,95,112,97,116,104,95,110,97,109,101,115,182,3,0, - 0,115,8,0,0,0,0,2,27,1,12,2,4,3,122,38, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 102,105,110,100,95,112,97,114,101,110,116,95,112,97,116,104, - 95,110,97,109,101,115,99,1,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0, - 124,0,0,106,0,0,131,0,0,92,2,0,125,1,0,125, - 2,0,116,1,0,116,2,0,106,3,0,124,1,0,25,124, - 2,0,131,2,0,83,41,1,78,41,4,114,238,0,0,0, - 114,117,0,0,0,114,7,0,0,0,218,7,109,111,100,117, - 108,101,115,41,3,114,108,0,0,0,90,18,112,97,114,101, - 110,116,95,109,111,100,117,108,101,95,110,97,109,101,90,14, - 112,97,116,104,95,97,116,116,114,95,110,97,109,101,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,233,0, - 0,0,192,3,0,0,115,4,0,0,0,0,1,18,1,122, - 31,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,103,101,116,95,112,97,114,101,110,116,95,112,97,116,104, - 99,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0, - 0,67,0,0,0,115,118,0,0,0,116,0,0,124,0,0, - 106,1,0,131,0,0,131,1,0,125,1,0,124,1,0,124, - 0,0,106,2,0,107,3,0,114,111,0,124,0,0,106,3, - 0,124,0,0,106,4,0,124,1,0,131,2,0,125,2,0, - 124,2,0,100,0,0,107,9,0,114,102,0,124,2,0,106, - 5,0,100,0,0,107,8,0,114,102,0,124,2,0,106,6, - 0,114,102,0,124,2,0,106,6,0,124,0,0,95,7,0, - 124,1,0,124,0,0,95,2,0,124,0,0,106,7,0,83, - 41,1,78,41,8,114,93,0,0,0,114,233,0,0,0,114, - 234,0,0,0,114,235,0,0,0,114,231,0,0,0,114,127, - 0,0,0,114,156,0,0,0,114,232,0,0,0,41,3,114, - 108,0,0,0,90,11,112,97,114,101,110,116,95,112,97,116, - 104,114,164,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,12,95,114,101,99,97,108,99,117,108, - 97,116,101,196,3,0,0,115,16,0,0,0,0,2,18,1, - 15,1,21,3,27,1,9,1,12,1,9,1,122,27,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,114,101, - 99,97,108,99,117,108,97,116,101,99,1,0,0,0,0,0, - 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16, - 0,0,0,116,0,0,124,0,0,106,1,0,131,0,0,131, - 1,0,83,41,1,78,41,2,218,4,105,116,101,114,114,240, - 0,0,0,41,1,114,108,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,8,95,95,105,116,101, - 114,95,95,209,3,0,0,115,2,0,0,0,0,1,122,23, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,105,116,101,114,95,95,99,1,0,0,0,0,0,0,0, - 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, - 0,116,0,0,124,0,0,106,1,0,131,0,0,131,1,0, - 83,41,1,78,41,2,114,31,0,0,0,114,240,0,0,0, - 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,7,95,95,108,101,110,95,95,212, - 3,0,0,115,2,0,0,0,0,1,122,22,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,95,108,101,110, - 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, - 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, - 0,0,124,0,0,106,1,0,131,1,0,83,41,2,78,122, - 20,95,78,97,109,101,115,112,97,99,101,80,97,116,104,40, - 123,33,114,125,41,41,2,114,47,0,0,0,114,232,0,0, - 0,41,1,114,108,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,8,95,95,114,101,112,114,95, - 95,215,3,0,0,115,2,0,0,0,0,1,122,23,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,114, - 101,112,114,95,95,99,2,0,0,0,0,0,0,0,2,0, - 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,124, - 1,0,124,0,0,106,0,0,131,0,0,107,6,0,83,41, - 1,78,41,1,114,240,0,0,0,41,2,114,108,0,0,0, - 218,4,105,116,101,109,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,12,95,95,99,111,110,116,97,105,110, - 115,95,95,218,3,0,0,115,2,0,0,0,0,1,122,27, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,99,111,110,116,97,105,110,115,95,95,99,2,0,0,0, - 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, - 115,20,0,0,0,124,0,0,106,0,0,106,1,0,124,1, - 0,131,1,0,1,100,0,0,83,41,1,78,41,2,114,232, - 0,0,0,114,163,0,0,0,41,2,114,108,0,0,0,114, - 245,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,163,0,0,0,221,3,0,0,115,2,0,0, - 0,0,1,122,21,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,97,112,112,101,110,100,78,41,13,114,112,0, - 0,0,114,111,0,0,0,114,113,0,0,0,114,114,0,0, - 0,114,185,0,0,0,114,238,0,0,0,114,233,0,0,0, - 114,240,0,0,0,114,242,0,0,0,114,243,0,0,0,114, - 244,0,0,0,114,246,0,0,0,114,163,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,230,0,0,0,169,3,0,0,115,20,0,0,0, - 12,5,6,2,12,6,12,10,12,4,12,13,12,3,12,3, - 12,3,12,3,114,230,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,118, - 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, - 1,0,100,2,0,132,0,0,90,3,0,101,4,0,100,3, - 0,100,4,0,132,0,0,131,1,0,90,5,0,100,5,0, - 100,6,0,132,0,0,90,6,0,100,7,0,100,8,0,132, - 0,0,90,7,0,100,9,0,100,10,0,132,0,0,90,8, - 0,100,11,0,100,12,0,132,0,0,90,9,0,100,13,0, - 100,14,0,132,0,0,90,10,0,100,15,0,100,16,0,132, - 0,0,90,11,0,100,17,0,83,41,18,218,16,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,99,4,0, - 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, - 0,0,115,25,0,0,0,116,0,0,124,1,0,124,2,0, - 124,3,0,131,3,0,124,0,0,95,1,0,100,0,0,83, - 41,1,78,41,2,114,230,0,0,0,114,232,0,0,0,41, - 4,114,108,0,0,0,114,106,0,0,0,114,35,0,0,0, - 114,236,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,185,0,0,0,227,3,0,0,115,2,0, - 0,0,0,1,122,25,95,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, - 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, - 67,0,0,0,115,16,0,0,0,100,1,0,106,0,0,124, - 1,0,106,1,0,131,1,0,83,41,2,122,115,82,101,116, - 117,114,110,32,114,101,112,114,32,102,111,114,32,116,104,101, - 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, - 32,32,84,104,101,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,32,32,84,104,101, - 32,105,109,112,111,114,116,32,109,97,99,104,105,110,101,114, - 121,32,100,111,101,115,32,116,104,101,32,106,111,98,32,105, - 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, - 122,25,60,109,111,100,117,108,101,32,123,33,114,125,32,40, - 110,97,109,101,115,112,97,99,101,41,62,41,2,114,47,0, - 0,0,114,112,0,0,0,41,2,114,170,0,0,0,114,190, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,11,109,111,100,117,108,101,95,114,101,112,114,230, - 3,0,0,115,2,0,0,0,0,7,122,28,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,109,111,100, - 117,108,101,95,114,101,112,114,99,2,0,0,0,0,0,0, + 0,100,7,0,100,8,0,100,9,0,132,0,1,90,6,0, + 100,10,0,83,41,11,218,16,83,111,117,114,99,101,70,105, + 108,101,76,111,97,100,101,114,122,62,67,111,110,99,114,101, + 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, + 110,32,111,102,32,83,111,117,114,99,101,76,111,97,100,101, + 114,32,117,115,105,110,103,32,116,104,101,32,102,105,108,101, + 32,115,121,115,116,101,109,46,99,2,0,0,0,0,0,0, + 0,3,0,0,0,4,0,0,0,67,0,0,0,115,34,0, + 0,0,116,0,0,124,1,0,131,1,0,125,2,0,100,1, + 0,124,2,0,106,1,0,100,2,0,124,2,0,106,2,0, + 105,2,0,83,41,3,122,33,82,101,116,117,114,110,32,116, + 104,101,32,109,101,116,97,100,97,116,97,32,102,111,114,32, + 116,104,101,32,112,97,116,104,46,114,135,0,0,0,114,136, + 0,0,0,41,3,114,41,0,0,0,218,8,115,116,95,109, + 116,105,109,101,90,7,115,116,95,115,105,122,101,41,3,114, + 110,0,0,0,114,37,0,0,0,114,209,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,198,0, + 0,0,66,3,0,0,115,4,0,0,0,0,2,12,1,122, + 27,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101, + 114,46,112,97,116,104,95,115,116,97,116,115,99,4,0,0, + 0,0,0,0,0,5,0,0,0,5,0,0,0,67,0,0, + 0,115,34,0,0,0,116,0,0,124,1,0,131,1,0,125, + 4,0,124,0,0,106,1,0,124,2,0,124,3,0,100,1, + 0,124,4,0,131,2,1,83,41,2,78,218,5,95,109,111, + 100,101,41,2,114,99,0,0,0,114,199,0,0,0,41,5, + 114,110,0,0,0,114,92,0,0,0,114,91,0,0,0,114, + 55,0,0,0,114,44,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,200,0,0,0,71,3,0, + 0,115,4,0,0,0,0,2,12,1,122,32,83,111,117,114, + 99,101,70,105,108,101,76,111,97,100,101,114,46,95,99,97, + 99,104,101,95,98,121,116,101,99,111,100,101,114,221,0,0, + 0,105,182,1,0,0,99,3,0,0,0,1,0,0,0,9, + 0,0,0,17,0,0,0,67,0,0,0,115,53,1,0,0, + 116,0,0,124,1,0,131,1,0,92,2,0,125,4,0,125, + 5,0,103,0,0,125,6,0,120,54,0,124,4,0,114,80, + 0,116,1,0,124,4,0,131,1,0,12,114,80,0,116,0, + 0,124,4,0,131,1,0,92,2,0,125,4,0,125,7,0, + 124,6,0,106,2,0,124,7,0,131,1,0,1,113,27,0, + 87,120,132,0,116,3,0,124,6,0,131,1,0,68,93,118, + 0,125,7,0,116,4,0,124,4,0,124,7,0,131,2,0, + 125,4,0,121,17,0,116,5,0,106,6,0,124,4,0,131, + 1,0,1,87,113,94,0,4,116,7,0,107,10,0,114,155, + 0,1,1,1,119,94,0,89,113,94,0,4,116,8,0,107, + 10,0,114,211,0,1,125,8,0,1,122,25,0,116,9,0, + 100,1,0,124,4,0,124,8,0,131,3,0,1,100,2,0, + 83,87,89,100,2,0,100,2,0,125,8,0,126,8,0,88, + 113,94,0,88,113,94,0,87,121,33,0,116,10,0,124,1, + 0,124,2,0,124,3,0,131,3,0,1,116,9,0,100,3, + 0,124,1,0,131,2,0,1,87,110,53,0,4,116,8,0, + 107,10,0,114,48,1,1,125,8,0,1,122,21,0,116,9, + 0,100,1,0,124,1,0,124,8,0,131,3,0,1,87,89, + 100,2,0,100,2,0,125,8,0,126,8,0,88,110,1,0, + 88,100,2,0,83,41,4,122,27,87,114,105,116,101,32,98, + 121,116,101,115,32,100,97,116,97,32,116,111,32,97,32,102, + 105,108,101,46,122,27,99,111,117,108,100,32,110,111,116,32, + 99,114,101,97,116,101,32,123,33,114,125,58,32,123,33,114, + 125,78,122,12,99,114,101,97,116,101,100,32,123,33,114,125, + 41,11,114,40,0,0,0,114,48,0,0,0,114,165,0,0, + 0,114,35,0,0,0,114,30,0,0,0,114,3,0,0,0, + 90,5,109,107,100,105,114,218,15,70,105,108,101,69,120,105, + 115,116,115,69,114,114,111,114,114,42,0,0,0,114,107,0, + 0,0,114,57,0,0,0,41,9,114,110,0,0,0,114,37, + 0,0,0,114,55,0,0,0,114,221,0,0,0,218,6,112, + 97,114,101,110,116,114,96,0,0,0,114,29,0,0,0,114, + 25,0,0,0,114,202,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,199,0,0,0,76,3,0, + 0,115,38,0,0,0,0,2,18,1,6,2,22,1,18,1, + 17,2,19,1,15,1,3,1,17,1,13,2,7,1,18,3, + 16,1,27,1,3,1,16,1,17,1,18,2,122,25,83,111, + 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,115, + 101,116,95,100,97,116,97,78,41,7,114,114,0,0,0,114, + 113,0,0,0,114,115,0,0,0,114,116,0,0,0,114,198, + 0,0,0,114,200,0,0,0,114,199,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,219,0,0,0,62,3,0,0,115,8,0,0,0,12, + 2,6,2,12,5,12,5,114,219,0,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, + 0,115,46,0,0,0,101,0,0,90,1,0,100,0,0,90, + 2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0, + 0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0, + 100,6,0,83,41,7,218,20,83,111,117,114,99,101,108,101, + 115,115,70,105,108,101,76,111,97,100,101,114,122,45,76,111, + 97,100,101,114,32,119,104,105,99,104,32,104,97,110,100,108, + 101,115,32,115,111,117,114,99,101,108,101,115,115,32,102,105, + 108,101,32,105,109,112,111,114,116,115,46,99,2,0,0,0, + 0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,0, + 115,76,0,0,0,124,0,0,106,0,0,124,1,0,131,1, + 0,125,2,0,124,0,0,106,1,0,124,2,0,131,1,0, + 125,3,0,116,2,0,124,3,0,100,1,0,124,1,0,100, + 2,0,124,2,0,131,1,2,125,4,0,116,3,0,124,4, + 0,100,1,0,124,1,0,100,3,0,124,2,0,131,1,2, + 83,41,4,78,114,108,0,0,0,114,37,0,0,0,114,91, + 0,0,0,41,4,114,159,0,0,0,114,201,0,0,0,114, + 143,0,0,0,114,149,0,0,0,41,5,114,110,0,0,0, + 114,128,0,0,0,114,37,0,0,0,114,55,0,0,0,114, + 210,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,188,0,0,0,109,3,0,0,115,8,0,0, + 0,0,1,15,1,15,1,24,1,122,29,83,111,117,114,99, + 101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,46, + 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, - 0,0,100,1,0,83,41,2,78,84,114,4,0,0,0,41, - 2,114,108,0,0,0,114,126,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,159,0,0,0,239, - 3,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,105,115,95, - 112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, - 0,100,1,0,83,41,2,78,114,30,0,0,0,114,4,0, - 0,0,41,2,114,108,0,0,0,114,126,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,202,0, - 0,0,242,3,0,0,115,2,0,0,0,0,1,122,27,95, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,6,0,0,0,67,0,0,0,115, - 22,0,0,0,116,0,0,100,1,0,100,2,0,100,3,0, - 100,4,0,100,5,0,131,3,1,83,41,6,78,114,30,0, - 0,0,122,8,60,115,116,114,105,110,103,62,114,189,0,0, - 0,114,204,0,0,0,84,41,1,114,205,0,0,0,41,2, - 114,108,0,0,0,114,126,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,187,0,0,0,245,3, - 0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,101, - 115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,95, - 99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, - 0,83,41,2,122,42,85,115,101,32,100,101,102,97,117,108, - 116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,32, - 109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,46, - 78,114,4,0,0,0,41,2,114,108,0,0,0,114,164,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,186,0,0,0,248,3,0,0,115,0,0,0,0,122, - 30,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, + 0,0,100,1,0,83,41,2,122,39,82,101,116,117,114,110, + 32,78,111,110,101,32,97,115,32,116,104,101,114,101,32,105, + 115,32,110,111,32,115,111,117,114,99,101,32,99,111,100,101, + 46,78,114,4,0,0,0,41,2,114,110,0,0,0,114,128, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,203,0,0,0,115,3,0,0,115,2,0,0,0, + 0,2,122,31,83,111,117,114,99,101,108,101,115,115,70,105, + 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, + 114,99,101,78,41,6,114,114,0,0,0,114,113,0,0,0, + 114,115,0,0,0,114,116,0,0,0,114,188,0,0,0,114, + 203,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,224,0,0,0,105,3,0, + 0,115,6,0,0,0,12,2,6,2,12,6,114,224,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,64,0,0,0,115,136,0,0,0,101,0,0,90,1, + 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, + 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, + 0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,6, + 0,100,8,0,100,9,0,132,0,0,90,7,0,100,10,0, + 100,11,0,132,0,0,90,8,0,100,12,0,100,13,0,132, + 0,0,90,9,0,100,14,0,100,15,0,132,0,0,90,10, + 0,100,16,0,100,17,0,132,0,0,90,11,0,101,12,0, + 100,18,0,100,19,0,132,0,0,131,1,0,90,13,0,100, + 20,0,83,41,21,218,19,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,122,93,76,111,97,100, + 101,114,32,102,111,114,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,84, + 104,101,32,99,111,110,115,116,114,117,99,116,111,114,32,105, + 115,32,100,101,115,105,103,110,101,100,32,116,111,32,119,111, + 114,107,32,119,105,116,104,32,70,105,108,101,70,105,110,100, + 101,114,46,10,10,32,32,32,32,99,3,0,0,0,0,0, + 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,22, + 0,0,0,124,1,0,124,0,0,95,0,0,124,2,0,124, + 0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,108, + 0,0,0,114,37,0,0,0,41,3,114,110,0,0,0,114, + 108,0,0,0,114,37,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,186,0,0,0,132,3,0, + 0,115,4,0,0,0,0,1,9,1,122,28,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, + 95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0, + 0,2,0,0,0,2,0,0,0,67,0,0,0,115,34,0, + 0,0,124,0,0,106,0,0,124,1,0,106,0,0,107,2, + 0,111,33,0,124,0,0,106,1,0,124,1,0,106,1,0, + 107,2,0,83,41,1,78,41,2,114,212,0,0,0,114,120, + 0,0,0,41,2,114,110,0,0,0,114,213,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,214, + 0,0,0,136,3,0,0,115,4,0,0,0,0,1,18,1, + 122,26,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,95,95,101,113,95,95,99,1,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,26,0,0,0,116,0,0,124,0,0,106,1,0,131, + 1,0,116,0,0,124,0,0,106,2,0,131,1,0,65,83, + 41,1,78,41,3,114,215,0,0,0,114,108,0,0,0,114, + 37,0,0,0,41,1,114,110,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,216,0,0,0,140, + 3,0,0,115,2,0,0,0,0,1,122,28,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, + 95,95,104,97,115,104,95,95,99,2,0,0,0,0,0,0, + 0,3,0,0,0,4,0,0,0,67,0,0,0,115,47,0, + 0,0,116,0,0,106,1,0,116,2,0,106,3,0,124,1, + 0,131,2,0,125,2,0,116,4,0,100,1,0,124,1,0, + 106,5,0,124,0,0,106,6,0,131,3,0,1,124,2,0, + 83,41,2,122,38,67,114,101,97,116,101,32,97,110,32,117, + 110,105,116,105,97,108,105,122,101,100,32,101,120,116,101,110, + 115,105,111,110,32,109,111,100,117,108,101,122,38,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,32,123,33, + 114,125,32,108,111,97,100,101,100,32,102,114,111,109,32,123, + 33,114,125,41,7,114,123,0,0,0,114,189,0,0,0,114, + 147,0,0,0,90,14,99,114,101,97,116,101,95,100,121,110, + 97,109,105,99,114,107,0,0,0,114,108,0,0,0,114,37, + 0,0,0,41,3,114,110,0,0,0,114,166,0,0,0,114, + 191,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,187,0,0,0,143,3,0,0,115,10,0,0, + 0,0,2,6,1,15,1,6,1,16,1,122,33,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, + 46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,2, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, + 0,0,0,115,45,0,0,0,116,0,0,106,1,0,116,2, + 0,106,3,0,124,1,0,131,2,0,1,116,4,0,100,1, + 0,124,0,0,106,5,0,124,0,0,106,6,0,131,3,0, + 1,100,2,0,83,41,3,122,30,73,110,105,116,105,97,108, + 105,122,101,32,97,110,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,122,40,101,120,116,101,110,115,105, + 111,110,32,109,111,100,117,108,101,32,123,33,114,125,32,101, + 120,101,99,117,116,101,100,32,102,114,111,109,32,123,33,114, + 125,78,41,7,114,123,0,0,0,114,189,0,0,0,114,147, + 0,0,0,90,12,101,120,101,99,95,100,121,110,97,109,105, + 99,114,107,0,0,0,114,108,0,0,0,114,37,0,0,0, + 41,2,114,110,0,0,0,114,191,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,114,192,0,0,0, + 151,3,0,0,115,6,0,0,0,0,2,19,1,6,1,122, + 31,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,101,120,101,99,95,109,111,100,117,108,101, + 99,2,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,3,0,0,0,115,48,0,0,0,116,0,0,124,0,0, + 106,1,0,131,1,0,100,1,0,25,137,0,0,116,2,0, + 135,0,0,102,1,0,100,2,0,100,3,0,134,0,0,116, + 3,0,68,131,1,0,131,1,0,83,41,4,122,49,82,101, + 116,117,114,110,32,84,114,117,101,32,105,102,32,116,104,101, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,114, + 31,0,0,0,99,1,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,51,0,0,0,115,31,0,0,0,124,0, + 0,93,21,0,125,1,0,136,0,0,100,0,0,124,1,0, + 23,107,2,0,86,1,113,3,0,100,1,0,83,41,2,114, + 186,0,0,0,78,114,4,0,0,0,41,2,114,24,0,0, + 0,218,6,115,117,102,102,105,120,41,1,218,9,102,105,108, + 101,95,110,97,109,101,114,4,0,0,0,114,6,0,0,0, + 250,9,60,103,101,110,101,120,112,114,62,160,3,0,0,115, + 2,0,0,0,6,1,122,49,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,105,115,95,112, + 97,99,107,97,103,101,46,60,108,111,99,97,108,115,62,46, + 60,103,101,110,101,120,112,114,62,41,4,114,40,0,0,0, + 114,37,0,0,0,218,3,97,110,121,218,18,69,88,84,69, + 78,83,73,79,78,95,83,85,70,70,73,88,69,83,41,2, + 114,110,0,0,0,114,128,0,0,0,114,4,0,0,0,41, + 1,114,227,0,0,0,114,6,0,0,0,114,161,0,0,0, + 157,3,0,0,115,6,0,0,0,0,2,19,1,18,1,122, + 30,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,99, + 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,122, + 63,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, + 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, + 117,108,101,32,99,97,110,110,111,116,32,99,114,101,97,116, + 101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,46, + 78,114,4,0,0,0,41,2,114,110,0,0,0,114,128,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,188,0,0,0,163,3,0,0,115,2,0,0,0,0, + 2,122,28,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,99, 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,115,4,0,0,0,100,0,0,83,41,1,78, - 114,4,0,0,0,41,2,114,108,0,0,0,114,190,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,191,0,0,0,251,3,0,0,115,2,0,0,0,0,1, - 122,28,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, - 0,0,0,115,32,0,0,0,116,0,0,100,1,0,124,0, - 0,106,1,0,131,2,0,1,116,2,0,106,3,0,124,0, - 0,124,1,0,131,2,0,83,41,2,122,98,76,111,97,100, - 32,97,32,110,97,109,101,115,112,97,99,101,32,109,111,100, - 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, - 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,46,32,32,85,115,101,32,101,120, - 101,99,95,109,111,100,117,108,101,40,41,32,105,110,115,116, - 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,38, - 110,97,109,101,115,112,97,99,101,32,109,111,100,117,108,101, - 32,108,111,97,100,101,100,32,119,105,116,104,32,112,97,116, - 104,32,123,33,114,125,41,4,114,105,0,0,0,114,232,0, - 0,0,114,121,0,0,0,114,192,0,0,0,41,2,114,108, - 0,0,0,114,126,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,193,0,0,0,254,3,0,0, - 115,4,0,0,0,0,7,16,1,122,28,95,78,97,109,101, - 115,112,97,99,101,76,111,97,100,101,114,46,108,111,97,100, - 95,109,111,100,117,108,101,78,41,12,114,112,0,0,0,114, - 111,0,0,0,114,113,0,0,0,114,185,0,0,0,114,183, - 0,0,0,114,248,0,0,0,114,159,0,0,0,114,202,0, - 0,0,114,187,0,0,0,114,186,0,0,0,114,191,0,0, - 0,114,193,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,247,0,0,0,226, - 3,0,0,115,16,0,0,0,12,1,12,3,18,9,12,3, - 12,3,12,3,12,3,12,3,114,247,0,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,64,0, - 0,0,115,160,0,0,0,101,0,0,90,1,0,100,0,0, - 90,2,0,100,1,0,90,3,0,101,4,0,100,2,0,100, - 3,0,132,0,0,131,1,0,90,5,0,101,4,0,100,4, - 0,100,5,0,132,0,0,131,1,0,90,6,0,101,4,0, - 100,6,0,100,7,0,132,0,0,131,1,0,90,7,0,101, - 4,0,100,8,0,100,9,0,132,0,0,131,1,0,90,8, - 0,101,4,0,100,10,0,100,11,0,100,12,0,132,1,0, - 131,1,0,90,9,0,101,4,0,100,10,0,100,10,0,100, - 13,0,100,14,0,132,2,0,131,1,0,90,10,0,101,4, - 0,100,10,0,100,15,0,100,16,0,132,1,0,131,1,0, - 90,11,0,100,10,0,83,41,17,218,10,80,97,116,104,70, - 105,110,100,101,114,122,62,77,101,116,97,32,112,97,116,104, - 32,102,105,110,100,101,114,32,102,111,114,32,115,121,115,46, - 112,97,116,104,32,97,110,100,32,112,97,99,107,97,103,101, - 32,95,95,112,97,116,104,95,95,32,97,116,116,114,105,98, - 117,116,101,115,46,99,1,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,67,0,0,0,115,55,0,0,0,120, - 48,0,116,0,0,106,1,0,106,2,0,131,0,0,68,93, - 31,0,125,1,0,116,3,0,124,1,0,100,1,0,131,2, - 0,114,16,0,124,1,0,106,4,0,131,0,0,1,113,16, - 0,87,100,2,0,83,41,3,122,125,67,97,108,108,32,116, - 104,101,32,105,110,118,97,108,105,100,97,116,101,95,99,97, - 99,104,101,115,40,41,32,109,101,116,104,111,100,32,111,110, - 32,97,108,108,32,112,97,116,104,32,101,110,116,114,121,32, - 102,105,110,100,101,114,115,10,32,32,32,32,32,32,32,32, - 115,116,111,114,101,100,32,105,110,32,115,121,115,46,112,97, - 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, - 101,115,32,40,119,104,101,114,101,32,105,109,112,108,101,109, - 101,110,116,101,100,41,46,218,17,105,110,118,97,108,105,100, - 97,116,101,95,99,97,99,104,101,115,78,41,5,114,7,0, - 0,0,218,19,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,218,6,118,97,108,117,101,115,114, - 115,0,0,0,114,250,0,0,0,41,2,114,170,0,0,0, - 218,6,102,105,110,100,101,114,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,250,0,0,0,15,4,0,0, - 115,6,0,0,0,0,4,22,1,15,1,122,28,80,97,116, - 104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97, - 116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,0, - 0,0,3,0,0,0,12,0,0,0,67,0,0,0,115,107, - 0,0,0,116,0,0,106,1,0,100,1,0,107,9,0,114, - 41,0,116,0,0,106,1,0,12,114,41,0,116,2,0,106, - 3,0,100,2,0,116,4,0,131,2,0,1,120,59,0,116, - 0,0,106,1,0,68,93,44,0,125,2,0,121,14,0,124, - 2,0,124,1,0,131,1,0,83,87,113,51,0,4,116,5, - 0,107,10,0,114,94,0,1,1,1,119,51,0,89,113,51, - 0,88,113,51,0,87,100,1,0,83,100,1,0,83,41,3, - 122,113,83,101,97,114,99,104,32,115,101,113,117,101,110,99, - 101,32,111,102,32,104,111,111,107,115,32,102,111,114,32,97, - 32,102,105,110,100,101,114,32,102,111,114,32,39,112,97,116, - 104,39,46,10,10,32,32,32,32,32,32,32,32,73,102,32, - 39,104,111,111,107,115,39,32,105,115,32,102,97,108,115,101, - 32,116,104,101,110,32,117,115,101,32,115,121,115,46,112,97, - 116,104,95,104,111,111,107,115,46,10,10,32,32,32,32,32, - 32,32,32,78,122,23,115,121,115,46,112,97,116,104,95,104, - 111,111,107,115,32,105,115,32,101,109,112,116,121,41,6,114, - 7,0,0,0,218,10,112,97,116,104,95,104,111,111,107,115, - 114,60,0,0,0,114,61,0,0,0,114,125,0,0,0,114, - 107,0,0,0,41,3,114,170,0,0,0,114,35,0,0,0, - 90,4,104,111,111,107,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,11,95,112,97,116,104,95,104,111,111, - 107,115,23,4,0,0,115,16,0,0,0,0,7,25,1,16, - 1,16,1,3,1,14,1,13,1,12,2,122,22,80,97,116, - 104,70,105,110,100,101,114,46,95,112,97,116,104,95,104,111, - 111,107,115,99,2,0,0,0,0,0,0,0,3,0,0,0, - 19,0,0,0,67,0,0,0,115,123,0,0,0,124,1,0, - 100,1,0,107,2,0,114,53,0,121,16,0,116,0,0,106, - 1,0,131,0,0,125,1,0,87,110,22,0,4,116,2,0, - 107,10,0,114,52,0,1,1,1,100,2,0,83,89,110,1, - 0,88,121,17,0,116,3,0,106,4,0,124,1,0,25,125, - 2,0,87,110,46,0,4,116,5,0,107,10,0,114,118,0, - 1,1,1,124,0,0,106,6,0,124,1,0,131,1,0,125, - 2,0,124,2,0,116,3,0,106,4,0,124,1,0,60,89, - 110,1,0,88,124,2,0,83,41,3,122,210,71,101,116,32, - 116,104,101,32,102,105,110,100,101,114,32,102,111,114,32,116, - 104,101,32,112,97,116,104,32,101,110,116,114,121,32,102,114, - 111,109,32,115,121,115,46,112,97,116,104,95,105,109,112,111, - 114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,32, - 32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,104, - 32,101,110,116,114,121,32,105,115,32,110,111,116,32,105,110, - 32,116,104,101,32,99,97,99,104,101,44,32,102,105,110,100, - 32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101, - 32,102,105,110,100,101,114,10,32,32,32,32,32,32,32,32, - 97,110,100,32,99,97,99,104,101,32,105,116,46,32,73,102, - 32,110,111,32,102,105,110,100,101,114,32,105,115,32,97,118, - 97,105,108,97,98,108,101,44,32,115,116,111,114,101,32,78, - 111,110,101,46,10,10,32,32,32,32,32,32,32,32,114,30, - 0,0,0,78,41,7,114,3,0,0,0,114,45,0,0,0, - 218,17,70,105,108,101,78,111,116,70,111,117,110,100,69,114, - 114,111,114,114,7,0,0,0,114,251,0,0,0,114,137,0, - 0,0,114,255,0,0,0,41,3,114,170,0,0,0,114,35, - 0,0,0,114,253,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,20,95,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,40,4,0, - 0,115,22,0,0,0,0,8,12,1,3,1,16,1,13,3, - 9,1,3,1,17,1,13,1,15,1,18,1,122,31,80,97, - 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,99,3,0, - 0,0,0,0,0,0,6,0,0,0,3,0,0,0,67,0, - 0,0,115,119,0,0,0,116,0,0,124,2,0,100,1,0, - 131,2,0,114,39,0,124,2,0,106,1,0,124,1,0,131, - 1,0,92,2,0,125,3,0,125,4,0,110,21,0,124,2, - 0,106,2,0,124,1,0,131,1,0,125,3,0,103,0,0, - 125,4,0,124,3,0,100,0,0,107,9,0,114,88,0,116, - 3,0,106,4,0,124,1,0,124,3,0,131,2,0,83,116, - 3,0,106,5,0,124,1,0,100,0,0,131,2,0,125,5, - 0,124,4,0,124,5,0,95,6,0,124,5,0,83,41,2, - 78,114,124,0,0,0,41,7,114,115,0,0,0,114,124,0, - 0,0,114,182,0,0,0,114,121,0,0,0,114,179,0,0, - 0,114,160,0,0,0,114,156,0,0,0,41,6,114,170,0, - 0,0,114,126,0,0,0,114,253,0,0,0,114,127,0,0, - 0,114,128,0,0,0,114,164,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,16,95,108,101,103, - 97,99,121,95,103,101,116,95,115,112,101,99,62,4,0,0, - 115,18,0,0,0,0,4,15,1,24,2,15,1,6,1,12, - 1,16,1,18,1,9,1,122,27,80,97,116,104,70,105,110, - 100,101,114,46,95,108,101,103,97,99,121,95,103,101,116,95, - 115,112,101,99,78,99,4,0,0,0,0,0,0,0,9,0, - 0,0,5,0,0,0,67,0,0,0,115,243,0,0,0,103, - 0,0,125,4,0,120,230,0,124,2,0,68,93,191,0,125, - 5,0,116,0,0,124,5,0,116,1,0,116,2,0,102,2, - 0,131,2,0,115,43,0,113,13,0,124,0,0,106,3,0, - 124,5,0,131,1,0,125,6,0,124,6,0,100,1,0,107, - 9,0,114,13,0,116,4,0,124,6,0,100,2,0,131,2, - 0,114,106,0,124,6,0,106,5,0,124,1,0,124,3,0, - 131,2,0,125,7,0,110,18,0,124,0,0,106,6,0,124, - 1,0,124,6,0,131,2,0,125,7,0,124,7,0,100,1, - 0,107,8,0,114,139,0,113,13,0,124,7,0,106,7,0, - 100,1,0,107,9,0,114,158,0,124,7,0,83,124,7,0, - 106,8,0,125,8,0,124,8,0,100,1,0,107,8,0,114, - 191,0,116,9,0,100,3,0,131,1,0,130,1,0,124,4, - 0,106,10,0,124,8,0,131,1,0,1,113,13,0,87,116, - 11,0,106,12,0,124,1,0,100,1,0,131,2,0,125,7, - 0,124,4,0,124,7,0,95,8,0,124,7,0,83,100,1, - 0,83,41,4,122,63,70,105,110,100,32,116,104,101,32,108, - 111,97,100,101,114,32,111,114,32,110,97,109,101,115,112,97, - 99,101,95,112,97,116,104,32,102,111,114,32,116,104,105,115, - 32,109,111,100,117,108,101,47,112,97,99,107,97,103,101,32, - 110,97,109,101,46,78,114,181,0,0,0,122,19,115,112,101, - 99,32,109,105,115,115,105,110,103,32,108,111,97,100,101,114, - 41,13,114,143,0,0,0,114,69,0,0,0,218,5,98,121, - 116,101,115,114,1,1,0,0,114,115,0,0,0,114,181,0, - 0,0,114,2,1,0,0,114,127,0,0,0,114,156,0,0, - 0,114,107,0,0,0,114,149,0,0,0,114,121,0,0,0, - 114,160,0,0,0,41,9,114,170,0,0,0,114,126,0,0, - 0,114,35,0,0,0,114,180,0,0,0,218,14,110,97,109, - 101,115,112,97,99,101,95,112,97,116,104,90,5,101,110,116, - 114,121,114,253,0,0,0,114,164,0,0,0,114,128,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,9,95,103,101,116,95,115,112,101,99,77,4,0,0,115, - 40,0,0,0,0,5,6,1,13,1,21,1,3,1,15,1, - 12,1,15,1,21,2,18,1,12,1,3,1,15,1,4,1, - 9,1,12,1,12,5,17,2,18,1,9,1,122,20,80,97, - 116,104,70,105,110,100,101,114,46,95,103,101,116,95,115,112, - 101,99,99,4,0,0,0,0,0,0,0,6,0,0,0,4, - 0,0,0,67,0,0,0,115,140,0,0,0,124,2,0,100, - 1,0,107,8,0,114,21,0,116,0,0,106,1,0,125,2, - 0,124,0,0,106,2,0,124,1,0,124,2,0,124,3,0, - 131,3,0,125,4,0,124,4,0,100,1,0,107,8,0,114, - 58,0,100,1,0,83,124,4,0,106,3,0,100,1,0,107, - 8,0,114,132,0,124,4,0,106,4,0,125,5,0,124,5, - 0,114,125,0,100,2,0,124,4,0,95,5,0,116,6,0, - 124,1,0,124,5,0,124,0,0,106,2,0,131,3,0,124, - 4,0,95,4,0,124,4,0,83,100,1,0,83,110,4,0, - 124,4,0,83,100,1,0,83,41,3,122,98,102,105,110,100, - 32,116,104,101,32,109,111,100,117,108,101,32,111,110,32,115, - 121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104, - 39,32,98,97,115,101,100,32,111,110,32,115,121,115,46,112, - 97,116,104,95,104,111,111,107,115,32,97,110,100,10,32,32, - 32,32,32,32,32,32,115,121,115,46,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,46,78,90, - 9,110,97,109,101,115,112,97,99,101,41,7,114,7,0,0, - 0,114,35,0,0,0,114,5,1,0,0,114,127,0,0,0, - 114,156,0,0,0,114,158,0,0,0,114,230,0,0,0,41, - 6,114,170,0,0,0,114,126,0,0,0,114,35,0,0,0, - 114,180,0,0,0,114,164,0,0,0,114,4,1,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,181, - 0,0,0,109,4,0,0,115,26,0,0,0,0,4,12,1, - 9,1,21,1,12,1,4,1,15,1,9,1,6,3,9,1, - 24,1,4,2,7,2,122,20,80,97,116,104,70,105,110,100, - 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, + 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,122, + 53,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, + 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, + 115,32,104,97,118,101,32,110,111,32,115,111,117,114,99,101, + 32,99,111,100,101,46,78,114,4,0,0,0,41,2,114,110, + 0,0,0,114,128,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,203,0,0,0,167,3,0,0, + 115,2,0,0,0,0,2,122,30,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,103,101,116, + 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,115,7,0,0, + 0,124,0,0,106,0,0,83,41,1,122,58,82,101,116,117, + 114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,116, + 104,101,32,115,111,117,114,99,101,32,102,105,108,101,32,97, + 115,32,102,111,117,110,100,32,98,121,32,116,104,101,32,102, + 105,110,100,101,114,46,41,1,114,37,0,0,0,41,2,114, + 110,0,0,0,114,128,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,159,0,0,0,171,3,0, + 0,115,2,0,0,0,0,3,122,32,69,120,116,101,110,115, + 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, + 116,95,102,105,108,101,110,97,109,101,78,41,14,114,114,0, + 0,0,114,113,0,0,0,114,115,0,0,0,114,116,0,0, + 0,114,186,0,0,0,114,214,0,0,0,114,216,0,0,0, + 114,187,0,0,0,114,192,0,0,0,114,161,0,0,0,114, + 188,0,0,0,114,203,0,0,0,114,125,0,0,0,114,159, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,225,0,0,0,124,3,0,0, + 115,20,0,0,0,12,6,6,2,12,4,12,4,12,3,12, + 8,12,6,12,6,12,4,12,4,114,225,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64, + 0,0,0,115,130,0,0,0,101,0,0,90,1,0,100,0, + 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, + 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, + 5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,8, + 0,100,9,0,132,0,0,90,7,0,100,10,0,100,11,0, + 132,0,0,90,8,0,100,12,0,100,13,0,132,0,0,90, + 9,0,100,14,0,100,15,0,132,0,0,90,10,0,100,16, + 0,100,17,0,132,0,0,90,11,0,100,18,0,100,19,0, + 132,0,0,90,12,0,100,20,0,83,41,21,218,14,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,97,38,1,0, + 0,82,101,112,114,101,115,101,110,116,115,32,97,32,110,97, + 109,101,115,112,97,99,101,32,112,97,99,107,97,103,101,39, + 115,32,112,97,116,104,46,32,32,73,116,32,117,115,101,115, + 32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101, + 10,32,32,32,32,116,111,32,102,105,110,100,32,105,116,115, + 32,112,97,114,101,110,116,32,109,111,100,117,108,101,44,32, + 97,110,100,32,102,114,111,109,32,116,104,101,114,101,32,105, + 116,32,108,111,111,107,115,32,117,112,32,116,104,101,32,112, + 97,114,101,110,116,39,115,10,32,32,32,32,95,95,112,97, + 116,104,95,95,46,32,32,87,104,101,110,32,116,104,105,115, + 32,99,104,97,110,103,101,115,44,32,116,104,101,32,109,111, + 100,117,108,101,39,115,32,111,119,110,32,112,97,116,104,32, + 105,115,32,114,101,99,111,109,112,117,116,101,100,44,10,32, + 32,32,32,117,115,105,110,103,32,112,97,116,104,95,102,105, + 110,100,101,114,46,32,32,70,111,114,32,116,111,112,45,108, + 101,118,101,108,32,109,111,100,117,108,101,115,44,32,116,104, + 101,32,112,97,114,101,110,116,32,109,111,100,117,108,101,39, + 115,32,112,97,116,104,10,32,32,32,32,105,115,32,115,121, + 115,46,112,97,116,104,46,99,4,0,0,0,0,0,0,0, + 4,0,0,0,2,0,0,0,67,0,0,0,115,52,0,0, + 0,124,1,0,124,0,0,95,0,0,124,2,0,124,0,0, + 95,1,0,116,2,0,124,0,0,106,3,0,131,0,0,131, + 1,0,124,0,0,95,4,0,124,3,0,124,0,0,95,5, + 0,100,0,0,83,41,1,78,41,6,218,5,95,110,97,109, + 101,218,5,95,112,97,116,104,114,95,0,0,0,218,16,95, + 103,101,116,95,112,97,114,101,110,116,95,112,97,116,104,218, + 17,95,108,97,115,116,95,112,97,114,101,110,116,95,112,97, + 116,104,218,12,95,112,97,116,104,95,102,105,110,100,101,114, + 41,4,114,110,0,0,0,114,108,0,0,0,114,37,0,0, + 0,218,11,112,97,116,104,95,102,105,110,100,101,114,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,186,0, + 0,0,184,3,0,0,115,8,0,0,0,0,1,9,1,9, + 1,21,1,122,23,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,46,95,95,105,110,105,116,95,95,99,1,0,0, 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, - 0,115,41,0,0,0,124,0,0,106,0,0,124,1,0,124, - 2,0,131,2,0,125,3,0,124,3,0,100,1,0,107,8, - 0,114,34,0,100,1,0,83,124,3,0,106,1,0,83,41, - 2,122,170,102,105,110,100,32,116,104,101,32,109,111,100,117, - 108,101,32,111,110,32,115,121,115,46,112,97,116,104,32,111, - 114,32,39,112,97,116,104,39,32,98,97,115,101,100,32,111, - 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,115, - 32,97,110,100,10,32,32,32,32,32,32,32,32,115,121,115, + 0,115,53,0,0,0,124,0,0,106,0,0,106,1,0,100, + 1,0,131,1,0,92,3,0,125,1,0,125,2,0,125,3, + 0,124,2,0,100,2,0,107,2,0,114,43,0,100,6,0, + 83,124,1,0,100,5,0,102,2,0,83,41,7,122,62,82, + 101,116,117,114,110,115,32,97,32,116,117,112,108,101,32,111, + 102,32,40,112,97,114,101,110,116,45,109,111,100,117,108,101, + 45,110,97,109,101,44,32,112,97,114,101,110,116,45,112,97, + 116,104,45,97,116,116,114,45,110,97,109,101,41,114,60,0, + 0,0,114,32,0,0,0,114,8,0,0,0,114,37,0,0, + 0,90,8,95,95,112,97,116,104,95,95,41,2,114,8,0, + 0,0,114,37,0,0,0,41,2,114,232,0,0,0,114,34, + 0,0,0,41,4,114,110,0,0,0,114,223,0,0,0,218, + 3,100,111,116,90,2,109,101,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,218,23,95,102,105,110,100,95,112, + 97,114,101,110,116,95,112,97,116,104,95,110,97,109,101,115, + 190,3,0,0,115,8,0,0,0,0,2,27,1,12,2,4, + 3,122,38,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,95,102,105,110,100,95,112,97,114,101,110,116,95,112, + 97,116,104,95,110,97,109,101,115,99,1,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,38, + 0,0,0,124,0,0,106,0,0,131,0,0,92,2,0,125, + 1,0,125,2,0,116,1,0,116,2,0,106,3,0,124,1, + 0,25,124,2,0,131,2,0,83,41,1,78,41,4,114,239, + 0,0,0,114,119,0,0,0,114,8,0,0,0,218,7,109, + 111,100,117,108,101,115,41,3,114,110,0,0,0,90,18,112, + 97,114,101,110,116,95,109,111,100,117,108,101,95,110,97,109, + 101,90,14,112,97,116,104,95,97,116,116,114,95,110,97,109, + 101,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 114,234,0,0,0,200,3,0,0,115,4,0,0,0,0,1, + 18,1,122,31,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,103,101,116,95,112,97,114,101,110,116,95,112, + 97,116,104,99,1,0,0,0,0,0,0,0,3,0,0,0, + 3,0,0,0,67,0,0,0,115,118,0,0,0,116,0,0, + 124,0,0,106,1,0,131,0,0,131,1,0,125,1,0,124, + 1,0,124,0,0,106,2,0,107,3,0,114,111,0,124,0, + 0,106,3,0,124,0,0,106,4,0,124,1,0,131,2,0, + 125,2,0,124,2,0,100,0,0,107,9,0,114,102,0,124, + 2,0,106,5,0,100,0,0,107,8,0,114,102,0,124,2, + 0,106,6,0,114,102,0,124,2,0,106,6,0,124,0,0, + 95,7,0,124,1,0,124,0,0,95,2,0,124,0,0,106, + 7,0,83,41,1,78,41,8,114,95,0,0,0,114,234,0, + 0,0,114,235,0,0,0,114,236,0,0,0,114,232,0,0, + 0,114,129,0,0,0,114,158,0,0,0,114,233,0,0,0, + 41,3,114,110,0,0,0,90,11,112,97,114,101,110,116,95, + 112,97,116,104,114,166,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,12,95,114,101,99,97,108, + 99,117,108,97,116,101,204,3,0,0,115,16,0,0,0,0, + 2,18,1,15,1,21,3,27,1,9,1,12,1,9,1,122, + 27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, + 95,114,101,99,97,108,99,117,108,97,116,101,99,1,0,0, + 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, + 0,115,16,0,0,0,116,0,0,124,0,0,106,1,0,131, + 0,0,131,1,0,83,41,1,78,41,2,218,4,105,116,101, + 114,114,241,0,0,0,41,1,114,110,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,8,95,95, + 105,116,101,114,95,95,217,3,0,0,115,2,0,0,0,0, + 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,95,95,105,116,101,114,95,95,99,1,0,0,0,0, + 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, + 16,0,0,0,116,0,0,124,0,0,106,1,0,131,0,0, + 131,1,0,83,41,1,78,41,2,114,33,0,0,0,114,241, + 0,0,0,41,1,114,110,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,7,95,95,108,101,110, + 95,95,220,3,0,0,115,2,0,0,0,0,1,122,22,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, + 108,101,110,95,95,99,1,0,0,0,0,0,0,0,1,0, + 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,100, + 1,0,106,0,0,124,0,0,106,1,0,131,1,0,83,41, + 2,78,122,20,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,40,123,33,114,125,41,41,2,114,49,0,0,0,114, + 233,0,0,0,41,1,114,110,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,8,95,95,114,101, + 112,114,95,95,223,3,0,0,115,2,0,0,0,0,1,122, + 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, + 95,95,114,101,112,114,95,95,99,2,0,0,0,0,0,0, + 0,2,0,0,0,2,0,0,0,67,0,0,0,115,16,0, + 0,0,124,1,0,124,0,0,106,0,0,131,0,0,107,6, + 0,83,41,1,78,41,1,114,241,0,0,0,41,2,114,110, + 0,0,0,218,4,105,116,101,109,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,12,95,95,99,111,110,116, + 97,105,110,115,95,95,226,3,0,0,115,2,0,0,0,0, + 1,122,27,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,95,95,99,111,110,116,97,105,110,115,95,95,99,2, + 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, + 0,0,0,115,20,0,0,0,124,0,0,106,0,0,106,1, + 0,124,1,0,131,1,0,1,100,0,0,83,41,1,78,41, + 2,114,233,0,0,0,114,165,0,0,0,41,2,114,110,0, + 0,0,114,246,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,165,0,0,0,229,3,0,0,115, + 2,0,0,0,0,1,122,21,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,97,112,112,101,110,100,78,41,13, + 114,114,0,0,0,114,113,0,0,0,114,115,0,0,0,114, + 116,0,0,0,114,186,0,0,0,114,239,0,0,0,114,234, + 0,0,0,114,241,0,0,0,114,243,0,0,0,114,244,0, + 0,0,114,245,0,0,0,114,247,0,0,0,114,165,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,231,0,0,0,177,3,0,0,115,20, + 0,0,0,12,5,6,2,12,6,12,10,12,4,12,13,12, + 3,12,3,12,3,12,3,114,231,0,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0, + 0,115,118,0,0,0,101,0,0,90,1,0,100,0,0,90, + 2,0,100,1,0,100,2,0,132,0,0,90,3,0,101,4, + 0,100,3,0,100,4,0,132,0,0,131,1,0,90,5,0, + 100,5,0,100,6,0,132,0,0,90,6,0,100,7,0,100, + 8,0,132,0,0,90,7,0,100,9,0,100,10,0,132,0, + 0,90,8,0,100,11,0,100,12,0,132,0,0,90,9,0, + 100,13,0,100,14,0,132,0,0,90,10,0,100,15,0,100, + 16,0,132,0,0,90,11,0,100,17,0,83,41,18,218,16, + 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 99,4,0,0,0,0,0,0,0,4,0,0,0,4,0,0, + 0,67,0,0,0,115,25,0,0,0,116,0,0,124,1,0, + 124,2,0,124,3,0,131,3,0,124,0,0,95,1,0,100, + 0,0,83,41,1,78,41,2,114,231,0,0,0,114,233,0, + 0,0,41,4,114,110,0,0,0,114,108,0,0,0,114,37, + 0,0,0,114,237,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,186,0,0,0,235,3,0,0, + 115,2,0,0,0,0,1,122,25,95,78,97,109,101,115,112, + 97,99,101,76,111,97,100,101,114,46,95,95,105,110,105,116, + 95,95,99,2,0,0,0,0,0,0,0,2,0,0,0,2, + 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, + 0,0,124,1,0,106,1,0,131,1,0,83,41,2,122,115, + 82,101,116,117,114,110,32,114,101,112,114,32,102,111,114,32, + 116,104,101,32,109,111,100,117,108,101,46,10,10,32,32,32, + 32,32,32,32,32,84,104,101,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, + 84,104,101,32,105,109,112,111,114,116,32,109,97,99,104,105, + 110,101,114,121,32,100,111,101,115,32,116,104,101,32,106,111, + 98,32,105,116,115,101,108,102,46,10,10,32,32,32,32,32, + 32,32,32,122,25,60,109,111,100,117,108,101,32,123,33,114, + 125,32,40,110,97,109,101,115,112,97,99,101,41,62,41,2, + 114,49,0,0,0,114,114,0,0,0,41,2,114,172,0,0, + 0,114,191,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,11,109,111,100,117,108,101,95,114,101, + 112,114,238,3,0,0,115,2,0,0,0,0,7,122,28,95, + 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, + 109,111,100,117,108,101,95,114,101,112,114,99,2,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 115,4,0,0,0,100,1,0,83,41,2,78,84,114,4,0, + 0,0,41,2,114,110,0,0,0,114,128,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,161,0, + 0,0,247,3,0,0,115,2,0,0,0,0,1,122,27,95, + 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, + 105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0, + 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, + 4,0,0,0,100,1,0,83,41,2,78,114,32,0,0,0, + 114,4,0,0,0,41,2,114,110,0,0,0,114,128,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 114,203,0,0,0,250,3,0,0,115,2,0,0,0,0,1, + 122,27,95,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0, + 0,0,0,0,0,0,2,0,0,0,6,0,0,0,67,0, + 0,0,115,22,0,0,0,116,0,0,100,1,0,100,2,0, + 100,3,0,100,4,0,100,5,0,131,3,1,83,41,6,78, + 114,32,0,0,0,122,8,60,115,116,114,105,110,103,62,114, + 190,0,0,0,114,205,0,0,0,84,41,1,114,206,0,0, + 0,41,2,114,110,0,0,0,114,128,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,114,188,0,0, + 0,253,3,0,0,115,2,0,0,0,0,1,122,25,95,78, + 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,103, + 101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, + 0,100,1,0,83,41,2,122,42,85,115,101,32,100,101,102, + 97,117,108,116,32,115,101,109,97,110,116,105,99,115,32,102, + 111,114,32,109,111,100,117,108,101,32,99,114,101,97,116,105, + 111,110,46,78,114,4,0,0,0,41,2,114,110,0,0,0, + 114,166,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,187,0,0,0,0,4,0,0,115,0,0, + 0,0,122,30,95,78,97,109,101,115,112,97,99,101,76,111, + 97,100,101,114,46,99,114,101,97,116,101,95,109,111,100,117, + 108,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,115,4,0,0,0,100,0,0,83, + 41,1,78,114,4,0,0,0,41,2,114,110,0,0,0,114, + 191,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,192,0,0,0,3,4,0,0,115,2,0,0, + 0,0,1,122,28,95,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,101,120,101,99,95,109,111,100,117,108, + 101,99,2,0,0,0,0,0,0,0,2,0,0,0,3,0, + 0,0,67,0,0,0,115,32,0,0,0,116,0,0,100,1, + 0,124,0,0,106,1,0,131,2,0,1,116,2,0,106,3, + 0,124,0,0,124,1,0,131,2,0,83,41,2,122,98,76, + 111,97,100,32,97,32,110,97,109,101,115,112,97,99,101,32, + 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, + 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,122,38,110,97,109,101,115,112,97,99,101,32,109,111,100, + 117,108,101,32,108,111,97,100,101,100,32,119,105,116,104,32, + 112,97,116,104,32,123,33,114,125,41,4,114,107,0,0,0, + 114,233,0,0,0,114,123,0,0,0,114,193,0,0,0,41, + 2,114,110,0,0,0,114,128,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,194,0,0,0,6, + 4,0,0,115,4,0,0,0,0,7,16,1,122,28,95,78, + 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,108, + 111,97,100,95,109,111,100,117,108,101,78,41,12,114,114,0, + 0,0,114,113,0,0,0,114,115,0,0,0,114,186,0,0, + 0,114,184,0,0,0,114,249,0,0,0,114,161,0,0,0, + 114,203,0,0,0,114,188,0,0,0,114,187,0,0,0,114, + 192,0,0,0,114,194,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,248,0, + 0,0,234,3,0,0,115,16,0,0,0,12,1,12,3,18, + 9,12,3,12,3,12,3,12,3,12,3,114,248,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,64,0,0,0,115,160,0,0,0,101,0,0,90,1,0, + 100,0,0,90,2,0,100,1,0,90,3,0,101,4,0,100, + 2,0,100,3,0,132,0,0,131,1,0,90,5,0,101,4, + 0,100,4,0,100,5,0,132,0,0,131,1,0,90,6,0, + 101,4,0,100,6,0,100,7,0,132,0,0,131,1,0,90, + 7,0,101,4,0,100,8,0,100,9,0,132,0,0,131,1, + 0,90,8,0,101,4,0,100,10,0,100,11,0,100,12,0, + 132,1,0,131,1,0,90,9,0,101,4,0,100,10,0,100, + 10,0,100,13,0,100,14,0,132,2,0,131,1,0,90,10, + 0,101,4,0,100,10,0,100,15,0,100,16,0,132,1,0, + 131,1,0,90,11,0,100,10,0,83,41,17,218,10,80,97, + 116,104,70,105,110,100,101,114,122,62,77,101,116,97,32,112, + 97,116,104,32,102,105,110,100,101,114,32,102,111,114,32,115, + 121,115,46,112,97,116,104,32,97,110,100,32,112,97,99,107, + 97,103,101,32,95,95,112,97,116,104,95,95,32,97,116,116, + 114,105,98,117,116,101,115,46,99,1,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,67,0,0,0,115,55,0, + 0,0,120,48,0,116,0,0,106,1,0,106,2,0,131,0, + 0,68,93,31,0,125,1,0,116,3,0,124,1,0,100,1, + 0,131,2,0,114,16,0,124,1,0,106,4,0,131,0,0, + 1,113,16,0,87,100,2,0,83,41,3,122,125,67,97,108, + 108,32,116,104,101,32,105,110,118,97,108,105,100,97,116,101, + 95,99,97,99,104,101,115,40,41,32,109,101,116,104,111,100, + 32,111,110,32,97,108,108,32,112,97,116,104,32,101,110,116, + 114,121,32,102,105,110,100,101,114,115,10,32,32,32,32,32, + 32,32,32,115,116,111,114,101,100,32,105,110,32,115,121,115, 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,2, - 114,181,0,0,0,114,127,0,0,0,41,4,114,170,0,0, - 0,114,126,0,0,0,114,35,0,0,0,114,164,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 182,0,0,0,131,4,0,0,115,8,0,0,0,0,8,18, - 1,12,1,4,1,122,22,80,97,116,104,70,105,110,100,101, - 114,46,102,105,110,100,95,109,111,100,117,108,101,41,12,114, - 112,0,0,0,114,111,0,0,0,114,113,0,0,0,114,114, - 0,0,0,114,183,0,0,0,114,250,0,0,0,114,255,0, - 0,0,114,1,1,0,0,114,2,1,0,0,114,5,1,0, - 0,114,181,0,0,0,114,182,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 249,0,0,0,11,4,0,0,115,22,0,0,0,12,2,6, - 2,18,8,18,17,18,22,18,15,3,1,18,31,3,1,21, - 21,3,1,114,249,0,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,64,0,0,0,115,133,0, - 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, - 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, - 100,4,0,100,5,0,132,0,0,90,5,0,101,6,0,90, - 7,0,100,6,0,100,7,0,132,0,0,90,8,0,100,8, - 0,100,9,0,132,0,0,90,9,0,100,10,0,100,11,0, - 100,12,0,132,1,0,90,10,0,100,13,0,100,14,0,132, - 0,0,90,11,0,101,12,0,100,15,0,100,16,0,132,0, - 0,131,1,0,90,13,0,100,17,0,100,18,0,132,0,0, - 90,14,0,100,10,0,83,41,19,218,10,70,105,108,101,70, - 105,110,100,101,114,122,172,70,105,108,101,45,98,97,115,101, - 100,32,102,105,110,100,101,114,46,10,10,32,32,32,32,73, - 110,116,101,114,97,99,116,105,111,110,115,32,119,105,116,104, - 32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109, - 32,97,114,101,32,99,97,99,104,101,100,32,102,111,114,32, - 112,101,114,102,111,114,109,97,110,99,101,44,32,98,101,105, - 110,103,10,32,32,32,32,114,101,102,114,101,115,104,101,100, - 32,119,104,101,110,32,116,104,101,32,100,105,114,101,99,116, - 111,114,121,32,116,104,101,32,102,105,110,100,101,114,32,105, - 115,32,104,97,110,100,108,105,110,103,32,104,97,115,32,98, - 101,101,110,32,109,111,100,105,102,105,101,100,46,10,10,32, - 32,32,32,99,2,0,0,0,0,0,0,0,5,0,0,0, - 5,0,0,0,7,0,0,0,115,122,0,0,0,103,0,0, - 125,3,0,120,52,0,124,2,0,68,93,44,0,92,2,0, - 137,0,0,125,4,0,124,3,0,106,0,0,135,0,0,102, - 1,0,100,1,0,100,2,0,134,0,0,124,4,0,68,131, - 1,0,131,1,0,1,113,13,0,87,124,3,0,124,0,0, - 95,1,0,124,1,0,112,79,0,100,3,0,124,0,0,95, - 2,0,100,6,0,124,0,0,95,3,0,116,4,0,131,0, - 0,124,0,0,95,5,0,116,4,0,131,0,0,124,0,0, - 95,6,0,100,5,0,83,41,7,122,154,73,110,105,116,105, - 97,108,105,122,101,32,119,105,116,104,32,116,104,101,32,112, - 97,116,104,32,116,111,32,115,101,97,114,99,104,32,111,110, - 32,97,110,100,32,97,32,118,97,114,105,97,98,108,101,32, - 110,117,109,98,101,114,32,111,102,10,32,32,32,32,32,32, - 32,32,50,45,116,117,112,108,101,115,32,99,111,110,116,97, - 105,110,105,110,103,32,116,104,101,32,108,111,97,100,101,114, - 32,97,110,100,32,116,104,101,32,102,105,108,101,32,115,117, - 102,102,105,120,101,115,32,116,104,101,32,108,111,97,100,101, - 114,10,32,32,32,32,32,32,32,32,114,101,99,111,103,110, - 105,122,101,115,46,99,1,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,51,0,0,0,115,27,0,0,0,124, - 0,0,93,17,0,125,1,0,124,1,0,136,0,0,102,2, - 0,86,1,113,3,0,100,0,0,83,41,1,78,114,4,0, - 0,0,41,2,114,22,0,0,0,114,225,0,0,0,41,1, - 114,127,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 227,0,0,0,160,4,0,0,115,2,0,0,0,6,0,122, - 38,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110, - 105,116,95,95,46,60,108,111,99,97,108,115,62,46,60,103, - 101,110,101,120,112,114,62,114,58,0,0,0,114,29,0,0, - 0,78,114,87,0,0,0,41,7,114,149,0,0,0,218,8, - 95,108,111,97,100,101,114,115,114,35,0,0,0,218,11,95, - 112,97,116,104,95,109,116,105,109,101,218,3,115,101,116,218, - 11,95,112,97,116,104,95,99,97,99,104,101,218,19,95,114, - 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, - 101,41,5,114,108,0,0,0,114,35,0,0,0,218,14,108, - 111,97,100,101,114,95,100,101,116,97,105,108,115,90,7,108, - 111,97,100,101,114,115,114,166,0,0,0,114,4,0,0,0, - 41,1,114,127,0,0,0,114,5,0,0,0,114,185,0,0, - 0,154,4,0,0,115,16,0,0,0,0,4,6,1,19,1, - 36,1,9,2,15,1,9,1,12,1,122,19,70,105,108,101, - 70,105,110,100,101,114,46,95,95,105,110,105,116,95,95,99, - 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, - 67,0,0,0,115,13,0,0,0,100,3,0,124,0,0,95, - 0,0,100,2,0,83,41,4,122,31,73,110,118,97,108,105, - 100,97,116,101,32,116,104,101,32,100,105,114,101,99,116,111, - 114,121,32,109,116,105,109,101,46,114,29,0,0,0,78,114, - 87,0,0,0,41,1,114,8,1,0,0,41,1,114,108,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,250,0,0,0,168,4,0,0,115,2,0,0,0,0, - 2,122,28,70,105,108,101,70,105,110,100,101,114,46,105,110, - 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, - 2,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0, - 67,0,0,0,115,59,0,0,0,124,0,0,106,0,0,124, - 1,0,131,1,0,125,2,0,124,2,0,100,1,0,107,8, - 0,114,37,0,100,1,0,103,0,0,102,2,0,83,124,2, - 0,106,1,0,124,2,0,106,2,0,112,55,0,103,0,0, - 102,2,0,83,41,2,122,197,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, - 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, - 111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97, - 109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32, - 112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115, - 46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101, - 114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105, - 111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, - 114,181,0,0,0,114,127,0,0,0,114,156,0,0,0,41, - 3,114,108,0,0,0,114,126,0,0,0,114,164,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 124,0,0,0,174,4,0,0,115,8,0,0,0,0,7,15, - 1,12,1,10,1,122,22,70,105,108,101,70,105,110,100,101, - 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, - 0,0,0,0,0,0,7,0,0,0,7,0,0,0,67,0, - 0,0,115,40,0,0,0,124,1,0,124,2,0,124,3,0, - 131,2,0,125,6,0,116,0,0,124,2,0,124,3,0,100, - 1,0,124,6,0,100,2,0,124,4,0,131,2,2,83,41, - 3,78,114,127,0,0,0,114,156,0,0,0,41,1,114,167, - 0,0,0,41,7,114,108,0,0,0,114,165,0,0,0,114, - 126,0,0,0,114,35,0,0,0,90,4,115,109,115,108,114, - 180,0,0,0,114,127,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,5,1,0,0,186,4,0, - 0,115,6,0,0,0,0,1,15,1,18,1,122,20,70,105, - 108,101,70,105,110,100,101,114,46,95,103,101,116,95,115,112, - 101,99,78,99,3,0,0,0,0,0,0,0,14,0,0,0, - 15,0,0,0,67,0,0,0,115,234,1,0,0,100,1,0, - 125,3,0,124,1,0,106,0,0,100,2,0,131,1,0,100, - 3,0,25,125,4,0,121,34,0,116,1,0,124,0,0,106, - 2,0,112,49,0,116,3,0,106,4,0,131,0,0,131,1, - 0,106,5,0,125,5,0,87,110,24,0,4,116,6,0,107, - 10,0,114,85,0,1,1,1,100,10,0,125,5,0,89,110, - 1,0,88,124,5,0,124,0,0,106,7,0,107,3,0,114, - 120,0,124,0,0,106,8,0,131,0,0,1,124,5,0,124, - 0,0,95,7,0,116,9,0,131,0,0,114,153,0,124,0, - 0,106,10,0,125,6,0,124,4,0,106,11,0,131,0,0, - 125,7,0,110,15,0,124,0,0,106,12,0,125,6,0,124, - 4,0,125,7,0,124,7,0,124,6,0,107,6,0,114,45, - 1,116,13,0,124,0,0,106,2,0,124,4,0,131,2,0, - 125,8,0,120,100,0,124,0,0,106,14,0,68,93,77,0, - 92,2,0,125,9,0,125,10,0,100,5,0,124,9,0,23, - 125,11,0,116,13,0,124,8,0,124,11,0,131,2,0,125, - 12,0,116,15,0,124,12,0,131,1,0,114,208,0,124,0, - 0,106,16,0,124,10,0,124,1,0,124,12,0,124,8,0, - 103,1,0,124,2,0,131,5,0,83,113,208,0,87,116,17, - 0,124,8,0,131,1,0,125,3,0,120,123,0,124,0,0, - 106,14,0,68,93,112,0,92,2,0,125,9,0,125,10,0, - 116,13,0,124,0,0,106,2,0,124,4,0,124,9,0,23, - 131,2,0,125,12,0,116,18,0,100,6,0,106,19,0,124, - 12,0,131,1,0,100,7,0,100,3,0,131,1,1,1,124, - 7,0,124,9,0,23,124,6,0,107,6,0,114,55,1,116, - 15,0,124,12,0,131,1,0,114,55,1,124,0,0,106,16, - 0,124,10,0,124,1,0,124,12,0,100,8,0,124,2,0, - 131,5,0,83,113,55,1,87,124,3,0,114,230,1,116,18, - 0,100,9,0,106,19,0,124,8,0,131,1,0,131,1,0, - 1,116,20,0,106,21,0,124,1,0,100,8,0,131,2,0, - 125,13,0,124,8,0,103,1,0,124,13,0,95,22,0,124, - 13,0,83,100,8,0,83,41,11,122,102,84,114,121,32,116, - 111,32,102,105,110,100,32,97,32,115,112,101,99,32,102,111, - 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, - 109,111,100,117,108,101,46,32,32,82,101,116,117,114,110,115, - 32,116,104,101,10,32,32,32,32,32,32,32,32,109,97,116, - 99,104,105,110,103,32,115,112,101,99,44,32,111,114,32,78, - 111,110,101,32,105,102,32,110,111,116,32,102,111,117,110,100, - 46,70,114,58,0,0,0,114,56,0,0,0,114,29,0,0, - 0,114,185,0,0,0,122,9,116,114,121,105,110,103,32,123, - 125,114,98,0,0,0,78,122,25,112,111,115,115,105,98,108, - 101,32,110,97,109,101,115,112,97,99,101,32,102,111,114,32, - 123,125,114,87,0,0,0,41,23,114,32,0,0,0,114,39, - 0,0,0,114,35,0,0,0,114,3,0,0,0,114,45,0, - 0,0,114,219,0,0,0,114,40,0,0,0,114,8,1,0, - 0,218,11,95,102,105,108,108,95,99,97,99,104,101,114,6, - 0,0,0,114,11,1,0,0,114,88,0,0,0,114,10,1, - 0,0,114,28,0,0,0,114,7,1,0,0,114,44,0,0, - 0,114,5,1,0,0,114,46,0,0,0,114,105,0,0,0, - 114,47,0,0,0,114,121,0,0,0,114,160,0,0,0,114, - 156,0,0,0,41,14,114,108,0,0,0,114,126,0,0,0, - 114,180,0,0,0,90,12,105,115,95,110,97,109,101,115,112, - 97,99,101,90,11,116,97,105,108,95,109,111,100,117,108,101, - 114,133,0,0,0,90,5,99,97,99,104,101,90,12,99,97, - 99,104,101,95,109,111,100,117,108,101,90,9,98,97,115,101, - 95,112,97,116,104,114,225,0,0,0,114,165,0,0,0,90, - 13,105,110,105,116,95,102,105,108,101,110,97,109,101,90,9, - 102,117,108,108,95,112,97,116,104,114,164,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,181,0, - 0,0,191,4,0,0,115,68,0,0,0,0,3,6,1,19, - 1,3,1,34,1,13,1,11,1,15,1,10,1,9,2,9, - 1,9,1,15,2,9,1,6,2,12,1,18,1,22,1,10, - 1,15,1,12,1,32,4,12,2,22,1,22,1,25,1,16, - 1,12,1,29,1,6,1,19,1,18,1,12,1,4,1,122, - 20,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, - 95,115,112,101,99,99,1,0,0,0,0,0,0,0,9,0, - 0,0,13,0,0,0,67,0,0,0,115,11,1,0,0,124, - 0,0,106,0,0,125,1,0,121,31,0,116,1,0,106,2, - 0,124,1,0,112,33,0,116,1,0,106,3,0,131,0,0, - 131,1,0,125,2,0,87,110,33,0,4,116,4,0,116,5, - 0,116,6,0,102,3,0,107,10,0,114,75,0,1,1,1, - 103,0,0,125,2,0,89,110,1,0,88,116,7,0,106,8, - 0,106,9,0,100,1,0,131,1,0,115,112,0,116,10,0, - 124,2,0,131,1,0,124,0,0,95,11,0,110,111,0,116, - 10,0,131,0,0,125,3,0,120,90,0,124,2,0,68,93, - 82,0,125,4,0,124,4,0,106,12,0,100,2,0,131,1, - 0,92,3,0,125,5,0,125,6,0,125,7,0,124,6,0, - 114,191,0,100,3,0,106,13,0,124,5,0,124,7,0,106, - 14,0,131,0,0,131,2,0,125,8,0,110,6,0,124,5, - 0,125,8,0,124,3,0,106,15,0,124,8,0,131,1,0, - 1,113,128,0,87,124,3,0,124,0,0,95,11,0,116,7, - 0,106,8,0,106,9,0,116,16,0,131,1,0,114,7,1, - 100,4,0,100,5,0,132,0,0,124,2,0,68,131,1,0, - 124,0,0,95,17,0,100,6,0,83,41,7,122,68,70,105, - 108,108,32,116,104,101,32,99,97,99,104,101,32,111,102,32, - 112,111,116,101,110,116,105,97,108,32,109,111,100,117,108,101, - 115,32,97,110,100,32,112,97,99,107,97,103,101,115,32,102, - 111,114,32,116,104,105,115,32,100,105,114,101,99,116,111,114, - 121,46,114,0,0,0,0,114,58,0,0,0,122,5,123,125, - 46,123,125,99,1,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,83,0,0,0,115,28,0,0,0,104,0,0, - 124,0,0,93,18,0,125,1,0,124,1,0,106,0,0,131, - 0,0,146,2,0,113,6,0,83,114,4,0,0,0,41,1, - 114,88,0,0,0,41,2,114,22,0,0,0,90,2,102,110, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,250, - 9,60,115,101,116,99,111,109,112,62,9,5,0,0,115,2, - 0,0,0,9,0,122,41,70,105,108,101,70,105,110,100,101, - 114,46,95,102,105,108,108,95,99,97,99,104,101,46,60,108, - 111,99,97,108,115,62,46,60,115,101,116,99,111,109,112,62, - 78,41,18,114,35,0,0,0,114,3,0,0,0,90,7,108, - 105,115,116,100,105,114,114,45,0,0,0,114,0,1,0,0, - 218,15,80,101,114,109,105,115,115,105,111,110,69,114,114,111, - 114,218,18,78,111,116,65,68,105,114,101,99,116,111,114,121, - 69,114,114,111,114,114,7,0,0,0,114,8,0,0,0,114, - 9,0,0,0,114,9,1,0,0,114,10,1,0,0,114,83, - 0,0,0,114,47,0,0,0,114,88,0,0,0,218,3,97, - 100,100,114,10,0,0,0,114,11,1,0,0,41,9,114,108, - 0,0,0,114,35,0,0,0,90,8,99,111,110,116,101,110, - 116,115,90,21,108,111,119,101,114,95,115,117,102,102,105,120, - 95,99,111,110,116,101,110,116,115,114,245,0,0,0,114,106, - 0,0,0,114,237,0,0,0,114,225,0,0,0,90,8,110, - 101,119,95,110,97,109,101,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,13,1,0,0,236,4,0,0,115, - 34,0,0,0,0,2,9,1,3,1,31,1,22,3,11,3, - 18,1,18,7,9,1,13,1,24,1,6,1,27,2,6,1, - 17,1,9,1,18,1,122,22,70,105,108,101,70,105,110,100, - 101,114,46,95,102,105,108,108,95,99,97,99,104,101,99,1, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,7, - 0,0,0,115,25,0,0,0,135,0,0,135,1,0,102,2, - 0,100,1,0,100,2,0,134,0,0,125,2,0,124,2,0, - 83,41,3,97,20,1,0,0,65,32,99,108,97,115,115,32, - 109,101,116,104,111,100,32,119,104,105,99,104,32,114,101,116, - 117,114,110,115,32,97,32,99,108,111,115,117,114,101,32,116, - 111,32,117,115,101,32,111,110,32,115,121,115,46,112,97,116, - 104,95,104,111,111,107,10,32,32,32,32,32,32,32,32,119, - 104,105,99,104,32,119,105,108,108,32,114,101,116,117,114,110, - 32,97,110,32,105,110,115,116,97,110,99,101,32,117,115,105, - 110,103,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 32,108,111,97,100,101,114,115,32,97,110,100,32,116,104,101, - 32,112,97,116,104,10,32,32,32,32,32,32,32,32,99,97, - 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, - 117,114,101,46,10,10,32,32,32,32,32,32,32,32,73,102, - 32,116,104,101,32,112,97,116,104,32,99,97,108,108,101,100, - 32,111,110,32,116,104,101,32,99,108,111,115,117,114,101,32, - 105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111, - 114,121,44,32,73,109,112,111,114,116,69,114,114,111,114,32, - 105,115,10,32,32,32,32,32,32,32,32,114,97,105,115,101, - 100,46,10,10,32,32,32,32,32,32,32,32,99,1,0,0, - 0,0,0,0,0,1,0,0,0,4,0,0,0,19,0,0, - 0,115,43,0,0,0,116,0,0,124,0,0,131,1,0,115, - 30,0,116,1,0,100,1,0,100,2,0,124,0,0,131,1, - 1,130,1,0,136,0,0,124,0,0,136,1,0,140,1,0, - 83,41,3,122,45,80,97,116,104,32,104,111,111,107,32,102, - 111,114,32,105,109,112,111,114,116,108,105,98,46,109,97,99, - 104,105,110,101,114,121,46,70,105,108,101,70,105,110,100,101, - 114,46,122,30,111,110,108,121,32,100,105,114,101,99,116,111, - 114,105,101,115,32,97,114,101,32,115,117,112,112,111,114,116, - 101,100,114,35,0,0,0,41,2,114,46,0,0,0,114,107, - 0,0,0,41,1,114,35,0,0,0,41,2,114,170,0,0, - 0,114,12,1,0,0,114,4,0,0,0,114,5,0,0,0, - 218,24,112,97,116,104,95,104,111,111,107,95,102,111,114,95, - 70,105,108,101,70,105,110,100,101,114,21,5,0,0,115,6, - 0,0,0,0,2,12,1,18,1,122,54,70,105,108,101,70, - 105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,46, - 60,108,111,99,97,108,115,62,46,112,97,116,104,95,104,111, - 111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101, - 114,114,4,0,0,0,41,3,114,170,0,0,0,114,12,1, - 0,0,114,18,1,0,0,114,4,0,0,0,41,2,114,170, - 0,0,0,114,12,1,0,0,114,5,0,0,0,218,9,112, - 97,116,104,95,104,111,111,107,11,5,0,0,115,4,0,0, - 0,0,10,21,6,122,20,70,105,108,101,70,105,110,100,101, - 114,46,112,97,116,104,95,104,111,111,107,99,1,0,0,0, - 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, - 115,16,0,0,0,100,1,0,106,0,0,124,0,0,106,1, - 0,131,1,0,83,41,2,78,122,16,70,105,108,101,70,105, - 110,100,101,114,40,123,33,114,125,41,41,2,114,47,0,0, - 0,114,35,0,0,0,41,1,114,108,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,244,0,0, - 0,29,5,0,0,115,2,0,0,0,0,1,122,19,70,105, - 108,101,70,105,110,100,101,114,46,95,95,114,101,112,114,95, - 95,41,15,114,112,0,0,0,114,111,0,0,0,114,113,0, - 0,0,114,114,0,0,0,114,185,0,0,0,114,250,0,0, - 0,114,130,0,0,0,114,182,0,0,0,114,124,0,0,0, - 114,5,1,0,0,114,181,0,0,0,114,13,1,0,0,114, - 183,0,0,0,114,19,1,0,0,114,244,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,6,1,0,0,145,4,0,0,115,20,0,0,0, - 12,7,6,2,12,14,12,4,6,2,12,12,12,5,15,45, - 12,31,18,18,114,6,1,0,0,99,4,0,0,0,0,0, - 0,0,6,0,0,0,11,0,0,0,67,0,0,0,115,195, - 0,0,0,124,0,0,106,0,0,100,1,0,131,1,0,125, - 4,0,124,0,0,106,0,0,100,2,0,131,1,0,125,5, - 0,124,4,0,115,99,0,124,5,0,114,54,0,124,5,0, - 106,1,0,125,4,0,110,45,0,124,2,0,124,3,0,107, - 2,0,114,84,0,116,2,0,124,1,0,124,2,0,131,2, - 0,125,4,0,110,15,0,116,3,0,124,1,0,124,2,0, - 131,2,0,125,4,0,124,5,0,115,126,0,116,4,0,124, - 1,0,124,2,0,100,3,0,124,4,0,131,2,1,125,5, - 0,121,44,0,124,5,0,124,0,0,100,2,0,60,124,4, - 0,124,0,0,100,1,0,60,124,2,0,124,0,0,100,4, - 0,60,124,3,0,124,0,0,100,5,0,60,87,110,18,0, - 4,116,5,0,107,10,0,114,190,0,1,1,1,89,110,1, - 0,88,100,0,0,83,41,6,78,218,10,95,95,108,111,97, - 100,101,114,95,95,218,8,95,95,115,112,101,99,95,95,114, - 127,0,0,0,90,8,95,95,102,105,108,101,95,95,90,10, - 95,95,99,97,99,104,101,100,95,95,41,6,218,3,103,101, - 116,114,127,0,0,0,114,223,0,0,0,114,218,0,0,0, - 114,167,0,0,0,218,9,69,120,99,101,112,116,105,111,110, - 41,6,90,2,110,115,114,106,0,0,0,90,8,112,97,116, - 104,110,97,109,101,90,9,99,112,97,116,104,110,97,109,101, - 114,127,0,0,0,114,164,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,14,95,102,105,120,95, - 117,112,95,109,111,100,117,108,101,35,5,0,0,115,34,0, - 0,0,0,2,15,1,15,1,6,1,6,1,12,1,12,1, - 18,2,15,1,6,1,21,1,3,1,10,1,10,1,10,1, - 14,1,13,2,114,24,1,0,0,99,0,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,55, - 0,0,0,116,0,0,116,1,0,106,2,0,131,0,0,102, - 2,0,125,0,0,116,3,0,116,4,0,102,2,0,125,1, - 0,116,5,0,116,6,0,102,2,0,125,2,0,124,0,0, - 124,1,0,124,2,0,103,3,0,83,41,1,122,95,82,101, - 116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32, - 102,105,108,101,45,98,97,115,101,100,32,109,111,100,117,108, - 101,32,108,111,97,100,101,114,115,46,10,10,32,32,32,32, - 69,97,99,104,32,105,116,101,109,32,105,115,32,97,32,116, - 117,112,108,101,32,40,108,111,97,100,101,114,44,32,115,117, - 102,102,105,120,101,115,41,46,10,32,32,32,32,41,7,114, - 224,0,0,0,114,145,0,0,0,218,18,101,120,116,101,110, - 115,105,111,110,95,115,117,102,102,105,120,101,115,114,218,0, - 0,0,114,84,0,0,0,114,223,0,0,0,114,74,0,0, - 0,41,3,90,10,101,120,116,101,110,115,105,111,110,115,90, - 6,115,111,117,114,99,101,90,8,98,121,116,101,99,111,100, - 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,161,0,0,0,58,5,0,0,115,8,0,0,0,0,5, - 18,1,12,1,12,1,114,161,0,0,0,99,1,0,0,0, - 0,0,0,0,12,0,0,0,12,0,0,0,67,0,0,0, - 115,70,2,0,0,124,0,0,97,0,0,116,0,0,106,1, - 0,97,1,0,116,0,0,106,2,0,97,2,0,116,1,0, - 106,3,0,116,4,0,25,125,1,0,120,76,0,100,26,0, - 68,93,68,0,125,2,0,124,2,0,116,1,0,106,3,0, - 107,7,0,114,83,0,116,0,0,106,5,0,124,2,0,131, - 1,0,125,3,0,110,13,0,116,1,0,106,3,0,124,2, - 0,25,125,3,0,116,6,0,124,1,0,124,2,0,124,3, - 0,131,3,0,1,113,44,0,87,100,5,0,100,6,0,103, - 1,0,102,2,0,100,7,0,100,8,0,100,6,0,103,2, - 0,102,2,0,102,2,0,125,4,0,120,149,0,124,4,0, - 68,93,129,0,92,2,0,125,5,0,125,6,0,116,7,0, - 100,9,0,100,10,0,132,0,0,124,6,0,68,131,1,0, - 131,1,0,115,199,0,116,8,0,130,1,0,124,6,0,100, - 11,0,25,125,7,0,124,5,0,116,1,0,106,3,0,107, - 6,0,114,241,0,116,1,0,106,3,0,124,5,0,25,125, - 8,0,80,113,156,0,121,20,0,116,0,0,106,5,0,124, - 5,0,131,1,0,125,8,0,80,87,113,156,0,4,116,9, - 0,107,10,0,114,28,1,1,1,1,119,156,0,89,113,156, - 0,88,113,156,0,87,116,9,0,100,12,0,131,1,0,130, - 1,0,116,6,0,124,1,0,100,13,0,124,8,0,131,3, - 0,1,116,6,0,124,1,0,100,14,0,124,7,0,131,3, - 0,1,116,6,0,124,1,0,100,15,0,100,16,0,106,10, - 0,124,6,0,131,1,0,131,3,0,1,121,19,0,116,0, - 0,106,5,0,100,17,0,131,1,0,125,9,0,87,110,24, - 0,4,116,9,0,107,10,0,114,147,1,1,1,1,100,18, - 0,125,9,0,89,110,1,0,88,116,6,0,124,1,0,100, - 17,0,124,9,0,131,3,0,1,116,0,0,106,5,0,100, - 19,0,131,1,0,125,10,0,116,6,0,124,1,0,100,19, - 0,124,10,0,131,3,0,1,124,5,0,100,7,0,107,2, - 0,114,238,1,116,0,0,106,5,0,100,20,0,131,1,0, - 125,11,0,116,6,0,124,1,0,100,21,0,124,11,0,131, - 3,0,1,116,6,0,124,1,0,100,22,0,116,11,0,131, - 0,0,131,3,0,1,116,12,0,106,13,0,116,2,0,106, - 14,0,131,0,0,131,1,0,1,124,5,0,100,7,0,107, - 2,0,114,66,2,116,15,0,106,16,0,100,23,0,131,1, - 0,1,100,24,0,116,12,0,107,6,0,114,66,2,100,25, - 0,116,17,0,95,18,0,100,18,0,83,41,27,122,205,83, - 101,116,117,112,32,116,104,101,32,112,97,116,104,45,98,97, - 115,101,100,32,105,109,112,111,114,116,101,114,115,32,102,111, - 114,32,105,109,112,111,114,116,108,105,98,32,98,121,32,105, - 109,112,111,114,116,105,110,103,32,110,101,101,100,101,100,10, - 32,32,32,32,98,117,105,108,116,45,105,110,32,109,111,100, - 117,108,101,115,32,97,110,100,32,105,110,106,101,99,116,105, - 110,103,32,116,104,101,109,32,105,110,116,111,32,116,104,101, - 32,103,108,111,98,97,108,32,110,97,109,101,115,112,97,99, - 101,46,10,10,32,32,32,32,79,116,104,101,114,32,99,111, - 109,112,111,110,101,110,116,115,32,97,114,101,32,101,120,116, - 114,97,99,116,101,100,32,102,114,111,109,32,116,104,101,32, - 99,111,114,101,32,98,111,111,116,115,116,114,97,112,32,109, - 111,100,117,108,101,46,10,10,32,32,32,32,114,49,0,0, - 0,114,60,0,0,0,218,8,98,117,105,108,116,105,110,115, - 114,142,0,0,0,90,5,112,111,115,105,120,250,1,47,218, - 2,110,116,250,1,92,99,1,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,115,0,0,0,115,33,0,0,0, - 124,0,0,93,23,0,125,1,0,116,0,0,124,1,0,131, - 1,0,100,0,0,107,2,0,86,1,113,3,0,100,1,0, - 83,41,2,114,29,0,0,0,78,41,1,114,31,0,0,0, - 41,2,114,22,0,0,0,114,77,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,227,0,0,0, - 94,5,0,0,115,2,0,0,0,6,0,122,25,95,115,101, - 116,117,112,46,60,108,111,99,97,108,115,62,46,60,103,101, - 110,101,120,112,114,62,114,59,0,0,0,122,30,105,109,112, - 111,114,116,108,105,98,32,114,101,113,117,105,114,101,115,32, - 112,111,115,105,120,32,111,114,32,110,116,114,3,0,0,0, - 114,25,0,0,0,114,21,0,0,0,114,30,0,0,0,90, - 7,95,116,104,114,101,97,100,78,90,8,95,119,101,97,107, - 114,101,102,90,6,119,105,110,114,101,103,114,169,0,0,0, - 114,6,0,0,0,122,4,46,112,121,119,122,6,95,100,46, - 112,121,100,84,41,4,122,3,95,105,111,122,9,95,119,97, - 114,110,105,110,103,115,122,8,98,117,105,108,116,105,110,115, - 122,7,109,97,114,115,104,97,108,41,19,114,121,0,0,0, - 114,7,0,0,0,114,145,0,0,0,114,239,0,0,0,114, - 112,0,0,0,90,18,95,98,117,105,108,116,105,110,95,102, - 114,111,109,95,110,97,109,101,114,116,0,0,0,218,3,97, - 108,108,218,14,65,115,115,101,114,116,105,111,110,69,114,114, - 111,114,114,107,0,0,0,114,26,0,0,0,114,11,0,0, - 0,114,229,0,0,0,114,149,0,0,0,114,25,1,0,0, - 114,84,0,0,0,114,163,0,0,0,114,168,0,0,0,114, - 173,0,0,0,41,12,218,17,95,98,111,111,116,115,116,114, - 97,112,95,109,111,100,117,108,101,90,11,115,101,108,102,95, - 109,111,100,117,108,101,90,12,98,117,105,108,116,105,110,95, - 110,97,109,101,90,14,98,117,105,108,116,105,110,95,109,111, - 100,117,108,101,90,10,111,115,95,100,101,116,97,105,108,115, - 90,10,98,117,105,108,116,105,110,95,111,115,114,21,0,0, - 0,114,25,0,0,0,90,9,111,115,95,109,111,100,117,108, - 101,90,13,116,104,114,101,97,100,95,109,111,100,117,108,101, - 90,14,119,101,97,107,114,101,102,95,109,111,100,117,108,101, - 90,13,119,105,110,114,101,103,95,109,111,100,117,108,101,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,6, - 95,115,101,116,117,112,69,5,0,0,115,82,0,0,0,0, - 8,6,1,9,1,9,3,13,1,13,1,15,1,18,2,13, - 1,20,3,33,1,19,2,31,1,10,1,15,1,13,1,4, - 2,3,1,15,1,5,1,13,1,12,2,12,1,16,1,16, - 1,25,3,3,1,19,1,13,2,11,1,16,3,15,1,16, - 3,12,1,15,1,16,3,19,1,19,1,12,1,13,1,12, - 1,114,33,1,0,0,99,1,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,67,0,0,0,115,116,0,0,0, - 116,0,0,124,0,0,131,1,0,1,116,1,0,131,0,0, - 125,1,0,116,2,0,106,3,0,106,4,0,116,5,0,106, - 6,0,124,1,0,140,0,0,103,1,0,131,1,0,1,116, - 7,0,106,8,0,100,1,0,107,2,0,114,78,0,116,2, - 0,106,9,0,106,10,0,116,11,0,131,1,0,1,116,2, - 0,106,9,0,106,10,0,116,12,0,131,1,0,1,116,5, - 0,124,0,0,95,5,0,116,13,0,124,0,0,95,13,0, - 100,2,0,83,41,3,122,41,73,110,115,116,97,108,108,32, - 116,104,101,32,112,97,116,104,45,98,97,115,101,100,32,105, - 109,112,111,114,116,32,99,111,109,112,111,110,101,110,116,115, - 46,114,28,1,0,0,78,41,14,114,33,1,0,0,114,161, - 0,0,0,114,7,0,0,0,114,254,0,0,0,114,149,0, - 0,0,114,6,1,0,0,114,19,1,0,0,114,3,0,0, - 0,114,112,0,0,0,218,9,109,101,116,97,95,112,97,116, - 104,114,163,0,0,0,114,168,0,0,0,114,249,0,0,0, - 114,218,0,0,0,41,2,114,32,1,0,0,90,17,115,117, - 112,112,111,114,116,101,100,95,108,111,97,100,101,114,115,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,8, - 95,105,110,115,116,97,108,108,137,5,0,0,115,16,0,0, - 0,0,2,10,1,9,1,28,1,15,1,16,1,16,4,9, - 1,114,35,1,0,0,41,3,122,3,119,105,110,114,1,0, - 0,0,114,2,0,0,0,41,57,114,114,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,17,0,0,0,114,19,0, - 0,0,114,28,0,0,0,114,38,0,0,0,114,39,0,0, - 0,114,43,0,0,0,114,44,0,0,0,114,46,0,0,0, - 114,55,0,0,0,218,4,116,121,112,101,218,8,95,95,99, - 111,100,101,95,95,114,144,0,0,0,114,15,0,0,0,114, - 135,0,0,0,114,14,0,0,0,114,18,0,0,0,90,17, - 95,82,65,87,95,77,65,71,73,67,95,78,85,77,66,69, - 82,114,73,0,0,0,114,72,0,0,0,114,84,0,0,0, - 114,74,0,0,0,90,23,68,69,66,85,71,95,66,89,84, - 69,67,79,68,69,95,83,85,70,70,73,88,69,83,90,27, - 79,80,84,73,77,73,90,69,68,95,66,89,84,69,67,79, - 68,69,95,83,85,70,70,73,88,69,83,114,79,0,0,0, - 114,85,0,0,0,114,91,0,0,0,114,95,0,0,0,114, - 97,0,0,0,114,105,0,0,0,114,123,0,0,0,114,130, - 0,0,0,114,141,0,0,0,114,147,0,0,0,114,150,0, - 0,0,114,155,0,0,0,218,6,111,98,106,101,99,116,114, - 162,0,0,0,114,167,0,0,0,114,168,0,0,0,114,184, - 0,0,0,114,194,0,0,0,114,210,0,0,0,114,218,0, - 0,0,114,223,0,0,0,114,229,0,0,0,114,224,0,0, - 0,114,230,0,0,0,114,247,0,0,0,114,249,0,0,0, - 114,6,1,0,0,114,24,1,0,0,114,161,0,0,0,114, - 33,1,0,0,114,35,1,0,0,114,4,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,8,60, - 109,111,100,117,108,101,62,8,0,0,0,115,100,0,0,0, - 6,17,6,3,12,12,12,5,12,5,12,6,12,12,12,10, - 12,9,12,5,12,7,15,22,15,113,22,1,18,2,6,1, - 6,2,9,2,9,2,10,2,21,44,12,33,12,19,12,12, - 12,12,18,8,12,28,12,17,21,55,21,12,18,10,12,14, - 9,3,12,1,15,65,19,64,19,28,22,110,19,41,25,43, - 25,16,6,3,25,53,19,57,19,41,19,134,19,146,15,23, - 12,11,12,68, + 97,99,104,101,115,32,40,119,104,101,114,101,32,105,109,112, + 108,101,109,101,110,116,101,100,41,46,218,17,105,110,118,97, + 108,105,100,97,116,101,95,99,97,99,104,101,115,78,41,5, + 114,8,0,0,0,218,19,112,97,116,104,95,105,109,112,111, + 114,116,101,114,95,99,97,99,104,101,218,6,118,97,108,117, + 101,115,114,117,0,0,0,114,251,0,0,0,41,2,114,172, + 0,0,0,218,6,102,105,110,100,101,114,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,251,0,0,0,23, + 4,0,0,115,6,0,0,0,0,4,22,1,15,1,122,28, + 80,97,116,104,70,105,110,100,101,114,46,105,110,118,97,108, + 105,100,97,116,101,95,99,97,99,104,101,115,99,2,0,0, + 0,0,0,0,0,3,0,0,0,12,0,0,0,67,0,0, + 0,115,107,0,0,0,116,0,0,106,1,0,100,1,0,107, + 9,0,114,41,0,116,0,0,106,1,0,12,114,41,0,116, + 2,0,106,3,0,100,2,0,116,4,0,131,2,0,1,120, + 59,0,116,0,0,106,1,0,68,93,44,0,125,2,0,121, + 14,0,124,2,0,124,1,0,131,1,0,83,87,113,51,0, + 4,116,5,0,107,10,0,114,94,0,1,1,1,119,51,0, + 89,113,51,0,88,113,51,0,87,100,1,0,83,100,1,0, + 83,41,3,122,113,83,101,97,114,99,104,32,115,101,113,117, + 101,110,99,101,32,111,102,32,104,111,111,107,115,32,102,111, + 114,32,97,32,102,105,110,100,101,114,32,102,111,114,32,39, + 112,97,116,104,39,46,10,10,32,32,32,32,32,32,32,32, + 73,102,32,39,104,111,111,107,115,39,32,105,115,32,102,97, + 108,115,101,32,116,104,101,110,32,117,115,101,32,115,121,115, + 46,112,97,116,104,95,104,111,111,107,115,46,10,10,32,32, + 32,32,32,32,32,32,78,122,23,115,121,115,46,112,97,116, + 104,95,104,111,111,107,115,32,105,115,32,101,109,112,116,121, + 41,6,114,8,0,0,0,218,10,112,97,116,104,95,104,111, + 111,107,115,114,62,0,0,0,114,63,0,0,0,114,127,0, + 0,0,114,109,0,0,0,41,3,114,172,0,0,0,114,37, + 0,0,0,90,4,104,111,111,107,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,11,95,112,97,116,104,95, + 104,111,111,107,115,31,4,0,0,115,16,0,0,0,0,7, + 25,1,16,1,16,1,3,1,14,1,13,1,12,2,122,22, + 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, + 95,104,111,111,107,115,99,2,0,0,0,0,0,0,0,3, + 0,0,0,19,0,0,0,67,0,0,0,115,123,0,0,0, + 124,1,0,100,1,0,107,2,0,114,53,0,121,16,0,116, + 0,0,106,1,0,131,0,0,125,1,0,87,110,22,0,4, + 116,2,0,107,10,0,114,52,0,1,1,1,100,2,0,83, + 89,110,1,0,88,121,17,0,116,3,0,106,4,0,124,1, + 0,25,125,2,0,87,110,46,0,4,116,5,0,107,10,0, + 114,118,0,1,1,1,124,0,0,106,6,0,124,1,0,131, + 1,0,125,2,0,124,2,0,116,3,0,106,4,0,124,1, + 0,60,89,110,1,0,88,124,2,0,83,41,3,122,210,71, + 101,116,32,116,104,101,32,102,105,110,100,101,114,32,102,111, + 114,32,116,104,101,32,112,97,116,104,32,101,110,116,114,121, + 32,102,114,111,109,32,115,121,115,46,112,97,116,104,95,105, + 109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,10, + 32,32,32,32,32,32,32,32,73,102,32,116,104,101,32,112, + 97,116,104,32,101,110,116,114,121,32,105,115,32,110,111,116, + 32,105,110,32,116,104,101,32,99,97,99,104,101,44,32,102, + 105,110,100,32,116,104,101,32,97,112,112,114,111,112,114,105, + 97,116,101,32,102,105,110,100,101,114,10,32,32,32,32,32, + 32,32,32,97,110,100,32,99,97,99,104,101,32,105,116,46, + 32,73,102,32,110,111,32,102,105,110,100,101,114,32,105,115, + 32,97,118,97,105,108,97,98,108,101,44,32,115,116,111,114, + 101,32,78,111,110,101,46,10,10,32,32,32,32,32,32,32, + 32,114,32,0,0,0,78,41,7,114,3,0,0,0,114,47, + 0,0,0,218,17,70,105,108,101,78,111,116,70,111,117,110, + 100,69,114,114,111,114,114,8,0,0,0,114,252,0,0,0, + 114,139,0,0,0,114,0,1,0,0,41,3,114,172,0,0, + 0,114,37,0,0,0,114,254,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,20,95,112,97,116, + 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, + 48,4,0,0,115,22,0,0,0,0,8,12,1,3,1,16, + 1,13,3,9,1,3,1,17,1,13,1,15,1,18,1,122, + 31,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, + 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, + 99,3,0,0,0,0,0,0,0,6,0,0,0,3,0,0, + 0,67,0,0,0,115,119,0,0,0,116,0,0,124,2,0, + 100,1,0,131,2,0,114,39,0,124,2,0,106,1,0,124, + 1,0,131,1,0,92,2,0,125,3,0,125,4,0,110,21, + 0,124,2,0,106,2,0,124,1,0,131,1,0,125,3,0, + 103,0,0,125,4,0,124,3,0,100,0,0,107,9,0,114, + 88,0,116,3,0,106,4,0,124,1,0,124,3,0,131,2, + 0,83,116,3,0,106,5,0,124,1,0,100,0,0,131,2, + 0,125,5,0,124,4,0,124,5,0,95,6,0,124,5,0, + 83,41,2,78,114,126,0,0,0,41,7,114,117,0,0,0, + 114,126,0,0,0,114,183,0,0,0,114,123,0,0,0,114, + 180,0,0,0,114,162,0,0,0,114,158,0,0,0,41,6, + 114,172,0,0,0,114,128,0,0,0,114,254,0,0,0,114, + 129,0,0,0,114,130,0,0,0,114,166,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,218,16,95, + 108,101,103,97,99,121,95,103,101,116,95,115,112,101,99,70, + 4,0,0,115,18,0,0,0,0,4,15,1,24,2,15,1, + 6,1,12,1,16,1,18,1,9,1,122,27,80,97,116,104, + 70,105,110,100,101,114,46,95,108,101,103,97,99,121,95,103, + 101,116,95,115,112,101,99,78,99,4,0,0,0,0,0,0, + 0,9,0,0,0,5,0,0,0,67,0,0,0,115,243,0, + 0,0,103,0,0,125,4,0,120,230,0,124,2,0,68,93, + 191,0,125,5,0,116,0,0,124,5,0,116,1,0,116,2, + 0,102,2,0,131,2,0,115,43,0,113,13,0,124,0,0, + 106,3,0,124,5,0,131,1,0,125,6,0,124,6,0,100, + 1,0,107,9,0,114,13,0,116,4,0,124,6,0,100,2, + 0,131,2,0,114,106,0,124,6,0,106,5,0,124,1,0, + 124,3,0,131,2,0,125,7,0,110,18,0,124,0,0,106, + 6,0,124,1,0,124,6,0,131,2,0,125,7,0,124,7, + 0,100,1,0,107,8,0,114,139,0,113,13,0,124,7,0, + 106,7,0,100,1,0,107,9,0,114,158,0,124,7,0,83, + 124,7,0,106,8,0,125,8,0,124,8,0,100,1,0,107, + 8,0,114,191,0,116,9,0,100,3,0,131,1,0,130,1, + 0,124,4,0,106,10,0,124,8,0,131,1,0,1,113,13, + 0,87,116,11,0,106,12,0,124,1,0,100,1,0,131,2, + 0,125,7,0,124,4,0,124,7,0,95,8,0,124,7,0, + 83,100,1,0,83,41,4,122,63,70,105,110,100,32,116,104, + 101,32,108,111,97,100,101,114,32,111,114,32,110,97,109,101, + 115,112,97,99,101,95,112,97,116,104,32,102,111,114,32,116, + 104,105,115,32,109,111,100,117,108,101,47,112,97,99,107,97, + 103,101,32,110,97,109,101,46,78,114,182,0,0,0,122,19, + 115,112,101,99,32,109,105,115,115,105,110,103,32,108,111,97, + 100,101,114,41,13,114,145,0,0,0,114,71,0,0,0,218, + 5,98,121,116,101,115,114,2,1,0,0,114,117,0,0,0, + 114,182,0,0,0,114,3,1,0,0,114,129,0,0,0,114, + 158,0,0,0,114,109,0,0,0,114,151,0,0,0,114,123, + 0,0,0,114,162,0,0,0,41,9,114,172,0,0,0,114, + 128,0,0,0,114,37,0,0,0,114,181,0,0,0,218,14, + 110,97,109,101,115,112,97,99,101,95,112,97,116,104,90,5, + 101,110,116,114,121,114,254,0,0,0,114,166,0,0,0,114, + 130,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,218,9,95,103,101,116,95,115,112,101,99,85,4, + 0,0,115,40,0,0,0,0,5,6,1,13,1,21,1,3, + 1,15,1,12,1,15,1,21,2,18,1,12,1,3,1,15, + 1,4,1,9,1,12,1,12,5,17,2,18,1,9,1,122, + 20,80,97,116,104,70,105,110,100,101,114,46,95,103,101,116, + 95,115,112,101,99,99,4,0,0,0,0,0,0,0,6,0, + 0,0,4,0,0,0,67,0,0,0,115,140,0,0,0,124, + 2,0,100,1,0,107,8,0,114,21,0,116,0,0,106,1, + 0,125,2,0,124,0,0,106,2,0,124,1,0,124,2,0, + 124,3,0,131,3,0,125,4,0,124,4,0,100,1,0,107, + 8,0,114,58,0,100,1,0,83,124,4,0,106,3,0,100, + 1,0,107,8,0,114,132,0,124,4,0,106,4,0,125,5, + 0,124,5,0,114,125,0,100,2,0,124,4,0,95,5,0, + 116,6,0,124,1,0,124,5,0,124,0,0,106,2,0,131, + 3,0,124,4,0,95,4,0,124,4,0,83,100,1,0,83, + 110,4,0,124,4,0,83,100,1,0,83,41,3,122,98,102, + 105,110,100,32,116,104,101,32,109,111,100,117,108,101,32,111, + 110,32,115,121,115,46,112,97,116,104,32,111,114,32,39,112, + 97,116,104,39,32,98,97,115,101,100,32,111,110,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, + 10,32,32,32,32,32,32,32,32,115,121,115,46,112,97,116, + 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, + 46,78,90,9,110,97,109,101,115,112,97,99,101,41,7,114, + 8,0,0,0,114,37,0,0,0,114,6,1,0,0,114,129, + 0,0,0,114,158,0,0,0,114,160,0,0,0,114,231,0, + 0,0,41,6,114,172,0,0,0,114,128,0,0,0,114,37, + 0,0,0,114,181,0,0,0,114,166,0,0,0,114,5,1, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,182,0,0,0,117,4,0,0,115,26,0,0,0,0, + 4,12,1,9,1,21,1,12,1,4,1,15,1,9,1,6, + 3,9,1,24,1,4,2,7,2,122,20,80,97,116,104,70, + 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99, + 3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, + 67,0,0,0,115,41,0,0,0,124,0,0,106,0,0,124, + 1,0,124,2,0,131,2,0,125,3,0,124,3,0,100,1, + 0,107,8,0,114,34,0,100,1,0,83,124,3,0,106,1, + 0,83,41,2,122,170,102,105,110,100,32,116,104,101,32,109, + 111,100,117,108,101,32,111,110,32,115,121,115,46,112,97,116, + 104,32,111,114,32,39,112,97,116,104,39,32,98,97,115,101, + 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, + 111,107,115,32,97,110,100,10,32,32,32,32,32,32,32,32, + 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, + 114,95,99,97,99,104,101,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 78,41,2,114,182,0,0,0,114,129,0,0,0,41,4,114, + 172,0,0,0,114,128,0,0,0,114,37,0,0,0,114,166, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,183,0,0,0,139,4,0,0,115,8,0,0,0, + 0,8,18,1,12,1,4,1,122,22,80,97,116,104,70,105, + 110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,101, + 41,12,114,114,0,0,0,114,113,0,0,0,114,115,0,0, + 0,114,116,0,0,0,114,184,0,0,0,114,251,0,0,0, + 114,0,1,0,0,114,2,1,0,0,114,3,1,0,0,114, + 6,1,0,0,114,182,0,0,0,114,183,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,250,0,0,0,19,4,0,0,115,22,0,0,0, + 12,2,6,2,18,8,18,17,18,22,18,15,3,1,18,31, + 3,1,21,21,3,1,114,250,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, + 115,133,0,0,0,101,0,0,90,1,0,100,0,0,90,2, + 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, + 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,101, + 6,0,90,7,0,100,6,0,100,7,0,132,0,0,90,8, + 0,100,8,0,100,9,0,132,0,0,90,9,0,100,10,0, + 100,11,0,100,12,0,132,1,0,90,10,0,100,13,0,100, + 14,0,132,0,0,90,11,0,101,12,0,100,15,0,100,16, + 0,132,0,0,131,1,0,90,13,0,100,17,0,100,18,0, + 132,0,0,90,14,0,100,10,0,83,41,19,218,10,70,105, + 108,101,70,105,110,100,101,114,122,172,70,105,108,101,45,98, + 97,115,101,100,32,102,105,110,100,101,114,46,10,10,32,32, + 32,32,73,110,116,101,114,97,99,116,105,111,110,115,32,119, + 105,116,104,32,116,104,101,32,102,105,108,101,32,115,121,115, + 116,101,109,32,97,114,101,32,99,97,99,104,101,100,32,102, + 111,114,32,112,101,114,102,111,114,109,97,110,99,101,44,32, + 98,101,105,110,103,10,32,32,32,32,114,101,102,114,101,115, + 104,101,100,32,119,104,101,110,32,116,104,101,32,100,105,114, + 101,99,116,111,114,121,32,116,104,101,32,102,105,110,100,101, + 114,32,105,115,32,104,97,110,100,108,105,110,103,32,104,97, + 115,32,98,101,101,110,32,109,111,100,105,102,105,101,100,46, + 10,10,32,32,32,32,99,2,0,0,0,0,0,0,0,5, + 0,0,0,5,0,0,0,7,0,0,0,115,122,0,0,0, + 103,0,0,125,3,0,120,52,0,124,2,0,68,93,44,0, + 92,2,0,137,0,0,125,4,0,124,3,0,106,0,0,135, + 0,0,102,1,0,100,1,0,100,2,0,134,0,0,124,4, + 0,68,131,1,0,131,1,0,1,113,13,0,87,124,3,0, + 124,0,0,95,1,0,124,1,0,112,79,0,100,3,0,124, + 0,0,95,2,0,100,6,0,124,0,0,95,3,0,116,4, + 0,131,0,0,124,0,0,95,5,0,116,4,0,131,0,0, + 124,0,0,95,6,0,100,5,0,83,41,7,122,154,73,110, + 105,116,105,97,108,105,122,101,32,119,105,116,104,32,116,104, + 101,32,112,97,116,104,32,116,111,32,115,101,97,114,99,104, + 32,111,110,32,97,110,100,32,97,32,118,97,114,105,97,98, + 108,101,32,110,117,109,98,101,114,32,111,102,10,32,32,32, + 32,32,32,32,32,50,45,116,117,112,108,101,115,32,99,111, + 110,116,97,105,110,105,110,103,32,116,104,101,32,108,111,97, + 100,101,114,32,97,110,100,32,116,104,101,32,102,105,108,101, + 32,115,117,102,102,105,120,101,115,32,116,104,101,32,108,111, + 97,100,101,114,10,32,32,32,32,32,32,32,32,114,101,99, + 111,103,110,105,122,101,115,46,99,1,0,0,0,0,0,0, + 0,2,0,0,0,3,0,0,0,51,0,0,0,115,27,0, + 0,0,124,0,0,93,17,0,125,1,0,124,1,0,136,0, + 0,102,2,0,86,1,113,3,0,100,0,0,83,41,1,78, + 114,4,0,0,0,41,2,114,24,0,0,0,114,226,0,0, + 0,41,1,114,129,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,228,0,0,0,168,4,0,0,115,2,0,0,0, + 6,0,122,38,70,105,108,101,70,105,110,100,101,114,46,95, + 95,105,110,105,116,95,95,46,60,108,111,99,97,108,115,62, + 46,60,103,101,110,101,120,112,114,62,114,60,0,0,0,114, + 31,0,0,0,78,114,89,0,0,0,41,7,114,151,0,0, + 0,218,8,95,108,111,97,100,101,114,115,114,37,0,0,0, + 218,11,95,112,97,116,104,95,109,116,105,109,101,218,3,115, + 101,116,218,11,95,112,97,116,104,95,99,97,99,104,101,218, + 19,95,114,101,108,97,120,101,100,95,112,97,116,104,95,99, + 97,99,104,101,41,5,114,110,0,0,0,114,37,0,0,0, + 218,14,108,111,97,100,101,114,95,100,101,116,97,105,108,115, + 90,7,108,111,97,100,101,114,115,114,168,0,0,0,114,4, + 0,0,0,41,1,114,129,0,0,0,114,6,0,0,0,114, + 186,0,0,0,162,4,0,0,115,16,0,0,0,0,4,6, + 1,19,1,36,1,9,2,15,1,9,1,12,1,122,19,70, + 105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116, + 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, + 0,0,0,67,0,0,0,115,13,0,0,0,100,3,0,124, + 0,0,95,0,0,100,2,0,83,41,4,122,31,73,110,118, + 97,108,105,100,97,116,101,32,116,104,101,32,100,105,114,101, + 99,116,111,114,121,32,109,116,105,109,101,46,114,31,0,0, + 0,78,114,89,0,0,0,41,1,114,9,1,0,0,41,1, + 114,110,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,251,0,0,0,176,4,0,0,115,2,0, + 0,0,0,2,122,28,70,105,108,101,70,105,110,100,101,114, + 46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, + 101,115,99,2,0,0,0,0,0,0,0,3,0,0,0,2, + 0,0,0,67,0,0,0,115,59,0,0,0,124,0,0,106, + 0,0,124,1,0,131,1,0,125,2,0,124,2,0,100,1, + 0,107,8,0,114,37,0,100,1,0,103,0,0,102,2,0, + 83,124,2,0,106,1,0,124,2,0,106,2,0,112,55,0, + 103,0,0,102,2,0,83,41,2,122,197,84,114,121,32,116, + 111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,32, + 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, + 100,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101, + 32,110,97,109,101,115,112,97,99,101,10,32,32,32,32,32, + 32,32,32,112,97,99,107,97,103,101,32,112,111,114,116,105, + 111,110,115,46,32,82,101,116,117,114,110,115,32,40,108,111, + 97,100,101,114,44,32,108,105,115,116,45,111,102,45,112,111, + 114,116,105,111,110,115,41,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 78,41,3,114,182,0,0,0,114,129,0,0,0,114,158,0, + 0,0,41,3,114,110,0,0,0,114,128,0,0,0,114,166, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,126,0,0,0,182,4,0,0,115,8,0,0,0, + 0,7,15,1,12,1,10,1,122,22,70,105,108,101,70,105, + 110,100,101,114,46,102,105,110,100,95,108,111,97,100,101,114, + 99,6,0,0,0,0,0,0,0,7,0,0,0,7,0,0, + 0,67,0,0,0,115,40,0,0,0,124,1,0,124,2,0, + 124,3,0,131,2,0,125,6,0,116,0,0,124,2,0,124, + 3,0,100,1,0,124,6,0,100,2,0,124,4,0,131,2, + 2,83,41,3,78,114,129,0,0,0,114,158,0,0,0,41, + 1,114,169,0,0,0,41,7,114,110,0,0,0,114,167,0, + 0,0,114,128,0,0,0,114,37,0,0,0,90,4,115,109, + 115,108,114,181,0,0,0,114,129,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,114,6,1,0,0, + 194,4,0,0,115,6,0,0,0,0,1,15,1,18,1,122, + 20,70,105,108,101,70,105,110,100,101,114,46,95,103,101,116, + 95,115,112,101,99,78,99,3,0,0,0,0,0,0,0,14, + 0,0,0,15,0,0,0,67,0,0,0,115,234,1,0,0, + 100,1,0,125,3,0,124,1,0,106,0,0,100,2,0,131, + 1,0,100,3,0,25,125,4,0,121,34,0,116,1,0,124, + 0,0,106,2,0,112,49,0,116,3,0,106,4,0,131,0, + 0,131,1,0,106,5,0,125,5,0,87,110,24,0,4,116, + 6,0,107,10,0,114,85,0,1,1,1,100,10,0,125,5, + 0,89,110,1,0,88,124,5,0,124,0,0,106,7,0,107, + 3,0,114,120,0,124,0,0,106,8,0,131,0,0,1,124, + 5,0,124,0,0,95,7,0,116,9,0,131,0,0,114,153, + 0,124,0,0,106,10,0,125,6,0,124,4,0,106,11,0, + 131,0,0,125,7,0,110,15,0,124,0,0,106,12,0,125, + 6,0,124,4,0,125,7,0,124,7,0,124,6,0,107,6, + 0,114,45,1,116,13,0,124,0,0,106,2,0,124,4,0, + 131,2,0,125,8,0,120,100,0,124,0,0,106,14,0,68, + 93,77,0,92,2,0,125,9,0,125,10,0,100,5,0,124, + 9,0,23,125,11,0,116,13,0,124,8,0,124,11,0,131, + 2,0,125,12,0,116,15,0,124,12,0,131,1,0,114,208, + 0,124,0,0,106,16,0,124,10,0,124,1,0,124,12,0, + 124,8,0,103,1,0,124,2,0,131,5,0,83,113,208,0, + 87,116,17,0,124,8,0,131,1,0,125,3,0,120,123,0, + 124,0,0,106,14,0,68,93,112,0,92,2,0,125,9,0, + 125,10,0,116,13,0,124,0,0,106,2,0,124,4,0,124, + 9,0,23,131,2,0,125,12,0,116,18,0,100,6,0,106, + 19,0,124,12,0,131,1,0,100,7,0,100,3,0,131,1, + 1,1,124,7,0,124,9,0,23,124,6,0,107,6,0,114, + 55,1,116,15,0,124,12,0,131,1,0,114,55,1,124,0, + 0,106,16,0,124,10,0,124,1,0,124,12,0,100,8,0, + 124,2,0,131,5,0,83,113,55,1,87,124,3,0,114,230, + 1,116,18,0,100,9,0,106,19,0,124,8,0,131,1,0, + 131,1,0,1,116,20,0,106,21,0,124,1,0,100,8,0, + 131,2,0,125,13,0,124,8,0,103,1,0,124,13,0,95, + 22,0,124,13,0,83,100,8,0,83,41,11,122,102,84,114, + 121,32,116,111,32,102,105,110,100,32,97,32,115,112,101,99, + 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, + 101,100,32,109,111,100,117,108,101,46,32,32,82,101,116,117, + 114,110,115,32,116,104,101,10,32,32,32,32,32,32,32,32, + 109,97,116,99,104,105,110,103,32,115,112,101,99,44,32,111, + 114,32,78,111,110,101,32,105,102,32,110,111,116,32,102,111, + 117,110,100,46,70,114,60,0,0,0,114,58,0,0,0,114, + 31,0,0,0,114,186,0,0,0,122,9,116,114,121,105,110, + 103,32,123,125,114,100,0,0,0,78,122,25,112,111,115,115, + 105,98,108,101,32,110,97,109,101,115,112,97,99,101,32,102, + 111,114,32,123,125,114,89,0,0,0,41,23,114,34,0,0, + 0,114,41,0,0,0,114,37,0,0,0,114,3,0,0,0, + 114,47,0,0,0,114,220,0,0,0,114,42,0,0,0,114, + 9,1,0,0,218,11,95,102,105,108,108,95,99,97,99,104, + 101,114,7,0,0,0,114,12,1,0,0,114,90,0,0,0, + 114,11,1,0,0,114,30,0,0,0,114,8,1,0,0,114, + 46,0,0,0,114,6,1,0,0,114,48,0,0,0,114,107, + 0,0,0,114,49,0,0,0,114,123,0,0,0,114,162,0, + 0,0,114,158,0,0,0,41,14,114,110,0,0,0,114,128, + 0,0,0,114,181,0,0,0,90,12,105,115,95,110,97,109, + 101,115,112,97,99,101,90,11,116,97,105,108,95,109,111,100, + 117,108,101,114,135,0,0,0,90,5,99,97,99,104,101,90, + 12,99,97,99,104,101,95,109,111,100,117,108,101,90,9,98, + 97,115,101,95,112,97,116,104,114,226,0,0,0,114,167,0, + 0,0,90,13,105,110,105,116,95,102,105,108,101,110,97,109, + 101,90,9,102,117,108,108,95,112,97,116,104,114,166,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 114,182,0,0,0,199,4,0,0,115,68,0,0,0,0,3, + 6,1,19,1,3,1,34,1,13,1,11,1,15,1,10,1, + 9,2,9,1,9,1,15,2,9,1,6,2,12,1,18,1, + 22,1,10,1,15,1,12,1,32,4,12,2,22,1,22,1, + 25,1,16,1,12,1,29,1,6,1,19,1,18,1,12,1, + 4,1,122,20,70,105,108,101,70,105,110,100,101,114,46,102, + 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, + 0,9,0,0,0,13,0,0,0,67,0,0,0,115,11,1, + 0,0,124,0,0,106,0,0,125,1,0,121,31,0,116,1, + 0,106,2,0,124,1,0,112,33,0,116,1,0,106,3,0, + 131,0,0,131,1,0,125,2,0,87,110,33,0,4,116,4, + 0,116,5,0,116,6,0,102,3,0,107,10,0,114,75,0, + 1,1,1,103,0,0,125,2,0,89,110,1,0,88,116,7, + 0,106,8,0,106,9,0,100,1,0,131,1,0,115,112,0, + 116,10,0,124,2,0,131,1,0,124,0,0,95,11,0,110, + 111,0,116,10,0,131,0,0,125,3,0,120,90,0,124,2, + 0,68,93,82,0,125,4,0,124,4,0,106,12,0,100,2, + 0,131,1,0,92,3,0,125,5,0,125,6,0,125,7,0, + 124,6,0,114,191,0,100,3,0,106,13,0,124,5,0,124, + 7,0,106,14,0,131,0,0,131,2,0,125,8,0,110,6, + 0,124,5,0,125,8,0,124,3,0,106,15,0,124,8,0, + 131,1,0,1,113,128,0,87,124,3,0,124,0,0,95,11, + 0,116,7,0,106,8,0,106,9,0,116,16,0,131,1,0, + 114,7,1,100,4,0,100,5,0,132,0,0,124,2,0,68, + 131,1,0,124,0,0,95,17,0,100,6,0,83,41,7,122, + 68,70,105,108,108,32,116,104,101,32,99,97,99,104,101,32, + 111,102,32,112,111,116,101,110,116,105,97,108,32,109,111,100, + 117,108,101,115,32,97,110,100,32,112,97,99,107,97,103,101, + 115,32,102,111,114,32,116,104,105,115,32,100,105,114,101,99, + 116,111,114,121,46,114,0,0,0,0,114,60,0,0,0,122, + 5,123,125,46,123,125,99,1,0,0,0,0,0,0,0,2, + 0,0,0,3,0,0,0,83,0,0,0,115,28,0,0,0, + 104,0,0,124,0,0,93,18,0,125,1,0,124,1,0,106, + 0,0,131,0,0,146,2,0,113,6,0,83,114,4,0,0, + 0,41,1,114,90,0,0,0,41,2,114,24,0,0,0,90, + 2,102,110,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,250,9,60,115,101,116,99,111,109,112,62,17,5,0, + 0,115,2,0,0,0,9,0,122,41,70,105,108,101,70,105, + 110,100,101,114,46,95,102,105,108,108,95,99,97,99,104,101, + 46,60,108,111,99,97,108,115,62,46,60,115,101,116,99,111, + 109,112,62,78,41,18,114,37,0,0,0,114,3,0,0,0, + 90,7,108,105,115,116,100,105,114,114,47,0,0,0,114,1, + 1,0,0,218,15,80,101,114,109,105,115,115,105,111,110,69, + 114,114,111,114,218,18,78,111,116,65,68,105,114,101,99,116, + 111,114,121,69,114,114,111,114,114,8,0,0,0,114,9,0, + 0,0,114,10,0,0,0,114,10,1,0,0,114,11,1,0, + 0,114,85,0,0,0,114,49,0,0,0,114,90,0,0,0, + 218,3,97,100,100,114,11,0,0,0,114,12,1,0,0,41, + 9,114,110,0,0,0,114,37,0,0,0,90,8,99,111,110, + 116,101,110,116,115,90,21,108,111,119,101,114,95,115,117,102, + 102,105,120,95,99,111,110,116,101,110,116,115,114,246,0,0, + 0,114,108,0,0,0,114,238,0,0,0,114,226,0,0,0, + 90,8,110,101,119,95,110,97,109,101,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,114,14,1,0,0,244,4, + 0,0,115,34,0,0,0,0,2,9,1,3,1,31,1,22, + 3,11,3,18,1,18,7,9,1,13,1,24,1,6,1,27, + 2,6,1,17,1,9,1,18,1,122,22,70,105,108,101,70, + 105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,104, + 101,99,1,0,0,0,0,0,0,0,3,0,0,0,3,0, + 0,0,7,0,0,0,115,25,0,0,0,135,0,0,135,1, + 0,102,2,0,100,1,0,100,2,0,134,0,0,125,2,0, + 124,2,0,83,41,3,97,20,1,0,0,65,32,99,108,97, + 115,115,32,109,101,116,104,111,100,32,119,104,105,99,104,32, + 114,101,116,117,114,110,115,32,97,32,99,108,111,115,117,114, + 101,32,116,111,32,117,115,101,32,111,110,32,115,121,115,46, + 112,97,116,104,95,104,111,111,107,10,32,32,32,32,32,32, + 32,32,119,104,105,99,104,32,119,105,108,108,32,114,101,116, + 117,114,110,32,97,110,32,105,110,115,116,97,110,99,101,32, + 117,115,105,110,103,32,116,104,101,32,115,112,101,99,105,102, + 105,101,100,32,108,111,97,100,101,114,115,32,97,110,100,32, + 116,104,101,32,112,97,116,104,10,32,32,32,32,32,32,32, + 32,99,97,108,108,101,100,32,111,110,32,116,104,101,32,99, + 108,111,115,117,114,101,46,10,10,32,32,32,32,32,32,32, + 32,73,102,32,116,104,101,32,112,97,116,104,32,99,97,108, + 108,101,100,32,111,110,32,116,104,101,32,99,108,111,115,117, + 114,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101, + 99,116,111,114,121,44,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,115,10,32,32,32,32,32,32,32,32,114,97, + 105,115,101,100,46,10,10,32,32,32,32,32,32,32,32,99, + 1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, + 19,0,0,0,115,43,0,0,0,116,0,0,124,0,0,131, + 1,0,115,30,0,116,1,0,100,1,0,100,2,0,124,0, + 0,131,1,1,130,1,0,136,0,0,124,0,0,136,1,0, + 140,1,0,83,41,3,122,45,80,97,116,104,32,104,111,111, + 107,32,102,111,114,32,105,109,112,111,114,116,108,105,98,46, + 109,97,99,104,105,110,101,114,121,46,70,105,108,101,70,105, + 110,100,101,114,46,122,30,111,110,108,121,32,100,105,114,101, + 99,116,111,114,105,101,115,32,97,114,101,32,115,117,112,112, + 111,114,116,101,100,114,37,0,0,0,41,2,114,48,0,0, + 0,114,109,0,0,0,41,1,114,37,0,0,0,41,2,114, + 172,0,0,0,114,13,1,0,0,114,4,0,0,0,114,6, + 0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,102, + 111,114,95,70,105,108,101,70,105,110,100,101,114,29,5,0, + 0,115,6,0,0,0,0,2,12,1,18,1,122,54,70,105, + 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, + 111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,104, + 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, + 110,100,101,114,114,4,0,0,0,41,3,114,172,0,0,0, + 114,13,1,0,0,114,19,1,0,0,114,4,0,0,0,41, + 2,114,172,0,0,0,114,13,1,0,0,114,6,0,0,0, + 218,9,112,97,116,104,95,104,111,111,107,19,5,0,0,115, + 4,0,0,0,0,10,21,6,122,20,70,105,108,101,70,105, + 110,100,101,114,46,112,97,116,104,95,104,111,111,107,99,1, + 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, + 0,0,0,115,16,0,0,0,100,1,0,106,0,0,124,0, + 0,106,1,0,131,1,0,83,41,2,78,122,16,70,105,108, + 101,70,105,110,100,101,114,40,123,33,114,125,41,41,2,114, + 49,0,0,0,114,37,0,0,0,41,1,114,110,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, + 245,0,0,0,37,5,0,0,115,2,0,0,0,0,1,122, + 19,70,105,108,101,70,105,110,100,101,114,46,95,95,114,101, + 112,114,95,95,41,15,114,114,0,0,0,114,113,0,0,0, + 114,115,0,0,0,114,116,0,0,0,114,186,0,0,0,114, + 251,0,0,0,114,132,0,0,0,114,183,0,0,0,114,126, + 0,0,0,114,6,1,0,0,114,182,0,0,0,114,14,1, + 0,0,114,184,0,0,0,114,20,1,0,0,114,245,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,7,1,0,0,153,4,0,0,115,20, + 0,0,0,12,7,6,2,12,14,12,4,6,2,12,12,12, + 5,15,45,12,31,18,18,114,7,1,0,0,99,4,0,0, + 0,0,0,0,0,6,0,0,0,11,0,0,0,67,0,0, + 0,115,195,0,0,0,124,0,0,106,0,0,100,1,0,131, + 1,0,125,4,0,124,0,0,106,0,0,100,2,0,131,1, + 0,125,5,0,124,4,0,115,99,0,124,5,0,114,54,0, + 124,5,0,106,1,0,125,4,0,110,45,0,124,2,0,124, + 3,0,107,2,0,114,84,0,116,2,0,124,1,0,124,2, + 0,131,2,0,125,4,0,110,15,0,116,3,0,124,1,0, + 124,2,0,131,2,0,125,4,0,124,5,0,115,126,0,116, + 4,0,124,1,0,124,2,0,100,3,0,124,4,0,131,2, + 1,125,5,0,121,44,0,124,5,0,124,0,0,100,2,0, + 60,124,4,0,124,0,0,100,1,0,60,124,2,0,124,0, + 0,100,4,0,60,124,3,0,124,0,0,100,5,0,60,87, + 110,18,0,4,116,5,0,107,10,0,114,190,0,1,1,1, + 89,110,1,0,88,100,0,0,83,41,6,78,218,10,95,95, + 108,111,97,100,101,114,95,95,218,8,95,95,115,112,101,99, + 95,95,114,129,0,0,0,90,8,95,95,102,105,108,101,95, + 95,90,10,95,95,99,97,99,104,101,100,95,95,41,6,218, + 3,103,101,116,114,129,0,0,0,114,224,0,0,0,114,219, + 0,0,0,114,169,0,0,0,218,9,69,120,99,101,112,116, + 105,111,110,41,6,90,2,110,115,114,108,0,0,0,90,8, + 112,97,116,104,110,97,109,101,90,9,99,112,97,116,104,110, + 97,109,101,114,129,0,0,0,114,166,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,14,95,102, + 105,120,95,117,112,95,109,111,100,117,108,101,43,5,0,0, + 115,34,0,0,0,0,2,15,1,15,1,6,1,6,1,12, + 1,12,1,18,2,15,1,6,1,21,1,3,1,10,1,10, + 1,10,1,14,1,13,2,114,25,1,0,0,99,0,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, + 0,115,55,0,0,0,116,0,0,116,1,0,106,2,0,131, + 0,0,102,2,0,125,0,0,116,3,0,116,4,0,102,2, + 0,125,1,0,116,5,0,116,6,0,102,2,0,125,2,0, + 124,0,0,124,1,0,124,2,0,103,3,0,83,41,1,122, + 95,82,101,116,117,114,110,115,32,97,32,108,105,115,116,32, + 111,102,32,102,105,108,101,45,98,97,115,101,100,32,109,111, + 100,117,108,101,32,108,111,97,100,101,114,115,46,10,10,32, + 32,32,32,69,97,99,104,32,105,116,101,109,32,105,115,32, + 97,32,116,117,112,108,101,32,40,108,111,97,100,101,114,44, + 32,115,117,102,102,105,120,101,115,41,46,10,32,32,32,32, + 41,7,114,225,0,0,0,114,147,0,0,0,218,18,101,120, + 116,101,110,115,105,111,110,95,115,117,102,102,105,120,101,115, + 114,219,0,0,0,114,86,0,0,0,114,224,0,0,0,114, + 76,0,0,0,41,3,90,10,101,120,116,101,110,115,105,111, + 110,115,90,6,115,111,117,114,99,101,90,8,98,121,116,101, + 99,111,100,101,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,163,0,0,0,66,5,0,0,115,8,0,0, + 0,0,5,18,1,12,1,12,1,114,163,0,0,0,99,1, + 0,0,0,0,0,0,0,12,0,0,0,12,0,0,0,67, + 0,0,0,115,70,2,0,0,124,0,0,97,0,0,116,0, + 0,106,1,0,97,1,0,116,0,0,106,2,0,97,2,0, + 116,1,0,106,3,0,116,4,0,25,125,1,0,120,76,0, + 100,26,0,68,93,68,0,125,2,0,124,2,0,116,1,0, + 106,3,0,107,7,0,114,83,0,116,0,0,106,5,0,124, + 2,0,131,1,0,125,3,0,110,13,0,116,1,0,106,3, + 0,124,2,0,25,125,3,0,116,6,0,124,1,0,124,2, + 0,124,3,0,131,3,0,1,113,44,0,87,100,5,0,100, + 6,0,103,1,0,102,2,0,100,7,0,100,8,0,100,6, + 0,103,2,0,102,2,0,102,2,0,125,4,0,120,149,0, + 124,4,0,68,93,129,0,92,2,0,125,5,0,125,6,0, + 116,7,0,100,9,0,100,10,0,132,0,0,124,6,0,68, + 131,1,0,131,1,0,115,199,0,116,8,0,130,1,0,124, + 6,0,100,11,0,25,125,7,0,124,5,0,116,1,0,106, + 3,0,107,6,0,114,241,0,116,1,0,106,3,0,124,5, + 0,25,125,8,0,80,113,156,0,121,20,0,116,0,0,106, + 5,0,124,5,0,131,1,0,125,8,0,80,87,113,156,0, + 4,116,9,0,107,10,0,114,28,1,1,1,1,119,156,0, + 89,113,156,0,88,113,156,0,87,116,9,0,100,12,0,131, + 1,0,130,1,0,116,6,0,124,1,0,100,13,0,124,8, + 0,131,3,0,1,116,6,0,124,1,0,100,14,0,124,7, + 0,131,3,0,1,116,6,0,124,1,0,100,15,0,100,16, + 0,106,10,0,124,6,0,131,1,0,131,3,0,1,121,19, + 0,116,0,0,106,5,0,100,17,0,131,1,0,125,9,0, + 87,110,24,0,4,116,9,0,107,10,0,114,147,1,1,1, + 1,100,18,0,125,9,0,89,110,1,0,88,116,6,0,124, + 1,0,100,17,0,124,9,0,131,3,0,1,116,0,0,106, + 5,0,100,19,0,131,1,0,125,10,0,116,6,0,124,1, + 0,100,19,0,124,10,0,131,3,0,1,124,5,0,100,7, + 0,107,2,0,114,238,1,116,0,0,106,5,0,100,20,0, + 131,1,0,125,11,0,116,6,0,124,1,0,100,21,0,124, + 11,0,131,3,0,1,116,6,0,124,1,0,100,22,0,116, + 11,0,131,0,0,131,3,0,1,116,12,0,106,13,0,116, + 2,0,106,14,0,131,0,0,131,1,0,1,124,5,0,100, + 7,0,107,2,0,114,66,2,116,15,0,106,16,0,100,23, + 0,131,1,0,1,100,24,0,116,12,0,107,6,0,114,66, + 2,100,25,0,116,17,0,95,18,0,100,18,0,83,41,27, + 122,205,83,101,116,117,112,32,116,104,101,32,112,97,116,104, + 45,98,97,115,101,100,32,105,109,112,111,114,116,101,114,115, + 32,102,111,114,32,105,109,112,111,114,116,108,105,98,32,98, + 121,32,105,109,112,111,114,116,105,110,103,32,110,101,101,100, + 101,100,10,32,32,32,32,98,117,105,108,116,45,105,110,32, + 109,111,100,117,108,101,115,32,97,110,100,32,105,110,106,101, + 99,116,105,110,103,32,116,104,101,109,32,105,110,116,111,32, + 116,104,101,32,103,108,111,98,97,108,32,110,97,109,101,115, + 112,97,99,101,46,10,10,32,32,32,32,79,116,104,101,114, + 32,99,111,109,112,111,110,101,110,116,115,32,97,114,101,32, + 101,120,116,114,97,99,116,101,100,32,102,114,111,109,32,116, + 104,101,32,99,111,114,101,32,98,111,111,116,115,116,114,97, + 112,32,109,111,100,117,108,101,46,10,10,32,32,32,32,114, + 51,0,0,0,114,62,0,0,0,218,8,98,117,105,108,116, + 105,110,115,114,144,0,0,0,90,5,112,111,115,105,120,250, + 1,47,218,2,110,116,250,1,92,99,1,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,115,0,0,0,115,33, + 0,0,0,124,0,0,93,23,0,125,1,0,116,0,0,124, + 1,0,131,1,0,100,0,0,107,2,0,86,1,113,3,0, + 100,1,0,83,41,2,114,31,0,0,0,78,41,1,114,33, + 0,0,0,41,2,114,24,0,0,0,114,79,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,228, + 0,0,0,102,5,0,0,115,2,0,0,0,6,0,122,25, + 95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,46, + 60,103,101,110,101,120,112,114,62,114,61,0,0,0,122,30, + 105,109,112,111,114,116,108,105,98,32,114,101,113,117,105,114, + 101,115,32,112,111,115,105,120,32,111,114,32,110,116,114,3, + 0,0,0,114,27,0,0,0,114,23,0,0,0,114,32,0, + 0,0,90,7,95,116,104,114,101,97,100,78,90,8,95,119, + 101,97,107,114,101,102,90,6,119,105,110,114,101,103,114,171, + 0,0,0,114,7,0,0,0,122,4,46,112,121,119,122,6, + 95,100,46,112,121,100,84,41,4,114,51,0,0,0,114,62, + 0,0,0,114,27,1,0,0,114,144,0,0,0,41,19,114, + 123,0,0,0,114,8,0,0,0,114,147,0,0,0,114,240, + 0,0,0,114,114,0,0,0,90,18,95,98,117,105,108,116, + 105,110,95,102,114,111,109,95,110,97,109,101,114,118,0,0, + 0,218,3,97,108,108,218,14,65,115,115,101,114,116,105,111, + 110,69,114,114,111,114,114,109,0,0,0,114,28,0,0,0, + 114,13,0,0,0,114,230,0,0,0,114,151,0,0,0,114, + 26,1,0,0,114,86,0,0,0,114,165,0,0,0,114,170, + 0,0,0,114,174,0,0,0,41,12,218,17,95,98,111,111, + 116,115,116,114,97,112,95,109,111,100,117,108,101,90,11,115, + 101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,108, + 116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,105, + 110,95,109,111,100,117,108,101,90,10,111,115,95,100,101,116, + 97,105,108,115,90,10,98,117,105,108,116,105,110,95,111,115, + 114,23,0,0,0,114,27,0,0,0,90,9,111,115,95,109, + 111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111, + 100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111, + 100,117,108,101,90,13,119,105,110,114,101,103,95,109,111,100, + 117,108,101,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,6,95,115,101,116,117,112,77,5,0,0,115,82, + 0,0,0,0,8,6,1,9,1,9,3,13,1,13,1,15, + 1,18,2,13,1,20,3,33,1,19,2,31,1,10,1,15, + 1,13,1,4,2,3,1,15,1,5,1,13,1,12,2,12, + 1,16,1,16,1,25,3,3,1,19,1,13,2,11,1,16, + 3,15,1,16,3,12,1,15,1,16,3,19,1,19,1,12, + 1,13,1,12,1,114,34,1,0,0,99,1,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, + 116,0,0,0,116,0,0,124,0,0,131,1,0,1,116,1, + 0,131,0,0,125,1,0,116,2,0,106,3,0,106,4,0, + 116,5,0,106,6,0,124,1,0,140,0,0,103,1,0,131, + 1,0,1,116,7,0,106,8,0,100,1,0,107,2,0,114, + 78,0,116,2,0,106,9,0,106,10,0,116,11,0,131,1, + 0,1,116,2,0,106,9,0,106,10,0,116,12,0,131,1, + 0,1,116,5,0,124,0,0,95,5,0,116,13,0,124,0, + 0,95,13,0,100,2,0,83,41,3,122,41,73,110,115,116, + 97,108,108,32,116,104,101,32,112,97,116,104,45,98,97,115, + 101,100,32,105,109,112,111,114,116,32,99,111,109,112,111,110, + 101,110,116,115,46,114,29,1,0,0,78,41,14,114,34,1, + 0,0,114,163,0,0,0,114,8,0,0,0,114,255,0,0, + 0,114,151,0,0,0,114,7,1,0,0,114,20,1,0,0, + 114,3,0,0,0,114,114,0,0,0,218,9,109,101,116,97, + 95,112,97,116,104,114,165,0,0,0,114,170,0,0,0,114, + 250,0,0,0,114,219,0,0,0,41,2,114,33,1,0,0, + 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, + 101,114,115,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,8,95,105,110,115,116,97,108,108,145,5,0,0, + 115,16,0,0,0,0,2,10,1,9,1,28,1,15,1,16, + 1,16,4,9,1,114,36,1,0,0,41,1,114,0,0,0, + 0,41,2,114,1,0,0,0,114,2,0,0,0,41,59,114, + 116,0,0,0,114,12,0,0,0,90,37,95,67,65,83,69, + 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, + 84,70,79,82,77,83,95,66,89,84,69,83,95,75,69,89, + 114,11,0,0,0,114,13,0,0,0,114,19,0,0,0,114, + 21,0,0,0,114,30,0,0,0,114,40,0,0,0,114,41, + 0,0,0,114,45,0,0,0,114,46,0,0,0,114,48,0, + 0,0,114,57,0,0,0,218,4,116,121,112,101,218,8,95, + 95,99,111,100,101,95,95,114,146,0,0,0,114,17,0,0, + 0,114,137,0,0,0,114,16,0,0,0,114,20,0,0,0, + 90,17,95,82,65,87,95,77,65,71,73,67,95,78,85,77, + 66,69,82,114,75,0,0,0,114,74,0,0,0,114,86,0, + 0,0,114,76,0,0,0,90,23,68,69,66,85,71,95,66, + 89,84,69,67,79,68,69,95,83,85,70,70,73,88,69,83, + 90,27,79,80,84,73,77,73,90,69,68,95,66,89,84,69, + 67,79,68,69,95,83,85,70,70,73,88,69,83,114,81,0, + 0,0,114,87,0,0,0,114,93,0,0,0,114,97,0,0, + 0,114,99,0,0,0,114,107,0,0,0,114,125,0,0,0, + 114,132,0,0,0,114,143,0,0,0,114,149,0,0,0,114, + 152,0,0,0,114,157,0,0,0,218,6,111,98,106,101,99, + 116,114,164,0,0,0,114,169,0,0,0,114,170,0,0,0, + 114,185,0,0,0,114,195,0,0,0,114,211,0,0,0,114, + 219,0,0,0,114,224,0,0,0,114,230,0,0,0,114,225, + 0,0,0,114,231,0,0,0,114,248,0,0,0,114,250,0, + 0,0,114,7,1,0,0,114,25,1,0,0,114,163,0,0, + 0,114,34,1,0,0,114,36,1,0,0,114,4,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,218, + 8,60,109,111,100,117,108,101,62,8,0,0,0,115,106,0, + 0,0,6,16,6,1,6,1,3,1,7,3,12,17,12,5, + 12,5,12,6,12,12,12,10,12,9,12,5,12,7,15,22, + 15,114,22,1,18,2,6,1,6,2,9,2,9,2,10,2, + 21,44,12,33,12,19,12,12,12,12,18,8,12,28,12,17, + 21,55,21,12,18,10,12,14,9,3,12,1,15,65,19,64, + 19,28,22,110,19,41,25,43,25,16,6,3,25,53,19,57, + 19,41,19,134,19,146,15,23,12,11,12,68, }; diff --git a/Python/pystate.c b/Python/pystate.c index 6d1c6d0..24e20c3 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -281,14 +281,16 @@ int _PyState_AddModule(PyObject* module, struct PyModuleDef* def) { PyInterpreterState *state; + if (!def) { + assert(PyErr_Occurred()); + return -1; + } if (def->m_slots) { PyErr_SetString(PyExc_SystemError, "PyState_AddModule called on module with slots"); return -1; } state = GET_INTERP_STATE(); - if (!def) - return -1; if (!state->modules_by_index) { state->modules_by_index = PyList_New(0); if (!state->modules_by_index) diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 7fbf06e..90cb2de 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -528,7 +528,7 @@ print_error_text(PyObject *f, int offset, PyObject *text_obj) offset -= (int)(nl+1-text); text = nl+1; } - while (*text == ' ' || *text == '\t') { + while (*text == ' ' || *text == '\t' || *text == '\f') { text++; offset--; } @@ -747,7 +747,7 @@ print_exception(PyObject *f, PyObject *value) err = PyFile_WriteString("", f); } else { - if (_PyUnicode_CompareWithId(moduleName, &PyId_builtins) != 0) + if (!_PyUnicode_EqualToASCIIId(moduleName, &PyId_builtins)) { err = PyFile_WriteObject(moduleName, f, Py_PRINT_RAW); err += PyFile_WriteString(".", f); diff --git a/Python/random.c b/Python/random.c index 07dacfe..d203939 100644 --- a/Python/random.c +++ b/Python/random.c @@ -9,9 +9,10 @@ # ifdef HAVE_LINUX_RANDOM_H # include # endif -# ifdef HAVE_GETRANDOM +# if defined(HAVE_SYS_RANDOM_H) && (defined(HAVE_GETRANDOM) || defined(HAVE_GETENTROPY)) # include -# elif defined(HAVE_GETRANDOM_SYSCALL) +# endif +# if !defined(HAVE_GETRANDOM) && defined(HAVE_GETRANDOM_SYSCALL) # include # endif #endif @@ -119,11 +120,20 @@ py_getentropy(unsigned char *buffer, Py_ssize_t size, int fatal) #if defined(HAVE_GETRANDOM) || defined(HAVE_GETRANDOM_SYSCALL) #define PY_GETRANDOM 1 +/* Call getrandom() + - Return 1 on success + - Return 0 if getrandom() syscall is not available (failed with ENOSYS or + EPERM) or if getrandom(GRND_NONBLOCK) failed with EAGAIN (system urandom + not initialized yet) and raise=0. + - Raise an exception (if raise is non-zero) and return -1 on error: + getrandom() failed with EINTR and the Python signal handler raised an + exception, or getrandom() failed with a different error. */ static int py_getrandom(void *buffer, Py_ssize_t size, int raise) { - /* Is getrandom() supported by the running kernel? - * Need Linux kernel 3.17 or newer, or Solaris 11.3 or newer */ + /* Is getrandom() supported by the running kernel? Set to 0 if getrandom() + failed with ENOSYS or EPERM. Need Linux kernel 3.17 or newer, or Solaris + 11.3 or newer */ static int getrandom_works = 1; /* getrandom() on Linux will block if called before the kernel has @@ -132,10 +142,11 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise) * see https://bugs.python.org/issue26839. To avoid this, use the * GRND_NONBLOCK flag. */ const int flags = GRND_NONBLOCK; - int n; + long n; - if (!getrandom_works) + if (!getrandom_works) { return 0; + } while (0 < size) { #ifdef sun @@ -143,7 +154,7 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise) to 1024 bytes */ n = Py_MIN(size, 1024); #else - n = size; + n = Py_MIN(size, LONG_MAX); #endif errno = 0; @@ -171,36 +182,43 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise) #endif if (n < 0) { - if (errno == ENOSYS) { + /* ENOSYS: getrandom() syscall not supported by the kernel (but + * maybe supported by the host which built Python). EPERM: + * getrandom() syscall blocked by SECCOMP or something else. */ + if (errno == ENOSYS || errno == EPERM) { getrandom_works = 0; return 0; } if (errno == EAGAIN) { - /* If we failed with EAGAIN, the entropy pool was - * uninitialized. In this case, we return failure to fall - * back to reading from /dev/urandom. - * - * Note: In this case the data read will not be random so - * should not be used for cryptographic purposes. Retaining - * the existing semantics for practical purposes. */ + /* getrandom(GRND_NONBLOCK) fails with EAGAIN if the system + urandom is not initialiazed yet. In this case, fall back on + reading from /dev/urandom. + + Note: In this case the data read will not be random so + should not be used for cryptographic purposes. Retaining + the existing semantics for practical purposes. */ getrandom_works = 0; return 0; } if (errno == EINTR) { if (PyErr_CheckSignals()) { - if (!raise) + if (!raise) { Py_FatalError("getrandom() interrupted by a signal"); + } return -1; } + /* retry getrandom() */ continue; } - if (raise) + if (raise) { PyErr_SetFromErrno(PyExc_OSError); - else + } + else { Py_FatalError("getrandom() failed"); + } return -1; } @@ -218,7 +236,9 @@ static struct { } urandom_cache = { -1 }; -/* Read size bytes from /dev/urandom into buffer. +/* Read 'size' random bytes from py_getrandom(). Fall back on reading from + /dev/urandom if getrandom() is not available. + Call Py_FatalError() on error. */ static void dev_urandom_noraise(unsigned char *buffer, Py_ssize_t size) @@ -229,35 +249,39 @@ dev_urandom_noraise(unsigned char *buffer, Py_ssize_t size) assert (0 < size); #ifdef PY_GETRANDOM - if (py_getrandom(buffer, size, 0) == 1) + if (py_getrandom(buffer, size, 0) == 1) { return; - /* getrandom() is not supported by the running kernel, fall back - * on reading /dev/urandom */ + } + /* getrandom() failed with ENOSYS or EPERM, + fall back on reading /dev/urandom */ #endif fd = _Py_open_noraise("/dev/urandom", O_RDONLY); - if (fd < 0) + if (fd < 0) { Py_FatalError("Failed to open /dev/urandom"); + } while (0 < size) { do { n = read(fd, buffer, (size_t)size); } while (n < 0 && errno == EINTR); - if (n <= 0) - { - /* stop on error or if read(size) returned 0 */ + + if (n <= 0) { + /* read() failed or returned 0 bytes */ Py_FatalError("Failed to read bytes from /dev/urandom"); break; } buffer += n; - size -= (Py_ssize_t)n; + size -= n; } close(fd); } -/* Read size bytes from /dev/urandom into buffer. - Return 0 on success, raise an exception and return -1 on error. */ +/* Read 'size' random bytes from py_getrandom(). Fall back on reading from + /dev/urandom if getrandom() is not available. + + Return 0 on success. Raise an exception and return -1 on error. */ static int dev_urandom_python(char *buffer, Py_ssize_t size) { @@ -273,12 +297,14 @@ dev_urandom_python(char *buffer, Py_ssize_t size) #ifdef PY_GETRANDOM res = py_getrandom(buffer, size, 1); - if (res < 0) + if (res < 0) { return -1; - if (res == 1) + } + if (res == 1) { return 0; - /* getrandom() is not supported by the running kernel, fall back - * on reading /dev/urandom */ + } + /* getrandom() failed with ENOSYS or EPERM, + fall back on reading /dev/urandom */ #endif if (urandom_cache.fd >= 0) { @@ -325,8 +351,9 @@ dev_urandom_python(char *buffer, Py_ssize_t size) do { n = _Py_read(fd, buffer, (size_t)size); - if (n == -1) + if (n == -1) { return -1; + } if (n == 0) { PyErr_Format(PyExc_RuntimeError, "Failed to read %zi bytes from /dev/urandom", diff --git a/Python/symtable.c b/Python/symtable.c index 1591a20..adca2da 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -1472,7 +1472,7 @@ symtable_visit_expr(struct symtable *st, expr_ty e) /* Special-case super: it counts as a use of __class__ */ if (e->v.Name.ctx == Load && st->st_cur->ste_type == FunctionBlock && - !PyUnicode_CompareWithASCIIString(e->v.Name.id, "super")) { + _PyUnicode_EqualToASCIIString(e->v.Name.id, "super")) { if (!GET_IDENTIFIER(__class__) || !symtable_add_def(st, __class__, USE)) VISIT_QUIT(st, 0); @@ -1621,7 +1621,7 @@ symtable_visit_alias(struct symtable *st, alias_ty a) store_name = name; Py_INCREF(store_name); } - if (PyUnicode_CompareWithASCIIString(name, "*")) { + if (!_PyUnicode_EqualToASCIIString(name, "*")) { int r = symtable_add_def(st, store_name, DEF_IMPORT); Py_DECREF(store_name); return r; diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 8d7e05a..1dc7d7c 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -825,6 +825,7 @@ static PyStructSequence_Field windows_version_fields[] = { {"service_pack_minor", "Service Pack minor version number"}, {"suite_mask", "Bit mask identifying available product suites"}, {"product_type", "System product type"}, + {"_platform_version", "Diagnostic version number"}, {0} }; @@ -849,6 +850,12 @@ sys_getwindowsversion(PyObject *self) PyObject *version; int pos = 0; OSVERSIONINFOEX ver; + DWORD realMajor, realMinor, realBuild; + HANDLE hKernel32; + wchar_t kernel32_path[MAX_PATH]; + LPVOID verblock; + DWORD verblock_size; + ver.dwOSVersionInfoSize = sizeof(ver); if (!GetVersionEx((OSVERSIONINFO*) &ver)) return PyErr_SetFromWindowsErr(0); @@ -867,10 +874,40 @@ sys_getwindowsversion(PyObject *self) PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wSuiteMask)); PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wProductType)); + realMajor = ver.dwMajorVersion; + realMinor = ver.dwMinorVersion; + realBuild = ver.dwBuildNumber; + + // GetVersion will lie if we are running in a compatibility mode. + // We need to read the version info from a system file resource + // to accurately identify the OS version. If we fail for any reason, + // just return whatever GetVersion said. + hKernel32 = GetModuleHandleW(L"kernel32.dll"); + if (hKernel32 && GetModuleFileNameW(hKernel32, kernel32_path, MAX_PATH) && + (verblock_size = GetFileVersionInfoSizeW(kernel32_path, NULL)) && + (verblock = PyMem_RawMalloc(verblock_size))) { + VS_FIXEDFILEINFO *ffi; + UINT ffi_len; + + if (GetFileVersionInfoW(kernel32_path, 0, verblock_size, verblock) && + VerQueryValueW(verblock, L"", (LPVOID)&ffi, &ffi_len)) { + realMajor = HIWORD(ffi->dwProductVersionMS); + realMinor = LOWORD(ffi->dwProductVersionMS); + realBuild = HIWORD(ffi->dwProductVersionLS); + } + PyMem_RawFree(verblock); + } + PyStructSequence_SET_ITEM(version, pos++, PyTuple_Pack(3, + PyLong_FromLong(realMajor), + PyLong_FromLong(realMinor), + PyLong_FromLong(realBuild) + )); + if (PyErr_Occurred()) { Py_DECREF(version); return NULL; } + return version; } @@ -1582,7 +1619,7 @@ static PyStructSequence_Field version_info_fields[] = { {"major", "Major release number"}, {"minor", "Minor release number"}, {"micro", "Patch release number"}, - {"releaselevel", "'alpha', 'beta', 'candidate', or 'release'"}, + {"releaselevel", "'alpha', 'beta', 'candidate', or 'final'"}, {"serial", "Serial release number"}, {0} }; diff --git a/Python/traceback.c b/Python/traceback.c index 941d1cb..9e7fe3b 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -132,47 +132,53 @@ newtracebackobject(PyTracebackObject *next, PyFrameObject *frame) int PyTraceBack_Here(PyFrameObject *frame) { - PyThreadState *tstate = PyThreadState_GET(); - PyTracebackObject *oldtb = (PyTracebackObject *) tstate->curexc_traceback; - PyTracebackObject *tb = newtracebackobject(oldtb, frame); - if (tb == NULL) + PyObject *exc, *val, *tb, *newtb; + PyErr_Fetch(&exc, &val, &tb); + newtb = (PyObject *)newtracebackobject((PyTracebackObject *)tb, frame); + if (newtb == NULL) { + _PyErr_ChainExceptions(exc, val, tb); return -1; - tstate->curexc_traceback = (PyObject *)tb; - Py_XDECREF(oldtb); + } + PyErr_Restore(exc, val, newtb); + Py_XDECREF(tb); return 0; } /* Insert a frame into the traceback for (funcname, filename, lineno). */ void _PyTraceback_Add(const char *funcname, const char *filename, int lineno) { - PyObject *globals = NULL; - PyCodeObject *code = NULL; - PyFrameObject *frame = NULL; - PyObject *exception, *value, *tb; + PyObject *globals; + PyCodeObject *code; + PyFrameObject *frame; + PyObject *exc, *val, *tb; /* Save and clear the current exception. Python functions must not be called with an exception set. Calling Python functions happens when the codec of the filesystem encoding is implemented in pure Python. */ - PyErr_Fetch(&exception, &value, &tb); + PyErr_Fetch(&exc, &val, &tb); globals = PyDict_New(); if (!globals) - goto done; + goto error; code = PyCode_NewEmpty(filename, funcname, lineno); - if (!code) - goto done; + if (!code) { + Py_DECREF(globals); + goto error; + } frame = PyFrame_New(PyThreadState_Get(), code, globals, NULL); + Py_DECREF(globals); + Py_DECREF(code); if (!frame) - goto done; + goto error; frame->f_lineno = lineno; - PyErr_Restore(exception, value, tb); + PyErr_Restore(exc, val, tb); PyTraceBack_Here(frame); + Py_DECREF(frame); + return; -done: - Py_XDECREF(globals); - Py_XDECREF(code); - Py_XDECREF(frame); +error: + _PyErr_ChainExceptions(exc, val, tb); } static PyObject * diff --git a/README b/README index 9a07bfd..de3a091 100644 --- a/README +++ b/README @@ -1,8 +1,9 @@ -This is Python version 3.5.2 +This is Python version 3.5.3 ============================ Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, -2012, 2013, 2014, 2015, 2016 Python Software Foundation. All rights reserved. +2012, 2013, 2014, 2015, 2016, 2017 Python Software Foundation. All rights +reserved. Python 3.x is a new version of the language, which is incompatible with the 2.x line of releases. The language is mostly the same, but many details, @@ -46,16 +47,17 @@ For example: (This will fail if you *also* built at the top-level directory. You should do a "make clean" at the toplevel first.) -If you need an optimized version of Python, you type "make profile-opt" in the -top level directory. This will rebuild the interpreter executable using Profile -Guided Optimization (PGO). For more details, see the section bellow. +To get an optimized build of Python, "configure --enable-optimizations" before +you run make. This sets the default make targets up to enable Profile Guided +Optimization (PGO) and may be used to auto-enable Link Time Optimization (LTO) +on some platforms. For more details, see the sections bellow. Profile Guided Optimization --------------------------- PGO takes advantage of recent versions of the GCC or Clang compilers. -If ran, the "profile-opt" rule will do several steps. +If ran, "make profile-opt" will do several steps. First, the entire Python directory is cleaned of temporary files that may have resulted in a previous compilation. @@ -68,13 +70,22 @@ workloads, as it has profiling instructions embedded inside. After this instrumented version of the interpreter is built, the Makefile will automatically run a training workload. This is necessary in order to profile the interpreter execution. Note also that any output, both stdout -and stderr, that may appear at this step is supressed. +and stderr, that may appear at this step is suppressed. Finally, the last step is to rebuild the interpreter, using the information collected in the previous one. The end result will be a Python binary that is optimized and suitable for distribution or production installation. +Link Time Optimization +---------------------- + +Enabled via configure's --with-lto flag. LTO takes advantages of recent +compiler toolchains ability to optimize across the otherwise arbitrary .o file +boundary when building final executables or shared libraries for additional +performance gains. + + What's New ---------- diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 1d851da..f615ed9 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -2793,7 +2793,7 @@ def correct_name_for_self(f): if f.kind in (CALLABLE, METHOD_INIT): if f.cls: return "PyObject *", "self" - return "PyModuleDef *", "module" + return "PyObject *", "module" if f.kind == STATIC_METHOD: return "void *", "null" if f.kind in (CLASS_METHOD, METHOD_NEW): diff --git a/Tools/clinic/clinic_test.py b/Tools/clinic/clinic_test.py index ac0640c..a9479a6 100644 --- a/Tools/clinic/clinic_test.py +++ b/Tools/clinic/clinic_test.py @@ -90,7 +90,7 @@ class ClinicWholeFileTest(TestCase): # the "end line" for the block if it # didn't end in "\n" (as in, the last) # byte of the file was '/'. - # so it woudl spit out an end line for you. + # so it would spit out an end line for you. # and since you really already had one, # the last line of the block got corrupted. c = clinic.Clinic(clinic.CLanguage(None)) diff --git a/Tools/demo/redemo.py b/Tools/demo/redemo.py index b10b030..8335d4c 100755 --- a/Tools/demo/redemo.py +++ b/Tools/demo/redemo.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -"""Basic regular expression demostration facility (Perl style syntax).""" +"""Basic regular expression demonstration facility (Perl style syntax).""" from tkinter import * import re diff --git a/Tools/freeze/freeze.py b/Tools/freeze/freeze.py index c075807..44edd57 100755 --- a/Tools/freeze/freeze.py +++ b/Tools/freeze/freeze.py @@ -159,7 +159,7 @@ def main(): except getopt.error as msg: usage('getopt error: ' + str(msg)) - # proces option arguments + # process option arguments for o, a in opts: if o == '-h': print(__doc__) diff --git a/Tools/freeze/winmakemakefile.py b/Tools/freeze/winmakemakefile.py index 3843388..390d8ac 100644 --- a/Tools/freeze/winmakemakefile.py +++ b/Tools/freeze/winmakemakefile.py @@ -144,5 +144,5 @@ def realwork(vars, moddefns, target): print("<<") print() print("clean:") - print("\t-rm -f *.obj") - print("\t-rm -f $(target).exe") + print("\t-del /f *.obj") + print("\t-del /f $(target).exe") diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py index 75f1ccb..ed515c0 100755 --- a/Tools/gdb/libpython.py +++ b/Tools/gdb/libpython.py @@ -1527,7 +1527,11 @@ class Frame(object): def get_selected_python_frame(cls): '''Try to obtain the Frame for the python-related code in the selected frame, or None''' - frame = cls.get_selected_frame() + try: + frame = cls.get_selected_frame() + except gdb.error: + # No frame: Python didn't start yet + return None while frame: if frame.is_python_frame(): @@ -1668,6 +1672,10 @@ PyList() def move_in_stack(move_up): '''Move up or down the stack (for the py-up/py-down command)''' frame = Frame.get_selected_python_frame() + if not frame: + print('Unable to locate python frame') + return + while frame: if move_up: iter_frame = frame.older() @@ -1730,6 +1738,10 @@ class PyBacktraceFull(gdb.Command): def invoke(self, args, from_tty): frame = Frame.get_selected_python_frame() + if not frame: + print('Unable to locate python frame') + return + while frame: if frame.is_python_frame(): frame.print_summary() @@ -1747,8 +1759,12 @@ class PyBacktrace(gdb.Command): def invoke(self, args, from_tty): - sys.stdout.write('Traceback (most recent call first):\n') frame = Frame.get_selected_python_frame() + if not frame: + print('Unable to locate python frame') + return + + sys.stdout.write('Traceback (most recent call first):\n') while frame: if frame.is_python_frame(): frame.print_traceback() diff --git a/Tools/i18n/pygettext.py b/Tools/i18n/pygettext.py index 3c6c14c..da42438 100755 --- a/Tools/i18n/pygettext.py +++ b/Tools/i18n/pygettext.py @@ -475,7 +475,7 @@ class TokenEater: '# File: %(filename)s, line: %(lineno)d') % d, file=fp) elif options.locationstyle == options.GNU: # fit as many locations on one line, as long as the - # resulting line length doesn't exceeds 'options.width' + # resulting line length doesn't exceed 'options.width' locline = '#:' for filename, lineno in v: d = {'filename': filename, 'lineno': lineno} diff --git a/Tools/importbench/importbench.py b/Tools/importbench/importbench.py index 635dd56..e2ef758 100644 --- a/Tools/importbench/importbench.py +++ b/Tools/importbench/importbench.py @@ -5,7 +5,6 @@ thus has no external changes made to import-related attributes in sys. """ from test.test_importlib import util -from test.test_importlib.source import util as source_util import decimal import imp import importlib @@ -65,11 +64,11 @@ def source_wo_bytecode(seconds, repeat): try: name = '__importlib_test_benchmark__' # Clears out sys.modules and puts an entry at the front of sys.path. - with source_util.create_modules(name) as mapping: + with util.create_modules(name) as mapping: assert not os.path.exists(imp.cache_from_source(mapping[name])) sys.meta_path.append(importlib.machinery.PathFinder) loader = (importlib.machinery.SourceFileLoader, - importlib.machinery.SOURCE_SUFFIXES, True) + importlib.machinery.SOURCE_SUFFIXES) sys.path_hooks.append(importlib.machinery.FileFinder.path_hook(loader)) yield from bench(name, lambda: sys.modules.pop(name), repeat=repeat, seconds=seconds) @@ -102,10 +101,10 @@ def source_writing_bytecode(seconds, repeat): """Source writing bytecode: small""" assert not sys.dont_write_bytecode name = '__importlib_test_benchmark__' - with source_util.create_modules(name) as mapping: + with util.create_modules(name) as mapping: sys.meta_path.append(importlib.machinery.PathFinder) loader = (importlib.machinery.SourceFileLoader, - importlib.machinery.SOURCE_SUFFIXES, True) + importlib.machinery.SOURCE_SUFFIXES) sys.path_hooks.append(importlib.machinery.FileFinder.path_hook(loader)) def cleanup(): sys.modules.pop(name) @@ -136,10 +135,10 @@ decimal_writing_bytecode = _writing_bytecode(decimal) def source_using_bytecode(seconds, repeat): """Source w/ bytecode: small""" name = '__importlib_test_benchmark__' - with source_util.create_modules(name) as mapping: + with util.create_modules(name) as mapping: sys.meta_path.append(importlib.machinery.PathFinder) loader = (importlib.machinery.SourceFileLoader, - importlib.machinery.SOURCE_SUFFIXES, True) + importlib.machinery.SOURCE_SUFFIXES) sys.path_hooks.append(importlib.machinery.FileFinder.path_hook(loader)) py_compile.compile(mapping[name]) assert os.path.exists(imp.cache_from_source(mapping[name])) diff --git a/Tools/msi/build.bat b/Tools/msi/build.bat index a61ace8..69f00c0 100644 --- a/Tools/msi/build.bat +++ b/Tools/msi/build.bat @@ -43,6 +43,9 @@ if defined BUILDDOC ( if errorlevel 1 goto :eof ) +rem Build the launcher MSI separately +msbuild "%D%launcher\launcher.wixproj" /p:Platform=x86 + set BUILD_CMD="%D%bundle\snapshot.wixproj" if defined BUILDTEST ( set BUILD_CMD=%BUILD_CMD% /p:UseTestMarker=true diff --git a/Tools/msi/buildrelease.bat b/Tools/msi/buildrelease.bat index 2eae07a..f296e61 100644 --- a/Tools/msi/buildrelease.bat +++ b/Tools/msi/buildrelease.bat @@ -36,6 +36,8 @@ set BUILDX64= set TARGET=Rebuild set TESTTARGETDIR= set PGO= +set BUILDNUGET=1 +set BUILDZIP=1 :CheckOpts @@ -55,11 +57,16 @@ if "%1" EQU "--build" (set TARGET=Build) && shift && goto CheckOpts if "%1" EQU "-x86" (set BUILDX86=1) && shift && goto CheckOpts if "%1" EQU "-x64" (set BUILDX64=1) && shift && goto CheckOpts if "%1" EQU "--pgo" (set PGO=%~2) && shift && shift && goto CheckOpts +if "%1" EQU "--skip-nuget" (set BUILDNUGET=) && shift && goto CheckOpts +if "%1" EQU "--skip-zip" (set BUILDZIP=) && shift && goto CheckOpts if "%1" NEQ "" echo Invalid option: "%1" && exit /B 1 if not defined BUILDX86 if not defined BUILDX64 (set BUILDX86=1) && (set BUILDX64=1) +if not exist "%HG%" where hg > "%TEMP%\hg.loc" 2> nul && set /P HG= < "%TEMP%\hg.loc" & del "%TEMP%\hg.loc" +if not exist "%HG%" echo Cannot find Mercurial on PATH && exit /B 1 + call "%D%get_externals.bat" :builddoc @@ -73,8 +80,6 @@ call "%D%..\..\doc\make.bat" htmlhelp if errorlevel 1 goto :eof :skipdoc -where hg /q || echo Cannot find Mercurial on PATH && exit /B 1 - where dlltool /q && goto skipdlltoolsearch set _DLLTOOL_PATH= where /R "%EXTERNALS%\" dlltool > "%TEMP%\dlltool.loc" 2> nul && set /P _DLLTOOL_PATH= < "%TEMP%\dlltool.loc" & del "%TEMP%\dlltool.loc" @@ -174,28 +179,39 @@ if not "%SKIPBUILD%" EQU "1" ( @echo off ) -set BUILDOPTS=/p:Platform=%1 /p:BuildForRelease=true /p:DownloadUrl=%DOWNLOAD_URL% /p:DownloadUrlBase=%DOWNLOAD_URL_BASE% /p:ReleaseUri=%RELEASE_URI% +set BUILDOPTS=/p:BuildForRelease=true /p:DownloadUrl=%DOWNLOAD_URL% /p:DownloadUrlBase=%DOWNLOAD_URL_BASE% /p:ReleaseUri=%RELEASE_URI% if "%PGO%" NEQ "" set BUILDOPTS=%BUILDOPTS% /p:PGOBuildPath=%BUILD% -msbuild "%D%bundle\releaselocal.wixproj" /t:Rebuild %BUILDOPTS% %CERTOPTS% /p:RebuildAll=true +msbuild "%D%launcher\launcher.wixproj" /p:Platform=x86 %CERTOPTS% /p:ReleaseUri=%RELEASE_URI% +msbuild "%D%bundle\releaselocal.wixproj" /t:Rebuild /p:Platform=%1 %BUILDOPTS% %CERTOPTS% /p:RebuildAll=true if errorlevel 1 exit /B -msbuild "%D%bundle\releaseweb.wixproj" /t:Rebuild %BUILDOPTS% %CERTOPTS% /p:RebuildAll=false +msbuild "%D%bundle\releaseweb.wixproj" /t:Rebuild /p:Platform=%1 %BUILDOPTS% %CERTOPTS% /p:RebuildAll=false if errorlevel 1 exit /B -msbuild "%D%make_zip.proj" /t:Build %BUILDOPTS% %CERTOPTS% +if defined BUILDZIP ( + msbuild "%D%make_zip.proj" /t:Build %BUILDOPTS% %CERTOPTS% /p:OutputPath="%BUILD%en-us" + if errorlevel 1 exit /B +) + +if defined BUILDNUGET ( + msbuild "%D%..\nuget\make_pkg.proj" /t:Build /p:Configuration=Release /p:Platform=%1 /p:OutputPath="%BUILD%en-us" + if errorlevel 1 exit /B +) if not "%OUTDIR%" EQU "" ( mkdir "%OUTDIR%\%OUTDIR_PLAT%" - copy /Y "%BUILD%en-us\*.cab" "%OUTDIR%\%OUTDIR_PLAT%" - copy /Y "%BUILD%en-us\*.exe" "%OUTDIR%\%OUTDIR_PLAT%" - copy /Y "%BUILD%en-us\*.msi" "%OUTDIR%\%OUTDIR_PLAT%" - copy /Y "%BUILD%en-us\*.msu" "%OUTDIR%\%OUTDIR_PLAT%" + mkdir "%OUTDIR%\%OUTDIR_PLAT%\binaries" + mkdir "%OUTDIR%\%OUTDIR_PLAT%\symbols" + robocopy "%BUILD%en-us" "%OUTDIR%\%OUTDIR_PLAT%" /XF "*.wixpdb" + robocopy "%BUILD%\" "%OUTDIR%\%OUTDIR_PLAT%\binaries" *.exe *.dll *.pyd /XF "_test*" /XF "*_d.*" /XF "_freeze*" /XF "tcl*" /XF "tk*" /XF "*_test.*" + robocopy "%BUILD%\" "%OUTDIR%\%OUTDIR_PLAT%\symbols" *.pdb /XF "_test*" /XF "*_d.*" /XF "_freeze*" /XF "tcl*" /XF "tk*" /XF "*_test.*" ) exit /B 0 :Help -echo buildrelease.bat [--out DIR] [-x86] [-x64] [--certificate CERTNAME] [--build] [--skip-build] -echo [--pgo COMMAND] [--skip-doc] [--download DOWNLOAD URL] [--test TARGETDIR] +echo buildrelease.bat [--out DIR] [-x86] [-x64] [--certificate CERTNAME] [--build] [--pgo COMMAND] +echo [--skip-build] [--skip-doc] [--skip-nuget] [--skip-zip] +echo [--download DOWNLOAD URL] [--test TARGETDIR] echo [-h] echo. echo --out (-o) Specify an additional output directory for installers @@ -204,6 +220,8 @@ echo -x64 Build x64 installers echo --build (-b) Incrementally build Python rather than rebuilding echo --skip-build (-B) Do not build Python (just do the installers) echo --skip-doc (-D) Do not build documentation +echo --skip-nuget Do not build Nuget packages +echo --skip-zip Do not build embeddable package echo --pgo Build x64 installers using PGO echo --download Specify the full download URL for MSIs echo --test Specify the test directory to run the installer tests diff --git a/Tools/msi/bundle/Default.wxl b/Tools/msi/bundle/Default.wxl index 697066b..ed79246 100644 --- a/Tools/msi/bundle/Default.wxl +++ b/Tools/msi/bundle/Default.wxl @@ -132,4 +132,14 @@ Please <a href="https://www.bing.com/search?q=how%20to%20install%20windows%20 Windows Vista or later is required to install and use [WixBundleName]. Visit <a href="https://www.python.org/">python.org</a> to download Python 3.4. + + Windows Server 2008 R2 Service Pack 1 and all applicable updates are required to install [WixBundleName]. + +Please <a href="https://www.bing.com/search?q=how%20to%20install%20windows%20server%202008%20r2%20service%20pack%201">update your machine</a> and then restart the installation. + Windows Server 2008 Service Pack 2 and all applicable updates are required to install [WixBundleName]. + +Please <a href="https://www.bing.com/search?q=how%20to%20install%20windows%20server%202008%20service%20pack%202">update your machine</a> and then restart the installation. + Windows Server 2008 SP2 or later is required to install and use [WixBundleName]. + +Visit <a href="https://www.python.org/">python.org</a> to download Python 3.4. diff --git a/Tools/msi/bundle/bootstrap/PythonBootstrapperApplication.cpp b/Tools/msi/bundle/bootstrap/PythonBootstrapperApplication.cpp index 1462d7b..6a67ee2 100644 --- a/Tools/msi/bundle/bootstrap/PythonBootstrapperApplication.cpp +++ b/Tools/msi/bundle/bootstrap/PythonBootstrapperApplication.cpp @@ -327,6 +327,9 @@ class PythonBootstrapperApplication : public CBalBaseBootstrapperApplication { case ID_CUSTOM_INSTALL_BUTTON: SavePageSettings(); + hr = EnsureTargetDir(); + ExitOnFailure(hr, L"Failed to set TargetDir"); + hr = BalGetStringVariable(L"TargetDir", &targetDir); if (SUCCEEDED(hr)) { // TODO: Check whether directory exists and contains another installation @@ -3032,24 +3035,46 @@ private: void ValidateOperatingSystem() { LOC_STRING *pLocString = nullptr; - if (IsWindows7SP1OrGreater()) { - BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Target OS is Windows 7 SP1 or later"); - return; - } else if (IsWindows7OrGreater()) { - BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows 7 RTM"); - BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Service Pack 1 is required to continue installation"); - LocGetString(_wixLoc, L"#(loc.FailureWin7MissingSP1)", &pLocString); - } else if (IsWindowsVistaSP2OrGreater()) { - BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Target OS is Windows Vista SP2"); - return; - } else if (IsWindowsVistaOrGreater()) { - BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows Vista RTM or SP1"); - BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Service Pack 2 is required to continue installation"); - LocGetString(_wixLoc, L"#(loc.FailureVistaMissingSP2)", &pLocString); - } else { - BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows XP or earlier"); - BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Windows Vista SP2 or later is required to continue installation"); - LocGetString(_wixLoc, L"#(loc.FailureXPOrEarlier)", &pLocString); + if (IsWindowsServer()) { + if (IsWindowsVersionOrGreater(6, 1, 1)) { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Target OS is Windows Server 2008 R2 or later"); + return; + } else if (IsWindowsVersionOrGreater(6, 1, 0)) { + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows Server 2008 R2"); + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Service Pack 1 is required to continue installation"); + LocGetString(_wixLoc, L"#(loc.FailureWS2K8R2MissingSP1)", &pLocString); + } else if (IsWindowsVersionOrGreater(6, 0, 2)) { + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Target OS is Windows Server 2008 SP2 or later"); + return; + } else if (IsWindowsVersionOrGreater(6, 0, 0)) { + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows Server 2008"); + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Service Pack 2 is required to continue installation"); + LocGetString(_wixLoc, L"#(loc.FailureWS2K8MissingSP2)", &pLocString); + } else { + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows Server 2003 or earlier"); + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Windows Server 2008 SP2 or later is required to continue installation"); + LocGetString(_wixLoc, L"#(loc.FailureWS2K3OrEarlier)", &pLocString); + } + } else { + if (IsWindows7SP1OrGreater()) { + BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Target OS is Windows 7 SP1 or later"); + return; + } else if (IsWindows7OrGreater()) { + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows 7 RTM"); + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Service Pack 1 is required to continue installation"); + LocGetString(_wixLoc, L"#(loc.FailureWin7MissingSP1)", &pLocString); + } else if (IsWindowsVistaSP2OrGreater()) { + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Target OS is Windows Vista SP2"); + return; + } else if (IsWindowsVistaOrGreater()) { + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows Vista RTM or SP1"); + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Service Pack 2 is required to continue installation"); + LocGetString(_wixLoc, L"#(loc.FailureVistaMissingSP2)", &pLocString); + } else { + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows XP or earlier"); + BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Windows Vista SP2 or later is required to continue installation"); + LocGetString(_wixLoc, L"#(loc.FailureXPOrEarlier)", &pLocString); + } } if (pLocString && pLocString->wzText) { diff --git a/Tools/msi/bundle/bootstrap/pythonba.vcxproj b/Tools/msi/bundle/bootstrap/pythonba.vcxproj index be12957..bcd3951 100644 --- a/Tools/msi/bundle/bootstrap/pythonba.vcxproj +++ b/Tools/msi/bundle/bootstrap/pythonba.vcxproj @@ -31,7 +31,7 @@ DynamicLibrary Unicode - $(PySourcePath)PCBuild\obj\$(Configuration)_$(Platform)_Setup\Bootstrap\ + $(Py_IntDir)\$(Configuration)_$(Platform)_Setup\Bootstrap\ $(IntDir) diff --git a/Tools/msi/bundle/bundle.targets b/Tools/msi/bundle/bundle.targets index aeeff3b..e0dae21 100644 --- a/Tools/msi/bundle/bundle.targets +++ b/Tools/msi/bundle/bundle.targets @@ -87,16 +87,6 @@ - - - - - diff --git a/Tools/msi/bundle/bundle.wxs b/Tools/msi/bundle/bundle.wxs index 38307e0..eda0884 100644 --- a/Tools/msi/bundle/bundle.wxs +++ b/Tools/msi/bundle/bundle.wxs @@ -1,6 +1,7 @@  + xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" + xmlns:dep="http://schemas.microsoft.com/wix/DependencyExtension"> + Compressed="no" + dep:ProviderKey="CPython-$(var.MajorVersionNumber).$(var.MinorVersionNumber)$(var.PyArchExt)$(var.PyTestExt)"> diff --git a/Tools/msi/bundle/packagegroups/launcher.wxs b/Tools/msi/bundle/packagegroups/launcher.wxs index 4444f45..7dae8ca 100644 --- a/Tools/msi/bundle/packagegroups/launcher.wxs +++ b/Tools/msi/bundle/packagegroups/launcher.wxs @@ -4,7 +4,7 @@ + + + + 1 + + @@ -20,10 +26,12 @@ + WorkingDirectory="InstallDirectory" + Show="maximized" /> diff --git a/Tools/msi/launcher/launcher.wixproj b/Tools/msi/launcher/launcher.wixproj index 67fb025..01a9dcb 100644 --- a/Tools/msi/launcher/launcher.wixproj +++ b/Tools/msi/launcher/launcher.wixproj @@ -7,6 +7,7 @@ Package UpgradeCode=1B68A0EC-4DD3-5134-840E-73854B0863F1;$(DefineConstants) true + ICE80 @@ -18,5 +19,18 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tools/msi/launcher/launcher.wxs b/Tools/msi/launcher/launcher.wxs index 80e838a..ebd875c 100644 --- a/Tools/msi/launcher/launcher.wxs +++ b/Tools/msi/launcher/launcher.wxs @@ -28,7 +28,7 @@ UPGRADE or REMOVE_350_LAUNCHER - + diff --git a/Tools/msi/launcher/launcher_files.wxs b/Tools/msi/launcher/launcher_files.wxs index 589dee5..5b79d76 100644 --- a/Tools/msi/launcher/launcher_files.wxs +++ b/Tools/msi/launcher/launcher_files.wxs @@ -20,6 +20,19 @@ ALLUSERS=1 + + + VersionNT64 + + + + + + NOT VersionNT64 + + + + diff --git a/Tools/msi/launcher/launcher_reg.wxs b/Tools/msi/launcher/launcher_reg.wxs index bb42255..981961a 100644 --- a/Tools/msi/launcher/launcher_reg.wxs +++ b/Tools/msi/launcher/launcher_reg.wxs @@ -10,14 +10,14 @@ - + - + @@ -25,21 +25,21 @@ - + - + - + diff --git a/Tools/msi/lib/lib_files.wxs b/Tools/msi/lib/lib_files.wxs index fa79a8d..a992784 100644 --- a/Tools/msi/lib/lib_files.wxs +++ b/Tools/msi/lib/lib_files.wxs @@ -22,7 +22,6 @@ - SYMBOLS=1 diff --git a/Tools/msi/make_zip.proj b/Tools/msi/make_zip.proj index d2e031f..1af6dd2 100644 --- a/Tools/msi/make_zip.proj +++ b/Tools/msi/make_zip.proj @@ -13,10 +13,10 @@ false python-$(PythonVersion)-embed-$(ArchName) .zip - $(OutputPath)\en-us\$(TargetName)$(TargetExt) + $(OutputPath)\$(TargetName)$(TargetExt) rmdir /q/s "$(IntermediateOutputPath)\zip_$(ArchName)" "$(PythonExe)" "$(MSBuildThisFileDirectory)\make_zip.py" - $(Arguments) -e -o "$(TargetPath)" -t "$(IntermediateOutputPath)\zip_$(ArchName)" -a $(ArchName) + $(Arguments) -e -o "$(TargetPath)" -t "$(IntermediateOutputPath)\zip_$(ArchName)" -b "$(BuildPath.TrimEnd('\'))" set DOC_FILENAME=python$(PythonVersion).chm set VCREDIST_PATH=$(VS140COMNTOOLS)\..\..\VC\redist\$(Platform)\Microsoft.VC140.CRT diff --git a/Tools/msi/make_zip.py b/Tools/msi/make_zip.py index 753ba0f..9db96cb 100644 --- a/Tools/msi/make_zip.py +++ b/Tools/msi/make_zip.py @@ -7,14 +7,25 @@ import stat import os import tempfile +from itertools import chain from pathlib import Path from zipfile import ZipFile, ZIP_DEFLATED import subprocess TKTCL_RE = re.compile(r'^(_?tk|tcl).+\.(pyd|dll)', re.IGNORECASE) -DEBUG_RE = re.compile(r'_d\.(pyd|dll|exe)$', re.IGNORECASE) +DEBUG_RE = re.compile(r'_d\.(pyd|dll|exe|pdb|lib)$', re.IGNORECASE) PYTHON_DLL_RE = re.compile(r'python\d\d?\.dll$', re.IGNORECASE) +DEBUG_FILES = { + '_ctypes_test', + '_testbuffer', + '_testcapi', + '_testimportmultiple', + '_testmultiphase', + 'xxlimited', + 'python3_dstub', +} + EXCLUDE_FROM_LIBRARY = { '__pycache__', 'ensurepip', @@ -30,6 +41,12 @@ EXCLUDE_FILE_FROM_LIBRARY = { 'bdist_wininst.py', } +EXCLUDE_FILE_FROM_LIBS = { + 'ssleay', + 'libeay', + 'python3stub', +} + def is_not_debug(p): if DEBUG_RE.search(p.name): return False @@ -37,14 +54,7 @@ def is_not_debug(p): if TKTCL_RE.search(p.name): return False - return p.name.lower() not in { - '_ctypes_test.pyd', - '_testbuffer.pyd', - '_testcapi.pyd', - '_testimportmultiple.pyd', - '_testmultiphase.pyd', - 'xxlimited.pyd', - } + return p.stem.lower() not in DEBUG_FILES def is_not_debug_or_python(p): return is_not_debug(p) and not PYTHON_DLL_RE.search(p.name) @@ -68,6 +78,12 @@ def include_in_lib(p): suffix = p.suffix.lower() return suffix not in {'.pyc', '.pyo', '.exe'} +def include_in_libs(p): + if not is_not_debug(p): + return False + + return p.stem.lower() not in EXCLUDE_FILE_FROM_LIBS + def include_in_tools(p): if p.is_dir() and p.name.lower() in {'scripts', 'i18n', 'pynche', 'demo', 'parser'}: return True @@ -75,20 +91,23 @@ def include_in_tools(p): return p.suffix.lower() in {'.py', '.pyw', '.txt'} FULL_LAYOUT = [ - ('/', 'PCBuild/$arch', 'python*.exe', is_not_debug), - ('/', 'PCBuild/$arch', 'python*.dll', is_not_debug), - ('DLLs/', 'PCBuild/$arch', '*.pyd', is_not_debug), - ('DLLs/', 'PCBuild/$arch', '*.dll', is_not_debug), + ('/', '$build', 'python.exe', is_not_debug), + ('/', '$build', 'pythonw.exe', is_not_debug), + ('/', '$build', 'python{0.major}.dll'.format(sys.version_info), is_not_debug), + ('/', '$build', 'python{0.major}{0.minor}.dll'.format(sys.version_info), is_not_debug), + ('DLLs/', '$build', '*.pyd', is_not_debug), + ('DLLs/', '$build', '*.dll', is_not_debug_or_python), ('include/', 'include', '*.h', None), ('include/', 'PC', 'pyconfig.h', None), ('Lib/', 'Lib', '**/*', include_in_lib), + ('libs/', '$build', '*.lib', include_in_libs), ('Tools/', 'Tools', '**/*', include_in_tools), ] EMBED_LAYOUT = [ - ('/', 'PCBuild/$arch', 'python*.exe', is_not_debug), - ('/', 'PCBuild/$arch', '*.pyd', is_not_debug), - ('/', 'PCBuild/$arch', '*.dll', is_not_debug), + ('/', '$build', 'python*.exe', is_not_debug), + ('/', '$build', '*.pyd', is_not_debug), + ('/', '$build', '*.dll', is_not_debug), ('python{0.major}{0.minor}.zip'.format(sys.version_info), 'Lib', '**/*', include_in_lib), ] @@ -150,18 +169,18 @@ def rglob(root, pattern, condition): def main(): parser = argparse.ArgumentParser() parser.add_argument('-s', '--source', metavar='dir', help='The directory containing the repository root', type=Path) - parser.add_argument('-o', '--out', metavar='file', help='The name of the output self-extracting archive', type=Path, required=True) + parser.add_argument('-o', '--out', metavar='file', help='The name of the output archive', type=Path, default=None) parser.add_argument('-t', '--temp', metavar='dir', help='A directory to temporarily extract files into', type=Path, default=None) parser.add_argument('-e', '--embed', help='Create an embedding layout', action='store_true', default=False) - parser.add_argument('-a', '--arch', help='Specify the architecture to use (win32/amd64)', type=str, default="win32") + parser.add_argument('-b', '--build', help='Specify the build directory', type=Path) ns = parser.parse_args() - source = ns.source or (Path(__file__).parent.parent.parent) + source = ns.source or (Path(__file__).resolve().parent.parent.parent) out = ns.out - arch = ns.arch + build = ns.build assert isinstance(source, Path) - assert isinstance(out, Path) - assert isinstance(arch, str) + assert not out or isinstance(out, Path) + assert isinstance(build, Path) if ns.temp: temp = ns.temp @@ -170,10 +189,11 @@ def main(): temp = Path(tempfile.mkdtemp()) delete_temp = True - try: - out.parent.mkdir(parents=True) - except FileExistsError: - pass + if out: + try: + out.parent.mkdir(parents=True) + except FileExistsError: + pass try: temp.mkdir(parents=True) except FileExistsError: @@ -183,15 +203,26 @@ def main(): try: for t, s, p, c in layout: - s = source / s.replace("$arch", arch) - copied = copy_to_layout(temp / t.rstrip('/'), rglob(s, p, c)) + if s == '$build': + fs = build + else: + fs = source / s + files = rglob(fs, p, c) + extra_files = [] + if s == 'Lib' and p == '**/*': + extra_files.append(( + source / 'tools' / 'msi' / 'distutils.command.bdist_wininst.py', + Path('distutils') / 'command' / 'bdist_wininst.py' + )) + copied = copy_to_layout(temp / t.rstrip('/'), chain(files, extra_files)) print('Copied {} files'.format(copied)) with open(str(temp / 'pyvenv.cfg'), 'w') as f: print('applocal = true', file=f) - total = copy_to_layout(out, rglob(temp, '*', None)) - print('Wrote {} files to {}'.format(total, out)) + if out: + total = copy_to_layout(out, rglob(temp, '**/*', None)) + print('Wrote {} files to {}'.format(total, out)) finally: if delete_temp: shutil.rmtree(temp, True) diff --git a/Tools/msi/msi.props b/Tools/msi/msi.props index 9ae6d99..0cf7c77 100644 --- a/Tools/msi/msi.props +++ b/Tools/msi/msi.props @@ -47,7 +47,7 @@ - $(PySourcePath)PCBuild\obj\$(Configuration)_$(Platform)_Setup\$(OutputName) + $(Py_IntDir)\$(Configuration)_$(Platform)_Setup\$(OutputName) $(IntermediateOutputPath)_$(OutputSuffix) $(BuildPath) $(OutputPath)\ @@ -124,6 +124,12 @@ redist + + build32 + + + build64 + diff --git a/Tools/msi/purge.py b/Tools/msi/purge.py new file mode 100644 index 0000000..76dbc49 --- /dev/null +++ b/Tools/msi/purge.py @@ -0,0 +1,74 @@ +# Purges the Fastly cache for Windows download files +# +# Usage: +# py -3 purge.py 3.5.1rc1 +# + +__author__ = 'Steve Dower ' +__version__ = '1.0.0' + +import re +import sys + +from urllib.request import * + +VERSION_RE = re.compile(r'(\d+\.\d+\.\d+)(\w+\d+)?$') + +try: + m = VERSION_RE.match(sys.argv[1]) + if not m: + print('Invalid version:', sys.argv[1]) + print('Expected something like "3.5.1rc1"') + sys.exit(1) +except LookupError: + print('Missing version argument. Expected something like "3.5.1rc1"') + sys.exit(1) + +URL = "https://www.python.org/ftp/python/{}/".format(m.group(1)) + + +FILES = [ + "core.msi", + "core_d.msi", + "core_pdb.msi", + "dev.msi", + "dev_d.msi", + "doc.msi", + "exe.msi", + "exe_d.msi", + "exe_pdb.msi", + "launcher.msi", + "lib.msi", + "lib_d.msi", + "lib_pdb.msi", + "path.msi", + "pip.msi", + "tcltk.msi", + "tcltk_d.msi", + "tcltk_pdb.msi", + "test.msi", + "test_d.msi", + "test_pdb.msi", + "tools.msi", + "Windows6.0-KB2999226-x64.msu", + "Windows6.0-KB2999226-x86.msu", + "Windows6.1-KB2999226-x64.msu", + "Windows6.1-KB2999226-x86.msu", + "Windows8.1-KB2999226-x64.msu", + "Windows8.1-KB2999226-x86.msu", + "Windows8-RT-KB2999226-x64.msu", + "Windows8-RT-KB2999226-x86.msu", +] +PATHS = [ + "python-{}.exe".format(m.group(0)), + "python-{}-webinstall.exe".format(m.group(0)), + "python-{}-amd64.exe".format(m.group(0)), + "python-{}-amd64-webinstall.exe".format(m.group(0)), +] + ["win32{}/{}".format(m.group(2), f) for f in FILES] + ["amd64{}/{}".format(m.group(2), f) for f in FILES] + +print('Purged:') +for n in PATHS: + u = URL + n + with urlopen(Request(u, method='PURGE', headers={'Fastly-Soft-Purge': 1})) as r: + r.read() + print(' ', u) diff --git a/Tools/nuget/build.bat b/Tools/nuget/build.bat new file mode 100644 index 0000000..120b38c --- /dev/null +++ b/Tools/nuget/build.bat @@ -0,0 +1,55 @@ +@echo off +setlocal +set D=%~dp0 +set PCBUILD=%D%..\..\PCBuild\ + +set BUILDX86= +set BUILDX64= +set REBUILD= +set OUTPUT= +set PACKAGES= + +:CheckOpts +if "%~1" EQU "-h" goto Help +if "%~1" EQU "-x86" (set BUILDX86=1) && shift && goto CheckOpts +if "%~1" EQU "-x64" (set BUILDX64=1) && shift && goto CheckOpts +if "%~1" EQU "-r" (set REBUILD=-r) && shift && goto CheckOpts +if "%~1" EQU "-o" (set OUTPUT="/p:OutputPath=%~2") && shift && shift && goto CheckOpts +if "%~1" EQU "--out" (set OUTPUT="/p:OutputPath=%~2") && shift && shift && goto CheckOpts +if "%~1" EQU "-p" (set PACKAGES=%PACKAGES% %~2) && shift && shift && goto CheckOpts + +if not defined BUILDX86 if not defined BUILDX64 (set BUILDX86=1) && (set BUILDX64=1) + +call "%D%..\msi\get_externals.bat" +call "%PCBUILD%env.bat" x86 + +if defined PACKAGES set PACKAGES="/p:Packages=%PACKAGES%" + +if defined BUILDX86 ( + if defined REBUILD ( call "%PCBUILD%build.bat" -e -r + ) else if not exist "%PCBUILD%win32\python.exe" call "%PCBUILD%build.bat" -e + if errorlevel 1 goto :eof + + msbuild "%D%make_pkg.proj" /p:Configuration=Release /p:Platform=x86 %OUTPUT% %PACKAGES% + if errorlevel 1 goto :eof +) + +if defined BUILDX64 ( + if defined REBUILD ( call "%PCBUILD%build.bat" -p x64 -e -r + ) else if not exist "%PCBUILD%amd64\python.exe" call "%PCBUILD%build.bat" -p x64 -e + if errorlevel 1 goto :eof + + msbuild "%D%make_pkg.proj" /p:Configuration=Release /p:Platform=x64 %OUTPUT% %PACKAGES% + if errorlevel 1 goto :eof +) + +exit /B 0 + +:Help +echo build.bat [-x86] [-x64] [--out DIR] [-r] [-h] +echo. +echo -x86 Build x86 installers +echo -x64 Build x64 installers +echo -r Rebuild rather than incremental build +echo --out [DIR] Override output directory +echo -h Show usage diff --git a/Tools/nuget/make_pkg.proj b/Tools/nuget/make_pkg.proj new file mode 100644 index 0000000..81b84f9 --- /dev/null +++ b/Tools/nuget/make_pkg.proj @@ -0,0 +1,57 @@ + + + + {10487945-15D1-4092-A214-338395C4116B} + python + $(OutputName)x86 + + false + true + + + + + + $(ExternalsDir)\windows-installer\nuget\nuget.exe + $(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber) + $(NuspecVersion)-$(ReleaseLevelName) + false + $(OutputName).$(NuspecVersion) + .nupkg + $(IntermediateOutputPath)\nuget_$(ArchName) + + rmdir /q/s "$(IntermediateOutputPath)" + + "$(PythonExe)" "$(MSBuildThisFileDirectory)\..\msi\make_zip.py" + $(PythonArguments) -t "$(IntermediateOutputPath)" -b "$(BuildPath.TrimEnd('\'))" + + "$(IntermediateOutputPath)\python.exe" -B -c "import sys; sys.path.append(r'$(PySourcePath)\Lib'); import ensurepip; ensurepip._main()" + "$(IntermediateOutputPath)\python.exe" -B -m pip install -U $(Packages) + + "$(Nuget)" pack "$(MSBuildThisFileDirectory)\$(OutputName).nuspec" + $(NugetArguments) -BasePath "$(IntermediateOutputPath)" + $(NugetArguments) -OutputDirectory "$(OutputPath.Trim(`\`))" + $(NugetArguments) -Version "$(NuspecVersion)" + $(NugetArguments) -NoPackageAnalysis -NonInteractive + + setlocal +set DOC_FILENAME=python$(PythonVersion).chm +set VCREDIST_PATH=$(VS140COMNTOOLS)\..\..\VC\redist\$(Platform)\Microsoft.VC140.CRT + + + + + + + + + + + + + + + + + diff --git a/Tools/nuget/python.nuspec b/Tools/nuget/python.nuspec new file mode 100644 index 0000000..b3c5c34 --- /dev/null +++ b/Tools/nuget/python.nuspec @@ -0,0 +1,18 @@ + + + + python + Python + 0.0.0.0 + Python Software Foundation + https://docs.python.org/3/license.html + https://www.python.org/ + false + Installs 64-bit Python for use in build scenarios. + https://www.python.org/static/favicon.ico + python + + + + + diff --git a/Tools/nuget/pythonx86.nuspec b/Tools/nuget/pythonx86.nuspec new file mode 100644 index 0000000..b55c879 --- /dev/null +++ b/Tools/nuget/pythonx86.nuspec @@ -0,0 +1,18 @@ + + + + pythonx86 + Python (32-bit) + Python Software Foundation + 0.0.0.0 + https://docs.python.org/3/license.html + https://www.python.org/ + false + Installs 32-bit Python for use in build scenarios. + https://www.python.org/static/favicon.ico + python + + + + + diff --git a/Tools/scripts/fixcid.py b/Tools/scripts/fixcid.py index 1e4c428..c66a0ac 100755 --- a/Tools/scripts/fixcid.py +++ b/Tools/scripts/fixcid.py @@ -88,9 +88,9 @@ def main(): sys.exit(bad) # Change this regular expression to select a different set of files -Wanted = '^[a-zA-Z0-9_]+\.[ch]$' +Wanted = r'^[a-zA-Z0-9_]+\.[ch]$' def wanted(name): - return re.match(Wanted, name) >= 0 + return re.match(Wanted, name) def recursedown(dirname): dbg('recursedown(%r)\n' % (dirname,)) @@ -168,6 +168,7 @@ def fix(filename): if filename == '-': return 0 # Done in filter mode f.close() if not g: return 0 # No changes + g.close() # Finishing touch -- move files @@ -193,21 +194,21 @@ def fix(filename): # Tokenizing ANSI C (partly) -Identifier = '\(struct \)?[a-zA-Z_][a-zA-Z0-9_]+' -String = '"\([^\n\\"]\|\\\\.\)*"' -Char = '\'\([^\n\\\']\|\\\\.\)*\'' -CommentStart = '/\*' -CommentEnd = '\*/' +Identifier = '(struct )?[a-zA-Z_][a-zA-Z0-9_]+' +String = r'"([^\n\\"]|\\.)*"' +Char = r"'([^\n\\']|\\.)*'" +CommentStart = r'/\*' +CommentEnd = r'\*/' Hexnumber = '0[xX][0-9a-fA-F]*[uUlL]*' Octnumber = '0[0-7]*[uUlL]*' Decnumber = '[1-9][0-9]*[uUlL]*' -Intnumber = Hexnumber + '\|' + Octnumber + '\|' + Decnumber +Intnumber = Hexnumber + '|' + Octnumber + '|' + Decnumber Exponent = '[eE][-+]?[0-9]+' -Pointfloat = '\([0-9]+\.[0-9]*\|\.[0-9]+\)\(' + Exponent + '\)?' +Pointfloat = r'([0-9]+\.[0-9]*|\.[0-9]+)(' + Exponent + r')?' Expfloat = '[0-9]+' + Exponent -Floatnumber = Pointfloat + '\|' + Expfloat -Number = Floatnumber + '\|' + Intnumber +Floatnumber = Pointfloat + '|' + Expfloat +Number = Floatnumber + '|' + Intnumber # Anything else is an operator -- don't list this explicitly because of '/*' @@ -225,15 +226,16 @@ def initfixline(): def fixline(line): global Program -## print '-->', repr(line) +## print('-->', repr(line)) i = 0 while i < len(line): - i = Program.search(line, i) - if i < 0: break - found = Program.group(0) -## if Program is InsideCommentProgram: print '...', -## else: print ' ', -## print found + match = Program.search(line, i) + if match is None: break + i = match.start() + found = match.group(0) +## if Program is InsideCommentProgram: print(end='... ') +## else: print(end=' ') +## print(found) if len(found) == 2: if found == '/*': Program = InsideCommentProgram @@ -247,15 +249,15 @@ def fixline(line): print('Found in comment:', found) i = i + n continue - if NotInComment.has_key(found): -## print 'Ignored in comment:', -## print found, '-->', subst -## print 'Line:', line, + if found in NotInComment: +## print(end='Ignored in comment: ') +## print(found, '-->', subst) +## print('Line:', line, end='') subst = found ## else: -## print 'Substituting in comment:', -## print found, '-->', subst -## print 'Line:', line, +## print(end='Substituting in comment: ') +## print(found, '-->', subst) +## print('Line:', line, end='') line = line[:i] + subst + line[i+n:] n = len(subst) i = i + n diff --git a/aclocal.m4 b/aclocal.m4 index 1f0e6f4..2a745e5 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -12,32 +12,63 @@ # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 1 (pkg-config-0.24) -# -# Copyright © 2004 Scott James Remnant . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29.1) +dnl +dnl Copyright © 2004 Scott James Remnant . +dnl Copyright © 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29.1]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) @@ -59,18 +90,19 @@ if test -n "$PKG_CONFIG"; then PKG_CONFIG="" fi fi[]dnl -])# PKG_PROG_PKG_CONFIG - -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -# only at the first occurence in configure.ac, so if the first place -# it's called might be skipped (such as if it is within an "if", you -# have to call PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- +])dnl PKG_PROG_PKG_CONFIG + +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ @@ -80,8 +112,10 @@ m4_ifvaln([$3], [else $3])dnl fi]) -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" @@ -93,10 +127,11 @@ m4_define([_PKG_CONFIG], else pkg_failed=untried fi[]dnl -])# _PKG_CONFIG +])dnl _PKG_CONFIG -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then @@ -104,19 +139,17 @@ if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then else _pkg_short_errors_supported=no fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED - - -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- +])dnl _PKG_SHORT_ERRORS_SUPPORTED + + +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl @@ -170,16 +203,40 @@ else AC_MSG_RESULT([yes]) $3 fi[]dnl -])# PKG_CHECK_MODULES +])dnl PKG_CHECK_MODULES + + +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC -# PKG_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable pkgconfigdir as the location where a module -# should install pkg-config .pc files. By default the directory is -# $libdir/pkgconfig, but the default can be changed by passing -# DIRECTORY. The user can override through the --with-pkgconfigdir -# parameter. +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -190,16 +247,18 @@ AC_ARG_WITH([pkgconfigdir], AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_INSTALLDIR +])dnl PKG_INSTALLDIR -# PKG_NOARCH_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable noarch_pkgconfigdir as the location where a -# module should install arch-independent pkg-config .pc files. By -# default the directory is $datadir/pkgconfig, but the default can be -# changed by passing DIRECTORY. The user can override through the -# --with-noarch-pkgconfigdir parameter. +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -210,13 +269,15 @@ AC_ARG_WITH([noarch-pkgconfigdir], AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_NOARCH_INSTALLDIR +])dnl PKG_NOARCH_INSTALLDIR -# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# ------------------------------------------- -# Retrieves the value of the pkg-config variable for the given module. +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl @@ -225,5 +286,5 @@ _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl -])# PKG_CHECK_VAR +])dnl PKG_CHECK_VAR diff --git a/config.guess b/config.guess index 1f5c50c..2e9ad7f 100755 --- a/config.guess +++ b/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2014-03-23' +timestamp='2016-10-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -24,12 +24,12 @@ timestamp='2014-03-23' # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # -# Originally written by Per Bothner. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -168,19 +168,29 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. + # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in + earm*) + os=netbsdelf + ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ @@ -197,6 +207,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -207,13 +224,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -223,6 +240,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; @@ -235,6 +256,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -251,42 +275,42 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 @@ -359,16 +383,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build - SUN_ARCH="i386" + SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then - SUN_ARCH="x86_64" + SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` @@ -393,7 +417,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} @@ -579,8 +603,9 @@ EOF else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi @@ -617,13 +642,13 @@ EOF sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi @@ -662,11 +687,11 @@ EOF exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = "hppa2.0w" ] + if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build @@ -679,12 +704,12 @@ EOF # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} @@ -789,14 +814,14 @@ EOF echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) @@ -878,7 +903,7 @@ EOF exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix @@ -901,7 +926,7 @@ EOF EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) @@ -932,6 +957,9 @@ EOF crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -944,6 +972,9 @@ EOF ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -969,6 +1000,9 @@ EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; + mips64el:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; @@ -1001,6 +1035,9 @@ EOF ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; @@ -1020,7 +1057,7 @@ EOF echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} @@ -1099,7 +1136,7 @@ EOF # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that + # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; @@ -1248,6 +1285,9 @@ EOF SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; @@ -1261,9 +1301,9 @@ EOF UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in @@ -1285,7 +1325,7 @@ EOF exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi @@ -1316,7 +1356,7 @@ EOF # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" @@ -1358,7 +1398,7 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos @@ -1369,23 +1409,25 @@ EOF x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; esac cat >&2 < in order to provide the needed -information to handle your system. +If $0 has already been updated, send the following data and any +information you think might be pertinent to config-patches@gnu.org to +provide the necessary information to handle your system. config.guess timestamp = $timestamp diff --git a/config.sub b/config.sub index d654d03..3478c1f 100755 --- a/config.sub +++ b/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2014-05-01' +timestamp='2016-11-19' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ timestamp='2014-05-01' # of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -33,7 +33,7 @@ timestamp='2014-05-01' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -53,8 +53,7 @@ timestamp='2014-05-01' me=`echo "$0" | sed -e 's,.*/,,'` usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. @@ -68,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -117,8 +116,8 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` @@ -255,12 +254,13 @@ case $basic_machine in | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ + | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ @@ -301,10 +301,12 @@ case $basic_machine in | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ | pyramid \ + | riscv32 | riscv64 \ | rl78 | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -312,6 +314,7 @@ case $basic_machine in | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) @@ -326,6 +329,9 @@ case $basic_machine in c6x) basic_machine=tic6x-unknown ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none @@ -371,12 +377,13 @@ case $basic_machine in | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ @@ -422,13 +429,15 @@ case $basic_machine in | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ | pyramid-* \ + | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ @@ -436,6 +445,7 @@ case $basic_machine in | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ + | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -512,6 +522,9 @@ case $basic_machine in basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -632,6 +645,14 @@ case $basic_machine in basic_machine=m68k-bull os=-sysv3 ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + os=$os"spe" + ;; ebmon29k) basic_machine=a29k-amd os=-ebmon @@ -773,6 +794,9 @@ case $basic_machine in basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; m68knommu) basic_machine=m68k-unknown os=-linux @@ -828,6 +852,10 @@ case $basic_machine in basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -1004,7 +1032,7 @@ case $basic_machine in ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppcle | powerpclittle | ppc-le | powerpc-little) + ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) @@ -1014,7 +1042,7 @@ case $basic_machine in ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) + ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) @@ -1360,27 +1388,28 @@ case $os in | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ + | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1512,6 +1541,8 @@ case $os in ;; -nacl*) ;; + -ios) + ;; -none) ;; *) diff --git a/configure b/configure index c892a99..1f84647 100755 --- a/configure +++ b/configure @@ -2,7 +2,7 @@ # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for python 3.5. # -# Report bugs to . +# Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -267,7 +267,7 @@ fi $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: http://bugs.python.org/ about your system, including +$0: https://bugs.python.org/ about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." @@ -582,7 +582,7 @@ PACKAGE_NAME='python' PACKAGE_TARNAME='python' PACKAGE_VERSION='3.5' PACKAGE_STRING='python 3.5' -PACKAGE_BUGREPORT='http://bugs.python.org/' +PACKAGE_BUGREPORT='https://bugs.python.org/' PACKAGE_URL='' ac_unique_file="Include/object.h" @@ -668,21 +668,25 @@ CFLAGS_NODIST BASECFLAGS OPT LLVM_PROF_FOUND +target_os +target_vendor +target_cpu +target +LLVM_PROFDATA LLVM_PROF_ERR LLVM_PROF_FILE LLVM_PROF_MERGER PGO_PROF_USE_FLAG PGO_PROF_GEN_FLAG LTOFLAGS +DEF_MAKE_RULE +DEF_MAKE_ALL_RULE ABIFLAGS LN MKDIR_P INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM -OPCODEHGEN -PYTHON -ASDLGEN ac_ct_READELF READELF ARFLAGS @@ -742,7 +746,9 @@ UNIVERSALSDK CONFIG_ARGS SOVERSION VERSION +GENERATED_COMMENT PYTHON_FOR_BUILD +PYTHON_FOR_GEN host_os host_vendor host_cpu @@ -751,7 +757,6 @@ build_os build_vendor build_cpu build -cross_compiling HAS_HG HGBRANCH HGTAG @@ -776,6 +781,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -809,6 +815,7 @@ with_suffix enable_shared enable_profiling with_pydebug +enable_optimizations with_lto with_hash_algorithm with_address_sanitizer @@ -886,6 +893,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1138,6 +1146,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1275,7 +1292,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1428,6 +1445,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1448,6 +1466,7 @@ _ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi @@ -1467,6 +1486,8 @@ Optional Features: Build (MacOSX|Darwin) framework --enable-shared disable/enable building shared python library --enable-profiling enable C-level code profiling + --enable-optimizations Enable expensive optimizations (PGO, maybe LTO, + etc). Disabled by default. --enable-loadable-sqlite-extensions support loadable extensions in _sqlite module --enable-ipv6 Enable ipv6 (with ipv4) support @@ -1547,7 +1568,7 @@ Some influential environment variables: Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. -Report bugs to . +Report bugs to . _ACEOF ac_status=$? fi @@ -1815,9 +1836,9 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## -------------------------------------- ## -## Report this to http://bugs.python.org/ ## -## -------------------------------------- ##" +( $as_echo "## --------------------------------------- ## +## Report this to https://bugs.python.org/ ## +## --------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac @@ -2799,7 +2820,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test "$abs_srcdir" != "$abs_builddir"; then +if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then # If we're building out-of-tree, we need to make sure the following # resources get picked up before their $srcdir counterparts. # Objects/ -> typeslots.inc @@ -2876,7 +2897,6 @@ fi ac_config_headers="$ac_config_headers pyconfig.h" - ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then @@ -2983,6 +3003,56 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # pybuilddir.txt will be created by --generate-posix-vars in the Makefile rm -f pybuilddir.txt +for ac_prog in python$PACKAGE_VERSION python3 python +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PYTHON_FOR_GEN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PYTHON_FOR_GEN"; then + ac_cv_prog_PYTHON_FOR_GEN="$PYTHON_FOR_GEN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_PYTHON_FOR_GEN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PYTHON_FOR_GEN=$ac_cv_prog_PYTHON_FOR_GEN +if test -n "$PYTHON_FOR_GEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_FOR_GEN" >&5 +$as_echo "$PYTHON_FOR_GEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON_FOR_GEN" && break +done +test -n "$PYTHON_FOR_GEN" || PYTHON_FOR_GEN="not-found" + +if test "$PYTHON_FOR_GEN" = not-found; then + PYTHON_FOR_GEN='@echo "Cannot generate $@, python not found !" && \ + echo "To skip re-generation of $@ run or ." && \ + echo "Otherwise, set python in PATH and run configure or run ." && false &&' +fi + + if test "$cross_compiling" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python interpreter for cross build" >&5 $as_echo_n "checking for python interpreter for cross build... " >&6; } @@ -3001,14 +3071,18 @@ $as_echo_n "checking for python interpreter for cross build... " >&6; } $as_echo "$interp" >&6; } PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp fi + # Used to comment out stuff for rebuilding generated files + GENERATED_COMMENT='#' elif test "$cross_compiling" = maybe; then as_fn_error $? "Cross compiling required --host=HOST-TUPLE and --build=ARCH" "$LINENO" 5 else PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E' + GENERATED_COMMENT='' fi + if test "$prefix" != "/"; then prefix=`echo "$prefix" | sed -e 's/\/$//g'` fi @@ -5317,7 +5391,7 @@ cat >> conftest.c <conftest.out 2>/dev/null; then +if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PLATFORM_TRIPLET" >&5 $as_echo "$PLATFORM_TRIPLET" >&6; } @@ -6283,107 +6357,6 @@ fi -for ac_prog in python$PACKAGE_VERSION python3 python -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PYTHON"; then - ac_cv_prog_PYTHON="$PYTHON" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PYTHON="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PYTHON=$ac_cv_prog_PYTHON -if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PYTHON" && break -done -test -n "$PYTHON" || PYTHON="not-found" - -if test "$PYTHON" = not-found; then - ASDLGEN="@echo python: $PYTHON! cannot run \$(srcdir)/Parser/asdl_c.py #" -else - ASDLGEN="$PYTHON" -fi - - -for ac_prog in python$PACKAGE_VERSION python3 python -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PYTHON"; then - ac_cv_prog_PYTHON="$PYTHON" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PYTHON="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PYTHON=$ac_cv_prog_PYTHON -if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PYTHON" && break -done -test -n "$PYTHON" || PYTHON="not-found" - -if test "$PYTHON" = not-found; then - OPCODEHGEN="@echo python: $PYTHON! cannot run Tools/scripts/generate_opcode_h.py" -else - OPCODEHGEN="$PYTHON" -fi - - - case $MACHDEP in bsdos*|hp*|HP*) # install -d does not work on BSDI or HP-UX @@ -6566,6 +6539,44 @@ $as_echo "no" >&6; } fi +# Enable optimization flags + + +Py_OPT='false' +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-optimizations" >&5 +$as_echo_n "checking for --enable-optimizations... " >&6; } +# Check whether --enable-optimizations was given. +if test "${enable_optimizations+set}" = set; then : + enableval=$enable_optimizations; +if test "$withval" != no +then + Py_OPT='true' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; +else + Py_OPT='false' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +if test "$Py_OPT" = 'true' ; then + # Intentionally not forcing Py_LTO='true' here. Too many toolchains do not + # compile working code using it and both test_distutils and test_gdb are + # broken when you do managed to get a toolchain that works with it. People + # who want LTO need to use --with-lto themselves. + DEF_MAKE_ALL_RULE="profile-opt" + REQUIRE_PGO="yes" + DEF_MAKE_RULE="build_all" +else + DEF_MAKE_ALL_RULE="build_all" + REQUIRE_PGO="no" + DEF_MAKE_RULE="all" +fi + # Enable LTO flags { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-lto" >&5 @@ -6614,25 +6625,84 @@ fi +# Make this work on systems where llvm tools are not installed with their +# normal names in the default $PATH (ie: Ubuntu). They exist under the +# non-suffixed name in their versioned llvm directory. +llvm_bin_dir='' +llvm_path="${PATH}" +if test "${CC}" = "clang" +then + clang_bin=`which clang` + # Some systems install clang elsewhere as a symlink to the real path + # which is where the related llvm tools are located. + if test -L "${clang_bin}" + then + clang_dir=`dirname "${clang_bin}"` + clang_bin=`readlink "${clang_bin}"` + llvm_bin_dir="${clang_dir}/"`dirname "${clang_bin}"` + llvm_path="${llvm_path}${PATH_SEPARATOR}${llvm_bin_dir}" + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi -# Extract the first word of "llvm-profdata", so it can be a program name with args. -set dummy llvm-profdata; ac_word=$2 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- +# Extract the first word of "$target_alias-llvm-profdata", so it can be a program name with args. +set dummy $target_alias-llvm-profdata; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LLVM_PROF_FOUND+:} false; then : +if ${ac_cv_path_LLVM_PROFDATA+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$LLVM_PROF_FOUND"; then - ac_cv_prog_LLVM_PROF_FOUND="$LLVM_PROF_FOUND" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + case $LLVM_PROFDATA in + [\\/]* | ?:[\\/]*) + ac_cv_path_LLVM_PROFDATA="$LLVM_PROFDATA" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in ${llvm_path} do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_LLVM_PROF_FOUND="found" + ac_cv_path_LLVM_PROFDATA="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6640,30 +6710,105 @@ done done IFS=$as_save_IFS - test -z "$ac_cv_prog_LLVM_PROF_FOUND" && ac_cv_prog_LLVM_PROF_FOUND="not-found" + ;; +esac +fi +LLVM_PROFDATA=$ac_cv_path_LLVM_PROFDATA +if test -n "$LLVM_PROFDATA"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_PROFDATA" >&5 +$as_echo "$LLVM_PROFDATA" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + + +if test -z "$ac_cv_path_LLVM_PROFDATA"; then + if test "$build" = "$target"; then + ac_pt_LLVM_PROFDATA=$LLVM_PROFDATA + # Extract the first word of "llvm-profdata", so it can be a program name with args. +set dummy llvm-profdata; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_LLVM_PROFDATA+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_LLVM_PROFDATA in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_LLVM_PROFDATA="$ac_pt_LLVM_PROFDATA" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in ${llvm_path} +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_LLVM_PROFDATA="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_ac_pt_LLVM_PROFDATA" && ac_cv_path_ac_pt_LLVM_PROFDATA="''" + ;; +esac fi -LLVM_PROF_FOUND=$ac_cv_prog_LLVM_PROF_FOUND -if test -n "$LLVM_PROF_FOUND"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_PROF_FOUND" >&5 -$as_echo "$LLVM_PROF_FOUND" >&6; } +ac_pt_LLVM_PROFDATA=$ac_cv_path_ac_pt_LLVM_PROFDATA +if test -n "$ac_pt_LLVM_PROFDATA"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LLVM_PROFDATA" >&5 +$as_echo "$ac_pt_LLVM_PROFDATA" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi + LLVM_PROFDATA=$ac_pt_LLVM_PROFDATA + else + LLVM_PROFDATA="''" + fi +else + LLVM_PROFDATA="$ac_cv_path_LLVM_PROFDATA" +fi + +if test -n "${LLVM_PROFDATA}" -a -x "${LLVM_PROFDATA}" +then + LLVM_PROF_FOUND="found" +else + LLVM_PROF_FOUND="not-found" +fi +if test "$ac_sys_system" = "Darwin" -a "${LLVM_PROF_FOUND}" = "not-found" +then + found_llvm_profdata=`/usr/bin/xcrun -find llvm-profdata 2>/dev/null` + if test -n "${found_llvm_profdata}" + then + # llvm-profdata isn't directly in $PATH in some cases. + # https://apple.stackexchange.com/questions/197053/ + LLVM_PROFDATA='/usr/bin/xcrun llvm-profdata' + LLVM_PROF_FOUND=found + { $as_echo "$as_me:${as_lineno-$LINENO}: llvm-profdata found via xcrun: ${LLVM_PROFDATA}" >&5 +$as_echo "$as_me: llvm-profdata found via xcrun: ${LLVM_PROFDATA}" >&6;} + fi +fi LLVM_PROF_ERR=no case $CC in *clang*) # Any changes made here should be reflected in the GCC+Darwin case below PGO_PROF_GEN_FLAG="-fprofile-instr-generate" PGO_PROF_USE_FLAG="-fprofile-instr-use=code.profclangd" - LLVM_PROF_MERGER="llvm-profdata merge -output=code.profclangd *.profclangr" + LLVM_PROF_MERGER="${LLVM_PROFDATA} merge -output=code.profclangd *.profclangr" LLVM_PROF_FILE="LLVM_PROFILE_FILE=\"code-%p.profclangr\"" if test $LLVM_PROF_FOUND = not-found then LLVM_PROF_ERR=yes + if test "${REQUIRE_PGO}" = "yes" + then + as_fn_error $? "llvm-profdata is required for a --enable-optimizations build but could not be found." "$LINENO" 5 + fi fi ;; *gcc*) @@ -6671,11 +6816,15 @@ case $CC in Darwin*) PGO_PROF_GEN_FLAG="-fprofile-instr-generate" PGO_PROF_USE_FLAG="-fprofile-instr-use=code.profclangd" - LLVM_PROF_MERGER="llvm-profdata merge -output=code.profclangd *.profclangr" + LLVM_PROF_MERGER="${LLVM_PROFDATA} merge -output=code.profclangd *.profclangr" LLVM_PROF_FILE="LLVM_PROFILE_FILE=\"code-%p.profclangr\"" - if test $LLVM_PROF_FOUND = not-found + if test "${LLVM_PROF_FOUND}" = "not-found" then LLVM_PROF_ERR=yes + if test "${REQUIRE_PGO}" = "yes" + then + as_fn_error $? "llvm-profdata is required for a --enable-optimizations build but could not be found." "$LINENO" 5 + fi fi ;; *) @@ -7114,7 +7263,7 @@ $as_echo "$CC" >&6; } # Calculate an appropriate deployment target for this build: # The deployment target value is used explicitly to enable certain # features are enabled (such as builtin libedit support for readline) - # through the use of Apple's Availabiliy Macros and is used as a + # through the use of Apple's Availability Macros and is used as a # component of the string returned by distutils.get_platform(). # # Use the value from: @@ -7565,7 +7714,7 @@ unistd.h utime.h \ poll.h sys/devpoll.h sys/epoll.h sys/poll.h \ sys/audioio.h sys/xattr.h sys/bsdtty.h sys/event.h sys/file.h sys/ioctl.h \ sys/kern_control.h sys/loadavg.h sys/lock.h sys/mkdev.h sys/modem.h \ -sys/param.h sys/select.h sys/sendfile.h sys/socket.h sys/statvfs.h \ +sys/param.h sys/random.h sys/select.h sys/sendfile.h sys/socket.h sys/statvfs.h \ sys/stat.h sys/syscall.h sys/sys_domain.h sys/termio.h sys/time.h \ sys/times.h sys/types.h sys/uio.h sys/un.h sys/utsname.h sys/wait.h pty.h \ libutil.h sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \ @@ -9077,8 +9226,8 @@ if test -z "$LDSHARED" then case $ac_sys_system/$ac_sys_release in AIX*) - BLDSHARED="\$(srcdir)/Modules/ld_so_aix \$(CC) -bI:\$(srcdir)/Modules/python.exp" - LDSHARED="\$(BINLIBDEST)/config/ld_so_aix \$(CC) -bI:\$(BINLIBDEST)/config/python.exp" + BLDSHARED="Modules/ld_so_aix \$(CC) -bI:Modules/python.exp" + LDSHARED="\$(LIBPL)/ld_so_aix \$(CC) -bI:\$(LIBPL)/python.exp" ;; IRIX/5*) LDSHARED="ld -shared";; IRIX*/6*) LDSHARED="ld ${SGI_ABI} -shared -all";; @@ -9480,48 +9629,6 @@ _ACEOF fi # Dynamic linking for HP-UX -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RAND_egd in -lcrypto" >&5 -$as_echo_n "checking for RAND_egd in -lcrypto... " >&6; } -if ${ac_cv_lib_crypto_RAND_egd+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char RAND_egd (); -int -main () -{ -return RAND_egd (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_crypto_RAND_egd=yes -else - ac_cv_lib_crypto_RAND_egd=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_RAND_egd" >&5 -$as_echo "$ac_cv_lib_crypto_RAND_egd" >&6; } -if test "x$ac_cv_lib_crypto_RAND_egd" = xyes; then : - -$as_echo "#define HAVE_RAND_EGD 1" >>confdefs.h - -fi - # only check for sem_init if thread support is requested if test "$with_threads" = "yes" -o -z "$with_threads"; then @@ -12661,6 +12768,8 @@ int main() break; } } + freeaddrinfo(aitop); + aitop = NULL; } if (!(inet4 == 0 || inet4 == 2)) @@ -16960,7 +17069,7 @@ $config_files Configuration headers: $config_headers -Report bugs to ." +Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -17714,3 +17823,13 @@ $SHELL $srcdir/Modules/makesetup -c $srcdir/Modules/config.c.in \ -s Modules Modules/Setup.config \ Modules/Setup.local Modules/Setup mv config.c Modules + +if test "$Py_OPT" = 'false' -a "$Py_DEBUG" != 'true'; then + echo "" >&6 + echo "" >&6 + echo "If you want a release build with all optimizations active (LTO, PGO, etc)," + echo "please run ./configure --enable-optimizations" >&6 + echo "" >&6 + echo "" >&6 +fi + diff --git a/configure.ac b/configure.ac index 1c07c05..49d1a37 100644 --- a/configure.ac +++ b/configure.ac @@ -7,10 +7,10 @@ m4_define(PYTHON_VERSION, 3.5) AC_PREREQ(2.65) -AC_INIT(python, PYTHON_VERSION, http://bugs.python.org/) +AC_INIT(python, PYTHON_VERSION, https://bugs.python.org/) AC_SUBST(BASECPPFLAGS) -if test "$abs_srcdir" != "$abs_builddir"; then +if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then # If we're building out-of-tree, we need to make sure the following # resources get picked up before their $srcdir counterparts. # Objects/ -> typeslots.inc @@ -49,7 +49,6 @@ fi AC_CONFIG_SRCDIR([Include/object.h]) AC_CONFIG_HEADER(pyconfig.h) -AC_SUBST(cross_compiling) AC_CANONICAL_HOST AC_SUBST(build) AC_SUBST(host) @@ -57,6 +56,14 @@ AC_SUBST(host) # pybuilddir.txt will be created by --generate-posix-vars in the Makefile rm -f pybuilddir.txt +AC_CHECK_PROGS(PYTHON_FOR_GEN, python$PACKAGE_VERSION python3 python, not-found) +if test "$PYTHON_FOR_GEN" = not-found; then + PYTHON_FOR_GEN='@echo "Cannot generate $@, python not found !" && \ + echo "To skip re-generation of $@ run or ." && \ + echo "Otherwise, set python in PATH and run configure or run ." && false &&' +fi +AC_SUBST(PYTHON_FOR_GEN) + if test "$cross_compiling" = yes; then AC_MSG_CHECKING([for python interpreter for cross build]) if test -z "$PYTHON_FOR_BUILD"; then @@ -73,12 +80,16 @@ if test "$cross_compiling" = yes; then AC_MSG_RESULT($interp) PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp fi + # Used to comment out stuff for rebuilding generated files + GENERATED_COMMENT='#' elif test "$cross_compiling" = maybe; then AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH]) else PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E' + GENERATED_COMMENT='' fi AC_SUBST(PYTHON_FOR_BUILD) +AC_SUBST(GENERATED_COMMENT) dnl Ensure that if prefix is specified, it does not end in a slash. If dnl it does, we get path names containing '//' which is both ugly and @@ -859,7 +870,7 @@ cat >> conftest.c <conftest.out 2>/dev/null; then +if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '` AC_MSG_RESULT([$PLATFORM_TRIPLET]) else @@ -1178,23 +1189,6 @@ if test "$cross_compiling" = yes; then fi AC_SUBST(READELF) -AC_SUBST(ASDLGEN) -AC_CHECK_PROGS(PYTHON, python$PACKAGE_VERSION python3 python, not-found) -if test "$PYTHON" = not-found; then - ASDLGEN="@echo python: $PYTHON! cannot run \$(srcdir)/Parser/asdl_c.py #" -else - ASDLGEN="$PYTHON" -fi - -AC_SUBST(OPCODEHGEN) -AC_CHECK_PROGS(PYTHON, python$PACKAGE_VERSION python3 python, not-found) -if test "$PYTHON" = not-found; then - OPCODEHGEN="@echo python: $PYTHON! cannot run Tools/scripts/generate_opcode_h.py" -else - OPCODEHGEN="$PYTHON" -fi - - case $MACHDEP in bsdos*|hp*|HP*) @@ -1236,6 +1230,36 @@ else AC_MSG_RESULT(no); Py_DEBUG='false' fi], [AC_MSG_RESULT(no)]) +# Enable optimization flags +AC_SUBST(DEF_MAKE_ALL_RULE) +AC_SUBST(DEF_MAKE_RULE) +Py_OPT='false' +AC_MSG_CHECKING(for --enable-optimizations) +AC_ARG_ENABLE(optimizations, AS_HELP_STRING([--enable-optimizations], [Enable expensive optimizations (PGO, maybe LTO, etc). Disabled by default.]), +[ +if test "$withval" != no +then + Py_OPT='true' + AC_MSG_RESULT(yes); +else + Py_OPT='false' + AC_MSG_RESULT(no); +fi], +[AC_MSG_RESULT(no)]) +if test "$Py_OPT" = 'true' ; then + # Intentionally not forcing Py_LTO='true' here. Too many toolchains do not + # compile working code using it and both test_distutils and test_gdb are + # broken when you do managed to get a toolchain that works with it. People + # who want LTO need to use --with-lto themselves. + DEF_MAKE_ALL_RULE="profile-opt" + REQUIRE_PGO="yes" + DEF_MAKE_RULE="build_all" +else + DEF_MAKE_ALL_RULE="build_all" + REQUIRE_PGO="no" + DEF_MAKE_RULE="all" +fi + # Enable LTO flags AC_SUBST(LTOFLAGS) AC_MSG_CHECKING(for --with-lto) @@ -1275,19 +1299,60 @@ AC_SUBST(PGO_PROF_USE_FLAG) AC_SUBST(LLVM_PROF_MERGER) AC_SUBST(LLVM_PROF_FILE) AC_SUBST(LLVM_PROF_ERR) +# Make this work on systems where llvm tools are not installed with their +# normal names in the default $PATH (ie: Ubuntu). They exist under the +# non-suffixed name in their versioned llvm directory. +llvm_bin_dir='' +llvm_path="${PATH}" +if test "${CC}" = "clang" +then + clang_bin=`which clang` + # Some systems install clang elsewhere as a symlink to the real path + # which is where the related llvm tools are located. + if test -L "${clang_bin}" + then + clang_dir=`dirname "${clang_bin}"` + clang_bin=`readlink "${clang_bin}"` + llvm_bin_dir="${clang_dir}/"`dirname "${clang_bin}"` + llvm_path="${llvm_path}${PATH_SEPARATOR}${llvm_bin_dir}" + fi +fi +AC_SUBST(LLVM_PROFDATA) +AC_PATH_TARGET_TOOL(LLVM_PROFDATA, llvm-profdata, '', ${llvm_path}) AC_SUBST(LLVM_PROF_FOUND) -AC_CHECK_PROG(LLVM_PROF_FOUND, llvm-profdata, found, not-found) +if test -n "${LLVM_PROFDATA}" -a -x "${LLVM_PROFDATA}" +then + LLVM_PROF_FOUND="found" +else + LLVM_PROF_FOUND="not-found" +fi +if test "$ac_sys_system" = "Darwin" -a "${LLVM_PROF_FOUND}" = "not-found" +then + found_llvm_profdata=`/usr/bin/xcrun -find llvm-profdata 2>/dev/null` + if test -n "${found_llvm_profdata}" + then + # llvm-profdata isn't directly in $PATH in some cases. + # https://apple.stackexchange.com/questions/197053/ + LLVM_PROFDATA='/usr/bin/xcrun llvm-profdata' + LLVM_PROF_FOUND=found + AC_MSG_NOTICE([llvm-profdata found via xcrun: ${LLVM_PROFDATA}]) + fi +fi LLVM_PROF_ERR=no case $CC in *clang*) # Any changes made here should be reflected in the GCC+Darwin case below PGO_PROF_GEN_FLAG="-fprofile-instr-generate" PGO_PROF_USE_FLAG="-fprofile-instr-use=code.profclangd" - LLVM_PROF_MERGER="llvm-profdata merge -output=code.profclangd *.profclangr" + LLVM_PROF_MERGER="${LLVM_PROFDATA} merge -output=code.profclangd *.profclangr" LLVM_PROF_FILE="LLVM_PROFILE_FILE=\"code-%p.profclangr\"" if test $LLVM_PROF_FOUND = not-found then LLVM_PROF_ERR=yes + if test "${REQUIRE_PGO}" = "yes" + then + AC_MSG_ERROR([llvm-profdata is required for a --enable-optimizations build but could not be found.]) + fi fi ;; *gcc*) @@ -1295,11 +1360,15 @@ case $CC in Darwin*) PGO_PROF_GEN_FLAG="-fprofile-instr-generate" PGO_PROF_USE_FLAG="-fprofile-instr-use=code.profclangd" - LLVM_PROF_MERGER="llvm-profdata merge -output=code.profclangd *.profclangr" + LLVM_PROF_MERGER="${LLVM_PROFDATA} merge -output=code.profclangd *.profclangr" LLVM_PROF_FILE="LLVM_PROFILE_FILE=\"code-%p.profclangr\"" - if test $LLVM_PROF_FOUND = not-found + if test "${LLVM_PROF_FOUND}" = "not-found" then LLVM_PROF_ERR=yes + if test "${REQUIRE_PGO}" = "yes" + then + AC_MSG_ERROR([llvm-profdata is required for a --enable-optimizations build but could not be found.]) + fi fi ;; *) @@ -1617,7 +1686,7 @@ yes) # Calculate an appropriate deployment target for this build: # The deployment target value is used explicitly to enable certain # features are enabled (such as builtin libedit support for readline) - # through the use of Apple's Availabiliy Macros and is used as a + # through the use of Apple's Availability Macros and is used as a # component of the string returned by distutils.get_platform(). # # Use the value from: @@ -1877,7 +1946,7 @@ unistd.h utime.h \ poll.h sys/devpoll.h sys/epoll.h sys/poll.h \ sys/audioio.h sys/xattr.h sys/bsdtty.h sys/event.h sys/file.h sys/ioctl.h \ sys/kern_control.h sys/loadavg.h sys/lock.h sys/mkdev.h sys/modem.h \ -sys/param.h sys/select.h sys/sendfile.h sys/socket.h sys/statvfs.h \ +sys/param.h sys/random.h sys/select.h sys/sendfile.h sys/socket.h sys/statvfs.h \ sys/stat.h sys/syscall.h sys/sys_domain.h sys/termio.h sys/time.h \ sys/times.h sys/types.h sys/uio.h sys/un.h sys/utsname.h sys/wait.h pty.h \ libutil.h sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \ @@ -2289,8 +2358,8 @@ if test -z "$LDSHARED" then case $ac_sys_system/$ac_sys_release in AIX*) - BLDSHARED="\$(srcdir)/Modules/ld_so_aix \$(CC) -bI:\$(srcdir)/Modules/python.exp" - LDSHARED="\$(BINLIBDEST)/config/ld_so_aix \$(CC) -bI:\$(BINLIBDEST)/config/python.exp" + BLDSHARED="Modules/ld_so_aix \$(CC) -bI:Modules/python.exp" + LDSHARED="\$(LIBPL)/ld_so_aix \$(CC) -bI:\$(LIBPL)/python.exp" ;; IRIX/5*) LDSHARED="ld -shared";; IRIX*/6*) LDSHARED="ld ${SGI_ABI} -shared -all";; @@ -2551,9 +2620,6 @@ AC_MSG_RESULT($SHLIBS) AC_CHECK_LIB(sendfile, sendfile) AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX -AC_CHECK_LIB(crypto, RAND_egd, - AC_DEFINE(HAVE_RAND_EGD, 1, - [Define if the libcrypto has RAND_egd])) # only check for sem_init if thread support is requested if test "$with_threads" = "yes" -o -z "$with_threads"; then @@ -3709,6 +3775,8 @@ int main() break; } } + freeaddrinfo(aitop); + aitop = NULL; } if (!(inet4 == 0 || inet4 == 2)) @@ -5306,3 +5374,13 @@ $SHELL $srcdir/Modules/makesetup -c $srcdir/Modules/config.c.in \ -s Modules Modules/Setup.config \ Modules/Setup.local Modules/Setup mv config.c Modules + +if test "$Py_OPT" = 'false' -a "$Py_DEBUG" != 'true'; then + echo "" >&AS_MESSAGE_FD + echo "" >&AS_MESSAGE_FD + echo "If you want a release build with all optimizations active (LTO, PGO, etc)," + echo "please run ./configure --enable-optimizations" >&AS_MESSAGE_FD + echo "" >&AS_MESSAGE_FD + echo "" >&AS_MESSAGE_FD +fi + diff --git a/pyconfig.h.in b/pyconfig.h.in index 7895535..39ccf53 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -543,12 +543,12 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_NETLINK_H -/* Define to 1 if you have the header file. */ -#undef HAVE_LINUX_TIPC_H - /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_RANDOM_H +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_TIPC_H + /* Define to 1 if you have the `lockf' function. */ #undef HAVE_LOCKF @@ -696,9 +696,6 @@ /* Define to 1 if you have the `pwrite' function. */ #undef HAVE_PWRITE -/* Define if the libcrypto has RAND_egd */ -#undef HAVE_RAND_EGD - /* Define to 1 if you have the `readlink' function. */ #undef HAVE_READLINK @@ -1008,6 +1005,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_POLL_H +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_RANDOM_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_RESOURCE_H diff --git a/setup.py b/setup.py index 174ce72..40f8bf2 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,6 @@ import importlib.util import sysconfig from distutils import log -from distutils import text_file from distutils.errors import * from distutils.core import Extension, setup from distutils.command.build_ext import build_ext @@ -230,7 +229,12 @@ class PyBuildExt(build_ext): headers = [sysconfig.get_config_h_filename()] headers += glob(os.path.join(sysconfig.get_path('include'), "*.h")) - for ext in self.extensions[:]: + # The sysconfig variable built by makesetup, listing the already + # built modules as configured by the Setup files. + modnames = sysconfig.get_config_var('MODNAMES').split() + + removed_modules = [] + for ext in self.extensions: ext.sources = [ find_module_file(filename, moddirlist) for filename in ext.sources ] if ext.depends is not None: @@ -241,26 +245,14 @@ class PyBuildExt(build_ext): # re-compile extensions if a header file has been changed ext.depends.extend(headers) - # If a module has already been built statically, - # don't build it here - if ext.name in sys.builtin_module_names: - self.extensions.remove(ext) - - # Parse Modules/Setup and Modules/Setup.local to figure out which - # modules are turned on in the file. - remove_modules = [] - for filename in ('Modules/Setup', 'Modules/Setup.local'): - input = text_file.TextFile(filename, join_lines=1) - while 1: - line = input.readline() - if not line: break - line = line.split() - remove_modules.append(line[0]) - input.close() - - for ext in self.extensions[:]: - if ext.name in remove_modules: - self.extensions.remove(ext) + # If a module has already been built by the Makefile, + # don't build it here. + if ext.name in modnames: + removed_modules.append(ext) + + if removed_modules: + self.extensions = [x for x in self.extensions if x not in + removed_modules] # When you run "make CC=altcc" or something similar, you really want # those environment variables passed into the setup.py phase. Here's @@ -303,6 +295,13 @@ class PyBuildExt(build_ext): " detect_modules() for the module's name.") print() + if removed_modules: + print("The following modules found by detect_modules() in" + " setup.py, have been") + print("built by the Makefile instead, as configured by the" + " Setup files:") + print_three_column([ext.name for ext in removed_modules]) + if self.failed: failed = self.failed[:] print() @@ -1997,14 +1996,16 @@ class PyBuildExt(build_ext): ffi_inc = find_file('ffi.h', [], inc_dirs) if ffi_inc is not None: ffi_h = ffi_inc[0] + '/ffi.h' - with open(ffi_h) as fp: - while 1: - line = fp.readline() - if not line: - ffi_inc = None - break - if line.startswith('#define LIBFFI_H'): + with open(ffi_h) as f: + for line in f: + line = line.strip() + if line.startswith(('#define LIBFFI_H', + '#define ffi_wrapper_h')): break + else: + ffi_inc = None + print('Header file {} does not define LIBFFI_H or ' + 'ffi_wrapper_h'.format(ffi_h)) ffi_lib = None if ffi_inc is not None: for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'): -- 2.7.4

      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