@rowstile/cli-linux-x64 0.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +5 -0
- package/package.json +26 -0
- package/python/bin/python3.13 +0 -0
- package/python/bin/python3.13-config +122 -0
- package/python/lib/libpython3.13.so.1.0 +0 -0
- package/python/lib/libpython3.so +0 -0
- package/python/lib/python3.13/LICENSE.txt +277 -0
- package/python/lib/python3.13/__future__.py +147 -0
- package/python/lib/python3.13/__hello__.py +16 -0
- package/python/lib/python3.13/_aix_support.py +108 -0
- package/python/lib/python3.13/_android_support.py +192 -0
- package/python/lib/python3.13/_apple_support.py +66 -0
- package/python/lib/python3.13/_collections_abc.py +1187 -0
- package/python/lib/python3.13/_colorize.py +119 -0
- package/python/lib/python3.13/_compat_pickle.py +251 -0
- package/python/lib/python3.13/_compression.py +162 -0
- package/python/lib/python3.13/_ios_support.py +71 -0
- package/python/lib/python3.13/_markupbase.py +396 -0
- package/python/lib/python3.13/_opcode_metadata.py +343 -0
- package/python/lib/python3.13/_osx_support.py +579 -0
- package/python/lib/python3.13/_py_abc.py +147 -0
- package/python/lib/python3.13/_pydatetime.py +2640 -0
- package/python/lib/python3.13/_pydecimal.py +6356 -0
- package/python/lib/python3.13/_pyio.py +2714 -0
- package/python/lib/python3.13/_pylong.py +363 -0
- package/python/lib/python3.13/_pyrepl/__init__.py +19 -0
- package/python/lib/python3.13/_pyrepl/__main__.py +10 -0
- package/python/lib/python3.13/_pyrepl/_minimal_curses.py +68 -0
- package/python/lib/python3.13/_pyrepl/_threading_handler.py +74 -0
- package/python/lib/python3.13/_pyrepl/base_eventqueue.py +110 -0
- package/python/lib/python3.13/_pyrepl/commands.py +492 -0
- package/python/lib/python3.13/_pyrepl/completing_reader.py +295 -0
- package/python/lib/python3.13/_pyrepl/console.py +229 -0
- package/python/lib/python3.13/_pyrepl/curses.py +33 -0
- package/python/lib/python3.13/_pyrepl/fancy_termios.py +82 -0
- package/python/lib/python3.13/_pyrepl/historical_reader.py +419 -0
- package/python/lib/python3.13/_pyrepl/input.py +114 -0
- package/python/lib/python3.13/_pyrepl/keymap.py +213 -0
- package/python/lib/python3.13/_pyrepl/main.py +59 -0
- package/python/lib/python3.13/_pyrepl/mypy.ini +29 -0
- package/python/lib/python3.13/_pyrepl/pager.py +175 -0
- package/python/lib/python3.13/_pyrepl/reader.py +764 -0
- package/python/lib/python3.13/_pyrepl/readline.py +599 -0
- package/python/lib/python3.13/_pyrepl/simple_interact.py +180 -0
- package/python/lib/python3.13/_pyrepl/trace.py +21 -0
- package/python/lib/python3.13/_pyrepl/types.py +10 -0
- package/python/lib/python3.13/_pyrepl/unix_console.py +852 -0
- package/python/lib/python3.13/_pyrepl/unix_eventqueue.py +76 -0
- package/python/lib/python3.13/_pyrepl/utils.py +83 -0
- package/python/lib/python3.13/_pyrepl/windows_console.py +687 -0
- package/python/lib/python3.13/_pyrepl/windows_eventqueue.py +42 -0
- package/python/lib/python3.13/_sitebuiltins.py +91 -0
- package/python/lib/python3.13/_strptime.py +800 -0
- package/python/lib/python3.13/_sysconfigdata__linux_x86_64-linux-gnu.py +1079 -0
- package/python/lib/python3.13/_threading_local.py +120 -0
- package/python/lib/python3.13/_weakrefset.py +205 -0
- package/python/lib/python3.13/abc.py +188 -0
- package/python/lib/python3.13/antigravity.py +17 -0
- package/python/lib/python3.13/argparse.py +2690 -0
- package/python/lib/python3.13/ast.py +1865 -0
- package/python/lib/python3.13/asyncio/__init__.py +47 -0
- package/python/lib/python3.13/asyncio/__main__.py +211 -0
- package/python/lib/python3.13/asyncio/base_events.py +2086 -0
- package/python/lib/python3.13/asyncio/base_futures.py +67 -0
- package/python/lib/python3.13/asyncio/base_subprocess.py +312 -0
- package/python/lib/python3.13/asyncio/base_tasks.py +94 -0
- package/python/lib/python3.13/asyncio/constants.py +41 -0
- package/python/lib/python3.13/asyncio/coroutines.py +109 -0
- package/python/lib/python3.13/asyncio/events.py +885 -0
- package/python/lib/python3.13/asyncio/exceptions.py +62 -0
- package/python/lib/python3.13/asyncio/format_helpers.py +84 -0
- package/python/lib/python3.13/asyncio/futures.py +425 -0
- package/python/lib/python3.13/asyncio/locks.py +617 -0
- package/python/lib/python3.13/asyncio/log.py +7 -0
- package/python/lib/python3.13/asyncio/mixins.py +21 -0
- package/python/lib/python3.13/asyncio/proactor_events.py +891 -0
- package/python/lib/python3.13/asyncio/protocols.py +216 -0
- package/python/lib/python3.13/asyncio/queues.py +309 -0
- package/python/lib/python3.13/asyncio/runners.py +217 -0
- package/python/lib/python3.13/asyncio/selector_events.py +1328 -0
- package/python/lib/python3.13/asyncio/sslproto.py +929 -0
- package/python/lib/python3.13/asyncio/staggered.py +174 -0
- package/python/lib/python3.13/asyncio/streams.py +787 -0
- package/python/lib/python3.13/asyncio/subprocess.py +229 -0
- package/python/lib/python3.13/asyncio/taskgroups.py +278 -0
- package/python/lib/python3.13/asyncio/tasks.py +1121 -0
- package/python/lib/python3.13/asyncio/threads.py +26 -0
- package/python/lib/python3.13/asyncio/timeouts.py +185 -0
- package/python/lib/python3.13/asyncio/transports.py +337 -0
- package/python/lib/python3.13/asyncio/trsock.py +98 -0
- package/python/lib/python3.13/asyncio/unix_events.py +1550 -0
- package/python/lib/python3.13/asyncio/windows_events.py +906 -0
- package/python/lib/python3.13/asyncio/windows_utils.py +181 -0
- package/python/lib/python3.13/base64.py +628 -0
- package/python/lib/python3.13/bdb.py +973 -0
- package/python/lib/python3.13/bisect.py +118 -0
- package/python/lib/python3.13/bz2.py +352 -0
- package/python/lib/python3.13/cProfile.py +197 -0
- package/python/lib/python3.13/calendar.py +813 -0
- package/python/lib/python3.13/cmd.py +409 -0
- package/python/lib/python3.13/code.py +386 -0
- package/python/lib/python3.13/codecs.py +1132 -0
- package/python/lib/python3.13/codeop.py +155 -0
- package/python/lib/python3.13/collections/__init__.py +1603 -0
- package/python/lib/python3.13/colorsys.py +166 -0
- package/python/lib/python3.13/compileall.py +470 -0
- package/python/lib/python3.13/concurrent/__init__.py +1 -0
- package/python/lib/python3.13/concurrent/futures/__init__.py +54 -0
- package/python/lib/python3.13/concurrent/futures/_base.py +660 -0
- package/python/lib/python3.13/concurrent/futures/process.py +892 -0
- package/python/lib/python3.13/concurrent/futures/thread.py +240 -0
- package/python/lib/python3.13/configparser.py +1396 -0
- package/python/lib/python3.13/contextlib.py +814 -0
- package/python/lib/python3.13/contextvars.py +4 -0
- package/python/lib/python3.13/copy.py +306 -0
- package/python/lib/python3.13/copyreg.py +217 -0
- package/python/lib/python3.13/csv.py +527 -0
- package/python/lib/python3.13/ctypes/__init__.py +605 -0
- package/python/lib/python3.13/ctypes/_aix.py +327 -0
- package/python/lib/python3.13/ctypes/_endian.py +78 -0
- package/python/lib/python3.13/ctypes/macholib/README.ctypes +7 -0
- package/python/lib/python3.13/ctypes/macholib/__init__.py +9 -0
- package/python/lib/python3.13/ctypes/macholib/dyld.py +165 -0
- package/python/lib/python3.13/ctypes/macholib/dylib.py +42 -0
- package/python/lib/python3.13/ctypes/macholib/fetch_macholib +2 -0
- package/python/lib/python3.13/ctypes/macholib/fetch_macholib.bat +1 -0
- package/python/lib/python3.13/ctypes/macholib/framework.py +42 -0
- package/python/lib/python3.13/ctypes/util.py +387 -0
- package/python/lib/python3.13/ctypes/wintypes.py +202 -0
- package/python/lib/python3.13/curses/__init__.py +101 -0
- package/python/lib/python3.13/curses/ascii.py +99 -0
- package/python/lib/python3.13/curses/has_key.py +192 -0
- package/python/lib/python3.13/curses/panel.py +6 -0
- package/python/lib/python3.13/curses/textpad.py +236 -0
- package/python/lib/python3.13/dataclasses.py +1679 -0
- package/python/lib/python3.13/datetime.py +9 -0
- package/python/lib/python3.13/dbm/__init__.py +194 -0
- package/python/lib/python3.13/dbm/dumb.py +319 -0
- package/python/lib/python3.13/dbm/gnu.py +3 -0
- package/python/lib/python3.13/dbm/ndbm.py +3 -0
- package/python/lib/python3.13/dbm/sqlite3.py +144 -0
- package/python/lib/python3.13/decimal.py +109 -0
- package/python/lib/python3.13/difflib.py +2058 -0
- package/python/lib/python3.13/dis.py +1075 -0
- package/python/lib/python3.13/doctest.py +2919 -0
- package/python/lib/python3.13/email/__init__.py +61 -0
- package/python/lib/python3.13/email/_encoded_words.py +233 -0
- package/python/lib/python3.13/email/_header_value_parser.py +3153 -0
- package/python/lib/python3.13/email/_parseaddr.py +563 -0
- package/python/lib/python3.13/email/_policybase.py +382 -0
- package/python/lib/python3.13/email/architecture.rst +216 -0
- package/python/lib/python3.13/email/base64mime.py +115 -0
- package/python/lib/python3.13/email/charset.py +396 -0
- package/python/lib/python3.13/email/contentmanager.py +254 -0
- package/python/lib/python3.13/email/encoders.py +65 -0
- package/python/lib/python3.13/email/errors.py +117 -0
- package/python/lib/python3.13/email/feedparser.py +536 -0
- package/python/lib/python3.13/email/generator.py +530 -0
- package/python/lib/python3.13/email/header.py +582 -0
- package/python/lib/python3.13/email/headerregistry.py +618 -0
- package/python/lib/python3.13/email/iterators.py +68 -0
- package/python/lib/python3.13/email/message.py +1217 -0
- package/python/lib/python3.13/email/mime/__init__.py +0 -0
- package/python/lib/python3.13/email/mime/application.py +37 -0
- package/python/lib/python3.13/email/mime/audio.py +97 -0
- package/python/lib/python3.13/email/mime/base.py +29 -0
- package/python/lib/python3.13/email/mime/image.py +152 -0
- package/python/lib/python3.13/email/mime/message.py +33 -0
- package/python/lib/python3.13/email/mime/multipart.py +47 -0
- package/python/lib/python3.13/email/mime/nonmultipart.py +21 -0
- package/python/lib/python3.13/email/mime/text.py +40 -0
- package/python/lib/python3.13/email/parser.py +127 -0
- package/python/lib/python3.13/email/policy.py +232 -0
- package/python/lib/python3.13/email/quoprimime.py +300 -0
- package/python/lib/python3.13/email/utils.py +497 -0
- package/python/lib/python3.13/encodings/__init__.py +179 -0
- package/python/lib/python3.13/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/aliases.py +560 -0
- package/python/lib/python3.13/encodings/ascii.py +50 -0
- package/python/lib/python3.13/encodings/base64_codec.py +55 -0
- package/python/lib/python3.13/encodings/big5.py +39 -0
- package/python/lib/python3.13/encodings/big5hkscs.py +39 -0
- package/python/lib/python3.13/encodings/bz2_codec.py +78 -0
- package/python/lib/python3.13/encodings/charmap.py +69 -0
- package/python/lib/python3.13/encodings/cp037.py +307 -0
- package/python/lib/python3.13/encodings/cp1006.py +307 -0
- package/python/lib/python3.13/encodings/cp1026.py +307 -0
- package/python/lib/python3.13/encodings/cp1125.py +698 -0
- package/python/lib/python3.13/encodings/cp1140.py +307 -0
- package/python/lib/python3.13/encodings/cp1250.py +307 -0
- package/python/lib/python3.13/encodings/cp1251.py +307 -0
- package/python/lib/python3.13/encodings/cp1252.py +307 -0
- package/python/lib/python3.13/encodings/cp1253.py +307 -0
- package/python/lib/python3.13/encodings/cp1254.py +307 -0
- package/python/lib/python3.13/encodings/cp1255.py +307 -0
- package/python/lib/python3.13/encodings/cp1256.py +307 -0
- package/python/lib/python3.13/encodings/cp1257.py +307 -0
- package/python/lib/python3.13/encodings/cp1258.py +307 -0
- package/python/lib/python3.13/encodings/cp273.py +307 -0
- package/python/lib/python3.13/encodings/cp424.py +307 -0
- package/python/lib/python3.13/encodings/cp437.py +698 -0
- package/python/lib/python3.13/encodings/cp500.py +307 -0
- package/python/lib/python3.13/encodings/cp720.py +309 -0
- package/python/lib/python3.13/encodings/cp737.py +698 -0
- package/python/lib/python3.13/encodings/cp775.py +697 -0
- package/python/lib/python3.13/encodings/cp850.py +698 -0
- package/python/lib/python3.13/encodings/cp852.py +698 -0
- package/python/lib/python3.13/encodings/cp855.py +698 -0
- package/python/lib/python3.13/encodings/cp856.py +307 -0
- package/python/lib/python3.13/encodings/cp857.py +694 -0
- package/python/lib/python3.13/encodings/cp858.py +698 -0
- package/python/lib/python3.13/encodings/cp860.py +698 -0
- package/python/lib/python3.13/encodings/cp861.py +698 -0
- package/python/lib/python3.13/encodings/cp862.py +698 -0
- package/python/lib/python3.13/encodings/cp863.py +698 -0
- package/python/lib/python3.13/encodings/cp864.py +690 -0
- package/python/lib/python3.13/encodings/cp865.py +698 -0
- package/python/lib/python3.13/encodings/cp866.py +698 -0
- package/python/lib/python3.13/encodings/cp869.py +689 -0
- package/python/lib/python3.13/encodings/cp874.py +307 -0
- package/python/lib/python3.13/encodings/cp875.py +307 -0
- package/python/lib/python3.13/encodings/cp932.py +39 -0
- package/python/lib/python3.13/encodings/cp949.py +39 -0
- package/python/lib/python3.13/encodings/cp950.py +39 -0
- package/python/lib/python3.13/encodings/euc_jis_2004.py +39 -0
- package/python/lib/python3.13/encodings/euc_jisx0213.py +39 -0
- package/python/lib/python3.13/encodings/euc_jp.py +39 -0
- package/python/lib/python3.13/encodings/euc_kr.py +39 -0
- package/python/lib/python3.13/encodings/gb18030.py +39 -0
- package/python/lib/python3.13/encodings/gb2312.py +39 -0
- package/python/lib/python3.13/encodings/gbk.py +39 -0
- package/python/lib/python3.13/encodings/hex_codec.py +55 -0
- package/python/lib/python3.13/encodings/hp_roman8.py +314 -0
- package/python/lib/python3.13/encodings/hz.py +39 -0
- package/python/lib/python3.13/encodings/idna.py +387 -0
- package/python/lib/python3.13/encodings/iso2022_jp.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_1.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_2.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_2004.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_3.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_ext.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_kr.py +39 -0
- package/python/lib/python3.13/encodings/iso8859_1.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_10.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_11.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_13.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_14.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_15.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_16.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_2.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_3.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_4.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_5.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_6.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_7.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_8.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_9.py +307 -0
- package/python/lib/python3.13/encodings/johab.py +39 -0
- package/python/lib/python3.13/encodings/koi8_r.py +307 -0
- package/python/lib/python3.13/encodings/koi8_t.py +308 -0
- package/python/lib/python3.13/encodings/koi8_u.py +307 -0
- package/python/lib/python3.13/encodings/kz1048.py +307 -0
- package/python/lib/python3.13/encodings/latin_1.py +50 -0
- package/python/lib/python3.13/encodings/mac_arabic.py +698 -0
- package/python/lib/python3.13/encodings/mac_croatian.py +307 -0
- package/python/lib/python3.13/encodings/mac_cyrillic.py +307 -0
- package/python/lib/python3.13/encodings/mac_farsi.py +307 -0
- package/python/lib/python3.13/encodings/mac_greek.py +307 -0
- package/python/lib/python3.13/encodings/mac_iceland.py +307 -0
- package/python/lib/python3.13/encodings/mac_latin2.py +312 -0
- package/python/lib/python3.13/encodings/mac_roman.py +307 -0
- package/python/lib/python3.13/encodings/mac_romanian.py +307 -0
- package/python/lib/python3.13/encodings/mac_turkish.py +307 -0
- package/python/lib/python3.13/encodings/mbcs.py +47 -0
- package/python/lib/python3.13/encodings/oem.py +41 -0
- package/python/lib/python3.13/encodings/palmos.py +308 -0
- package/python/lib/python3.13/encodings/ptcp154.py +312 -0
- package/python/lib/python3.13/encodings/punycode.py +253 -0
- package/python/lib/python3.13/encodings/quopri_codec.py +56 -0
- package/python/lib/python3.13/encodings/raw_unicode_escape.py +46 -0
- package/python/lib/python3.13/encodings/rot_13.py +113 -0
- package/python/lib/python3.13/encodings/shift_jis.py +39 -0
- package/python/lib/python3.13/encodings/shift_jis_2004.py +39 -0
- package/python/lib/python3.13/encodings/shift_jisx0213.py +39 -0
- package/python/lib/python3.13/encodings/tis_620.py +307 -0
- package/python/lib/python3.13/encodings/undefined.py +49 -0
- package/python/lib/python3.13/encodings/unicode_escape.py +46 -0
- package/python/lib/python3.13/encodings/utf_16.py +155 -0
- package/python/lib/python3.13/encodings/utf_16_be.py +42 -0
- package/python/lib/python3.13/encodings/utf_16_le.py +42 -0
- package/python/lib/python3.13/encodings/utf_32.py +150 -0
- package/python/lib/python3.13/encodings/utf_32_be.py +37 -0
- package/python/lib/python3.13/encodings/utf_32_le.py +37 -0
- package/python/lib/python3.13/encodings/utf_7.py +38 -0
- package/python/lib/python3.13/encodings/utf_8.py +42 -0
- package/python/lib/python3.13/encodings/utf_8_sig.py +130 -0
- package/python/lib/python3.13/encodings/uu_codec.py +103 -0
- package/python/lib/python3.13/encodings/zlib_codec.py +77 -0
- package/python/lib/python3.13/enum.py +2183 -0
- package/python/lib/python3.13/filecmp.py +320 -0
- package/python/lib/python3.13/fileinput.py +442 -0
- package/python/lib/python3.13/fnmatch.py +192 -0
- package/python/lib/python3.13/fractions.py +1043 -0
- package/python/lib/python3.13/ftplib.py +975 -0
- package/python/lib/python3.13/functools.py +1036 -0
- package/python/lib/python3.13/genericpath.py +200 -0
- package/python/lib/python3.13/getopt.py +215 -0
- package/python/lib/python3.13/getpass.py +192 -0
- package/python/lib/python3.13/gettext.py +657 -0
- package/python/lib/python3.13/glob.py +572 -0
- package/python/lib/python3.13/graphlib.py +250 -0
- package/python/lib/python3.13/gzip.py +693 -0
- package/python/lib/python3.13/hashlib.py +255 -0
- package/python/lib/python3.13/heapq.py +603 -0
- package/python/lib/python3.13/hmac.py +220 -0
- package/python/lib/python3.13/html/__init__.py +132 -0
- package/python/lib/python3.13/html/entities.py +2513 -0
- package/python/lib/python3.13/html/parser.py +583 -0
- package/python/lib/python3.13/http/__init__.py +202 -0
- package/python/lib/python3.13/http/client.py +1598 -0
- package/python/lib/python3.13/http/cookiejar.py +2122 -0
- package/python/lib/python3.13/http/cookies.py +635 -0
- package/python/lib/python3.13/http/server.py +1355 -0
- package/python/lib/python3.13/imaplib.py +1769 -0
- package/python/lib/python3.13/importlib/__init__.py +136 -0
- package/python/lib/python3.13/importlib/_abc.py +39 -0
- package/python/lib/python3.13/importlib/_bootstrap.py +1559 -0
- package/python/lib/python3.13/importlib/_bootstrap_external.py +1826 -0
- package/python/lib/python3.13/importlib/abc.py +243 -0
- package/python/lib/python3.13/importlib/machinery.py +21 -0
- package/python/lib/python3.13/importlib/metadata/__init__.py +1093 -0
- package/python/lib/python3.13/importlib/metadata/_adapters.py +89 -0
- package/python/lib/python3.13/importlib/metadata/_collections.py +30 -0
- package/python/lib/python3.13/importlib/metadata/_functools.py +104 -0
- package/python/lib/python3.13/importlib/metadata/_itertools.py +73 -0
- package/python/lib/python3.13/importlib/metadata/_meta.py +67 -0
- package/python/lib/python3.13/importlib/metadata/_text.py +99 -0
- package/python/lib/python3.13/importlib/metadata/diagnose.py +21 -0
- package/python/lib/python3.13/importlib/readers.py +12 -0
- package/python/lib/python3.13/importlib/resources/__init__.py +43 -0
- package/python/lib/python3.13/importlib/resources/_adapters.py +168 -0
- package/python/lib/python3.13/importlib/resources/_common.py +211 -0
- package/python/lib/python3.13/importlib/resources/_functional.py +81 -0
- package/python/lib/python3.13/importlib/resources/_itertools.py +38 -0
- package/python/lib/python3.13/importlib/resources/abc.py +173 -0
- package/python/lib/python3.13/importlib/resources/readers.py +203 -0
- package/python/lib/python3.13/importlib/resources/simple.py +106 -0
- package/python/lib/python3.13/importlib/simple.py +14 -0
- package/python/lib/python3.13/importlib/util.py +274 -0
- package/python/lib/python3.13/inspect.py +3479 -0
- package/python/lib/python3.13/io.py +99 -0
- package/python/lib/python3.13/ipaddress.py +2440 -0
- package/python/lib/python3.13/json/__init__.py +365 -0
- package/python/lib/python3.13/json/decoder.py +364 -0
- package/python/lib/python3.13/json/encoder.py +446 -0
- package/python/lib/python3.13/json/scanner.py +73 -0
- package/python/lib/python3.13/json/tool.py +90 -0
- package/python/lib/python3.13/keyword.py +64 -0
- package/python/lib/python3.13/lib-dynload/.empty +0 -0
- package/python/lib/python3.13/lib-dynload/_dbm.cpython-313-x86_64-linux-gnu.so +0 -0
- package/python/lib/python3.13/linecache.py +236 -0
- package/python/lib/python3.13/locale.py +1987 -0
- package/python/lib/python3.13/logging/__init__.py +2330 -0
- package/python/lib/python3.13/logging/config.py +1080 -0
- package/python/lib/python3.13/logging/handlers.py +1629 -0
- package/python/lib/python3.13/lzma.py +364 -0
- package/python/lib/python3.13/mailbox.py +2219 -0
- package/python/lib/python3.13/mimetypes.py +679 -0
- package/python/lib/python3.13/modulefinder.py +671 -0
- package/python/lib/python3.13/multiprocessing/__init__.py +37 -0
- package/python/lib/python3.13/multiprocessing/connection.py +1216 -0
- package/python/lib/python3.13/multiprocessing/context.py +383 -0
- package/python/lib/python3.13/multiprocessing/dummy/__init__.py +126 -0
- package/python/lib/python3.13/multiprocessing/dummy/connection.py +75 -0
- package/python/lib/python3.13/multiprocessing/forkserver.py +373 -0
- package/python/lib/python3.13/multiprocessing/heap.py +337 -0
- package/python/lib/python3.13/multiprocessing/managers.py +1397 -0
- package/python/lib/python3.13/multiprocessing/pool.py +957 -0
- package/python/lib/python3.13/multiprocessing/popen_fork.py +97 -0
- package/python/lib/python3.13/multiprocessing/popen_forkserver.py +74 -0
- package/python/lib/python3.13/multiprocessing/popen_spawn_posix.py +76 -0
- package/python/lib/python3.13/multiprocessing/popen_spawn_win32.py +147 -0
- package/python/lib/python3.13/multiprocessing/process.py +436 -0
- package/python/lib/python3.13/multiprocessing/queues.py +399 -0
- package/python/lib/python3.13/multiprocessing/reduction.py +281 -0
- package/python/lib/python3.13/multiprocessing/resource_sharer.py +154 -0
- package/python/lib/python3.13/multiprocessing/resource_tracker.py +499 -0
- package/python/lib/python3.13/multiprocessing/shared_memory.py +544 -0
- package/python/lib/python3.13/multiprocessing/sharedctypes.py +240 -0
- package/python/lib/python3.13/multiprocessing/spawn.py +307 -0
- package/python/lib/python3.13/multiprocessing/synchronize.py +404 -0
- package/python/lib/python3.13/multiprocessing/util.py +562 -0
- package/python/lib/python3.13/netrc.py +199 -0
- package/python/lib/python3.13/ntpath.py +872 -0
- package/python/lib/python3.13/nturl2path.py +69 -0
- package/python/lib/python3.13/numbers.py +427 -0
- package/python/lib/python3.13/opcode.py +115 -0
- package/python/lib/python3.13/operator.py +467 -0
- package/python/lib/python3.13/optparse.py +1681 -0
- package/python/lib/python3.13/os.py +1184 -0
- package/python/lib/python3.13/pathlib/__init__.py +12 -0
- package/python/lib/python3.13/pathlib/_abc.py +930 -0
- package/python/lib/python3.13/pathlib/_local.py +861 -0
- package/python/lib/python3.13/pdb.py +2550 -0
- package/python/lib/python3.13/pickle.py +1860 -0
- package/python/lib/python3.13/pickletools.py +2904 -0
- package/python/lib/python3.13/pkgutil.py +529 -0
- package/python/lib/python3.13/platform.py +1454 -0
- package/python/lib/python3.13/plistlib.py +948 -0
- package/python/lib/python3.13/poplib.py +477 -0
- package/python/lib/python3.13/posixpath.py +578 -0
- package/python/lib/python3.13/pprint.py +658 -0
- package/python/lib/python3.13/profile.py +616 -0
- package/python/lib/python3.13/pstats.py +778 -0
- package/python/lib/python3.13/pty.py +211 -0
- package/python/lib/python3.13/py_compile.py +212 -0
- package/python/lib/python3.13/pyclbr.py +314 -0
- package/python/lib/python3.13/pydoc.py +2861 -0
- package/python/lib/python3.13/queue.py +383 -0
- package/python/lib/python3.13/quopri.py +237 -0
- package/python/lib/python3.13/random.py +1078 -0
- package/python/lib/python3.13/re/__init__.py +428 -0
- package/python/lib/python3.13/re/_casefix.py +106 -0
- package/python/lib/python3.13/re/_compiler.py +768 -0
- package/python/lib/python3.13/re/_constants.py +222 -0
- package/python/lib/python3.13/re/_parser.py +1081 -0
- package/python/lib/python3.13/reprlib.py +230 -0
- package/python/lib/python3.13/rlcompleter.py +222 -0
- package/python/lib/python3.13/runpy.py +326 -0
- package/python/lib/python3.13/sched.py +167 -0
- package/python/lib/python3.13/secrets.py +71 -0
- package/python/lib/python3.13/selectors.py +603 -0
- package/python/lib/python3.13/shelve.py +250 -0
- package/python/lib/python3.13/shlex.py +345 -0
- package/python/lib/python3.13/shutil.py +1569 -0
- package/python/lib/python3.13/signal.py +94 -0
- package/python/lib/python3.13/site.py +773 -0
- package/python/lib/python3.13/smtplib.py +1123 -0
- package/python/lib/python3.13/socket.py +988 -0
- package/python/lib/python3.13/socketserver.py +863 -0
- package/python/lib/python3.13/sqlite3/__init__.py +70 -0
- package/python/lib/python3.13/sqlite3/__main__.py +139 -0
- package/python/lib/python3.13/sqlite3/dbapi2.py +108 -0
- package/python/lib/python3.13/sqlite3/dump.py +118 -0
- package/python/lib/python3.13/sre_compile.py +7 -0
- package/python/lib/python3.13/sre_constants.py +7 -0
- package/python/lib/python3.13/sre_parse.py +7 -0
- package/python/lib/python3.13/ssl.py +1541 -0
- package/python/lib/python3.13/stat.py +212 -0
- package/python/lib/python3.13/statistics.py +1817 -0
- package/python/lib/python3.13/string.py +314 -0
- package/python/lib/python3.13/stringprep.py +272 -0
- package/python/lib/python3.13/struct.py +15 -0
- package/python/lib/python3.13/subprocess.py +2258 -0
- package/python/lib/python3.13/symtable.py +414 -0
- package/python/lib/python3.13/sysconfig/__init__.py +734 -0
- package/python/lib/python3.13/sysconfig/__main__.py +248 -0
- package/python/lib/python3.13/tabnanny.py +340 -0
- package/python/lib/python3.13/tarfile.py +3136 -0
- package/python/lib/python3.13/tempfile.py +958 -0
- package/python/lib/python3.13/textwrap.py +497 -0
- package/python/lib/python3.13/this.py +28 -0
- package/python/lib/python3.13/threading.py +1602 -0
- package/python/lib/python3.13/timeit.py +381 -0
- package/python/lib/python3.13/token.py +141 -0
- package/python/lib/python3.13/tokenize.py +592 -0
- package/python/lib/python3.13/tomllib/__init__.py +10 -0
- package/python/lib/python3.13/tomllib/_parser.py +703 -0
- package/python/lib/python3.13/tomllib/_re.py +107 -0
- package/python/lib/python3.13/tomllib/_types.py +10 -0
- package/python/lib/python3.13/tomllib/mypy.ini +15 -0
- package/python/lib/python3.13/trace.py +754 -0
- package/python/lib/python3.13/traceback.py +1639 -0
- package/python/lib/python3.13/tracemalloc.py +560 -0
- package/python/lib/python3.13/tty.py +73 -0
- package/python/lib/python3.13/types.py +346 -0
- package/python/lib/python3.13/typing.py +3846 -0
- package/python/lib/python3.13/unittest/__init__.py +80 -0
- package/python/lib/python3.13/unittest/__main__.py +18 -0
- package/python/lib/python3.13/unittest/_log.py +86 -0
- package/python/lib/python3.13/unittest/async_case.py +146 -0
- package/python/lib/python3.13/unittest/case.py +1478 -0
- package/python/lib/python3.13/unittest/loader.py +460 -0
- package/python/lib/python3.13/unittest/main.py +280 -0
- package/python/lib/python3.13/unittest/mock.py +3189 -0
- package/python/lib/python3.13/unittest/result.py +256 -0
- package/python/lib/python3.13/unittest/runner.py +292 -0
- package/python/lib/python3.13/unittest/signals.py +71 -0
- package/python/lib/python3.13/unittest/suite.py +379 -0
- package/python/lib/python3.13/unittest/util.py +170 -0
- package/python/lib/python3.13/urllib/__init__.py +0 -0
- package/python/lib/python3.13/urllib/error.py +74 -0
- package/python/lib/python3.13/urllib/parse.py +1264 -0
- package/python/lib/python3.13/urllib/request.py +2796 -0
- package/python/lib/python3.13/urllib/response.py +84 -0
- package/python/lib/python3.13/urllib/robotparser.py +363 -0
- package/python/lib/python3.13/uuid.py +784 -0
- package/python/lib/python3.13/warnings.py +735 -0
- package/python/lib/python3.13/wave.py +665 -0
- package/python/lib/python3.13/weakref.py +674 -0
- package/python/lib/python3.13/webbrowser.py +724 -0
- package/python/lib/python3.13/wsgiref/__init__.py +25 -0
- package/python/lib/python3.13/wsgiref/handlers.py +575 -0
- package/python/lib/python3.13/wsgiref/headers.py +192 -0
- package/python/lib/python3.13/wsgiref/simple_server.py +161 -0
- package/python/lib/python3.13/wsgiref/types.py +54 -0
- package/python/lib/python3.13/wsgiref/util.py +159 -0
- package/python/lib/python3.13/wsgiref/validate.py +438 -0
- package/python/lib/python3.13/xml/__init__.py +20 -0
- package/python/lib/python3.13/xml/dom/NodeFilter.py +27 -0
- package/python/lib/python3.13/xml/dom/__init__.py +140 -0
- package/python/lib/python3.13/xml/dom/domreg.py +99 -0
- package/python/lib/python3.13/xml/dom/expatbuilder.py +962 -0
- package/python/lib/python3.13/xml/dom/minicompat.py +109 -0
- package/python/lib/python3.13/xml/dom/minidom.py +2024 -0
- package/python/lib/python3.13/xml/dom/pulldom.py +336 -0
- package/python/lib/python3.13/xml/dom/xmlbuilder.py +389 -0
- package/python/lib/python3.13/xml/etree/ElementInclude.py +186 -0
- package/python/lib/python3.13/xml/etree/ElementPath.py +430 -0
- package/python/lib/python3.13/xml/etree/ElementTree.py +2116 -0
- package/python/lib/python3.13/xml/etree/__init__.py +33 -0
- package/python/lib/python3.13/xml/etree/cElementTree.py +3 -0
- package/python/lib/python3.13/xml/parsers/__init__.py +8 -0
- package/python/lib/python3.13/xml/parsers/expat.py +8 -0
- package/python/lib/python3.13/xml/sax/__init__.py +94 -0
- package/python/lib/python3.13/xml/sax/_exceptions.py +127 -0
- package/python/lib/python3.13/xml/sax/expatreader.py +454 -0
- package/python/lib/python3.13/xml/sax/handler.py +387 -0
- package/python/lib/python3.13/xml/sax/saxutils.py +369 -0
- package/python/lib/python3.13/xml/sax/xmlreader.py +378 -0
- package/python/lib/python3.13/xmlrpc/__init__.py +1 -0
- package/python/lib/python3.13/xmlrpc/client.py +1503 -0
- package/python/lib/python3.13/xmlrpc/server.py +1002 -0
- package/python/lib/python3.13/zipapp.py +229 -0
- package/python/lib/python3.13/zipfile/__init__.py +2391 -0
- package/python/lib/python3.13/zipfile/__main__.py +4 -0
- package/python/lib/python3.13/zipfile/_path/__init__.py +452 -0
- package/python/lib/python3.13/zipfile/_path/glob.py +113 -0
- package/python/lib/python3.13/zipimport.py +803 -0
- package/python/lib/python3.13/zoneinfo/__init__.py +34 -0
- package/python/lib/python3.13/zoneinfo/_common.py +172 -0
- package/python/lib/python3.13/zoneinfo/_tzpath.py +189 -0
- package/python/lib/python3.13/zoneinfo/_zoneinfo.py +779 -0
- package/python/licenses/LICENSE.bdb.txt +126 -0
- package/python/licenses/LICENSE.bzip2.txt +37 -0
- package/python/licenses/LICENSE.cpython.txt +771 -0
- package/python/licenses/LICENSE.expat.txt +21 -0
- package/python/licenses/LICENSE.libX11.txt +942 -0
- package/python/licenses/LICENSE.libXau.txt +21 -0
- package/python/licenses/LICENSE.libedit.txt +29 -0
- package/python/licenses/LICENSE.libffi.txt +21 -0
- package/python/licenses/LICENSE.liblzma.txt +13 -0
- package/python/licenses/LICENSE.libuuid.txt +27 -0
- package/python/licenses/LICENSE.libxcb.txt +30 -0
- package/python/licenses/LICENSE.mpdecimal.txt +24 -0
- package/python/licenses/LICENSE.ncurses.txt +29 -0
- package/python/licenses/LICENSE.openssl-1.1.txt +124 -0
- package/python/licenses/LICENSE.openssl-3.txt +177 -0
- package/python/licenses/LICENSE.sqlite.txt +23 -0
- package/python/licenses/LICENSE.tcl.txt +40 -0
- package/python/licenses/LICENSE.tix.txt +54 -0
- package/python/licenses/LICENSE.zlib.txt +21 -0
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
"""Python implementations of some algorithms for use by longobject.c.
|
|
2
|
+
The goal is to provide asymptotically faster algorithms that can be
|
|
3
|
+
used for operations on integers with many digits. In those cases, the
|
|
4
|
+
performance overhead of the Python implementation is not significant
|
|
5
|
+
since the asymptotic behavior is what dominates runtime. Functions
|
|
6
|
+
provided by this module should be considered private and not part of any
|
|
7
|
+
public API.
|
|
8
|
+
|
|
9
|
+
Note: for ease of maintainability, please prefer clear code and avoid
|
|
10
|
+
"micro-optimizations". This module will only be imported and used for
|
|
11
|
+
integers with a huge number of digits. Saving a few microseconds with
|
|
12
|
+
tricky or non-obvious code is not worth it. For people looking for
|
|
13
|
+
maximum performance, they should use something like gmpy2."""
|
|
14
|
+
|
|
15
|
+
import re
|
|
16
|
+
import decimal
|
|
17
|
+
try:
|
|
18
|
+
import _decimal
|
|
19
|
+
except ImportError:
|
|
20
|
+
_decimal = None
|
|
21
|
+
|
|
22
|
+
# A number of functions have this form, where `w` is a desired number of
|
|
23
|
+
# digits in base `base`:
|
|
24
|
+
#
|
|
25
|
+
# def inner(...w...):
|
|
26
|
+
# if w <= LIMIT:
|
|
27
|
+
# return something
|
|
28
|
+
# lo = w >> 1
|
|
29
|
+
# hi = w - lo
|
|
30
|
+
# something involving base**lo, inner(...lo...), j, and inner(...hi...)
|
|
31
|
+
# figure out largest w needed
|
|
32
|
+
# result = inner(w)
|
|
33
|
+
#
|
|
34
|
+
# They all had some on-the-fly scheme to cache `base**lo` results for reuse.
|
|
35
|
+
# Power is costly.
|
|
36
|
+
#
|
|
37
|
+
# This routine aims to compute all amd only the needed powers in advance, as
|
|
38
|
+
# efficiently as reasonably possible. This isn't trivial, and all the
|
|
39
|
+
# on-the-fly methods did needless work in many cases. The driving code above
|
|
40
|
+
# changes to:
|
|
41
|
+
#
|
|
42
|
+
# figure out largest w needed
|
|
43
|
+
# mycache = compute_powers(w, base, LIMIT)
|
|
44
|
+
# result = inner(w)
|
|
45
|
+
#
|
|
46
|
+
# and `mycache[lo]` replaces `base**lo` in the inner function.
|
|
47
|
+
#
|
|
48
|
+
# While this does give minor speedups (a few percent at best), the primary
|
|
49
|
+
# intent is to simplify the functions using this, by eliminating the need for
|
|
50
|
+
# them to craft their own ad-hoc caching schemes.
|
|
51
|
+
def compute_powers(w, base, more_than, show=False):
|
|
52
|
+
seen = set()
|
|
53
|
+
need = set()
|
|
54
|
+
ws = {w}
|
|
55
|
+
while ws:
|
|
56
|
+
w = ws.pop() # any element is fine to use next
|
|
57
|
+
if w in seen or w <= more_than:
|
|
58
|
+
continue
|
|
59
|
+
seen.add(w)
|
|
60
|
+
lo = w >> 1
|
|
61
|
+
# only _need_ lo here; some other path may, or may not, need hi
|
|
62
|
+
need.add(lo)
|
|
63
|
+
ws.add(lo)
|
|
64
|
+
if w & 1:
|
|
65
|
+
ws.add(lo + 1)
|
|
66
|
+
|
|
67
|
+
d = {}
|
|
68
|
+
if not need:
|
|
69
|
+
return d
|
|
70
|
+
it = iter(sorted(need))
|
|
71
|
+
first = next(it)
|
|
72
|
+
if show:
|
|
73
|
+
print("pow at", first)
|
|
74
|
+
d[first] = base ** first
|
|
75
|
+
for this in it:
|
|
76
|
+
if this - 1 in d:
|
|
77
|
+
if show:
|
|
78
|
+
print("* base at", this)
|
|
79
|
+
d[this] = d[this - 1] * base # cheap
|
|
80
|
+
else:
|
|
81
|
+
lo = this >> 1
|
|
82
|
+
hi = this - lo
|
|
83
|
+
assert lo in d
|
|
84
|
+
if show:
|
|
85
|
+
print("square at", this)
|
|
86
|
+
# Multiplying a bigint by itself (same object!) is about twice
|
|
87
|
+
# as fast in CPython.
|
|
88
|
+
sq = d[lo] * d[lo]
|
|
89
|
+
if hi != lo:
|
|
90
|
+
assert hi == lo + 1
|
|
91
|
+
if show:
|
|
92
|
+
print(" and * base")
|
|
93
|
+
sq *= base
|
|
94
|
+
d[this] = sq
|
|
95
|
+
return d
|
|
96
|
+
|
|
97
|
+
_unbounded_dec_context = decimal.getcontext().copy()
|
|
98
|
+
_unbounded_dec_context.prec = decimal.MAX_PREC
|
|
99
|
+
_unbounded_dec_context.Emax = decimal.MAX_EMAX
|
|
100
|
+
_unbounded_dec_context.Emin = decimal.MIN_EMIN
|
|
101
|
+
_unbounded_dec_context.traps[decimal.Inexact] = 1 # sanity check
|
|
102
|
+
|
|
103
|
+
def int_to_decimal(n):
|
|
104
|
+
"""Asymptotically fast conversion of an 'int' to Decimal."""
|
|
105
|
+
|
|
106
|
+
# Function due to Tim Peters. See GH issue #90716 for details.
|
|
107
|
+
# https://github.com/python/cpython/issues/90716
|
|
108
|
+
#
|
|
109
|
+
# The implementation in longobject.c of base conversion algorithms
|
|
110
|
+
# between power-of-2 and non-power-of-2 bases are quadratic time.
|
|
111
|
+
# This function implements a divide-and-conquer algorithm that is
|
|
112
|
+
# faster for large numbers. Builds an equal decimal.Decimal in a
|
|
113
|
+
# "clever" recursive way. If we want a string representation, we
|
|
114
|
+
# apply str to _that_.
|
|
115
|
+
|
|
116
|
+
from decimal import Decimal as D
|
|
117
|
+
BITLIM = 200
|
|
118
|
+
|
|
119
|
+
# Don't bother caching the "lo" mask in this; the time to compute it is
|
|
120
|
+
# tiny compared to the multiply.
|
|
121
|
+
def inner(n, w):
|
|
122
|
+
if w <= BITLIM:
|
|
123
|
+
return D(n)
|
|
124
|
+
w2 = w >> 1
|
|
125
|
+
hi = n >> w2
|
|
126
|
+
lo = n & ((1 << w2) - 1)
|
|
127
|
+
return inner(lo, w2) + inner(hi, w - w2) * w2pow[w2]
|
|
128
|
+
|
|
129
|
+
with decimal.localcontext(_unbounded_dec_context):
|
|
130
|
+
nbits = n.bit_length()
|
|
131
|
+
w2pow = compute_powers(nbits, D(2), BITLIM)
|
|
132
|
+
if n < 0:
|
|
133
|
+
negate = True
|
|
134
|
+
n = -n
|
|
135
|
+
else:
|
|
136
|
+
negate = False
|
|
137
|
+
result = inner(n, nbits)
|
|
138
|
+
if negate:
|
|
139
|
+
result = -result
|
|
140
|
+
return result
|
|
141
|
+
|
|
142
|
+
def int_to_decimal_string(n):
|
|
143
|
+
"""Asymptotically fast conversion of an 'int' to a decimal string."""
|
|
144
|
+
w = n.bit_length()
|
|
145
|
+
if w > 450_000 and _decimal is not None:
|
|
146
|
+
# It is only usable with the C decimal implementation.
|
|
147
|
+
# _pydecimal.py calls str() on very large integers, which in its
|
|
148
|
+
# turn calls int_to_decimal_string(), causing very deep recursion.
|
|
149
|
+
return str(int_to_decimal(n))
|
|
150
|
+
|
|
151
|
+
# Fallback algorithm for the case when the C decimal module isn't
|
|
152
|
+
# available. This algorithm is asymptotically worse than the algorithm
|
|
153
|
+
# using the decimal module, but better than the quadratic time
|
|
154
|
+
# implementation in longobject.c.
|
|
155
|
+
|
|
156
|
+
DIGLIM = 1000
|
|
157
|
+
def inner(n, w):
|
|
158
|
+
if w <= DIGLIM:
|
|
159
|
+
return str(n)
|
|
160
|
+
w2 = w >> 1
|
|
161
|
+
hi, lo = divmod(n, pow10[w2])
|
|
162
|
+
return inner(hi, w - w2) + inner(lo, w2).zfill(w2)
|
|
163
|
+
|
|
164
|
+
# The estimation of the number of decimal digits.
|
|
165
|
+
# There is no harm in small error. If we guess too large, there may
|
|
166
|
+
# be leading 0's that need to be stripped. If we guess too small, we
|
|
167
|
+
# may need to call str() recursively for the remaining highest digits,
|
|
168
|
+
# which can still potentially be a large integer. This is manifested
|
|
169
|
+
# only if the number has way more than 10**15 digits, that exceeds
|
|
170
|
+
# the 52-bit physical address limit in both Intel64 and AMD64.
|
|
171
|
+
w = int(w * 0.3010299956639812 + 1) # log10(2)
|
|
172
|
+
pow10 = compute_powers(w, 5, DIGLIM)
|
|
173
|
+
for k, v in pow10.items():
|
|
174
|
+
pow10[k] = v << k # 5**k << k == 5**k * 2**k == 10**k
|
|
175
|
+
if n < 0:
|
|
176
|
+
n = -n
|
|
177
|
+
sign = '-'
|
|
178
|
+
else:
|
|
179
|
+
sign = ''
|
|
180
|
+
s = inner(n, w)
|
|
181
|
+
if s[0] == '0' and n:
|
|
182
|
+
# If our guess of w is too large, there may be leading 0's that
|
|
183
|
+
# need to be stripped.
|
|
184
|
+
s = s.lstrip('0')
|
|
185
|
+
return sign + s
|
|
186
|
+
|
|
187
|
+
def _str_to_int_inner(s):
|
|
188
|
+
"""Asymptotically fast conversion of a 'str' to an 'int'."""
|
|
189
|
+
|
|
190
|
+
# Function due to Bjorn Martinsson. See GH issue #90716 for details.
|
|
191
|
+
# https://github.com/python/cpython/issues/90716
|
|
192
|
+
#
|
|
193
|
+
# The implementation in longobject.c of base conversion algorithms
|
|
194
|
+
# between power-of-2 and non-power-of-2 bases are quadratic time.
|
|
195
|
+
# This function implements a divide-and-conquer algorithm making use
|
|
196
|
+
# of Python's built in big int multiplication. Since Python uses the
|
|
197
|
+
# Karatsuba algorithm for multiplication, the time complexity
|
|
198
|
+
# of this function is O(len(s)**1.58).
|
|
199
|
+
|
|
200
|
+
DIGLIM = 2048
|
|
201
|
+
|
|
202
|
+
def inner(a, b):
|
|
203
|
+
if b - a <= DIGLIM:
|
|
204
|
+
return int(s[a:b])
|
|
205
|
+
mid = (a + b + 1) >> 1
|
|
206
|
+
return (inner(mid, b)
|
|
207
|
+
+ ((inner(a, mid) * w5pow[b - mid])
|
|
208
|
+
<< (b - mid)))
|
|
209
|
+
|
|
210
|
+
w5pow = compute_powers(len(s), 5, DIGLIM)
|
|
211
|
+
return inner(0, len(s))
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def int_from_string(s):
|
|
215
|
+
"""Asymptotically fast version of PyLong_FromString(), conversion
|
|
216
|
+
of a string of decimal digits into an 'int'."""
|
|
217
|
+
# PyLong_FromString() has already removed leading +/-, checked for invalid
|
|
218
|
+
# use of underscore characters, checked that string consists of only digits
|
|
219
|
+
# and underscores, and stripped leading whitespace. The input can still
|
|
220
|
+
# contain underscores and have trailing whitespace.
|
|
221
|
+
s = s.rstrip().replace('_', '')
|
|
222
|
+
return _str_to_int_inner(s)
|
|
223
|
+
|
|
224
|
+
def str_to_int(s):
|
|
225
|
+
"""Asymptotically fast version of decimal string to 'int' conversion."""
|
|
226
|
+
# FIXME: this doesn't support the full syntax that int() supports.
|
|
227
|
+
m = re.match(r'\s*([+-]?)([0-9_]+)\s*', s)
|
|
228
|
+
if not m:
|
|
229
|
+
raise ValueError('invalid literal for int() with base 10')
|
|
230
|
+
v = int_from_string(m.group(2))
|
|
231
|
+
if m.group(1) == '-':
|
|
232
|
+
v = -v
|
|
233
|
+
return v
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
# Fast integer division, based on code from Mark Dickinson, fast_div.py
|
|
237
|
+
# GH-47701. Additional refinements and optimizations by Bjorn Martinsson. The
|
|
238
|
+
# algorithm is due to Burnikel and Ziegler, in their paper "Fast Recursive
|
|
239
|
+
# Division".
|
|
240
|
+
|
|
241
|
+
_DIV_LIMIT = 4000
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
def _div2n1n(a, b, n):
|
|
245
|
+
"""Divide a 2n-bit nonnegative integer a by an n-bit positive integer
|
|
246
|
+
b, using a recursive divide-and-conquer algorithm.
|
|
247
|
+
|
|
248
|
+
Inputs:
|
|
249
|
+
n is a positive integer
|
|
250
|
+
b is a positive integer with exactly n bits
|
|
251
|
+
a is a nonnegative integer such that a < 2**n * b
|
|
252
|
+
|
|
253
|
+
Output:
|
|
254
|
+
(q, r) such that a = b*q+r and 0 <= r < b.
|
|
255
|
+
|
|
256
|
+
"""
|
|
257
|
+
if a.bit_length() - n <= _DIV_LIMIT:
|
|
258
|
+
return divmod(a, b)
|
|
259
|
+
pad = n & 1
|
|
260
|
+
if pad:
|
|
261
|
+
a <<= 1
|
|
262
|
+
b <<= 1
|
|
263
|
+
n += 1
|
|
264
|
+
half_n = n >> 1
|
|
265
|
+
mask = (1 << half_n) - 1
|
|
266
|
+
b1, b2 = b >> half_n, b & mask
|
|
267
|
+
q1, r = _div3n2n(a >> n, (a >> half_n) & mask, b, b1, b2, half_n)
|
|
268
|
+
q2, r = _div3n2n(r, a & mask, b, b1, b2, half_n)
|
|
269
|
+
if pad:
|
|
270
|
+
r >>= 1
|
|
271
|
+
return q1 << half_n | q2, r
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def _div3n2n(a12, a3, b, b1, b2, n):
|
|
275
|
+
"""Helper function for _div2n1n; not intended to be called directly."""
|
|
276
|
+
if a12 >> n == b1:
|
|
277
|
+
q, r = (1 << n) - 1, a12 - (b1 << n) + b1
|
|
278
|
+
else:
|
|
279
|
+
q, r = _div2n1n(a12, b1, n)
|
|
280
|
+
r = (r << n | a3) - q * b2
|
|
281
|
+
while r < 0:
|
|
282
|
+
q -= 1
|
|
283
|
+
r += b
|
|
284
|
+
return q, r
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def _int2digits(a, n):
|
|
288
|
+
"""Decompose non-negative int a into base 2**n
|
|
289
|
+
|
|
290
|
+
Input:
|
|
291
|
+
a is a non-negative integer
|
|
292
|
+
|
|
293
|
+
Output:
|
|
294
|
+
List of the digits of a in base 2**n in little-endian order,
|
|
295
|
+
meaning the most significant digit is last. The most
|
|
296
|
+
significant digit is guaranteed to be non-zero.
|
|
297
|
+
If a is 0 then the output is an empty list.
|
|
298
|
+
|
|
299
|
+
"""
|
|
300
|
+
a_digits = [0] * ((a.bit_length() + n - 1) // n)
|
|
301
|
+
|
|
302
|
+
def inner(x, L, R):
|
|
303
|
+
if L + 1 == R:
|
|
304
|
+
a_digits[L] = x
|
|
305
|
+
return
|
|
306
|
+
mid = (L + R) >> 1
|
|
307
|
+
shift = (mid - L) * n
|
|
308
|
+
upper = x >> shift
|
|
309
|
+
lower = x ^ (upper << shift)
|
|
310
|
+
inner(lower, L, mid)
|
|
311
|
+
inner(upper, mid, R)
|
|
312
|
+
|
|
313
|
+
if a:
|
|
314
|
+
inner(a, 0, len(a_digits))
|
|
315
|
+
return a_digits
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
def _digits2int(digits, n):
|
|
319
|
+
"""Combine base-2**n digits into an int. This function is the
|
|
320
|
+
inverse of `_int2digits`. For more details, see _int2digits.
|
|
321
|
+
"""
|
|
322
|
+
|
|
323
|
+
def inner(L, R):
|
|
324
|
+
if L + 1 == R:
|
|
325
|
+
return digits[L]
|
|
326
|
+
mid = (L + R) >> 1
|
|
327
|
+
shift = (mid - L) * n
|
|
328
|
+
return (inner(mid, R) << shift) + inner(L, mid)
|
|
329
|
+
|
|
330
|
+
return inner(0, len(digits)) if digits else 0
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
def _divmod_pos(a, b):
|
|
334
|
+
"""Divide a non-negative integer a by a positive integer b, giving
|
|
335
|
+
quotient and remainder."""
|
|
336
|
+
# Use grade-school algorithm in base 2**n, n = nbits(b)
|
|
337
|
+
n = b.bit_length()
|
|
338
|
+
a_digits = _int2digits(a, n)
|
|
339
|
+
|
|
340
|
+
r = 0
|
|
341
|
+
q_digits = []
|
|
342
|
+
for a_digit in reversed(a_digits):
|
|
343
|
+
q_digit, r = _div2n1n((r << n) + a_digit, b, n)
|
|
344
|
+
q_digits.append(q_digit)
|
|
345
|
+
q_digits.reverse()
|
|
346
|
+
q = _digits2int(q_digits, n)
|
|
347
|
+
return q, r
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
def int_divmod(a, b):
|
|
351
|
+
"""Asymptotically fast replacement for divmod, for 'int'.
|
|
352
|
+
Its time complexity is O(n**1.58), where n = #bits(a) + #bits(b).
|
|
353
|
+
"""
|
|
354
|
+
if b == 0:
|
|
355
|
+
raise ZeroDivisionError
|
|
356
|
+
elif b < 0:
|
|
357
|
+
q, r = int_divmod(-a, -b)
|
|
358
|
+
return q, -r
|
|
359
|
+
elif a < 0:
|
|
360
|
+
q, r = int_divmod(~a, b)
|
|
361
|
+
return ~q, b + ~r
|
|
362
|
+
else:
|
|
363
|
+
return _divmod_pos(a, b)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Copyright 2000-2008 Michael Hudson-Doyle <micahel@gmail.com>
|
|
2
|
+
# Armin Rigo
|
|
3
|
+
#
|
|
4
|
+
# All Rights Reserved
|
|
5
|
+
#
|
|
6
|
+
#
|
|
7
|
+
# Permission to use, copy, modify, and distribute this software and
|
|
8
|
+
# its documentation for any purpose is hereby granted without fee,
|
|
9
|
+
# provided that the above copyright notice appear in all copies and
|
|
10
|
+
# that both that copyright notice and this permission notice appear in
|
|
11
|
+
# supporting documentation.
|
|
12
|
+
#
|
|
13
|
+
# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
|
14
|
+
# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
15
|
+
# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
|
|
16
|
+
# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
|
17
|
+
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
|
|
18
|
+
# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
19
|
+
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Important: don't add things to this module, as they will end up in the REPL's
|
|
2
|
+
# default globals. Use _pyrepl.main instead.
|
|
3
|
+
|
|
4
|
+
# Avoid caching this file by linecache and incorrectly report tracebacks.
|
|
5
|
+
# See https://github.com/python/cpython/issues/129098.
|
|
6
|
+
__spec__ = __loader__ = None
|
|
7
|
+
|
|
8
|
+
if __name__ == "__main__":
|
|
9
|
+
from .main import interactive_console as __pyrepl_interactive_console
|
|
10
|
+
__pyrepl_interactive_console()
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Minimal '_curses' module, the low-level interface for curses module
|
|
2
|
+
which is not meant to be used directly.
|
|
3
|
+
|
|
4
|
+
Based on ctypes. It's too incomplete to be really called '_curses', so
|
|
5
|
+
to use it, you have to import it and stick it in sys.modules['_curses']
|
|
6
|
+
manually.
|
|
7
|
+
|
|
8
|
+
Note that there is also a built-in module _minimal_curses which will
|
|
9
|
+
hide this one if compiled in.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import ctypes
|
|
13
|
+
import ctypes.util
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class error(Exception):
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _find_clib() -> str:
|
|
21
|
+
trylibs = ["ncursesw", "ncurses", "curses"]
|
|
22
|
+
|
|
23
|
+
for lib in trylibs:
|
|
24
|
+
path = ctypes.util.find_library(lib)
|
|
25
|
+
if path:
|
|
26
|
+
return path
|
|
27
|
+
raise ModuleNotFoundError("curses library not found", name="_pyrepl._minimal_curses")
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
_clibpath = _find_clib()
|
|
31
|
+
clib = ctypes.cdll.LoadLibrary(_clibpath)
|
|
32
|
+
|
|
33
|
+
clib.setupterm.argtypes = [ctypes.c_char_p, ctypes.c_int, ctypes.POINTER(ctypes.c_int)]
|
|
34
|
+
clib.setupterm.restype = ctypes.c_int
|
|
35
|
+
|
|
36
|
+
clib.tigetstr.argtypes = [ctypes.c_char_p]
|
|
37
|
+
clib.tigetstr.restype = ctypes.c_ssize_t
|
|
38
|
+
|
|
39
|
+
clib.tparm.argtypes = [ctypes.c_char_p] + 9 * [ctypes.c_int] # type: ignore[operator]
|
|
40
|
+
clib.tparm.restype = ctypes.c_char_p
|
|
41
|
+
|
|
42
|
+
OK = 0
|
|
43
|
+
ERR = -1
|
|
44
|
+
|
|
45
|
+
# ____________________________________________________________
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def setupterm(termstr, fd):
|
|
49
|
+
err = ctypes.c_int(0)
|
|
50
|
+
result = clib.setupterm(termstr, fd, ctypes.byref(err))
|
|
51
|
+
if result == ERR:
|
|
52
|
+
raise error("setupterm() failed (err=%d)" % err.value)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def tigetstr(cap):
|
|
56
|
+
if not isinstance(cap, bytes):
|
|
57
|
+
cap = cap.encode("ascii")
|
|
58
|
+
result = clib.tigetstr(cap)
|
|
59
|
+
if result == ERR:
|
|
60
|
+
return None
|
|
61
|
+
return ctypes.cast(result, ctypes.c_char_p).value
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def tparm(str, i1=0, i2=0, i3=0, i4=0, i5=0, i6=0, i7=0, i8=0, i9=0):
|
|
65
|
+
result = clib.tparm(str, i1, i2, i3, i4, i5, i6, i7, i8, i9)
|
|
66
|
+
if result is None:
|
|
67
|
+
raise error("tparm() returned NULL")
|
|
68
|
+
return result
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
import traceback
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
TYPE_CHECKING = False
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from threading import Thread
|
|
10
|
+
from types import TracebackType
|
|
11
|
+
from typing import Protocol
|
|
12
|
+
|
|
13
|
+
class ExceptHookArgs(Protocol):
|
|
14
|
+
@property
|
|
15
|
+
def exc_type(self) -> type[BaseException]: ...
|
|
16
|
+
@property
|
|
17
|
+
def exc_value(self) -> BaseException | None: ...
|
|
18
|
+
@property
|
|
19
|
+
def exc_traceback(self) -> TracebackType | None: ...
|
|
20
|
+
@property
|
|
21
|
+
def thread(self) -> Thread | None: ...
|
|
22
|
+
|
|
23
|
+
class ShowExceptions(Protocol):
|
|
24
|
+
def __call__(self) -> int: ...
|
|
25
|
+
def add(self, s: str) -> None: ...
|
|
26
|
+
|
|
27
|
+
from .reader import Reader
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def install_threading_hook(reader: Reader) -> None:
|
|
31
|
+
import threading
|
|
32
|
+
|
|
33
|
+
@dataclass
|
|
34
|
+
class ExceptHookHandler:
|
|
35
|
+
lock: threading.Lock = field(default_factory=threading.Lock)
|
|
36
|
+
messages: list[str] = field(default_factory=list)
|
|
37
|
+
|
|
38
|
+
def show(self) -> int:
|
|
39
|
+
count = 0
|
|
40
|
+
with self.lock:
|
|
41
|
+
if not self.messages:
|
|
42
|
+
return 0
|
|
43
|
+
reader.restore()
|
|
44
|
+
for tb in self.messages:
|
|
45
|
+
count += 1
|
|
46
|
+
if tb:
|
|
47
|
+
print(tb)
|
|
48
|
+
self.messages.clear()
|
|
49
|
+
reader.scheduled_commands.append("ctrl-c")
|
|
50
|
+
reader.prepare()
|
|
51
|
+
return count
|
|
52
|
+
|
|
53
|
+
def add(self, s: str) -> None:
|
|
54
|
+
with self.lock:
|
|
55
|
+
self.messages.append(s)
|
|
56
|
+
|
|
57
|
+
def exception(self, args: ExceptHookArgs) -> None:
|
|
58
|
+
lines = traceback.format_exception(
|
|
59
|
+
args.exc_type,
|
|
60
|
+
args.exc_value,
|
|
61
|
+
args.exc_traceback,
|
|
62
|
+
colorize=reader.can_colorize,
|
|
63
|
+
) # type: ignore[call-overload]
|
|
64
|
+
pre = f"\nException in {args.thread.name}:\n" if args.thread else "\n"
|
|
65
|
+
tb = pre + "".join(lines)
|
|
66
|
+
self.add(tb)
|
|
67
|
+
|
|
68
|
+
def __call__(self) -> int:
|
|
69
|
+
return self.show()
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
handler = ExceptHookHandler()
|
|
73
|
+
reader.threading_hook = handler
|
|
74
|
+
threading.excepthook = handler.exception
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Copyright 2000-2008 Michael Hudson-Doyle <micahel@gmail.com>
|
|
2
|
+
# Armin Rigo
|
|
3
|
+
#
|
|
4
|
+
# All Rights Reserved
|
|
5
|
+
#
|
|
6
|
+
#
|
|
7
|
+
# Permission to use, copy, modify, and distribute this software and
|
|
8
|
+
# its documentation for any purpose is hereby granted without fee,
|
|
9
|
+
# provided that the above copyright notice appear in all copies and
|
|
10
|
+
# that both that copyright notice and this permission notice appear in
|
|
11
|
+
# supporting documentation.
|
|
12
|
+
#
|
|
13
|
+
# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
|
14
|
+
# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
15
|
+
# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
|
|
16
|
+
# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
|
17
|
+
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
|
|
18
|
+
# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
19
|
+
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
20
|
+
|
|
21
|
+
"""
|
|
22
|
+
OS-independent base for an event and VT sequence scanner
|
|
23
|
+
|
|
24
|
+
See unix_eventqueue and windows_eventqueue for subclasses.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from collections import deque
|
|
28
|
+
|
|
29
|
+
from . import keymap
|
|
30
|
+
from .console import Event
|
|
31
|
+
from .trace import trace
|
|
32
|
+
|
|
33
|
+
class BaseEventQueue:
|
|
34
|
+
def __init__(self, encoding: str, keymap_dict: dict[bytes, str]) -> None:
|
|
35
|
+
self.compiled_keymap = keymap.compile_keymap(keymap_dict)
|
|
36
|
+
self.keymap = self.compiled_keymap
|
|
37
|
+
trace("keymap {k!r}", k=self.keymap)
|
|
38
|
+
self.encoding = encoding
|
|
39
|
+
self.events: deque[Event] = deque()
|
|
40
|
+
self.buf = bytearray()
|
|
41
|
+
|
|
42
|
+
def get(self) -> Event | None:
|
|
43
|
+
"""
|
|
44
|
+
Retrieves the next event from the queue.
|
|
45
|
+
"""
|
|
46
|
+
if self.events:
|
|
47
|
+
return self.events.popleft()
|
|
48
|
+
else:
|
|
49
|
+
return None
|
|
50
|
+
|
|
51
|
+
def empty(self) -> bool:
|
|
52
|
+
"""
|
|
53
|
+
Checks if the queue is empty.
|
|
54
|
+
"""
|
|
55
|
+
return not self.events
|
|
56
|
+
|
|
57
|
+
def flush_buf(self) -> bytearray:
|
|
58
|
+
"""
|
|
59
|
+
Flushes the buffer and returns its contents.
|
|
60
|
+
"""
|
|
61
|
+
old = self.buf
|
|
62
|
+
self.buf = bytearray()
|
|
63
|
+
return old
|
|
64
|
+
|
|
65
|
+
def insert(self, event: Event) -> None:
|
|
66
|
+
"""
|
|
67
|
+
Inserts an event into the queue.
|
|
68
|
+
"""
|
|
69
|
+
trace('added event {event}', event=event)
|
|
70
|
+
self.events.append(event)
|
|
71
|
+
|
|
72
|
+
def push(self, char: int | bytes) -> None:
|
|
73
|
+
"""
|
|
74
|
+
Processes a character by updating the buffer and handling special key mappings.
|
|
75
|
+
"""
|
|
76
|
+
assert isinstance(char, (int, bytes))
|
|
77
|
+
ord_char = char if isinstance(char, int) else ord(char)
|
|
78
|
+
char = ord_char.to_bytes()
|
|
79
|
+
self.buf.append(ord_char)
|
|
80
|
+
|
|
81
|
+
if char in self.keymap:
|
|
82
|
+
if self.keymap is self.compiled_keymap:
|
|
83
|
+
# sanity check, buffer is empty when a special key comes
|
|
84
|
+
assert len(self.buf) == 1
|
|
85
|
+
k = self.keymap[char]
|
|
86
|
+
trace('found map {k!r}', k=k)
|
|
87
|
+
if isinstance(k, dict):
|
|
88
|
+
self.keymap = k
|
|
89
|
+
else:
|
|
90
|
+
self.insert(Event('key', k, bytes(self.flush_buf())))
|
|
91
|
+
self.keymap = self.compiled_keymap
|
|
92
|
+
|
|
93
|
+
elif self.buf and self.buf[0] == 27: # escape
|
|
94
|
+
# escape sequence not recognized by our keymap: propagate it
|
|
95
|
+
# outside so that i can be recognized as an M-... key (see also
|
|
96
|
+
# the docstring in keymap.py
|
|
97
|
+
trace('unrecognized escape sequence, propagating...')
|
|
98
|
+
self.keymap = self.compiled_keymap
|
|
99
|
+
self.insert(Event('key', '\033', b'\033'))
|
|
100
|
+
for _c in self.flush_buf()[1:]:
|
|
101
|
+
self.push(_c)
|
|
102
|
+
|
|
103
|
+
else:
|
|
104
|
+
try:
|
|
105
|
+
decoded = bytes(self.buf).decode(self.encoding)
|
|
106
|
+
except UnicodeError:
|
|
107
|
+
return
|
|
108
|
+
else:
|
|
109
|
+
self.insert(Event('key', decoded, bytes(self.flush_buf())))
|
|
110
|
+
self.keymap = self.compiled_keymap
|