diff --git a/python/extractor/BUILD.bazel b/python/extractor/BUILD.bazel new file mode 100644 index 00000000000..4e93f539bde --- /dev/null +++ b/python/extractor/BUILD.bazel @@ -0,0 +1,49 @@ +load("//:dist.bzl", "pack_zip") + +py_binary( + name = "make-zips-py", + srcs = [ + "make_zips.py", + "python_tracer.py", + "unparse.py", + ], + data = [ + "LICENSE-PSF.md", + "__main__.py", + "imp.py", + ] + glob([ + "blib2to3/**", + "buildtools/**", + "lark/**", + "semmle/**", + ]), + # On @criemen's machine, without this, make-zips.py can't find its imports from + # python_tracer. The problem didn't show for some reason on Windows CI machines, though. + imports = ["."], + main = "make_zips.py", +) + +genrule( + name = "python3src", + outs = [ + "python3src.zip", + ], + cmd = "PYTHON_INSTALLER_OUTPUT=\"$(RULEDIR)\" $(location :make-zips-py)", + tools = [":make-zips-py"], +) + +pack_zip( + name = "extractor-python", + srcs = [ + "LICENSE-PSF.md", # because we distribute imp.py + "convert_setup.py", + "get_venv_lib.py", + "imp.py", + "index.py", + "python_tracer.py", + "setup.py", + ":python3src", + ] + glob(["data/**"]), + prefix = "tools", + visibility = ["//visibility:public"], +) diff --git a/python/extractor/LICENSE-PSF.md b/python/extractor/LICENSE-PSF.md new file mode 100644 index 00000000000..636654191e9 --- /dev/null +++ b/python/extractor/LICENSE-PSF.md @@ -0,0 +1,257 @@ +Parts of the Python extractor are derived from code in the CPython +distribution. Its license is reproduced below. + +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +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, 2017, 2018, 2019 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/python/extractor/Makefile b/python/extractor/Makefile new file mode 100644 index 00000000000..1f2c5d0752b --- /dev/null +++ b/python/extractor/Makefile @@ -0,0 +1,61 @@ +.PHONY: all +.DEFAULT: all +all: + +OS = $(shell uname) + +GIT_ROOT = $(shell git rev-parse --show-toplevel) + +TOKENIZER_FILE = semmle/python/parser/tokenizer.py +TOKENIZER_DEPS = tokenizer_generator/state_transition.txt tokenizer_generator/tokenizer_template.py +# Must use the same Python version as on jenkins, since output differs per version. +# However, output is unstable on Python 3.5 (which jenkins uses) +TOKENIZER_CMD = python3 -m tokenizer_generator.gen_state_machine $(TOKENIZER_DEPS) + +.PHONY: tokenizer +tokenizer: $(TOKENIZER_FILE) + +$(TOKENIZER_FILE): $(TOKENIZER_DEPS) + $(TOKENIZER_CMD) > $@ + + +MASTER_FILE = semmle/python/master.py + +DBSCHEME_FILE = $(GIT_ROOT)/ql/python/ql/lib/semmlecode.python.dbscheme + +.PHONY: dbscheme +dbscheme: $(MASTER_FILE) + python3 -m semmle.dbscheme_gen $(DBSCHEME_FILE) + +AST_GENERATED_DIR = $(GIT_ROOT)/ql/python/ql/lib/semmle/python/ +AST_GENERATED_FILE = $(AST_GENERATED_DIR)AstGenerated.qll + +.PHONY: ast +ast: $(MASTER_FILE) + python3 -m semmle.query_gen $(AST_GENERATED_DIR) + $(GIT_ROOT)/target/intree/codeql/codeql query format --in-place $(AST_GENERATED_FILE) + +################################################################################ +# Tests +################################################################################ + +.PHONY: test-all +test-all: test-3 + +.PHONY: test-3 +test-3: pytest-3 test-tokenizer + +.PHONY: test-tokenizer +test-tokenizer: SHELL:=/bin/bash +test-tokenizer: + @echo Not running test-tokenizer as jenkins uses Python 3.5 + # TODO: Enable again once we run Python > 3.5 on Jenkins + # diff -u $(TOKENIZER_FILE) <($(TOKENIZER_CMD)) + +.PHONY: pytest-3 +pytest-3: + poetry run pytest + +.PHONY: pytest-3-deprecation-error +pytest-3-deprecation-error: + PYTHONWARNINGS='error::DeprecationWarning' poetry run pytest diff --git a/python/extractor/README.md b/python/extractor/README.md new file mode 100644 index 00000000000..7bb4e78dad9 --- /dev/null +++ b/python/extractor/README.md @@ -0,0 +1,211 @@ +# Python extraction + +Python extraction happens in two phases: + +1. [Setup](#1-Setup-Phase) + - determine which version to analyze the project as + - creating virtual environment (only LGTM.com) + - determine python import path + - invoking the actual python extractor +2. [The actual Python extractor](#2-The-actual-Python-extractor) + - walks files and folders, and performs extraction + +The rule for `pack_zip('python-extractor')` in `build` defines what files are included in a distribution and in the CodeQL CLI. After building the CodeQL CLI locally, the files are in `target/intree/codeql/python/tools`. + +## Local development + +This project uses + +- [poetry](https://python-poetry.org/) as the package manager +- [tox](https://tox.wiki/en) together with [pytest](https://docs.pytest.org/en/) to run tests across multiple versions + +You can install both tools with [`pipx`](https://pypa.github.io/pipx/), like so + +```sh +pipx install poetry +pipx inject poetry virtualenv-pyenv # to allow poetry to find python versions from pyenv +pipx install tox +pipx inject tox virtualenv-pyenv # to allow tox to find python versions from pyenv +``` + +Once you've installed poetry, you can do this: + +```sh +# install required packages +$ poetry install + +# to run tests against python version used by poetry +$ poetry run pytest + +# or +$ poetry shell # activate poetry environment +$ pytest # so now pytest is available + +# to run tests against all support python versions +$ tox + +# to run against specific version (Python 3.9) +$ tox -e py39 +``` + +To install multiple python versions locally, we recommend you use [`pyenv`](https://github.com/pyenv/pyenv) + +_(don't try to use `tox run-parallel`, our tests are not set up for this to work 😅)_ + +### Zip files + +Currently we distribute our code in an obfuscated way, by including the code in the subfolders in a zip file that is imported at run-time (by the python files in the top level of this directory). + +The one exception is the `data` directory (used for stubs) which is included directly in the `tools` folder. + +The zip creation is managed by [`make_zips.py`](./make_zips.py), and currently we make one zipfile for Python 2 (which is byte compiled), and one for Python 3 (which has source files, but they are stripped of comments and docstrings). + +### A note about Python versions + +We expect to be able to run our tools (setup phase) with either Python 2 or Python 3, and after determining which version to analyze the code as, we run the extractor with that version. So we must support: + +- Setup tools run using Python 2: + - Extracting code using Python 2 + - Extracting code using Python 3 +- Setup tools run using Python 3: + - Extracting code using Python 2 + - Extracting code using Python 3 + +# 1. Setup phase + +**For extraction with the CodeQL CLI locally** (`codeql database create --language python`) + +- Runs [`language-packs/python/tools/autobuild.sh`](/language-packs/python/tools/autobuild.sh) and this script runs [`index.py`](./index.py) + +### Overview of control flow for [`setup.py`](./setup.py) + +The representation of the code in the figure below has in some cases been altered slightly, but is accurate as of 2020-03-20. + +
+ + + +![python extraction overiew](./docs/extractor-python-setup.svg) + +
+ +### Overview of control flow for [`index.py`](./index.py) + +The representation of the code in the figure below has in some cases been altered slightly, but is accurate as of 2020-03-20. + +
+ + + +![python extraction overiew](./docs/extractor-python-index.svg) + +
+ +# 2. The actual Python extractor + +## Overview + +The entrypoint of the actual Python extractor is [`python_tracer.py`](./python_tracer.py). + +The usual way to invoke the extractor is to pass a directory of Python files to the launcher. The extractor extracts code from those files and their dependencies, producing TRAP files, and copies the source code to a source archive. +Alternatively, for highly distributed systems, it is possible to pass a single file to the per extractor invocation; invoking it many times. +The extractor recognizes Python source code files and Thrift IDL files. +Other types of file can be added to the database, by passing the `--filter` option to the extractor, but they'll be stored as text blobs. + +The extractor expects the `CODEQL_EXTRACTOR_PYTHON_TRAP_DIR` and +`CODEQL_EXTRACTOR_PYTHON_SOURCE_ARCHIVE_DIR` environment variables to be set (which determine, +respectively, where it puts TRAP files and the source archive). However, the location of the TRAP +folder and source archive can be specified on the command-line instead. + +The extractor outputs the following information as TRAP files: + +- A file containing per-interpreter data, such as version information and the contents of the `builtins` module. +- One file per extractor process containing the file and folder information for all processed files and all enclosing folders. +- Per Python or template file: + - The AST. + - Scopes and variables, attached to the AST. + - The control-flow graph, selectively split when repeated tests are seen. + +## How it works + +### Overall Architecture + +Once started, the extractor consists of three sets of communicating processes. + +1. The front-end: A single process which walks the files and folders specified on the command-line, enqueuing those files plus any additional modules requested by the extractor processes. +2. The extractors: Typically one process per CPU. Takes file and module descriptions from the queue, producing TRAP files and copies of the source. +3. The logging process. To avoid message interleaving and avoid deadlock, all log messages are queued up to be sent to a logging process which formats and prints the messages. + +The front-end -> worker message queue has quite limited capacity (2 per process) to ensure rapid shutdown when interrupted. The capacity of the worker -> front-end message queue must be at least twice that size to prevent deadlock, and is in fact much larger to prevent workers being blocked on the queue. + +Experiments suggest that the extractor scales almost linearly to at least 20 processes (on linux). + +The component that walks the file system is known as the "traverser" and is designed to be pluggable. +Its interface is simply an iterable of file descriptions. See `semmle/traverser.py`. + +### Lifetime of the extractor + +1. Parse the command-line options and read environment variables. +2. The main process creates: + 1. the logging queue and process, + 2. the message queues, and + 3. the extractor processes. +3. The main process, now the front-end, starts traversing the file system, by iterating over the traverser. +4. Until it has exhausted the traverser, it concurrently: + - Adds module descriptions from the traverser to the message queue + - Reads the reply queue and for any `"IMPORT"` message received adds the module to the message queue if that module has not been seen before. +5. Until a `"SUCCESS"` message has been received on the reply queue for each module description that has been enqueued: + - Reads the reply queue and adds those module descriptions it hasn't seen before to the message queue. +6. Add one `None` message to the message queue for each extractor. +7. Wait for all extractors to halt. +8. Stop the logging process and halt. + +### Lifetime of an extractor process + +1. Read messages from the message queue until a `None` message is received. For each message: + 1. Parse the file or module. + 2. Send an "IMPORT" message for all modules imported by the module being processed. + 3. Write out TRAP and source archive for the file. + 4. Send a "SUCCESS" message for the file. +2. Emit file and folder TRAP for all files and modules processed. +3. Halt. + +### TRAP caching + +An important consequence of local extraction is that, except for the file path information, the contents of the TRAP file are functionally determined by: + +- The contents of the file. +- Some command-line options (those determining name hashing and CFG splitting). +- The extractor version. + +Caching of TRAP files can reduce the time to extract a large project with few changes by an order of magnitude. + +### Extraction + +Each extractor process runs a loop which extracts files or modules from the queue, one at a time. +Each file or module description is passed, in turn, to one of the extractor objects which will either extract it or reject it for the next extractor object to try. +Currently the default extractors are: + +- Builtin module extractor: Extracts built-in modules like `sys`. +- Thrift extractor: Extracts Thrift IDL files. +- Python extractor: Extracts Python source code files. +- Package extractor: Extracts minimal information for package folders. +- General file extractor: Any files rejected by the above passes are added to the database as a text blob. + +#### Python extraction + +The Python extractor is the most interesting of the processes mentioned above. +The Python extractor takes a path to a Python file. It emits TRAP to the specified folder and a UTF-8 encoded version of the source to the source archive. +It consists of the following passes: + +1. Ingestion and decoding: Read the contents of the file as bytes, determine its encoding, and decode it to text. +2. Tokenizing: Tokenize the source text, including whitespace and comment tokens. +3. Parsing: Create a concrete parse tree from the list of tokens. +4. Rewriting: Rewrite the concrete parse tree to an AST, annotated with scope, variable information, and locations. +5. Write out lexical and AST information as TRAP. +6. Generate and emit TRAP for control-flow graphs. This is done one scope at a time to minimize memory consumption. +7. Emit ancillary information, like TRAP for comments. + +#### Template file extraction + +Most Python template languages work by either translating the template into Python or by fairly closely mimicking the behavior of Python. This means that we can extract template files by converting them to the same AST used internally by the Python extractor and then passing that AST to the backend of the Python extractor to determine imports, and generate TRAP files including control-flow information. diff --git a/python/extractor/__main__.py b/python/extractor/__main__.py new file mode 100644 index 00000000000..d059d0f99bd --- /dev/null +++ b/python/extractor/__main__.py @@ -0,0 +1,4 @@ +import semmle.populator + +if __name__ == "__main__": + semmle.populator.main() diff --git a/python/extractor/blib2to3/Grammar.txt b/python/extractor/blib2to3/Grammar.txt new file mode 100644 index 00000000000..8d16d27b60b --- /dev/null +++ b/python/extractor/blib2to3/Grammar.txt @@ -0,0 +1,224 @@ +# Grammar for 2to3. This grammar supports Python 2.x and 3.x. + +# NOTE WELL: You should also follow all the steps listed at +# https://devguide.python.org/grammar/ + +# Start symbols for the grammar: +# file_input is a module or sequence of commands read from an input file; +# single_input is a single interactive statement; +# eval_input is the input for the eval() and input() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +file_input: (NEWLINE | stmt)* ENDMARKER +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' namedexpr_test NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef | async_funcdef) +async_funcdef: 'async' funcdef +funcdef: 'def' NAME parameters ['->' test] ':' suite +parameters: '(' [typedargslist] ')' + +# The following definition for typedarglist is equivalent to this set of rules: +# +# arguments = argument (',' argument)* +# argument = tfpdef ['=' test] +# kwargs = '**' tname [','] +# args = '*' [tname] +# kwonly_kwargs = (',' argument)* [',' [kwargs]] +# args_kwonly_kwargs = args kwonly_kwargs | kwargs +# poskeyword_args_kwonly_kwargs = arguments [',' [args_kwonly_kwargs]] +# typedargslist_no_posonly = poskeyword_args_kwonly_kwargs | args_kwonly_kwargs +# typedarglist = arguments ',' '/' [',' [typedargslist_no_posonly]])|(typedargslist_no_posonly)" +# +# It needs to be fully expanded to allow our LL(1) parser to work on it. + +typedargslist: tfpdef ['=' test] (',' tfpdef ['=' test])* ',' '/' [ + ',' [((tfpdef ['=' test] ',')* ('*' [tname] (',' tname ['=' test])* + [',' ['**' tname [',']]] | '**' tname [',']) + | tfpdef ['=' test] (',' tfpdef ['=' test])* [','])] + ] | ((tfpdef ['=' test] ',')* ('*' [tname] (',' tname ['=' test])* + [',' ['**' tname [',']]] | '**' tname [',']) + | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) + +tname: NAME [':' test] +tfpdef: tname | '(' tfplist ')' +tfplist: tfpdef (',' tfpdef)* [','] + +# The following definition for varargslist is equivalent to this set of rules: +# +# arguments = argument (',' argument )* +# argument = vfpdef ['=' test] +# kwargs = '**' vname [','] +# args = '*' [vname] +# kwonly_kwargs = (',' argument )* [',' [kwargs]] +# args_kwonly_kwargs = args kwonly_kwargs | kwargs +# poskeyword_args_kwonly_kwargs = arguments [',' [args_kwonly_kwargs]] +# vararglist_no_posonly = poskeyword_args_kwonly_kwargs | args_kwonly_kwargs +# varargslist = arguments ',' '/' [','[(vararglist_no_posonly)]] | (vararglist_no_posonly) +# +# It needs to be fully expanded to allow our LL(1) parser to work on it. + +varargslist: vfpdef ['=' test ](',' vfpdef ['=' test])* ',' '/' [',' [ + ((vfpdef ['=' test] ',')* ('*' [vname] (',' vname ['=' test])* + [',' ['**' vname [',']]] | '**' vname [',']) + | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) + ]] | ((vfpdef ['=' test] ',')* + ('*' [vname] (',' vname ['=' test])* [',' ['**' vname [',']]]| '**' vname [',']) + | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) + +vname: NAME +vfpdef: vname | '(' vfplist ')' +vfplist: vfpdef (',' vfpdef)* [','] + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | exec_stmt | assert_stmt) +expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +annassign: ':' test ['=' test] +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal and annotated assignments, additional restrictions enforced by the interpreter +print_stmt: 'print' ( [ test (',' test)* [','] ] | + '>>' test [ (',' test)+ [','] ] ) +del_stmt: 'del' del_list +del_list: (expr|star_expr) (',' (expr|star_expr))* [','] +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist_star_expr] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test | ',' test [',' test]]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +import_from: ('from' ('.'* dotted_name | '.'+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: ('global' | 'nonlocal') NAME (',' NAME)* +exec_stmt: 'exec' expr ['in' test [',' test]] +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt +async_stmt: 'async' (funcdef | with_stmt | for_stmt) +if_stmt: 'if' namedexpr_test ':' suite ('elif' namedexpr_test ':' suite)* ['else' ':' suite] +while_stmt: 'while' namedexpr_test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +with_var: 'as' expr +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test [(',' | 'as') test]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +# Backward compatibility cruft to support: +# [ x for x in lambda: True, lambda: False if x() ] +# even while also allowing: +# lambda x: 5 if x else 2 +# (But not a mix of the two) +testlist_safe: old_test [(',' old_test)+ [',']] +old_test: or_test | old_lambdef +old_lambdef: 'lambda' [varargslist] ':' old_test + +namedexpr_test: test [':=' test] +test: or_test ['if' or_test 'else' test] | lambdef +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: ['await'] atom trailer* ['**' factor] +atom: ('(' [yield_expr|testlist_gexp] ')' | + '[' [listmaker] ']' | + '{' [dictsetmaker] '}' | + '`' testlist1 '`' | + NAME | NUMBER | string | '.' '.' '.' | special_operation + ) + +string: (fstring_part | STRING)+ +fstring_part: FSTRING_START testlist ['='] [ CONVERSION ] [ format_specifier ] (FSTRING_MID testlist ['='] [ CONVERSION ] [ format_specifier ] )* FSTRING_END +format_specifier: ':' (FSTRING_SPEC test [ CONVERSION ] [ format_specifier ] )* FSTRING_SPEC + +listmaker: (namedexpr_test|star_expr) ( old_comp_for | (',' (namedexpr_test|star_expr))* [','] ) +testlist_gexp: (namedexpr_test|star_expr) ( old_comp_for | (',' (namedexpr_test|star_expr))* [','] ) +lambdef: 'lambda' [varargslist] ':' test +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [ ':' [test] ] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' 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 '=' 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 | + test '=' test | + '**' test | + '*' test ) + +comp_iter: comp_for | comp_if +comp_for: ['async'] 'for' exprlist 'in' or_test [comp_iter] +comp_if: 'if' old_test [comp_iter] + +# As noted above, testlist_safe extends the syntax allowed in list +# comprehensions and generators. We can't use it indiscriminately in all +# derivations using a comp_for-like pattern because the testlist_safe derivation +# contains comma which clashes with trailing comma in arglist. +# +# This was an issue because the parser would not follow the correct derivation +# when parsing syntactically valid Python code. Since testlist_safe was created +# specifically to handle list comprehensions and generator expressions enclosed +# with parentheses, it's safe to only use it in those. That avoids the issue; we +# can parse code like set(x for x in [],). +# +# The syntax supported by this set of rules is not a valid Python 3 syntax, +# hence the prefix "old". +# +# See https://bugs.python.org/issue27494 +old_comp_iter: old_comp_for | old_comp_if +old_comp_for: ['async'] 'for' exprlist 'in' testlist_safe [old_comp_iter] +old_comp_if: 'if' old_test [old_comp_iter] + +testlist1: test (',' test)* + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist_star_expr + +special_operation: DOLLARNAME '(' [testlist] ')' + diff --git a/python/extractor/blib2to3/LICENSE b/python/extractor/blib2to3/LICENSE new file mode 100644 index 00000000000..1afbedba92b --- /dev/null +++ b/python/extractor/blib2to3/LICENSE @@ -0,0 +1,254 @@ +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +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, 2017, 2018 Python Software Foundation; All +Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/python/extractor/blib2to3/README b/python/extractor/blib2to3/README new file mode 100644 index 00000000000..e20750d35f0 --- /dev/null +++ b/python/extractor/blib2to3/README @@ -0,0 +1,20 @@ +This code is derived from the black code formatter, +which itself was derived from the lib2to3 package in the Python standard library. + +We (Semmle) have modified this further to ease conversion to our multi-version AST. + +Original README from black: + +A subset of lib2to3 taken from Python 3.7.0b2. +Commit hash: 9c17e3a1987004b8bcfbe423953aad84493a7984 + +Reasons for forking: +- consistent handling of f-strings for users of Python < 3.6.2 +- backport of BPO-33064 that fixes parsing files with trailing commas after + *args and **kwargs +- backport of GH-6143 that restores the ability to reformat legacy usage of + `async` +- support all types of string literals +- better ability to debug (better reprs) +- INDENT and DEDENT don't hold whitespace and comment prefixes +- ability to Cythonize diff --git a/python/extractor/blib2to3/README.md b/python/extractor/blib2to3/README.md new file mode 100644 index 00000000000..cf01b731108 --- /dev/null +++ b/python/extractor/blib2to3/README.md @@ -0,0 +1,67 @@ +# Building Concrete Parse Trees using the Python grammar + +This grammar is mostly reusing existing code: + +- `lib2to3` is a part of the `2to3` utility (included in the CPython + distribution) aimed at automatically converting Python 2 code to equivalent + Python 3 code. Because it needs to be idempotent when applied to Python 3 + code, this grammar must be capable of parsing both Python 2 and 3 (with + certain restrictions). +- `blib2to3` is part of the `black` formatter for Python. It adds a few + extensions on top of `lib2to3`. +- Finally, we extend this grammar even further, in order to support things like + f-strings even when the extractor is run using Python 2. (In this respect, + `blib2to3` "cheats" by requiring Python 3 if you want to parse Python 3 code. + We do not have this luxury.) + +The grammar of Python is described in `Grammar.txt` in the style of an EBNF: + +- Rules have the form `nonterminal_name: production` (where traditionally, one + would use `::=` instead of `:`) +- Productions can contain + - Literal strings, enclosed in single quotes. + - Alternation, indicated by an infix `|`. + - Repetition, indicated by a postfixed `*` for "zero or more" and `+` for + "one or more". + - Optional parts, indicated by these being surrounded by square brackets. + - Parentheseses to indicate grouping, and to allow productions to span several lines. + +>Note: You may wonder: How is `Grammar.txt` parsed? The answer to this is that +>it is used to parse itself. In particular, it uses the same tokenizer as that +>for Python, and hence every symbol appearing in the grammar must be a valid +>Python token. This is why rules use `:` instead of `::=`. This also explains +>why parentheses must be used when a production spans multiple lines, as the +>presence of parentheses affects the tokenization. + +The concrete parse tree built based on these rules has a simple form: Each node +has a `name` attribute, equal to that of the corresponding nonterminal, and a +`children` attribute, which contains a list of all of the children of the node. +These come directly from the production on the right hand side of the rule for +the given nonterminal. Thus, something like + +``` +testlist: test (',' test)* [','] +``` + +will result in a node with name `testlist`, and its attribute `children` will be +a list where the first element is a `test` node, the second (if any) is a node +for `','`, etc. Note in particular that _every_ part of the production is +included in the children, even parts that are just static tokens. + +The leaves of the concrete parse tree (corresponding to the terminals of the +grammar) will have an associated `value` attribute. This contains the underlying +string for this token (in particular, for a `NAME` token, its value will be the +underlying identifier). + +## From Concrete to Abstract + +To turn the concrete parse tree into an asbstract parse tree, we _walk_ the tree +using the visitor pattern. Thus, for every nonterminal (e.g. `testlist`) we have +a method (in this case `visit_testlist`) that takes care of visiting nodes of +this type in the concrete parse tree. In doing so, we build up the abstract +parse tree, eliding any nodes that are not relevant in terms of the abstract +syntax. + +>TO DO: +>- Why we parse everything four times (`async` et al.) + diff --git a/python/extractor/blib2to3/__init__.py b/python/extractor/blib2to3/__init__.py new file mode 100644 index 00000000000..ea30561d839 --- /dev/null +++ b/python/extractor/blib2to3/__init__.py @@ -0,0 +1 @@ +#empty diff --git a/python/extractor/blib2to3/pgen2/__init__.py b/python/extractor/blib2to3/pgen2/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/blib2to3/pgen2/driver.py b/python/extractor/blib2to3/pgen2/driver.py new file mode 100644 index 00000000000..f7c9fb281d5 --- /dev/null +++ b/python/extractor/blib2to3/pgen2/driver.py @@ -0,0 +1,37 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Modifications: +# Copyright 2006 Google, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +"""Parser driver. + +This provides a high-level interface to parse a file into a syntax tree. + +""" + +__author__ = "Guido van Rossum " + +__all__ = ["load_grammar"] + +# Python imports +import os +import logging +import pkgutil +import sys + +# Pgen imports +from . import grammar, pgen + +if sys.version < "3": + from cStringIO import StringIO +else: + from io import StringIO + +def load_grammar(package, grammar): + """Load the grammar (maybe from a pickle).""" + data = pkgutil.get_data(package, grammar) + stream = StringIO(data.decode("utf8")) + g = pgen.generate_grammar(grammar, stream) + return g diff --git a/python/extractor/blib2to3/pgen2/grammar.py b/python/extractor/blib2to3/pgen2/grammar.py new file mode 100644 index 00000000000..6a4d575ac2c --- /dev/null +++ b/python/extractor/blib2to3/pgen2/grammar.py @@ -0,0 +1,188 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +"""This module defines the data structures used to represent a grammar. + +These are a bit arcane because they are derived from the data +structures used by Python's 'pgen' parser generator. + +There's also a table here mapping operators to their names in the +token module; the Python tokenize module reports all operators as the +fallback token code OP, but the parser needs the actual token code. + +""" + +# Python imports +import pickle + +# Local imports +from . import token + + +class Grammar(object): + """Pgen parsing tables conversion class. + + Once initialized, this class supplies the grammar tables for the + parsing engine implemented by parse.py. The parsing engine + accesses the instance variables directly. The class here does not + provide initialization of the tables; several subclasses exist to + do this (see the conv and pgen modules). + + The load() method reads the tables from a pickle file, which is + much faster than the other ways offered by subclasses. The pickle + file is written by calling dump() (after loading the grammar + tables using a subclass). The report() method prints a readable + representation of the tables to stdout, for debugging. + + The instance variables are as follows: + + symbol2number -- a dict mapping symbol names to numbers. Symbol + numbers are always 256 or higher, to distinguish + them from token numbers, which are between 0 and + 255 (inclusive). + + number2symbol -- a dict mapping numbers to symbol names; + these two are each other's inverse. + + states -- a list of DFAs, where each DFA is a list of + states, each state is a list of arcs, and each + arc is a (i, j) pair where i is a label and j is + a state number. The DFA number is the index into + this list. (This name is slightly confusing.) + Final states are represented by a special arc of + the form (0, j) where j is its own state number. + + dfas -- a dict mapping symbol numbers to (DFA, first) + pairs, where DFA is an item from the states list + above, and first is a set of tokens that can + begin this grammar rule (represented by a dict + whose values are always 1). + + labels -- a list of (x, y) pairs where x is either a token + number or a symbol number, and y is either None + or a string; the strings are keywords. The label + number is the index in this list; label numbers + are used to mark state transitions (arcs) in the + DFAs. + + start -- the number of the grammar's start symbol. + + keywords -- a dict mapping keyword strings to arc labels. + + tokens -- a dict mapping token numbers to arc labels. + + """ + + def __init__(self): + self.symbol2number = {} + self.number2symbol = {} + self.states = [] + self.dfas = {} + self.labels = [(0, "EMPTY")] + self.keywords = {} + self.tokens = {} + self.symbol2label = {} + self.start = 256 + + def dump(self, filename): + """Dump the grammar tables to a pickle file.""" + with open(filename, "wb") as f: + pickle.dump(self.__dict__, f, pickle.HIGHEST_PROTOCOL) + + def load(self, filename): + """Load the grammar tables from a pickle file.""" + with open(filename, "rb") as f: + d = pickle.load(f) + self.__dict__.update(d) + + def loads(self, pkl): + """Load the grammar tables from a pickle bytes object.""" + self.__dict__.update(pickle.loads(pkl)) + + def copy(self): + """ + Copy the grammar. + """ + new = self.__class__() + for dict_attr in ("symbol2number", "number2symbol", "dfas", "keywords", + "tokens", "symbol2label"): + setattr(new, dict_attr, getattr(self, dict_attr).copy()) + new.labels = self.labels[:] + new.states = self.states[:] + new.start = self.start + return new + + def report(self): + """Dump the grammar tables to standard output, for debugging.""" + from pprint import pprint + print("s2n") + pprint(self.symbol2number) + print("n2s") + pprint(self.number2symbol) + print("states") + pprint(self.states) + print("dfas") + pprint(self.dfas) + print("labels") + pprint(self.labels) + print("start", self.start) + + +# Map from operator to number (since tokenize doesn't do this) + +opmap_raw = """ +( LPAR +) RPAR +[ LSQB +] RSQB +: COLON +, COMMA +; SEMI ++ PLUS +- MINUS +* STAR +/ SLASH +| VBAR +& AMPER +< LESS +> GREATER += EQUAL +. DOT +% PERCENT +` BACKQUOTE +{ LBRACE +} RBRACE +@ AT +@= ATEQUAL +== EQEQUAL +!= NOTEQUAL +<> NOTEQUAL +<= LESSEQUAL +>= GREATEREQUAL +~ TILDE +^ CIRCUMFLEX +<< LEFTSHIFT +>> RIGHTSHIFT +** DOUBLESTAR ++= PLUSEQUAL +-= MINEQUAL +*= STAREQUAL +/= SLASHEQUAL +%= PERCENTEQUAL +&= AMPEREQUAL +|= VBAREQUAL +^= CIRCUMFLEXEQUAL +<<= LEFTSHIFTEQUAL +>>= RIGHTSHIFTEQUAL +**= DOUBLESTAREQUAL +// DOUBLESLASH +//= DOUBLESLASHEQUAL +-> RARROW +:= COLONEQUAL +""" + +opmap = {} +for line in opmap_raw.splitlines(): + if line: + op, name = line.split() + opmap[op] = getattr(token, name) diff --git a/python/extractor/blib2to3/pgen2/parse.py b/python/extractor/blib2to3/pgen2/parse.py new file mode 100644 index 00000000000..6bebdbba7e5 --- /dev/null +++ b/python/extractor/blib2to3/pgen2/parse.py @@ -0,0 +1,201 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +"""Parser engine for the grammar tables generated by pgen. + +The grammar table must be loaded first. + +See Parser/parser.c in the Python distribution for additional info on +how this parsing engine works. + +""" + +# Local imports +from . import token + +class ParseError(Exception): + """Exception to signal the parser is stuck.""" + + def __init__(self, msg, type, value, context): + Exception.__init__(self, "%s: type=%r, value=%r, context=%r" % + (msg, type, value, context)) + self.msg = msg + self.type = type + self.value = value + self.context = context + +class Parser(object): + """Parser engine. + + The proper usage sequence is: + + p = Parser(grammar, [converter]) # create instance + p.setup([start]) # prepare for parsing + : + if p.addtoken(...): # parse a token; may raise ParseError + break + root = p.rootnode # root of abstract syntax tree + + A Parser instance may be reused by calling setup() repeatedly. + + A Parser instance contains state pertaining to the current token + sequence, and should not be used concurrently by different threads + to parse separate token sequences. + + See driver.py for how to get input tokens by tokenizing a file or + string. + + Parsing is complete when addtoken() returns True; the root of the + abstract syntax tree can then be retrieved from the rootnode + instance variable. When a syntax error occurs, addtoken() raises + the ParseError exception. There is no error recovery; the parser + cannot be used after a syntax error was reported (but it can be + reinitialized by calling setup()). + + """ + + def __init__(self, grammar, convert=None): + """Constructor. + + The grammar argument is a grammar.Grammar instance; see the + grammar module for more information. + + The parser is not ready yet for parsing; you must call the + setup() method to get it started. + + The optional convert argument is a function mapping concrete + syntax tree nodes to abstract syntax tree nodes. If not + given, no conversion is done and the syntax tree produced is + the concrete syntax tree. If given, it must be a function of + two arguments, the first being the grammar (a grammar.Grammar + instance), and the second being the concrete syntax tree node + to be converted. The syntax tree is converted from the bottom + up. + + A concrete syntax tree node is a (type, value, context, nodes) + tuple, where type is the node type (a token or symbol number), + value is None for symbols and a string for tokens, context is + None or an opaque value used for error reporting (typically a + (lineno, offset) pair), and nodes is a list of children for + symbols, and None for tokens. + + An abstract syntax tree node may be anything; this is entirely + up to the converter function. + + """ + self.grammar = grammar + self.convert = convert or (lambda grammar, node: node) + + def setup(self, start=None): + """Prepare for parsing. + + This *must* be called before starting to parse. + + The optional argument is an alternative start symbol; it + defaults to the grammar's start symbol. + + You can use a Parser instance to parse any number of programs; + each time you call setup() the parser is reset to an initial + state determined by the (implicit or explicit) start symbol. + + """ + if start is None: + start = self.grammar.start + # Each stack entry is a tuple: (dfa, state, node). + # A node is a tuple: (type, value, context, children), + # where children is a list of nodes or None, and context may be None. + newnode = (start, None, None, []) + stackentry = (self.grammar.dfas[start], 0, newnode) + self.stack = [stackentry] + self.rootnode = None + self.used_names = set() # Aliased to self.rootnode.used_names in pop() + + def addtoken(self, type, value, context): + """Add a token; return True iff this is the end of the program.""" + # Map from token to label + ilabel = self.classify(type, value, context) + # Loop until the token is shifted; may raise exceptions + while True: + dfa, state, node = self.stack[-1] + states, first = dfa + arcs = states[state] + # Look for a state with this label + for i, newstate in arcs: + t, v = self.grammar.labels[i] + if ilabel == i: + # Look it up in the list of labels + assert t < 256 + # Shift a token; we're done with it + self.shift(type, value, newstate, context) + # Pop while we are in an accept-only state + state = newstate + while states[state] == [(0, state)]: + self.pop() + if not self.stack: + # Done parsing! + return True + dfa, state, node = self.stack[-1] + states, first = dfa + # Done with this token + return False + elif t >= 256: + # See if it's a symbol and if we're in its first set + itsdfa = self.grammar.dfas[t] + itsstates, itsfirst = itsdfa + if ilabel in itsfirst: + # Push a symbol + self.push(t, self.grammar.dfas[t], newstate, context) + break # To continue the outer while loop + else: + if (0, state) in arcs: + # An accepting state, pop it and try something else + self.pop() + if not self.stack: + # Done parsing, but another token is input + raise ParseError("too much input", + type, value, context) + else: + # No success finding a transition + raise ParseError("bad input", type, value, context) + + def classify(self, type, value, context): + """Turn a token into a label. (Internal)""" + if type == token.NAME: + # Keep a listing of all used names + self.used_names.add(value) + # Check for reserved words + ilabel = self.grammar.keywords.get(value) + if ilabel is not None: + return ilabel + ilabel = self.grammar.tokens.get(type) + if ilabel is None: + raise ParseError("bad token", type, value, context) + return ilabel + + def shift(self, type, value, newstate, context): + """Shift a token. (Internal)""" + dfa, state, node = self.stack[-1] + newnode = (type, value, context, None) + newnode = self.convert(self.grammar, newnode) + if newnode is not None: + node[-1].append(newnode) + self.stack[-1] = (dfa, newstate, node) + + def push(self, type, newdfa, newstate, context): + """Push a nonterminal. (Internal)""" + dfa, state, node = self.stack[-1] + newnode = (type, None, context, []) + self.stack[-1] = (dfa, newstate, node) + self.stack.append((newdfa, 0, newnode)) + + def pop(self): + """Pop a nonterminal. (Internal)""" + popdfa, popstate, popnode = self.stack.pop() + newnode = self.convert(self.grammar, popnode) + if newnode is not None: + if self.stack: + dfa, state, node = self.stack[-1] + node[-1].append(newnode) + else: + self.rootnode = newnode + self.rootnode.used_names = self.used_names diff --git a/python/extractor/blib2to3/pgen2/pgen.py b/python/extractor/blib2to3/pgen2/pgen.py new file mode 100644 index 00000000000..297e7330cff --- /dev/null +++ b/python/extractor/blib2to3/pgen2/pgen.py @@ -0,0 +1,386 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Pgen imports +from . import grammar, token, tokenize + +class PgenGrammar(grammar.Grammar): + pass + +class ParserGenerator(object): + + def __init__(self, filename, stream=None): + close_stream = None + if stream is None: + stream = open(filename) + close_stream = stream.close + self.filename = filename + self.stream = stream + self.generator = tokenize.generate_tokens(stream.readline) + self.gettoken() # Initialize lookahead + self.dfas, self.startsymbol = self.parse() + if close_stream is not None: + close_stream() + self.first = {} # map from symbol name to set of tokens + self.addfirstsets() + + def make_grammar(self): + c = PgenGrammar() + names = list(self.dfas.keys()) + names.sort() + names.remove(self.startsymbol) + names.insert(0, self.startsymbol) + for name in names: + i = 256 + len(c.symbol2number) + c.symbol2number[name] = i + c.number2symbol[i] = name + for name in names: + dfa = self.dfas[name] + states = [] + for state in dfa: + arcs = [] + 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))) + states.append(arcs) + c.states.append(states) + c.dfas[c.symbol2number[name]] = (states, self.make_first(c, name)) + c.start = c.symbol2number[self.startsymbol] + return c + + def make_first(self, c, name): + rawfirst = self.first[name] + first = {} + for label in sorted(rawfirst): + ilabel = self.make_label(c, label) + ##assert ilabel not in first # XXX failed on <> ... != + first[ilabel] = 1 + return first + + def make_label(self, c, label): + # XXX Maybe this should be a method on a subclass of converter? + ilabel = len(c.labels) + if label[0].isalpha(): + # Either a symbol name or a named token + if label in c.symbol2number: + # A symbol name (a non-terminal) + if label in c.symbol2label: + return c.symbol2label[label] + else: + c.labels.append((c.symbol2number[label], None)) + c.symbol2label[label] = ilabel + return ilabel + else: + # A named token (NAME, NUMBER, STRING) + itoken = getattr(token, label, None) + assert isinstance(itoken, int), label + assert itoken in token.tok_name, label + if itoken in c.tokens: + return c.tokens[itoken] + else: + c.labels.append((itoken, None)) + c.tokens[itoken] = ilabel + return ilabel + else: + # Either a keyword or an operator + assert label[0] in ('"', "'"), label + value = eval(label) + if value[0].isalpha(): + # A keyword + if value in c.keywords: + return c.keywords[value] + else: + c.labels.append((token.NAME, value)) + c.keywords[value] = ilabel + return ilabel + else: + # An operator (any non-numeric token) + itoken = grammar.opmap[value] # Fails if unknown token + if itoken in c.tokens: + return c.tokens[itoken] + else: + c.labels.append((itoken, None)) + c.tokens[itoken] = ilabel + return ilabel + + def addfirstsets(self): + names = list(self.dfas.keys()) + names.sort() + for name in names: + if name not in self.first: + self.calcfirst(name) + #print name, self.first[name].keys() + + def calcfirst(self, name): + dfa = self.dfas[name] + self.first[name] = None # dummy to detect left recursion + state = dfa[0] + totalset = {} + overlapcheck = {} + for label, next in state.arcs.items(): + if label in self.dfas: + if label in self.first: + fset = self.first[label] + if fset is None: + raise ValueError("recursion for rule %r" % name) + else: + self.calcfirst(label) + fset = self.first[label] + totalset.update(fset) + overlapcheck[label] = fset + else: + totalset[label] = 1 + overlapcheck[label] = {label: 1} + inverse = {} + for label, itsfirst in overlapcheck.items(): + for symbol in itsfirst: + if symbol in inverse: + raise ValueError("rule %s is ambiguous; %s is in the" + " first sets of %s as well as %s" % + (name, symbol, label, inverse[symbol])) + inverse[symbol] = label + self.first[name] = totalset + + def parse(self): + dfas = {} + startsymbol = None + # MSTART: (NEWLINE | RULE)* ENDMARKER + while self.type != token.ENDMARKER: + while self.type == token.NEWLINE: + self.gettoken() + # RULE: NAME ':' RHS NEWLINE + name = self.expect(token.NAME) + self.expect(token.OP, ":") + a, z = self.parse_rhs() + self.expect(token.NEWLINE) + #self.dump_nfa(name, a, z) + dfa = self.make_dfa(a, z) + #self.dump_dfa(name, dfa) + oldlen = len(dfa) + self.simplify_dfa(dfa) + newlen = len(dfa) + dfas[name] = dfa + #print name, oldlen, newlen + if startsymbol is None: + startsymbol = name + return dfas, startsymbol + + def make_dfa(self, start, finish): + # To turn an NFA into a DFA, we define the states of the DFA + # to correspond to *sets* of states of the NFA. Then do some + # state reduction. Let's represent sets as dicts with 1 for + # values. + assert isinstance(start, NFAState) + assert isinstance(finish, NFAState) + def closure(state): + base = {} + addclosure(state, base) + return base + def addclosure(state, base): + assert isinstance(state, NFAState) + if state in base: + return + base[state] = 1 + for label, next in state.arcs: + if label is None: + addclosure(next, base) + states = [DFAState(closure(start), finish)] + for state in states: # NB states grows while we're iterating + arcs = {} + for nfastate in state.nfaset: + for label, next in nfastate.arcs: + if label is not None: + addclosure(next, arcs.setdefault(label, {})) + for label, nfaset in sorted(arcs.items()): + for st in states: + if st.nfaset == nfaset: + break + else: + st = DFAState(nfaset, finish) + states.append(st) + state.addarc(st, label) + return states # List of DFAState instances; first one is start + + def dump_nfa(self, name, start, finish): + print("Dump of NFA for", name) + todo = [start] + for i, state in enumerate(todo): + print(" State", i, state is finish and "(final)" or "") + for label, next in state.arcs: + if next in todo: + j = todo.index(next) + else: + j = len(todo) + todo.append(next) + if label is None: + print(" -> %d" % j) + else: + print(" %s -> %d" % (label, j)) + + def dump_dfa(self, name, dfa): + print("Dump of DFA for", name) + for i, state in enumerate(dfa): + print(" State", i, state.isfinal and "(final)" or "") + for label, next in sorted(state.arcs.items()): + print(" %s -> %d" % (label, dfa.index(next))) + + def simplify_dfa(self, dfa): + # This is not theoretically optimal, but works well enough. + # Algorithm: repeatedly look for two states that have the same + # set of arcs (same labels pointing to the same nodes) and + # unify them, until things stop changing. + + # dfa is a list of DFAState instances + changes = True + while changes: + changes = False + for i, state_i in enumerate(dfa): + for j in range(i+1, len(dfa)): + state_j = dfa[j] + if state_i == state_j: + #print " unify", i, j + del dfa[j] + for state in dfa: + state.unifystate(state_j, state_i) + changes = True + break + + def parse_rhs(self): + # RHS: ALT ('|' ALT)* + a, z = self.parse_alt() + if self.value != "|": + return a, z + else: + aa = NFAState() + zz = NFAState() + aa.addarc(a) + z.addarc(zz) + while self.value == "|": + self.gettoken() + a, z = self.parse_alt() + aa.addarc(a) + z.addarc(zz) + return aa, zz + + def parse_alt(self): + # ALT: ITEM+ + a, b = self.parse_item() + while (self.value in ("(", "[") or + self.type in (token.NAME, token.STRING)): + c, d = self.parse_item() + b.addarc(c) + b = d + return a, b + + def parse_item(self): + # ITEM: '[' RHS ']' | ATOM ['+' | '*'] + if self.value == "[": + self.gettoken() + a, z = self.parse_rhs() + self.expect(token.OP, "]") + a.addarc(z) + return a, z + else: + a, z = self.parse_atom() + value = self.value + if value not in ("+", "*"): + return a, z + self.gettoken() + z.addarc(a) + if value == "+": + return a, z + else: + return a, a + + def parse_atom(self): + # ATOM: '(' RHS ')' | NAME | STRING + if self.value == "(": + self.gettoken() + a, z = self.parse_rhs() + self.expect(token.OP, ")") + return a, z + elif self.type in (token.NAME, token.STRING): + a = NFAState() + z = NFAState() + a.addarc(z, self.value) + self.gettoken() + return a, z + else: + self.raise_error("expected (...) or NAME or STRING, got %s/%s", + self.type, self.value) + + def expect(self, type, value=None): + if self.type != type or (value is not None and self.value != value): + self.raise_error("expected %s/%s, got %s/%s", + type, value, self.type, self.value) + value = self.value + self.gettoken() + return value + + def gettoken(self): + tup = next(self.generator) + while tup[0] in (tokenize.COMMENT, tokenize.NL): + tup = next(self.generator) + self.type, self.value, self.begin, self.end, self.line = tup + #print token.tok_name[self.type], repr(self.value) + + def raise_error(self, msg, *args): + if args: + try: + msg = msg % args + except: + msg = " ".join([msg] + list(map(str, args))) + raise SyntaxError(msg, (self.filename, self.end[0], + self.end[1], self.line)) + +class NFAState(object): + + def __init__(self): + self.arcs = [] # list of (label, NFAState) pairs + + def addarc(self, next, label=None): + assert label is None or isinstance(label, str) + assert isinstance(next, NFAState) + self.arcs.append((label, next)) + +class DFAState(object): + + def __init__(self, nfaset, final): + assert isinstance(nfaset, dict) + assert isinstance(next(iter(nfaset)), NFAState) + assert isinstance(final, NFAState) + self.nfaset = nfaset + self.isfinal = final in nfaset + self.arcs = {} # map from label to DFAState + + def addarc(self, next, label): + assert isinstance(label, str) + assert label not in self.arcs + assert isinstance(next, DFAState) + self.arcs[label] = next + + def unifystate(self, old, new): + for label, next in self.arcs.items(): + if next is old: + self.arcs[label] = new + + def __eq__(self, other): + # Equality test -- ignore the nfaset instance variable + assert isinstance(other, DFAState) + if self.isfinal != other.isfinal: + return False + # Can't just return self.arcs == other.arcs, because that + # would invoke this method recursively, with cycles... + if len(self.arcs) != len(other.arcs): + return False + for label, next in self.arcs.items(): + if next is not other.arcs.get(label): + return False + return True + + __hash__ = None # For Py3 compatibility. + +def generate_grammar(filename, stream=None): + p = ParserGenerator(filename, stream) + return p.make_grammar() diff --git a/python/extractor/blib2to3/pgen2/token.py b/python/extractor/blib2to3/pgen2/token.py new file mode 100644 index 00000000000..73d10e758c2 --- /dev/null +++ b/python/extractor/blib2to3/pgen2/token.py @@ -0,0 +1,91 @@ +"""Token constants (from "token.h").""" + +# Taken from Python (r53757) and modified to include some tokens +# originally monkeypatched in by pgen2.tokenize + +#--start constants-- +ENDMARKER = 0 +NAME = 1 +NUMBER = 2 +STRING = 3 +NEWLINE = 4 +INDENT = 5 +DEDENT = 6 +LPAR = 7 +RPAR = 8 +LSQB = 9 +RSQB = 10 +COLON = 11 +COMMA = 12 +SEMI = 13 +PLUS = 14 +MINUS = 15 +STAR = 16 +SLASH = 17 +VBAR = 18 +AMPER = 19 +LESS = 20 +GREATER = 21 +EQUAL = 22 +DOT = 23 +PERCENT = 24 +BACKQUOTE = 25 +LBRACE = 26 +RBRACE = 27 +EQEQUAL = 28 +NOTEQUAL = 29 +LESSEQUAL = 30 +GREATEREQUAL = 31 +TILDE = 32 +CIRCUMFLEX = 33 +LEFTSHIFT = 34 +RIGHTSHIFT = 35 +DOUBLESTAR = 36 +PLUSEQUAL = 37 +MINEQUAL = 38 +STAREQUAL = 39 +SLASHEQUAL = 40 +PERCENTEQUAL = 41 +AMPEREQUAL = 42 +VBAREQUAL = 43 +CIRCUMFLEXEQUAL = 44 +LEFTSHIFTEQUAL = 45 +RIGHTSHIFTEQUAL = 46 +DOUBLESTAREQUAL = 47 +DOUBLESLASH = 48 +DOUBLESLASHEQUAL = 49 +AT = 50 +ATEQUAL = 51 +OP = 52 +COMMENT = 53 +NL = 54 +RARROW = 55 +AWAIT = 56 +ASYNC = 57 +DOLLARNAME = 58 +FSTRING_START = 59 +FSTRING_MID = 60 +FSTRING_END = 61 +CONVERSION = 62 +COLONEQUAL = 63 +FSTRING_SPEC = 64 +ILLEGALINDENT = 65 +ERRORTOKEN = 66 +N_TOKENS = 67 +NT_OFFSET = 256 +#--end constants-- + +tok_name = {} +for _name, _value in list(globals().items()): + if type(_value) is type(0): + tok_name[_value] = _name + + +def ISTERMINAL(x): + return x < NT_OFFSET + +def ISNONTERMINAL(x): + return x >= NT_OFFSET + +def ISEOF(x): + return x == ENDMARKER diff --git a/python/extractor/blib2to3/pgen2/tokenize.py b/python/extractor/blib2to3/pgen2/tokenize.py new file mode 100644 index 00000000000..0d72e69ea13 --- /dev/null +++ b/python/extractor/blib2to3/pgen2/tokenize.py @@ -0,0 +1,509 @@ +# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Python Software Foundation. +# All rights reserved. + +"""Tokenization help for Python programs. + +generate_tokens(readline) is a generator that breaks a stream of +text into Python tokens. It accepts a readline-like method which is called +repeatedly to get the next line of input (or "" for EOF). It generates +5-tuples with these members: + + the token type (see token.py) + the token (a string) + the starting (row, column) indices of the token (a 2-tuple of ints) + the ending (row, column) indices of the token (a 2-tuple of ints) + the original line (string) + +It is designed to match the working of the Python tokenizer exactly, except +that it produces COMMENT tokens for comments and gives type OP for all +operators + +Older entry points + tokenize_loop(readline, tokeneater) + tokenize(readline, tokeneater=printtoken) +are the same, except instead of generating tokens, tokeneater is a callback +function to which the 5 fields described above are passed as 5 arguments, +each time a new token is found.""" + +__author__ = 'Ka-Ping Yee ' +__credits__ = \ + 'GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, Skip Montanaro' + +import re +from codecs import BOM_UTF8, lookup +from blib2to3.pgen2.token import * +import sys + +from . import token +__all__ = [x for x in dir(token) if x[0] != '_'] + ["tokenize", + "generate_tokens", "untokenize"] +del token + +try: + bytes +except NameError: + # Support bytes type in Python <= 2.5, so 2to3 turns itself into + # valid Python 3 code. + bytes = str + +def group(*choices): return '(' + '|'.join(choices) + ')' +def any(*choices): return group(*choices) + '*' +def maybe(*choices): return group(*choices) + '?' +def _combinations(*l): + return set( + x + y for x in l for y in l + ("",) if x.lower() != y.lower() + ) + +Whitespace = r'[ \f\t]*' +Comment = r'#[^\r\n]*' +Ignore = Whitespace + any(r'\\\r?\n' + Whitespace) + maybe(Comment) +Name = r'\w+' # this is invalid but it's fine because Name comes after Number in all groups +DollarName = r'\$\w+' + +Binnumber = r'0[bB]_?[01]+(?:_[01]+)*' +Hexnumber = r'0[xX]_?[\da-fA-F]+(?:_[\da-fA-F]+)*[lL]?' +Octnumber = r'0[oO]?_?[0-7]+(?:_[0-7]+)*[lL]?' +Decnumber = group(r'[1-9]\d*(?:_\d+)*[lL]?', '0[lL]?') +Intnumber = group(Binnumber, Hexnumber, Octnumber, Decnumber) +Exponent = r'[eE][-+]?\d+(?:_\d+)*' +Pointfloat = group(r'\d+(?:_\d+)*\.(?:\d+(?:_\d+)*)?', r'\.\d+(?:_\d+)*') + maybe(Exponent) +Expfloat = r'\d+(?:_\d+)*' + Exponent +Floatnumber = group(Pointfloat, Expfloat) +Imagnumber = group(r'\d+(?:_\d+)*[jJ]', Floatnumber + r'[jJ]') +Number = group(Imagnumber, Floatnumber, Intnumber) + +# Tail end of ' string. +Single = r"[^'\\]*(?:\\.[^'\\]*)*'" +# Tail end of " string. +Double = r'[^"\\]*(?:\\.[^"\\]*)*"' +# Tail end of ''' string. +Single3 = r"[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''" +# Tail end of """ string. +Double3 = r'[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""' +_litprefix = r"(?:[uUrRbBfF]|[rR][fFbB]|[fFbBuU][rR])?" +Triple = group(_litprefix + "'''", _litprefix + '"""') +# Single-line ' or " string. +String = group(_litprefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*'", + _litprefix + r'"[^\n"\\]*(?:\\.[^\n"\\]*)*"') + +# Because of leftmost-then-longest match semantics, be sure to put the +# longest operators first (e.g., if = came before ==, == would get +# recognized as two instances of =). +Operator = group(r"\*\*=?", r">>=?", r"<<=?", r"<>", r"!=", + r"//=?", r"->", + r"[+\-*/%&@|^=<>]=?", + r"~") + +Bracket = '[][(){}]' +Special = group(r'\r?\n', r'[:;.,`@]') +Funny = group(Operator, Bracket, Special) + +PlainToken = group(Number, Funny, String, Name, DollarName) +Token = Ignore + PlainToken + +# First (or only) line of ' or " string. +ContStr = group(_litprefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*" + + group("'", r'\\\r?\n'), + _litprefix + r'"[^\n"\\]*(?:\\.[^\n"\\]*)*' + + group('"', r'\\\r?\n')) +PseudoExtras = group(r'\\\r?\n', Comment, Triple) +PseudoToken = Whitespace + group(PseudoExtras, Number, Funny, ContStr, Name, DollarName) + +tokenprog = re.compile(Token, re.UNICODE) +pseudoprog = re.compile(PseudoToken, re.UNICODE) +single3prog = re.compile(Single3) +double3prog = re.compile(Double3) + +_strprefixes = ( + _combinations('r', 'R', 'f', 'F') | + _combinations('r', 'R', 'b', 'B') | + {'u', 'U', 'ur', 'uR', 'Ur', 'UR'} +) + +endprogs = {"'": re.compile(Single), '"': re.compile(Double), + "'''": single3prog, '"""': double3prog, + } +endprogs.update({prefix+"'''": single3prog for prefix in _strprefixes}) +endprogs.update({prefix+'"""': double3prog for prefix in _strprefixes}) +endprogs.update({prefix: None for prefix in _strprefixes}) + +triple_quoted = ( + {"'''", '"""'} | + {prefix+"'''" for prefix in _strprefixes} | + {prefix+'"""' for prefix in _strprefixes} +) +single_quoted = ( + {"'", '"'} | + {prefix+"'" for prefix in _strprefixes} | + {prefix+'"' for prefix in _strprefixes} +) + +tabsize = 8 + +class TokenError(Exception): pass + +class StopTokenizing(Exception): pass + +def printtoken(type, token, xxx_todo_changeme, xxx_todo_changeme1, line): # for testing + (srow, scol) = xxx_todo_changeme + (erow, ecol) = xxx_todo_changeme1 + print("%d,%d-%d,%d:\t%s\t%s" % \ + (srow, scol, erow, ecol, tok_name[type], repr(token))) + +def tokenize(readline, tokeneater=printtoken): + """ + The tokenize() function accepts two parameters: one representing the + input stream, and one providing an output mechanism for tokenize(). + + The first parameter, readline, must be a callable object which provides + the same interface as the readline() method of built-in file objects. + Each call to the function should return one line of input as a string. + + The second parameter, tokeneater, must also be a callable object. It is + called once for each token, with five arguments, corresponding to the + tuples generated by generate_tokens(). + """ + try: + tokenize_loop(readline, tokeneater) + except StopTokenizing: + pass + +# backwards compatible interface +def tokenize_loop(readline, tokeneater): + for token_info in generate_tokens(readline): + tokeneater(*token_info) + +if sys.version_info > (3,): + isidentifier = str.isidentifier +else: + IDENTIFIER_RE = re.compile(r"^[^\d\W]\w*$", re.UNICODE) + + def isidentifier(s): + return bool(IDENTIFIER_RE.match(s)) + +ASCII = re.ASCII if sys.version_info > (3,) else 0 +cookie_re = re.compile(r'^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)', ASCII) +blank_re = re.compile(br'^[ \t\f]*(?:[#\r\n]|$)', ASCII) + +def _get_normal_name(orig_enc): + """Imitates get_normal_name in tokenizer.c.""" + # Only care about the first 12 characters. + enc = orig_enc[:12].lower().replace("_", "-") + if enc == "utf-8" or enc.startswith("utf-8-"): + return "utf-8" + if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ + enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): + return "iso-8859-1" + return orig_enc + +def detect_encoding(readline): + """ + The detect_encoding() function is used to detect the encoding that should + be used to decode a Python source file. It requires one argument, readline, + in the same way as the tokenize() generator. + + It will call readline a maximum of twice, and return the encoding used + (as a string) and a list of any lines (left as bytes) it has read + in. + + It detects the encoding from the presence of a utf-8 bom or an encoding + cookie as specified in pep-0263. If both a bom and a cookie are present, but + disagree, a SyntaxError will be raised. If the encoding cookie is an invalid + charset, raise a SyntaxError. Note that if a utf-8 bom is found, + 'utf-8-sig' is returned. + + If no encoding is specified, then the default of 'utf-8' will be returned. + """ + bom_found = False + encoding = None + default = 'utf-8' + def read_or_stop(): + try: + return readline() + except StopIteration: + return bytes() + + def find_cookie(line): + try: + line_string = line.decode('ascii') + except UnicodeDecodeError: + return None + match = cookie_re.match(line_string) + if not match: + return None + encoding = _get_normal_name(match.group(1)) + try: + codec = lookup(encoding) + except LookupError: + # This behaviour mimics the Python interpreter + raise SyntaxError("unknown encoding: " + encoding) + + if bom_found: + if codec.name != 'utf-8': + # This behaviour mimics the Python interpreter + raise SyntaxError('encoding problem: utf-8') + encoding += '-sig' + return encoding + + first = read_or_stop() + if first.startswith(BOM_UTF8): + bom_found = True + first = first[3:] + default = 'utf-8-sig' + if not first: + return default, [] + + encoding = find_cookie(first) + if encoding: + return encoding, [first] + if not blank_re.match(first): + return default, [first] + + second = read_or_stop() + if not second: + return default, [first] + + encoding = find_cookie(second) + if encoding: + return encoding, [first, second] + + return default, [first, second] + + +def generate_tokens(readline): + """ + The generate_tokens() generator requires one argument, readline, which + must be a callable object which provides the same interface as the + readline() method of built-in file objects. Each call to the function + should return one line of input as a string. Alternately, readline + can be a callable function terminating with StopIteration: + readline = open(myfile).next # Example of alternate readline + + The generator produces 5-tuples with these members: the token type; the + token string; a 2-tuple (srow, scol) of ints specifying the row and + column where the token begins in the source; a 2-tuple (erow, ecol) of + ints specifying the row and column where the token ends in the source; + and the line on which the token was found. The line passed is the + logical line; continuation lines are included. + """ + lnum = parenlev = continued = 0 + numchars = '0123456789' + contstr, needcont = '', 0 + contline = None + indents = [0] + + # 'stashed' and 'async_*' are used for async/await parsing + stashed = None + async_def = False + async_def_indent = 0 + async_def_nl = False + + while 1: # loop over lines in stream + try: + line = readline() + except StopIteration: + line = '' + lnum = lnum + 1 + pos, max = 0, len(line) + + if contstr: # continued string + if not line: + raise TokenError("EOF in multi-line string", strstart) + endmatch = endprog.match(line) + if endmatch: + pos = end = endmatch.end(0) + yield (STRING, contstr + line[:end], + strstart, (lnum, end), contline + line) + contstr, needcont = '', 0 + contline = None + elif needcont and line[-2:] != '\\\n' and line[-3:] != '\\\r\n': + yield (ERRORTOKEN, contstr + line, + strstart, (lnum, len(line)), contline) + contstr = '' + contline = None + continue + else: + contstr = contstr + line + contline = contline + line + continue + + elif parenlev == 0 and not continued: # new statement + if not line: break + column = 0 + while pos < max: # measure leading whitespace + if line[pos] == ' ': column = column + 1 + elif line[pos] == '\t': column = (column//tabsize + 1)*tabsize + elif line[pos] == '\f': column = 0 + else: break + pos = pos + 1 + if pos == max: break + + if stashed: + yield stashed + stashed = None + + if line[pos] in '\r\n': # skip blank lines + yield (NL, line[pos:], (lnum, pos), (lnum, len(line)), line) + continue + + if line[pos] == '#': # skip comments + comment_token = line[pos:].rstrip('\r\n') + nl_pos = pos + len(comment_token) + yield (COMMENT, comment_token, + (lnum, pos), (lnum, pos + len(comment_token)), line) + yield (NL, line[nl_pos:], + (lnum, nl_pos), (lnum, len(line)), line) + continue + + if column > indents[-1]: # count indents + indents.append(column) + yield (INDENT, line[:pos], (lnum, 0), (lnum, pos), line) + + while column < indents[-1]: # count dedents + if column not in indents: + raise IndentationError( + "unindent does not match any outer indentation level", + ("", lnum, pos, line)) + indents = indents[:-1] + + if async_def and async_def_indent >= indents[-1]: + async_def = False + async_def_nl = False + async_def_indent = 0 + + yield (DEDENT, '', (lnum, pos), (lnum, pos), line) + + if async_def and async_def_nl and async_def_indent >= indents[-1]: + async_def = False + async_def_nl = False + async_def_indent = 0 + + else: # continued statement + if not line: + raise TokenError("EOF in multi-line statement", (lnum, 0)) + continued = 0 + + while pos < max: + pseudomatch = pseudoprog.match(line, pos) + if pseudomatch: # scan for tokens + start, end = pseudomatch.span(1) + spos, epos, pos = (lnum, start), (lnum, end), end + token, initial = line[start:end], line[start] + + if initial in numchars or \ + (initial == '.' and token != '.'): # ordinary number + yield (NUMBER, token, spos, epos, line) + elif initial in '\r\n': + newline = NEWLINE + if parenlev > 0: + newline = NL + elif async_def: + async_def_nl = True + if stashed: + yield stashed + stashed = None + yield (newline, token, spos, epos, line) + + elif initial == '#': + assert not token.endswith("\n") + if stashed: + yield stashed + stashed = None + yield (COMMENT, token, spos, epos, line) + elif token in triple_quoted: + endprog = endprogs[token] + endmatch = endprog.match(line, pos) + if endmatch: # all on one line + pos = endmatch.end(0) + token = line[start:pos] + if stashed: + yield stashed + stashed = None + yield (STRING, token, spos, (lnum, pos), line) + else: + strstart = (lnum, start) # multiple lines + contstr = line[start:] + contline = line + break + elif initial in single_quoted or \ + token[:2] in single_quoted or \ + token[:3] in single_quoted: + if token[-1] == '\n': # continued string + strstart = (lnum, start) + endprog = (endprogs[initial] or endprogs[token[1]] or + endprogs[token[2]]) + contstr, needcont = line[start:], 1 + contline = line + break + else: # ordinary string + if stashed: + yield stashed + stashed = None + yield (STRING, token, spos, epos, line) + elif isidentifier(initial): # ordinary name + if token in ('async', 'await'): + if async_def: + yield (ASYNC if token == 'async' else AWAIT, + token, spos, epos, line) + continue + + tok = (NAME, token, spos, epos, line) + if token == 'async' and not stashed: + stashed = tok + continue + + if token in ('def', 'for'): + if (stashed + and stashed[0] == NAME + and stashed[1] == 'async'): + + if token == 'def': + async_def = True + async_def_indent = indents[-1] + + yield (ASYNC, stashed[1], + stashed[2], stashed[3], + stashed[4]) + stashed = None + + if stashed: + yield stashed + stashed = None + + yield tok + elif initial == '\\': # continued stmt + # This yield is new; needed for better idempotency: + if stashed: + yield stashed + stashed = None + yield (NL, token, spos, (lnum, pos), line) + continued = 1 + elif initial == '$': + if stashed: + yield stashed + stashed = None + yield (DOLLARNAME, token, spos, epos, line) + else: + if initial in '([{': parenlev = parenlev + 1 + elif initial in ')]}': parenlev = parenlev - 1 + if stashed: + yield stashed + stashed = None + yield (OP, token, spos, epos, line) + else: + yield (ERRORTOKEN, line[pos], + (lnum, pos), (lnum, pos+1), line) + pos = pos + 1 + + if stashed: + yield stashed + stashed = None + + for indent in indents[1:]: # pop remaining indent levels + yield (DEDENT, '', (lnum, 0), (lnum, 0), '') + yield (ENDMARKER, '', (lnum, 0), (lnum, 0), '') + +if __name__ == '__main__': # testing + import sys + if len(sys.argv) > 1: tokenize(open(sys.argv[1]).readline) + else: tokenize(sys.stdin.readline) diff --git a/python/extractor/blib2to3/pygram.py b/python/extractor/blib2to3/pygram.py new file mode 100644 index 00000000000..1602d536893 --- /dev/null +++ b/python/extractor/blib2to3/pygram.py @@ -0,0 +1,56 @@ +# Copyright 2006 Google, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +"""Export the Python grammar and symbols.""" + +# Python imports +import os + +# Local imports +from .pgen2 import token +from .pgen2 import driver + +# The grammar file +_GRAMMAR_FILE = "Grammar.txt" + + +class Symbols(object): + + def __init__(self, grammar): + """Initializer. + + Creates an attribute for each grammar symbol (nonterminal), + whose value is the symbol's type (an int >= 256). + """ + for name, symbol in grammar.symbol2number.items(): + setattr(self, name, symbol) + + +def initialize(cache_dir=None): + global python2_grammar + global python2_grammar_no_print_statement + global python3_grammar + global python3_grammar_no_async + global python_symbols + + python_grammar = driver.load_grammar("blib2to3", _GRAMMAR_FILE) + python_symbols = Symbols(python_grammar) + + # Python 2 + python2_grammar = python_grammar.copy() + del python2_grammar.keywords["async"] + del python2_grammar.keywords["await"] + + # Python 2 + from __future__ import print_function + python2_grammar_no_print_statement = python2_grammar.copy() + del python2_grammar_no_print_statement.keywords["print"] + + # Python 3 + python3_grammar = python_grammar + del python3_grammar.keywords["print"] + del python3_grammar.keywords["exec"] + + #Python 3 wihtout async or await + python3_grammar_no_async = python3_grammar.copy() + del python3_grammar_no_async.keywords["async"] + del python3_grammar_no_async.keywords["await"] diff --git a/python/extractor/blib2to3/pytree.py b/python/extractor/blib2to3/pytree.py new file mode 100644 index 00000000000..71724b263d3 --- /dev/null +++ b/python/extractor/blib2to3/pytree.py @@ -0,0 +1,29 @@ +# Copyright 2006 Google, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +""" +Python parse tree definitions. + +This is a very concrete parse tree; we need to keep every token and +even the comments and whitespace between tokens. + +There's also a pattern matching implementation here. +""" + +__author__ = "Guido van Rossum " + +import sys +from io import StringIO + +HUGE = 0x7FFFFFFF # maximum repeat count, default max + +_type_reprs = {} +def type_repr(type_num): + global _type_reprs + if not _type_reprs: + from .pygram import python_symbols + # printing tokens is possible but not as useful + # from .pgen2 import token // token.__dict__.items(): + for name, val in python_symbols.__dict__.items(): + if type(val) == int: _type_reprs[val] = name + return _type_reprs.setdefault(type_num, type_num) diff --git a/python/extractor/buildtools/__init__.py b/python/extractor/buildtools/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/buildtools/auto_install.py b/python/extractor/buildtools/auto_install.py new file mode 100644 index 00000000000..197f994db6c --- /dev/null +++ b/python/extractor/buildtools/auto_install.py @@ -0,0 +1,106 @@ +#!/usr/bin/python3 + +import sys +import logging +import os +import os.path +import re + +from packaging.specifiers import SpecifierSet +from packaging.version import Version + +import buildtools.semmle.requirements as requirements + +logging.basicConfig(level=logging.WARNING) + + +def pip_install(req, venv, dependencies=True, wheel=True): + venv.upgrade_pip() + tmp = requirements.save_to_file([req]) + #Install the requirements using the venv python + args = [ "install", "-r", tmp] + if dependencies: + print("Installing %s with dependencies." % req) + elif wheel: + print("Installing %s without dependencies." % req) + args += [ "--no-deps"] + else: + print("Installing %s without dependencies or wheel." % req) + args += [ "--no-deps", "--no-binary", ":all:"] + print("Calling " + " ".join(args)) + venv.pip(args) + os.remove(tmp) + +def restrict_django(reqs): + for req in reqs: + if sys.version_info[0] < 3 and req.name.lower() == "django": + if Version("2") in req.specifier: + req.specifier = SpecifierSet("<2") + return reqs + +ignored_packages = [ + "pyobjc-.*", + "pypiwin32", + "frida", + "pyopenssl", # Installed by pip. Don't mess with its version. + "wxpython", # Takes forever to compile all the C code. + "cryptography", #Installed by pyOpenSSL and thus by pip. Don't mess with its version. + "psycopg2", #psycopg2 version 2.6 fails to install. +] + +if os.name != "nt": + ignored_packages.append("pywin32") #Only works on Windows + +ignored_package_regex = re.compile("|".join(ignored_packages)) + +def non_ignored(reqs): + filtered_reqs = [] + for req in reqs: + if ignored_package_regex.match(req.name.lower()) is not None: + logging.info("Package %s is ignored. Skipping." % req.name) + else: + filtered_reqs += [req] + return filtered_reqs + +def try_install_with_deps(req, venv): + try: + pip_install(req, venv, dependencies=True) + except Exception as ex: + logging.warn("Failed to install all dependencies for " + req.name) + logging.info(ex) + try: + pip_install(req, venv, dependencies = False) + except Exception: + pip_install(req, venv, dependencies = False, wheel = False) + +def install(reqs, venv): + '''Attempt to install a sufficient and stable set of dependencies from the requirements.txt file. + First of all we 'clean' the requirements, removing contradictory version numbers. + Then we attempt to install the restricted version of each dependency, and , should that fail, + we install the unrestricted version. If that fails, the whole installation fails. + Once the immediate dependencies are installed, we then (attempt to ) install the dependencies. + Returns True if installation was successful. False otherwise. + + `reqs` should be a string containing all requirements separated by newlines or a list of + strings with each string being a requirement. + ''' + if isinstance(reqs, str): + reqs = reqs.split("\n") + reqs = requirements.parse(reqs) + reqs = restrict_django(reqs) + reqs = non_ignored(reqs) + cleaned = requirements.clean(reqs) + restricted = requirements.restrict(reqs) + for i, req in enumerate(restricted): + try: + try_install_with_deps(req, venv) + except Exception as ex1: + try: + try_install_with_deps(cleaned[i], venv) + except Exception as ex2: + logging.error("Failed to install " + req.name) + logging.warning(ex2) + return False + logging.info("Failed to install restricted form of " + req.name) + logging.info(ex1) + return True diff --git a/python/extractor/buildtools/discover.py b/python/extractor/buildtools/discover.py new file mode 100644 index 00000000000..b938d92794a --- /dev/null +++ b/python/extractor/buildtools/discover.py @@ -0,0 +1,65 @@ +import sys +import os + +from buildtools import version + +DEFAULT_VERSION = 3 + +def get_relative_root(root_identifiers): + if any([os.path.exists(identifier) for identifier in root_identifiers]): + print("Source root appears to be the real root.") + return "." + + found = set() + for directory in next(os.walk("."))[1]: + if any([os.path.exists(os.path.join(directory, identifier)) for identifier in root_identifiers]): + found.add(directory) + if not found: + print("No directories containing root identifiers were found. Returning working directory as root.") + return "." + if len(found) > 1: + print("Multiple possible root directories found. Returning working directory as root.") + return "." + + root = found.pop() + print("'%s' appears to be the root." % root) + return root + +def get_root(*root_identifiers): + return os.path.abspath(get_relative_root(root_identifiers)) + +REQUIREMENTS_TAG = "LGTM_PYTHON_SETUP_REQUIREMENTS_FILES" + +def find_requirements(dir): + if REQUIREMENTS_TAG in os.environ: + val = os.environ[REQUIREMENTS_TAG] + if val == "false": + return [] + paths = [ os.path.join(dir, line.strip()) for line in val.splitlines() ] + for p in paths: + if not os.path.exists(p): + raise IOError(p + " not found") + return paths + candidates = ["requirements.txt", "test-requirements.txt"] + return [ path if os.path.exists(path) else "" for path in [ os.path.join(dir, file) for file in candidates] ] + +def discover(default_version=DEFAULT_VERSION): + """Discover things about the Python checkout and return a version, root, requirement-files triple.""" + root = get_root("requirements.txt", "setup.py") + v = version.best_version(root, default_version) + # Unify the requirements or just get path to requirements... + requirement_files = find_requirements(root) + return v, root, requirement_files + +def get_version(default_version=DEFAULT_VERSION): + root = get_root("requirements.txt", "setup.py") + return version.best_version(root, default_version) + +def main(): + if len(sys.argv) > 1: + print(discover(int(sys.argv[1]))) + else: + print(discover()) + +if __name__ == "__main__": + main() diff --git a/python/extractor/buildtools/helper.py b/python/extractor/buildtools/helper.py new file mode 100644 index 00000000000..c1676ed1b4c --- /dev/null +++ b/python/extractor/buildtools/helper.py @@ -0,0 +1,16 @@ +import os +import traceback +import re + + +SCRIPTDIR = os.path.split(os.path.dirname(__file__))[1] + + +def print_exception_indented(opt=None): + exc_text = traceback.format_exc() + for line in exc_text.splitlines(): + # remove path information that might be sensitive + # for example, in the .pyc files for Python 2, a traceback would contain + # /home/rasmus/code/target/thirdparty/python/build/extractor-python/buildtools/install.py + line = re.sub(r'File \".*' + SCRIPTDIR + r'(.*)\",', r'File <'+ SCRIPTDIR + r'\1>', line) + print(' ' + line) diff --git a/python/extractor/buildtools/index.py b/python/extractor/buildtools/index.py new file mode 100644 index 00000000000..10521868313 --- /dev/null +++ b/python/extractor/buildtools/index.py @@ -0,0 +1,429 @@ +import sys +import os +import subprocess +import csv + +if sys.version_info < (3,): + from urlparse import urlparse + from urllib import url2pathname +else: + from urllib.parse import urlparse + from urllib.request import url2pathname + +from buildtools import discover +from buildtools import install +from buildtools.version import executable, extractor_executable + + +INCLUDE_TAG = "LGTM_INDEX_INCLUDE" +EXCLUDE_TAG = "LGTM_INDEX_EXCLUDE" +FILTER_TAG = "LGTM_INDEX_FILTERS" +PATH_TAG = "LGTM_INDEX_IMPORT_PATH" +REPO_FOLDERS_TAG = "LGTM_REPOSITORY_FOLDERS_CSV" +REPO_EXCLUDE_KINDS = "metadata", "external" + +# These are the levels that the CodeQL CLI supports, in order of increasing verbosity. +CLI_LOGGING_LEVELS = ['off', 'errors', 'warnings', 'progress', 'progress+', 'progress++', 'progress+++'] + +# These are the verbosity levels used internally in the extractor. The indices of these levels +# should match up with the corresponding constants in the semmle.logging module. +EXTRACTOR_LOGGING_LEVELS = ['off', 'errors', 'warnings', 'info', 'debug', 'trace'] + +def trap_cache(): + return os.path.join(os.environ["LGTM_WORKSPACE"], "trap_cache") + +def split_into_options(lines, opt): + opts = [] + for line in lines.split("\n"): + line = line.strip() + if line: + opts.append(opt) + opts.append(line) + return opts + +def get_include_options(): + if INCLUDE_TAG in os.environ: + return split_into_options(os.environ[INCLUDE_TAG], "-R") + else: + src = os.environ["LGTM_SRC"] + return [ "-R", src] + +def get_exclude_options(): + options = [] + if EXCLUDE_TAG in os.environ: + options.extend(split_into_options(os.environ[EXCLUDE_TAG], "-Y")) + if REPO_FOLDERS_TAG not in os.environ: + return options + with open(os.environ[REPO_FOLDERS_TAG]) as csv_file: + csv_reader = csv.reader(csv_file) + next(csv_reader) # discard header + for kind, url in csv_reader: + if kind not in REPO_EXCLUDE_KINDS: + continue + try: + path = url2pathname(urlparse(url).path) + except: + print("Unable to parse '" + url + "' as file url.") + else: + options.append("-Y") + options.append(path) + return options + +def get_filter_options(): + if FILTER_TAG in os.environ: + return split_into_options(os.environ[FILTER_TAG], "--filter") + else: + return [] + +def get_path_options(version): + # We want to stop extracting libraries, and only extract the code that is in the + # repo. While in the transition period for stopping to install dependencies in the + # codeql-action, we will need to be able to support both old and new behavior. + # + # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the + # flag is enabled. + # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED + if os.environ.get("CODEQL_EXTRACTOR_PYTHON_DISABLE_LIBRARY_EXTRACTION"): + return [] + + # Not extracting dependencies will be default in CodeQL CLI release 2.16.0. Until + # 2.17.0, we provide an escape hatch to get the old behavior. + force_enable_envvar_name = "CODEQL_EXTRACTOR_PYTHON_FORCE_ENABLE_LIBRARY_EXTRACTION_UNTIL_2_17_0" + if os.environ.get(force_enable_envvar_name): + print("WARNING: We plan to remove the availability of the {} option in CodeQL CLI release 2.17.0 and beyond. Please let us know by submitting an issue to https://github.com/github/codeql why you needed to re-enable dependency extraction.".format(force_enable_envvar_name)) + path_option = [ "-p", install.get_library(version)] + if PATH_TAG in os.environ: + path_option = split_into_options(os.environ[PATH_TAG], "-p") + path_option + return path_option + else: + print("INFO: The Python extractor has recently (from 2.16.0 CodeQL CLI release) stopped extracting dependencies by default, and therefore stopped analyzing the source code of dependencies by default. We plan to remove this entirely in CodeQL CLI release 2.17.0. If you encounter problems, please let us know by submitting an issue to https://github.com/github/codeql, so we can consider adjusting our plans. It is possible to re-enable dependency extraction by exporting '{}=1'.".format(force_enable_envvar_name)) + return [] + +def get_stdlib(): + return os.path.dirname(os.__file__) + + +def exclude_pip_21_3_build_dir_options(): + """ + Handle build/ dir from `pip install .` (new in pip 21.3) + + Starting with pip 21.3, in-tree builds are now the default (see + https://pip.pypa.io/en/stable/news/#v21-3). This means that pip commands that build + the package (like `pip install .` or `pip wheel .`), will leave a copy of all the + package source code in `build/lib//`. + + If that is done before invoking the extractor, we will end up extracting that copy + as well, which is very bad (especially for points-to performance). So with this + function we try to find such folders, so they can be excluded from extraction. + + The only reliable sign is that inside the `build` folder, there must be a `lib` + subfolder, and there must not be any ordinary files. + + When the `wheel` package is installed there will also be a `bdist.linux-x86_64` + subfolder. Although most people have the `wheel` package installed, it's not + required, so we don't use that in the logic. + """ + + # As a failsafe, we include logic to disable this functionality based on an + # environment variable. + # + # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the + # flag is enabled. + # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED + if os.environ.get("CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_PIP_BUILD_DIR_EXCLUDE"): + return [] + + include_dirs = set(get_include_options()[1::2]) + + # For the purpose of exclusion, we normalize paths to their absolute path, just like + # we do in the actual traverser. + exclude_dirs = set(os.path.abspath(path) for path in get_exclude_options()[1::2]) + + to_exclude = list() + + def walk_dir(dirpath): + if os.path.abspath(dirpath) in exclude_dirs: + return + + contents = os.listdir(dirpath) + paths = [os.path.join(dirpath, c) for c in contents] + dirs = [path for path in paths if os.path.isdir(path)] + dirnames = [os.path.basename(path) for path in dirs] + + # Allow Python package such as `mypkg.build.lib`, so if we see an `__init__.py` + # file in the current dir don't walk the tree further. + if "__init__.py" in contents: + return + + # note that we don't require that there by a `setup.py` present beside the + # `build/` dir, since that is not required to build a package -- see + # https://pgjones.dev/blog/packaging-without-setup-py-2020 + # + # Although I didn't observe `pip install .` with a package that uses `poetry` as + # the build-system leave behind a `build/` directory, that doesn't mean it + # couldn't happen. + if os.path.basename(dirpath) == "build" and "lib" in dirnames and dirs == paths: + to_exclude.append(dirpath) + return # no need to walk the sub directories + + for dir in dirs: + # We ignore symlinks, as these can present infinite loops, and any folders + # they can point to will be handled on their own anyway. + if not os.path.islink(dir): + walk_dir(dir) + + for top in include_dirs: + walk_dir(top) + + options = [] + + if to_exclude: + print( + "Excluding the following directories from extraction, since they look like " + "in-tree build directories generated by pip: {}".format(to_exclude) + ) + print( + "You can disable this behavior by setting the environment variable " + "CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_PIP_BUILD_DIR_EXCLUDE=1" + ) + for dirpath in to_exclude: + options.append("-Y") # `-Y` is the same as `--exclude-file` + options.append(dirpath) + + return options + + +def exclude_venvs_options(): + """ + If there are virtual environments (venv) present within the directory that is being + extracted, we don't want to recurse into all of these and extract all the Python + source code. + + This function tries to find such venvs, and produce the right options to ignore + them. + """ + + # As a failsafe, we include logic to disable this functionality based on an + # environment variable. + # + # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the + # flag is enabled. + # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED + if os.environ.get("CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE"): + return [] + + include_dirs = set(get_include_options()[1::2]) + + # For the purpose of exclusion, we normalize paths to their absolute path, just like + # we do in the actual traverser. + exclude_dirs = set(os.path.abspath(path) for path in get_exclude_options()[1::2]) + + to_exclude = [] + + def walk_dir(dirpath): + if os.path.abspath(dirpath) in exclude_dirs: + return + + paths = [os.path.join(dirpath, c) for c in os.listdir(dirpath)] + dirs = [path for path in paths if os.path.isdir(path)] + dirnames = [os.path.basename(path) for path in dirs] + + # we look for `/Lib/site-packages` (Windows) or + # `/lib/python*/site-packages` (unix) without requiring any other files to + # be present. + # + # Initially we had implemented some more advanced logic to only ignore venvs + # that had a `pyvenv.cfg` or a suitable activate scripts. But reality turned out + # to be less reliable, so now we just ignore any venv that has a proper + # `site-packages` as a subfolder. + # + # This logic for detecting a virtual environment was based on the CPython implementation, see: + # - https://github.com/python/cpython/blob/4575c01b750cd26377e803247c38d65dad15e26a/Lib/venv/__init__.py#L122-L131 + # - https://github.com/python/cpython/blob/4575c01b750cd26377e803247c38d65dad15e26a/Lib/venv/__init__.py#L170 + # + # Some interesting examples: + # - windows without `activate`: https://github.com/NTUST/106-team4/tree/7f902fec29f68ca44d4f4385f2d7714c2078c937/finalPage/finalVENV/Scripts + # - windows with `activate`: https://github.com/Lynchie/KCM/tree/ea9eeed07e0c9eec41f9fc7480ce90390ee09876/VENV/Scripts + # - without `pyvenv.cfg`: https://github.com/FiacreT/M-moire/tree/4089755191ffc848614247e98bbb641c1933450d/osintplatform/testNeo/venv + # - without `pyvenv.cfg`: https://github.com/Lynchie/KCM/tree/ea9eeed07e0c9eec41f9fc7480ce90390ee09876/VENV + # - without `pyvenv.cfg`: https://github.com/mignonjia/NetworkingProject/tree/a89fe12ffbf384095766aadfe6454a4c0062d1e7/crud/venv + # + # I'm quite sure I saw some project on LGTM that had neither `pyvenv.cfg` or an activate script, but I could not find the reference again. + + if "Lib" in dirnames: + has_site_packages_folder = os.path.exists(os.path.join(dirpath, "Lib", "site-packages")) + elif "lib" in dirnames: + lib_path = os.path.join(dirpath, "lib") + python_folders = [dirname for dirname in os.listdir(lib_path) if dirname.startswith("python")] + has_site_packages_folder = bool(python_folders) and any( + os.path.exists(os.path.join(dirpath, "lib", python_folder, "site-packages")) for python_folder in python_folders + ) + else: + has_site_packages_folder = False + + if has_site_packages_folder: + to_exclude.append(dirpath) + return # no need to walk the sub directories + + for dir in dirs: + # We ignore symlinks, as these can present infinite loops, and any folders + # they can point to will be handled on their own anyway. + if not os.path.islink(dir): + walk_dir(dir) + + for top in include_dirs: + walk_dir(top) + + options = [] + + if to_exclude: + print( + "Excluding the following directories from extraction, since they look like " + "virtual environments: {}".format(to_exclude) + ) + print( + "You can disable this behavior by setting the environment variable " + "CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE=1" + ) + + for dirpath in to_exclude: + options.append("-Y") # `-Y` is the same as `--exclude-file` + options.append(dirpath) + + return options + +def get_extractor_logging_level(s: str): + """Returns a integer value corresponding to the logging level specified by the string s, or `None` if s is invalid.""" + try: + return EXTRACTOR_LOGGING_LEVELS.index(s) + except ValueError: + return None + +def get_cli_logging_level(s: str): + """Returns a integer value corresponding to the logging level specified by the string s, or `None` if s is invalid.""" + try: + return CLI_LOGGING_LEVELS.index(s) + except ValueError: + return None + +def get_logging_options(): + # First look for the extractor-specific option + verbosity_level = os.environ.get("CODEQL_EXTRACTOR_PYTHON_OPTION_LOGGING_VERBOSITY", None) + if verbosity_level is not None: + level = get_extractor_logging_level(verbosity_level) + if level is None: + level = get_cli_logging_level(verbosity_level) + if level is None: + # This is unlikely to be reached in practice, as the level should be validated by the CLI. + raise ValueError( + "Invalid verbosity level: {}. Valid values are: {}".format( + verbosity_level, ", ".join(set(EXTRACTOR_LOGGING_LEVELS + CLI_LOGGING_LEVELS)) + ) + ) + return ["--verbosity", str(level)] + + # Then look for the CLI-wide option + cli_verbosity_level = os.environ.get("CODEQL_VERBOSITY", None) + if cli_verbosity_level is not None: + level = get_cli_logging_level(cli_verbosity_level) + if level is None: + # This is unlikely to be reached in practice, as the level should be validated by the CLI. + raise ValueError( + "Invalid verbosity level: {}. Valid values are: {}".format( + cli_verbosity_level, ", ".join(CLI_LOGGING_LEVELS) + ) + ) + return ["--verbosity", str(level)] + + # Default behaviour: turn on verbose mode: + return ["-v"] + + +def extractor_options(version): + options = [] + + options += get_logging_options() + + # use maximum number of processes + options += ["-z", "all"] + + # cache trap files + options += ["-c", trap_cache()] + + options += get_path_options(version) + options += get_include_options() + options += get_exclude_options() + options += get_filter_options() + options += exclude_pip_21_3_build_dir_options() + options += exclude_venvs_options() + + return options + + +def site_flag(version): + # + # Disabling site with -S (which we do by default) has been observed to cause + # problems at some customers. We're not entirely sure enabling this by default is + # going to be 100% ok, so for now we just want to disable this flag if running with + # it turns out to be a problem (which we check for). + # + # see https://docs.python.org/3/library/site.html + # + # I don't see any reason for running with -S when invoking the tracer in this + # scenario. If we were using the executable from a virtual environment after + # installing PyPI packages, running without -S would allow one of those packages to + # influence the behavior of the extractor, as was the problem for CVE-2020-5252 + # (described in https://github.com/akoumjian/python-safety-vuln). But since this is + # not the case, I don't think there is any advantage to running with -S. + + # Although we have an automatic way that should detect when we should not be running + # with -S, we're not 100% certain that it is not possible to create _other_ strange + # Python installations where `gzip` could be available, but the rest of the standard + # library still not being available. Therefore we're going to keep this environment + # variable, just to make sure there is an easy fall-back in those cases. + # + # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the + # flag is enabled. + # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED + if os.environ.get("CODEQL_EXTRACTOR_PYTHON_ENABLE_SITE"): + return [] + + try: + # In the cases where customers had problems, `gzip` was the first module + # encountered that could not be loaded, so that's the one we check for. Note + # that this has nothing to do with it being problematic to add GZIP support to + # Python :) + args = executable(version) + ["-S", "-c", "import gzip"] + subprocess.check_call(args) + return ["-S"] + except (subprocess.CalledProcessError, Exception): + print("Running without -S") + return [] + +def get_analysis_version(major_version): + """Gets the version of Python that we _analyze_ the code as being written for. + The return value is a string, e.g. "3.11" or "2.7.18". Populating the `major_version`, + `minor_version` and `micro_version` predicates is done inside the CodeQL libraries. + """ + # If the version is already specified, simply reuse it. + if "CODEQL_EXTRACTOR_PYTHON_ANALYSIS_VERSION" in os.environ: + return os.environ["CODEQL_EXTRACTOR_PYTHON_ANALYSIS_VERSION"] + elif major_version == 2: + return "2.7.18" # Last officially supported version + else: + return "3.12" # This should always be the latest supported version + + +def main(): + version = discover.get_version() + tracer = os.path.join(os.environ["SEMMLE_DIST"], "tools", "python_tracer.py") + args = extractor_executable() + site_flag(3) + [tracer] + extractor_options(version) + print("Calling " + " ".join(args)) + sys.stdout.flush() + sys.stderr.flush() + env = os.environ.copy() + env["CODEQL_EXTRACTOR_PYTHON_ANALYSIS_VERSION"] = get_analysis_version(version) + subprocess.check_call(args, env=env) + +if __name__ == "__main__": + main() diff --git a/python/extractor/buildtools/install.py b/python/extractor/buildtools/install.py new file mode 100644 index 00000000000..4ce8b82e178 --- /dev/null +++ b/python/extractor/buildtools/install.py @@ -0,0 +1,123 @@ +import sys +import os +import subprocess +import re +import ast +import tempfile + +from buildtools import unify_requirements +from buildtools.version import executable +from buildtools.version import WIN +from buildtools.helper import print_exception_indented + +def call(args, cwd=None): + print("Calling " + " ".join(args)) + sys.stdout.flush() + sys.stderr.flush() + subprocess.check_call(args, cwd=cwd) + +class Venv(object): + + def __init__(self, path, version): + self.environ = {} + self.path = path + exe_ext = [ "Scripts", "python.exe" ] if WIN else [ "bin", "python" ] + self.venv_executable = os.path.join(self.path, *exe_ext) + self._lib = None + self.pip_upgraded = False + self.empty_folder = tempfile.mkdtemp(prefix="empty", dir=os.environ["LGTM_WORKSPACE"]) + self.version = version + + def create(self): + if self.version < 3: + venv = ["-m", "virtualenv", "--never-download"] + else: + venv = ["-m", "venv"] + call(executable(self.version) + venv + [self.path], cwd=self.empty_folder) + + def upgrade_pip(self): + 'Make sure that pip has been upgraded to latest version' + if self.pip_upgraded: + return + self.pip([ "install", "--upgrade", "pip"]) + self.pip_upgraded = True + + def pip(self, args): + call([self.venv_executable, "-m", "pip"] + args, cwd=self.empty_folder) + + @property + def lib(self): + if self._lib is None: + try: + tools = os.path.join(os.environ['SEMMLE_DIST'], "tools") + get_venv_lib = os.path.join(tools, "get_venv_lib.py") + if os.path.exists(self.venv_executable): + python_executable = [self.venv_executable] + else: + python_executable = executable(self.version) + args = python_executable + [get_venv_lib] + print("Calling " + " ".join(args)) + sys.stdout.flush() + sys.stderr.flush() + self._lib = subprocess.check_output(args) + if sys.version_info >= (3,): + self._lib = str(self._lib, sys.getfilesystemencoding()) + self._lib = self._lib.rstrip("\r\n") + except: + lib_ext = ["Lib"] if WIN else [ "lib" ] + self._lib = os.path.join(self.path, *lib_ext) + print('Error trying to run get_venv_lib (this is Python {})'.format(sys.version[:5])) + print_exception_indented() + return self._lib + +def venv_path(): + return os.path.join(os.environ["LGTM_WORKSPACE"], "venv") + +def system_packages(version): + output = subprocess.check_output(executable(version) + [ "-c", "import sys; print(sys.path)"]) + if sys.version_info >= (3,): + output = str(output, sys.getfilesystemencoding()) + paths = ast.literal_eval(output.strip()) + return [ path for path in paths if ("dist-packages" in path or "site-packages" in path) ] + +REQUIREMENTS_TAG = "LGTM_PYTHON_SETUP_REQUIREMENTS" +EXCLUDE_REQUIREMENTS_TAG = "LGTM_PYTHON_SETUP_EXCLUDE_REQUIREMENTS" + +def main(version, root, requirement_files): + # We import `auto_install` here, as it has a dependency on the `packaging` + # module. For the CodeQL CLI (where we do not install any packages) we never + # run the `main` function, and so there is no need to always import this + # dependency. + from buildtools import auto_install + print("version, root, requirement_files", version, root, requirement_files) + venv = Venv(venv_path(), version) + venv.create() + if REQUIREMENTS_TAG in os.environ: + if not auto_install.install(os.environ[REQUIREMENTS_TAG], venv): + sys.exit(1) + requirements_from_setup = os.path.join(os.environ["LGTM_WORKSPACE"], "setup_requirements.txt") + args = [ venv.venv_executable, os.path.join(os.environ["SEMMLE_DIST"], "tools", "convert_setup.py"), root, requirements_from_setup] + system_packages(version) + print("Calling " + " ".join(args)) + sys.stdout.flush() + sys.stderr.flush() + #We don't care if this fails, we only care if `requirements_from_setup` was created. + subprocess.call(args) + if os.path.exists(requirements_from_setup): + requirement_files = [ requirements_from_setup ] + requirement_files[1:] + print("Requirement files: " + str(requirement_files)) + requirements = unify_requirements.gather(requirement_files) + if EXCLUDE_REQUIREMENTS_TAG in os.environ: + excludes = os.environ[EXCLUDE_REQUIREMENTS_TAG].splitlines() + print("Excluding ", excludes) + regex = re.compile("|".join(exclude + r'\b' for exclude in excludes)) + requirements = [ req for req in requirements if not regex.match(req) ] + err = 0 if auto_install.install(requirements, venv) else 1 + sys.exit(err) + +def get_library(version): + return Venv(venv_path(), version).lib + +if __name__ == "__main__": + version, root, requirement_files = sys.argv[1], sys.argv[2], sys.argv[3:] + version = int(version) + main(version, root, requirement_files) diff --git a/python/extractor/buildtools/semmle/__init__.py b/python/extractor/buildtools/semmle/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/buildtools/semmle/requirements.py b/python/extractor/buildtools/semmle/requirements.py new file mode 100644 index 00000000000..7258bd64522 --- /dev/null +++ b/python/extractor/buildtools/semmle/requirements.py @@ -0,0 +1,136 @@ +import copy +import tempfile +import re +from packaging.requirements import Requirement +from packaging.version import Version +from packaging.specifiers import SpecifierSet + +IGNORED_REQUIREMENTS = re.compile("^(-e\\s+)?(git|svn|hg)(?:\\+.*)?://.*$") + +def parse(lines): + 'Parse a list of requirement strings into a list of `Requirement`s' + res = [] + #Process + for line in lines: + if '#' in line: + line, _ = line.split('#', 1) + if not line: + continue + if IGNORED_REQUIREMENTS.match(line): + continue + try: + req = Requirement(line) + except: + print("Cannot parse requirements line '%s'" % line) + else: + res.append(req) + return res + +def parse_file(filename): + with open(filename, 'r') as fd: + return parse(fd.read().splitlines()) + +def save_to_file(reqs): + 'Takes a list of requirements, saves them to a temporary file and returns the filename' + with tempfile.NamedTemporaryFile(prefix="semmle-requirements", suffix=".txt", mode="w", delete=False) as fd: + for req in reqs: + if req.url is None: + fd.write(str(req)) + else: + fd.write(req.url) + fd.write("\n") + return fd.name + +def clean(reqs): + 'Look for self-contradictory specifier groups and remove the necessary specifier parts to make them consistent' + result = [] + for req in reqs: + specs = req.specifier + cleaned_specs = _clean_specs(specs) + req.specifier = cleaned_specs + result.append(Requirement(str(req))) + req.specifier = specs + return result + +def _clean_specs(specs): + ok = SpecifierSet() + #Choose a deterministic order such that >= comes before <=. + for spec in sorted(iter(specs), key=str, reverse=True): + for ok_spec in ok: + if not _compatible_specifier(ok_spec, spec): + break + else: + ok &= SpecifierSet(str(spec)) + return ok + +def restrict(reqs): + '''Restrict versions to "compatible" versions. + For example restrict >=1.2 to all versions >= 1.2 that have 1 as the major version number. + >=N... becomes >=N...,==N.* and >N... requirements becomes >N..,==N.* + ''' + #First of all clean the requirements + reqs = clean(reqs) + result = [] + for req in reqs: + specs = req.specifier + req.specifier = _restrict_specs(specs) + result.append(Requirement(str(req))) + req.specifier = specs + return result + +def _restrict_specs(specs): + restricted = copy.deepcopy(specs) + #Iteration order doesn't really matter here so we choose the + #same as for clean, just to be consistent + for spec in sorted(iter(specs), key=str, reverse=True): + if spec.operator in ('>', '>='): + base_version = spec.version.split(".", 1)[0] + restricted &= SpecifierSet('==' + base_version + '.*') + return restricted + +def _compatible_specifier(s1, s2): + overlaps = 0 + overlaps += _min_version(s1) in s2 + overlaps += _max_version(s1) in s2 + overlaps += _min_version(s2) in s1 + overlaps += _max_version(s2) in s1 + if overlaps > 1: + return True + if overlaps == 1: + #One overlap -- Generally compatible, but not for =x + return not _is_strict(s1) and not _is_strict(s2) + #overlaps == 0: + return False + +MIN_VERSION = Version('0.0a0') +MAX_VERSION = Version('1000000') + +def _min_version(s): + if s.operator in ('>', '>='): + return s.version + elif s.operator in ('<', '<=', '!='): + return MIN_VERSION + elif s.operator == '==': + v = s.version + if v[-1] == '*': + return v[:-1] + '0' + else: + return s.version + else: + # '~=' + return s.version + +def _max_version(s): + if s.operator in ('<', '<='): + return s.version + elif s.operator in ('>', '>=', '!='): + return MAX_VERSION + elif s.operator in ('~=', '=='): + v = s.version + if v[-1] == '*' or s.operator == '~=': + return v[:-1] + '1000000' + else: + return s.version + +def _is_strict(s): + return s.operator in ('>', '<') diff --git a/python/extractor/buildtools/tox.ini b/python/extractor/buildtools/tox.ini new file mode 100644 index 00000000000..b1be1caaff0 --- /dev/null +++ b/python/extractor/buildtools/tox.ini @@ -0,0 +1,14 @@ +# this is a setup file for `tox`, which allows us to run test locally against multiple python +# versions. Simply run `tox` in the directory of this file! +# +# install tox with `pipx install tox` or whatever your preferred way is :) + +[tox] +envlist = py27,py3 +skipsdist=True + +[testenv] +# install in the virtualenv where commands will be executed +deps = pytest +commands = + pytest diff --git a/python/extractor/buildtools/unify_requirements.py b/python/extractor/buildtools/unify_requirements.py new file mode 100644 index 00000000000..b6dcac683ab --- /dev/null +++ b/python/extractor/buildtools/unify_requirements.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +import os +import re + +def get_requirements(file_path): + if not file_path: + return [] + with open(file_path, "r") as requirements_file: + lines = requirements_file.read().splitlines() + for line_no, line in enumerate(lines): + match = re.search("^\\s*-r\\s+([^#]+)", line) + if match: + include_file_path = os.path.join(os.path.dirname(file_path), match.group(1).strip()) + include_requirements = get_requirements(include_file_path) + lines[line_no:line_no+1] = include_requirements + return lines + +def deduplicate(requirements): + result = [] + seen = set() + for req in requirements: + if req in seen: + continue + result.append(req) + seen.add(req) + return result + +def gather(requirement_files): + requirements = [] + for file in requirement_files: + requirements += get_requirements(file) + requirements = deduplicate(requirements) + print("Requirements:") + for r in requirements: + print(" {}".format(r)) + return requirements diff --git a/python/extractor/buildtools/version.py b/python/extractor/buildtools/version.py new file mode 100644 index 00000000000..e6f685a64b1 --- /dev/null +++ b/python/extractor/buildtools/version.py @@ -0,0 +1,223 @@ +import sys +import os +import subprocess +import tokenize +import re + +from buildtools.helper import print_exception_indented + + +TROVE = re.compile(r"Programming Language\s+::\s+Python\s+::\s+(\d)") + +if sys.version_info > (3,): + import collections.abc as collections + file_open = tokenize.open +else: + import collections + file_open = open + +WIN = sys.platform == "win32" + + +if WIN: + # installing `py` launcher is optional when installing Python on windows, so it's + # possible that the user did not install it, see + # https://github.com/github/codeql-cli-binaries/issues/125#issuecomment-1157429430 + # so we check whether it has been installed. Newer versions have a `--list` option, + # but that has only been mentioned in the docs since 3.9, so to not risk it not + # working on potential older versions, we'll just use `py --version` which forwards + # the `--version` argument to the default python executable. + + try: + subprocess.check_call(["py", "--version"]) + except (subprocess.CalledProcessError, Exception): + sys.stderr.write("The `py` launcher is required for CodeQL to work on Windows.") + sys.stderr.write("Please include it when installing Python for Windows.") + sys.stderr.write("see https://docs.python.org/3/using/windows.html#python-launcher-for-windows") + sys.stderr.flush() + sys.exit(4) # 4 was a unique exit code at the time of writing + +AVAILABLE_VERSIONS = [] + +def set_available_versions(): + """Sets the global `AVAILABLE_VERSIONS` to a list of available (major) Python versions.""" + global AVAILABLE_VERSIONS + if AVAILABLE_VERSIONS: + return # already set + for version in [3, 2]: + try: + subprocess.check_call(" ".join(executable_name(version) + ["-c", "pass"]), shell=True) + AVAILABLE_VERSIONS.append(version) + except Exception: + pass # If not available, we simply don't add it to the list + if not AVAILABLE_VERSIONS: + # If neither 'python3' nor 'python2' is available, we'll just try 'python' and hope for the best + AVAILABLE_VERSIONS = [''] + +def executable(version): + """Returns the executable to use for the given Python version.""" + global AVAILABLE_VERSIONS + set_available_versions() + if version not in AVAILABLE_VERSIONS: + available_version = AVAILABLE_VERSIONS[0] + print("Wanted to run Python %s, but it is not available. Using Python %s instead" % (version, available_version)) + version = available_version + return executable_name(version) + + +def executable_name(version): + if WIN: + return ["py", "-%s" % version] + else: + return ["python%s" % version] + +PREFERRED_PYTHON_VERSION = None + +def extractor_executable(): + ''' + Returns the executable to use for the extractor. + If a Python executable name is specified using the extractor option, returns that name. + In the absence of a user-specified executable name, returns the executable name for + Python 3 if it is available, and Python 2 if not. + ''' + executable_name = os.environ.get("CODEQL_EXTRACTOR_PYTHON_OPTION_PYTHON_EXECUTABLE_NAME", None) + if executable_name is not None: + print("Using Python executable name provided via the python_executable_name extractor option: {}" + .format(executable_name) + ) + return [executable_name] + # Call machine_version() to ensure we've set PREFERRED_PYTHON_VERSION + if PREFERRED_PYTHON_VERSION is None: + machine_version() + return executable(PREFERRED_PYTHON_VERSION) + +def machine_version(): + """If only Python 2 or Python 3 is installed, will return that version""" + global PREFERRED_PYTHON_VERSION + print("Trying to guess Python version based on installed versions") + if sys.version_info > (3,): + this, other = 3, 2 + else: + this, other = 2, 3 + try: + exe = executable(other) + # We need `shell=True` here in order for the test framework to function correctly. For + # whatever reason, the `PATH` variable is ignored if `shell=False`. + # Also, this in turn forces us to give the whole command as a string, rather than a list. + # Otherwise, the effect is that the Python interpreter is invoked _as a REPL_, rather than + # with the given piece of code. + subprocess.check_call(" ".join(exe + [ "-c", "pass" ]), shell=True) + print("This script is running Python {}, but Python {} is also available (as '{}')" + .format(this, other, ' '.join(exe)) + ) + # If both versions are available, our preferred version is Python 3 + PREFERRED_PYTHON_VERSION = 3 + return None + except Exception: + print("Only Python {} installed -- will use that version".format(this)) + PREFERRED_PYTHON_VERSION = this + return this + +def trove_version(root): + print("Trying to guess Python version based on Trove classifiers in setup.py") + try: + full_path = os.path.join(root, "setup.py") + if not os.path.exists(full_path): + print("Did not find setup.py (expected it to be at {})".format(full_path)) + return None + + versions = set() + with file_open(full_path) as fd: + contents = fd.read() + for match in TROVE.finditer(contents): + versions.add(int(match.group(1))) + + if 2 in versions and 3 in versions: + print("Found Trove classifiers for both Python 2 and Python 3 in setup.py -- will use Python 3") + return 3 + elif len(versions) == 1: + result = versions.pop() + print("Found Trove classifier for Python {} in setup.py -- will use that version".format(result)) + return result + else: + print("Found no Trove classifiers for Python in setup.py") + except Exception: + print("Skipping due to exception:") + print_exception_indented() + return None + +def wrap_with_list(x): + if isinstance(x, collections.Iterable) and not isinstance(x, str): + return x + else: + return [x] + +def travis_version(root): + print("Trying to guess Python version based on travis file") + try: + full_paths = [os.path.join(root, filename) for filename in [".travis.yml", "travis.yml"]] + travis_file_paths = [path for path in full_paths if os.path.exists(path)] + if not travis_file_paths: + print("Did not find any travis files (expected them at either {})".format(full_paths)) + return None + + try: + import yaml + except ImportError: + print("Found a travis file, but yaml library not available") + return None + + with open(travis_file_paths[0]) as travis_file: + travis_yaml = yaml.safe_load(travis_file) + if "python" in travis_yaml: + versions = wrap_with_list(travis_yaml["python"]) + else: + versions = [] + + # 'matrix' is an alias for 'jobs' now (https://github.com/travis-ci/docs-travis-ci-com/issues/1500) + # If both are defined, only the last defined will be used. + if "matrix" in travis_yaml and "jobs" in travis_yaml: + print("Ignoring 'matrix' and 'jobs' in Travis file, since they are both defined (only one of them should be).") + else: + matrix = travis_yaml.get("matrix") or travis_yaml.get("jobs") or dict() + includes = matrix.get("include") or [] + for include in includes: + if "python" in include: + versions.extend(wrap_with_list(include["python"])) + + found = set() + for version in versions: + # Yaml may convert version strings to numbers, convert them back. + version = str(version) + if version.startswith("2"): + found.add(2) + if version.startswith("3"): + found.add(3) + + if len(found) == 1: + result = found.pop() + print("Only found Python {} in travis file -- will use that version".format(result)) + return result + elif len(found) == 2: + print("Found both Python 2 and Python 3 being used in travis file -- ignoring") + else: + print("Found no Python being used in travis file") + except Exception: + print("Skipping due to exception:") + print_exception_indented() + return None + +VERSION_TAG = "LGTM_PYTHON_SETUP_VERSION" + +def best_version(root, default): + if VERSION_TAG in os.environ: + try: + return int(os.environ[VERSION_TAG]) + except ValueError: + raise SyntaxError("Illegal value for " + VERSION_TAG) + print("Will try to guess Python version, as it was not specified in `lgtm.yml`") + version = trove_version(root) or travis_version(root) or machine_version() + if version is None: + version = default + print("Could not guess Python version, will use default: Python {}".format(version)) + return version diff --git a/python/extractor/cli-integration-test/.gitignore b/python/extractor/cli-integration-test/.gitignore new file mode 100644 index 00000000000..d3606b9b666 --- /dev/null +++ b/python/extractor/cli-integration-test/.gitignore @@ -0,0 +1,5 @@ +*/db/ +*/dbs/ +*/venv/ +**/*.egg-info/ +*/.cache diff --git a/python/extractor/cli-integration-test/README.md b/python/extractor/cli-integration-test/README.md new file mode 100644 index 00000000000..4da21247ebc --- /dev/null +++ b/python/extractor/cli-integration-test/README.md @@ -0,0 +1,21 @@ +# Extractor Python CodeQL CLI integration tests + +To ensure that the two work together as intended, and as an easy way to set up realistic test-cases. + + +### Adding a new test case + +Add a new folder, place a file called `test.sh` in it, which should start with the code below. The script should exit with failure code to fail the test. + +```bash +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" +``` diff --git a/python/extractor/cli-integration-test/basic/query.ql b/python/extractor/cli-integration-test/basic/query.ql new file mode 100644 index 00000000000..82198eaf87b --- /dev/null +++ b/python/extractor/cli-integration-test/basic/query.ql @@ -0,0 +1 @@ +select 1 diff --git a/python/extractor/cli-integration-test/basic/repo_dir/foo.py b/python/extractor/cli-integration-test/basic/repo_dir/foo.py new file mode 100644 index 00000000000..517b47df53c --- /dev/null +++ b/python/extractor/cli-integration-test/basic/repo_dir/foo.py @@ -0,0 +1 @@ +print(42) diff --git a/python/extractor/cli-integration-test/basic/test.sh b/python/extractor/cli-integration-test/basic/test.sh new file mode 100755 index 00000000000..13433df24b9 --- /dev/null +++ b/python/extractor/cli-integration-test/basic/test.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf db + +$CODEQL database create db --language python --source-root repo_dir/ +$CODEQL query run --database db query.ql diff --git a/python/extractor/cli-integration-test/disable-library-extraction/repo_dir/foo.py b/python/extractor/cli-integration-test/disable-library-extraction/repo_dir/foo.py new file mode 100644 index 00000000000..cf0cd77a108 --- /dev/null +++ b/python/extractor/cli-integration-test/disable-library-extraction/repo_dir/foo.py @@ -0,0 +1,3 @@ +import pip + +print(42) diff --git a/python/extractor/cli-integration-test/disable-library-extraction/test.sh b/python/extractor/cli-integration-test/disable-library-extraction/test.sh new file mode 100755 index 00000000000..ac940f811dc --- /dev/null +++ b/python/extractor/cli-integration-test/disable-library-extraction/test.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +# start on clean slate +rm -rf dbs +mkdir dbs + +cd "$SCRIPTDIR" + +# In 2.16.0 we will not extract libraries by default, so there is no difference in what +# is extracted by setting this environment variable.. We should remove this test when +# 2.17.0 is released. +export CODEQL_EXTRACTOR_PYTHON_DISABLE_LIBRARY_EXTRACTION= +$CODEQL database create dbs/normal --language python --source-root repo_dir/ + +export CODEQL_EXTRACTOR_PYTHON_DISABLE_LIBRARY_EXTRACTION=1 +$CODEQL database create dbs/no-lib-extraction --language python --source-root repo_dir/ + +# --- + +set +x + +EXTRACTED_NORMAL=$(unzip -l dbs/normal/src.zip | wc -l) +EXTRACTED_NO_LIB_EXTRACTION=$(unzip -l dbs/no-lib-extraction/src.zip | wc -l) + +exitcode=0 + +echo "EXTRACTED_NORMAL=$EXTRACTED_NORMAL" +echo "EXTRACTED_NO_LIB_EXTRACTION=$EXTRACTED_NO_LIB_EXTRACTION" + +if [[ $EXTRACTED_NO_LIB_EXTRACTION -lt $EXTRACTED_NORMAL ]]; then + echo "ERROR: EXTRACTED_NO_LIB_EXTRACTION smaller than EXTRACTED_NORMAL" + exitcode=1 +fi + +exit $exitcode diff --git a/python/extractor/cli-integration-test/extract-stdlib/query.ql b/python/extractor/cli-integration-test/extract-stdlib/query.ql new file mode 100644 index 00000000000..d2024b9228f --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/query.ql @@ -0,0 +1,18 @@ +import python +import semmle.python.types.Builtins + +predicate named_entity(string name, string kind) { + exists(Builtin::special(name)) and kind = "special" + or + exists(Builtin::builtin(name)) and kind = "builtin" + or + exists(Module m | m.getName() = name) and kind = "module" + or + exists(File f | f.getShortName() = name + ".py") and kind = "file" +} + +from string name, string kind +where + name in ["foo", "baz", "main", "os", "sys", "re"] and + named_entity(name, kind) +select name, kind order by name, kind diff --git a/python/extractor/cli-integration-test/extract-stdlib/query.with-stdlib.expected b/python/extractor/cli-integration-test/extract-stdlib/query.with-stdlib.expected new file mode 100644 index 00000000000..6431b96a625 --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/query.with-stdlib.expected @@ -0,0 +1,12 @@ +| name | kind | ++------+---------+ +| baz | file | +| baz | module | +| foo | file | +| foo | module | +| main | file | +| os | file | +| os | module | +| re | file | +| re | module | +| sys | special | diff --git a/python/extractor/cli-integration-test/extract-stdlib/query.without-stdlib.expected b/python/extractor/cli-integration-test/extract-stdlib/query.without-stdlib.expected new file mode 100644 index 00000000000..7184b6635dd --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/query.without-stdlib.expected @@ -0,0 +1,8 @@ +| name | kind | ++------+---------+ +| baz | file | +| baz | module | +| foo | file | +| foo | module | +| main | file | +| sys | special | diff --git a/python/extractor/cli-integration-test/extract-stdlib/repo_dir/baz.py b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/baz.py new file mode 100644 index 00000000000..6fc7679985c --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/baz.py @@ -0,0 +1 @@ +quux = 4 diff --git a/python/extractor/cli-integration-test/extract-stdlib/repo_dir/foo.py b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/foo.py new file mode 100644 index 00000000000..ed831dda3c2 --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/foo.py @@ -0,0 +1,4 @@ +import baz +import re +bar = 5 + baz.quux +re.compile("hello") diff --git a/python/extractor/cli-integration-test/extract-stdlib/repo_dir/main.py b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/main.py new file mode 100644 index 00000000000..5efbaf04b2d --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/main.py @@ -0,0 +1,6 @@ +import sys +import os +print(os.path) +print(sys.path) +import foo +print(foo.bar) diff --git a/python/extractor/cli-integration-test/extract-stdlib/test.sh b/python/extractor/cli-integration-test/extract-stdlib/test.sh new file mode 100755 index 00000000000..6a61becd25c --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/test.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf dbs + +mkdir dbs + +CODEQL_EXTRACTOR_PYTHON_DONT_EXTRACT_STDLIB=True $CODEQL database create dbs/without-stdlib --language python --source-root repo_dir/ +$CODEQL query run --database dbs/without-stdlib query.ql > query.without-stdlib.actual +diff query.without-stdlib.expected query.without-stdlib.actual + +LGTM_INDEX_EXCLUDE="/usr/lib/**" $CODEQL database create dbs/with-stdlib --language python --source-root repo_dir/ +$CODEQL query run --database dbs/with-stdlib query.ql > query.with-stdlib.actual +diff query.with-stdlib.expected query.with-stdlib.actual diff --git a/python/extractor/cli-integration-test/force-enable-library-extraction/repo_dir/foo.py b/python/extractor/cli-integration-test/force-enable-library-extraction/repo_dir/foo.py new file mode 100644 index 00000000000..cf0cd77a108 --- /dev/null +++ b/python/extractor/cli-integration-test/force-enable-library-extraction/repo_dir/foo.py @@ -0,0 +1,3 @@ +import pip + +print(42) diff --git a/python/extractor/cli-integration-test/force-enable-library-extraction/test.sh b/python/extractor/cli-integration-test/force-enable-library-extraction/test.sh new file mode 100755 index 00000000000..9d74cfaca4b --- /dev/null +++ b/python/extractor/cli-integration-test/force-enable-library-extraction/test.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +# start on clean slate +rm -rf dbs +mkdir dbs + +cd "$SCRIPTDIR" + +export CODEQL_EXTRACTOR_PYTHON_FORCE_ENABLE_LIBRARY_EXTRACTION_UNTIL_2_17_0= +$CODEQL database create dbs/normal --language python --source-root repo_dir/ + +export CODEQL_EXTRACTOR_PYTHON_FORCE_ENABLE_LIBRARY_EXTRACTION_UNTIL_2_17_0=1 +$CODEQL database create dbs/with-lib-extraction --language python --source-root repo_dir/ + +# --- + +set +x + +EXTRACTED_NORMAL=$(unzip -l dbs/normal/src.zip | wc -l) +EXTRACTED_WITH_LIB_EXTRACTION=$(unzip -l dbs/with-lib-extraction/src.zip | wc -l) + +exitcode=0 + +echo "EXTRACTED_NORMAL=$EXTRACTED_NORMAL" +echo "EXTRACTED_WITH_LIB_EXTRACTION=$EXTRACTED_WITH_LIB_EXTRACTION" + +if [[ ! $EXTRACTED_WITH_LIB_EXTRACTION -gt $EXTRACTED_NORMAL ]]; then + echo "ERROR: EXTRACTED_WITH_LIB_EXTRACTION not greater than EXTRACTED_NORMAL" + exitcode=1 +fi + +exit $exitcode diff --git a/python/extractor/cli-integration-test/ignore-venv/.gitignore b/python/extractor/cli-integration-test/ignore-venv/.gitignore new file mode 100644 index 00000000000..aefd67e4550 --- /dev/null +++ b/python/extractor/cli-integration-test/ignore-venv/.gitignore @@ -0,0 +1,2 @@ +venv/ +venv2/ diff --git a/python/extractor/cli-integration-test/ignore-venv/repo_dir/foo.py b/python/extractor/cli-integration-test/ignore-venv/repo_dir/foo.py new file mode 100644 index 00000000000..df8452f9f21 --- /dev/null +++ b/python/extractor/cli-integration-test/ignore-venv/repo_dir/foo.py @@ -0,0 +1,3 @@ +import flask + +print(42) diff --git a/python/extractor/cli-integration-test/ignore-venv/test.sh b/python/extractor/cli-integration-test/ignore-venv/test.sh new file mode 100755 index 00000000000..e1368008891 --- /dev/null +++ b/python/extractor/cli-integration-test/ignore-venv/test.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +# start on clean slate +rm -rf dbs repo_dir/venv* +mkdir dbs + + +# set up venvs +cd repo_dir + +python3 -m venv venv +venv/bin/pip install flask + +python3 -m venv venv2 + +cd "$SCRIPTDIR" + +# In 2.16.0 we stop extracting libraries by default, so to test this functionality we +# need to force enable it. Once we release 2.17.0 and turn off library extraction for +# good, we can remove the part of this test ensuring that dependencies in an active +# venv are still extracted (since that will no longer be the case). +export CODEQL_EXTRACTOR_PYTHON_FORCE_ENABLE_LIBRARY_EXTRACTION_UNTIL_2_17_0=1 + +# Create DBs with venv2 active (that does not have flask installed) +source repo_dir/venv2/bin/activate + +export CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE= +$CODEQL database create dbs/normal --language python --source-root repo_dir/ + +export CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE=1 +$CODEQL database create dbs/no-venv-ignore --language python --source-root repo_dir/ + +# Create DB with venv active that has flask installed. We want to ensure that we're +# still able to resolve imports to flask, but don't want to extract EVERYTHING from +# within the venv. Important note is that the test-file in the repo_dir actually imports +# flask :D +source repo_dir/venv/bin/activate +export CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE= +$CODEQL database create dbs/normal-with-flask-venv --language python --source-root repo_dir/ + +# --- + +set +x + +EXTRACTED_NORMAL=$(unzip -l dbs/normal/src.zip | wc -l) +EXTRACTED_NO_VENV_IGNORE=$(unzip -l dbs/no-venv-ignore/src.zip | wc -l) +EXTRACTED_ACTIVE_FLASK=$(unzip -l dbs/normal-with-flask-venv/src.zip | wc -l) + +exitcode=0 + +echo "EXTRACTED_NORMAL=$EXTRACTED_NORMAL" +echo "EXTRACTED_NO_VENV_IGNORE=$EXTRACTED_NO_VENV_IGNORE" +echo "EXTRACTED_ACTIVE_FLASK=$EXTRACTED_ACTIVE_FLASK" + +if [[ ! $EXTRACTED_NORMAL -lt $EXTRACTED_NO_VENV_IGNORE ]]; then + echo "ERROR: EXTRACTED_NORMAL not smaller EXTRACTED_NO_VENV_IGNORE" + exitcode=1 +fi + +if [[ ! $EXTRACTED_NORMAL -lt $EXTRACTED_ACTIVE_FLASK ]]; then + echo "ERROR: EXTRACTED_NORMAL not smaller EXTRACTED_ACTIVE_FLASK" + exitcode=1 +fi + +if [[ ! $EXTRACTED_ACTIVE_FLASK -lt $EXTRACTED_NO_VENV_IGNORE ]]; then + echo "ERROR: EXTRACTED_ACTIVE_FLASK not smaller EXTRACTED_NO_VENV_IGNORE" + exitcode=1 +fi + +exit $exitcode diff --git a/python/extractor/cli-integration-test/pip-21.3-build-dir/.gitignore b/python/extractor/cli-integration-test/pip-21.3-build-dir/.gitignore new file mode 100644 index 00000000000..62cb69e3cc3 --- /dev/null +++ b/python/extractor/cli-integration-test/pip-21.3-build-dir/.gitignore @@ -0,0 +1,2 @@ +repo_dir/build/ +dbs/ diff --git a/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/setup.py b/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/setup.py new file mode 100644 index 00000000000..077cdb126d0 --- /dev/null +++ b/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/setup.py @@ -0,0 +1,12 @@ +from setuptools import find_packages, setup + +# using src/ folder as recommended in: https://blog.ionelmc.ro/2014/05/25/python-packaging/ + +setup( + name="example_pkg", + version="0.0.1", + description="example", + packages=find_packages("src"), + package_dir={"": "src"}, + install_requires=[], +) diff --git a/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/__init__.py b/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/foo.py b/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/foo.py new file mode 100644 index 00000000000..517b47df53c --- /dev/null +++ b/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/foo.py @@ -0,0 +1 @@ +print(42) diff --git a/python/extractor/cli-integration-test/pip-21.3-build-dir/test.sh b/python/extractor/cli-integration-test/pip-21.3-build-dir/test.sh new file mode 100755 index 00000000000..bc28adaf9ff --- /dev/null +++ b/python/extractor/cli-integration-test/pip-21.3-build-dir/test.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +NUM_PYTHON_FILES_IN_REPO=$(find repo_dir/src/ -name '*.py' | wc -l) + +rm -rf venv dbs + +mkdir dbs + +python3 -m venv venv + +source venv/bin/activate + +pip install --upgrade 'pip>=21.3' + +cd repo_dir +pip install . +cd "$SCRIPTDIR" + +export CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_PIP_BUILD_DIR_EXCLUDE= +$CODEQL database create dbs/normal --language python --source-root repo_dir/ + +export CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_PIP_BUILD_DIR_EXCLUDE=1 +$CODEQL database create dbs/with-build-dir --language python --source-root repo_dir/ + +EXTRACTED_NORMAL=$(unzip -l dbs/normal/src.zip | wc -l) +EXTRACTED_WITH_BUILD=$(unzip -l dbs/with-build-dir/src.zip | wc -l) + +if [[ $((EXTRACTED_NORMAL + NUM_PYTHON_FILES_IN_REPO)) == $EXTRACTED_WITH_BUILD ]]; then + echo "Numbers add up" +else + echo "Numbers did not add up" + echo "NUM_PYTHON_FILES_IN_REPO=$NUM_PYTHON_FILES_IN_REPO" + echo "EXTRACTED_NORMAL=$EXTRACTED_NORMAL" + echo "EXTRACTED_WITH_BUILD=$EXTRACTED_WITH_BUILD" + exit 1 +fi diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.only-python2.expected b/python/extractor/cli-integration-test/python-2-deprecation/query.only-python2.expected new file mode 100644 index 00000000000..75bc5074059 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/query.only-python2.expected @@ -0,0 +1,5 @@ +| name | ++----------+ +| dircache | +| stat | +| test | diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected b/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected new file mode 100644 index 00000000000..75bc5074059 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected @@ -0,0 +1,5 @@ +| name | ++----------+ +| dircache | +| stat | +| test | diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.ql b/python/extractor/cli-integration-test/python-2-deprecation/query.ql new file mode 100644 index 00000000000..3921f6387df --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/query.ql @@ -0,0 +1,18 @@ +import python +import semmle.python.types.Builtins + +predicate named_entity(string name, string kind) { + exists(Builtin::special(name)) and kind = "special" + or + exists(Builtin::builtin(name)) and kind = "builtin" + or + exists(Module m | m.getName() = name) and kind = "module" + or + exists(File f | f.getShortName() = name + ".py") and kind = "file" +} + +from string name +where + name in ["dircache", "test", "stat"] and + named_entity(name, "file") +select name order by name diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.without-python2.expected b/python/extractor/cli-integration-test/python-2-deprecation/query.without-python2.expected new file mode 100644 index 00000000000..3fa1f24a785 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/query.without-python2.expected @@ -0,0 +1,4 @@ +| name | ++------+ +| stat | +| test | diff --git a/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/setup.py b/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/setup.py new file mode 100644 index 00000000000..f8d369cfad0 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/setup.py @@ -0,0 +1 @@ +"Programming Language :: Python :: 2" diff --git a/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/test.py b/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/test.py new file mode 100644 index 00000000000..700a624b65b --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/test.py @@ -0,0 +1,5 @@ +# `dircache` was removed in Python 3, and so is a good test of which standard library we're +# extracting. +import dircache +# A module that's present in both Python 2 and 3 +import stat diff --git a/python/extractor/cli-integration-test/python-2-deprecation/test.sh b/python/extractor/cli-integration-test/python-2-deprecation/test.sh new file mode 100755 index 00000000000..8b756a0dbec --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/test.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf dbs +rm -f *.actual + +mkdir dbs + +# NB: on our Linux CI infrastructure, `python` is aliased to `python3`. +WITHOUT_PYTHON2=$(pwd)/without-python2 +WITHOUT_PYTHON3=$(pwd)/without-python3 + +echo "Test 1: Only Python 2 is available. Should fail." +# Note the negation at the start of the command. +! PATH="$WITHOUT_PYTHON3:$PATH" $CODEQL database create dbs/only-python2-no-flag --language python --source-root repo_dir/ + +echo "Test 2: Only Python 3 is available. Should extract using Python 3 and use the Python 3 standard library." +PATH="$WITHOUT_PYTHON2:$PATH" $CODEQL database create dbs/without-python2 --language python --source-root repo_dir/ +$CODEQL query run --database dbs/without-python2 query.ql > query.without-python2.actual +diff query.without-python2.expected query.without-python2.actual + +echo "Test 3: Python 2 and 3 are both available. Should extract using Python 3, but use the Python 2 standard library." +$CODEQL database create dbs/python2-using-python3 --language python --source-root repo_dir/ +$CODEQL query run --database dbs/python2-using-python3 query.ql > query.python2-using-python3.actual +diff query.python2-using-python3.expected query.python2-using-python3.actual + +rm -f *.actual diff --git a/python/extractor/cli-integration-test/python-2-deprecation/without-python2/python2 b/python/extractor/cli-integration-test/python-2-deprecation/without-python2/python2 new file mode 100755 index 00000000000..4bbc47f8a0b --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/without-python2/python2 @@ -0,0 +1,4 @@ +echo "Attempted to run:" +echo " python2 $@" +echo "Failing instead." +exit 127 diff --git a/python/extractor/cli-integration-test/python-2-deprecation/without-python2/which b/python/extractor/cli-integration-test/python-2-deprecation/without-python2/which new file mode 100755 index 00000000000..c3bd5c78fa5 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/without-python2/which @@ -0,0 +1,6 @@ +#!/bin/bash -p + +case $1 in + python2) exit 1;; + *) command /usr/bin/which -- "$1";; +esac \ No newline at end of file diff --git a/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python new file mode 100755 index 00000000000..d500093fcd3 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python @@ -0,0 +1,4 @@ +echo "Attempted to run:" +echo " python $@" +echo "Failing instead." +exit 127 diff --git a/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python3 b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python3 new file mode 100755 index 00000000000..199457a785e --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python3 @@ -0,0 +1,4 @@ +echo "Attempted to run:" +echo " python3 $@" +echo "Failing instead." +exit 127 diff --git a/python/extractor/cli-integration-test/python-2-deprecation/without-python3/which b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/which new file mode 100755 index 00000000000..899656fdf74 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/which @@ -0,0 +1,9 @@ +#!/bin/bash -p + +echo "Fake which called with arguments: $@" + +case $1 in + python) exit 1;; + python3) exit 1;; + *) command /usr/bin/which -- "$1";; +esac \ No newline at end of file diff --git a/python/extractor/cli-integration-test/run-all-tests.sh b/python/extractor/cli-integration-test/run-all-tests.sh new file mode 100755 index 00000000000..0e458e585c9 --- /dev/null +++ b/python/extractor/cli-integration-test/run-all-tests.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +failures=() +for f in */test.sh; do + echo "Running $f:" + if ! bash "$f"; then + echo "ERROR: $f failed" + failures+=("$f") + fi + echo "---" +done + +if [ -z "${failures[*]}" ]; then + echo "All integration tests passed!" + exit 0 +else + echo "ERROR: Some integration test failed! Failures:" + for failure in "${failures[@]}" + do + echo "- ${failure}" + done + exit 1 +fi diff --git a/python/extractor/cli-integration-test/stdout-encoding/repo_dir/ನನà³à²¨_ಸà³à²•à³à²°à²¿à²ªà³à²Ÿà³.py b/python/extractor/cli-integration-test/stdout-encoding/repo_dir/ನನà³à²¨_ಸà³à²•à³à²°à²¿à²ªà³à²Ÿà³.py new file mode 100644 index 00000000000..517b47df53c --- /dev/null +++ b/python/extractor/cli-integration-test/stdout-encoding/repo_dir/ನನà³à²¨_ಸà³à²•à³à²°à²¿à²ªà³à²Ÿà³.py @@ -0,0 +1 @@ +print(42) diff --git a/python/extractor/cli-integration-test/stdout-encoding/test.sh b/python/extractor/cli-integration-test/stdout-encoding/test.sh new file mode 100755 index 00000000000..347954c8090 --- /dev/null +++ b/python/extractor/cli-integration-test/stdout-encoding/test.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf db + +# even with default encoding that doesn't support utf-8 (like on windows) we want to +# ensure that we can properly log that we've extracted files whose filenames contain +# utf-8 chars +export PYTHONIOENCODING="ascii" +$CODEQL database create db --language python --source-root repo_dir/ diff --git a/python/extractor/cli-integration-test/symlinks/.gitignore b/python/extractor/cli-integration-test/symlinks/.gitignore new file mode 100644 index 00000000000..8e28861cdaf --- /dev/null +++ b/python/extractor/cli-integration-test/symlinks/.gitignore @@ -0,0 +1,2 @@ +repo_dir/subdir +repo_dir/symlink_to_top diff --git a/python/extractor/cli-integration-test/symlinks/query.ql b/python/extractor/cli-integration-test/symlinks/query.ql new file mode 100644 index 00000000000..82198eaf87b --- /dev/null +++ b/python/extractor/cli-integration-test/symlinks/query.ql @@ -0,0 +1 @@ +select 1 diff --git a/python/extractor/cli-integration-test/symlinks/repo_dir/foo.py b/python/extractor/cli-integration-test/symlinks/repo_dir/foo.py new file mode 100644 index 00000000000..517b47df53c --- /dev/null +++ b/python/extractor/cli-integration-test/symlinks/repo_dir/foo.py @@ -0,0 +1 @@ +print(42) diff --git a/python/extractor/cli-integration-test/symlinks/test.sh b/python/extractor/cli-integration-test/symlinks/test.sh new file mode 100755 index 00000000000..aef8978bd54 --- /dev/null +++ b/python/extractor/cli-integration-test/symlinks/test.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf db + +# create two symlink loops, so +# - repo_dir/subdir/symlink_to_top -> repo_dir +# - repo_dir/symlink_to_top -> repo_dir +# such a setup was seen in https://github.com/PowerDNS/weakforced + +rm -rf repo_dir/subdir +mkdir repo_dir/subdir +ln -s .. repo_dir/subdir/symlink_to_top + +rm -f repo_dir/symlink_to_top +ln -s . repo_dir/symlink_to_top + +timeout --verbose 15s $CODEQL database create db --language python --source-root repo_dir/ +$CODEQL query run --database db query.ql diff --git a/python/extractor/cli-integration-test/writing-diagnostics/diagnostics.expected b/python/extractor/cli-integration-test/writing-diagnostics/diagnostics.expected new file mode 100644 index 00000000000..de218a50e1e --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/diagnostics.expected @@ -0,0 +1,163 @@ +{ + "attributes": { + "args": [ + "Syntax Error" + ], + "traceback": [ + "\"semmle/python/modules.py\", line 108, in py_ast", + "\"semmle/python/modules.py\", line 102, in old_py_ast", + "\"semmle/python/parser/__init__.py\", line 100, in parse", + "\"semmleFile \"\", line 1", + "\"semmle/python/extractor.py\", line 84, in process_source_module", + "\"semmle/python/modules.py\", line 92, in ast", + "\"semmle/python/modules.py\", line 120, in py_ast", + "\"semmle/python/modules.py\", line 117, in py_ast", + "\"semmle/python/parser/tsg_parser.py\", line 221, in parse", + "\"semmleFile \"\", line 1" + ] + }, + "location": { + "file": "/repo_dir/syntaxerror3.py", + "startColumn": 0, + "endColumn": 0, + "startLine": 1, + "endLine": 1 + }, + "markdownMessage": "A parse error occurred while processing `/repo_dir/syntaxerror3.py`, and as a result this file could not be analyzed. Check the syntax of the file using the `python -m py_compile` command and correct any invalid syntax.", + "severity": "warning", + "source": { + "extractorName": "python", + "id": "py/diagnostics/syntax-error", + "name": "Could not process some files due to syntax errors" + }, + "timestamp": "2023-03-13T15:03:48.177832", + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "attributes": { + "args": [ + "Syntax Error" + ], + "traceback": [ + "\"semmle/python/modules.py\", line 108, in py_ast", + "\"semmle/python/modules.py\", line 102, in old_py_ast", + "\"semmle/python/parser/__init__.py\", line 100, in parse", + "\"semmleFile \"\", line 3", + "\"semmle/python/extractor.py\", line 84, in process_source_module", + "\"semmle/python/modules.py\", line 92, in ast", + "\"semmle/python/modules.py\", line 120, in py_ast", + "\"semmle/python/modules.py\", line 117, in py_ast", + "\"semmle/python/parser/tsg_parser.py\", line 221, in parse", + "\"semmleFile \"\", line 3" + ] + }, + "location": { + "file": "/repo_dir/syntaxerror1.py", + "startColumn": 0, + "endColumn": 0, + "startLine": 3, + "endLine": 3 + }, + "markdownMessage": "A parse error occurred while processing `/repo_dir/syntaxerror1.py`, and as a result this file could not be analyzed. Check the syntax of the file using the `python -m py_compile` command and correct any invalid syntax.", + "severity": "warning", + "source": { + "extractorName": "python", + "id": "py/diagnostics/syntax-error", + "name": "Could not process some files due to syntax errors" + }, + "timestamp": "2023-03-13T15:03:48.181384", + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "attributes": { + "args": [ + "Syntax Error" + ], + "traceback": [ + "\"semmle/python/modules.py\", line 108, in py_ast", + "\"semmle/python/modules.py\", line 102, in old_py_ast", + "\"semmle/python/parser/__init__.py\", line 100, in parse", + "\"semmleFile \"\", line 6", + "\"semmle/python/extractor.py\", line 84, in process_source_module", + "\"semmle/python/modules.py\", line 92, in ast", + "\"semmle/python/modules.py\", line 120, in py_ast", + "\"semmle/python/modules.py\", line 117, in py_ast", + "\"semmle/python/parser/tsg_parser.py\", line 221, in parse", + "\"semmleFile \"\", line 5" + ] + }, + "location": { + "file": "/repo_dir/syntaxerror2.py", + "startColumn": 0, + "endColumn": 0, + "startLine": 5, + "endLine": 5 + }, + "markdownMessage": "A parse error occurred while processing `/repo_dir/syntaxerror2.py`, and as a result this file could not be analyzed. Check the syntax of the file using the `python -m py_compile` command and correct any invalid syntax.", + "severity": "warning", + "source": { + "extractorName": "python", + "id": "py/diagnostics/syntax-error", + "name": "Could not process some files due to syntax errors" + }, + "timestamp": "2023-03-13T15:03:48.164991", + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "attributes": { + "args": [ + "maximum recursion depth exceeded while calling a Python object" + ], + "traceback": [ + "\"semmle/worker.py\", line 235, in _extract_loop", + "\"semmle/extractors/super_extractor.py\", line 37, in process", + "\"semmle/extractors/py_extractor.py\", line 43, in process", + "\"semmle/python/extractor.py\", line 227, in process_source_module", + "\"semmle/python/extractor.py\", line 84, in process_source_module", + "\"semmle/python/modules.py\", line 96, in ast", + "\"semmle/python/passes/labeller.py\", line 85, in apply", + "\"semmle/python/passes/labeller.py\", line 44, in __init__", + "\"semmle/python/passes/labeller.py\", line 14, in __init__", + "\"semmle/python/passes/ast_pass.py\", line 208, in visit", + "\"semmle/python/passes/ast_pass.py\", line 216, in generic_visit", + "\"semmle/python/passes/ast_pass.py\", line 213, in generic_visit", + "\"semmle/python/passes/ast_pass.py\", line 208, in visit", + "\"semmle/python/passes/ast_pass.py\", line 213, in generic_visit", + "\"semmle/python/passes/ast_pass.py\", line 208, in visit", + "... 3930 lines skipped", + "\"semmle/python/passes/ast_pass.py\", line 213, in generic_visit", + "\"semmle/python/passes/ast_pass.py\", line 208, in visit", + "\"semmle/python/passes/ast_pass.py\", line 213, in generic_visit", + "\"semmle/python/passes/ast_pass.py\", line 208, in visit", + "\"semmle/python/passes/ast_pass.py\", line 205, in _get_visit_method" + ] + }, + "location": { + "file": "/repo_dir/recursion_error.py" + }, + "plaintextMessage": "maximum recursion depth exceeded while calling a Python object", + "severity": "error", + "source": { + "extractorName": "python", + "id": "py/diagnostics/recursion-error", + "name": "Recursion error in Python extractor" + }, + "timestamp": "2023-03-13T15:03:47.468924", + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} diff --git a/python/extractor/cli-integration-test/writing-diagnostics/make_test.py b/python/extractor/cli-integration-test/writing-diagnostics/make_test.py new file mode 100644 index 00000000000..66e84477a1b --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/make_test.py @@ -0,0 +1,4 @@ + +# Creates a test file that will cause a RecursionError when run with the Python extractor. +with open('repo_dir/recursion_error.py', 'w') as f: + f.write("print({})\n".format("+".join(["1"] * 1000))) diff --git a/python/extractor/cli-integration-test/writing-diagnostics/query.expected b/python/extractor/cli-integration-test/writing-diagnostics/query.expected new file mode 100644 index 00000000000..127af7fe20c --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/query.expected @@ -0,0 +1,6 @@ +| filename | ++-----------------+ +| safe.py | +| syntaxerror1.py | +| syntaxerror2.py | +| syntaxerror3.py | diff --git a/python/extractor/cli-integration-test/writing-diagnostics/query.ql b/python/extractor/cli-integration-test/writing-diagnostics/query.ql new file mode 100644 index 00000000000..f95676636d9 --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/query.ql @@ -0,0 +1,3 @@ +import python + +select any(File f).getShortName() as filename order by filename diff --git a/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/safe.py b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/safe.py new file mode 100644 index 00000000000..9fcf0f1b882 --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/safe.py @@ -0,0 +1 @@ +print("No deeply nested structures here!") diff --git a/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror1.py b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror1.py new file mode 100644 index 00000000000..75c745c8cd8 --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror1.py @@ -0,0 +1,3 @@ +# This file contains a deliberate syntax error + +2 + diff --git a/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror2.py b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror2.py new file mode 100644 index 00000000000..9de43c0370f --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror2.py @@ -0,0 +1,5 @@ + + + + +[ diff --git a/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror3.py b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror3.py new file mode 100644 index 00000000000..4e4800bd521 --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror3.py @@ -0,0 +1 @@ +"Oh no! diff --git a/python/extractor/cli-integration-test/writing-diagnostics/test.sh b/python/extractor/cli-integration-test/writing-diagnostics/test.sh new file mode 100755 index 00000000000..32915e2d73c --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/test.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf db +rm -f *.actual + +python3 make_test.py + +echo "Testing database with various errors during extraction" +$CODEQL database create db --language python --source-root repo_dir/ +$CODEQL query run --database db query.ql > query.actual +diff query.expected query.actual +python3 test_diagnostics_output.py + +rm -f *.actual +rm -f repo_dir/recursion_error.py +rm -rf db diff --git a/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py b/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py new file mode 100644 index 00000000000..39982596fc5 --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py @@ -0,0 +1,7 @@ +import os +import sys +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "integration-tests")) +import diagnostics_test_utils + +test_db = "db" +diagnostics_test_utils.check_diagnostics(".", test_db, skip_attributes=True) diff --git a/python/extractor/convert_setup.py b/python/extractor/convert_setup.py new file mode 100644 index 00000000000..e50ced2d793 --- /dev/null +++ b/python/extractor/convert_setup.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python + +import os.path +import imp +import sys +import traceback +import re + +SETUP_TAG = "LGTM_PYTHON_SETUP_SETUP_PY" + +setup_file_path = "" +requirements_file_path = "" + +if sys.version_info >= (3,): + basestring = str + +def setup_interceptor(**args): + requirements = make_requirements(**args) + write_requirements_file(requirements) + +def make_requirements(requires=(), install_requires=(), extras_require={}, dependency_links=[], **other_args): + # Install main requirements. + requirements = list(requires) + list(install_requires) + # Install requirements for all features. + for feature, feature_requirements in extras_require.items(): + if isinstance(feature_requirements, basestring): + requirements += [feature_requirements] + else: + requirements += list(feature_requirements) + + # Attempt to use dependency_links to find requirements first. + for link in dependency_links: + split_link = link.rsplit("#egg=", 1) + if len(split_link) != 2: + print("Invalid dependency link \"%s\" was ignored." % link) + continue + if not link.startswith("http"): + print("Dependency link \"%s\" is not an HTTP link so is being ignored." % link) + continue + package_name = split_link[1].rsplit("-", 1)[0] + for index, requirement in enumerate(requirements): + if requirement_name(requirement) == package_name: + print("Using %s to install %s." % (link, requirement)) + requirements[index] = package_name + " @ " + link + + print("Creating %s file from %s." % (requirements_file_path, setup_file_path)) + requirements = [requirement.encode("ascii", "ignore").strip().decode("ascii") for requirement in requirements] + print("Requirements extracted from setup.py: %s" % requirements) + return requirements + +REQUIREMENT = re.compile(r"^([\w-]+)") + +def requirement_name(req_string): + req_string = req_string.strip() + if req_string[0] == '#': + return None + match = REQUIREMENT.match(req_string) + if match: + return match.group(1) + return None + + +def write_requirements_file(requirements): + if os.path.exists(requirements_file_path): + # Only overwrite the existing requirements if the new requirements are not empty. + if requirements: + print("%s already exists. It will be overwritten." % requirements_file_path) + else: + print("%s already exists and it will not be overwritten because the new requirements list is empty." % requirements_file_path) + return + elif not requirements: + print("%s will not be written because the new requirements list is empty." % requirements_file_path) + return + with open(requirements_file_path, "w") as requirements_file: + for requirement in requirements: + requirements_file.write(requirement + "\n") + print("Requirements have been written to " + requirements_file_path) + +def convert_setup_to_requirements(root): + global setup_file_path + if SETUP_TAG in os.environ: + setup_file_path = os.environ[SETUP_TAG] + if setup_file_path == "false": + print("setup.py explicitly ignored") + return 0 + else: + setup_file_path = os.path.join(root, "setup.py") + if not os.path.exists(setup_file_path): + print("%s does not exist. Not generating requirements.txt." % setup_file_path) + return 0 + # Override the setuptools and distutils.core implementation of setup with our own. + import setuptools + setattr(setuptools, "setup", setup_interceptor) + import distutils.core + setattr(distutils.core, "setup", setup_interceptor) + + # TODO: WHY are we inserting at index 1? + # >>> l = [1,2,3]; l.insert(1, 'x'); print(l) + # [1, 'x', 2, 3] + + # Ensure the current directory is on path since setup.py might try and include some files in it. + sys.path.insert(1, root) + + # Modify the arguments since the setup file sometimes checks them. + sys.argv = [setup_file_path, "build"] + + # Run the setup.py file. + try: + imp.load_source("__main__", setup_file_path) + except BaseException as ex: + # We don't really care about errors so long as a requirements.txt exists in the next build step. + print("Running %s failed." % setup_file_path) + traceback.print_exc(file=sys.stdout) + if not os.path.exists(requirements_file_path): + print("%s failed, and a %s file does not exist. Exiting with error." % (setup_file_path, requirements_file_path)) + return 1 + return 0 + +def main(): + global requirements_file_path + requirements_file_path = sys.argv[2] + sys.path.extend(sys.argv[3:]) + sys.exit(convert_setup_to_requirements(sys.argv[1])) + +if __name__ == "__main__": + main() diff --git a/python/extractor/data/python/stubs/README.md b/python/extractor/data/python/stubs/README.md new file mode 100644 index 00000000000..6b215666c4c --- /dev/null +++ b/python/extractor/data/python/stubs/README.md @@ -0,0 +1,3 @@ +This folder contains stubs for commonly used Python libraries, which have +the same interface as the original libraries, but are more amenable to +static analysis. The original licenses are noted in each subdirectory. diff --git a/python/extractor/data/python/stubs/six/LICENSE b/python/extractor/data/python/stubs/six/LICENSE new file mode 100644 index 00000000000..4b05a545261 --- /dev/null +++ b/python/extractor/data/python/stubs/six/LICENSE @@ -0,0 +1,18 @@ +Copyright (c) 2010-2019 Benjamin Peterson + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/python/extractor/data/python/stubs/six/__init__.py b/python/extractor/data/python/stubs/six/__init__.py new file mode 100644 index 00000000000..5ffa5618478 --- /dev/null +++ b/python/extractor/data/python/stubs/six/__init__.py @@ -0,0 +1,240 @@ +# Stub file for six. +#This should have the same interface as the six module, +#but be much more tractable for static analysis. + + + +"""Utilities for writing code that runs on Python 2 and 3""" + +# Copyright (c) 2015 Semmle Limited +# All rights reserved +# Note that the original six module is copyright Benjamin Peterson +# + +import operator +import sys +import types + +__author__ = "Benjamin Peterson " +__version__ = "1.14.0" + + +# Useful for very coarse version differentiation. +PY2 = sys.version_info < (3,) +PY3 = sys.version_info >= (3,) + +if PY3: + string_types = str, + integer_types = int, + class_types = type, + text_type = str + binary_type = bytes + + MAXSIZE = sys.maxsize +else: + string_types = basestring, + integer_types = (int, long) + class_types = (type, types.ClassType) + text_type = unicode + binary_type = str + #We can't compute MAXSIZE, but it doesn't really matter + MAXSIZE = int((1 << 63) - 1) + + +def _add_doc(func, doc): + """Add documentation to a function.""" + func.__doc__ = doc + + +def _import_module(name): + """Import module, returning the module after the last dot.""" + __import__(name) + return sys.modules[name] + +import six.moves as moves + + +def add_move(move): + """Add an item to six.moves.""" + setattr(_MovedItems, move.name, move) + + +def remove_move(name): + """Remove item from six.moves.""" + try: + delattr(_MovedItems, name) + except AttributeError: + try: + del moves.__dict__[name] + except KeyError: + raise AttributeError("no such move, %r" % (name,)) + + +if PY3: + _meth_func = "__func__" + _meth_self = "__self__" + + _func_closure = "__closure__" + _func_code = "__code__" + _func_defaults = "__defaults__" + _func_globals = "__globals__" + + _iterkeys = "keys" + _itervalues = "values" + _iteritems = "items" + _iterlists = "lists" +else: + _meth_func = "im_func" + _meth_self = "im_self" + + _func_closure = "func_closure" + _func_code = "func_code" + _func_defaults = "func_defaults" + _func_globals = "func_globals" + + _iterkeys = "iterkeys" + _itervalues = "itervalues" + _iteritems = "iteritems" + _iterlists = "iterlists" + + +try: + advance_iterator = next +except NameError: + def advance_iterator(it): + return it.next() +next = advance_iterator + + +try: + callable = callable +except NameError: + def callable(obj): + return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) + + +if PY3: + def get_unbound_function(unbound): + return unbound + + create_bound_method = types.MethodType + + Iterator = object +else: + def get_unbound_function(unbound): + return unbound.im_func + + def create_bound_method(func, obj): + return types.MethodType(func, obj, obj.__class__) + + class Iterator(object): + + def next(self): + return type(self).__next__(self) + + callable = callable +_add_doc(get_unbound_function, + """Get the function out of a possibly unbound function""") + + +get_method_function = operator.attrgetter(_meth_func) +get_method_self = operator.attrgetter(_meth_self) +get_function_closure = operator.attrgetter(_func_closure) +get_function_code = operator.attrgetter(_func_code) +get_function_defaults = operator.attrgetter(_func_defaults) +get_function_globals = operator.attrgetter(_func_globals) + + +def iterkeys(d, **kw): + """Return an iterator over the keys of a dictionary.""" + return iter(getattr(d, _iterkeys)(**kw)) + +def itervalues(d, **kw): + """Return an iterator over the values of a dictionary.""" + return iter(getattr(d, _itervalues)(**kw)) + +def iteritems(d, **kw): + """Return an iterator over the (key, value) pairs of a dictionary.""" + return iter(getattr(d, _iteritems)(**kw)) + +def iterlists(d, **kw): + """Return an iterator over the (key, [values]) pairs of a dictionary.""" + return iter(getattr(d, _iterlists)(**kw)) + +def byte2int(ch): #type bytes -> int + return int(unknown()) + +def b(s): #type str -> bytes + """Byte literal""" + return bytes(unknown()) + +def u(s): #type str -> unicode + """Text literal""" + if PY3: + unicode = str + return unicode(unknown()) + +if PY3: + unichr = chr + def int2byte(i): #type int -> bytes + return bytes(unknown()) + indexbytes = operator.getitem + iterbytes = iter + import io + StringIO = io.StringIO + BytesIO = io.BytesIO +else: + unichr = unichr + int2byte = chr + def indexbytes(buf, i): + return int(unknown()) + def iterbytes(buf): + return (int(unknown()) for byte in buf) + import StringIO + StringIO = BytesIO = StringIO.StringIO + + +if PY3: + exec_ = getattr(six.moves.builtins, "exec") + + def reraise(tp, value, tb=None): + """Reraise an exception.""" + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + +else: + def exec_(_code_, _globs_=None, _locs_=None): + pass + + def reraise(tp, value, tb=None): + """Reraise an exception.""" + exc = tp(value) + exc.__traceback__ = tb + raise exc + + +print_ = getattr(moves.builtins, "print", None) +if print_ is None: + def print_(*args, **kwargs): + """The new-style print function for Python 2.4 and 2.5.""" + pass + +def with_metaclass(meta, *bases): + """Create a base class with a metaclass.""" + return meta("NewBase", bases, {}) + +def add_metaclass(metaclass): + """Class decorator for creating a class with a metaclass.""" + def wrapper(cls): + orig_vars = cls.__dict__.copy() + orig_vars.pop('__dict__', None) + orig_vars.pop('__weakref__', None) + slots = orig_vars.get('__slots__') + if slots is not None: + if isinstance(slots, str): + slots = [slots] + for slots_var in slots: + orig_vars.pop(slots_var) + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper diff --git a/python/extractor/data/python/stubs/six/moves/__init__.py b/python/extractor/data/python/stubs/six/moves/__init__.py new file mode 100644 index 00000000000..26af6d6ed0d --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/__init__.py @@ -0,0 +1,239 @@ +# six.moves + +import sys +PY2 = sys.version_info < (3,) +PY3 = sys.version_info >= (3,) + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import cStringIO as _1 + cStringIO = _1.StringIO + import itertools as _2 + filter = _2.filter + filterfalse = _2.filterfalse + import __builtin__ as _3 + input = _3.raw_input + intern = _3.intern + map = _2.map + import os as _4 + getcwd = _4.getcwdu + getcwdb = _4.getcwd + import commands as _5 + getoutput = _5.getoutput + range = _3.xrange + reload_module = _3.reload + reduce = _3.reduce + import pipes as _6 + shlex_quote = _6.quote + import StringIO as _7 + StringIO = _7.StringIO + import UserDict as _8 + UserDict = _8.UserDict + import UserList as _9 + UserList = _9.UserList + import UserString as _10 + UserString = _10.UserString + xrange = _3.xrange + zip = zip + zip_longest = _2.zip_longest + import __builtin__ as builtins + import ConfigParser as configparser + import collections as collections_abc + import copy_reg as copyreg + import gdbm as dbm_gnu + import dbm as dbm_ndbm + import dummy_thread as _dummy_thread + import cookielib as http_cookiejar + import Cookie as http_cookies + import htmlentitydefs as html_entities + import HTMLParser as html_parser + import httplib as http_client + import email.MIMEBase as email_mime_base + import email.MIMEImage as email_mime_image + import email.MIMEMultipart as email_mime_multipart + import email.MIMENonMultipart as email_mime_nonmultipart + import email.MIMEText as email_mime_text + import BaseHTTPServer as BaseHTTPServer + import CGIHTTPServer as CGIHTTPServer + import SimpleHTTPServer as SimpleHTTPServer + import cPickle as cPickle + import Queue as queue + import repr as reprlib + import SocketServer as socketserver + import thread as _thread + import Tkinter as tkinter + import Dialog as tkinter_dialog + import FileDialog as tkinter_filedialog + import ScrolledText as tkinter_scrolledtext + import SimpleDialog as tkinter_simpledialog + import Tix as tkinter_tix + import ttk as tkinter_ttk + import Tkconstants as tkinter_constants + import Tkdnd as tkinter_dnd + import tkColorChooser as tkinter_colorchooser + import tkCommonDialog as tkinter_commondialog + import tkFileDialog as tkinter_tkfiledialog + import tkFont as tkinter_font + import tkMessageBox as tkinter_messagebox + import tkSimpleDialog as tkinter_tksimpledialog + import xmlrpclib as xmlrpc_client + import SimpleXMLRPCServer as xmlrpc_server + del _1 + del _5 + del _7 + del _8 + del _6 + del _3 + del _9 + del _2 + del _10 + del _4 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import io as _1 + cStringIO = _1.StringIO + import builtins as _2 + filter = _2.filter + import itertools as _3 + filterfalse = _3.filterfalse + input = _2.input + import sys as _4 + intern = _4.intern + map = _2.map + import os as _5 + getcwd = _5.getcwd + getcwdb = _5.getcwdb + import subprocess as _6 + getoutput = _6.getoutput + range = _2.range + import importlib as _7 + reload_module = _7.reload + import functools as _8 + reduce = _8.reduce + import shlex as _9 + shlex_quote = _9.quote + StringIO = _1.StringIO + import collections as _10 + UserDict = _10.UserDict + UserList = _10.UserList + UserString = _10.UserString + xrange = _2.range + zip = _2.zip + zip_longest = _3.zip_longest + import builtins as builtins + import configparser as configparser + import collections.abc as collections_abc + import copyreg as copyreg + import dbm.gnu as dbm_gnu + import dbm.ndbm as dbm_ndbm + import _dummy_thread as _dummy_thread + import http.cookiejar as http_cookiejar + import http.cookies as http_cookies + import html.entities as html_entities + import html.parser as html_parser + import http.client as http_client + import email.mime.base as email_mime_base + import email.mime.image as email_mime_image + import email.mime.multipart as email_mime_multipart + import email.mime.nonmultipart as email_mime_nonmultipart + import email.mime.text as email_mime_text + import http.server as BaseHTTPServer + import http.server as CGIHTTPServer + import http.server as SimpleHTTPServer + import pickle as cPickle + import queue as queue + import reprlib as reprlib + import socketserver as socketserver + import _thread as _thread + import tkinter as tkinter + import tkinter.dialog as tkinter_dialog + import tkinter.filedialog as tkinter_filedialog + import tkinter.scrolledtext as tkinter_scrolledtext + import tkinter.simpledialog as tkinter_simpledialog + import tkinter.tix as tkinter_tix + import tkinter.ttk as tkinter_ttk + import tkinter.constants as tkinter_constants + import tkinter.dnd as tkinter_dnd + import tkinter.colorchooser as tkinter_colorchooser + import tkinter.commondialog as tkinter_commondialog + import tkinter.filedialog as tkinter_tkfiledialog + import tkinter.font as tkinter_font + import tkinter.messagebox as tkinter_messagebox + import tkinter.simpledialog as tkinter_tksimpledialog + import xmlrpc.client as xmlrpc_client + import xmlrpc.server as xmlrpc_server + del _1 + del _2 + del _3 + del _4 + del _5 + del _6 + del _7 + del _8 + del _9 + del _10 + +# Not generated: + +import six.moves.urllib as urllib +import six.moves.urllib_parse as urllib_parse +import six.moves.urllib_response as urllib_response +import six.moves.urllib_request as urllib_request +import six.moves.urllib_error as urllib_error +import six.moves.urllib_robotparser as urllib_robotparser + + +sys.modules['six.moves.builtins'] = builtins +sys.modules['six.moves.configparser'] = configparser +sys.modules['six.moves.collections_abc'] = collections_abc +sys.modules['six.moves.copyreg'] = copyreg +sys.modules['six.moves.dbm_gnu'] = dbm_gnu +sys.modules['six.moves.dbm_ndbm'] = dbm_ndbm +sys.modules['six.moves._dummy_thread'] = _dummy_thread +sys.modules['six.moves.http_cookiejar'] = http_cookiejar +sys.modules['six.moves.http_cookies'] = http_cookies +sys.modules['six.moves.html_entities'] = html_entities +sys.modules['six.moves.html_parser'] = html_parser +sys.modules['six.moves.http_client'] = http_client +sys.modules['six.moves.email_mime_base'] = email_mime_base +sys.modules['six.moves.email_mime_image'] = email_mime_image +sys.modules['six.moves.email_mime_multipart'] = email_mime_multipart +sys.modules['six.moves.email_mime_nonmultipart'] = email_mime_nonmultipart +sys.modules['six.moves.email_mime_text'] = email_mime_text +sys.modules['six.moves.BaseHTTPServer'] = BaseHTTPServer +sys.modules['six.moves.CGIHTTPServer'] = CGIHTTPServer +sys.modules['six.moves.SimpleHTTPServer'] = SimpleHTTPServer +sys.modules['six.moves.cPickle'] = cPickle +sys.modules['six.moves.queue'] = queue +sys.modules['six.moves.reprlib'] = reprlib +sys.modules['six.moves.socketserver'] = socketserver +sys.modules['six.moves._thread'] = _thread +sys.modules['six.moves.tkinter'] = tkinter +sys.modules['six.moves.tkinter_dialog'] = tkinter_dialog +sys.modules['six.moves.tkinter_filedialog'] = tkinter_filedialog +sys.modules['six.moves.tkinter_scrolledtext'] = tkinter_scrolledtext +sys.modules['six.moves.tkinter_simpledialog'] = tkinter_simpledialog +sys.modules['six.moves.tkinter_tix'] = tkinter_tix +sys.modules['six.moves.tkinter_ttk'] = tkinter_ttk +sys.modules['six.moves.tkinter_constants'] = tkinter_constants +sys.modules['six.moves.tkinter_dnd'] = tkinter_dnd +sys.modules['six.moves.tkinter_colorchooser'] = tkinter_colorchooser +sys.modules['six.moves.tkinter_commondialog'] = tkinter_commondialog +sys.modules['six.moves.tkinter_tkfiledialog'] = tkinter_tkfiledialog +sys.modules['six.moves.tkinter_font'] = tkinter_font +sys.modules['six.moves.tkinter_messagebox'] = tkinter_messagebox +sys.modules['six.moves.tkinter_tksimpledialog'] = tkinter_tksimpledialog +sys.modules['six.moves.xmlrpc_client'] = xmlrpc_client +sys.modules['six.moves.xmlrpc_server'] = xmlrpc_server + +# Windows special + +if PY2: + import _winreg as winreg +if PY3: + import winreg as winreg + +sys.modules['six.moves.winreg'] = winreg + +del sys diff --git a/python/extractor/data/python/stubs/six/moves/urllib/__init__.py b/python/extractor/data/python/stubs/six/moves/urllib/__init__.py new file mode 100644 index 00000000000..b2dce83a06e --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib/__init__.py @@ -0,0 +1,15 @@ +import sys + +import six.moves.urllib_error as error +import six.moves.urllib_parse as parse +import six.moves.urllib_request as request +import six.moves.urllib_response as response +import six.moves.urllib_robotparser as robotparser + +sys.modules['six.moves.urllib.error'] = error +sys.modules['six.moves.urllib.parse'] = parse +sys.modules['six.moves.urllib.request'] = request +sys.modules['six.moves.urllib.response'] = response +sys.modules['six.moves.urllib.robotparser'] = robotparser + +del sys diff --git a/python/extractor/data/python/stubs/six/moves/urllib_error.py b/python/extractor/data/python/stubs/six/moves/urllib_error.py new file mode 100644 index 00000000000..beb5b4dab28 --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib_error.py @@ -0,0 +1,21 @@ +# six.moves.urllib_error + +from six import PY2, PY3 + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import urllib2 as _1 + URLError = _1.URLError + HTTPError = _1.HTTPError + import urllib as _2 + ContentTooShortError = _2.ContentTooShortError + del _1 + del _2 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import urllib.error as _1 + URLError = _1.URLError + HTTPError = _1.HTTPError + ContentTooShortError = _1.ContentTooShortError + del _1 diff --git a/python/extractor/data/python/stubs/six/moves/urllib_parse.py b/python/extractor/data/python/stubs/six/moves/urllib_parse.py new file mode 100644 index 00000000000..7eb87909634 --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib_parse.py @@ -0,0 +1,65 @@ +# six.moves.urllib_parse + +from six import PY2, PY3 + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import urlparse as _1 + ParseResult = _1.ParseResult + SplitResult = _1.SplitResult + parse_qs = _1.parse_qs + parse_qsl = _1.parse_qsl + urldefrag = _1.urldefrag + urljoin = _1.urljoin + urlparse = _1.urlparse + urlsplit = _1.urlsplit + urlunparse = _1.urlunparse + urlunsplit = _1.urlunsplit + import urllib as _2 + quote = _2.quote + quote_plus = _2.quote_plus + unquote = _2.unquote + unquote_plus = _2.unquote_plus + unquote_to_bytes = _2.unquote + urlencode = _2.urlencode + splitquery = _2.splitquery + splittag = _2.splittag + splituser = _2.splituser + splitvalue = _2.splitvalue + uses_fragment = _1.uses_fragment + uses_netloc = _1.uses_netloc + uses_params = _1.uses_params + uses_query = _1.uses_query + uses_relative = _1.uses_relative + del _1 + del _2 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import urllib.parse as _1 + ParseResult = _1.ParseResult + SplitResult = _1.SplitResult + parse_qs = _1.parse_qs + parse_qsl = _1.parse_qsl + urldefrag = _1.urldefrag + urljoin = _1.urljoin + urlparse = _1.urlparse + urlsplit = _1.urlsplit + urlunparse = _1.urlunparse + urlunsplit = _1.urlunsplit + quote = _1.quote + quote_plus = _1.quote_plus + unquote = _1.unquote + unquote_plus = _1.unquote_plus + unquote_to_bytes = _1.unquote_to_bytes + urlencode = _1.urlencode + splitquery = _1.splitquery + splittag = _1.splittag + splituser = _1.splituser + splitvalue = _1.splitvalue + uses_fragment = _1.uses_fragment + uses_netloc = _1.uses_netloc + uses_params = _1.uses_params + uses_query = _1.uses_query + uses_relative = _1.uses_relative + del _1 diff --git a/python/extractor/data/python/stubs/six/moves/urllib_request.py b/python/extractor/data/python/stubs/six/moves/urllib_request.py new file mode 100644 index 00000000000..c43331560e3 --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib_request.py @@ -0,0 +1,85 @@ +# six.moves.urllib_request + +from six import PY2, PY3 + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import urllib2 as _1 + urlopen = _1.urlopen + install_opener = _1.install_opener + build_opener = _1.build_opener + import urllib as _2 + pathname2url = _2.pathname2url + url2pathname = _2.url2pathname + getproxies = _2.getproxies + Request = _1.Request + OpenerDirector = _1.OpenerDirector + HTTPDefaultErrorHandler = _1.HTTPDefaultErrorHandler + HTTPRedirectHandler = _1.HTTPRedirectHandler + HTTPCookieProcessor = _1.HTTPCookieProcessor + ProxyHandler = _1.ProxyHandler + BaseHandler = _1.BaseHandler + HTTPPasswordMgr = _1.HTTPPasswordMgr + HTTPPasswordMgrWithDefaultRealm = _1.HTTPPasswordMgrWithDefaultRealm + AbstractBasicAuthHandler = _1.AbstractBasicAuthHandler + HTTPBasicAuthHandler = _1.HTTPBasicAuthHandler + ProxyBasicAuthHandler = _1.ProxyBasicAuthHandler + AbstractDigestAuthHandler = _1.AbstractDigestAuthHandler + HTTPDigestAuthHandler = _1.HTTPDigestAuthHandler + ProxyDigestAuthHandler = _1.ProxyDigestAuthHandler + HTTPHandler = _1.HTTPHandler + HTTPSHandler = _1.HTTPSHandler + FileHandler = _1.FileHandler + FTPHandler = _1.FTPHandler + CacheFTPHandler = _1.CacheFTPHandler + UnknownHandler = _1.UnknownHandler + HTTPErrorProcessor = _1.HTTPErrorProcessor + urlretrieve = _2.urlretrieve + urlcleanup = _2.urlcleanup + URLopener = _2.URLopener + FancyURLopener = _2.FancyURLopener + proxy_bypass = _2.proxy_bypass + parse_http_list = _1.parse_http_list + parse_keqv_list = _1.parse_keqv_list + del _1 + del _2 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import urllib.request as _1 + urlopen = _1.urlopen + install_opener = _1.install_opener + build_opener = _1.build_opener + pathname2url = _1.pathname2url + url2pathname = _1.url2pathname + getproxies = _1.getproxies + Request = _1.Request + OpenerDirector = _1.OpenerDirector + HTTPDefaultErrorHandler = _1.HTTPDefaultErrorHandler + HTTPRedirectHandler = _1.HTTPRedirectHandler + HTTPCookieProcessor = _1.HTTPCookieProcessor + ProxyHandler = _1.ProxyHandler + BaseHandler = _1.BaseHandler + HTTPPasswordMgr = _1.HTTPPasswordMgr + HTTPPasswordMgrWithDefaultRealm = _1.HTTPPasswordMgrWithDefaultRealm + AbstractBasicAuthHandler = _1.AbstractBasicAuthHandler + HTTPBasicAuthHandler = _1.HTTPBasicAuthHandler + ProxyBasicAuthHandler = _1.ProxyBasicAuthHandler + AbstractDigestAuthHandler = _1.AbstractDigestAuthHandler + HTTPDigestAuthHandler = _1.HTTPDigestAuthHandler + ProxyDigestAuthHandler = _1.ProxyDigestAuthHandler + HTTPHandler = _1.HTTPHandler + HTTPSHandler = _1.HTTPSHandler + FileHandler = _1.FileHandler + FTPHandler = _1.FTPHandler + CacheFTPHandler = _1.CacheFTPHandler + UnknownHandler = _1.UnknownHandler + HTTPErrorProcessor = _1.HTTPErrorProcessor + urlretrieve = _1.urlretrieve + urlcleanup = _1.urlcleanup + URLopener = _1.URLopener + FancyURLopener = _1.FancyURLopener + proxy_bypass = _1.proxy_bypass + parse_http_list = _1.parse_http_list + parse_keqv_list = _1.parse_keqv_list + del _1 diff --git a/python/extractor/data/python/stubs/six/moves/urllib_response.py b/python/extractor/data/python/stubs/six/moves/urllib_response.py new file mode 100644 index 00000000000..d0903b61bf8 --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib_response.py @@ -0,0 +1,21 @@ +# six.moves.urllib_response + +from six import PY2, PY3 + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import urllib as _1 + addbase = _1.addbase + addclosehook = _1.addclosehook + addinfo = _1.addinfo + addinfourl = _1.addinfourl + del _1 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import urllib.response as _1 + addbase = _1.addbase + addclosehook = _1.addclosehook + addinfo = _1.addinfo + addinfourl = _1.addinfourl + del _1 diff --git a/python/extractor/data/python/stubs/six/moves/urllib_robotparser.py b/python/extractor/data/python/stubs/six/moves/urllib_robotparser.py new file mode 100644 index 00000000000..e49ef0ade88 --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib_robotparser.py @@ -0,0 +1,15 @@ +# six.moves.urllib_robotparser + +from six import PY2, PY3 + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import robotparser as _1 + RobotFileParser = _1.RobotFileParser + del _1 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import urllib.robotparser as _1 + RobotFileParser = _1.RobotFileParser + del _1 diff --git a/python/extractor/docs/extractor-python-index.svg b/python/extractor/docs/extractor-python-index.svg new file mode 100644 index 00000000000..e7dc29b7366 --- /dev/null +++ b/python/extractor/docs/extractor-python-index.svg @@ -0,0 +1,3 @@ + + +
runs
runs
codeql database create
codeql database create
exec python index.py
exec python index.py
language-packs/python/tools/autobuild.sh
language-packs/python/tools/autobuild.sh
python index.py
python index.py
index.py1) add zipfile to path2) buildtools.index.main()buildtools.index.main()1) version = buildtools.discover.get_version()2) options = buildtools.index.extractor_options(version)3) subprocess.check_call(['python{version}', 'python_tracer.py'] + options)
buildtools.index.extractor_options(version)
buildtools.index.extractor_options(version)
buildtools.index.get_path_options(version)
buildtools.index.get_path_options(version)
buildtools.install.get_library(version)
buildtools.install.get_library(versi...
subprocess.check_output()
subprocess.check_output()
python_executable get_venv_lib.py
python_executable get_venv_lib.py
'index' step on LGTM.com
'index' step on LGTM.com
python index.py
python index.py
lgtm-buildtools/buildtools/python/index.sh
lgtm-buildtools/buildtools/python/index.sh
buildtools.install.Venv.lib()1) self.venv_executable = $LGTM_WORKSPACE/venv/bin/python2) if os.path.exists(self.venv_executable):        python_executable = [self.venv_executable]    else:        python_executable = executable(self.version)3) try:        return subprocess.check_outputl(python_executable + ['get_venv_lib.py']    except:        <some error handling code that seems buggy>get_venv_lib.pyprint(get_venv_lib())get_venv_lib.get_venv_lib()try:    return pip_installed_folder()except:    return first_site_packages()
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/python/extractor/docs/extractor-python-setup.svg b/python/extractor/docs/extractor-python-setup.svg new file mode 100644 index 00000000000..339568416e7 --- /dev/null +++ b/python/extractor/docs/extractor-python-setup.svg @@ -0,0 +1,3 @@ + + +
python setup.py
python setup.py
'python_setup' step on LGTM.com
'python_setup' step on LGTM.com
python ${LGTM_BUILDTOOLS}/python/setup.py
python ${LGTM_BUILDTOOLS}/python/setup.py
lgtm-buildtools/buildtools/python_setup.sh
lgtm-buildtools/buildtools/python_setup.sh
subprocess.call(["python", "$SEMMLE_DIST/tools/setup.py"])
subprocess.call(["python", "$SEMMLE_DIST/tools/setup.py"])
lgtm-buildtools/buildtools/python/setup.py
lgtm-buildtools/buildtools/python/setup.py
setup.py1) add zipfile to path2) version, root, requirement_files = buildtools.discover.discover()3) buildtools.install.main(version, root, requirement_files)buildtools.install.main(version, root, requirement_files)1) venv = buildtools.install.Venv("$LGTM_WORKSPACE/venv", version)2) venv.create()
3) requirements_from_setup = "$LGTM_WORKSPACE/setup_requirements.txt"
3) requirements_from_setup = "$LGTM_WORKSPACE/setup_requirements.txt"
4) args = [root, requirements_from_setup, system_packages(version)]5) subprocess.call([venv.venv_executable, 'convert_setup.py'] + args)6) if os.path.exists(requirements_from_setup):        requirement_files = [ requirements_from_setup ] + requirement_files[1:]7) requirements = unify_requirements.gather(requirement_files)8) buildtools.auto_install.install(requirements, venv)buildtools.install.Venv.create()1) exe = buildtools.version.executable(self.version)2) if self.version == 2:      subprocess.check_call(exe, ["-m", "virtualenv", "$LGTM_WORKSPACE/venv"]
3) if self.version == 3:
      subprocess.check_call(exe, ["-m", "venv", "$LGTM_WORKSPACE/venv"
3) if self.version == 3:...
$LGTM_WORKSPACE/venv/bin/python convert_setup.py
$LGTM_WORKSPACE/venv/bin/python convert_setup.py
running root/setup.py
running root/setup.py
convert_setup.py1) root = sys.argv[1]    global requirements_file_path = sys.argv[2]    sys.path.extend(sys.argv[3:])    override = os.environ.get("LGTM_PYTHON_SETUP_SETUP_PY")2) if override == "false":       sys.exit(0)3) if override:        setup_file_path = os.path.join(override, 'setup.py')    else:        setup_file_path = os.path.join(root, 'setup.py')4) setattr(setuptools, "setup", setup_interceptor)    setattr(distutils.core, "setup", setup_interceptor)
5) imp.load_source(setup_file_path)
    as though invoked as './setup.py build'
5) imp.load_source(setup_file_path)...
convert_setup.setup_interceptor(**args)
1) requirements = gather requirements from **args
('requires', 'install_requires', 'extras_require', 'dependency_links')
1) requirements = gather requirements from **args...
2) write 'requirements' to 'global requirements_file_path' 
    ("$LGTM_WORKSPACE/setup_requirements.txt")
2) write 'requirements' to 'global requirements_file_path'...
buildtools.auto_install.install(requirements, venv)
informally what boils down to
for req in requirements:
    run $LGTM_WORKSPACE/venv/bin/python -m pip install 'req'
informally what boils down to...
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/python/extractor/get_venv_lib.py b/python/extractor/get_venv_lib.py new file mode 100644 index 00000000000..7adcaa4589a --- /dev/null +++ b/python/extractor/get_venv_lib.py @@ -0,0 +1,35 @@ +import os +import sys + + +def pip_installed_folder(): + try: + import pip + except ImportError: + print("ERROR: 'pip' not installed.") + sys.exit(2) + dirname, filename = os.path.split(pip.__file__) + if filename.startswith("__init__."): + dirname = os.path.dirname(dirname) + return dirname + +def first_site_packages(): + dist_packages = None + for path in sys.path: + if "site-packages" in path: + return path + if "dist-packages" in path and not dist_packages: + dist_packages = path + if dist_packages: + return dist_packages + # No site-packages or dist-packages? + raise Exception + +def get_venv_lib(): + try: + return pip_installed_folder() + except: + return first_site_packages() + +if __name__=='__main__': + print(get_venv_lib()) diff --git a/python/extractor/imp.py b/python/extractor/imp.py new file mode 100644 index 00000000000..6a0685559fd --- /dev/null +++ b/python/extractor/imp.py @@ -0,0 +1,344 @@ +"""This module provides the components needed to build your own __import__ +function. Undocumented functions are obsolete. + +In most cases it is preferred you consider using the importlib module's +functionality over this module. + +This file was copied from `Lib/imp.py`, copyright PSF, with minor modifications made afterward. +""" +# (Probably) need to stay in _imp +from _imp import (lock_held, acquire_lock, release_lock, + get_frozen_object, is_frozen_package, + init_frozen, is_builtin, is_frozen, + _fix_co_filename) +try: + from _imp import create_dynamic +except ImportError: + # Platform doesn't support dynamic loading. + create_dynamic = None + +from importlib._bootstrap import _ERR_MSG, _exec, _load, _builtin_from_name +from importlib._bootstrap_external import SourcelessFileLoader + +from importlib import machinery +from importlib import util +import importlib +import os +import sys +import tokenize +import types +import warnings + + + +# DEPRECATED +SEARCH_ERROR = 0 +PY_SOURCE = 1 +PY_COMPILED = 2 +C_EXTENSION = 3 +PY_RESOURCE = 4 +PKG_DIRECTORY = 5 +C_BUILTIN = 6 +PY_FROZEN = 7 +PY_CODERESOURCE = 8 +IMP_HOOK = 9 + + +def new_module(name): + """**DEPRECATED** + + Create a new module. + + The module is not entered into sys.modules. + + """ + return types.ModuleType(name) + + +def get_magic(): + """**DEPRECATED** + + Return the magic number for .pyc files. + """ + return util.MAGIC_NUMBER + + +def get_tag(): + """Return the magic tag for .pyc files.""" + return sys.implementation.cache_tag + + +def cache_from_source(path, debug_override=None): + """**DEPRECATED** + + Given the path to a .py file, return the path to its .pyc file. + + The .py file does not need to exist; this simply returns the path to the + .pyc file calculated as if the .py file were imported. + + If debug_override is not None, then it must be a boolean and is used in + place of sys.flags.optimize. + + If sys.implementation.cache_tag is None then NotImplementedError is raised. + + """ + with warnings.catch_warnings(): + warnings.simplefilter('ignore') + return util.cache_from_source(path, debug_override) + + +def source_from_cache(path): + """**DEPRECATED** + + Given the path to a .pyc. file, return the path to its .py file. + + The .pyc file does not need to exist; this simply returns the path to + the .py file calculated to correspond to the .pyc file. If path does + not conform to PEP 3147 format, ValueError will be raised. If + sys.implementation.cache_tag is None then NotImplementedError is raised. + + """ + return util.source_from_cache(path) + + +def get_suffixes(): + """**DEPRECATED**""" + extensions = [(s, 'rb', C_EXTENSION) for s in machinery.EXTENSION_SUFFIXES] + source = [(s, 'r', PY_SOURCE) for s in machinery.SOURCE_SUFFIXES] + bytecode = [(s, 'rb', PY_COMPILED) for s in machinery.BYTECODE_SUFFIXES] + + return extensions + source + bytecode + + +class NullImporter: + + """**DEPRECATED** + + Null import object. + + """ + + def __init__(self, path): + if path == '': + raise ImportError('empty pathname', path='') + elif os.path.isdir(path): + raise ImportError('existing directory', path=path) + + def find_module(self, fullname): + """Always returns None.""" + return None + + +class _HackedGetData: + + """Compatibility support for 'file' arguments of various load_*() + functions.""" + + def __init__(self, fullname, path, file=None): + super().__init__(fullname, path) + self.file = file + + def get_data(self, path): + """Gross hack to contort loader to deal w/ load_*()'s bad API.""" + if self.file and path == self.path: + # The contract of get_data() requires us to return bytes. Reopen the + # file in binary mode if needed. + if not self.file.closed: + file = self.file + if 'b' not in file.mode: + file.close() + if self.file.closed: + self.file = file = open(self.path, 'rb') + + with file: + return file.read() + else: + return super().get_data(path) + + +class _LoadSourceCompatibility(_HackedGetData, machinery.SourceFileLoader): + + """Compatibility support for implementing load_source().""" + + +def load_source(name, pathname, file=None): + loader = _LoadSourceCompatibility(name, pathname, file) + spec = util.spec_from_file_location(name, pathname, loader=loader) + if name in sys.modules: + module = _exec(spec, sys.modules[name]) + else: + module = _load(spec) + # To allow reloading to potentially work, use a non-hacked loader which + # won't rely on a now-closed file object. + module.__loader__ = machinery.SourceFileLoader(name, pathname) + module.__spec__.loader = module.__loader__ + return module + + +class _LoadCompiledCompatibility(_HackedGetData, SourcelessFileLoader): + + """Compatibility support for implementing load_compiled().""" + + +def load_compiled(name, pathname, file=None): + """**DEPRECATED**""" + loader = _LoadCompiledCompatibility(name, pathname, file) + spec = util.spec_from_file_location(name, pathname, loader=loader) + if name in sys.modules: + module = _exec(spec, sys.modules[name]) + else: + module = _load(spec) + # To allow reloading to potentially work, use a non-hacked loader which + # won't rely on a now-closed file object. + module.__loader__ = SourcelessFileLoader(name, pathname) + module.__spec__.loader = module.__loader__ + return module + + +def load_package(name, path): + """**DEPRECATED**""" + if os.path.isdir(path): + extensions = (machinery.SOURCE_SUFFIXES[:] + + machinery.BYTECODE_SUFFIXES[:]) + for extension in extensions: + init_path = os.path.join(path, '__init__' + extension) + if os.path.exists(init_path): + path = init_path + break + else: + raise ValueError('{!r} is not a package'.format(path)) + spec = util.spec_from_file_location(name, path, + submodule_search_locations=[]) + if name in sys.modules: + return _exec(spec, sys.modules[name]) + else: + return _load(spec) + + +def load_module(name, file, filename, details): + """**DEPRECATED** + + Load a module, given information returned by find_module(). + + The module name must include the full package name, if any. + + """ + suffix, mode, type_ = details + if mode and (not mode.startswith(('r', 'U')) or '+' in mode): + raise ValueError('invalid file open mode {!r}'.format(mode)) + elif file is None and type_ in {PY_SOURCE, PY_COMPILED}: + msg = 'file object required for import (type code {})'.format(type_) + raise ValueError(msg) + elif type_ == PY_SOURCE: + return load_source(name, filename, file) + elif type_ == PY_COMPILED: + return load_compiled(name, filename, file) + elif type_ == C_EXTENSION and load_dynamic is not None: + if file is None: + with open(filename, 'rb') as opened_file: + return load_dynamic(name, filename, opened_file) + else: + return load_dynamic(name, filename, file) + elif type_ == PKG_DIRECTORY: + return load_package(name, filename) + elif type_ == C_BUILTIN: + return init_builtin(name) + elif type_ == PY_FROZEN: + return init_frozen(name) + else: + msg = "Don't know how to import {} (type code {})".format(name, type_) + raise ImportError(msg, name=name) + + +def find_module(name, path=None): + """**DEPRECATED** + + Search for a module. + + If path is omitted or None, search for a built-in, frozen or special + module and continue search in sys.path. The module name cannot + contain '.'; to search for a submodule of a package, pass the + submodule name and the package's __path__. + + """ + if not isinstance(name, str): + raise TypeError("'name' must be a str, not {}".format(type(name))) + elif not isinstance(path, (type(None), list)): + # Backwards-compatibility + raise RuntimeError("'path' must be None or a list, " + "not {}".format(type(path))) + + if path is None: + if is_builtin(name): + return None, None, ('', '', C_BUILTIN) + elif is_frozen(name): + return None, None, ('', '', PY_FROZEN) + else: + path = sys.path + + for entry in path: + package_directory = os.path.join(entry, name) + for suffix in ['.py', machinery.BYTECODE_SUFFIXES[0]]: + package_file_name = '__init__' + suffix + file_path = os.path.join(package_directory, package_file_name) + if os.path.isfile(file_path): + return None, package_directory, ('', '', PKG_DIRECTORY) + for suffix, mode, type_ in get_suffixes(): + file_name = name + suffix + file_path = os.path.join(entry, file_name) + if os.path.isfile(file_path): + break + else: + continue + break # Break out of outer loop when breaking out of inner loop. + else: + raise ImportError(_ERR_MSG.format(name), name=name) + + encoding = None + if 'b' not in mode: + with open(file_path, 'rb') as file: + encoding = tokenize.detect_encoding(file.readline)[0] + file = open(file_path, mode, encoding=encoding) + return file, file_path, (suffix, mode, type_) + + +def reload(module): + """**DEPRECATED** + + Reload the module and return it. + + The module must have been successfully imported before. + + """ + return importlib.reload(module) + + +def init_builtin(name): + """**DEPRECATED** + + Load and return a built-in module by name, or None is such module doesn't + exist + """ + try: + return _builtin_from_name(name) + except ImportError: + return None + + +if create_dynamic: + def load_dynamic(name, path, file=None): + """**DEPRECATED** + + Load an extension module. + """ + import importlib.machinery + loader = importlib.machinery.ExtensionFileLoader(name, path) + + # Issue #24748: Skip the sys.modules check in _load_module_shim; + # always load new extension + spec = importlib.machinery.ModuleSpec( + name=name, loader=loader, origin=path) + return _load(spec) + +else: + load_dynamic = None diff --git a/python/extractor/index.py b/python/extractor/index.py new file mode 100644 index 00000000000..29996f8a0c3 --- /dev/null +++ b/python/extractor/index.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +# This file needs to be able to handle all versions of Python we are likely to encounter +# Which is probably 3.6 and upwards. Handling 3.6 specifically will be by throwing an error, though. +# We will require at least 3.7 to proceed. + +'''Run index.py in buildtools''' + +import os +import sys + +if sys.version_info < (3, 7): + sys.exit("ERROR: Python 3.7 or later is required (currently running {}.{})".format(sys.version_info[0], sys.version_info[1])) + +from python_tracer import getzipfilename + +if 'SEMMLE_DIST' in os.environ: + if 'CODEQL_EXTRACTOR_PYTHON_ROOT' not in os.environ: + os.environ['CODEQL_EXTRACTOR_PYTHON_ROOT'] = os.environ['SEMMLE_DIST'] +else: + os.environ["SEMMLE_DIST"] = os.environ["CODEQL_EXTRACTOR_PYTHON_ROOT"] + +tools = os.path.join(os.environ['SEMMLE_DIST'], "tools") +zippath = os.path.join(tools, getzipfilename()) +sys.path = [ zippath ] + sys.path + +import buildtools.index +buildtools.index.main() diff --git a/python/extractor/lark/LICENSE b/python/extractor/lark/LICENSE new file mode 100644 index 00000000000..efcb9665fb5 --- /dev/null +++ b/python/extractor/lark/LICENSE @@ -0,0 +1,19 @@ +Copyright © 2017 Erez Shinan + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/python/extractor/lark/__init__.py b/python/extractor/lark/__init__.py new file mode 100644 index 00000000000..34f0b8dfb55 --- /dev/null +++ b/python/extractor/lark/__init__.py @@ -0,0 +1,7 @@ +from .tree import Tree +from .visitors import Transformer, Visitor, v_args, Discard +from .visitors import InlineTransformer, inline_args # XXX Deprecated +from .exceptions import ParseError, LexError, GrammarError, UnexpectedToken, UnexpectedInput, UnexpectedCharacters +from .lark import Lark + +__version__ = "0.6.3" diff --git a/python/extractor/lark/common.py b/python/extractor/lark/common.py new file mode 100644 index 00000000000..b47253a07d1 --- /dev/null +++ b/python/extractor/lark/common.py @@ -0,0 +1,87 @@ +import re +import sys + +from .utils import get_regexp_width + +Py36 = (sys.version_info[:2] >= (3, 6)) + + +###{standalone +###} + + + +class LexerConf: + def __init__(self, tokens, ignore=(), postlex=None, callbacks=None): + self.tokens = tokens + self.ignore = ignore + self.postlex = postlex + self.callbacks = callbacks or {} + +class ParserConf: + def __init__(self, rules, callback, start): + self.rules = rules + self.callback = callback + self.start = start + + + +class Pattern(object): + def __init__(self, value, flags=()): + self.value = value + self.flags = frozenset(flags) + + def __repr__(self): + return repr(self.to_regexp()) + + # Pattern Hashing assumes all subclasses have a different priority! + def __hash__(self): + return hash((type(self), self.value, self.flags)) + def __eq__(self, other): + return type(self) == type(other) and self.value == other.value and self.flags == other.flags + + def to_regexp(self): + raise NotImplementedError() + + if Py36: + # Python 3.6 changed syntax for flags in regular expression + def _get_flags(self, value): + for f in self.flags: + value = ('(?%s:%s)' % (f, value)) + return value + + else: + def _get_flags(self, value): + for f in self.flags: + value = ('(?%s)' % f) + value + return value + +class PatternStr(Pattern): + def to_regexp(self): + return self._get_flags(re.escape(self.value)) + + @property + def min_width(self): + return len(self.value) + max_width = min_width + +class PatternRE(Pattern): + def to_regexp(self): + return self._get_flags(self.value) + + @property + def min_width(self): + return get_regexp_width(self.to_regexp())[0] + @property + def max_width(self): + return get_regexp_width(self.to_regexp())[1] + +class TokenDef(object): + def __init__(self, name, pattern, priority=1): + assert isinstance(pattern, Pattern), pattern + self.name = name + self.pattern = pattern + self.priority = priority + + def __repr__(self): + return '%s(%r, %r)' % (type(self).__name__, self.name, self.pattern) diff --git a/python/extractor/lark/exceptions.py b/python/extractor/lark/exceptions.py new file mode 100644 index 00000000000..9350f66c9eb --- /dev/null +++ b/python/extractor/lark/exceptions.py @@ -0,0 +1,86 @@ +from .utils import STRING_TYPE + +class LarkError(Exception): + pass + +class GrammarError(LarkError): + pass + +class ParseError(LarkError): + pass + +class LexError(LarkError): + pass + +class UnexpectedInput(LarkError): + pos_in_stream = None + + def get_context(self, text, span=40): + pos = self.pos_in_stream + start = max(pos - span, 0) + end = pos + span + before = text[start:pos].rsplit('\n', 1)[-1] + after = text[pos:end].split('\n', 1)[0] + return before + after + '\n' + ' ' * len(before) + '^\n' + + def match_examples(self, parse_fn, examples): + """ Given a parser instance and a dictionary mapping some label with + some malformed syntax examples, it'll return the label for the + example that bests matches the current error. + """ + assert self.state is not None, "Not supported for this exception" + + candidate = None + for label, example in examples.items(): + assert not isinstance(example, STRING_TYPE) + + for malformed in example: + try: + parse_fn(malformed) + except UnexpectedInput as ut: + if ut.state == self.state: + try: + if ut.token == self.token: # Try exact match first + return label + except AttributeError: + pass + if not candidate: + candidate = label + + return candidate + + +class UnexpectedCharacters(LexError, UnexpectedInput): + def __init__(self, seq, lex_pos, line, column, allowed=None, considered_tokens=None, state=None): + message = "No terminal defined for '%s' at line %d col %d" % (seq[lex_pos], line, column) + + self.line = line + self.column = column + self.allowed = allowed + self.considered_tokens = considered_tokens + self.pos_in_stream = lex_pos + self.state = state + + message += '\n\n' + self.get_context(seq) + if allowed: + message += '\nExpecting: %s\n' % allowed + + super(UnexpectedCharacters, self).__init__(message) + + + +class UnexpectedToken(ParseError, UnexpectedInput): + def __init__(self, token, expected, considered_rules=None, state=None): + self.token = token + self.expected = expected # XXX str shouldn't necessary + self.line = getattr(token, 'line', '?') + self.column = getattr(token, 'column', '?') + self.considered_rules = considered_rules + self.state = state + self.pos_in_stream = getattr(token, 'pos_in_stream', None) + + message = ("Unexpected token %r at line %s, column %s.\n" + "Expected: %s\n" + % (token, self.line, self.column, ', '.join(self.expected))) + + super(UnexpectedToken, self).__init__(message) diff --git a/python/extractor/lark/grammar.py b/python/extractor/lark/grammar.py new file mode 100644 index 00000000000..37c2997f74d --- /dev/null +++ b/python/extractor/lark/grammar.py @@ -0,0 +1,60 @@ +class Symbol(object): + is_term = NotImplemented + + def __init__(self, name): + self.name = name + + def __eq__(self, other): + assert isinstance(other, Symbol), other + return self.is_term == other.is_term and self.name == other.name + + def __ne__(self, other): + return not (self == other) + + def __hash__(self): + return hash(self.name) + + def __repr__(self): + return '%s(%r)' % (type(self).__name__, self.name) + +class Terminal(Symbol): + is_term = True + + def __init__(self, name, filter_out=False): + self.name = name + self.filter_out = filter_out + + +class NonTerminal(Symbol): + is_term = False + +class Rule(object): + """ + origin : a symbol + expansion : a list of symbols + """ + def __init__(self, origin, expansion, alias=None, options=None): + self.origin = origin + self.expansion = expansion + self.alias = alias + self.options = options + + def __str__(self): + return '<%s : %s>' % (self.origin, ' '.join(map(str,self.expansion))) + + def __repr__(self): + return 'Rule(%r, %r, %r, %r)' % (self.origin, self.expansion, self.alias, self.options) + + +class RuleOptions: + def __init__(self, keep_all_tokens=False, expand1=False, priority=None): + self.keep_all_tokens = keep_all_tokens + self.expand1 = expand1 + self.priority = priority + + def __repr__(self): + return 'RuleOptions(%r, %r, %r)' % ( + self.keep_all_tokens, + self.expand1, + self.priority, + ) diff --git a/python/extractor/lark/grammars/__init__.py b/python/extractor/lark/grammars/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/lark/grammars/common.lark b/python/extractor/lark/grammars/common.lark new file mode 100644 index 00000000000..8bc8079f368 --- /dev/null +++ b/python/extractor/lark/grammars/common.lark @@ -0,0 +1,49 @@ +// +// Numbers +// + +DIGIT: "0".."9" +HEXDIGIT: "a".."f"|"A".."F"|DIGIT + +INT: DIGIT+ +SIGNED_INT: ["+"|"-"] INT +DECIMAL: INT "." INT? | "." INT + +// float = /-?\d+(\.\d+)?([eE][+-]?\d+)?/ +_EXP: ("e"|"E") SIGNED_INT +FLOAT: INT _EXP | DECIMAL _EXP? +SIGNED_FLOAT: ["+"|"-"] FLOAT + +NUMBER: FLOAT | INT +SIGNED_NUMBER: ["+"|"-"] NUMBER + +// +// Strings +// +//STRING: /"(\\\"|\\\\|[^"\n])*?"i?/ +STRING_INNER: ("\\\""|/[^"]/) +ESCAPED_STRING: "\"" STRING_INNER* "\"" + + +// +// Names (Variables) +// +LCASE_LETTER: "a".."z" +UCASE_LETTER: "A".."Z" + +LETTER: UCASE_LETTER | LCASE_LETTER +WORD: LETTER+ + +CNAME: ("_"|LETTER) ("_"|LETTER|DIGIT)* + + +// +// Whitespace +// +WS_INLINE: (" "|/\t/)+ +WS: /[ \t\f\r\n]/+ + +CR : /\r/ +LF : /\n/ +NEWLINE: (CR? LF)+ + diff --git a/python/extractor/lark/indenter.py b/python/extractor/lark/indenter.py new file mode 100644 index 00000000000..34e61a09e25 --- /dev/null +++ b/python/extractor/lark/indenter.py @@ -0,0 +1,55 @@ +"Provides Indentation services for languages with indentation similar to Python" + +from .lexer import Token + +###{standalone +class Indenter: + def __init__(self): + self.paren_level = 0 + self.indent_level = [0] + + def handle_NL(self, token): + if self.paren_level > 0: + return + + yield token + + indent_str = token.rsplit('\n', 1)[1] # Tabs and spaces + indent = indent_str.count(' ') + indent_str.count('\t') * self.tab_len + + if indent > self.indent_level[-1]: + self.indent_level.append(indent) + yield Token.new_borrow_pos(self.INDENT_type, indent_str, token) + else: + while indent < self.indent_level[-1]: + self.indent_level.pop() + yield Token.new_borrow_pos(self.DEDENT_type, indent_str, token) + + assert indent == self.indent_level[-1], '%s != %s' % (indent, self.indent_level[-1]) + + def process(self, stream): + for token in stream: + if token.type == self.NL_type: + for t in self.handle_NL(token): + yield t + else: + yield token + + if token.type in self.OPEN_PAREN_types: + self.paren_level += 1 + elif token.type in self.CLOSE_PAREN_types: + self.paren_level -= 1 + assert self.paren_level >= 0 + + while len(self.indent_level) > 1: + self.indent_level.pop() + yield Token(self.DEDENT_type, '') + + assert self.indent_level == [0], self.indent_level + + # XXX Hack for ContextualLexer. Maybe there's a more elegant solution? + @property + def always_accept(self): + return (self.NL_type,) + +###} diff --git a/python/extractor/lark/lark.py b/python/extractor/lark/lark.py new file mode 100644 index 00000000000..7493beae252 --- /dev/null +++ b/python/extractor/lark/lark.py @@ -0,0 +1,235 @@ +from __future__ import absolute_import + +import os +import time +from collections import defaultdict +from io import open + +from .utils import STRING_TYPE +from .load_grammar import load_grammar +from .tree import Tree +from .common import LexerConf, ParserConf + +from .lexer import Lexer, TraditionalLexer +from .parse_tree_builder import ParseTreeBuilder +from .parser_frontends import get_frontend + + +class LarkOptions(object): + """Specifies the options for Lark + + """ + OPTIONS_DOC = """ + parser - Decides which parser engine to use, "earley" or "lalr". (Default: "earley") + Note: "lalr" requires a lexer + + lexer - Decides whether or not to use a lexer stage + "standard": Use a standard lexer + "contextual": Stronger lexer (only works with parser="lalr") + "dynamic": Flexible and powerful (only with parser="earley") + "dynamic_complete": Same as dynamic, but tries *every* variation + of tokenizing possible. (only with parser="earley") + "auto" (default): Choose for me based on grammar and parser + + ambiguity - Decides how to handle ambiguity in the parse. Only relevant if parser="earley" + "resolve": The parser will automatically choose the simplest derivation + (it chooses consistently: greedy for tokens, non-greedy for rules) + "explicit": The parser will return all derivations wrapped in "_ambig" tree nodes (i.e. a forest). + + transformer - Applies the transformer to every parse tree + debug - Affects verbosity (default: False) + keep_all_tokens - Don't automagically remove "punctuation" tokens (default: False) + cache_grammar - Cache the Lark grammar (Default: False) + postlex - Lexer post-processing (Requires standard lexer. Default: None) + start - The start symbol (Default: start) + profile - Measure run-time usage in Lark. Read results from the profiler proprety (Default: False) + propagate_positions - Propagates [line, column, end_line, end_column] attributes into all tree branches. + lexer_callbacks - Dictionary of callbacks for the lexer. May alter tokens during lexing. Use with caution. + """ + __doc__ = OPTIONS_DOC + def __init__(self, options_dict): + o = dict(options_dict) + + self.debug = bool(o.pop('debug', False)) + self.keep_all_tokens = bool(o.pop('keep_all_tokens', False)) + self.tree_class = o.pop('tree_class', Tree) + self.cache_grammar = o.pop('cache_grammar', False) + self.postlex = o.pop('postlex', None) + self.parser = o.pop('parser', 'earley') + self.lexer = o.pop('lexer', 'auto') + self.transformer = o.pop('transformer', None) + self.start = o.pop('start', 'start') + self.profile = o.pop('profile', False) + self.ambiguity = o.pop('ambiguity', 'auto') + self.propagate_positions = o.pop('propagate_positions', False) + self.earley__predict_all = o.pop('earley__predict_all', False) + self.lexer_callbacks = o.pop('lexer_callbacks', {}) + + assert self.parser in ('earley', 'lalr', 'cyk', None) + + if self.parser == 'earley' and self.transformer: + raise ValueError('Cannot specify an embedded transformer when using the Earley algorithm.' + 'Please use your transformer on the resulting parse tree, or use a different algorithm (i.e. lalr)') + + if o: + raise ValueError("Unknown options: %s" % o.keys()) + + +class Profiler: + def __init__(self): + self.total_time = defaultdict(float) + self.cur_section = '__init__' + self.last_enter_time = time.time() + + def enter_section(self, name): + cur_time = time.time() + self.total_time[self.cur_section] += cur_time - self.last_enter_time + self.last_enter_time = cur_time + self.cur_section = name + + def make_wrapper(self, name, f): + def wrapper(*args, **kwargs): + last_section = self.cur_section + self.enter_section(name) + try: + return f(*args, **kwargs) + finally: + self.enter_section(last_section) + + return wrapper + + +class Lark: + def __init__(self, grammar, **options): + """ + grammar : a string or file-object containing the grammar spec (using Lark's ebnf syntax) + options : a dictionary controlling various aspects of Lark. + """ + self.options = LarkOptions(options) + + # Some, but not all file-like objects have a 'name' attribute + try: + self.source = grammar.name + except AttributeError: + self.source = '' + cache_file = "larkcache_%s" % str(hash(grammar)%(2**32)) + else: + cache_file = "larkcache_%s" % os.path.basename(self.source) + + # Drain file-like objects to get their contents + try: + read = grammar.read + except AttributeError: + pass + else: + grammar = read() + + assert isinstance(grammar, STRING_TYPE) + + if self.options.cache_grammar: + raise NotImplementedError("Not available yet") + + assert not self.options.profile, "Feature temporarily disabled" + self.profiler = Profiler() if self.options.profile else None + + if self.options.lexer == 'auto': + if self.options.parser == 'lalr': + self.options.lexer = 'contextual' + elif self.options.parser == 'earley': + self.options.lexer = 'dynamic' + elif self.options.parser == 'cyk': + self.options.lexer = 'standard' + else: + assert False, self.options.parser + lexer = self.options.lexer + assert lexer in ('standard', 'contextual', 'dynamic', 'dynamic_complete') or issubclass(lexer, Lexer) + + if self.options.ambiguity == 'auto': + if self.options.parser == 'earley': + self.options.ambiguity = 'resolve' + else: + disambig_parsers = ['earley', 'cyk'] + assert self.options.parser in disambig_parsers, ( + 'Only %s supports disambiguation right now') % ', '.join(disambig_parsers) + assert self.options.ambiguity in ('resolve', 'explicit', 'auto', 'resolve__antiscore_sum') + + # Parse the grammar file and compose the grammars (TODO) + self.grammar = load_grammar(grammar, self.source) + + # Compile the EBNF grammar into BNF + self.terminals, self.rules, self.ignore_tokens = self.grammar.compile() + + self.lexer_conf = LexerConf(self.terminals, self.ignore_tokens, self.options.postlex, self.options.lexer_callbacks) + + if self.options.parser: + self.parser = self._build_parser() + elif lexer: + self.lexer = self._build_lexer() + + if self.profiler: self.profiler.enter_section('outside_lark') + + __init__.__doc__ = "\nOPTIONS:" + LarkOptions.OPTIONS_DOC + + def _build_lexer(self): + return TraditionalLexer(self.lexer_conf.tokens, ignore=self.lexer_conf.ignore, user_callbacks=self.lexer_conf.callbacks) + + def _build_parser(self): + self.parser_class = get_frontend(self.options.parser, self.options.lexer) + + self._parse_tree_builder = ParseTreeBuilder(self.rules, self.options.tree_class, self.options.propagate_positions, self.options.keep_all_tokens, self.options.parser!='lalr') + callback = self._parse_tree_builder.create_callback(self.options.transformer) + if self.profiler: + for f in dir(callback): + if not (f.startswith('__') and f.endswith('__')): + setattr(callback, f, self.profiler.make_wrapper('transformer', getattr(callback, f))) + + parser_conf = ParserConf(self.rules, callback, self.options.start) + + return self.parser_class(self.lexer_conf, parser_conf, options=self.options) + + @classmethod + def open(cls, grammar_filename, rel_to=None, **options): + """Create an instance of Lark with the grammar given by its filename + + If rel_to is provided, the function will find the grammar filename in relation to it. + + Example: + + >>> Lark.open("grammar_file.lark", rel_to=__file__, parser="lalr") + Lark(...) + + """ + if rel_to: + basepath = os.path.dirname(rel_to) + grammar_filename = os.path.join(basepath, grammar_filename) + with open(grammar_filename, encoding='utf8') as f: + return cls(f, **options) + + def __repr__(self): + return 'Lark(open(%r), parser=%r, lexer=%r, ...)' % (self.source, self.options.parser, self.options.lexer) + + + def lex(self, text): + "Only lex (and postlex) the text, without parsing it. Only relevant when lexer='standard'" + if not hasattr(self, 'lexer'): + self.lexer = self._build_lexer() + stream = self.lexer.lex(text) + if self.options.postlex: + return self.options.postlex.process(stream) + return stream + + def parse(self, text): + "Parse the given text, according to the options provided. Returns a tree, unless specified otherwise." + return self.parser.parse(text) + + # if self.profiler: + # self.profiler.enter_section('lex') + # l = list(self.lex(text)) + # self.profiler.enter_section('parse') + # try: + # return self.parser.parse(l) + # finally: + # self.profiler.enter_section('outside_lark') + # else: + # l = list(self.lex(text)) + # return self.parser.parse(l) diff --git a/python/extractor/lark/lexer.py b/python/extractor/lark/lexer.py new file mode 100644 index 00000000000..15f83b7a128 --- /dev/null +++ b/python/extractor/lark/lexer.py @@ -0,0 +1,252 @@ +## Lexer Implementation + +import re + +from .utils import Str, classify +from .common import PatternStr, PatternRE, TokenDef +from .exceptions import UnexpectedCharacters, LexError + +###{standalone +class Token(Str): + __slots__ = ('type', 'pos_in_stream', 'value', 'line', 'column', 'end_line', 'end_column') + + def __new__(cls, type_, value, pos_in_stream=None, line=None, column=None): + self = super(Token, cls).__new__(cls, value) + self.type = type_ + self.pos_in_stream = pos_in_stream + self.value = value + self.line = line + self.column = column + self.end_line = None + self.end_column = None + return self + + @classmethod + def new_borrow_pos(cls, type_, value, borrow_t): + return cls(type_, value, borrow_t.pos_in_stream, line=borrow_t.line, column=borrow_t.column) + + def __reduce__(self): + return (self.__class__, (self.type, self.value, self.pos_in_stream, self.line, self.column, )) + + def __repr__(self): + return 'Token(%s, %r)' % (self.type, self.value) + + def __deepcopy__(self, memo): + return Token(self.type, self.value, self.pos_in_stream, self.line, self.column) + + def __eq__(self, other): + if isinstance(other, Token) and self.type != other.type: + return False + + return Str.__eq__(self, other) + + __hash__ = Str.__hash__ + + +class LineCounter: + def __init__(self): + self.newline_char = '\n' + self.char_pos = 0 + self.line = 1 + self.column = 1 + self.line_start_pos = 0 + + def feed(self, token, test_newline=True): + """Consume a token and calculate the new line & column. + + As an optional optimization, set test_newline=False is token doesn't contain a newline. + """ + if test_newline: + newlines = token.count(self.newline_char) + if newlines: + self.line += newlines + self.line_start_pos = self.char_pos + token.rindex(self.newline_char) + 1 + + self.char_pos += len(token) + self.column = self.char_pos - self.line_start_pos + 1 + +class _Lex: + "Built to serve both Lexer and ContextualLexer" + def __init__(self, lexer, state=None): + self.lexer = lexer + self.state = state + + def lex(self, stream, newline_types, ignore_types): + newline_types = list(newline_types) + ignore_types = list(ignore_types) + line_ctr = LineCounter() + + t = None + while True: + lexer = self.lexer + for mre, type_from_index in lexer.mres: + m = mre.match(stream, line_ctr.char_pos) + if m: + value = m.group(0) + type_ = type_from_index[m.lastindex] + if type_ not in ignore_types: + t = Token(type_, value, line_ctr.char_pos, line_ctr.line, line_ctr.column) + if t.type in lexer.callback: + t = lexer.callback[t.type](t) + yield t + else: + if type_ in lexer.callback: + t = Token(type_, value, line_ctr.char_pos, line_ctr.line, line_ctr.column) + lexer.callback[type_](t) + + line_ctr.feed(value, type_ in newline_types) + if t: + t.end_line = line_ctr.line + t.end_column = line_ctr.column + + break + else: + if line_ctr.char_pos < len(stream): + raise UnexpectedCharacters(stream, line_ctr.char_pos, line_ctr.line, line_ctr.column, state=self.state) + break + +class UnlessCallback: + def __init__(self, mres): + self.mres = mres + + def __call__(self, t): + for mre, type_from_index in self.mres: + m = mre.match(t.value) + if m: + t.type = type_from_index[m.lastindex] + break + return t + +###} + + + +def _create_unless(tokens): + tokens_by_type = classify(tokens, lambda t: type(t.pattern)) + assert len(tokens_by_type) <= 2, tokens_by_type.keys() + embedded_strs = set() + callback = {} + for retok in tokens_by_type.get(PatternRE, []): + unless = [] # {} + for strtok in tokens_by_type.get(PatternStr, []): + if strtok.priority > retok.priority: + continue + s = strtok.pattern.value + m = re.match(retok.pattern.to_regexp(), s) + if m and m.group(0) == s: + unless.append(strtok) + if strtok.pattern.flags <= retok.pattern.flags: + embedded_strs.add(strtok) + if unless: + callback[retok.name] = UnlessCallback(build_mres(unless, match_whole=True)) + + tokens = [t for t in tokens if t not in embedded_strs] + return tokens, callback + + +def _build_mres(tokens, max_size, match_whole): + # Python sets an unreasonable group limit (currently 100) in its re module + # Worse, the only way to know we reached it is by catching an AssertionError! + # This function recursively tries less and less groups until it's successful. + postfix = '$' if match_whole else '' + mres = [] + while tokens: + try: + mre = re.compile(u'|'.join(u'(?P<%s>%s)'%(t.name, t.pattern.to_regexp()+postfix) for t in tokens[:max_size])) + except AssertionError: # Yes, this is what Python provides us.. :/ + return _build_mres(tokens, max_size//2, match_whole) + + mres.append((mre, {i:n for n,i in mre.groupindex.items()} )) + tokens = tokens[max_size:] + return mres + +def build_mres(tokens, match_whole=False): + return _build_mres(tokens, len(tokens), match_whole) + +def _regexp_has_newline(r): + return '\n' in r or '\\n' in r or ('(?s' in r and '.' in r) + +class Lexer: + """Lexer interface + + Method Signatures: + lex(self, stream) -> Iterator[Token] + + set_parser_state(self, state) # Optional + """ + set_parser_state = NotImplemented + lex = NotImplemented + +class TraditionalLexer(Lexer): + def __init__(self, tokens, ignore=(), user_callbacks={}): + assert all(isinstance(t, TokenDef) for t in tokens), tokens + + tokens = list(tokens) + + # Sanitization + for t in tokens: + try: + re.compile(t.pattern.to_regexp()) + except: + raise LexError("Cannot compile token %s: %s" % (t.name, t.pattern)) + + if t.pattern.min_width == 0: + raise LexError("Lexer does not allow zero-width tokens. (%s: %s)" % (t.name, t.pattern)) + + assert set(ignore) <= {t.name for t in tokens} + + # Init + self.newline_types = [t.name for t in tokens if _regexp_has_newline(t.pattern.to_regexp())] + self.ignore_types = list(ignore) + + tokens.sort(key=lambda x:(-x.priority, -x.pattern.max_width, -len(x.pattern.value), x.name)) + + tokens, self.callback = _create_unless(tokens) + assert all(self.callback.values()) + + for type_, f in user_callbacks.items(): + assert type_ not in self.callback + self.callback[type_] = f + + self.tokens = tokens + + self.mres = build_mres(tokens) + + def lex(self, stream): + return _Lex(self).lex(stream, self.newline_types, self.ignore_types) + + +class ContextualLexer(Lexer): + def __init__(self, tokens, states, ignore=(), always_accept=(), user_callbacks={}): + tokens_by_name = {} + for t in tokens: + assert t.name not in tokens_by_name, t + tokens_by_name[t.name] = t + + lexer_by_tokens = {} + self.lexers = {} + for state, accepts in states.items(): + key = frozenset(accepts) + try: + lexer = lexer_by_tokens[key] + except KeyError: + accepts = set(accepts) | set(ignore) | set(always_accept) + state_tokens = [tokens_by_name[n] for n in accepts if n and n in tokens_by_name] + lexer = TraditionalLexer(state_tokens, ignore=ignore, user_callbacks=user_callbacks) + lexer_by_tokens[key] = lexer + + self.lexers[state] = lexer + + self.root_lexer = TraditionalLexer(tokens, ignore=ignore, user_callbacks=user_callbacks) + + self.set_parser_state(None) # Needs to be set on the outside + + def set_parser_state(self, state): + self.parser_state = state + + def lex(self, stream): + l = _Lex(self.lexers[self.parser_state], self.parser_state) + for x in l.lex(stream, self.root_lexer.newline_types, self.root_lexer.ignore_types): + yield x + l.lexer = self.lexers[self.parser_state] + l.state = self.parser_state diff --git a/python/extractor/lark/load_grammar.py b/python/extractor/lark/load_grammar.py new file mode 100644 index 00000000000..7fd32c48e8d --- /dev/null +++ b/python/extractor/lark/load_grammar.py @@ -0,0 +1,741 @@ +"Parses and creates Grammar objects" + +import os.path +import sys +from itertools import chain +import re +from ast import literal_eval +from copy import deepcopy +import pkgutil + +from .lexer import Token + + +from .parse_tree_builder import ParseTreeBuilder +from .parser_frontends import LALR_TraditionalLexer +from .common import LexerConf, ParserConf, PatternStr, PatternRE, TokenDef +from .grammar import RuleOptions, Rule, Terminal, NonTerminal, Symbol +from .utils import classify, suppress +from .exceptions import GrammarError, UnexpectedCharacters, UnexpectedToken + +from .tree import Tree, SlottedTree as ST +from .visitors import Transformer, Visitor, v_args, Transformer_InPlace +inline_args = v_args(inline=True) + +__path__ = os.path.dirname(__file__) + +GRAMMAR_PACKAGES = ['lark.grammars'] + +EXT = '.lark' + +_RE_FLAGS = 'imslux' + +def is_terminal(sym): + return sym.isupper() + +_TERMINAL_NAMES = { + '.' : 'DOT', + ',' : 'COMMA', + ':' : 'COLON', + ';' : 'SEMICOLON', + '+' : 'PLUS', + '-' : 'MINUS', + '*' : 'STAR', + '/' : 'SLASH', + '\\' : 'BACKSLASH', + '|' : 'VBAR', + '?' : 'QMARK', + '!' : 'BANG', + '@' : 'AT', + '#' : 'HASH', + '$' : 'DOLLAR', + '%' : 'PERCENT', + '^' : 'CIRCUMFLEX', + '&' : 'AMPERSAND', + '_' : 'UNDERSCORE', + '<' : 'LESSTHAN', + '>' : 'MORETHAN', + '=' : 'EQUAL', + '"' : 'DBLQUOTE', + '\'' : 'QUOTE', + '`' : 'BACKQUOTE', + '~' : 'TILDE', + '(' : 'LPAR', + ')' : 'RPAR', + '{' : 'LBRACE', + '}' : 'RBRACE', + '[' : 'LSQB', + ']' : 'RSQB', + '\n' : 'NEWLINE', + '\r\n' : 'CRLF', + '\t' : 'TAB', + ' ' : 'SPACE', +} + +# Grammar Parser +TERMINALS = { + '_LPAR': r'\(', + '_RPAR': r'\)', + '_LBRA': r'\[', + '_RBRA': r'\]', + 'OP': '[+*][?]?|[?](?![a-z])', + '_COLON': ':', + '_COMMA': ',', + '_OR': r'\|', + '_DOT': r'\.', + 'TILDE': '~', + 'RULE': '!?[_?]?[a-z][_a-z0-9]*', + 'TERMINAL': '_?[A-Z][_A-Z0-9]*', + 'STRING': r'"(\\"|\\\\|[^"\n])*?"i?', + 'REGEXP': r'/(?!/)(\\/|\\\\|[^/\n])*?/[%s]*' % _RE_FLAGS, + '_NL': r'(\r?\n)+\s*', + 'WS': r'[ \t]+', + 'COMMENT': r'//[^\n]*', + '_TO': '->', + '_IGNORE': r'%ignore', + '_DECLARE': r'%declare', + '_IMPORT': r'%import', + 'NUMBER': r'\d+', +} + +RULES = { + 'start': ['_list'], + '_list': ['_item', '_list _item'], + '_item': ['rule', 'token', 'statement', '_NL'], + + 'rule': ['RULE _COLON expansions _NL', + 'RULE _DOT NUMBER _COLON expansions _NL'], + 'expansions': ['alias', + 'expansions _OR alias', + 'expansions _NL _OR alias'], + + '?alias': ['expansion _TO RULE', 'expansion'], + 'expansion': ['_expansion'], + + '_expansion': ['', '_expansion expr'], + + '?expr': ['atom', + 'atom OP', + 'atom TILDE NUMBER', + 'atom TILDE NUMBER _DOT _DOT NUMBER', + ], + + '?atom': ['_LPAR expansions _RPAR', + 'maybe', + 'value'], + + 'value': ['terminal', + 'nonterminal', + 'literal', + 'range'], + + 'terminal': ['TERMINAL'], + 'nonterminal': ['RULE'], + + '?name': ['RULE', 'TERMINAL'], + + 'maybe': ['_LBRA expansions _RBRA'], + 'range': ['STRING _DOT _DOT STRING'], + + 'token': ['TERMINAL _COLON expansions _NL', + 'TERMINAL _DOT NUMBER _COLON expansions _NL'], + 'statement': ['ignore', 'import', 'declare'], + 'ignore': ['_IGNORE expansions _NL'], + 'declare': ['_DECLARE _declare_args _NL'], + 'import': ['_IMPORT _import_path _NL', + '_IMPORT _import_path _LPAR name_list _RPAR _NL', + '_IMPORT _import_path _TO TERMINAL _NL'], + + '_import_path': ['import_lib', 'import_rel'], + 'import_lib': ['_import_args'], + 'import_rel': ['_DOT _import_args'], + '_import_args': ['name', '_import_args _DOT name'], + + 'name_list': ['_name_list'], + '_name_list': ['name', '_name_list _COMMA name'], + + '_declare_args': ['name', '_declare_args name'], + 'literal': ['REGEXP', 'STRING'], +} + + +@inline_args +class EBNF_to_BNF(Transformer_InPlace): + def __init__(self): + self.new_rules = [] + self.rules_by_expr = {} + self.prefix = 'anon' + self.i = 0 + self.rule_options = None + + def _add_recurse_rule(self, type_, expr): + if expr in self.rules_by_expr: + return self.rules_by_expr[expr] + + new_name = '__%s_%s_%d' % (self.prefix, type_, self.i) + self.i += 1 + t = NonTerminal(Token('RULE', new_name, -1)) + tree = ST('expansions', [ST('expansion', [expr]), ST('expansion', [t, expr])]) + self.new_rules.append((new_name, tree, self.rule_options)) + self.rules_by_expr[expr] = t + return t + + def expr(self, rule, op, *args): + if op.value == '?': + return ST('expansions', [rule, ST('expansion', [])]) + elif op.value == '+': + # a : b c+ d + # --> + # a : b _c d + # _c : _c c | c; + return self._add_recurse_rule('plus', rule) + elif op.value == '*': + # a : b c* d + # --> + # a : b _c? d + # _c : _c c | c; + new_name = self._add_recurse_rule('star', rule) + return ST('expansions', [new_name, ST('expansion', [])]) + elif op.value == '~': + if len(args) == 1: + mn = mx = int(args[0]) + else: + mn, mx = map(int, args) + if mx < mn: + raise GrammarError("Bad Range for %s (%d..%d isn't allowed)" % (rule, mn, mx)) + return ST('expansions', [ST('expansion', [rule] * n) for n in range(mn, mx+1)]) + assert False, op + + +class SimplifyRule_Visitor(Visitor): + + @staticmethod + def _flatten(tree): + while True: + to_expand = [i for i, child in enumerate(tree.children) + if isinstance(child, Tree) and child.data == tree.data] + if not to_expand: + break + tree.expand_kids_by_index(*to_expand) + + def expansion(self, tree): + # rules_list unpacking + # a : b (c|d) e + # --> + # a : b c e | b d e + # + # In AST terms: + # expansion(b, expansions(c, d), e) + # --> + # expansions( expansion(b, c, e), expansion(b, d, e) ) + + self._flatten(tree) + + for i, child in enumerate(tree.children): + if isinstance(child, Tree) and child.data == 'expansions': + tree.data = 'expansions' + tree.children = [self.visit(ST('expansion', [option if i==j else other + for j, other in enumerate(tree.children)])) + for option in set(child.children)] + self._flatten(tree) + break + + def alias(self, tree): + rule, alias_name = tree.children + if rule.data == 'expansions': + aliases = [] + for child in tree.children[0].children: + aliases.append(ST('alias', [child, alias_name])) + tree.data = 'expansions' + tree.children = aliases + + def expansions(self, tree): + self._flatten(tree) + tree.children = list(set(tree.children)) + + +class RuleTreeToText(Transformer): + def expansions(self, x): + return x + def expansion(self, symbols): + return symbols, None + def alias(self, x): + (expansion, _alias), alias = x + assert _alias is None, (alias, expansion, '-', _alias) # Double alias not allowed + return expansion, alias.value + + +@inline_args +class CanonizeTree(Transformer_InPlace): + def maybe(self, expr): + return ST('expr', [expr, Token('OP', '?', -1)]) + + def tokenmods(self, *args): + if len(args) == 1: + return list(args) + tokenmods, value = args + return tokenmods + [value] + +class PrepareAnonTerminals(Transformer_InPlace): + "Create a unique list of anonymous tokens. Attempt to give meaningful names to them when we add them" + + def __init__(self, tokens): + self.tokens = tokens + self.token_set = {td.name for td in self.tokens} + self.token_reverse = {td.pattern: td for td in tokens} + self.i = 0 + + + @inline_args + def pattern(self, p): + value = p.value + if p in self.token_reverse and p.flags != self.token_reverse[p].pattern.flags: + raise GrammarError(u'Conflicting flags for the same terminal: %s' % p) + + token_name = None + + if isinstance(p, PatternStr): + try: + # If already defined, use the user-defined token name + token_name = self.token_reverse[p].name + except KeyError: + # Try to assign an indicative anon-token name + try: + token_name = _TERMINAL_NAMES[value] + except KeyError: + if value.isalnum() and value[0].isalpha() and value.upper() not in self.token_set: + with suppress(UnicodeEncodeError): + value.upper().encode('ascii') # Make sure we don't have unicode in our token names + token_name = value.upper() + + elif isinstance(p, PatternRE): + if p in self.token_reverse: # Kind of a wierd placement.name + token_name = self.token_reverse[p].name + else: + assert False, p + + if token_name is None: + token_name = '__ANON_%d' % self.i + self.i += 1 + + if token_name not in self.token_set: + assert p not in self.token_reverse + self.token_set.add(token_name) + tokendef = TokenDef(token_name, p) + self.token_reverse[p] = tokendef + self.tokens.append(tokendef) + + return Terminal(token_name, filter_out=isinstance(p, PatternStr)) + + +def _rfind(s, choices): + return max(s.rfind(c) for c in choices) + + + +def _fix_escaping(s): + w = '' + i = iter(s) + for n in i: + w += n + if n == '\\': + n2 = next(i) + if n2 == '\\': + w += '\\\\' + elif n2 not in 'unftr': + w += '\\' + w += n2 + w = w.replace('\\"', '"').replace("'", "\\'") + + to_eval = "u'''%s'''" % w + try: + s = literal_eval(to_eval) + except SyntaxError as e: + raise ValueError(s, e) + + return s + + +def _literal_to_pattern(literal): + v = literal.value + flag_start = _rfind(v, '/"')+1 + assert flag_start > 0 + flags = v[flag_start:] + assert all(f in _RE_FLAGS for f in flags), flags + + v = v[:flag_start] + assert v[0] == v[-1] and v[0] in '"/' + x = v[1:-1] + + s = _fix_escaping(x) + + if literal.type == 'STRING': + s = s.replace('\\\\', '\\') + + return { 'STRING': PatternStr, + 'REGEXP': PatternRE }[literal.type](s, flags) + + +@inline_args +class PrepareLiterals(Transformer_InPlace): + def literal(self, literal): + return ST('pattern', [_literal_to_pattern(literal)]) + + def range(self, start, end): + assert start.type == end.type == 'STRING' + start = start.value[1:-1] + end = end.value[1:-1] + assert len(start) == len(end) == 1, (start, end, len(start), len(end)) + regexp = '[%s-%s]' % (start, end) + return ST('pattern', [PatternRE(regexp)]) + + +class TokenTreeToPattern(Transformer): + def pattern(self, ps): + p ,= ps + return p + + def expansion(self, items): + assert items + if len(items) == 1: + return items[0] + if len({i.flags for i in items}) > 1: + raise GrammarError("Lark doesn't support joining tokens with conflicting flags!") + return PatternRE(''.join(i.to_regexp() for i in items), items[0].flags if items else ()) + + def expansions(self, exps): + if len(exps) == 1: + return exps[0] + if len({i.flags for i in exps}) > 1: + raise GrammarError("Lark doesn't support joining tokens with conflicting flags!") + return PatternRE('(?:%s)' % ('|'.join(i.to_regexp() for i in exps)), exps[0].flags) + + def expr(self, args): + inner, op = args[:2] + if op == '~': + if len(args) == 3: + op = "{%d}" % int(args[2]) + else: + mn, mx = map(int, args[2:]) + if mx < mn: + raise GrammarError("Bad Range for %s (%d..%d isn't allowed)" % (inner, mn, mx)) + op = "{%d,%d}" % (mn, mx) + else: + assert len(args) == 2 + return PatternRE('(?:%s)%s' % (inner.to_regexp(), op), inner.flags) + + def alias(self, t): + raise GrammarError("Aliasing not allowed in terminals (You used -> in the wrong place)") + + def value(self, v): + return v[0] + +class PrepareSymbols(Transformer_InPlace): + def value(self, v): + v ,= v + if isinstance(v, Tree): + return v + elif v.type == 'RULE': + return NonTerminal(v.value) + elif v.type == 'TERMINAL': + return Terminal(v.value, filter_out=v.startswith('_')) + assert False + +def _choice_of_rules(rules): + return ST('expansions', [ST('expansion', [Token('RULE', name)]) for name in rules]) + +class Grammar: + def __init__(self, rule_defs, token_defs, ignore): + self.token_defs = token_defs + self.rule_defs = rule_defs + self.ignore = ignore + + def compile(self): + # We change the trees in-place (to support huge grammars) + # So deepcopy allows calling compile more than once. + token_defs = deepcopy(list(self.token_defs)) + rule_defs = deepcopy(self.rule_defs) + + # ================= + # Compile Tokens + # ================= + + # Convert token-trees to strings/regexps + transformer = PrepareLiterals() * TokenTreeToPattern() + for name, (token_tree, priority) in token_defs: + if token_tree is None: # Terminal added through %declare + continue + expansions = list(token_tree.find_data('expansion')) + if len(expansions) == 1 and not expansions[0].children: + raise GrammarError("Terminals cannot be empty (%s)" % name) + + tokens = [TokenDef(name, transformer.transform(token_tree), priority) + for name, (token_tree, priority) in token_defs if token_tree] + + # ================= + # Compile Rules + # ================= + + # 1. Pre-process terminals + transformer = PrepareLiterals() * PrepareSymbols() * PrepareAnonTerminals(tokens) # Adds to tokens + + # 2. Convert EBNF to BNF (and apply step 1) + ebnf_to_bnf = EBNF_to_BNF() + rules = [] + for name, rule_tree, options in rule_defs: + ebnf_to_bnf.rule_options = RuleOptions(keep_all_tokens=True) if options and options.keep_all_tokens else None + tree = transformer.transform(rule_tree) + rules.append((name, ebnf_to_bnf.transform(tree), options)) + rules += ebnf_to_bnf.new_rules + + assert len(rules) == len({name for name, _t, _o in rules}), "Whoops, name collision" + + # 3. Compile tree to Rule objects + rule_tree_to_text = RuleTreeToText() + + simplify_rule = SimplifyRule_Visitor() + compiled_rules = [] + for name, tree, options in rules: + simplify_rule.visit(tree) + expansions = rule_tree_to_text.transform(tree) + + for expansion, alias in expansions: + if alias and name.startswith('_'): + raise GrammarError("Rule %s is marked for expansion (it starts with an underscore) and isn't allowed to have aliases (alias=%s)" % (name, alias)) + + assert all(isinstance(x, Symbol) for x in expansion), expansion + + rule = Rule(NonTerminal(name), expansion, alias, options) + compiled_rules.append(rule) + + return tokens, compiled_rules, self.ignore + + +_imported_grammars = {} +def import_grammar(grammar_path): + if grammar_path not in _imported_grammars: + for package in GRAMMAR_PACKAGES: + text = pkgutil.get_data(package, grammar_path).decode("utf-8") + grammar = load_grammar(text, grammar_path) + _imported_grammars[grammar_path] = grammar + + return _imported_grammars[grammar_path] + + +def resolve_token_references(token_defs): + # TODO Cycles detection + # TODO Solve with transitive closure (maybe) + + token_dict = {k:t for k, (t,_p) in token_defs} + assert len(token_dict) == len(token_defs), "Same name defined twice?" + + while True: + changed = False + for name, (token_tree, _p) in token_defs: + if token_tree is None: # Terminal added through %declare + continue + for exp in token_tree.find_data('value'): + item ,= exp.children + if isinstance(item, Token): + if item.type == 'RULE': + raise GrammarError("Rules aren't allowed inside terminals (%s in %s)" % (item, name)) + if item.type == 'TERMINAL': + exp.children[0] = token_dict[item] + changed = True + if not changed: + break + +def options_from_rule(name, *x): + if len(x) > 1: + priority, expansions = x + priority = int(priority) + else: + expansions ,= x + priority = None + + keep_all_tokens = name.startswith('!') + name = name.lstrip('!') + expand1 = name.startswith('?') + name = name.lstrip('?') + + return name, expansions, RuleOptions(keep_all_tokens, expand1, priority=priority) + + +def symbols_from_strcase(expansion): + return [Terminal(x, filter_out=x.startswith('_')) if is_terminal(x) else NonTerminal(x) for x in expansion] + +@inline_args +class PrepareGrammar(Transformer_InPlace): + def terminal(self, name): + return name + def nonterminal(self, name): + return name + + +class GrammarLoader: + def __init__(self): + tokens = [TokenDef(name, PatternRE(value)) for name, value in TERMINALS.items()] + + rules = [options_from_rule(name, x) for name, x in RULES.items()] + rules = [Rule(NonTerminal(r), symbols_from_strcase(x.split()), None, o) for r, xs, o in rules for x in xs] + callback = ParseTreeBuilder(rules, ST).create_callback() + lexer_conf = LexerConf(tokens, ['WS', 'COMMENT']) + + parser_conf = ParserConf(rules, callback, 'start') + self.parser = LALR_TraditionalLexer(lexer_conf, parser_conf) + + self.canonize_tree = CanonizeTree() + + def load_grammar(self, grammar_text, grammar_name=''): + "Parse grammar_text, verify, and create Grammar object. Display nice messages on error." + + try: + tree = self.canonize_tree.transform( self.parser.parse(grammar_text+'\n') ) + except UnexpectedCharacters as e: + context = e.get_context(grammar_text) + raise GrammarError("Unexpected input at line %d column %d in %s: \n\n%s" % + (e.line, e.column, grammar_name, context)) + except UnexpectedToken as e: + context = e.get_context(grammar_text) + error = e.match_examples(self.parser.parse, { + 'Unclosed parenthesis': ['a: (\n'], + 'Umatched closing parenthesis': ['a: )\n', 'a: [)\n', 'a: (]\n'], + 'Expecting rule or token definition (missing colon)': ['a\n', 'a->\n', 'A->\n', 'a A\n'], + 'Alias expects lowercase name': ['a: -> "a"\n'], + 'Unexpected colon': ['a::\n', 'a: b:\n', 'a: B:\n', 'a: "a":\n'], + 'Misplaced operator': ['a: b??', 'a: b(?)', 'a:+\n', 'a:?\n', 'a:*\n', 'a:|*\n'], + 'Expecting option ("|") or a new rule or token definition': ['a:a\n()\n'], + '%import expects a name': ['%import "a"\n'], + '%ignore expects a value': ['%ignore %import\n'], + }) + if error: + raise GrammarError("%s at line %s column %s\n\n%s" % (error, e.line, e.column, context)) + elif 'STRING' in e.expected: + raise GrammarError("Expecting a value at line %s column %s\n\n%s" % (e.line, e.column, context)) + raise + + tree = PrepareGrammar().transform(tree) + + # Extract grammar items + defs = classify(tree.children, lambda c: c.data, lambda c: c.children) + token_defs = defs.pop('token', []) + rule_defs = defs.pop('rule', []) + statements = defs.pop('statement', []) + assert not defs + + token_defs = [td if len(td)==3 else (td[0], 1, td[1]) for td in token_defs] + token_defs = [(name.value, (t, int(p))) for name, p, t in token_defs] + + # Execute statements + ignore = [] + declared = [] + for (stmt,) in statements: + if stmt.data == 'ignore': + t ,= stmt.children + ignore.append(t) + elif stmt.data == 'import': + if len(stmt.children) > 1: + path_node, arg1 = stmt.children + else: + path_node ,= stmt.children + arg1 = None + + dotted_path = path_node.children + + if isinstance(arg1, Tree): # Multi import + names = arg1.children + aliases = names # Can't have aliased multi import, so all aliases will be the same as names + else: # Single import + names = [dotted_path[-1]] # Get name from dotted path + aliases = [arg1] if arg1 else names # Aliases if exist + dotted_path = dotted_path[:-1] + + grammar_path = os.path.join(*dotted_path) + EXT + + if path_node.data == 'import_lib': # Import from library + g = import_grammar(grammar_path) + else: # Relative import + if grammar_name == '': # Import relative to script file path if grammar is coded in script + base_file = os.path.abspath(sys.modules['__main__'].__file__) + else: + base_file = grammar_name # Import relative to grammar file path if external grammar file + base_path = os.path.split(base_file)[0] + g = import_grammar(grammar_path, base_paths=[base_path]) + + for name, alias in zip(names, aliases): + token_options = dict(g.token_defs)[name] + assert isinstance(token_options, tuple) and len(token_options)==2 + token_defs.append([alias.value, token_options]) + + elif stmt.data == 'declare': + for t in stmt.children: + token_defs.append([t.value, (None, None)]) + else: + assert False, stmt + + + # Verify correctness 1 + for name, _ in token_defs: + if name.startswith('__'): + raise GrammarError('Names starting with double-underscore are reserved (Error at %s)' % name) + + # Handle ignore tokens + # XXX A slightly hacky solution. Recognition of %ignore TERMINAL as separate comes from the lexer's + # inability to handle duplicate tokens (two names, one value) + ignore_names = [] + for t in ignore: + if t.data=='expansions' and len(t.children) == 1: + t2 ,= t.children + if t2.data=='expansion' and len(t2.children) == 1: + item ,= t2.children + if item.data == 'value': + item ,= item.children + if isinstance(item, Token) and item.type == 'TERMINAL': + ignore_names.append(item.value) + continue + + name = '__IGNORE_%d'% len(ignore_names) + ignore_names.append(name) + token_defs.append((name, (t, 0))) + + # Verify correctness 2 + token_names = set() + for name, _ in token_defs: + if name in token_names: + raise GrammarError("Token '%s' defined more than once" % name) + token_names.add(name) + + if set(ignore_names) > token_names: + raise GrammarError("Tokens %s were marked to ignore but were not defined!" % (set(ignore_names) - token_names)) + + # Resolve token references + resolve_token_references(token_defs) + + rules = [options_from_rule(*x) for x in rule_defs] + + rule_names = set() + for name, _x, _o in rules: + if name.startswith('__'): + raise GrammarError('Names starting with double-underscore are reserved (Error at %s)' % name) + if name in rule_names: + raise GrammarError("Rule '%s' defined more than once" % name) + rule_names.add(name) + + for name, expansions, _o in rules: + used_symbols = {t for x in expansions.find_data('expansion') + for t in x.scan_values(lambda t: t.type in ('RULE', 'TERMINAL'))} + for sym in used_symbols: + if is_terminal(sym): + if sym not in token_names: + raise GrammarError("Token '%s' used but not defined (in rule %s)" % (sym, name)) + else: + if sym not in rule_names: + raise GrammarError("Rule '%s' used but not defined (in rule %s)" % (sym, name)) + + # TODO don't include unused tokens, they can only cause trouble! + + return Grammar(rules, token_defs, ignore_names) + + + +load_grammar = GrammarLoader().load_grammar diff --git a/python/extractor/lark/parse_tree_builder.py b/python/extractor/lark/parse_tree_builder.py new file mode 100644 index 00000000000..5db11345bc8 --- /dev/null +++ b/python/extractor/lark/parse_tree_builder.py @@ -0,0 +1,164 @@ +from .exceptions import GrammarError +from .utils import suppress +from .lexer import Token +from .grammar import Rule +from .tree import Tree +from .visitors import InlineTransformer # XXX Deprecated + +###{standalone +from functools import partial, wraps + + +class ExpandSingleChild: + def __init__(self, node_builder): + self.node_builder = node_builder + + def __call__(self, children): + if len(children) == 1: + return children[0] + else: + return self.node_builder(children) + + +class PropagatePositions: + def __init__(self, node_builder): + self.node_builder = node_builder + + def __call__(self, children): + res = self.node_builder(children) + + if children and isinstance(res, Tree): + for a in children: + if isinstance(a, Tree): + res.meta.line = a.meta.line + res.meta.column = a.meta.column + elif isinstance(a, Token): + res.meta.line = a.line + res.meta.column = a.column + break + + for a in reversed(children): + # with suppress(AttributeError): + if isinstance(a, Tree): + res.meta.end_line = a.meta.end_line + res.meta.end_column = a.meta.end_column + elif isinstance(a, Token): + res.meta.end_line = a.end_line + res.meta.end_column = a.end_column + + break + + return res + + +class ChildFilter: + def __init__(self, to_include, node_builder): + self.node_builder = node_builder + self.to_include = to_include + + def __call__(self, children): + filtered = [] + for i, to_expand in self.to_include: + if to_expand: + filtered += children[i].children + else: + filtered.append(children[i]) + + return self.node_builder(filtered) + +class ChildFilterLALR(ChildFilter): + "Optimized childfilter for LALR (assumes no duplication in parse tree, so it's safe to change it)" + + def __call__(self, children): + filtered = [] + for i, to_expand in self.to_include: + if to_expand: + if filtered: + filtered += children[i].children + else: # Optimize for left-recursion + filtered = children[i].children + else: + filtered.append(children[i]) + + return self.node_builder(filtered) + +def _should_expand(sym): + return not sym.is_term and sym.name.startswith('_') + +def maybe_create_child_filter(expansion, keep_all_tokens, ambiguous): + to_include = [(i, _should_expand(sym)) for i, sym in enumerate(expansion) + if keep_all_tokens or not (sym.is_term and sym.filter_out)] + + if len(to_include) < len(expansion) or any(to_expand for i, to_expand in to_include): + return partial(ChildFilter if ambiguous else ChildFilterLALR, to_include) + + +class Callback(object): + pass + + +def inline_args(func): + @wraps(func) + def f(children): + return func(*children) + return f + + + +class ParseTreeBuilder: + def __init__(self, rules, tree_class, propagate_positions=False, keep_all_tokens=False, ambiguous=False): + self.tree_class = tree_class + self.propagate_positions = propagate_positions + self.always_keep_all_tokens = keep_all_tokens + self.ambiguous = ambiguous + + self.rule_builders = list(self._init_builders(rules)) + + self.user_aliases = {} + + def _init_builders(self, rules): + for rule in rules: + options = rule.options + keep_all_tokens = self.always_keep_all_tokens or (options.keep_all_tokens if options else False) + expand_single_child = options.expand1 if options else False + + wrapper_chain = filter(None, [ + (expand_single_child and not rule.alias) and ExpandSingleChild, + maybe_create_child_filter(rule.expansion, keep_all_tokens, self.ambiguous), + self.propagate_positions and PropagatePositions, + ]) + + yield rule, wrapper_chain + + + def create_callback(self, transformer=None): + callback = Callback() + + i = 0 + for rule, wrapper_chain in self.rule_builders: + internal_callback_name = '_cb%d_%s' % (i, rule.origin) + i += 1 + + user_callback_name = rule.alias or rule.origin.name + try: + f = getattr(transformer, user_callback_name) + assert not getattr(f, 'meta', False), "Meta args not supported for internal transformer" + # XXX InlineTransformer is deprecated! + if getattr(f, 'inline', False) or isinstance(transformer, InlineTransformer): + f = inline_args(f) + except AttributeError: + f = partial(self.tree_class, user_callback_name) + + self.user_aliases[rule] = rule.alias + rule.alias = internal_callback_name + + for w in wrapper_chain: + f = w(f) + + if hasattr(callback, internal_callback_name): + raise GrammarError("Rule '%s' already exists" % (rule,)) + setattr(callback, internal_callback_name, f) + + return callback + +###} diff --git a/python/extractor/lark/parser_frontends.py b/python/extractor/lark/parser_frontends.py new file mode 100644 index 00000000000..cb43cb310a2 --- /dev/null +++ b/python/extractor/lark/parser_frontends.py @@ -0,0 +1,189 @@ +import re +from functools import partial + +from .utils import get_regexp_width +from .parsers.grammar_analysis import GrammarAnalyzer +from .lexer import TraditionalLexer, ContextualLexer, Lexer, Token + +from .parsers import lalr_parser, earley, xearley, resolve_ambig, cyk +from .tree import Tree + +class WithLexer: + lexer = None + parser = None + lexer_conf = None + + def init_traditional_lexer(self, lexer_conf): + self.lexer_conf = lexer_conf + self.lexer = TraditionalLexer(lexer_conf.tokens, ignore=lexer_conf.ignore, user_callbacks=lexer_conf.callbacks) + + def init_contextual_lexer(self, lexer_conf): + self.lexer_conf = lexer_conf + states = {idx:list(t.keys()) for idx, t in self.parser._parse_table.states.items()} + always_accept = lexer_conf.postlex.always_accept if lexer_conf.postlex else () + self.lexer = ContextualLexer(lexer_conf.tokens, states, + ignore=lexer_conf.ignore, + always_accept=always_accept, + user_callbacks=lexer_conf.callbacks) + + def lex(self, text): + stream = self.lexer.lex(text) + if self.lexer_conf.postlex: + return self.lexer_conf.postlex.process(stream) + return stream + + def parse(self, text): + token_stream = self.lex(text) + sps = self.lexer.set_parser_state + return self.parser.parse(token_stream, *[sps] if sps is not NotImplemented else []) + +class LALR_TraditionalLexer(WithLexer): + def __init__(self, lexer_conf, parser_conf, options=None): + self.parser = lalr_parser.Parser(parser_conf) + self.init_traditional_lexer(lexer_conf) + +class LALR_ContextualLexer(WithLexer): + def __init__(self, lexer_conf, parser_conf, options=None): + self.parser = lalr_parser.Parser(parser_conf) + self.init_contextual_lexer(lexer_conf) + +class LALR_CustomLexer(WithLexer): + def __init__(self, lexer_cls, lexer_conf, parser_conf, options=None): + self.parser = lalr_parser.Parser(parser_conf) + self.lexer_conf = lexer_conf + self.lexer = lexer_cls(lexer_conf) + + +def get_ambiguity_resolver(options): + if not options or options.ambiguity == 'resolve': + return resolve_ambig.standard_resolve_ambig + elif options.ambiguity == 'resolve__antiscore_sum': + return resolve_ambig.antiscore_sum_resolve_ambig + elif options.ambiguity == 'explicit': + return None + raise ValueError(options) + +def tokenize_text(text): + line = 1 + col_start_pos = 0 + for i, ch in enumerate(text): + if '\n' in ch: + line += ch.count('\n') + col_start_pos = i + ch.rindex('\n') + yield Token('CHAR', ch, line=line, column=i - col_start_pos) + +class Earley(WithLexer): + def __init__(self, lexer_conf, parser_conf, options=None): + self.init_traditional_lexer(lexer_conf) + + self.parser = earley.Parser(parser_conf, self.match, + resolve_ambiguity=get_ambiguity_resolver(options)) + + def match(self, term, token): + return term.name == token.type + + +class XEarley: + def __init__(self, lexer_conf, parser_conf, options=None, **kw): + self.token_by_name = {t.name:t for t in lexer_conf.tokens} + + self._prepare_match(lexer_conf) + + self.parser = xearley.Parser(parser_conf, + self.match, + resolve_ambiguity=get_ambiguity_resolver(options), + ignore=lexer_conf.ignore, + predict_all=options.earley__predict_all, + **kw + ) + + def match(self, term, text, index=0): + return self.regexps[term.name].match(text, index) + + def _prepare_match(self, lexer_conf): + self.regexps = {} + for t in lexer_conf.tokens: + regexp = t.pattern.to_regexp() + try: + width = get_regexp_width(regexp)[0] + except ValueError: + raise ValueError("Bad regexp in token %s: %s" % (t.name, regexp)) + else: + if width == 0: + raise ValueError("Dynamic Earley doesn't allow zero-width regexps", t) + + self.regexps[t.name] = re.compile(regexp) + + def parse(self, text): + return self.parser.parse(text) + +class XEarley_CompleteLex(XEarley): + def __init__(self, *args, **kw): + super(self).__init__(*args, complete_lex=True, **kw) + + + +class CYK(WithLexer): + + def __init__(self, lexer_conf, parser_conf, options=None): + self.init_traditional_lexer(lexer_conf) + + self._analysis = GrammarAnalyzer(parser_conf) + self._parser = cyk.Parser(parser_conf.rules, parser_conf.start) + + self._postprocess = {} + for rule in parser_conf.rules: + a = rule.alias + self._postprocess[a] = a if callable(a) else (a and getattr(parser_conf.callback, a)) + + def parse(self, text): + tokens = list(self.lex(text)) + parse = self._parser.parse(tokens) + parse = self._transform(parse) + return parse + + def _transform(self, tree): + subtrees = list(tree.iter_subtrees()) + for subtree in subtrees: + subtree.children = [self._apply_callback(c) if isinstance(c, Tree) else c for c in subtree.children] + + return self._apply_callback(tree) + + def _apply_callback(self, tree): + children = tree.children + callback = self._postprocess[tree.rule.alias] + assert callback, tree.rule.alias + r = callback(children) + return r + + +def get_frontend(parser, lexer): + if parser=='lalr': + if lexer is None: + raise ValueError('The LALR parser requires use of a lexer') + elif lexer == 'standard': + return LALR_TraditionalLexer + elif lexer == 'contextual': + return LALR_ContextualLexer + elif issubclass(lexer, Lexer): + return partial(LALR_CustomLexer, lexer) + else: + raise ValueError('Unknown lexer: %s' % lexer) + elif parser=='earley': + if lexer=='standard': + return Earley + elif lexer=='dynamic': + return XEarley + elif lexer=='dynamic_complete': + return XEarley_CompleteLex + elif lexer=='contextual': + raise ValueError('The Earley parser does not support the contextual parser') + else: + raise ValueError('Unknown lexer: %s' % lexer) + elif parser == 'cyk': + if lexer == 'standard': + return CYK + else: + raise ValueError('CYK parser requires using standard parser.') + else: + raise ValueError('Unknown parser: %s' % parser) diff --git a/python/extractor/lark/parsers/__init__.py b/python/extractor/lark/parsers/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/lark/parsers/cyk.py b/python/extractor/lark/parsers/cyk.py new file mode 100644 index 00000000000..d65d485b285 --- /dev/null +++ b/python/extractor/lark/parsers/cyk.py @@ -0,0 +1,342 @@ +"""This module implements a CYK parser.""" + +# Author: https://github.com/ehudt (2018) +# +# Adapted by Erez + + +from collections import defaultdict +import itertools + +from ..exceptions import ParseError +from ..lexer import Token +from ..tree import Tree +from ..grammar import Terminal as T, NonTerminal as NT, Symbol + +try: + xrange +except NameError: + xrange = range + +def match(t, s): + assert isinstance(t, T) + return t.name == s.type + + +class Rule(object): + """Context-free grammar rule.""" + + def __init__(self, lhs, rhs, weight, alias): + super(Rule, self).__init__() + assert isinstance(lhs, NT), lhs + assert all(isinstance(x, NT) or isinstance(x, T) for x in rhs), rhs + self.lhs = lhs + self.rhs = rhs + self.weight = weight + self.alias = alias + + def __str__(self): + return '%s -> %s' % (str(self.lhs), ' '.join(str(x) for x in self.rhs)) + + def __repr__(self): + return str(self) + + def __hash__(self): + return hash((self.lhs, tuple(self.rhs))) + + def __eq__(self, other): + return self.lhs == other.lhs and self.rhs == other.rhs + + def __ne__(self, other): + return not (self == other) + + +class Grammar(object): + """Context-free grammar.""" + + def __init__(self, rules): + self.rules = frozenset(rules) + + def __eq__(self, other): + return self.rules == other.rules + + def __str__(self): + return '\n' + '\n'.join(sorted(repr(x) for x in self.rules)) + '\n' + + def __repr__(self): + return str(self) + + +# Parse tree data structures +class RuleNode(object): + """A node in the parse tree, which also contains the full rhs rule.""" + + def __init__(self, rule, children, weight=0): + self.rule = rule + self.children = children + self.weight = weight + + def __repr__(self): + return 'RuleNode(%s, [%s])' % (repr(self.rule.lhs), ', '.join(str(x) for x in self.children)) + + + +class Parser(object): + """Parser wrapper.""" + + def __init__(self, rules, start): + super(Parser, self).__init__() + self.orig_rules = {rule.alias: rule for rule in rules} + rules = [self._to_rule(rule) for rule in rules] + self.grammar = to_cnf(Grammar(rules)) + self.start = NT(start) + + def _to_rule(self, lark_rule): + """Converts a lark rule, (lhs, rhs, callback, options), to a Rule.""" + assert isinstance(lark_rule.origin, NT) + assert all(isinstance(x, Symbol) for x in lark_rule.expansion) + return Rule( + lark_rule.origin, lark_rule.expansion, + weight=lark_rule.options.priority if lark_rule.options and lark_rule.options.priority else 0, + alias=lark_rule.alias) + + def parse(self, tokenized): # pylint: disable=invalid-name + """Parses input, which is a list of tokens.""" + table, trees = _parse(tokenized, self.grammar) + # Check if the parse succeeded. + if all(r.lhs != self.start for r in table[(0, len(tokenized) - 1)]): + raise ParseError('Parsing failed.') + parse = trees[(0, len(tokenized) - 1)][self.start] + return self._to_tree(revert_cnf(parse)) + + def _to_tree(self, rule_node): + """Converts a RuleNode parse tree to a lark Tree.""" + orig_rule = self.orig_rules[rule_node.rule.alias] + children = [] + for child in rule_node.children: + if isinstance(child, RuleNode): + children.append(self._to_tree(child)) + else: + assert isinstance(child.name, Token) + children.append(child.name) + t = Tree(orig_rule.origin, children) + t.rule=orig_rule + return t + + +def print_parse(node, indent=0): + if isinstance(node, RuleNode): + print(' ' * (indent * 2) + str(node.rule.lhs)) + for child in node.children: + print_parse(child, indent + 1) + else: + print(' ' * (indent * 2) + str(node.s)) + + +def _parse(s, g): + """Parses sentence 's' using CNF grammar 'g'.""" + # The CYK table. Indexed with a 2-tuple: (start pos, end pos) + table = defaultdict(set) + # Top-level structure is similar to the CYK table. Each cell is a dict from + # rule name to the best (lightest) tree for that rule. + trees = defaultdict(dict) + # Populate base case with existing terminal production rules + for i, w in enumerate(s): + for terminal, rules in g.terminal_rules.items(): + if match(terminal, w): + for rule in rules: + table[(i, i)].add(rule) + if (rule.lhs not in trees[(i, i)] or + rule.weight < trees[(i, i)][rule.lhs].weight): + trees[(i, i)][rule.lhs] = RuleNode(rule, [T(w)], weight=rule.weight) + + # Iterate over lengths of sub-sentences + for l in xrange(2, len(s) + 1): + # Iterate over sub-sentences with the given length + for i in xrange(len(s) - l + 1): + # Choose partition of the sub-sentence in [1, l) + for p in xrange(i + 1, i + l): + span1 = (i, p - 1) + span2 = (p, i + l - 1) + for r1, r2 in itertools.product(table[span1], table[span2]): + for rule in g.nonterminal_rules.get((r1.lhs, r2.lhs), []): + table[(i, i + l - 1)].add(rule) + r1_tree = trees[span1][r1.lhs] + r2_tree = trees[span2][r2.lhs] + rule_total_weight = rule.weight + r1_tree.weight + r2_tree.weight + if (rule.lhs not in trees[(i, i + l - 1)] + or rule_total_weight < trees[(i, i + l - 1)][rule.lhs].weight): + trees[(i, i + l - 1)][rule.lhs] = RuleNode(rule, [r1_tree, r2_tree], weight=rule_total_weight) + return table, trees + + +# This section implements context-free grammar converter to Chomsky normal form. +# It also implements a conversion of parse trees from its CNF to the original +# grammar. +# Overview: +# Applies the following operations in this order: +# * TERM: Eliminates non-solitary terminals from all rules +# * BIN: Eliminates rules with more than 2 symbols on their right-hand-side. +# * UNIT: Eliminates non-terminal unit rules +# +# The following grammar characteristics aren't featured: +# * Start symbol appears on RHS +# * Empty rules (epsilon rules) + + +class CnfWrapper(object): + """CNF wrapper for grammar. + + Validates that the input grammar is CNF and provides helper data structures. + """ + + def __init__(self, grammar): + super(CnfWrapper, self).__init__() + self.grammar = grammar + self.rules = grammar.rules + self.terminal_rules = defaultdict(list) + self.nonterminal_rules = defaultdict(list) + for r in self.rules: + # Validate that the grammar is CNF and populate auxiliary data structures. + assert isinstance(r.lhs, NT), r + assert len(r.rhs) in [1, 2], r + if len(r.rhs) == 1 and isinstance(r.rhs[0], T): + self.terminal_rules[r.rhs[0]].append(r) + elif len(r.rhs) == 2 and all(isinstance(x, NT) for x in r.rhs): + self.nonterminal_rules[tuple(r.rhs)].append(r) + else: + assert False, r + + def __eq__(self, other): + return self.grammar == other.grammar + + def __repr__(self): + return repr(self.grammar) + + +class UnitSkipRule(Rule): + """A rule that records NTs that were skipped during transformation.""" + + def __init__(self, lhs, rhs, skipped_rules, weight, alias): + super(UnitSkipRule, self).__init__(lhs, rhs, weight, alias) + self.skipped_rules = skipped_rules + + def __eq__(self, other): + return isinstance(other, type(self)) and self.skipped_rules == other.skipped_rules + + __hash__ = Rule.__hash__ + + +def build_unit_skiprule(unit_rule, target_rule): + skipped_rules = [] + if isinstance(unit_rule, UnitSkipRule): + skipped_rules += unit_rule.skipped_rules + skipped_rules.append(target_rule) + if isinstance(target_rule, UnitSkipRule): + skipped_rules += target_rule.skipped_rules + return UnitSkipRule(unit_rule.lhs, target_rule.rhs, skipped_rules, + weight=unit_rule.weight + target_rule.weight, alias=unit_rule.alias) + + +def get_any_nt_unit_rule(g): + """Returns a non-terminal unit rule from 'g', or None if there is none.""" + for rule in g.rules: + if len(rule.rhs) == 1 and isinstance(rule.rhs[0], NT): + return rule + return None + + +def _remove_unit_rule(g, rule): + """Removes 'rule' from 'g' without changing the langugage produced by 'g'.""" + new_rules = [x for x in g.rules if x != rule] + refs = [x for x in g.rules if x.lhs == rule.rhs[0]] + new_rules += [build_unit_skiprule(rule, ref) for ref in refs] + return Grammar(new_rules) + + +def _split(rule): + """Splits a rule whose len(rhs) > 2 into shorter rules.""" + rule_str = str(rule.lhs) + '__' + '_'.join(str(x) for x in rule.rhs) + rule_name = '__SP_%s' % (rule_str) + '_%d' + yield Rule(rule.lhs, [rule.rhs[0], NT(rule_name % 1)], weight=rule.weight, alias=rule.alias) + for i in xrange(1, len(rule.rhs) - 2): + yield Rule(NT(rule_name % i), [rule.rhs[i], NT(rule_name % (i + 1))], weight=0, alias='Split') + yield Rule(NT(rule_name % (len(rule.rhs) - 2)), rule.rhs[-2:], weight=0, alias='Split') + + +def _term(g): + """Applies the TERM rule on 'g' (see top comment).""" + all_t = {x for rule in g.rules for x in rule.rhs if isinstance(x, T)} + t_rules = {t: Rule(NT('__T_%s' % str(t)), [t], weight=0, alias='Term') for t in all_t} + new_rules = [] + for rule in g.rules: + if len(rule.rhs) > 1 and any(isinstance(x, T) for x in rule.rhs): + new_rhs = [t_rules[x].lhs if isinstance(x, T) else x for x in rule.rhs] + new_rules.append(Rule(rule.lhs, new_rhs, weight=rule.weight, alias=rule.alias)) + new_rules.extend(v for k, v in t_rules.items() if k in rule.rhs) + else: + new_rules.append(rule) + return Grammar(new_rules) + + +def _bin(g): + """Applies the BIN rule to 'g' (see top comment).""" + new_rules = [] + for rule in g.rules: + if len(rule.rhs) > 2: + new_rules += _split(rule) + else: + new_rules.append(rule) + return Grammar(new_rules) + + +def _unit(g): + """Applies the UNIT rule to 'g' (see top comment).""" + nt_unit_rule = get_any_nt_unit_rule(g) + while nt_unit_rule: + g = _remove_unit_rule(g, nt_unit_rule) + nt_unit_rule = get_any_nt_unit_rule(g) + return g + + +def to_cnf(g): + """Creates a CNF grammar from a general context-free grammar 'g'.""" + g = _unit(_bin(_term(g))) + return CnfWrapper(g) + + +def unroll_unit_skiprule(lhs, orig_rhs, skipped_rules, children, weight, alias): + if not skipped_rules: + return RuleNode(Rule(lhs, orig_rhs, weight=weight, alias=alias), children, weight=weight) + else: + weight = weight - skipped_rules[0].weight + return RuleNode( + Rule(lhs, [skipped_rules[0].lhs], weight=weight, alias=alias), [ + unroll_unit_skiprule(skipped_rules[0].lhs, orig_rhs, + skipped_rules[1:], children, + skipped_rules[0].weight, skipped_rules[0].alias) + ], weight=weight) + + +def revert_cnf(node): + """Reverts a parse tree (RuleNode) to its original non-CNF form (Node).""" + if isinstance(node, T): + return node + # Reverts TERM rule. + if node.rule.lhs.name.startswith('__T_'): + return node.children[0] + else: + children = [] + for child in map(revert_cnf, node.children): + # Reverts BIN rule. + if isinstance(child, RuleNode) and child.rule.lhs.name.startswith('__SP_'): + children += child.children + else: + children.append(child) + # Reverts UNIT rule. + if isinstance(node.rule, UnitSkipRule): + return unroll_unit_skiprule(node.rule.lhs, node.rule.rhs, + node.rule.skipped_rules, children, + node.rule.weight, node.rule.alias) + else: + return RuleNode(node.rule, children) diff --git a/python/extractor/lark/parsers/earley.py b/python/extractor/lark/parsers/earley.py new file mode 100644 index 00000000000..4ff26b2c793 --- /dev/null +++ b/python/extractor/lark/parsers/earley.py @@ -0,0 +1,239 @@ +"This module implements an Earley Parser" + +# The parser uses a parse-forest to keep track of derivations and ambiguations. +# When the parse ends successfully, a disambiguation stage resolves all ambiguity +# (right now ambiguity resolution is not developed beyond the needs of lark) +# Afterwards the parse tree is reduced (transformed) according to user callbacks. +# I use the no-recursion version of Transformer, because the tree might be +# deeper than Python's recursion limit (a bit absurd, but that's life) +# +# The algorithm keeps track of each state set, using a corresponding Column instance. +# Column keeps track of new items using NewsList instances. +# +# Author: Erez Shinan (2017) +# Email : erezshin@gmail.com + +from ..tree import Tree +from ..visitors import Transformer_InPlace, v_args +from ..exceptions import ParseError, UnexpectedToken +from .grammar_analysis import GrammarAnalyzer +from ..grammar import NonTerminal + + +class Derivation(Tree): + def __init__(self, rule, items=None): + Tree.__init__(self, 'drv', items or []) + self.meta.rule = rule + self._hash = None + + def _pretty_label(self): # Nicer pretty for debugging the parser + return self.rule.origin if self.rule else self.data + + def __hash__(self): + if self._hash is None: + self._hash = Tree.__hash__(self) + return self._hash + +class Item(object): + "An Earley Item, the atom of the algorithm." + + def __init__(self, rule, ptr, start, tree): + self.rule = rule + self.ptr = ptr + self.start = start + self.tree = tree if tree is not None else Derivation(self.rule) + + @property + def expect(self): + return self.rule.expansion[self.ptr] + + @property + def is_complete(self): + return self.ptr == len(self.rule.expansion) + + def advance(self, tree): + assert self.tree.data == 'drv' + new_tree = Derivation(self.rule, self.tree.children + [tree]) + return self.__class__(self.rule, self.ptr+1, self.start, new_tree) + + def __eq__(self, other): + return self.start is other.start and self.ptr == other.ptr and self.rule == other.rule + + def __hash__(self): + return hash((self.rule, self.ptr, id(self.start))) # Always runs Derivation.__hash__ + + def __repr__(self): + before = list(map(str, self.rule.expansion[:self.ptr])) + after = list(map(str, self.rule.expansion[self.ptr:])) + return '<(%d) %s : %s * %s>' % (id(self.start), self.rule.origin, ' '.join(before), ' '.join(after)) + +class NewsList(list): + "Keeps track of newly added items (append-only)" + + def __init__(self, initial=None): + list.__init__(self, initial or []) + self.last_iter = 0 + + def get_news(self): + i = self.last_iter + self.last_iter = len(self) + return self[i:] + + + +class Column: + "An entry in the table, aka Earley Chart. Contains lists of items." + def __init__(self, i, FIRST, predict_all=False): + self.i = i + self.to_reduce = NewsList() + self.to_predict = NewsList() + self.to_scan = [] + self.item_count = 0 + self.FIRST = FIRST + + self.predicted = set() + self.completed = {} + self.predict_all = predict_all + + def add(self, items): + """Sort items into scan/predict/reduce newslists + + Makes sure only unique items are added. + """ + for item in items: + + item_key = item, item.tree # Elsewhere, tree is not part of the comparison + if item.is_complete: + # XXX Potential bug: What happens if there's ambiguity in an empty rule? + if item.rule.expansion and item_key in self.completed: + old_tree = self.completed[item_key].tree + if old_tree == item.tree: + is_empty = not self.FIRST[item.rule.origin] + if not is_empty: + continue + + if old_tree.data != '_ambig': + new_tree = old_tree.copy() + new_tree.meta.rule = old_tree.meta.rule + old_tree.set('_ambig', [new_tree]) + old_tree.meta.rule = None # No longer a 'drv' node + + if item.tree.children[0] is old_tree: # XXX a little hacky! + raise ParseError("Infinite recursion in grammar! (Rule %s)" % item.rule) + + if item.tree not in old_tree.children: + old_tree.children.append(item.tree) + # old_tree.children.append(item.tree) + else: + self.completed[item_key] = item + self.to_reduce.append(item) + else: + if item.expect.is_term: + self.to_scan.append(item) + else: + k = item_key if self.predict_all else item + if k in self.predicted: + continue + self.predicted.add(k) + self.to_predict.append(item) + + self.item_count += 1 # Only count if actually added + + + def __bool__(self): + return bool(self.item_count) + __nonzero__ = __bool__ # Py2 backwards-compatibility + +class Parser: + def __init__(self, parser_conf, term_matcher, resolve_ambiguity=None): + analysis = GrammarAnalyzer(parser_conf) + self.parser_conf = parser_conf + self.resolve_ambiguity = resolve_ambiguity + + self.FIRST = analysis.FIRST + self.postprocess = {} + self.predictions = {} + for rule in parser_conf.rules: + self.postprocess[rule] = rule.alias if callable(rule.alias) else getattr(parser_conf.callback, rule.alias) + self.predictions[rule.origin] = [x.rule for x in analysis.expand_rule(rule.origin)] + + self.term_matcher = term_matcher + + + def parse(self, stream, start_symbol=None): + # Define parser functions + start_symbol = NonTerminal(start_symbol or self.parser_conf.start) + + _Item = Item + match = self.term_matcher + + def predict(nonterm, column): + assert not nonterm.is_term, nonterm + return [_Item(rule, 0, column, None) for rule in self.predictions[nonterm]] + + def complete(item): + name = item.rule.origin + return [i.advance(item.tree) for i in item.start.to_predict if i.expect == name] + + def predict_and_complete(column): + while True: + to_predict = {x.expect for x in column.to_predict.get_news() + if x.ptr} # if not part of an already predicted batch + to_reduce = set(column.to_reduce.get_news()) + if not (to_predict or to_reduce): + break + + for nonterm in to_predict: + column.add( predict(nonterm, column) ) + + for item in to_reduce: + new_items = list(complete(item)) + if item in new_items: + raise ParseError('Infinite recursion detected! (rule %s)' % item.rule) + column.add(new_items) + + def scan(i, token, column): + next_set = Column(i, self.FIRST) + next_set.add(item.advance(token) for item in column.to_scan if match(item.expect, token)) + + if not next_set: + expect = {i.expect.name for i in column.to_scan} + raise UnexpectedToken(token, expect, considered_rules=set(column.to_scan)) + + return next_set + + # Main loop starts + column0 = Column(0, self.FIRST) + column0.add(predict(start_symbol, column0)) + + column = column0 + for i, token in enumerate(stream): + predict_and_complete(column) + column = scan(i, token, column) + + predict_and_complete(column) + + # Parse ended. Now build a parse tree + solutions = [n.tree for n in column.to_reduce + if n.rule.origin==start_symbol and n.start is column0] + + if not solutions: + raise ParseError('Incomplete parse: Could not find a solution to input') + elif len(solutions) == 1: + tree = solutions[0] + else: + tree = Tree('_ambig', solutions) + + if self.resolve_ambiguity: + tree = self.resolve_ambiguity(tree) + + return ApplyCallbacks(self.postprocess).transform(tree) + + +class ApplyCallbacks(Transformer_InPlace): + def __init__(self, postprocess): + self.postprocess = postprocess + + @v_args(meta=True) + def drv(self, children, meta): + return self.postprocess[meta.rule](children) diff --git a/python/extractor/lark/parsers/grammar_analysis.py b/python/extractor/lark/parsers/grammar_analysis.py new file mode 100644 index 00000000000..d27aa9360f8 --- /dev/null +++ b/python/extractor/lark/parsers/grammar_analysis.py @@ -0,0 +1,148 @@ + +from ..utils import bfs, fzset, classify +from ..exceptions import GrammarError +from ..grammar import Rule, Terminal, NonTerminal + + +class RulePtr(object): + __slots__ = ('rule', 'index') + + def __init__(self, rule, index): + assert isinstance(rule, Rule) + assert index <= len(rule.expansion) + self.rule = rule + self.index = index + + def __repr__(self): + before = self.rule.expansion[:self.index] + after = self.rule.expansion[self.index:] + return '<%s : %s * %s>' % (self.rule.origin, ' '.join(before), ' '.join(after)) + + @property + def next(self): + return self.rule.expansion[self.index] + + def advance(self, sym): + assert self.next == sym + return RulePtr(self.rule, self.index+1) + + @property + def is_satisfied(self): + return self.index == len(self.rule.expansion) + + def __eq__(self, other): + return self.rule == other.rule and self.index == other.index + def __hash__(self): + return hash((self.rule, self.index)) + + +def update_set(set1, set2): + if not set2: + return False + + copy = set(set1) + set1 |= set2 + return set1 != copy + +def calculate_sets(rules): + """Calculate FOLLOW sets. + + Adapted from: http://lara.epfl.ch/w/cc09:algorithm_for_first_and_follow_sets""" + symbols = {sym for rule in rules for sym in rule.expansion} | {rule.origin for rule in rules} + + # foreach grammar rule X ::= Y(1) ... Y(k) + # if k=0 or {Y(1),...,Y(k)} subset of NULLABLE then + # NULLABLE = NULLABLE union {X} + # for i = 1 to k + # if i=1 or {Y(1),...,Y(i-1)} subset of NULLABLE then + # FIRST(X) = FIRST(X) union FIRST(Y(i)) + # for j = i+1 to k + # if i=k or {Y(i+1),...Y(k)} subset of NULLABLE then + # FOLLOW(Y(i)) = FOLLOW(Y(i)) union FOLLOW(X) + # if i+1=j or {Y(i+1),...,Y(j-1)} subset of NULLABLE then + # FOLLOW(Y(i)) = FOLLOW(Y(i)) union FIRST(Y(j)) + # until none of NULLABLE,FIRST,FOLLOW changed in last iteration + + NULLABLE = set() + FIRST = {} + FOLLOW = {} + for sym in symbols: + FIRST[sym]={sym} if sym.is_term else set() + FOLLOW[sym]=set() + + # Calculate NULLABLE and FIRST + changed = True + while changed: + changed = False + + for rule in rules: + if set(rule.expansion) <= NULLABLE: + if update_set(NULLABLE, {rule.origin}): + changed = True + + for i, sym in enumerate(rule.expansion): + if set(rule.expansion[:i]) <= NULLABLE: + if update_set(FIRST[rule.origin], FIRST[sym]): + changed = True + + # Calculate FOLLOW + changed = True + while changed: + changed = False + + for rule in rules: + for i, sym in enumerate(rule.expansion): + if i==len(rule.expansion)-1 or set(rule.expansion[i:]) <= NULLABLE: + if update_set(FOLLOW[sym], FOLLOW[rule.origin]): + changed = True + + for j in range(i+1, len(rule.expansion)): + if set(rule.expansion[i+1:j]) <= NULLABLE: + if update_set(FOLLOW[sym], FIRST[rule.expansion[j]]): + changed = True + + return FIRST, FOLLOW, NULLABLE + + +class GrammarAnalyzer(object): + def __init__(self, parser_conf, debug=False): + self.debug = debug + + rules = parser_conf.rules + [Rule(NonTerminal('$root'), [NonTerminal(parser_conf.start), Terminal('$END')])] + self.rules_by_origin = classify(rules, lambda r: r.origin) + + assert len(rules) == len(set(rules)) + for r in rules: + for sym in r.expansion: + if not (sym.is_term or sym in self.rules_by_origin): + raise GrammarError("Using an undefined rule: %s" % sym) # TODO test validation + + self.start_state = self.expand_rule(NonTerminal('$root')) + + self.FIRST, self.FOLLOW, self.NULLABLE = calculate_sets(rules) + + def expand_rule(self, rule): + "Returns all init_ptrs accessible by rule (recursive)" + init_ptrs = set() + def _expand_rule(rule): + assert not rule.is_term, rule + + for r in self.rules_by_origin[rule]: + init_ptr = RulePtr(r, 0) + init_ptrs.add(init_ptr) + + if r.expansion: # if not empty rule + new_r = init_ptr.next + if not new_r.is_term: + yield new_r + + for _ in bfs([rule], _expand_rule): + pass + + return fzset(init_ptrs) + + def _first(self, r): + if r.is_term: + return {r} + else: + return {rp.next for rp in self.expand_rule(r) if rp.next.is_term} diff --git a/python/extractor/lark/parsers/lalr_analysis.py b/python/extractor/lark/parsers/lalr_analysis.py new file mode 100644 index 00000000000..b69fa0f31ee --- /dev/null +++ b/python/extractor/lark/parsers/lalr_analysis.py @@ -0,0 +1,108 @@ +"""This module builds a LALR(1) transition-table for lalr_parser.py + +For now, shift/reduce conflicts are automatically resolved as shifts. +""" + +# Author: Erez Shinan (2017) +# Email : erezshin@gmail.com + +import logging +from collections import defaultdict + +from ..utils import classify, classify_bool, bfs, fzset +from ..exceptions import GrammarError + +from .grammar_analysis import GrammarAnalyzer, Terminal + +class Action: + def __init__(self, name): + self.name = name + def __str__(self): + return self.name + def __repr__(self): + return str(self) + +Shift = Action('Shift') +Reduce = Action('Reduce') + +class ParseTable: + def __init__(self, states, start_state, end_state): + self.states = states + self.start_state = start_state + self.end_state = end_state + +class IntParseTable(ParseTable): + + @classmethod + def from_ParseTable(cls, parse_table): + enum = list(parse_table.states) + state_to_idx = {s:i for i,s in enumerate(enum)} + int_states = {} + + for s, la in parse_table.states.items(): + la = {k:(v[0], state_to_idx[v[1]]) if v[0] is Shift else v + for k,v in la.items()} + int_states[ state_to_idx[s] ] = la + + + start_state = state_to_idx[parse_table.start_state] + end_state = state_to_idx[parse_table.end_state] + return cls(int_states, start_state, end_state) + + + + +class LALR_Analyzer(GrammarAnalyzer): + + def compute_lookahead(self): + self.end_states = [] + + self.states = {} + def step(state): + lookahead = defaultdict(list) + sat, unsat = classify_bool(state, lambda rp: rp.is_satisfied) + for rp in sat: + for term in self.FOLLOW.get(rp.rule.origin, ()): + lookahead[term].append((Reduce, rp.rule)) + + d = classify(unsat, lambda rp: rp.next) + for sym, rps in d.items(): + rps = {rp.advance(sym) for rp in rps} + + for rp in set(rps): + if not rp.is_satisfied and not rp.next.is_term: + rps |= self.expand_rule(rp.next) + + new_state = fzset(rps) + lookahead[sym].append((Shift, new_state)) + if sym == Terminal('$END'): + self.end_states.append( new_state ) + yield new_state + + for k, v in lookahead.items(): + if len(v) > 1: + if self.debug: + logging.warn("Shift/reduce conflict for %s: %s. Resolving as shift.", k, v) + for x in v: + # XXX resolving shift/reduce into shift, like PLY + # Give a proper warning + if x[0] is Shift: + lookahead[k] = [x] + + for k, v in lookahead.items(): + if not len(v) == 1: + raise GrammarError("Collision in %s: %s" %(k, ', '.join(['\n * %s: %s' % x for x in v]))) + + self.states[state] = {k.name:v[0] for k, v in lookahead.items()} + + for _ in bfs([self.start_state], step): + pass + + self.end_state ,= self.end_states + + self._parse_table = ParseTable(self.states, self.start_state, self.end_state) + + if self.debug: + self.parse_table = self._parse_table + else: + self.parse_table = IntParseTable.from_ParseTable(self._parse_table) diff --git a/python/extractor/lark/parsers/lalr_parser.py b/python/extractor/lark/parsers/lalr_parser.py new file mode 100644 index 00000000000..8fa56f51aa0 --- /dev/null +++ b/python/extractor/lark/parsers/lalr_parser.py @@ -0,0 +1,90 @@ +"""This module implements a LALR(1) Parser +""" +# Author: Erez Shinan (2017) +# Email : erezshin@gmail.com +from ..exceptions import UnexpectedToken + +from .lalr_analysis import LALR_Analyzer, Shift + +class Parser: + def __init__(self, parser_conf): + assert all(r.options is None or r.options.priority is None + for r in parser_conf.rules), "LALR doesn't yet support prioritization" + analysis = LALR_Analyzer(parser_conf) + analysis.compute_lookahead() + callbacks = {rule: getattr(parser_conf.callback, rule.alias or rule.origin, None) + for rule in parser_conf.rules} + + self._parse_table = analysis.parse_table + self.parser_conf = parser_conf + self.parser = _Parser(analysis.parse_table, callbacks) + self.parse = self.parser.parse + +###{standalone + +class _Parser: + def __init__(self, parse_table, callbacks): + self.states = parse_table.states + self.start_state = parse_table.start_state + self.end_state = parse_table.end_state + self.callbacks = callbacks + + def parse(self, seq, set_state=None): + i = 0 + token = None + stream = iter(seq) + states = self.states + + state_stack = [self.start_state] + value_stack = [] + + if set_state: set_state(self.start_state) + + def get_action(key): + state = state_stack[-1] + try: + return states[state][key] + except KeyError: + expected = states[state].keys() + raise UnexpectedToken(token, expected, state=state) # TODO filter out rules from expected + + def reduce(rule): + size = len(rule.expansion) + if size: + s = value_stack[-size:] + del state_stack[-size:] + del value_stack[-size:] + else: + s = [] + + value = self.callbacks[rule](s) + + _action, new_state = get_action(rule.origin.name) + assert _action is Shift + state_stack.append(new_state) + value_stack.append(value) + + # Main LALR-parser loop + for i, token in enumerate(stream): + while True: + action, arg = get_action(token.type) + assert arg != self.end_state + + if action is Shift: + state_stack.append(arg) + value_stack.append(token) + if set_state: set_state(arg) + break # next token + else: + reduce(arg) + + while True: + _action, arg = get_action('$END') + if _action is Shift: + assert arg == self.end_state + val ,= value_stack + return val + else: + reduce(arg) + +###} diff --git a/python/extractor/lark/parsers/resolve_ambig.py b/python/extractor/lark/parsers/resolve_ambig.py new file mode 100644 index 00000000000..2470eb9788c --- /dev/null +++ b/python/extractor/lark/parsers/resolve_ambig.py @@ -0,0 +1,109 @@ +from ..utils import compare +from functools import cmp_to_key + +from ..tree import Tree + + +# Standard ambiguity resolver (uses comparison) +# +# Author: Erez Sh + +def _compare_rules(rule1, rule2): + return -compare( len(rule1.expansion), len(rule2.expansion)) + +def _sum_priority(tree): + p = 0 + + for n in tree.iter_subtrees(): + try: + p += n.meta.rule.options.priority or 0 + except AttributeError: + pass + + return p + +def _compare_priority(tree1, tree2): + tree1.iter_subtrees() + +def _compare_drv(tree1, tree2): + try: + rule1 = tree1.meta.rule + except AttributeError: + rule1 = None + + try: + rule2 = tree2.meta.rule + except AttributeError: + rule2 = None + + if None == rule1 == rule2: + return compare(tree1, tree2) + elif rule1 is None: + return -1 + elif rule2 is None: + return 1 + + assert tree1.data != '_ambig' + assert tree2.data != '_ambig' + + p1 = _sum_priority(tree1) + p2 = _sum_priority(tree2) + c = (p1 or p2) and compare(p1, p2) + if c: + return c + + c = _compare_rules(tree1.meta.rule, tree2.meta.rule) + if c: + return c + + # rules are "equal", so compare trees + if len(tree1.children) == len(tree2.children): + for t1, t2 in zip(tree1.children, tree2.children): + c = _compare_drv(t1, t2) + if c: + return c + + return compare(len(tree1.children), len(tree2.children)) + + +def _standard_resolve_ambig(tree): + assert tree.data == '_ambig' + key_f = cmp_to_key(_compare_drv) + best = max(tree.children, key=key_f) + assert best.data == 'drv' + tree.set('drv', best.children) + tree.meta.rule = best.meta.rule # needed for applying callbacks + +def standard_resolve_ambig(tree): + for ambig in tree.find_data('_ambig'): + _standard_resolve_ambig(ambig) + + return tree + + + + +# Anti-score Sum +# +# Author: Uriva (https://github.com/uriva) + +def _antiscore_sum_drv(tree): + if not isinstance(tree, Tree): + return 0 + + assert tree.data != '_ambig' + + return _sum_priority(tree) + +def _antiscore_sum_resolve_ambig(tree): + assert tree.data == '_ambig' + best = min(tree.children, key=_antiscore_sum_drv) + assert best.data == 'drv' + tree.set('drv', best.children) + tree.meta.rule = best.meta.rule # needed for applying callbacks + +def antiscore_sum_resolve_ambig(tree): + for ambig in tree.find_data('_ambig'): + _antiscore_sum_resolve_ambig(ambig) + + return tree diff --git a/python/extractor/lark/parsers/xearley.py b/python/extractor/lark/parsers/xearley.py new file mode 100644 index 00000000000..ff194a3c213 --- /dev/null +++ b/python/extractor/lark/parsers/xearley.py @@ -0,0 +1,156 @@ +"This module implements an experimental Earley Parser with a dynamic lexer" + +# The parser uses a parse-forest to keep track of derivations and ambiguations. +# When the parse ends successfully, a disambiguation stage resolves all ambiguity +# (right now ambiguity resolution is not developed beyond the needs of lark) +# Afterwards the parse tree is reduced (transformed) according to user callbacks. +# I use the no-recursion version of Transformer and Visitor, because the tree might be +# deeper than Python's recursion limit (a bit absurd, but that's life) +# +# The algorithm keeps track of each state set, using a corresponding Column instance. +# Column keeps track of new items using NewsList instances. +# +# Instead of running a lexer beforehand, or using a costy char-by-char method, this parser +# uses regular expressions by necessity, achieving high-performance while maintaining all of +# Earley's power in parsing any CFG. +# +# +# Author: Erez Shinan (2017) +# Email : erezshin@gmail.com + +from collections import defaultdict + +from ..exceptions import ParseError, UnexpectedCharacters +from ..lexer import Token +from ..tree import Tree +from .grammar_analysis import GrammarAnalyzer +from ..grammar import NonTerminal, Terminal + +from .earley import ApplyCallbacks, Item, Column + + +class Parser: + def __init__(self, parser_conf, term_matcher, resolve_ambiguity=None, ignore=(), predict_all=False, complete_lex=False): + self.analysis = GrammarAnalyzer(parser_conf) + self.parser_conf = parser_conf + self.resolve_ambiguity = resolve_ambiguity + self.ignore = [Terminal(t) for t in ignore] + self.predict_all = predict_all + self.complete_lex = complete_lex + + self.FIRST = self.analysis.FIRST + self.postprocess = {} + self.predictions = {} + for rule in parser_conf.rules: + self.postprocess[rule] = getattr(parser_conf.callback, rule.alias) + self.predictions[rule.origin] = [x.rule for x in self.analysis.expand_rule(rule.origin)] + + self.term_matcher = term_matcher + + + def parse(self, stream, start_symbol=None): + # Define parser functions + start_symbol = NonTerminal(start_symbol or self.parser_conf.start) + delayed_matches = defaultdict(list) + match = self.term_matcher + + text_line = 1 + text_column = 1 + + def predict(nonterm, column): + assert not nonterm.is_term, nonterm + return [Item(rule, 0, column, None) for rule in self.predictions[nonterm]] + + def complete(item): + name = item.rule.origin + return [i.advance(item.tree) for i in item.start.to_predict if i.expect == name] + + def predict_and_complete(column): + while True: + to_predict = {x.expect for x in column.to_predict.get_news() + if x.ptr} # if not part of an already predicted batch + to_reduce = column.to_reduce.get_news() + if not (to_predict or to_reduce): + break + + for nonterm in to_predict: + column.add( predict(nonterm, column) ) + for item in to_reduce: + new_items = list(complete(item)) + if item in new_items: + raise ParseError('Infinite recursion detected! (rule %s)' % item.rule) + column.add(new_items) + + def scan(i, column): + to_scan = column.to_scan + + for x in self.ignore: + m = match(x, stream, i) + if m: + delayed_matches[m.end()] += set(to_scan) + delayed_matches[m.end()] += set(column.to_reduce) + + # TODO add partial matches for ignore too? + # s = m.group(0) + # for j in range(1, len(s)): + # m = x.match(s[:-j]) + # if m: + # delayed_matches[m.end()] += to_scan + + for item in to_scan: + m = match(item.expect, stream, i) + if m: + t = Token(item.expect.name, m.group(0), i, text_line, text_column) + delayed_matches[m.end()].append(item.advance(t)) + + if self.complete_lex: + s = m.group(0) + for j in range(1, len(s)): + m = match(item.expect, s[:-j]) + if m: + t = Token(item.expect.name, m.group(0), i, text_line, text_column) + delayed_matches[i+m.end()].append(item.advance(t)) + + next_set = Column(i+1, self.FIRST, predict_all=self.predict_all) + next_set.add(delayed_matches[i+1]) + del delayed_matches[i+1] # No longer needed, so unburden memory + + if not next_set and not delayed_matches: + raise UnexpectedCharacters(stream, i, text_line, text_column, {item.expect for item in to_scan}, set(to_scan)) + + return next_set + + # Main loop starts + column0 = Column(0, self.FIRST, predict_all=self.predict_all) + column0.add(predict(start_symbol, column0)) + + column = column0 + for i, token in enumerate(stream): + predict_and_complete(column) + column = scan(i, column) + + if token == '\n': + text_line += 1 + text_column = 1 + else: + text_column += 1 + + predict_and_complete(column) + + # Parse ended. Now build a parse tree + solutions = [n.tree for n in column.to_reduce + if n.rule.origin==start_symbol and n.start is column0] + + if not solutions: + expected_tokens = [t.expect for t in column.to_scan] + raise ParseError('Unexpected end of input! Expecting a terminal of: %s' % expected_tokens) + + elif len(solutions) == 1: + tree = solutions[0] + else: + tree = Tree('_ambig', solutions) + + if self.resolve_ambiguity: + tree = self.resolve_ambiguity(tree) + + return ApplyCallbacks(self.postprocess).transform(tree) diff --git a/python/extractor/lark/reconstruct.py b/python/extractor/lark/reconstruct.py new file mode 100644 index 00000000000..bf8dbafa36a --- /dev/null +++ b/python/extractor/lark/reconstruct.py @@ -0,0 +1,129 @@ +from collections import defaultdict + +from .tree import Tree +from .visitors import Transformer_InPlace +from .common import ParserConf, PatternStr +from .lexer import Token +from .parsers import earley, resolve_ambig +from .grammar import Rule, Terminal, NonTerminal + + + +def is_discarded_terminal(t): + return t.is_term and t.filter_out + +def is_iter_empty(i): + try: + _ = next(i) + return False + except StopIteration: + return True + +class WriteTokensTransformer(Transformer_InPlace): + def __init__(self, tokens): + self.tokens = tokens + + def __default__(self, data, children, meta): + # if not isinstance(t, MatchTree): + # return t + if not getattr(meta, 'match_tree', False): + return Tree(data, children) + + iter_args = iter(children) + to_write = [] + for sym in meta.orig_expansion: + if is_discarded_terminal(sym): + t = self.tokens[sym.name] + assert isinstance(t.pattern, PatternStr) + to_write.append(t.pattern.value) + else: + x = next(iter_args) + if isinstance(x, list): + to_write += x + else: + if isinstance(x, Token): + assert Terminal(x.type) == sym, x + else: + assert NonTerminal(x.data) == sym, (sym, x) + to_write.append(x) + + assert is_iter_empty(iter_args) + return to_write + + +class MatchTree(Tree): + pass + +class MakeMatchTree: + def __init__(self, name, expansion): + self.name = name + self.expansion = expansion + + def __call__(self, args): + t = MatchTree(self.name, args) + t.meta.match_tree = True + t.meta.orig_expansion = self.expansion + return t + +class Reconstructor: + def __init__(self, parser): + # XXX TODO calling compile twice returns different results! + tokens, rules, _grammar_extra = parser.grammar.compile() + + self.write_tokens = WriteTokensTransformer({t.name:t for t in tokens}) + self.rules = list(self._build_recons_rules(rules)) + + def _build_recons_rules(self, rules): + expand1s = {r.origin for r in rules if r.options and r.options.expand1} + + aliases = defaultdict(list) + for r in rules: + if r.alias: + aliases[r.origin].append( r.alias ) + + rule_names = {r.origin for r in rules} + nonterminals = {sym for sym in rule_names + if sym.name.startswith('_') or sym in expand1s or sym in aliases } + + for r in rules: + recons_exp = [sym if sym in nonterminals else Terminal(sym.name) + for sym in r.expansion if not is_discarded_terminal(sym)] + + # Skip self-recursive constructs + if recons_exp == [r.origin]: + continue + + sym = NonTerminal(r.alias) if r.alias else r.origin + + yield Rule(sym, recons_exp, MakeMatchTree(sym.name, r.expansion)) + + for origin, rule_aliases in aliases.items(): + for alias in rule_aliases: + yield Rule(origin, [Terminal(alias)], MakeMatchTree(origin.name, [NonTerminal(alias)])) + + yield Rule(origin, [Terminal(origin.name)], MakeMatchTree(origin.name, [origin])) + + + + def _match(self, term, token): + if isinstance(token, Tree): + return Terminal(token.data) == term + elif isinstance(token, Token): + return term == Terminal(token.type) + assert False + + def _reconstruct(self, tree): + # TODO: ambiguity? + parser = earley.Parser(ParserConf(self.rules, None, tree.data), self._match, resolve_ambiguity=resolve_ambig.standard_resolve_ambig) + unreduced_tree = parser.parse(tree.children) # find a full derivation + assert unreduced_tree.data == tree.data + res = self.write_tokens.transform(unreduced_tree) + for item in res: + if isinstance(item, Tree): + for x in self._reconstruct(item): + yield x + else: + yield item + + def reconstruct(self, tree): + return ''.join(self._reconstruct(tree)) diff --git a/python/extractor/lark/tools/__init__.py b/python/extractor/lark/tools/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/lark/tools/nearley.py b/python/extractor/lark/tools/nearley.py new file mode 100644 index 00000000000..a7fd2592941 --- /dev/null +++ b/python/extractor/lark/tools/nearley.py @@ -0,0 +1,186 @@ +"Converts between Lark and Nearley grammars. Work in progress!" + +import os.path +import sys +import codecs + + +from lark import Lark, InlineTransformer + +nearley_grammar = r""" + start: (ruledef|directive)+ + + directive: "@" NAME (STRING|NAME) + | "@" JS -> js_code + ruledef: NAME "->" expansions + | NAME REGEXP "->" expansions -> macro + expansions: expansion ("|" expansion)* + + expansion: expr+ js + + ?expr: item [":" /[+*?]/] + + ?item: rule|string|regexp + | "(" expansions ")" + + rule: NAME + string: STRING + regexp: REGEXP + JS: /{%.*?%}/s + js: JS? + + NAME: /[a-zA-Z_$]\w*/ + COMMENT: /#[^\n]*/ + REGEXP: /\[.*?\]/ + STRING: /".*?"/ + + %import common.WS + %ignore WS + %ignore COMMENT + + """ + +nearley_grammar_parser = Lark(nearley_grammar, parser='earley', lexer='standard') + +def _get_rulename(name): + name = {'_': '_ws_maybe', '__':'_ws'}.get(name, name) + return 'n_' + name.replace('$', '__DOLLAR__').lower() + +class NearleyToLark(InlineTransformer): + def __init__(self): + self._count = 0 + self.extra_rules = {} + self.extra_rules_rev = {} + self.alias_js_code = {} + + def _new_function(self, code): + name = 'alias_%d' % self._count + self._count += 1 + + self.alias_js_code[name] = code + return name + + def _extra_rule(self, rule): + if rule in self.extra_rules_rev: + return self.extra_rules_rev[rule] + + name = 'xrule_%d' % len(self.extra_rules) + assert name not in self.extra_rules + self.extra_rules[name] = rule + self.extra_rules_rev[rule] = name + return name + + def rule(self, name): + return _get_rulename(name) + + def ruledef(self, name, exps): + return '!%s: %s' % (_get_rulename(name), exps) + + def expr(self, item, op): + rule = '(%s)%s' % (item, op) + return self._extra_rule(rule) + + def regexp(self, r): + return '/%s/' % r + + def string(self, s): + return self._extra_rule(s) + + def expansion(self, *x): + x, js = x[:-1], x[-1] + if js.children: + js_code ,= js.children + js_code = js_code[2:-2] + alias = '-> ' + self._new_function(js_code) + else: + alias = '' + return ' '.join(x) + alias + + def expansions(self, *x): + return '%s' % ('\n |'.join(x)) + + def start(self, *rules): + return '\n'.join(filter(None, rules)) + +def _nearley_to_lark(g, builtin_path, n2l, js_code, folder_path, includes): + rule_defs = [] + + tree = nearley_grammar_parser.parse(g) + for statement in tree.children: + if statement.data == 'directive': + directive, arg = statement.children + if directive in ('builtin', 'include'): + folder = builtin_path if directive == 'builtin' else folder_path + path = os.path.join(folder, arg[1:-1]) + if path not in includes: + includes.add(path) + with codecs.open(path, encoding='utf8') as f: + text = f.read() + rule_defs += _nearley_to_lark(text, builtin_path, n2l, js_code, os.path.abspath(os.path.dirname(path)), includes) + else: + assert False, directive + elif statement.data == 'js_code': + code ,= statement.children + code = code[2:-2] + js_code.append(code) + elif statement.data == 'macro': + pass # TODO Add support for macros! + elif statement.data == 'ruledef': + rule_defs.append( n2l.transform(statement) ) + else: + raise Exception("Unknown statement: %s" % statement) + + return rule_defs + + +def create_code_for_nearley_grammar(g, start, builtin_path, folder_path): + import js2py + + emit_code = [] + def emit(x=None): + if x: + emit_code.append(x) + emit_code.append('\n') + + js_code = ['function id(x) {return x[0];}'] + n2l = NearleyToLark() + rule_defs = _nearley_to_lark(g, builtin_path, n2l, js_code, folder_path, set()) + lark_g = '\n'.join(rule_defs) + lark_g += '\n'+'\n'.join('!%s: %s' % item for item in n2l.extra_rules.items()) + + emit('from lark import Lark, Transformer') + emit() + emit('grammar = ' + repr(lark_g)) + emit() + + for alias, code in n2l.alias_js_code.items(): + js_code.append('%s = (%s);' % (alias, code)) + + emit(js2py.translate_js('\n'.join(js_code))) + emit('class TransformNearley(Transformer):') + for alias in n2l.alias_js_code: + emit(" %s = var.get('%s').to_python()" % (alias, alias)) + emit(" __default__ = lambda self, n, c, m: c if c else None") + + emit() + emit('parser = Lark(grammar, start="n_%s")' % start) + emit('def parse(text):') + emit(' return TransformNearley().transform(parser.parse(text))') + + return ''.join(emit_code) + +def main(fn, start, nearley_lib): + with codecs.open(fn, encoding='utf8') as f: + grammar = f.read() + return create_code_for_nearley_grammar(grammar, start, os.path.join(nearley_lib, 'builtin'), os.path.abspath(os.path.dirname(fn))) + + +if __name__ == '__main__': + if len(sys.argv) < 4: + print("Reads Nearley grammar (with js functions) outputs an equivalent lark parser.") + print("Usage: %s " % sys.argv[0]) + sys.exit(1) + + fn, start, nearley_lib = sys.argv[1:] + + print(main(fn, start, nearley_lib)) diff --git a/python/extractor/lark/tools/standalone.py b/python/extractor/lark/tools/standalone.py new file mode 100644 index 00000000000..1913a99e480 --- /dev/null +++ b/python/extractor/lark/tools/standalone.py @@ -0,0 +1,7 @@ +# This file used to contain the Lark standalone tool. +# +# We do not use it, and it is licensed under the GPL, which is much +# more restrictive than the rest of Lark. In order to avoid depending +# on it accidentally, we exclude it from our repository and distribution. +# When LARK is upgraded, this file should be kept in preference to the +# original. diff --git a/python/extractor/lark/tree.py b/python/extractor/lark/tree.py new file mode 100644 index 00000000000..98b8db65da5 --- /dev/null +++ b/python/extractor/lark/tree.py @@ -0,0 +1,162 @@ +try: + from future_builtins import filter +except ImportError: + pass + +from copy import deepcopy + +class Meta: + pass + +###{standalone +class Tree(object): + def __init__(self, data, children, meta=None): + self.data = data + self.children = children + self._meta = meta + + @property + def meta(self): + if self._meta is None: + self._meta = Meta() + return self._meta + + def __repr__(self): + return 'Tree(%s, %s)' % (self.data, self.children) + + def _pretty_label(self): + return self.data + + def _pretty(self, level, indent_str): + if len(self.children) == 1 and not isinstance(self.children[0], Tree): + return [ indent_str*level, self._pretty_label(), '\t', '%s' % (self.children[0],), '\n'] + + l = [ indent_str*level, self._pretty_label(), '\n' ] + for n in self.children: + if isinstance(n, Tree): + l += n._pretty(level+1, indent_str) + else: + l += [ indent_str*(level+1), '%s' % (n,), '\n' ] + + return l + + def pretty(self, indent_str=' '): + return ''.join(self._pretty(0, indent_str)) +###} + + def expand_kids_by_index(self, *indices): + "Expand (inline) children at the given indices" + for i in sorted(indices, reverse=True): # reverse so that changing tail won't affect indices + kid = self.children[i] + self.children[i:i+1] = kid.children + + def __eq__(self, other): + try: + return self.data == other.data and self.children == other.children + except AttributeError: + return False + + def __ne__(self, other): + return not (self == other) + + def __hash__(self): + return hash((self.data, tuple(self.children))) + + def find_pred(self, pred): + "Find all nodes where pred(tree) == True" + return filter(pred, self.iter_subtrees()) + + def find_data(self, data): + "Find all nodes where tree.data == data" + return self.find_pred(lambda t: t.data == data) + + def scan_values(self, pred): + for c in self.children: + if isinstance(c, Tree): + for t in c.scan_values(pred): + yield t + else: + if pred(c): + yield c + + def iter_subtrees(self): + # TODO: Re-write as a more efficient version + + visited = set() + q = [self] + + l = [] + while q: + subtree = q.pop() + l.append( subtree ) + if id(subtree) in visited: + continue # already been here from another branch + visited.add(id(subtree)) + q += [c for c in subtree.children if isinstance(c, Tree)] + + seen = set() + for x in reversed(l): + if id(x) not in seen: + yield x + seen.add(id(x)) + + + def __deepcopy__(self, memo): + return type(self)(self.data, deepcopy(self.children, memo)) + + def copy(self): + return type(self)(self.data, self.children) + def set(self, data, children): + self.data = data + self.children = children + + # XXX Deprecated! Here for backwards compatibility <0.6.0 + @property + def line(self): + return self.meta.line + @property + def column(self): + return self.meta.column + @property + def end_line(self): + return self.meta.end_line + @property + def end_column(self): + return self.meta.end_column + + +class SlottedTree(Tree): + __slots__ = 'data', 'children', 'rule', '_meta' + + +def pydot__tree_to_png(tree, filename): + "Creates a colorful image that represents the tree (data+children, without meta)" + + import pydot + graph = pydot.Dot(graph_type='digraph', rankdir="LR") + + i = [0] + + def new_leaf(leaf): + node = pydot.Node(i[0], label=repr(leaf)) + i[0] += 1 + graph.add_node(node) + return node + + def _to_pydot(subtree): + color = hash(subtree.data) & 0xffffff + color |= 0x808080 + + subnodes = [_to_pydot(child) if isinstance(child, Tree) else new_leaf(child) + for child in subtree.children] + node = pydot.Node(i[0], style="filled", fillcolor="#%x"%color, label=subtree.data) + i[0] += 1 + graph.add_node(node) + + for subnode in subnodes: + graph.add_edge(pydot.Edge(node, subnode)) + + return node + + _to_pydot(tree) + graph.write_png(filename) diff --git a/python/extractor/lark/utils.py b/python/extractor/lark/utils.py new file mode 100644 index 00000000000..3c92bcc1438 --- /dev/null +++ b/python/extractor/lark/utils.py @@ -0,0 +1,127 @@ +from collections import deque +import sys + +class fzset(frozenset): + def __repr__(self): + return '{%s}' % ', '.join(map(repr, self)) + + +def classify_bool(seq, pred): + true_elems = [] + false_elems = [] + + for elem in seq: + if pred(elem): + true_elems.append(elem) + else: + false_elems.append(elem) + + return true_elems, false_elems + +def classify(seq, key=None, value=None): + d = {} + for item in seq: + k = key(item) if (key is not None) else item + v = value(item) if (value is not None) else item + if k in d: + d[k].append(v) + else: + d[k] = [v] + return d + +def bfs(initial, expand): + open_q = deque(list(initial)) + visited = set(open_q) + while open_q: + node = open_q.popleft() + yield node + for next_node in expand(node): + if next_node not in visited: + visited.add(next_node) + open_q.append(next_node) + + + + +try: + STRING_TYPE = basestring +except NameError: # Python 3 + STRING_TYPE = str + +###{standalone + +import types +from functools import wraps, partial +from contextlib import contextmanager + +Str = type(u'') + +def smart_decorator(f, create_decorator): + if isinstance(f, types.FunctionType): + return wraps(f)(create_decorator(f, True)) + + elif isinstance(f, (type, types.BuiltinFunctionType)): + return wraps(f)(create_decorator(f, False)) + + elif isinstance(f, types.MethodType): + return wraps(f)(create_decorator(f.__func__, True)) + + elif isinstance(f, partial): + # wraps does not work for partials in 2.7: https://bugs.python.org/issue3445 + return create_decorator(f.__func__, True) + + else: + return create_decorator(f.__func__.__call__, True) + + + + +try: + from contextlib import suppress # Python 3 +except ImportError: + @contextmanager + def suppress(*excs): + '''Catch and dismiss the provided exception + + >>> x = 'hello' + >>> with suppress(IndexError): + ... x = x[10] + >>> x + 'hello' + ''' + try: + yield + except excs: + pass + +###} + + + +try: + compare = cmp +except NameError: + def compare(a, b): + if a == b: + return 0 + elif a > b: + return 1 + return -1 + + +def get_regexp_width(regexp): + # in 3.11 sre_parse was replaced with re._parser + # see implementation in https://github.com/python/cpython/blob/3.11/Lib/sre_parse.py + if sys.version_info >= (3, 11): + import re + try: + return re._parser.parse(regexp).getwidth() + except re.error: + raise ValueError(regexp) + else: + import sre_constants + import sre_parse + try: + return sre_parse.parse(regexp).getwidth() + except sre_constants.error: + raise ValueError(regexp) diff --git a/python/extractor/lark/visitors.py b/python/extractor/lark/visitors.py new file mode 100644 index 00000000000..b7969d51bf2 --- /dev/null +++ b/python/extractor/lark/visitors.py @@ -0,0 +1,250 @@ +from inspect import getmembers, getmro +from functools import wraps + +from .utils import smart_decorator +from .tree import Tree + +class Discard(Exception): + pass + + +# Transformers + +class Transformer: + """Visits the tree recursively, starting with the leaves and finally the root (bottom-up) + + Calls its methods (provided by user via inheritance) according to tree.data + The returned value replaces the old one in the structure. + + Can be used to implement map or reduce. + """ + + def _call_userfunc(self, tree, new_children=None): + # Assumes tree is already transformed + children = new_children if new_children is not None else tree.children + try: + f = getattr(self, tree.data) + except AttributeError: + return self.__default__(tree.data, children, tree.meta) + else: + if getattr(f, 'meta', False): + return f(children, tree.meta) + elif getattr(f, 'inline', False): + return f(*children) + elif getattr(f, 'whole_tree', False): + if new_children is not None: + raise NotImplementedError("Doesn't work with the base Transformer class") + return f(tree) + else: + return f(children) + + def _transform_children(self, children): + for c in children: + try: + yield self._transform_tree(c) if isinstance(c, Tree) else c + except Discard: + pass + + def _transform_tree(self, tree): + children = list(self._transform_children(tree.children)) + return self._call_userfunc(tree, children) + + def transform(self, tree): + return self._transform_tree(tree) + + def __mul__(self, other): + return TransformerChain(self, other) + + def __default__(self, data, children, meta): + "Default operation on tree (for override)" + return Tree(data, children, meta) + + @classmethod + def _apply_decorator(cls, decorator, **kwargs): + mro = getmro(cls) + assert mro[0] is cls + libmembers = {name for _cls in mro[1:] for name, _ in getmembers(_cls)} + for name, value in getmembers(cls): + if name.startswith('_') or name in libmembers: + continue + + setattr(cls, name, decorator(value, **kwargs)) + return cls + + +class InlineTransformer(Transformer): # XXX Deprecated + def _call_userfunc(self, tree, new_children=None): + # Assumes tree is already transformed + children = new_children if new_children is not None else tree.children + try: + f = getattr(self, tree.data) + except AttributeError: + return self.__default__(tree.data, children, tree.meta) + else: + return f(*children) + + +class TransformerChain(object): + def __init__(self, *transformers): + self.transformers = transformers + + def transform(self, tree): + for t in self.transformers: + tree = t.transform(tree) + return tree + + def __mul__(self, other): + return TransformerChain(*self.transformers + (other,)) + + +class Transformer_InPlace(Transformer): + "Non-recursive. Changes the tree in-place instead of returning new instances" + def _transform_tree(self, tree): # Cancel recursion + return self._call_userfunc(tree) + + def transform(self, tree): + for subtree in tree.iter_subtrees(): + subtree.children = list(self._transform_children(subtree.children)) + + return self._transform_tree(tree) + + +class Transformer_InPlaceRecursive(Transformer): + "Recursive. Changes the tree in-place instead of returning new instances" + def _transform_tree(self, tree): + tree.children = list(self._transform_children(tree.children)) + return self._call_userfunc(tree) + + + +# Visitors + +class VisitorBase: + def _call_userfunc(self, tree): + return getattr(self, tree.data, self.__default__)(tree) + + def __default__(self, tree): + "Default operation on tree (for override)" + return tree + + +class Visitor(VisitorBase): + """Bottom-up visitor, non-recursive + + Visits the tree, starting with the leaves and finally the root (bottom-up) + Calls its methods (provided by user via inheritance) according to tree.data + """ + + + def visit(self, tree): + for subtree in tree.iter_subtrees(): + self._call_userfunc(subtree) + return tree + +class Visitor_Recursive(VisitorBase): + """Bottom-up visitor, recursive + + Visits the tree, starting with the leaves and finally the root (bottom-up) + Calls its methods (provided by user via inheritance) according to tree.data + """ + + def visit(self, tree): + for child in tree.children: + if isinstance(child, Tree): + self.visit(child) + + f = getattr(self, tree.data, self.__default__) + f(tree) + return tree + + + +def visit_children_decor(func): + "See Interpreter" + @wraps(func) + def inner(cls, tree): + values = cls.visit_children(tree) + return func(cls, values) + return inner + + +class Interpreter: + """Top-down visitor, recursive + + Visits the tree, starting with the root and finally the leaves (top-down) + Calls its methods (provided by user via inheritance) according to tree.data + + Unlike Transformer and Visitor, the Interpreter doesn't automatically visit its sub-branches. + The user has to explicitly call visit_children, or use the @visit_children_decor + """ + def visit(self, tree): + return getattr(self, tree.data)(tree) + + def visit_children(self, tree): + return [self.visit(child) if isinstance(child, Tree) else child + for child in tree.children] + + def __getattr__(self, name): + return self.__default__ + + def __default__(self, tree): + return self.visit_children(tree) + + + + +# Decorators + +def _apply_decorator(obj, decorator, **kwargs): + try: + _apply = obj._apply_decorator + except AttributeError: + return decorator(obj, **kwargs) + else: + return _apply(decorator, **kwargs) + + + +def _inline_args__func(func): + @wraps(func) + def create_decorator(_f, with_self): + if with_self: + def f(self, children): + return _f(self, *children) + else: + def f(self, children): + return _f(*children) + return f + + return smart_decorator(func, create_decorator) + + +def inline_args(obj): # XXX Deprecated + return _apply_decorator(obj, _inline_args__func) + + + +def _visitor_args_func_dec(func, inline=False, meta=False, whole_tree=False): + assert [whole_tree, meta, inline].count(True) <= 1 + def create_decorator(_f, with_self): + if with_self: + def f(self, *args, **kwargs): + return _f(self, *args, **kwargs) + else: + def f(self, *args, **kwargs): + return _f(*args, **kwargs) + return f + + f = smart_decorator(func, create_decorator) + f.inline = inline + f.meta = meta + f.whole_tree = whole_tree + return f + +def v_args(inline=False, meta=False, tree=False): + "A convenience decorator factory, for modifying the behavior of user-supplied visitor methods" + if [tree, meta, inline].count(True) > 1: + raise ValueError("Visitor functions can either accept tree, or meta, or be inlined. These cannot be combined.") + def _visitor_args_dec(obj): + return _apply_decorator(obj, _visitor_args_func_dec, inline=inline, meta=meta, whole_tree=tree) + return _visitor_args_dec diff --git a/python/extractor/licenses.md b/python/extractor/licenses.md new file mode 100644 index 00000000000..f3a5c6cc458 --- /dev/null +++ b/python/extractor/licenses.md @@ -0,0 +1,14 @@ +| Component | Vendored-in | License | Comments | +| ------------------------------- | ----------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `data/python/stubs/six` | Y | MIT, see `data/python/stubs/six/LICENSE` | Stubs for `six` (the Python 2/3 compatibility library), based on the original library but simplified to aid analysis. | +| `lark` | Y | MIT, see `lark/LICENSE` | Parsing library. Used for extracting `.thrift` files. | +| `tests/tokenizer/shift_jis.py` | Y | PSF | Test file copied (with attribution) from the `cpython` source code. | +| `tsg-python/tree-sitter-python` | Y | MIT | Used in `tsg-python` to parse Python files | +| `tsg-python` | Y | MIT / Apache | This is our own creation, so are free to choose what license it is covered by. | +| `tree-sitter-graph` | N | MIT / Apache | Used in `tsg-python` to execute files written in the `tree-sitter-graph` language. | +| `unparse.py` | Y | PSF | Copied and adapted from `Tools/unparse.py` from the `cpython` source code, with attribution. | +| `imp.py` | Y | PSF | Copied and adapted from `Lib/imp.py` from the `cpython` source code, with attribution. | +| `semmle/data/*.trap` | Y | PSF | These files were derived from the C source code of the `cpython` project, and are used in our modelling of built-in objects. No attribution, currently. | +| `semmle/thrift/parse.py` | Y | Apache | Includes a grammar based on https://github.com/apache/thrift/blob/master/doc/specs/idl.md, with comment stating this attribution. | +| `semmle/python/ast.py` | Y | PSF | Copied and adapted from `Lib/ast.py` from the `cpython` source code. Not explicitly attributed. | +| `blib2to3` | Y | PSF / MIT | A modified version of `blib2to3` from the `psf/black` project (MIT licensed), itself a copy of `lib2to3` from the `cpython` project (PSF licensed), with a thorough attribution for this fact. | diff --git a/python/extractor/make_zips.py b/python/extractor/make_zips.py new file mode 100755 index 00000000000..b91b1bf458d --- /dev/null +++ b/python/extractor/make_zips.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python + +import os +import shutil +import sys +import zipfile +import optparse +import compileall + +from python_tracer import getzipfilename +from unparse import strip_comments_and_docstrings + +# TO DO -- Add options to set destination directory and source directory + + +def find_tools(): + try: + return os.environ['PYTHON_INSTALLER_OUTPUT'] + except KeyError: + pass + try: + return os.environ['ODASA_TOOLS'] + except KeyError: + pass + try: + return os.path.join(os.environ['SEMMLE_DIST'], 'tools') + except KeyError: + pass + try: + return os.path.join(os.environ['ODASA_HOME'], 'tools') + except KeyError: + pass + raise Exception('ODASA_TOOLS environment variable is not set') + +def find_src(): + if __name__ == '__main__': + return os.path.dirname(os.path.abspath(sys.argv[0])) + raise Exception('Cannot find source code') + + +def build_byte_compiled_zip(src_dir, zippath): + # TODO(low): Why are we compiling ourselves, when writepy can also do that? + compileall.compile_dir(os.path.join(src_dir, 'semmle'), force=True, quiet=True) + + zipped = zipfile.PyZipFile(zippath, 'w') + + zipped.writepy(os.path.join(src_dir, '__main__.py')) + zipped.writepy(os.path.join(src_dir, 'semmle')) + zipped.writepy(os.path.join(src_dir, 'blib2to3')) + zipped.writepy(os.path.join(src_dir, 'lark')) + zipped.writepy(os.path.join(src_dir, 'buildtools')) + zipped.write(os.path.join(src_dir, 'blib2to3', 'Grammar.txt'), 'blib2to3/Grammar.txt') + zipped.write(os.path.join(src_dir, 'lark', 'grammars', 'common.lark'), 'lark/grammars/common.lark') + + data_dir = os.path.join(src_dir, 'semmle', 'data') + for f in os.listdir(data_dir): + if f.endswith('.trap'): + zipped.write(os.path.join(data_dir, f), os.path.join('semmle', 'data', f)) + zipped.close() + + +def build_source_zip(src_dir, zippath): + zipped = zipfile.PyZipFile(zippath, 'w') + + zipped.write(os.path.join(src_dir, '__main__.py'), '__main__.py') + zipped.write(os.path.join(src_dir, 'imp.py'), 'imp.py') + write_source(zipped, src_dir, 'semmle') + write_source(zipped, src_dir, 'blib2to3', ('.py', '.txt', '')) + write_source(zipped, src_dir, 'lark', (".py", ".lark", "")) + write_source(zipped, src_dir, 'buildtools') + + data_dir = os.path.join(src_dir, 'semmle', 'data') + for f in os.listdir(data_dir): + if f.endswith('.trap'): + zipped.write(os.path.join(data_dir, f), os.path.join('semmle', 'data', f)) + + zipped.close() + +def write_source(zipped, root, name, extensions=[".py"]): + src = os.path.join(root, name) + for dirpath, _, filenames in os.walk(src): + for name in filenames: + _, ext = os.path.splitext(name) + if ext not in extensions: + continue + path = os.path.join(dirpath, name) + temp = strip_comments_and_docstrings(path) + zipped.write(temp, os.path.relpath(path, root)) + os.remove(temp) + +def main(): + parser = optparse.OptionParser(usage = "usage: %prog [install-dir]") + _, args = parser.parse_args(sys.argv[1:]) + if len(args) > 1: + parser.print_usage() + elif args: + tools_dir = args[0] + if not os.path.exists(tools_dir): + os.makedirs(tools_dir) + else: + tools_dir = find_tools() + src_dir = find_src() + + zippath = os.path.join(src_dir, getzipfilename()) + + if sys.version_info > (3,): + build_source_zip(src_dir, zippath) + else: + build_byte_compiled_zip(src_dir, zippath) + + shutil.copy(zippath, tools_dir) + +if __name__ == '__main__': + main() diff --git a/python/extractor/poetry.lock b/python/extractor/poetry.lock new file mode 100644 index 00000000000..b07e63d2ff4 --- /dev/null +++ b/python/extractor/poetry.lock @@ -0,0 +1,227 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "importlib-metadata" +version = "6.7.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, + {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, +] + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pluggy" +version = "1.2.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pytest" +version = "7.4.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, + {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-mock" +version = "3.11.1" +description = "Thin-wrapper around the mock package for easier use with pytest" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, + {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, +] + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.7" +content-hash = "efa2573fc074b2b5334ac81c2ed14a4b9894aacab841973703a7af180c181870" diff --git a/python/extractor/pyproject.toml b/python/extractor/pyproject.toml new file mode 100644 index 00000000000..a9f7adbbc6f --- /dev/null +++ b/python/extractor/pyproject.toml @@ -0,0 +1,21 @@ +[tool.poetry] +name = "extractor-python" +version = "0.0.1" +description = "" +authors = [] +packages = [ + { include = "buildtools" }, + { include = "semmle" }, +] + +[tool.poetry.dependencies] +python = "^3.7" +pyyaml = "^6.0.1" + +[tool.poetry.group.dev.dependencies] +pytest-mock = "^3.11.1" +pytest = "^7.4.2" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/python/extractor/pytest.ini b/python/extractor/pytest.ini new file mode 100644 index 00000000000..632ca92b9a1 --- /dev/null +++ b/python/extractor/pytest.ini @@ -0,0 +1,6 @@ +[pytest] +addopts = --ignore=cli-integration-test/ +testpaths = tests +filterwarnings = + ; see https://docs.python.org/3/library/warnings.html#the-warnings-filter + error::DeprecationWarning diff --git a/python/extractor/python_imports.py b/python/extractor/python_imports.py new file mode 100755 index 00000000000..ee883c8f1e7 --- /dev/null +++ b/python/extractor/python_imports.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +'''This module sets up sys.path from the environment +and runs the .import file generation.''' + +import python_tracer + +if __name__ == "__main__": + python_tracer.load_library() + import semmle.imports + semmle.imports.main() diff --git a/python/extractor/python_tracer.py b/python/extractor/python_tracer.py new file mode 100755 index 00000000000..17b1af9769b --- /dev/null +++ b/python/extractor/python_tracer.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +#This file needs to be able to handle all versions of Python we are likely to encounter +#Which is probably 2.6 and upwards + +'''This module sets up sys.path from the environment +and runs the populator when called from semmle tools such as buildSnapshot.''' + +import sys +import os + +# The constant is put here instead of make_zips.py, since make_zips.py is not present in +# the distributed extractor-python code +def getzipfilename(): + return 'python3src.zip' + + +def load_library(): + try: + tools = os.environ['ODASA_TOOLS'] + except KeyError: + try: + tools = os.path.join(os.environ['SEMMLE_DIST'], "tools") + except KeyError: + tools = sys.path[0] + try: + zippath = os.path.join(tools, getzipfilename()) + sys.path = [ zippath ] + sys.path + except Exception: + #Failed to find tools. Error is reported below + zippath = tools + try: + import semmle.populator + except ImportError as ex: + print("FATAL ERROR: ") + print(ex) + if tools is not None: + if not os.path.exists(os.path.join(tools, getzipfilename())): + sys.stderr.write("No tracer library found in " + tools + "\n") + else: + sys.stderr.write("Unable to load tracer library at %s:\n" % zippath) + import traceback + traceback.print_exc(file=sys.stderr) + else: + print(sys.path) + sys.stderr.write("Cannot find Semmle tools\n") + sys.exit(2) + +if __name__ == "__main__": + original_path = sys.path + load_library() + import semmle.populator + semmle.populator.main(original_path) diff --git a/python/extractor/qlpack.yml b/python/extractor/qlpack.yml new file mode 100644 index 00000000000..8be72421d45 --- /dev/null +++ b/python/extractor/qlpack.yml @@ -0,0 +1,5 @@ +name: extractor-python +dependencies: + codeql/python-all: "*" + codeql/python-queries: "*" +extractor: python diff --git a/python/extractor/semmle/__init__.py b/python/extractor/semmle/__init__.py new file mode 100644 index 00000000000..4b469ca715f --- /dev/null +++ b/python/extractor/semmle/__init__.py @@ -0,0 +1 @@ +from .util import VERSION as __version__ diff --git a/python/extractor/semmle/cache.py b/python/extractor/semmle/cache.py new file mode 100644 index 00000000000..303793516fa --- /dev/null +++ b/python/extractor/semmle/cache.py @@ -0,0 +1,197 @@ +from semmle.util import makedirs +import os +from collections import deque +from functools import total_ordering + +''' +Least Recently Written Disk-based Cache + +Implements a LRW disk cache for trap files and similar. +This cache relies on the following properties which *must* hold. + +Only one value can ever be associated with a key. +Keys should be ascii strings and cannot start with '$' or include any file or path separator characters. +Values should be byte strings (with any contents). + +The cache is robust against arbitrary levels of concurrency. + +''' + + +MAX_GENERATIONS = 50 +MAX_FILES_PER_GENERATION = 200 + +def encode_keys(keys): + 'Convert a collection of keys to a byte string' + return '\n'.join(keys).encode("ascii") + +def decode_keys(data): + 'Convert a byte string into a set of keys' + return set(data.decode("ascii").split('\n')) + +@total_ordering +class Generation(object): + + def __init__(self, cachedir, age): + self.cachedir = os.path.join(cachedir, str(age)) + self.age = age + if not os.path.exists(self.cachedir): + makedirs(self.cachedir) + try: + with open(os.path.join(self.cachedir, "$keys"), 'rb') as fd: + self.keys = decode_keys(fd.read()) + self.full = True + except Exception: + self.keys = set() + if os.path.isdir(self.cachedir): + #Directory exists, but cannot read "$keys", so this is a non-full generation + self.full = False + else: + self.full = True + + def get(self, key): + if self.full and key not in self.keys: + return None + try: + with open(os.path.join(self.cachedir, key), 'rb') as fd: + return fd.read() + except Exception: + return None + + def set(self, key, value): + '''Returns true if it should be able to store (key, value) even if in fact it can't. + This means that this method will return True if the generation is not full.''' + if self.full: + return False + if os.path.exists(os.path.join(self.cachedir, "$keys")): + self.full = True + try: + with open(os.path.join(self.cachedir, "$keys"), 'rb') as fd: + self.keys = decode_keys(fd.read()) + except Exception: + self.keys = set() + return False + self._try_atomic_write_file(key, value) + if len(self._list_files()) >= MAX_FILES_PER_GENERATION: + self.full = True + self._write_keys() + return True + + def _list_files(self): + try: + return os.listdir(self.cachedir) + except Exception: + #This probably means the directory has been deleted + return [] + + def _write_keys(self): + keys = self._list_files() + self._try_atomic_write_file("$keys", encode_keys(keys)) + self.keys = set(keys) + + def _try_atomic_write_file(self, name, contents): + fullname = os.path.join(self.cachedir, name) + tmpname = os.path.join(self.cachedir, '$%d%s' % (os.getpid(), name)) + try: + with open(tmpname, 'wb') as tmp: + tmp.write(contents) + os.rename(tmpname, fullname) + except Exception: + #Failed for some reason. The folder may have been deleted, or on Windows, the file may already exist. + #Attempt to tidy up + if os.path.exists(tmpname): + try: + os.remove(tmpname) + except Exception: + #Give up :( + pass + + def clear(self): + try: + filenames = os.listdir(self.cachedir) + except Exception: + #Can't do anything + return + for filename in filenames: + try: + os.remove(os.path.join(self.cachedir, filename)) + except Exception: + # Can't delete. Maybe another process has deleted it or it is open (on Windows) + pass + try: + os.rmdir(self.cachedir) + except Exception: + # Can't delete + pass + + def __lt__(self, other): + #Smaller numbers are older + return self.age > other.age + +class Cache(object): + + cache_of_caches = {} + + def __init__(self, cachedir, verbose=False): + self.cachedir = cachedir + self.verbose = verbose + self.generations = [] + if not os.path.exists(cachedir): + makedirs(cachedir) + generations = [] + for gen in os.listdir(self.cachedir): + try: + age = int(gen) + generations.append(Generation(self.cachedir, age)) + except Exception: + #gen might not be an int, or it may have been deleted + pass + if generations: + generations.sort() + else: + generations = [Generation(self.cachedir, 1)] + self.generations = deque(generations) + while len(self.generations) > MAX_GENERATIONS: + self.generations.pop().clear() + + def set(self, key, value): + '''Add this (key, value) pair to the cache. keys should not start with '$' or include file or path separators. + Either adds the (key, value) atomically or does nothing. Partial keys or values are never visible. + ''' + try: + while not self.generations[0].set(key, value): + self.generations.appendleft(Generation(self.cachedir, self.generations[0].age+1)) + if len(self.generations) > MAX_GENERATIONS: + self.generations.pop().clear() + except Exception as ex: + #Its OK to fail but we must never raise + if self.verbose: + try: + print ("Exception setting cache key '%s': %s" % (key, ex)) + except Exception: + # Just in case + pass + + def get(self, key): + if key is None: + return None + try: + for gen in self.generations: + res = gen.get(key) + if res is not None: + return res + except Exception as ex: + if self.verbose: + try: + print ("Exception getting cache key '%s': %s" % (key, ex)) + except Exception: + # Just in case + pass + return None + + @staticmethod + def for_directory(cachedir, verbose): + '''Caches are relatively expensive objects, so we cache them.''' + if (cachedir, verbose) not in Cache.cache_of_caches: + Cache.cache_of_caches[(cachedir, verbose)] = Cache(cachedir, verbose) + return Cache.cache_of_caches[(cachedir, verbose)] diff --git a/python/extractor/semmle/cmdline.py b/python/extractor/semmle/cmdline.py new file mode 100644 index 00000000000..9c2ff4a3274 --- /dev/null +++ b/python/extractor/semmle/cmdline.py @@ -0,0 +1,327 @@ +from optparse import OptionParser, OptionGroup, HelpFormatter +import shlex +import sys +import os +import re + +from semmle import logging +from semmle.util import VERSION + + +def make_parser(): + '''Parse command_line, returning options, arguments''' + parser = OptionParser(add_help_option=False, version='%s' % VERSION) + + import_options = OptionGroup(parser, "Import following options", + description="Note that -a -n -g and -t are included for backwards compatibility. They are ignored") + import_options.add_option("--max-import-depth", dest="max_import_depth", + help="The maximum depth of imports to follow before halting.", + default=None) + import_options.add_option("-p", "--path", dest="path", default=[], action="append", + help="Search path for python modules.") + import_options.get_option("-p").long_help = ( + "This is the path that the extractor uses when searching for imports. This path is searched before sys.path. "+ + "If the search path (sys.path) during program execution includes any paths that are not in 'sys.path' during extraction, " + + "then those paths need to be included using this flag.") + import_options.add_option("-x", "--excludepath", dest="exclude", default=[], action="append", + help="Exclude from search path for importing modules.") + import_options.get_option("-x").long_help = ( + "Excludes this path and all its sub-paths when searching for imports. " + + "Useful for excluding sub folders of paths specified with the '-p' option, or for excluding items in the 'sys.path' list.") + import_options.add_option("-a", "--all-imports", dest="all", + help="Ignored", default=False, action="store_true") + import_options.add_option("-n", "--no-imports", dest="none", + help="Ignored", default=False, action="store_true") + import_options.add_option("-g", "--guess-imports", dest="guess", + help="Ignored", default=False, action="store_true") + import_options.add_option("-t", "--top-imports", dest="top", + help="Ignored", default=False, action="store_true") + parser.add_option_group(import_options) + + module_options = OptionGroup(parser, "Options to determine which modules are to be extracted", + description="When specifying a list of values, individual values should be separated by the OS path separator for paths, and by commas for names.") + module_options.add_option("-m", "--main", dest="main", + help="A list of files which can be run as the main (or application) script.", + default=[], action="append") + module_options.get_option("-m").long_help = ( + "Files included in the database as 'main' modules will have the name '__main__' rather than a name derived from the path. " + + "It is perfectly legal to have several '__main__' modules in the database.") + module_options.add_option("-r", "--recurse-package", dest="recursive", default=[], action="append", + help="DEPRECATED. Analyze all modules in this comma-separated list of packages (recursively).") + module_options.add_option("-y", "--exclude-package", dest="exclude_package", default=[], action="append", + help="IGNORED.") + module_options.add_option("-Y", "--exclude-file", dest="exclude_file", default=[], action="append", + help="Exclude file from recursive search of files. Will not affect recursive search by package.") + module_options.add_option("--filter", dest="path_filter", default=[], action="append", + help="""Filter to apply to files from recursive search of files. Will not affect recursive search by package. + Filters are of the form [include|exclude]:GLOB_PATTERN""") + module_options.add_option("--exclude-pattern", dest="exclude_pattern", + help = """Exclude any modules matching this regular expression.""", + default=None) + module_options.add_option("--respect-init", dest="respect_init", + help="Respect the presence of '__init__.py' files when considering whether a folder is " + "a package. Defaults to True for Python 2 and False for Python 3. " + "Legal values are 'True' or 'False' (case-insensitive).", + default = None) + module_options.add_option("-F", "--files", dest="files", default=[], action="append", + help = """Treat the paths in this list as source files for modules. Compute the module name from given paths.""") + module_options.add_option("-R", "--recurse-files", dest="recurse_files", default=[], action="append", + help = """Treat the paths in this list as paths for packages, then recurse. Compute the package name from given paths.""") + parser.add_option_group(module_options) + + config_options = OptionGroup(parser, "Configuration options") + config_options.add_option("-f","--file", dest="file", default=None, + help="File to read options from") + config_options.add_option("-c", "--trap-cache", dest="trap_cache", + help="Directory in which to cache trap files.", + default=None) + config_options.add_option("-z", "--max-procs", dest="max_procs", default=None, + help="Maximum number of processes, legal options are " + "'all', 'half'(the default) or any positive integer.") + config_options.add_option("-j", "--introspect-c", dest="introspect_c", + help="Option is ignored (retained for backwards compatibility)", + default=False, action="store_true") + config_options.add_option("--ignore-missing-modules", dest="ignore_missing_modules", default=False, action="store_true", + help = """Ignore any module specified on the command line that cannot be found. Defaults to false.""") + config_options.add_option("-u", "--no-symlinks", dest="no_symlinks", + help="Do not follow sym-links when normalizing paths", + default=False, action="store_true") + config_options.add_option("-e", "--renamer", dest="renamer", + help="""Module containing get_renamer() function which returns + a renaming function to be used when normalizing paths.""", + default=None) + config_options.add_option("-o", "--outdir", dest="outdir", + help="Output directory for writing trap files.") + config_options.add_option("--omit-syntax-errors", dest="no_syntax_errors", + help="Do not emit trap files or copy source for those files containing syntax errors", + default=False, action="store_true") + config_options.get_option("-o").long_help = " Only useful when running the extractor independently of Semmle's toolchain." + config_options.add_option("--max-context-cost", dest="context_cost", default=None, + help="""Specify the maximum cost of contexts in the points-to analysis. + WARNING: Setting this option may cause the analysis to consume a lot more time and memory than normal""") + config_options.add_option("--colorize", dest="colorize", default=False, action="store_true", + help = """Colorize the logging output.""") + + config_options.add_option("--dont-extract-stdlib", dest="extract_stdlib", default=True, action="store_false", + help="Do not extract the standard library.") + + parser.add_option_group(config_options) + + debug_options = OptionGroup(parser, "Debug and information options") + debug_options.add_option("-h", "--help", default=False, action="store_true", + help="show this help message and exit. Combine with -v for more details.") + debug_options.add_option("-v", "--verbose", dest="verbose", help="Verbose output", + default=0, action="count") + debug_options.add_option("--verbosity", dest="verbosity", help="Verbosity of output", + default=None) + debug_options.add_option("--quiet", dest="quiet", help="Quiet output, only report errors or worse.", + default=0, action="count") + debug_options.add_option("-q", "--trace-only", dest="trace_only", + help="Trace only, printing modules found. Do not create trap files.", + default=False, action="store_true") + debug_options.add_option("--profile-out", dest="profile_out", default=None, + help="Write profiling information to the given file.") + parser.add_option_group(debug_options) + + lang_options = OptionGroup(parser, "Options for handling sub-languages and extensions") + + # This is a temporary feature until we have full, transparent support for combined 2/3 analysis. + # Slated to be removed before 1.12 so it should not be documented. + lang_options.add_option("-l", "--lang", dest="language_version", default=[], action="append", + help="Override automatic language version detection and use specified versions(s)") + + parser.add_option_group(lang_options) + + advanced_options = OptionGroup(parser, "Advanced options: For running the extractor in unusual environments.") + advanced_options.add_option("--dont-split-graph", dest="split", default=True, action="store_false", + help = """Do not perform splitting on the flow graph, this will result in increased performance, + but at the cost of decreased accuracy in the resulting database. Defaults to false.""") + advanced_options.add_option("--dont-unroll-graph", dest="unroll", action="store_false", + help = """DEPRECATED. Do not use. + Do not perform selective loop unrolling on the flow graph. This will result in increased performance, + but at the cost of decreased accuracy in the resulting database. Defaults to true.""") + advanced_options.add_option("--unroll-graph", dest="unroll", default=False, action="store_true", + help = """Perform selective loop unrolling on the flow graph. This may result in increased accuracy, + but at the cost of decreased performance in the resulting database. Defaults to false.""") + + parser.add_option_group(advanced_options) + return parser + +def strip_trailing_slash(path): + '''Remove trailing slash from path for consistency''' + while path.endswith(os.sep) and path != os.sep: + path = path[:-1] + return path + +def parse(command_line): + parser = make_parser() + options, args = parser.parse_args(command_line) + while options.file: + with open(options.file) as opt_file: + file_opts = shlex.split(opt_file.read()) + extra_options, extra_args = parser.parse_args(file_opts) + options.file = None + #The optparse.Values class does not provide a public method for updating. + #This only works if all the defaults are a false value (which they are) + for attr in dir(options): + if attr in extra_options.__dict__: + dval = extra_options.__dict__[attr] + if dval: + setattr(options, attr, dval) + args.extend(extra_args) + del options.file + if options.help: + if options.verbose: + for opt in parser._get_all_options(): + if hasattr(opt, "long_help"): + if opt.long_help.endswith("."): + opt.help += " " + opt.long_help + else: + opt.help += ". " + opt.long_help + parser.print_help() + if options.verbose: + print(EXTRA_HELP) + sys.exit(0) + if options.respect_init is None: + # In this case we cannot use `util.get_analysis_major_version` because it will only be + # populated _after_ we've parsed the options. + options.respect_init = any(version.startswith('2') for version in options.language_version) + else: + options.respect_init = options.respect_init.lower() == "true" + options.main = split_and_flatten(options.main, os.pathsep) + options.exclude = split_and_flatten(options.exclude, os.pathsep) + options.recursive = split_and_flatten(options.recursive, ",") + options.exclude_package = split_and_flatten(options.exclude_package, ",") + options.files = split_and_flatten(options.files, os.pathsep) + options.recurse_files = split_and_flatten(options.recurse_files, os.pathsep) + options.path = split_and_flatten(options.path, os.pathsep) + options.path = [strip_trailing_slash(item) for item in options.path] + for name in options.recursive: + verify_module_name(name) + for name in options.exclude_package: + verify_module_name(name) + for name in args: + verify_module_name(name) + if options.verbosity is not None: + try: + options.verbosity = int(options.verbosity) + except ValueError: + print (options.verbosity + " is not a valid verbosity level.") + sys.exit(1) + else: + options.verbosity = logging.WARN # default logging level + options.verbosity -= options.quiet + options.verbosity += options.verbose + if options.verbosity > logging.TRACE: + options.verbosity = logging.TRACE + if options.verbosity < logging.OFF: + options.verbosity = logging.OFF + if options.max_import_depth is None: + max_import_depth = float('inf') + else: + max_import_depth = int(options.max_import_depth) + if max_import_depth < 0: + max_import_depth = float('inf') + options.max_import_depth = max_import_depth + + if 'CODEQL_EXTRACTOR_PYTHON_DONT_EXTRACT_STDLIB' in os.environ: + options.extract_stdlib = False + + options.prune = True + return options, args + +def split_and_flatten(options_list, div): + result = [] + for item in options_list: + result.extend(item.split(div)) + return result + +def is_legal_module_name(name): + for identifier in name.split("."): + if not identifier.isidentifier(): + return False + return True + +def verify_module_name(name): + if not is_legal_module_name(name): + sys.exit("'%s' is not a legal module name" % name) + +EXTRA_HELP = ''' +When combining explicitly listed modules, or any options to include modules, with any option to exclude modules, the exclude options act as filters on the included modules. +Therefore if any module is both excluded and included by a command line option, then it will not be included in the database. +Note that exclusion of a module does not necessarily exclude the modules that are imported by that module. + +For example, if module 'a' imports module 'b' and module 'c' also imports module 'b' and the extractor is called with "-y c a", +then 'c' will be excluded but 'b' will be included as it is imported by 'a'. + +Exit codes: + 0. OK, finished normally + 1. Failed to extract one or more files. + 2. Interrupted (by ctrl-C or a signal) + 3. Other error. +''' + +def output_dir_from_options_and_env(options): + trap_dir = options.outdir + if trap_dir is None: + if 'CODEQL_EXTRACTOR_PYTHON_TRAP_DIR' in os.environ: + trap_dir = os.environ['CODEQL_EXTRACTOR_PYTHON_TRAP_DIR'] + elif 'TRAP_FOLDER' in os.environ: + trap_dir = os.environ['TRAP_FOLDER'] + else: + raise IOError( + "Cannot find trap folder. CODEQL_EXTRACTOR_PYTHON_TRAP_DIR is not set.") + if not os.path.exists(trap_dir): + os.makedirs(trap_dir) + return trap_dir + + +class MarkdownFormatter (HelpFormatter): + """Format help with underlined section headers. + """ + + def __init__(self, + indent_increment=0, + max_help_position=40, + width=1000, + short_first=0): + HelpFormatter.__init__ ( + self, indent_increment, max_help_position, width, short_first) + self.needs_table_heading = False + + def format_usage(self, usage): + return "%s %s\n" % (self.format_heading(_("Usage")), usage) + + def format_heading(self, heading): + self.needs_table_heading = True + return '%s %s\n' % ('#' * (self.level +3), heading) + + def format_description(self, description): + return description + "\n" + + def format_option(self, option): + if self.needs_table_heading: + self.needs_table_heading = False + header = "Flags | Description\n------|---------\n" + else: + header = '' + opts = self.option_strings[option] + return header + opts + " | " + option.help.replace("\n", " ") + "\n" + +def _is_help_line(lines, index, pos): + if index + 1 >= len(lines): + return False + if len(lines[index]) <= pos: + return False + if lines[index].startswith("#"): + return False + return True + +def _format_parser_options(): + parser = make_parser() + formatter = MarkdownFormatter() + return parser.format_help(formatter) + + +if __name__ == "__main__": + print(_format_parser_options()) diff --git a/python/extractor/semmle/data/$stdlib_27.trap b/python/extractor/semmle/data/$stdlib_27.trap new file mode 100644 index 00000000000..31ce836558d --- /dev/null +++ b/python/extractor/semmle/data/$stdlib_27.trap @@ -0,0 +1,9861 @@ +#10000 = @"C_builtin_function_or_method$_multiprocessing.address_of_buffer" +#10001 = @"C_type$tuple" +ext_rettype(#10000, #10001) +#10002 = @"C_builtin_function_or_method$_multiprocessing.sendfd" +#10003 = @"C_type$NoneType" +ext_rettype(#10002, #10003) +#10004 = @"C_builtin_function_or_method$_multiprocessing.recvfd" +#10005 = @"C_type$int" +ext_rettype(#10004, #10005) +#10006 = @"C_builtin_function_or_method$_ssl._test_decode_cert" +#10007 = @"C_type$dict" +ext_rettype(#10006, #10007) +#10008 = @"C_builtin_function_or_method$_ssl.RAND_add" +ext_rettype(#10008, #10003) +#10009 = @"C_builtin_function_or_method$_ssl.RAND_egd" +ext_rettype(#10009, #10005) +#10010 = @"C_builtin_function_or_method$_ssl.RAND_status" +ext_rettype(#10010, #10005) +#10011 = @"C_builtin_function_or_method$_ssl.get_default_verify_paths" +ext_rettype(#10011, #10001) +#10012 = @"C_builtin_function_or_method$_ssl.txt2obj" +ext_rettype(#10012, #10001) +#10013 = @"C_builtin_function_or_method$_ssl.nid2obj" +ext_rettype(#10013, #10001) +#10014 = @"C_builtin_function_or_method$_sre.getcodesize" +ext_rettype(#10014, #10005) +#10015 = @"C_builtin_function_or_method$_sre.getlower" +ext_rettype(#10015, #10005) +#10016 = @"C_builtin_function_or_method$linuxaudiodev.open" +#10017 = @"C_type$linuxaudiodev.linux_audio_device" +ext_rettype(#10016, #10017) +#10018 = @"C_builtin_function_or_method$_heapq.heappush" +ext_rettype(#10018, #10003) +#10019 = @"C_builtin_function_or_method$_heapq.heapify" +ext_rettype(#10019, #10003) +#10020 = @"C_builtin_function_or_method$_heapq.nlargest" +#10021 = @"C_type$list" +ext_rettype(#10020, #10021) +#10022 = @"C_builtin_function_or_method$_heapq.nsmallest" +ext_rettype(#10022, #10021) +#10023 = @"C_builtin_function_or_method$nis.match" +#10024 = @"C_type$bytes" +ext_rettype(#10023, #10024) +#10025 = @"C_builtin_function_or_method$nis.cat" +ext_rettype(#10025, #10007) +#10026 = @"C_builtin_function_or_method$nis.maps" +ext_rettype(#10026, #10021) +#10027 = @"C_builtin_function_or_method$nis.get_default_domain" +ext_rettype(#10027, #10024) +#10028 = @"C_builtin_function_or_method$pwd.getpwall" +ext_rettype(#10028, #10021) +#10029 = @"C_builtin_function_or_method$audioop.max" +ext_rettype(#10029, #10005) +#10030 = @"C_builtin_function_or_method$audioop.minmax" +ext_rettype(#10030, #10001) +#10031 = @"C_builtin_function_or_method$audioop.avg" +ext_rettype(#10031, #10005) +#10032 = @"C_builtin_function_or_method$audioop.maxpp" +ext_rettype(#10032, #10005) +#10033 = @"C_builtin_function_or_method$audioop.avgpp" +ext_rettype(#10033, #10005) +#10034 = @"C_builtin_function_or_method$audioop.rms" +ext_rettype(#10034, #10005) +#10035 = @"C_builtin_function_or_method$audioop.findfit" +ext_rettype(#10035, #10001) +#10036 = @"C_builtin_function_or_method$audioop.findmax" +ext_rettype(#10036, #10005) +#10037 = @"C_builtin_function_or_method$audioop.findfactor" +#10038 = @"C_type$float" +ext_rettype(#10037, #10038) +#10039 = @"C_builtin_function_or_method$audioop.cross" +ext_rettype(#10039, #10005) +#10040 = @"C_builtin_function_or_method$audioop.mul" +ext_rettype(#10040, #10024) +#10041 = @"C_builtin_function_or_method$audioop.add" +ext_rettype(#10041, #10024) +#10042 = @"C_builtin_function_or_method$audioop.bias" +ext_rettype(#10042, #10024) +#10043 = @"C_builtin_function_or_method$audioop.ulaw2lin" +ext_rettype(#10043, #10024) +#10044 = @"C_builtin_function_or_method$audioop.lin2ulaw" +ext_rettype(#10044, #10024) +#10045 = @"C_builtin_function_or_method$audioop.alaw2lin" +ext_rettype(#10045, #10024) +#10046 = @"C_builtin_function_or_method$audioop.lin2alaw" +ext_rettype(#10046, #10024) +#10047 = @"C_builtin_function_or_method$audioop.lin2lin" +ext_rettype(#10047, #10024) +#10048 = @"C_builtin_function_or_method$audioop.adpcm2lin" +ext_rettype(#10048, #10001) +#10049 = @"C_builtin_function_or_method$audioop.lin2adpcm" +ext_rettype(#10049, #10001) +#10050 = @"C_builtin_function_or_method$audioop.tomono" +ext_rettype(#10050, #10024) +#10051 = @"C_builtin_function_or_method$audioop.tostereo" +ext_rettype(#10051, #10024) +#10052 = @"C_builtin_function_or_method$audioop.getsample" +ext_rettype(#10052, #10005) +#10053 = @"C_builtin_function_or_method$audioop.reverse" +ext_rettype(#10053, #10024) +#10054 = @"C_builtin_function_or_method$audioop.ratecv" +ext_rettype(#10054, #10001) +#10055 = @"C_builtin_function_or_method$_multibytecodec.__create_codec" +#10056 = @"C_type$MultibyteCodec" +ext_rettype(#10055, #10056) +#10057 = @"C_builtin_function_or_method$operator.isCallable" +#10058 = @"C_type$bool" +ext_rettype(#10057, #10058) +#10059 = @"C_builtin_function_or_method$operator.isNumberType" +ext_rettype(#10059, #10058) +#10060 = @"C_builtin_function_or_method$operator.isSequenceType" +ext_rettype(#10060, #10058) +#10061 = @"C_builtin_function_or_method$operator.truth" +ext_rettype(#10061, #10058) +#10062 = @"C_builtin_function_or_method$operator.contains" +ext_rettype(#10062, #10058) +#10063 = @"C_builtin_function_or_method$operator.__contains__" +ext_rettype(#10063, #10058) +#10064 = @"C_builtin_function_or_method$operator.sequenceIncludes" +ext_rettype(#10064, #10058) +#10065 = @"C_builtin_function_or_method$operator.indexOf" +ext_rettype(#10065, #10005) +#10066 = @"C_builtin_function_or_method$operator.countOf" +ext_rettype(#10066, #10005) +#10067 = @"C_builtin_function_or_method$operator.isMappingType" +ext_rettype(#10067, #10058) +#10068 = @"C_builtin_function_or_method$operator.not_" +ext_rettype(#10068, #10058) +#10069 = @"C_builtin_function_or_method$operator.__not__" +ext_rettype(#10069, #10058) +#10070 = @"C_builtin_function_or_method$operator.setitem" +ext_rettype(#10070, #10003) +#10071 = @"C_builtin_function_or_method$operator.__setitem__" +ext_rettype(#10071, #10003) +#10072 = @"C_builtin_function_or_method$operator.delitem" +ext_rettype(#10072, #10003) +#10073 = @"C_builtin_function_or_method$operator.__delitem__" +ext_rettype(#10073, #10003) +#10074 = @"C_builtin_function_or_method$operator.setslice" +ext_rettype(#10074, #10003) +#10075 = @"C_builtin_function_or_method$operator.__setslice__" +ext_rettype(#10075, #10003) +#10076 = @"C_builtin_function_or_method$operator.delslice" +ext_rettype(#10076, #10003) +#10077 = @"C_builtin_function_or_method$operator.__delslice__" +ext_rettype(#10077, #10003) +#10078 = @"C_builtin_function_or_method$operator._compare_digest" +ext_rettype(#10078, #10058) +#10079 = @"C_builtin_function_or_method$parser.ast2tuple" +ext_rettype(#10079, #10003) +#10080 = @"C_builtin_function_or_method$parser.ast2list" +ext_rettype(#10080, #10003) +#10081 = @"C_builtin_function_or_method$parser.compileast" +#10082 = @"C_type$code" +ext_rettype(#10081, #10082) +#10083 = @"C_builtin_function_or_method$parser.compilest" +ext_rettype(#10083, #10082) +#10084 = @"C_builtin_function_or_method$parser.expr" +#10085 = @"C_type$parser.st" +ext_rettype(#10084, #10085) +#10086 = @"C_builtin_function_or_method$parser.suite" +ext_rettype(#10086, #10085) +#10087 = @"C_builtin_function_or_method$parser.sequence2ast" +ext_rettype(#10087, #10085) +#10088 = @"C_builtin_function_or_method$parser.sequence2st" +ext_rettype(#10088, #10085) +#10089 = @"C_builtin_function_or_method$parser.st2tuple" +ext_rettype(#10089, #10003) +#10090 = @"C_builtin_function_or_method$parser.st2list" +ext_rettype(#10090, #10003) +#10091 = @"C_builtin_function_or_method$parser.tuple2ast" +ext_rettype(#10091, #10085) +#10092 = @"C_builtin_function_or_method$parser.tuple2st" +ext_rettype(#10092, #10085) +#10093 = @"C_builtin_function_or_method$parser._pickler" +ext_rettype(#10093, #10001) +#10094 = @"C_builtin_function_or_method$_socket.gethostbyname" +ext_rettype(#10094, #10024) +#10095 = @"C_builtin_function_or_method$_socket.gethostbyname_ex" +ext_rettype(#10095, #10001) +#10096 = @"C_builtin_function_or_method$_socket.gethostbyaddr" +ext_rettype(#10096, #10001) +#10097 = @"C_builtin_function_or_method$_socket.gethostname" +ext_rettype(#10097, #10024) +#10098 = @"C_builtin_function_or_method$_socket.getservbyname" +ext_rettype(#10098, #10005) +#10099 = @"C_builtin_function_or_method$_socket.getservbyport" +ext_rettype(#10099, #10024) +#10100 = @"C_builtin_function_or_method$_socket.getprotobyname" +ext_rettype(#10100, #10005) +#10101 = @"C_builtin_function_or_method$_socket.fromfd" +#10102 = @"C_type$_socket.socket" +ext_rettype(#10101, #10102) +#10103 = @"C_builtin_function_or_method$_socket.socketpair" +ext_rettype(#10103, #10001) +#10104 = @"C_builtin_function_or_method$_socket.ntohs" +ext_rettype(#10104, #10005) +#10105 = @"C_builtin_function_or_method$_socket.ntohl" +ext_rettype(#10105, #10005) +#10106 = @"C_builtin_function_or_method$_socket.htons" +ext_rettype(#10106, #10005) +#10107 = @"C_builtin_function_or_method$_socket.htonl" +ext_rettype(#10107, #10005) +#10108 = @"C_builtin_function_or_method$_socket.inet_aton" +ext_rettype(#10108, #10024) +#10109 = @"C_builtin_function_or_method$_socket.inet_ntoa" +ext_rettype(#10109, #10024) +#10110 = @"C_builtin_function_or_method$_socket.inet_pton" +ext_rettype(#10110, #10024) +#10111 = @"C_builtin_function_or_method$_socket.inet_ntop" +ext_rettype(#10111, #10024) +#10112 = @"C_builtin_function_or_method$_socket.getaddrinfo" +ext_rettype(#10112, #10021) +#10113 = @"C_builtin_function_or_method$_socket.getnameinfo" +ext_rettype(#10113, #10001) +#10114 = @"C_builtin_function_or_method$_socket.getdefaulttimeout" +ext_rettype(#10114, #10038) +ext_rettype(#10114, #10003) +#10115 = @"C_builtin_function_or_method$_socket.setdefaulttimeout" +ext_rettype(#10115, #10003) +#10116 = @"C_builtin_function_or_method$itertools.tee" +ext_rettype(#10116, #10001) +#10117 = @"C_builtin_function_or_method$math.acos" +ext_rettype(#10117, #10038) +#10118 = @"C_builtin_function_or_method$math.acosh" +ext_rettype(#10118, #10038) +#10119 = @"C_builtin_function_or_method$math.asin" +ext_rettype(#10119, #10038) +#10120 = @"C_builtin_function_or_method$math.asinh" +ext_rettype(#10120, #10038) +#10121 = @"C_builtin_function_or_method$math.atan" +ext_rettype(#10121, #10038) +#10122 = @"C_builtin_function_or_method$math.atan2" +ext_rettype(#10122, #10038) +#10123 = @"C_builtin_function_or_method$math.atanh" +ext_rettype(#10123, #10038) +#10124 = @"C_builtin_function_or_method$math.ceil" +ext_rettype(#10124, #10038) +#10125 = @"C_builtin_function_or_method$math.copysign" +ext_rettype(#10125, #10038) +#10126 = @"C_builtin_function_or_method$math.cos" +ext_rettype(#10126, #10038) +#10127 = @"C_builtin_function_or_method$math.cosh" +ext_rettype(#10127, #10038) +#10128 = @"C_builtin_function_or_method$math.degrees" +ext_rettype(#10128, #10038) +#10129 = @"C_builtin_function_or_method$math.erf" +ext_rettype(#10129, #10038) +#10130 = @"C_builtin_function_or_method$math.erfc" +ext_rettype(#10130, #10038) +#10131 = @"C_builtin_function_or_method$math.exp" +ext_rettype(#10131, #10038) +#10132 = @"C_builtin_function_or_method$math.expm1" +ext_rettype(#10132, #10038) +#10133 = @"C_builtin_function_or_method$math.fabs" +ext_rettype(#10133, #10038) +#10134 = @"C_builtin_function_or_method$math.factorial" +ext_rettype(#10134, #10005) +#10135 = @"C_builtin_function_or_method$math.floor" +ext_rettype(#10135, #10038) +#10136 = @"C_builtin_function_or_method$math.fmod" +ext_rettype(#10136, #10038) +#10137 = @"C_builtin_function_or_method$math.frexp" +ext_rettype(#10137, #10001) +#10138 = @"C_builtin_function_or_method$math.fsum" +ext_rettype(#10138, #10038) +#10139 = @"C_builtin_function_or_method$math.gamma" +ext_rettype(#10139, #10038) +#10140 = @"C_builtin_function_or_method$math.hypot" +ext_rettype(#10140, #10038) +#10141 = @"C_builtin_function_or_method$math.isinf" +ext_rettype(#10141, #10058) +#10142 = @"C_builtin_function_or_method$math.isnan" +ext_rettype(#10142, #10058) +#10143 = @"C_builtin_function_or_method$math.ldexp" +ext_rettype(#10143, #10038) +#10144 = @"C_builtin_function_or_method$math.lgamma" +ext_rettype(#10144, #10038) +#10145 = @"C_builtin_function_or_method$math.log" +ext_rettype(#10145, #10038) +#10146 = @"C_builtin_function_or_method$math.log1p" +ext_rettype(#10146, #10038) +#10147 = @"C_builtin_function_or_method$math.log10" +ext_rettype(#10147, #10038) +#10148 = @"C_builtin_function_or_method$math.modf" +ext_rettype(#10148, #10001) +#10149 = @"C_builtin_function_or_method$math.pow" +ext_rettype(#10149, #10038) +#10150 = @"C_builtin_function_or_method$math.radians" +ext_rettype(#10150, #10038) +#10151 = @"C_builtin_function_or_method$math.sin" +ext_rettype(#10151, #10038) +#10152 = @"C_builtin_function_or_method$math.sinh" +ext_rettype(#10152, #10038) +#10153 = @"C_builtin_function_or_method$math.sqrt" +ext_rettype(#10153, #10038) +#10154 = @"C_builtin_function_or_method$math.tan" +ext_rettype(#10154, #10038) +#10155 = @"C_builtin_function_or_method$math.tanh" +ext_rettype(#10155, #10038) +#10156 = @"C_builtin_function_or_method$signal.alarm" +ext_rettype(#10156, #10005) +#10157 = @"C_builtin_function_or_method$signal.setitimer" +ext_rettype(#10157, #10001) +#10158 = @"C_builtin_function_or_method$signal.getitimer" +ext_rettype(#10158, #10001) +#10159 = @"C_builtin_function_or_method$signal.signal" +ext_rettype(#10159, #10003) +#10160 = @"C_builtin_function_or_method$signal.getsignal" +ext_rettype(#10160, #10003) +#10161 = @"C_builtin_function_or_method$signal.set_wakeup_fd" +ext_rettype(#10161, #10005) +#10162 = @"C_builtin_function_or_method$signal.siginterrupt" +ext_rettype(#10162, #10003) +#10163 = @"C_builtin_function_or_method$signal.pause" +ext_rettype(#10163, #10003) +#10164 = @"C_builtin_function_or_method$_csv.reader" +#10165 = @"C_type$_csv.reader" +ext_rettype(#10164, #10165) +#10166 = @"C_builtin_function_or_method$_csv.writer" +#10167 = @"C_type$_csv.writer" +ext_rettype(#10166, #10167) +#10168 = @"C_builtin_function_or_method$_csv.list_dialects" +ext_rettype(#10168, #10021) +#10169 = @"C_builtin_function_or_method$_csv.register_dialect" +ext_rettype(#10169, #10003) +#10170 = @"C_builtin_function_or_method$_csv.unregister_dialect" +ext_rettype(#10170, #10003) +#10171 = @"C_builtin_function_or_method$_csv.field_size_limit" +ext_rettype(#10171, #10005) +#10172 = @"C_builtin_function_or_method$gc.enable" +ext_rettype(#10172, #10003) +#10173 = @"C_builtin_function_or_method$gc.disable" +ext_rettype(#10173, #10003) +#10174 = @"C_builtin_function_or_method$gc.isenabled" +ext_rettype(#10174, #10058) +#10175 = @"C_builtin_function_or_method$gc.set_debug" +ext_rettype(#10175, #10003) +#10176 = @"C_builtin_function_or_method$gc.get_debug" +ext_rettype(#10176, #10005) +#10177 = @"C_builtin_function_or_method$gc.get_count" +ext_rettype(#10177, #10001) +#10178 = @"C_builtin_function_or_method$gc.set_threshold" +ext_rettype(#10178, #10003) +#10179 = @"C_builtin_function_or_method$gc.get_threshold" +ext_rettype(#10179, #10001) +#10180 = @"C_builtin_function_or_method$gc.collect" +ext_rettype(#10180, #10005) +#10181 = @"C_builtin_function_or_method$gc.get_objects" +ext_rettype(#10181, #10021) +#10182 = @"C_builtin_function_or_method$gc.is_tracked" +ext_rettype(#10182, #10058) +#10183 = @"C_builtin_function_or_method$gc.get_referrers" +ext_rettype(#10183, #10021) +#10184 = @"C_builtin_function_or_method$gc.get_referents" +ext_rettype(#10184, #10021) +#10185 = @"C_builtin_function_or_method$termios.tcgetattr" +ext_rettype(#10185, #10021) +#10186 = @"C_builtin_function_or_method$termios.tcsetattr" +ext_rettype(#10186, #10003) +#10187 = @"C_builtin_function_or_method$termios.tcsendbreak" +ext_rettype(#10187, #10003) +#10188 = @"C_builtin_function_or_method$termios.tcdrain" +ext_rettype(#10188, #10003) +#10189 = @"C_builtin_function_or_method$termios.tcflush" +ext_rettype(#10189, #10003) +#10190 = @"C_builtin_function_or_method$termios.tcflow" +ext_rettype(#10190, #10003) +#10191 = @"C_builtin_function_or_method$grp.getgrall" +ext_rettype(#10191, #10021) +#10192 = @"C_builtin_function_or_method$time.time" +ext_rettype(#10192, #10038) +#10193 = @"C_builtin_function_or_method$time.clock" +ext_rettype(#10193, #10038) +#10194 = @"C_builtin_function_or_method$time.sleep" +ext_rettype(#10194, #10003) +#10195 = @"C_builtin_function_or_method$time.asctime" +ext_rettype(#10195, #10024) +#10196 = @"C_builtin_function_or_method$time.ctime" +ext_rettype(#10196, #10024) +#10197 = @"C_builtin_function_or_method$time.mktime" +ext_rettype(#10197, #10038) +#10198 = @"C_builtin_function_or_method$time.strftime" +ext_rettype(#10198, #10024) +#10199 = @"C_builtin_function_or_method$time.tzset" +ext_rettype(#10199, #10003) +#10200 = @"C_builtin_function_or_method$_hotshot.coverage" +#10201 = @"C_type$_hotshot.ProfilerType" +ext_rettype(#10200, #10201) +#10202 = @"C_builtin_function_or_method$_hotshot.profiler" +ext_rettype(#10202, #10201) +#10203 = @"C_builtin_function_or_method$_hotshot.logreader" +#10204 = @"C_type$_hotshot.LogReaderType" +ext_rettype(#10203, #10204) +#10205 = @"C_builtin_function_or_method$_hotshot.resolution" +ext_rettype(#10205, #10001) +#10206 = @"C_builtin_function_or_method$posix.access" +ext_rettype(#10206, #10058) +#10207 = @"C_builtin_function_or_method$posix.ttyname" +ext_rettype(#10207, #10024) +#10208 = @"C_builtin_function_or_method$posix.chdir" +ext_rettype(#10208, #10003) +#10209 = @"C_builtin_function_or_method$posix.chmod" +ext_rettype(#10209, #10003) +#10210 = @"C_builtin_function_or_method$posix.fchmod" +ext_rettype(#10210, #10003) +#10211 = @"C_builtin_function_or_method$posix.chown" +ext_rettype(#10211, #10003) +#10212 = @"C_builtin_function_or_method$posix.fchown" +ext_rettype(#10212, #10003) +#10213 = @"C_builtin_function_or_method$posix.lchown" +ext_rettype(#10213, #10003) +#10214 = @"C_builtin_function_or_method$posix.chroot" +ext_rettype(#10214, #10003) +#10215 = @"C_builtin_function_or_method$posix.ctermid" +ext_rettype(#10215, #10024) +#10216 = @"C_builtin_function_or_method$posix.getcwd" +ext_rettype(#10216, #10024) +#10217 = @"C_builtin_function_or_method$posix.getcwdu" +#10218 = @"C_type$unicode" +ext_rettype(#10217, #10218) +#10219 = @"C_builtin_function_or_method$posix.link" +ext_rettype(#10219, #10003) +#10220 = @"C_builtin_function_or_method$posix.listdir" +ext_rettype(#10220, #10021) +#10221 = @"C_builtin_function_or_method$posix.mkdir" +ext_rettype(#10221, #10003) +#10222 = @"C_builtin_function_or_method$posix.nice" +ext_rettype(#10222, #10005) +#10223 = @"C_builtin_function_or_method$posix.readlink" +ext_rettype(#10223, #10024) +ext_rettype(#10223, #10218) +#10224 = @"C_builtin_function_or_method$posix.rename" +ext_rettype(#10224, #10003) +#10225 = @"C_builtin_function_or_method$posix.rmdir" +ext_rettype(#10225, #10003) +#10226 = @"C_builtin_function_or_method$posix.stat_float_times" +ext_rettype(#10226, #10058) +ext_rettype(#10226, #10003) +#10227 = @"C_builtin_function_or_method$posix.symlink" +ext_rettype(#10227, #10003) +#10228 = @"C_builtin_function_or_method$posix.system" +ext_rettype(#10228, #10005) +#10229 = @"C_builtin_function_or_method$posix.umask" +ext_rettype(#10229, #10005) +#10230 = @"C_builtin_function_or_method$posix.uname" +ext_rettype(#10230, #10001) +#10231 = @"C_builtin_function_or_method$posix.unlink" +ext_rettype(#10231, #10003) +#10232 = @"C_builtin_function_or_method$posix.remove" +ext_rettype(#10232, #10003) +#10233 = @"C_builtin_function_or_method$posix.utime" +ext_rettype(#10233, #10003) +#10234 = @"C_builtin_function_or_method$posix.times" +ext_rettype(#10234, #10001) +#10235 = @"C_builtin_function_or_method$posix.fork" +ext_rettype(#10235, #10005) +#10236 = @"C_builtin_function_or_method$posix.openpty" +ext_rettype(#10236, #10001) +#10237 = @"C_builtin_function_or_method$posix.forkpty" +ext_rettype(#10237, #10001) +#10238 = @"C_builtin_function_or_method$posix.getegid" +ext_rettype(#10238, #10005) +#10239 = @"C_builtin_function_or_method$posix.geteuid" +ext_rettype(#10239, #10005) +#10240 = @"C_builtin_function_or_method$posix.getgid" +ext_rettype(#10240, #10005) +#10241 = @"C_builtin_function_or_method$posix.getgroups" +ext_rettype(#10241, #10021) +#10242 = @"C_builtin_function_or_method$posix.getpid" +ext_rettype(#10242, #10005) +#10243 = @"C_builtin_function_or_method$posix.getpgrp" +ext_rettype(#10243, #10005) +#10244 = @"C_builtin_function_or_method$posix.getppid" +ext_rettype(#10244, #10005) +#10245 = @"C_builtin_function_or_method$posix.getuid" +ext_rettype(#10245, #10005) +#10246 = @"C_builtin_function_or_method$posix.getlogin" +ext_rettype(#10246, #10024) +#10247 = @"C_builtin_function_or_method$posix.kill" +ext_rettype(#10247, #10003) +#10248 = @"C_builtin_function_or_method$posix.killpg" +ext_rettype(#10248, #10003) +#10249 = @"C_builtin_function_or_method$posix.popen" +#10250 = @"C_type$file" +ext_rettype(#10249, #10250) +#10251 = @"C_builtin_function_or_method$posix.setuid" +ext_rettype(#10251, #10003) +#10252 = @"C_builtin_function_or_method$posix.seteuid" +ext_rettype(#10252, #10003) +#10253 = @"C_builtin_function_or_method$posix.setegid" +ext_rettype(#10253, #10003) +#10254 = @"C_builtin_function_or_method$posix.setreuid" +ext_rettype(#10254, #10003) +#10255 = @"C_builtin_function_or_method$posix.setregid" +ext_rettype(#10255, #10003) +#10256 = @"C_builtin_function_or_method$posix.setgid" +ext_rettype(#10256, #10003) +#10257 = @"C_builtin_function_or_method$posix.setgroups" +ext_rettype(#10257, #10003) +#10258 = @"C_builtin_function_or_method$posix.initgroups" +ext_rettype(#10258, #10003) +#10259 = @"C_builtin_function_or_method$posix.getpgid" +ext_rettype(#10259, #10005) +#10260 = @"C_builtin_function_or_method$posix.setpgrp" +ext_rettype(#10260, #10003) +#10261 = @"C_builtin_function_or_method$posix.wait" +ext_rettype(#10261, #10001) +#10262 = @"C_builtin_function_or_method$posix.wait3" +ext_rettype(#10262, #10001) +#10263 = @"C_builtin_function_or_method$posix.wait4" +ext_rettype(#10263, #10001) +#10264 = @"C_builtin_function_or_method$posix.waitpid" +ext_rettype(#10264, #10001) +#10265 = @"C_builtin_function_or_method$posix.getsid" +ext_rettype(#10265, #10005) +#10266 = @"C_builtin_function_or_method$posix.setsid" +ext_rettype(#10266, #10003) +#10267 = @"C_builtin_function_or_method$posix.setpgid" +ext_rettype(#10267, #10003) +#10268 = @"C_builtin_function_or_method$posix.tcgetpgrp" +ext_rettype(#10268, #10005) +#10269 = @"C_builtin_function_or_method$posix.tcsetpgrp" +ext_rettype(#10269, #10003) +#10270 = @"C_builtin_function_or_method$posix.open" +ext_rettype(#10270, #10005) +#10271 = @"C_builtin_function_or_method$posix.close" +ext_rettype(#10271, #10003) +#10272 = @"C_builtin_function_or_method$posix.closerange" +ext_rettype(#10272, #10003) +#10273 = @"C_builtin_function_or_method$posix.dup" +ext_rettype(#10273, #10005) +#10274 = @"C_builtin_function_or_method$posix.dup2" +ext_rettype(#10274, #10003) +#10275 = @"C_builtin_function_or_method$posix.lseek" +ext_rettype(#10275, #10005) +#10276 = @"C_builtin_function_or_method$posix.write" +ext_rettype(#10276, #10005) +#10277 = @"C_builtin_function_or_method$posix.fdopen" +ext_rettype(#10277, #10250) +#10278 = @"C_builtin_function_or_method$posix.isatty" +ext_rettype(#10278, #10058) +#10279 = @"C_builtin_function_or_method$posix.pipe" +ext_rettype(#10279, #10001) +#10280 = @"C_builtin_function_or_method$posix.mkfifo" +ext_rettype(#10280, #10003) +#10281 = @"C_builtin_function_or_method$posix.mknod" +ext_rettype(#10281, #10003) +#10282 = @"C_builtin_function_or_method$posix.major" +ext_rettype(#10282, #10005) +#10283 = @"C_builtin_function_or_method$posix.minor" +ext_rettype(#10283, #10005) +#10284 = @"C_builtin_function_or_method$posix.makedev" +ext_rettype(#10284, #10005) +#10285 = @"C_builtin_function_or_method$posix.ftruncate" +ext_rettype(#10285, #10003) +#10286 = @"C_builtin_function_or_method$posix.putenv" +ext_rettype(#10286, #10003) +#10287 = @"C_builtin_function_or_method$posix.unsetenv" +ext_rettype(#10287, #10003) +#10288 = @"C_builtin_function_or_method$posix.strerror" +ext_rettype(#10288, #10024) +#10289 = @"C_builtin_function_or_method$posix.fchdir" +ext_rettype(#10289, #10003) +#10290 = @"C_builtin_function_or_method$posix.fsync" +ext_rettype(#10290, #10003) +#10291 = @"C_builtin_function_or_method$posix.fdatasync" +ext_rettype(#10291, #10003) +#10292 = @"C_builtin_function_or_method$posix.WCOREDUMP" +ext_rettype(#10292, #10058) +#10293 = @"C_builtin_function_or_method$posix.WIFCONTINUED" +ext_rettype(#10293, #10058) +#10294 = @"C_builtin_function_or_method$posix.WIFSTOPPED" +ext_rettype(#10294, #10058) +#10295 = @"C_builtin_function_or_method$posix.WIFSIGNALED" +ext_rettype(#10295, #10058) +#10296 = @"C_builtin_function_or_method$posix.WIFEXITED" +ext_rettype(#10296, #10058) +#10297 = @"C_builtin_function_or_method$posix.WEXITSTATUS" +ext_rettype(#10297, #10005) +#10298 = @"C_builtin_function_or_method$posix.WTERMSIG" +ext_rettype(#10298, #10005) +#10299 = @"C_builtin_function_or_method$posix.WSTOPSIG" +ext_rettype(#10299, #10005) +#10300 = @"C_builtin_function_or_method$posix.tmpfile" +ext_rettype(#10300, #10250) +#10301 = @"C_builtin_function_or_method$posix.tempnam" +ext_rettype(#10301, #10024) +#10302 = @"C_builtin_function_or_method$posix.tmpnam" +ext_rettype(#10302, #10024) +#10303 = @"C_builtin_function_or_method$posix.confstr" +ext_rettype(#10303, #10024) +ext_rettype(#10303, #10003) +#10304 = @"C_builtin_function_or_method$posix.sysconf" +ext_rettype(#10304, #10005) +#10305 = @"C_builtin_function_or_method$posix.fpathconf" +ext_rettype(#10305, #10005) +#10306 = @"C_builtin_function_or_method$posix.pathconf" +ext_rettype(#10306, #10005) +#10307 = @"C_builtin_function_or_method$posix.getloadavg" +ext_rettype(#10307, #10001) +#10308 = @"C_builtin_function_or_method$posix.setresuid" +ext_rettype(#10308, #10003) +#10309 = @"C_builtin_function_or_method$posix.setresgid" +ext_rettype(#10309, #10003) +#10310 = @"C_builtin_function_or_method$posix.getresuid" +ext_rettype(#10310, #10001) +#10311 = @"C_builtin_function_or_method$posix.getresgid" +ext_rettype(#10311, #10001) +#10312 = @"C_builtin_function_or_method$posix.urandom" +ext_rettype(#10312, #10024) +#10313 = @"C_builtin_function_or_method$cStringIO.StringIO" +#10314 = @"C_type$cStringIO.StringO" +ext_rettype(#10313, #10314) +#10315 = @"C_type$cStringIO.StringI" +ext_rettype(#10313, #10315) +#10316 = @"C_builtin_function_or_method$_struct._clearcache" +ext_rettype(#10316, #10003) +#10317 = @"C_builtin_function_or_method$_struct.calcsize" +ext_rettype(#10317, #10005) +#10318 = @"C_builtin_function_or_method$_struct.pack" +ext_rettype(#10318, #10024) +#10319 = @"C_builtin_function_or_method$_struct.pack_into" +ext_rettype(#10319, #10003) +#10320 = @"C_builtin_function_or_method$_struct.unpack" +ext_rettype(#10320, #10001) +#10321 = @"C_builtin_function_or_method$_struct.unpack_from" +ext_rettype(#10321, #10001) +#10322 = @"C_builtin_function_or_method$crypt.crypt" +ext_rettype(#10322, #10024) +#10323 = @"C_builtin_function_or_method$strop.atof" +ext_rettype(#10323, #10038) +#10324 = @"C_builtin_function_or_method$strop.atoi" +ext_rettype(#10324, #10005) +#10325 = @"C_builtin_function_or_method$strop.atol" +ext_rettype(#10325, #10005) +#10326 = @"C_builtin_function_or_method$strop.capitalize" +ext_rettype(#10326, #10024) +#10327 = @"C_builtin_function_or_method$strop.count" +ext_rettype(#10327, #10005) +#10328 = @"C_builtin_function_or_method$strop.expandtabs" +ext_rettype(#10328, #10024) +#10329 = @"C_builtin_function_or_method$strop.find" +ext_rettype(#10329, #10005) +#10330 = @"C_builtin_function_or_method$strop.lstrip" +ext_rettype(#10330, #10024) +#10331 = @"C_builtin_function_or_method$strop.lower" +ext_rettype(#10331, #10024) +#10332 = @"C_builtin_function_or_method$strop.maketrans" +ext_rettype(#10332, #10024) +#10333 = @"C_builtin_function_or_method$strop.replace" +ext_rettype(#10333, #10024) +#10334 = @"C_builtin_function_or_method$strop.rfind" +ext_rettype(#10334, #10005) +#10335 = @"C_builtin_function_or_method$strop.rstrip" +ext_rettype(#10335, #10024) +#10336 = @"C_builtin_function_or_method$strop.split" +ext_rettype(#10336, #10021) +#10337 = @"C_builtin_function_or_method$strop.splitfields" +ext_rettype(#10337, #10021) +#10338 = @"C_builtin_function_or_method$strop.strip" +ext_rettype(#10338, #10024) +#10339 = @"C_builtin_function_or_method$strop.swapcase" +ext_rettype(#10339, #10024) +#10340 = @"C_builtin_function_or_method$strop.upper" +ext_rettype(#10340, #10024) +#10341 = @"C_builtin_function_or_method$binascii.a2b_uu" +ext_rettype(#10341, #10024) +#10342 = @"C_builtin_function_or_method$binascii.a2b_hqx" +ext_rettype(#10342, #10001) +#10343 = @"C_builtin_function_or_method$binascii.b2a_hex" +ext_rettype(#10343, #10024) +#10344 = @"C_builtin_function_or_method$binascii.a2b_hex" +ext_rettype(#10344, #10024) +#10345 = @"C_builtin_function_or_method$binascii.hexlify" +ext_rettype(#10345, #10024) +#10346 = @"C_builtin_function_or_method$binascii.unhexlify" +ext_rettype(#10346, #10024) +#10347 = @"C_builtin_function_or_method$binascii.rledecode_hqx" +ext_rettype(#10347, #10024) +#10348 = @"C_builtin_function_or_method$binascii.crc_hqx" +ext_rettype(#10348, #10005) +#10349 = @"C_builtin_function_or_method$binascii.crc32" +ext_rettype(#10349, #10005) +#10350 = @"C_builtin_function_or_method$binascii.a2b_qp" +ext_rettype(#10350, #10024) +#10351 = @"C_builtin_function_or_method$binascii.b2a_qp" +ext_rettype(#10351, #10024) +#10352 = @"C_builtin_function_or_method$cPickle.dump" +ext_rettype(#10352, #10003) +#10353 = @"C_builtin_function_or_method$cPickle.Pickler" +#10354 = @"C_type$cPickle.Pickler" +ext_rettype(#10353, #10354) +#10355 = @"C_builtin_function_or_method$cPickle.Unpickler" +#10356 = @"C_type$cPickle.Unpickler" +ext_rettype(#10355, #10356) +#10357 = @"C_builtin_function_or_method$unicodedata.decimal" +ext_rettype(#10357, #10005) +#10358 = @"C_builtin_function_or_method$unicodedata.digit" +ext_rettype(#10358, #10005) +#10359 = @"C_builtin_function_or_method$unicodedata.numeric" +ext_rettype(#10359, #10038) +#10360 = @"C_builtin_function_or_method$unicodedata.category" +ext_rettype(#10360, #10024) +#10361 = @"C_builtin_function_or_method$unicodedata.bidirectional" +ext_rettype(#10361, #10024) +#10362 = @"C_builtin_function_or_method$unicodedata.combining" +ext_rettype(#10362, #10005) +#10363 = @"C_builtin_function_or_method$unicodedata.mirrored" +ext_rettype(#10363, #10005) +#10364 = @"C_builtin_function_or_method$unicodedata.east_asian_width" +ext_rettype(#10364, #10024) +#10365 = @"C_builtin_function_or_method$unicodedata.decomposition" +ext_rettype(#10365, #10024) +#10366 = @"C_builtin_function_or_method$unicodedata.name" +ext_rettype(#10366, #10024) +#10367 = @"C_builtin_function_or_method$unicodedata.lookup" +ext_rettype(#10367, #10218) +#10368 = @"C_builtin_function_or_method$xxsubtype.bench" +ext_rettype(#10368, #10038) +#10369 = @"C_builtin_function_or_method$_hashlib.new" +#10370 = @"C_type$_hashlib.HASH" +ext_rettype(#10369, #10370) +#10371 = @"C_builtin_function_or_method$_hashlib.openssl_md5" +ext_rettype(#10371, #10370) +#10372 = @"C_builtin_function_or_method$_hashlib.openssl_sha1" +ext_rettype(#10372, #10370) +#10373 = @"C_builtin_function_or_method$_hashlib.openssl_sha224" +ext_rettype(#10373, #10370) +#10374 = @"C_builtin_function_or_method$_hashlib.openssl_sha256" +ext_rettype(#10374, #10370) +#10375 = @"C_builtin_function_or_method$_hashlib.openssl_sha384" +ext_rettype(#10375, #10370) +#10376 = @"C_builtin_function_or_method$_hashlib.openssl_sha512" +ext_rettype(#10376, #10370) +#10377 = @"C_builtin_function_or_method$_hashlib.pbkdf2_hmac" +ext_rettype(#10377, #10024) +#10378 = @"C_builtin_function_or_method$zlib.adler32" +ext_rettype(#10378, #10005) +#10379 = @"C_builtin_function_or_method$zlib.compress" +ext_rettype(#10379, #10024) +#10380 = @"C_builtin_function_or_method$zlib.crc32" +ext_rettype(#10380, #10005) +#10381 = @"C_builtin_function_or_method$thread.start_new_thread" +ext_rettype(#10381, #10005) +#10382 = @"C_builtin_function_or_method$thread.start_new" +ext_rettype(#10382, #10005) +#10383 = @"C_builtin_function_or_method$thread.allocate_lock" +#10384 = @"C_type$thread.lock" +ext_rettype(#10383, #10384) +#10385 = @"C_builtin_function_or_method$thread.allocate" +ext_rettype(#10385, #10384) +#10386 = @"C_builtin_function_or_method$thread.interrupt_main" +ext_rettype(#10386, #10003) +#10387 = @"C_builtin_function_or_method$thread.get_ident" +ext_rettype(#10387, #10005) +#10388 = @"C_builtin_function_or_method$thread._count" +ext_rettype(#10388, #10005) +#10389 = @"C_builtin_function_or_method$thread.stack_size" +ext_rettype(#10389, #10005) +#10390 = @"C_builtin_function_or_method$bz2.decompress" +ext_rettype(#10390, #10024) +#10391 = @"C_builtin_function_or_method$resource.getrlimit" +ext_rettype(#10391, #10001) +#10392 = @"C_builtin_function_or_method$resource.setrlimit" +ext_rettype(#10392, #10003) +#10393 = @"C_builtin_function_or_method$resource.getpagesize" +ext_rettype(#10393, #10005) +#10394 = @"C_builtin_function_or_method$_codecs.register" +ext_rettype(#10394, #10003) +#10395 = @"C_builtin_function_or_method$_codecs.escape_encode" +ext_rettype(#10395, #10001) +#10396 = @"C_builtin_function_or_method$_codecs.escape_decode" +ext_rettype(#10396, #10001) +#10397 = @"C_builtin_function_or_method$_codecs.utf_8_encode" +ext_rettype(#10397, #10001) +#10398 = @"C_builtin_function_or_method$_codecs.utf_8_decode" +ext_rettype(#10398, #10001) +#10399 = @"C_builtin_function_or_method$_codecs.utf_7_encode" +ext_rettype(#10399, #10001) +#10400 = @"C_builtin_function_or_method$_codecs.utf_7_decode" +ext_rettype(#10400, #10001) +#10401 = @"C_builtin_function_or_method$_codecs.utf_16_encode" +ext_rettype(#10401, #10001) +#10402 = @"C_builtin_function_or_method$_codecs.utf_16_le_encode" +ext_rettype(#10402, #10001) +#10403 = @"C_builtin_function_or_method$_codecs.utf_16_be_encode" +ext_rettype(#10403, #10001) +#10404 = @"C_builtin_function_or_method$_codecs.utf_16_decode" +ext_rettype(#10404, #10001) +#10405 = @"C_builtin_function_or_method$_codecs.utf_16_le_decode" +ext_rettype(#10405, #10001) +#10406 = @"C_builtin_function_or_method$_codecs.utf_16_be_decode" +ext_rettype(#10406, #10001) +#10407 = @"C_builtin_function_or_method$_codecs.utf_16_ex_decode" +ext_rettype(#10407, #10001) +#10408 = @"C_builtin_function_or_method$_codecs.utf_32_encode" +ext_rettype(#10408, #10001) +#10409 = @"C_builtin_function_or_method$_codecs.utf_32_le_encode" +ext_rettype(#10409, #10001) +#10410 = @"C_builtin_function_or_method$_codecs.utf_32_be_encode" +ext_rettype(#10410, #10001) +#10411 = @"C_builtin_function_or_method$_codecs.utf_32_decode" +ext_rettype(#10411, #10001) +#10412 = @"C_builtin_function_or_method$_codecs.utf_32_le_decode" +ext_rettype(#10412, #10001) +#10413 = @"C_builtin_function_or_method$_codecs.utf_32_be_decode" +ext_rettype(#10413, #10001) +#10414 = @"C_builtin_function_or_method$_codecs.utf_32_ex_decode" +ext_rettype(#10414, #10001) +#10415 = @"C_builtin_function_or_method$_codecs.unicode_escape_encode" +ext_rettype(#10415, #10001) +#10416 = @"C_builtin_function_or_method$_codecs.unicode_escape_decode" +ext_rettype(#10416, #10001) +#10417 = @"C_builtin_function_or_method$_codecs.unicode_internal_encode" +ext_rettype(#10417, #10001) +#10418 = @"C_builtin_function_or_method$_codecs.unicode_internal_decode" +ext_rettype(#10418, #10001) +#10419 = @"C_builtin_function_or_method$_codecs.raw_unicode_escape_encode" +ext_rettype(#10419, #10001) +#10420 = @"C_builtin_function_or_method$_codecs.raw_unicode_escape_decode" +ext_rettype(#10420, #10001) +#10421 = @"C_builtin_function_or_method$_codecs.latin_1_encode" +ext_rettype(#10421, #10001) +#10422 = @"C_builtin_function_or_method$_codecs.latin_1_decode" +ext_rettype(#10422, #10001) +#10423 = @"C_builtin_function_or_method$_codecs.ascii_encode" +ext_rettype(#10423, #10001) +#10424 = @"C_builtin_function_or_method$_codecs.ascii_decode" +ext_rettype(#10424, #10001) +#10425 = @"C_builtin_function_or_method$_codecs.charmap_encode" +ext_rettype(#10425, #10001) +#10426 = @"C_builtin_function_or_method$_codecs.charmap_decode" +ext_rettype(#10426, #10001) +#10427 = @"C_builtin_function_or_method$_codecs.charmap_build" +ext_rettype(#10427, #10007) +#10428 = @"C_builtin_function_or_method$_codecs.readbuffer_encode" +ext_rettype(#10428, #10001) +#10429 = @"C_builtin_function_or_method$_codecs.charbuffer_encode" +ext_rettype(#10429, #10001) +#10430 = @"C_builtin_function_or_method$_codecs.register_error" +ext_rettype(#10430, #10003) +#10431 = @"C_builtin_function_or_method$readline.parse_and_bind" +ext_rettype(#10431, #10003) +#10432 = @"C_builtin_function_or_method$readline.get_line_buffer" +ext_rettype(#10432, #10024) +#10433 = @"C_builtin_function_or_method$readline.insert_text" +ext_rettype(#10433, #10003) +#10434 = @"C_builtin_function_or_method$readline.redisplay" +ext_rettype(#10434, #10003) +#10435 = @"C_builtin_function_or_method$readline.read_init_file" +ext_rettype(#10435, #10003) +#10436 = @"C_builtin_function_or_method$readline.read_history_file" +ext_rettype(#10436, #10003) +#10437 = @"C_builtin_function_or_method$readline.write_history_file" +ext_rettype(#10437, #10003) +#10438 = @"C_builtin_function_or_method$readline.get_history_item" +ext_rettype(#10438, #10024) +ext_rettype(#10438, #10003) +#10439 = @"C_builtin_function_or_method$readline.get_current_history_length" +ext_rettype(#10439, #10005) +#10440 = @"C_builtin_function_or_method$readline.set_history_length" +ext_rettype(#10440, #10003) +#10441 = @"C_builtin_function_or_method$readline.get_history_length" +ext_rettype(#10441, #10005) +#10442 = @"C_builtin_function_or_method$readline.set_completer" +ext_rettype(#10442, #10003) +#10443 = @"C_builtin_function_or_method$readline.get_completer" +ext_rettype(#10443, #10003) +#10444 = @"C_builtin_function_or_method$readline.get_completion_type" +ext_rettype(#10444, #10005) +#10445 = @"C_builtin_function_or_method$readline.set_completer_delims" +ext_rettype(#10445, #10003) +#10446 = @"C_builtin_function_or_method$readline.add_history" +ext_rettype(#10446, #10003) +#10447 = @"C_builtin_function_or_method$readline.remove_history_item" +ext_rettype(#10447, #10003) +#10448 = @"C_builtin_function_or_method$readline.replace_history_item" +ext_rettype(#10448, #10003) +#10449 = @"C_builtin_function_or_method$readline.get_completer_delims" +ext_rettype(#10449, #10024) +#10450 = @"C_builtin_function_or_method$readline.set_completion_display_matches_hook" +ext_rettype(#10450, #10003) +#10451 = @"C_builtin_function_or_method$readline.set_startup_hook" +ext_rettype(#10451, #10003) +#10452 = @"C_builtin_function_or_method$readline.set_pre_input_hook" +ext_rettype(#10452, #10003) +#10453 = @"C_builtin_function_or_method$readline.clear_history" +ext_rettype(#10453, #10003) +#10454 = @"C_builtin_function_or_method$_testcapi.test_config" +ext_rettype(#10454, #10003) +#10455 = @"C_builtin_function_or_method$_testcapi.test_datetime_capi" +ext_rettype(#10455, #10003) +#10456 = @"C_builtin_function_or_method$_testcapi.test_list_api" +ext_rettype(#10456, #10003) +#10457 = @"C_builtin_function_or_method$_testcapi.test_dict_iteration" +ext_rettype(#10457, #10003) +#10458 = @"C_builtin_function_or_method$_testcapi.test_lazy_hash_inheritance" +ext_rettype(#10458, #10003) +#10459 = @"C_builtin_function_or_method$_testcapi.test_broken_memoryview" +ext_rettype(#10459, #10003) +#10460 = @"C_builtin_function_or_method$_testcapi.test_long_api" +ext_rettype(#10460, #10003) +#10461 = @"C_builtin_function_or_method$_testcapi.test_long_and_overflow" +ext_rettype(#10461, #10003) +#10462 = @"C_builtin_function_or_method$_testcapi.test_long_numbits" +ext_rettype(#10462, #10003) +#10463 = @"C_builtin_function_or_method$_testcapi.test_k_code" +ext_rettype(#10463, #10003) +#10464 = @"C_builtin_function_or_method$_testcapi.test_empty_argparse" +ext_rettype(#10464, #10003) +#10465 = @"C_builtin_function_or_method$_testcapi.test_null_strings" +ext_rettype(#10465, #10001) +#10466 = @"C_builtin_function_or_method$_testcapi.test_string_from_format" +ext_rettype(#10466, #10003) +#10467 = @"C_builtin_function_or_method$_testcapi.test_with_docstring" +ext_rettype(#10467, #10003) +#10468 = @"C_builtin_function_or_method$_testcapi.getargs_tuple" +ext_rettype(#10468, #10001) +#10469 = @"C_builtin_function_or_method$_testcapi.getargs_keywords" +ext_rettype(#10469, #10001) +#10470 = @"C_builtin_function_or_method$_testcapi.getargs_b" +ext_rettype(#10470, #10005) +#10471 = @"C_builtin_function_or_method$_testcapi.getargs_B" +ext_rettype(#10471, #10005) +#10472 = @"C_builtin_function_or_method$_testcapi.getargs_h" +ext_rettype(#10472, #10005) +#10473 = @"C_builtin_function_or_method$_testcapi.getargs_H" +ext_rettype(#10473, #10005) +#10474 = @"C_builtin_function_or_method$_testcapi.getargs_I" +ext_rettype(#10474, #10005) +#10475 = @"C_builtin_function_or_method$_testcapi.getargs_k" +ext_rettype(#10475, #10005) +#10476 = @"C_builtin_function_or_method$_testcapi.getargs_i" +ext_rettype(#10476, #10005) +#10477 = @"C_builtin_function_or_method$_testcapi.getargs_l" +ext_rettype(#10477, #10005) +#10478 = @"C_builtin_function_or_method$_testcapi.getargs_n" +ext_rettype(#10478, #10005) +#10479 = @"C_builtin_function_or_method$_testcapi.getargs_L" +ext_rettype(#10479, #10005) +#10480 = @"C_builtin_function_or_method$_testcapi.getargs_K" +ext_rettype(#10480, #10005) +#10481 = @"C_builtin_function_or_method$_testcapi.test_longlong_api" +ext_rettype(#10481, #10003) +#10482 = @"C_builtin_function_or_method$_testcapi.test_long_long_and_overflow" +ext_rettype(#10482, #10003) +#10483 = @"C_builtin_function_or_method$_testcapi.test_L_code" +ext_rettype(#10483, #10003) +#10484 = @"C_builtin_function_or_method$_testcapi.test_u_code" +ext_rettype(#10484, #10003) +#10485 = @"C_builtin_function_or_method$_testcapi.test_widechar" +ext_rettype(#10485, #10003) +#10486 = @"C_builtin_function_or_method$_testcapi._test_thread_state" +ext_rettype(#10486, #10003) +#10487 = @"C_builtin_function_or_method$_testcapi._pending_threadfunc" +ext_rettype(#10487, #10058) +#10488 = @"C_builtin_function_or_method$_testcapi.test_capsule" +ext_rettype(#10488, #10003) +#10489 = @"C_builtin_function_or_method$_testcapi.traceback_print" +ext_rettype(#10489, #10003) +#10490 = @"C_builtin_function_or_method$_testcapi.code_newempty" +ext_rettype(#10490, #10082) +#10491 = @"C_builtin_function_or_method$_testcapi.make_exception_with_doc" +#10492 = @"C_type$type" +ext_rettype(#10491, #10492) +#10493 = @"C_builtin_function_or_method$_testcapi.sequence_delitem" +ext_rettype(#10493, #10003) +#10494 = @"C_builtin_function_or_method$_testcapi.call_in_temporary_c_thread" +ext_rettype(#10494, #10003) +#10495 = @"C_builtin_function_or_method$select.select" +ext_rettype(#10495, #10001) +#10496 = @"C_builtin_function_or_method$select.poll" +#10497 = @"C_type$select.poll" +ext_rettype(#10496, #10497) +#10498 = @"C_builtin_function_or_method$spwd.getspall" +ext_rettype(#10498, #10021) +#10499 = @"C_builtin_function_or_method$_locale.setlocale" +ext_rettype(#10499, #10024) +#10500 = @"C_builtin_function_or_method$_locale.localeconv" +ext_rettype(#10500, #10007) +#10501 = @"C_builtin_function_or_method$_locale.strcoll" +ext_rettype(#10501, #10005) +#10502 = @"C_builtin_function_or_method$_locale.strxfrm" +ext_rettype(#10502, #10024) +#10503 = @"C_builtin_function_or_method$_locale.nl_langinfo" +ext_rettype(#10503, #10024) +#10504 = @"C_builtin_function_or_method$_locale.gettext" +ext_rettype(#10504, #10024) +#10505 = @"C_builtin_function_or_method$_locale.dgettext" +ext_rettype(#10505, #10024) +#10506 = @"C_builtin_function_or_method$_locale.dcgettext" +ext_rettype(#10506, #10024) +#10507 = @"C_builtin_function_or_method$_locale.textdomain" +ext_rettype(#10507, #10024) +#10508 = @"C_builtin_function_or_method$_locale.bindtextdomain" +ext_rettype(#10508, #10024) +#10509 = @"C_builtin_function_or_method$_locale.bind_textdomain_codeset" +ext_rettype(#10509, #10024) +ext_rettype(#10509, #10003) +#10510 = @"C_builtin_function_or_method$pyexpat.ParserCreate" +#10511 = @"C_type$pyexpat.xmlparser" +ext_rettype(#10510, #10511) +#10512 = @"C_builtin_function_or_method$pyexpat.ErrorString" +ext_rettype(#10512, #10024) +#10513 = @"C_builtin_function_or_method$future_builtins.hex" +ext_rettype(#10513, #10024) +#10514 = @"C_builtin_function_or_method$future_builtins.oct" +ext_rettype(#10514, #10024) +#10515 = @"C_builtin_function_or_method$future_builtins.ascii" +ext_rettype(#10515, #10024) +#10516 = @"C_builtin_function_or_method$cmath.acos" +#10517 = @"C_type$complex" +ext_rettype(#10516, #10517) +#10518 = @"C_builtin_function_or_method$cmath.acosh" +ext_rettype(#10518, #10517) +#10519 = @"C_builtin_function_or_method$cmath.asin" +ext_rettype(#10519, #10517) +#10520 = @"C_builtin_function_or_method$cmath.asinh" +ext_rettype(#10520, #10517) +#10521 = @"C_builtin_function_or_method$cmath.atan" +ext_rettype(#10521, #10517) +#10522 = @"C_builtin_function_or_method$cmath.atanh" +ext_rettype(#10522, #10517) +#10523 = @"C_builtin_function_or_method$cmath.cos" +ext_rettype(#10523, #10517) +#10524 = @"C_builtin_function_or_method$cmath.cosh" +ext_rettype(#10524, #10517) +#10525 = @"C_builtin_function_or_method$cmath.exp" +ext_rettype(#10525, #10517) +#10526 = @"C_builtin_function_or_method$cmath.isinf" +ext_rettype(#10526, #10058) +#10527 = @"C_builtin_function_or_method$cmath.isnan" +ext_rettype(#10527, #10058) +#10528 = @"C_builtin_function_or_method$cmath.log" +ext_rettype(#10528, #10517) +#10529 = @"C_builtin_function_or_method$cmath.log10" +ext_rettype(#10529, #10517) +#10530 = @"C_builtin_function_or_method$cmath.phase" +ext_rettype(#10530, #10038) +#10531 = @"C_builtin_function_or_method$cmath.polar" +ext_rettype(#10531, #10001) +#10532 = @"C_builtin_function_or_method$cmath.rect" +ext_rettype(#10532, #10517) +#10533 = @"C_builtin_function_or_method$cmath.sin" +ext_rettype(#10533, #10517) +#10534 = @"C_builtin_function_or_method$cmath.sinh" +ext_rettype(#10534, #10517) +#10535 = @"C_builtin_function_or_method$cmath.sqrt" +ext_rettype(#10535, #10517) +#10536 = @"C_builtin_function_or_method$cmath.tan" +ext_rettype(#10536, #10517) +#10537 = @"C_builtin_function_or_method$cmath.tanh" +ext_rettype(#10537, #10517) +#10538 = @"C_builtin_function_or_method$_weakref.getweakrefcount" +ext_rettype(#10538, #10005) +#10539 = @"C_builtin_function_or_method$_weakref.getweakrefs" +ext_rettype(#10539, #10021) +#10540 = @"C_builtin_function_or_method$_weakref.proxy" +#10541 = @"C_type$weakref" +ext_rettype(#10540, #10541) +#10542 = @"C_builtin_function_or_method$ossaudiodev.open" +#10543 = @"C_type$ossaudiodev.oss_audio_device" +ext_rettype(#10542, #10543) +#10544 = @"C_builtin_function_or_method$ossaudiodev.openmixer" +#10545 = @"C_type$ossaudiodev.oss_mixer_device" +ext_rettype(#10544, #10545) +#10546 = @"C_builtin_function_or_method$_ctypes.get_errno" +ext_rettype(#10546, #10005) +#10547 = @"C_builtin_function_or_method$_ctypes.set_errno" +ext_rettype(#10547, #10005) +#10548 = @"C_builtin_function_or_method$_ctypes._buffer_info" +ext_rettype(#10548, #10001) +#10549 = @"C_builtin_function_or_method$_ctypes.resize" +ext_rettype(#10549, #10003) +#10550 = @"C_builtin_function_or_method$_ctypes.set_conversion_mode" +ext_rettype(#10550, #10001) +#10551 = @"C_builtin_function_or_method$_ctypes.dlopen" +ext_rettype(#10551, #10005) +#10552 = @"C_builtin_function_or_method$_ctypes.dlclose" +ext_rettype(#10552, #10003) +#10553 = @"C_builtin_function_or_method$_ctypes.dlsym" +ext_rettype(#10553, #10005) +#10554 = @"C_builtin_function_or_method$_ctypes.alignment" +ext_rettype(#10554, #10005) +#10555 = @"C_builtin_function_or_method$_ctypes.sizeof" +ext_rettype(#10555, #10005) +#10556 = @"C_builtin_function_or_method$_ctypes.byref" +#10557 = @"C_type$CArgObject" +ext_rettype(#10556, #10557) +#10558 = @"C_builtin_function_or_method$_ctypes.addressof" +ext_rettype(#10558, #10005) +#10559 = @"C_builtin_function_or_method$_ctypes.call_function" +ext_rettype(#10559, #10005) +ext_rettype(#10559, #10003) +#10560 = @"C_builtin_function_or_method$_ctypes.call_cdeclfunction" +ext_rettype(#10560, #10005) +ext_rettype(#10560, #10003) +#10561 = @"C_builtin_function_or_method$_ctypes_test.func_si" +ext_rettype(#10561, #10003) +#10562 = @"C_builtin_function_or_method$_ctypes_test.func" +ext_rettype(#10562, #10003) +#10563 = @"C_builtin_function_or_method$fcntl.fcntl" +ext_rettype(#10563, #10005) +ext_rettype(#10563, #10024) +#10564 = @"C_builtin_function_or_method$fcntl.ioctl" +ext_rettype(#10564, #10005) +ext_rettype(#10564, #10024) +#10565 = @"C_builtin_function_or_method$fcntl.flock" +ext_rettype(#10565, #10003) +#10566 = @"C_builtin_function_or_method$fcntl.lockf" +ext_rettype(#10566, #10003) +#10567 = @"C_builtin_function_or_method$_json.scanstring" +ext_rettype(#10567, #10001) +#10568 = @"C_builtin_function_or_method$syslog.openlog" +ext_rettype(#10568, #10003) +#10569 = @"C_builtin_function_or_method$syslog.closelog" +ext_rettype(#10569, #10003) +#10570 = @"C_builtin_function_or_method$syslog.syslog" +ext_rettype(#10570, #10003) +#10571 = @"C_builtin_function_or_method$syslog.setlogmask" +ext_rettype(#10571, #10005) +#10572 = @"C_builtin_function_or_method$syslog.LOG_MASK" +ext_rettype(#10572, #10005) +#10573 = @"C_builtin_function_or_method$syslog.LOG_UPTO" +ext_rettype(#10573, #10005) +#10574 = @"C_builtin_function_or_method$_elementtree.Element" +#10575 = @"C_type$Element" +ext_rettype(#10574, #10575) +#10576 = @"C_builtin_function_or_method$_elementtree.SubElement" +ext_rettype(#10576, #10575) +#10577 = @"C_builtin_function_or_method$_elementtree.TreeBuilder" +#10578 = @"C_type$TreeBuilder" +ext_rettype(#10577, #10578) +#10579 = @"C_builtin_function_or_method$_elementtree.XMLParser" +#10580 = @"C_type$XMLParser" +ext_rettype(#10579, #10580) +#10581 = @"C_builtin_function_or_method$_elementtree.XMLTreeBuilder" +ext_rettype(#10581, #10580) +#10582 = @"C_builtin_function_or_method$_bisect.bisect_right" +ext_rettype(#10582, #10005) +#10583 = @"C_builtin_function_or_method$_bisect.bisect" +ext_rettype(#10583, #10005) +#10584 = @"C_builtin_function_or_method$_bisect.insort_right" +ext_rettype(#10584, #10003) +#10585 = @"C_builtin_function_or_method$_bisect.insort" +ext_rettype(#10585, #10003) +#10586 = @"C_builtin_function_or_method$_bisect.bisect_left" +ext_rettype(#10586, #10005) +#10587 = @"C_builtin_function_or_method$_bisect.insort_left" +ext_rettype(#10587, #10003) +#10588 = @"C_builtin_function_or_method$sys.callstats" +ext_rettype(#10588, #10003) +#10589 = @"C_builtin_function_or_method$sys._clear_type_cache" +ext_rettype(#10589, #10003) +#10590 = @"C_builtin_function_or_method$sys._current_frames" +ext_rettype(#10590, #10007) +#10591 = @"C_builtin_function_or_method$sys.displayhook" +ext_rettype(#10591, #10003) +#10592 = @"C_builtin_function_or_method$sys.exc_info" +ext_rettype(#10592, #10001) +#10593 = @"C_builtin_function_or_method$sys.exc_clear" +ext_rettype(#10593, #10003) +#10594 = @"C_builtin_function_or_method$sys.excepthook" +ext_rettype(#10594, #10003) +#10595 = @"C_builtin_function_or_method$sys.getdefaultencoding" +ext_rettype(#10595, #10024) +#10596 = @"C_builtin_function_or_method$sys.getdlopenflags" +ext_rettype(#10596, #10005) +#10597 = @"C_builtin_function_or_method$sys.getfilesystemencoding" +ext_rettype(#10597, #10024) +ext_rettype(#10597, #10003) +#10598 = @"C_builtin_function_or_method$sys.getrefcount" +ext_rettype(#10598, #10005) +#10599 = @"C_builtin_function_or_method$sys.getrecursionlimit" +ext_rettype(#10599, #10005) +#10600 = @"C_builtin_function_or_method$sys.getsizeof" +ext_rettype(#10600, #10005) +#10601 = @"C_builtin_function_or_method$sys._getframe" +#10602 = @"C_type$frame" +ext_rettype(#10601, #10602) +#10603 = @"C_builtin_function_or_method$sys.setdefaultencoding" +ext_rettype(#10603, #10003) +#10604 = @"C_builtin_function_or_method$sys.setcheckinterval" +ext_rettype(#10604, #10003) +#10605 = @"C_builtin_function_or_method$sys.getcheckinterval" +ext_rettype(#10605, #10005) +#10606 = @"C_builtin_function_or_method$sys.setdlopenflags" +ext_rettype(#10606, #10003) +#10607 = @"C_builtin_function_or_method$sys.setprofile" +ext_rettype(#10607, #10003) +#10608 = @"C_builtin_function_or_method$sys.getprofile" +ext_rettype(#10608, #10003) +#10609 = @"C_builtin_function_or_method$sys.setrecursionlimit" +ext_rettype(#10609, #10003) +#10610 = @"C_builtin_function_or_method$sys.settrace" +ext_rettype(#10610, #10003) +#10611 = @"C_builtin_function_or_method$sys.gettrace" +ext_rettype(#10611, #10003) +#10612 = @"C_builtin_function_or_method$_warnings.warn" +ext_rettype(#10612, #10003) +#10613 = @"C_builtin_function_or_method$_warnings.warn_explicit" +ext_rettype(#10613, #10003) +#10614 = @"C_builtin_function_or_method$marshal.dump" +ext_rettype(#10614, #10003) +#10615 = @"C_builtin_function_or_method$marshal.load" +ext_rettype(#10615, #10058) +ext_rettype(#10615, #10038) +ext_rettype(#10615, #10005) +ext_rettype(#10615, #10517) +ext_rettype(#10615, #10003) +#10616 = @"C_builtin_function_or_method$marshal.loads" +ext_rettype(#10616, #10058) +ext_rettype(#10616, #10038) +ext_rettype(#10616, #10005) +ext_rettype(#10616, #10517) +ext_rettype(#10616, #10003) +#10617 = @"C_builtin_function_or_method$imp.reload" +#10618 = @"C_type$module" +ext_rettype(#10617, #10618) +#10619 = @"C_builtin_function_or_method$imp.find_module" +ext_rettype(#10619, #10001) +#10620 = @"C_builtin_function_or_method$imp.get_magic" +ext_rettype(#10620, #10024) +#10621 = @"C_builtin_function_or_method$imp.get_suffixes" +ext_rettype(#10621, #10021) +#10622 = @"C_builtin_function_or_method$imp.load_module" +ext_rettype(#10622, #10618) +#10623 = @"C_builtin_function_or_method$imp.new_module" +ext_rettype(#10623, #10618) +#10624 = @"C_builtin_function_or_method$imp.lock_held" +ext_rettype(#10624, #10058) +#10625 = @"C_builtin_function_or_method$imp.acquire_lock" +ext_rettype(#10625, #10003) +#10626 = @"C_builtin_function_or_method$imp.release_lock" +ext_rettype(#10626, #10003) +#10627 = @"C_builtin_function_or_method$imp.get_frozen_object" +ext_rettype(#10627, #10058) +ext_rettype(#10627, #10038) +ext_rettype(#10627, #10005) +ext_rettype(#10627, #10517) +ext_rettype(#10627, #10003) +#10628 = @"C_builtin_function_or_method$imp.init_builtin" +ext_rettype(#10628, #10618) +ext_rettype(#10628, #10003) +#10629 = @"C_builtin_function_or_method$imp.init_frozen" +ext_rettype(#10629, #10618) +ext_rettype(#10629, #10003) +#10630 = @"C_builtin_function_or_method$imp.is_builtin" +ext_rettype(#10630, #10005) +#10631 = @"C_builtin_function_or_method$imp.is_frozen" +ext_rettype(#10631, #10058) +#10632 = @"C_builtin_function_or_method$imp.load_dynamic" +ext_rettype(#10632, #10618) +#10633 = @"C_builtin_function_or_method$imp.load_package" +ext_rettype(#10633, #10618) +#10634 = @"C_builtin_function_or_method$builtins.__import__" +ext_rettype(#10634, #10618) +ext_rettype(#10634, #10003) +#10635 = @"C_builtin_function_or_method$builtins.all" +ext_rettype(#10635, #10058) +#10636 = @"C_builtin_function_or_method$builtins.any" +ext_rettype(#10636, #10058) +#10637 = @"C_builtin_function_or_method$builtins.bin" +ext_rettype(#10637, #10024) +#10638 = @"C_builtin_function_or_method$builtins.callable" +ext_rettype(#10638, #10058) +#10639 = @"C_builtin_function_or_method$builtins.chr" +ext_rettype(#10639, #10024) +#10640 = @"C_builtin_function_or_method$builtins.cmp" +ext_rettype(#10640, #10005) +#10641 = @"C_builtin_function_or_method$builtins.coerce" +ext_rettype(#10641, #10001) +#10642 = @"C_builtin_function_or_method$builtins.compile" +ext_rettype(#10642, #10082) +ext_rettype(#10642, #10003) +#10643 = @"C_builtin_function_or_method$builtins.delattr" +ext_rettype(#10643, #10003) +#10644 = @"C_builtin_function_or_method$builtins.dir" +ext_rettype(#10644, #10021) +#10645 = @"C_builtin_function_or_method$builtins.filter" +ext_rettype(#10645, #10021) +ext_rettype(#10645, #10001) +#10646 = @"C_builtin_function_or_method$builtins.format" +ext_rettype(#10646, #10024) +ext_rettype(#10646, #10218) +#10647 = @"C_builtin_function_or_method$builtins.globals" +ext_rettype(#10647, #10007) +#10648 = @"C_builtin_function_or_method$builtins.hasattr" +ext_rettype(#10648, #10058) +#10649 = @"C_builtin_function_or_method$builtins.hash" +ext_rettype(#10649, #10005) +#10650 = @"C_builtin_function_or_method$builtins.id" +ext_rettype(#10650, #10005) +#10651 = @"C_builtin_function_or_method$builtins.input" +ext_rettype(#10651, #10024) +#10652 = @"C_builtin_function_or_method$builtins.isinstance" +ext_rettype(#10652, #10058) +#10653 = @"C_builtin_function_or_method$builtins.issubclass" +ext_rettype(#10653, #10058) +#10654 = @"C_builtin_function_or_method$builtins.iter" +#10655 = @"C_type$iterator" +ext_rettype(#10654, #10655) +#10656 = @"C_type$callable-iterator" +ext_rettype(#10654, #10656) +#10657 = @"C_builtin_function_or_method$builtins.len" +ext_rettype(#10657, #10005) +#10658 = @"C_builtin_function_or_method$builtins.locals" +ext_rettype(#10658, #10007) +#10659 = @"C_builtin_function_or_method$builtins.map" +ext_rettype(#10659, #10021) +#10660 = @"C_builtin_function_or_method$builtins.open" +ext_rettype(#10660, #10250) +#10661 = @"C_builtin_function_or_method$builtins.ord" +ext_rettype(#10661, #10005) +#10662 = @"C_builtin_function_or_method$builtins.print" +ext_rettype(#10662, #10003) +#10663 = @"C_builtin_function_or_method$builtins.range" +ext_rettype(#10663, #10021) +#10664 = @"C_builtin_function_or_method$builtins.raw_input" +ext_rettype(#10664, #10024) +#10665 = @"C_builtin_function_or_method$builtins.reload" +ext_rettype(#10665, #10618) +#10666 = @"C_builtin_function_or_method$builtins.repr" +ext_rettype(#10666, #10024) +#10667 = @"C_builtin_function_or_method$builtins.round" +ext_rettype(#10667, #10038) +#10668 = @"C_builtin_function_or_method$builtins.setattr" +ext_rettype(#10668, #10003) +#10669 = @"C_builtin_function_or_method$builtins.sorted" +ext_rettype(#10669, #10021) +#10670 = @"C_builtin_function_or_method$builtins.sum" +ext_rettype(#10670, #10038) +ext_rettype(#10670, #10005) +#10671 = @"C_builtin_function_or_method$builtins.unichr" +ext_rettype(#10671, #10218) +#10672 = @"C_builtin_function_or_method$builtins.vars" +ext_rettype(#10672, #10007) +#10673 = @"C_builtin_function_or_method$builtins.zip" +ext_rettype(#10673, #10021) +#10674 = @"C_type$_multiprocessing.SemLock$acquire" +ext_rettype(#10674, #10058) +#10675 = @"C_type$_multiprocessing.SemLock$release" +ext_rettype(#10675, #10003) +#10676 = @"C_type$_multiprocessing.SemLock$__enter__" +ext_rettype(#10676, #10058) +#10677 = @"C_type$_multiprocessing.SemLock$__exit__" +ext_rettype(#10677, #10003) +#10678 = @"C_type$_multiprocessing.SemLock$_count" +ext_rettype(#10678, #10005) +#10679 = @"C_type$_multiprocessing.SemLock$_is_mine" +ext_rettype(#10679, #10058) +#10680 = @"C_type$_multiprocessing.SemLock$_get_value" +ext_rettype(#10680, #10005) +#10681 = @"C_type$_multiprocessing.SemLock$_is_zero" +ext_rettype(#10681, #10058) +#10682 = @"C_type$_multiprocessing.SemLock$_after_fork" +ext_rettype(#10682, #10003) +#10683 = @"C_type$_multiprocessing.Connection$send_bytes" +ext_rettype(#10683, #10003) +#10684 = @"C_type$_multiprocessing.Connection$recv_bytes" +ext_rettype(#10684, #10024) +#10685 = @"C_type$_multiprocessing.Connection$recv_bytes_into" +ext_rettype(#10685, #10005) +#10686 = @"C_type$_multiprocessing.Connection$send" +ext_rettype(#10686, #10003) +#10687 = @"C_type$_multiprocessing.Connection$poll" +ext_rettype(#10687, #10058) +#10688 = @"C_type$_multiprocessing.Connection$fileno" +ext_rettype(#10688, #10005) +#10689 = @"C_type$_multiprocessing.Connection$close" +ext_rettype(#10689, #10003) +#10690 = @"C_type$_ssl._SSLContext$_wrap_socket" +#10691 = @"C_type$_ssl._SSLSocket" +ext_rettype(#10690, #10691) +#10692 = @"C_type$_ssl._SSLContext$set_ciphers" +ext_rettype(#10692, #10003) +#10693 = @"C_type$_ssl._SSLContext$_set_npn_protocols" +ext_rettype(#10693, #10003) +#10694 = @"C_type$_ssl._SSLContext$load_cert_chain" +ext_rettype(#10694, #10003) +#10695 = @"C_type$_ssl._SSLContext$load_dh_params" +ext_rettype(#10695, #10003) +#10696 = @"C_type$_ssl._SSLContext$load_verify_locations" +ext_rettype(#10696, #10003) +#10697 = @"C_type$_ssl._SSLContext$session_stats" +ext_rettype(#10697, #10007) +#10698 = @"C_type$_ssl._SSLContext$set_default_verify_paths" +ext_rettype(#10698, #10003) +#10699 = @"C_type$_ssl._SSLContext$set_ecdh_curve" +ext_rettype(#10699, #10003) +#10700 = @"C_type$_ssl._SSLContext$set_servername_callback" +ext_rettype(#10700, #10003) +#10701 = @"C_type$_ssl._SSLContext$cert_store_stats" +ext_rettype(#10701, #10007) +#10702 = @"C_type$_ssl._SSLContext$get_ca_certs" +ext_rettype(#10702, #10021) +#10703 = @"C_type$_ssl._SSLSocket$do_handshake" +ext_rettype(#10703, #10003) +#10704 = @"C_type$_ssl._SSLSocket$write" +ext_rettype(#10704, #10005) +#10705 = @"C_type$_ssl._SSLSocket$read" +ext_rettype(#10705, #10005) +#10706 = @"C_type$_ssl._SSLSocket$pending" +ext_rettype(#10706, #10005) +#10707 = @"C_type$_ssl._SSLSocket$peer_certificate" +ext_rettype(#10707, #10007) +ext_rettype(#10707, #10024) +ext_rettype(#10707, #10003) +#10708 = @"C_type$_ssl._SSLSocket$cipher" +ext_rettype(#10708, #10001) +ext_rettype(#10708, #10003) +#10709 = @"C_type$_ssl._SSLSocket$version" +ext_rettype(#10709, #10218) +ext_rettype(#10709, #10003) +#10710 = @"C_type$_ssl._SSLSocket$selected_npn_protocol" +ext_rettype(#10710, #10218) +ext_rettype(#10710, #10003) +#10711 = @"C_type$_ssl._SSLSocket$compression" +ext_rettype(#10711, #10024) +ext_rettype(#10711, #10003) +#10712 = @"C_type$_ssl._SSLSocket$shutdown" +ext_rettype(#10712, #10102) +#10713 = @"C_type$_ssl._SSLSocket$tls_unique_cb" +ext_rettype(#10713, #10024) +ext_rettype(#10713, #10003) +#10714 = @"C_type$_sre.SRE_Match$group" +ext_rettype(#10714, #10001) +#10715 = @"C_type$_sre.SRE_Match$start" +ext_rettype(#10715, #10005) +#10716 = @"C_type$_sre.SRE_Match$end" +ext_rettype(#10716, #10005) +#10717 = @"C_type$_sre.SRE_Match$span" +ext_rettype(#10717, #10001) +#10718 = @"C_type$_sre.SRE_Match$groups" +ext_rettype(#10718, #10001) +#10719 = @"C_type$_sre.SRE_Match$groupdict" +ext_rettype(#10719, #10007) +#10720 = @"C_type$_sre.SRE_Scanner$match" +ext_rettype(#10720, #10003) +#10721 = @"C_type$_sre.SRE_Scanner$search" +ext_rettype(#10721, #10003) +#10722 = @"C_type$_sre.SRE_Pattern$match" +ext_rettype(#10722, #10003) +#10723 = @"C_type$_sre.SRE_Pattern$search" +ext_rettype(#10723, #10003) +#10724 = @"C_type$_sre.SRE_Pattern$sub" +ext_rettype(#10724, #10001) +#10725 = @"C_type$_sre.SRE_Pattern$subn" +ext_rettype(#10725, #10001) +#10726 = @"C_type$_sre.SRE_Pattern$split" +ext_rettype(#10726, #10021) +#10727 = @"C_type$_sre.SRE_Pattern$findall" +ext_rettype(#10727, #10021) +#10728 = @"C_type$_sre.SRE_Pattern$finditer" +ext_rettype(#10728, #10656) +#10729 = @"C_type$linuxaudiodev.linux_audio_device$write" +ext_rettype(#10729, #10003) +#10730 = @"C_type$linuxaudiodev.linux_audio_device$setparameters" +ext_rettype(#10730, #10003) +#10731 = @"C_type$linuxaudiodev.linux_audio_device$bufsize" +ext_rettype(#10731, #10005) +#10732 = @"C_type$linuxaudiodev.linux_audio_device$obufcount" +ext_rettype(#10732, #10005) +#10733 = @"C_type$linuxaudiodev.linux_audio_device$obuffree" +ext_rettype(#10733, #10005) +#10734 = @"C_type$linuxaudiodev.linux_audio_device$flush" +ext_rettype(#10734, #10003) +#10735 = @"C_type$linuxaudiodev.linux_audio_device$close" +ext_rettype(#10735, #10003) +#10736 = @"C_type$linuxaudiodev.linux_audio_device$fileno" +ext_rettype(#10736, #10005) +#10737 = @"C_type$linuxaudiodev.linux_audio_device$getptr" +ext_rettype(#10737, #10001) +#10738 = @"C_type$MultibyteCodec$2encode" +ext_rettype(#10738, #10001) +#10739 = @"C_type$MultibyteCodec$2decode" +ext_rettype(#10739, #10001) +#10740 = @"C_type$MultibyteIncrementalEncoder$2encode" +ext_rettype(#10740, #10024) +#10741 = @"C_type$MultibyteIncrementalEncoder$2reset" +ext_rettype(#10741, #10003) +#10742 = @"C_type$MultibyteIncrementalDecoder$2reset" +ext_rettype(#10742, #10003) +#10743 = @"C_type$MultibyteStreamReader$2read" +ext_rettype(#10743, #10218) +#10744 = @"C_type$MultibyteStreamReader$2readline" +ext_rettype(#10744, #10218) +#10745 = @"C_type$MultibyteStreamReader$2readlines" +ext_rettype(#10745, #10021) +#10746 = @"C_type$MultibyteStreamReader$2reset" +ext_rettype(#10746, #10003) +#10747 = @"C_type$MultibyteStreamWriter$2write" +ext_rettype(#10747, #10003) +#10748 = @"C_type$MultibyteStreamWriter$2writelines" +ext_rettype(#10748, #10003) +#10749 = @"C_type$MultibyteStreamWriter$2reset" +ext_rettype(#10749, #10003) +#10750 = @"C_type$deque_iterator$2__length_hint__" +ext_rettype(#10750, #10005) +#10751 = @"C_type$deque_reverse_iterator$2__length_hint__" +ext_rettype(#10751, #10005) +#10752 = @"C_type$collections.deque$append" +ext_rettype(#10752, #10003) +#10753 = @"C_type$collections.deque$appendleft" +ext_rettype(#10753, #10003) +#10754 = @"C_type$collections.deque$clear" +ext_rettype(#10754, #10003) +#10755 = @"C_type$collections.deque$count" +ext_rettype(#10755, #10005) +#10756 = @"C_type$collections.deque$extend" +ext_rettype(#10756, #10003) +#10757 = @"C_type$collections.deque$extendleft" +ext_rettype(#10757, #10003) +#10758 = @"C_type$collections.deque$__reduce__" +ext_rettype(#10758, #10001) +#10759 = @"C_type$collections.deque$remove" +ext_rettype(#10759, #10003) +#10760 = @"C_type$collections.deque$__reversed__" +#10761 = @"C_type$deque_reverse_iterator" +ext_rettype(#10760, #10761) +#10762 = @"C_type$collections.deque$reverse" +ext_rettype(#10762, #10003) +#10763 = @"C_type$collections.deque$rotate" +ext_rettype(#10763, #10003) +#10764 = @"C_type$collections.deque$__sizeof__" +ext_rettype(#10764, #10005) +#10765 = @"C_type$collections.defaultdict$__reduce__" +ext_rettype(#10765, #10001) +#10766 = @"C_type$parser.st$compile" +ext_rettype(#10766, #10082) +#10767 = @"C_type$parser.st$tolist" +ext_rettype(#10767, #10003) +#10768 = @"C_type$parser.st$totuple" +ext_rettype(#10768, #10003) +#10769 = @"C_type$parser.st$__sizeof__" +ext_rettype(#10769, #10005) +#10770 = @"C_type$_socket.socket$accept" +ext_rettype(#10770, #10001) +#10771 = @"C_type$_socket.socket$bind" +ext_rettype(#10771, #10003) +#10772 = @"C_type$_socket.socket$close" +ext_rettype(#10772, #10003) +#10773 = @"C_type$_socket.socket$connect" +ext_rettype(#10773, #10003) +#10774 = @"C_type$_socket.socket$connect_ex" +ext_rettype(#10774, #10005) +#10775 = @"C_type$_socket.socket$dup" +ext_rettype(#10775, #10102) +#10776 = @"C_type$_socket.socket$fileno" +ext_rettype(#10776, #10005) +#10777 = @"C_type$_socket.socket$getpeername" +ext_rettype(#10777, #10001) +ext_rettype(#10777, #10024) +ext_rettype(#10777, #10003) +#10778 = @"C_type$_socket.socket$getsockname" +ext_rettype(#10778, #10001) +ext_rettype(#10778, #10024) +ext_rettype(#10778, #10003) +#10779 = @"C_type$_socket.socket$getsockopt" +ext_rettype(#10779, #10005) +#10780 = @"C_type$_socket.socket$listen" +ext_rettype(#10780, #10003) +#10781 = @"C_type$_socket.socket$makefile" +ext_rettype(#10781, #10250) +#10782 = @"C_type$_socket.socket$recv_into" +ext_rettype(#10782, #10005) +#10783 = @"C_type$_socket.socket$recvfrom" +ext_rettype(#10783, #10001) +#10784 = @"C_type$_socket.socket$recvfrom_into" +ext_rettype(#10784, #10001) +#10785 = @"C_type$_socket.socket$send" +ext_rettype(#10785, #10005) +#10786 = @"C_type$_socket.socket$sendall" +ext_rettype(#10786, #10003) +#10787 = @"C_type$_socket.socket$sendto" +ext_rettype(#10787, #10005) +#10788 = @"C_type$_socket.socket$setblocking" +ext_rettype(#10788, #10003) +#10789 = @"C_type$_socket.socket$settimeout" +ext_rettype(#10789, #10003) +#10790 = @"C_type$_socket.socket$gettimeout" +ext_rettype(#10790, #10038) +ext_rettype(#10790, #10003) +#10791 = @"C_type$_socket.socket$setsockopt" +ext_rettype(#10791, #10003) +#10792 = @"C_type$_socket.socket$shutdown" +ext_rettype(#10792, #10003) +#10793 = @"C_type$itertools.tee$__copy__" +#10794 = @"C_type$itertools.tee" +ext_rettype(#10793, #10794) +#10795 = @"C_type$itertools.count$__reduce__" +ext_rettype(#10795, #10001) +#10796 = @"C_type$itertools.repeat$__length_hint__" +ext_rettype(#10796, #10005) +#10797 = @"C_type$_csv.writer$writerows" +ext_rettype(#10797, #10003) +#10798 = @"C_type$array.array$append" +ext_rettype(#10798, #10003) +#10799 = @"C_type$array.array$buffer_info" +ext_rettype(#10799, #10001) +#10800 = @"C_type$array.array$byteswap" +ext_rettype(#10800, #10003) +#10801 = @"C_type$array.array$count" +ext_rettype(#10801, #10005) +#10802 = @"C_type$array.array$extend" +ext_rettype(#10802, #10003) +#10803 = @"C_type$array.array$fromfile" +ext_rettype(#10803, #10003) +#10804 = @"C_type$array.array$fromlist" +ext_rettype(#10804, #10003) +#10805 = @"C_type$array.array$fromstring" +ext_rettype(#10805, #10003) +#10806 = @"C_type$array.array$fromunicode" +ext_rettype(#10806, #10003) +#10807 = @"C_type$array.array$index" +ext_rettype(#10807, #10005) +#10808 = @"C_type$array.array$insert" +ext_rettype(#10808, #10003) +#10809 = @"C_type$array.array$read" +ext_rettype(#10809, #10003) +#10810 = @"C_type$array.array$__reduce__" +ext_rettype(#10810, #10001) +#10811 = @"C_type$array.array$remove" +ext_rettype(#10811, #10003) +#10812 = @"C_type$array.array$reverse" +ext_rettype(#10812, #10003) +#10813 = @"C_type$array.array$tofile" +ext_rettype(#10813, #10003) +#10814 = @"C_type$array.array$tolist" +ext_rettype(#10814, #10021) +#10815 = @"C_type$array.array$tostring" +ext_rettype(#10815, #10024) +#10816 = @"C_type$array.array$tounicode" +ext_rettype(#10816, #10218) +#10817 = @"C_type$array.array$write" +ext_rettype(#10817, #10003) +#10818 = @"C_type$array.array$__sizeof__" +ext_rettype(#10818, #10005) +#10819 = @"C_type$mmap.mmap$close" +ext_rettype(#10819, #10003) +#10820 = @"C_type$mmap.mmap$find" +ext_rettype(#10820, #10005) +#10821 = @"C_type$mmap.mmap$rfind" +ext_rettype(#10821, #10005) +#10822 = @"C_type$mmap.mmap$flush" +ext_rettype(#10822, #10005) +#10823 = @"C_type$mmap.mmap$move" +ext_rettype(#10823, #10003) +#10824 = @"C_type$mmap.mmap$read" +ext_rettype(#10824, #10024) +#10825 = @"C_type$mmap.mmap$read_byte" +ext_rettype(#10825, #10024) +#10826 = @"C_type$mmap.mmap$readline" +ext_rettype(#10826, #10024) +#10827 = @"C_type$mmap.mmap$resize" +ext_rettype(#10827, #10003) +#10828 = @"C_type$mmap.mmap$seek" +ext_rettype(#10828, #10003) +#10829 = @"C_type$mmap.mmap$size" +ext_rettype(#10829, #10005) +#10830 = @"C_type$mmap.mmap$tell" +ext_rettype(#10830, #10005) +#10831 = @"C_type$mmap.mmap$write" +ext_rettype(#10831, #10003) +#10832 = @"C_type$mmap.mmap$write_byte" +ext_rettype(#10832, #10003) +#10833 = @"C_type$_hotshot.ProfilerType$addinfo" +ext_rettype(#10833, #10003) +#10834 = @"C_type$_hotshot.ProfilerType$close" +ext_rettype(#10834, #10003) +#10835 = @"C_type$_hotshot.ProfilerType$fileno" +ext_rettype(#10835, #10005) +#10836 = @"C_type$_hotshot.ProfilerType$start" +ext_rettype(#10836, #10003) +#10837 = @"C_type$_hotshot.ProfilerType$stop" +ext_rettype(#10837, #10003) +#10838 = @"C_type$_hotshot.LogReaderType$close" +ext_rettype(#10838, #10003) +#10839 = @"C_type$_hotshot.LogReaderType$fileno" +ext_rettype(#10839, #10005) +#10840 = @"C_type$cStringIO.StringO$flush" +ext_rettype(#10840, #10003) +#10841 = @"C_type$cStringIO.StringO$getvalue" +ext_rettype(#10841, #10024) +#10842 = @"C_type$cStringIO.StringO$isatty" +ext_rettype(#10842, #10058) +#10843 = @"C_type$cStringIO.StringO$read" +ext_rettype(#10843, #10024) +#10844 = @"C_type$cStringIO.StringO$readline" +ext_rettype(#10844, #10024) +#10845 = @"C_type$cStringIO.StringO$readlines" +ext_rettype(#10845, #10021) +#10846 = @"C_type$cStringIO.StringO$reset" +ext_rettype(#10846, #10003) +#10847 = @"C_type$cStringIO.StringO$seek" +ext_rettype(#10847, #10003) +#10848 = @"C_type$cStringIO.StringO$tell" +ext_rettype(#10848, #10005) +#10849 = @"C_type$cStringIO.StringO$truncate" +ext_rettype(#10849, #10003) +#10850 = @"C_type$cStringIO.StringO$close" +ext_rettype(#10850, #10003) +#10851 = @"C_type$cStringIO.StringO$write" +ext_rettype(#10851, #10003) +#10852 = @"C_type$cStringIO.StringO$writelines" +ext_rettype(#10852, #10003) +#10853 = @"C_type$cStringIO.StringI$flush" +ext_rettype(#10853, #10003) +#10854 = @"C_type$cStringIO.StringI$getvalue" +ext_rettype(#10854, #10024) +#10855 = @"C_type$cStringIO.StringI$isatty" +ext_rettype(#10855, #10058) +#10856 = @"C_type$cStringIO.StringI$read" +ext_rettype(#10856, #10024) +#10857 = @"C_type$cStringIO.StringI$readline" +ext_rettype(#10857, #10024) +#10858 = @"C_type$cStringIO.StringI$readlines" +ext_rettype(#10858, #10021) +#10859 = @"C_type$cStringIO.StringI$reset" +ext_rettype(#10859, #10003) +#10860 = @"C_type$cStringIO.StringI$seek" +ext_rettype(#10860, #10003) +#10861 = @"C_type$cStringIO.StringI$tell" +ext_rettype(#10861, #10005) +#10862 = @"C_type$cStringIO.StringI$truncate" +ext_rettype(#10862, #10003) +#10863 = @"C_type$cStringIO.StringI$close" +ext_rettype(#10863, #10003) +#10864 = @"C_type$Struct$2pack" +ext_rettype(#10864, #10024) +#10865 = @"C_type$Struct$2pack_into" +ext_rettype(#10865, #10003) +#10866 = @"C_type$Struct$2unpack" +ext_rettype(#10866, #10001) +#10867 = @"C_type$Struct$2unpack_from" +ext_rettype(#10867, #10001) +#10868 = @"C_type$Struct$2__sizeof__" +ext_rettype(#10868, #10005) +#10869 = @"C_type$cPickle.Pickler$dump" +ext_rettype(#10869, #10024) +#10870 = @"C_type$cPickle.Pickler$clear_memo" +ext_rettype(#10870, #10003) +#10871 = @"C_type$cPickle.Pickler$getvalue" +ext_rettype(#10871, #10024) +#10872 = @"C_type$zipimport.zipimporter$find_module" +ext_rettype(#10872, #10003) +#10873 = @"C_type$zipimport.zipimporter$get_data" +ext_rettype(#10873, #10024) +#10874 = @"C_type$zipimport.zipimporter$get_code" +ext_rettype(#10874, #10058) +ext_rettype(#10874, #10038) +ext_rettype(#10874, #10082) +ext_rettype(#10874, #10005) +ext_rettype(#10874, #10517) +ext_rettype(#10874, #10003) +#10875 = @"C_type$zipimport.zipimporter$get_source" +ext_rettype(#10875, #10024) +ext_rettype(#10875, #10003) +#10876 = @"C_type$zipimport.zipimporter$get_filename" +ext_rettype(#10876, #10024) +#10877 = @"C_type$zipimport.zipimporter$is_package" +ext_rettype(#10877, #10058) +#10878 = @"C_type$unicodedata.UCD$decimal" +ext_rettype(#10878, #10005) +#10879 = @"C_type$unicodedata.UCD$digit" +ext_rettype(#10879, #10005) +#10880 = @"C_type$unicodedata.UCD$numeric" +ext_rettype(#10880, #10038) +#10881 = @"C_type$unicodedata.UCD$category" +ext_rettype(#10881, #10024) +#10882 = @"C_type$unicodedata.UCD$bidirectional" +ext_rettype(#10882, #10024) +#10883 = @"C_type$unicodedata.UCD$combining" +ext_rettype(#10883, #10005) +#10884 = @"C_type$unicodedata.UCD$mirrored" +ext_rettype(#10884, #10005) +#10885 = @"C_type$unicodedata.UCD$east_asian_width" +ext_rettype(#10885, #10024) +#10886 = @"C_type$unicodedata.UCD$decomposition" +ext_rettype(#10886, #10024) +#10887 = @"C_type$unicodedata.UCD$name" +ext_rettype(#10887, #10024) +#10888 = @"C_type$unicodedata.UCD$lookup" +ext_rettype(#10888, #10218) +#10889 = @"C_type$xxsubtype.spamlist$getstate" +ext_rettype(#10889, #10005) +#10890 = @"C_type$xxsubtype.spamlist$setstate" +ext_rettype(#10890, #10003) +#10891 = @"C_type$xxsubtype.spamlist$classmeth" +ext_rettype(#10891, #10001) +#10892 = @"C_type$xxsubtype.spamlist$staticmeth" +ext_rettype(#10892, #10001) +#10893 = @"C_type$xxsubtype.spamdict$getstate" +ext_rettype(#10893, #10005) +#10894 = @"C_type$xxsubtype.spamdict$setstate" +ext_rettype(#10894, #10003) +#10895 = @"C_type$_hashlib.HASH$update" +ext_rettype(#10895, #10003) +#10896 = @"C_type$_hashlib.HASH$digest" +ext_rettype(#10896, #10024) +#10897 = @"C_type$_hashlib.HASH$hexdigest" +ext_rettype(#10897, #10024) +#10898 = @"C_type$_hashlib.HASH$copy" +ext_rettype(#10898, #10370) +#10899 = @"C_type$zlib.Compress$flush" +ext_rettype(#10899, #10024) +#10900 = @"C_type$_random.Random$random" +ext_rettype(#10900, #10038) +#10901 = @"C_type$_random.Random$seed" +ext_rettype(#10901, #10003) +#10902 = @"C_type$_random.Random$getstate" +ext_rettype(#10902, #10001) +#10903 = @"C_type$_random.Random$setstate" +ext_rettype(#10903, #10003) +#10904 = @"C_type$_random.Random$jumpahead" +ext_rettype(#10904, #10003) +#10905 = @"C_type$_random.Random$getrandbits" +ext_rettype(#10905, #10005) +#10906 = @"C_type$thread.lock$acquire_lock" +ext_rettype(#10906, #10058) +#10907 = @"C_type$thread.lock$acquire" +ext_rettype(#10907, #10058) +#10908 = @"C_type$thread.lock$release_lock" +ext_rettype(#10908, #10003) +#10909 = @"C_type$thread.lock$release" +ext_rettype(#10909, #10003) +#10910 = @"C_type$thread.lock$locked_lock" +ext_rettype(#10910, #10058) +#10911 = @"C_type$thread.lock$locked" +ext_rettype(#10911, #10058) +#10912 = @"C_type$thread.lock$__enter__" +ext_rettype(#10912, #10058) +#10913 = @"C_type$thread.lock$__exit__" +ext_rettype(#10913, #10003) +#10914 = @"C_type$bz2.BZ2File$readline" +ext_rettype(#10914, #10024) +#10915 = @"C_type$bz2.BZ2File$readlines" +ext_rettype(#10915, #10021) +#10916 = @"C_type$bz2.BZ2File$write" +ext_rettype(#10916, #10003) +#10917 = @"C_type$bz2.BZ2File$writelines" +ext_rettype(#10917, #10003) +#10918 = @"C_type$bz2.BZ2File$seek" +ext_rettype(#10918, #10003) +#10919 = @"C_type$bz2.BZ2File$tell" +ext_rettype(#10919, #10005) +#10920 = @"C_type$bz2.BZ2File$close" +ext_rettype(#10920, #10003) +#10921 = @"C_type$bz2.BZ2File$__exit__" +ext_rettype(#10921, #10003) +#10922 = @"C_type$bz2.BZ2Compressor$compress" +ext_rettype(#10922, #10024) +#10923 = @"C_type$select.poll$register" +ext_rettype(#10923, #10003) +#10924 = @"C_type$select.poll$modify" +ext_rettype(#10924, #10003) +#10925 = @"C_type$select.poll$unregister" +ext_rettype(#10925, #10003) +#10926 = @"C_type$select.poll$poll" +ext_rettype(#10926, #10021) +#10927 = @"C_type$select.epoll$close" +ext_rettype(#10927, #10003) +#10928 = @"C_type$select.epoll$fileno" +ext_rettype(#10928, #10005) +#10929 = @"C_type$select.epoll$modify" +ext_rettype(#10929, #10003) +#10930 = @"C_type$select.epoll$register" +ext_rettype(#10930, #10003) +#10931 = @"C_type$select.epoll$unregister" +ext_rettype(#10931, #10003) +#10932 = @"C_type$select.epoll$poll" +ext_rettype(#10932, #10021) +#10933 = @"C_type$_io.BytesIO$readable" +ext_rettype(#10933, #10058) +#10934 = @"C_type$_io.BytesIO$seekable" +ext_rettype(#10934, #10058) +#10935 = @"C_type$_io.BytesIO$writable" +ext_rettype(#10935, #10058) +#10936 = @"C_type$_io.BytesIO$close" +ext_rettype(#10936, #10003) +#10937 = @"C_type$_io.BytesIO$flush" +ext_rettype(#10937, #10003) +#10938 = @"C_type$_io.BytesIO$isatty" +ext_rettype(#10938, #10058) +#10939 = @"C_type$_io.BytesIO$tell" +ext_rettype(#10939, #10005) +#10940 = @"C_type$_io.BytesIO$write" +ext_rettype(#10940, #10005) +#10941 = @"C_type$_io.BytesIO$writelines" +ext_rettype(#10941, #10003) +#10942 = @"C_type$_io.BytesIO$read1" +ext_rettype(#10942, #10024) +#10943 = @"C_type$_io.BytesIO$readinto" +ext_rettype(#10943, #10005) +#10944 = @"C_type$_io.BytesIO$readline" +ext_rettype(#10944, #10024) +#10945 = @"C_type$_io.BytesIO$readlines" +ext_rettype(#10945, #10021) +#10946 = @"C_type$_io.BytesIO$read" +ext_rettype(#10946, #10024) +#10947 = @"C_type$_io.BytesIO$getvalue" +ext_rettype(#10947, #10024) +#10948 = @"C_type$_io.BytesIO$seek" +ext_rettype(#10948, #10005) +#10949 = @"C_type$_io.BytesIO$truncate" +ext_rettype(#10949, #10005) +#10950 = @"C_type$_io.BytesIO$__getstate__" +ext_rettype(#10950, #10001) +#10951 = @"C_type$_io.BytesIO$__setstate__" +ext_rettype(#10951, #10003) +#10952 = @"C_type$_io.BytesIO$__sizeof__" +ext_rettype(#10952, #10005) +#10953 = @"C_type$_io._BufferedIOBase$readinto" +ext_rettype(#10953, #10005) +#10954 = @"C_type$_io.BufferedReader$close" +ext_rettype(#10954, #10003) +#10955 = @"C_type$_io.BufferedReader$read" +ext_rettype(#10955, #10024) +ext_rettype(#10955, #10218) +ext_rettype(#10955, #10003) +#10956 = @"C_type$_io.BufferedReader$peek" +ext_rettype(#10956, #10024) +ext_rettype(#10956, #10003) +#10957 = @"C_type$_io.BufferedReader$read1" +ext_rettype(#10957, #10024) +ext_rettype(#10957, #10003) +#10958 = @"C_type$_io.BufferedReader$readline" +ext_rettype(#10958, #10024) +ext_rettype(#10958, #10218) +#10959 = @"C_type$_io.BufferedReader$seek" +ext_rettype(#10959, #10005) +ext_rettype(#10959, #10003) +#10960 = @"C_type$_io.BufferedReader$tell" +ext_rettype(#10960, #10005) +#10961 = @"C_type$_io.BufferedReader$truncate" +ext_rettype(#10961, #10003) +#10962 = @"C_type$_io.BufferedReader$__sizeof__" +ext_rettype(#10962, #10005) +#10963 = @"C_type$_io.BufferedRandom$close" +ext_rettype(#10963, #10003) +#10964 = @"C_type$_io.BufferedRandom$flush" +ext_rettype(#10964, #10003) +#10965 = @"C_type$_io.BufferedRandom$seek" +ext_rettype(#10965, #10005) +ext_rettype(#10965, #10003) +#10966 = @"C_type$_io.BufferedRandom$tell" +ext_rettype(#10966, #10005) +#10967 = @"C_type$_io.BufferedRandom$truncate" +ext_rettype(#10967, #10003) +#10968 = @"C_type$_io.BufferedRandom$read" +ext_rettype(#10968, #10024) +ext_rettype(#10968, #10218) +ext_rettype(#10968, #10003) +#10969 = @"C_type$_io.BufferedRandom$read1" +ext_rettype(#10969, #10024) +ext_rettype(#10969, #10003) +#10970 = @"C_type$_io.BufferedRandom$readinto" +ext_rettype(#10970, #10005) +#10971 = @"C_type$_io.BufferedRandom$readline" +ext_rettype(#10971, #10024) +ext_rettype(#10971, #10218) +#10972 = @"C_type$_io.BufferedRandom$peek" +ext_rettype(#10972, #10024) +ext_rettype(#10972, #10003) +#10973 = @"C_type$_io.BufferedRandom$write" +ext_rettype(#10973, #10005) +ext_rettype(#10973, #10003) +#10974 = @"C_type$_io.BufferedRandom$__sizeof__" +ext_rettype(#10974, #10005) +#10975 = @"C_type$_io.BufferedWriter$close" +ext_rettype(#10975, #10003) +#10976 = @"C_type$_io.BufferedWriter$write" +ext_rettype(#10976, #10005) +ext_rettype(#10976, #10003) +#10977 = @"C_type$_io.BufferedWriter$truncate" +ext_rettype(#10977, #10003) +#10978 = @"C_type$_io.BufferedWriter$flush" +ext_rettype(#10978, #10003) +#10979 = @"C_type$_io.BufferedWriter$seek" +ext_rettype(#10979, #10005) +ext_rettype(#10979, #10003) +#10980 = @"C_type$_io.BufferedWriter$tell" +ext_rettype(#10980, #10005) +#10981 = @"C_type$_io.BufferedWriter$__sizeof__" +ext_rettype(#10981, #10005) +#10982 = @"C_type$_io._IOBase$flush" +ext_rettype(#10982, #10003) +#10983 = @"C_type$_io._IOBase$close" +ext_rettype(#10983, #10003) +#10984 = @"C_type$_io._IOBase$seekable" +ext_rettype(#10984, #10058) +#10985 = @"C_type$_io._IOBase$readable" +ext_rettype(#10985, #10058) +#10986 = @"C_type$_io._IOBase$writable" +ext_rettype(#10986, #10058) +#10987 = @"C_type$_io._IOBase$_checkClosed" +ext_rettype(#10987, #10003) +#10988 = @"C_type$_io._IOBase$isatty" +ext_rettype(#10988, #10058) +#10989 = @"C_type$_io._IOBase$readline" +ext_rettype(#10989, #10024) +#10990 = @"C_type$_io._IOBase$readlines" +ext_rettype(#10990, #10021) +#10991 = @"C_type$_io._IOBase$writelines" +ext_rettype(#10991, #10003) +#10992 = @"C_type$_io._RawIOBase$read" +ext_rettype(#10992, #10024) +#10993 = @"C_type$_io._RawIOBase$readall" +ext_rettype(#10993, #10024) +ext_rettype(#10993, #10218) +#10994 = @"C_type$_io.StringIO$close" +ext_rettype(#10994, #10003) +#10995 = @"C_type$_io.StringIO$getvalue" +ext_rettype(#10995, #10218) +#10996 = @"C_type$_io.StringIO$read" +ext_rettype(#10996, #10218) +#10997 = @"C_type$_io.StringIO$readline" +ext_rettype(#10997, #10218) +#10998 = @"C_type$_io.StringIO$tell" +ext_rettype(#10998, #10005) +#10999 = @"C_type$_io.StringIO$truncate" +ext_rettype(#10999, #10005) +#11000 = @"C_type$_io.StringIO$seek" +ext_rettype(#11000, #10005) +#11001 = @"C_type$_io.StringIO$write" +ext_rettype(#11001, #10005) +#11002 = @"C_type$_io.StringIO$seekable" +ext_rettype(#11002, #10058) +#11003 = @"C_type$_io.StringIO$readable" +ext_rettype(#11003, #10058) +#11004 = @"C_type$_io.StringIO$writable" +ext_rettype(#11004, #10058) +#11005 = @"C_type$_io.StringIO$__getstate__" +ext_rettype(#11005, #10001) +#11006 = @"C_type$_io.StringIO$__setstate__" +ext_rettype(#11006, #10003) +#11007 = @"C_type$_io.FileIO$read" +ext_rettype(#11007, #10003) +#11008 = @"C_type$_io.FileIO$readall" +ext_rettype(#11008, #10003) +#11009 = @"C_type$_io.FileIO$readinto" +ext_rettype(#11009, #10005) +ext_rettype(#11009, #10003) +#11010 = @"C_type$_io.FileIO$write" +ext_rettype(#11010, #10005) +ext_rettype(#11010, #10003) +#11011 = @"C_type$_io.FileIO$seek" +ext_rettype(#11011, #10005) +#11012 = @"C_type$_io.FileIO$tell" +ext_rettype(#11012, #10005) +#11013 = @"C_type$_io.FileIO$close" +ext_rettype(#11013, #10003) +#11014 = @"C_type$_io.FileIO$seekable" +ext_rettype(#11014, #10058) +#11015 = @"C_type$_io.FileIO$readable" +ext_rettype(#11015, #10058) +#11016 = @"C_type$_io.FileIO$writable" +ext_rettype(#11016, #10058) +#11017 = @"C_type$_io.FileIO$fileno" +ext_rettype(#11017, #10005) +#11018 = @"C_type$_io.FileIO$isatty" +ext_rettype(#11018, #10058) +#11019 = @"C_type$_io.IncrementalNewlineDecoder$getstate" +ext_rettype(#11019, #10001) +#11020 = @"C_type$_io.IncrementalNewlineDecoder$setstate" +ext_rettype(#11020, #10003) +#11021 = @"C_type$_io.IncrementalNewlineDecoder$reset" +ext_rettype(#11021, #10003) +#11022 = @"C_type$_io.TextIOWrapper$write" +ext_rettype(#11022, #10005) +#11023 = @"C_type$_io.TextIOWrapper$read" +ext_rettype(#11023, #10218) +#11024 = @"C_type$_io.TextIOWrapper$close" +ext_rettype(#11024, #10003) +#11025 = @"C_type$_io.TextIOWrapper$tell" +ext_rettype(#11025, #10005) +#11026 = @"C_type$functools.partial$__reduce__" +ext_rettype(#11026, #10001) +#11027 = @"C_type$functools.partial$__setstate__" +ext_rettype(#11027, #10003) +#11028 = @"C_type$pyexpat.xmlparser$Parse" +ext_rettype(#11028, #10005) +#11029 = @"C_type$pyexpat.xmlparser$ParseFile" +ext_rettype(#11029, #10005) +#11030 = @"C_type$pyexpat.xmlparser$SetBase" +ext_rettype(#11030, #10003) +#11031 = @"C_type$pyexpat.xmlparser$GetBase" +ext_rettype(#11031, #10024) +#11032 = @"C_type$pyexpat.xmlparser$ExternalEntityParserCreate" +ext_rettype(#11032, #10511) +#11033 = @"C_type$pyexpat.xmlparser$SetParamEntityParsing" +ext_rettype(#11033, #10005) +#11034 = @"C_type$pyexpat.xmlparser$GetInputContext" +ext_rettype(#11034, #10024) +ext_rettype(#11034, #10003) +#11035 = @"C_type$pyexpat.xmlparser$UseForeignDTD" +ext_rettype(#11035, #10003) +#11036 = @"C_type$ossaudiodev.oss_audio_device$write" +ext_rettype(#11036, #10005) +#11037 = @"C_type$ossaudiodev.oss_audio_device$writeall" +ext_rettype(#11037, #10003) +#11038 = @"C_type$ossaudiodev.oss_audio_device$close" +ext_rettype(#11038, #10003) +#11039 = @"C_type$ossaudiodev.oss_audio_device$fileno" +ext_rettype(#11039, #10005) +#11040 = @"C_type$ossaudiodev.oss_audio_device$nonblock" +ext_rettype(#11040, #10003) +#11041 = @"C_type$ossaudiodev.oss_audio_device$setfmt" +ext_rettype(#11041, #10005) +#11042 = @"C_type$ossaudiodev.oss_audio_device$getfmts" +ext_rettype(#11042, #10005) +#11043 = @"C_type$ossaudiodev.oss_audio_device$channels" +ext_rettype(#11043, #10005) +#11044 = @"C_type$ossaudiodev.oss_audio_device$speed" +ext_rettype(#11044, #10005) +#11045 = @"C_type$ossaudiodev.oss_audio_device$sync" +ext_rettype(#11045, #10003) +#11046 = @"C_type$ossaudiodev.oss_audio_device$reset" +ext_rettype(#11046, #10003) +#11047 = @"C_type$ossaudiodev.oss_audio_device$post" +ext_rettype(#11047, #10003) +#11048 = @"C_type$ossaudiodev.oss_audio_device$setparameters" +ext_rettype(#11048, #10001) +#11049 = @"C_type$ossaudiodev.oss_audio_device$bufsize" +ext_rettype(#11049, #10005) +#11050 = @"C_type$ossaudiodev.oss_audio_device$obufcount" +ext_rettype(#11050, #10005) +#11051 = @"C_type$ossaudiodev.oss_audio_device$obuffree" +ext_rettype(#11051, #10005) +#11052 = @"C_type$ossaudiodev.oss_audio_device$getptr" +ext_rettype(#11052, #10001) +#11053 = @"C_type$ossaudiodev.oss_audio_device$flush" +ext_rettype(#11053, #10003) +#11054 = @"C_type$ossaudiodev.oss_mixer_device$close" +ext_rettype(#11054, #10003) +#11055 = @"C_type$ossaudiodev.oss_mixer_device$fileno" +ext_rettype(#11055, #10005) +#11056 = @"C_type$ossaudiodev.oss_mixer_device$controls" +ext_rettype(#11056, #10005) +#11057 = @"C_type$ossaudiodev.oss_mixer_device$stereocontrols" +ext_rettype(#11057, #10005) +#11058 = @"C_type$ossaudiodev.oss_mixer_device$reccontrols" +ext_rettype(#11058, #10005) +#11059 = @"C_type$ossaudiodev.oss_mixer_device$get" +ext_rettype(#11059, #10001) +#11060 = @"C_type$ossaudiodev.oss_mixer_device$set" +ext_rettype(#11060, #10001) +#11061 = @"C_type$ossaudiodev.oss_mixer_device$get_recsrc" +ext_rettype(#11061, #10005) +#11062 = @"C_type$ossaudiodev.oss_mixer_device$set_recsrc" +ext_rettype(#11062, #10005) +#11063 = @"C_type$_ctypes._CData$__reduce__" +ext_rettype(#11063, #10001) +#11064 = @"C_type$_ctypes._CData$__setstate__" +ext_rettype(#11064, #10003) +#11065 = @"C_type$_ctypes.PyCPointerType$from_param" +ext_rettype(#11065, #10557) +#11066 = @"C_type$_ctypes.PyCPointerType$set_type" +ext_rettype(#11066, #10003) +#11067 = @"C_type$_ctypes.PyCSimpleType$from_param" +ext_rettype(#11067, #10557) +#11068 = @"C_type$_lsprof.Profiler$enable" +ext_rettype(#11068, #10003) +#11069 = @"C_type$_lsprof.Profiler$disable" +ext_rettype(#11069, #10003) +#11070 = @"C_type$_lsprof.Profiler$clear" +ext_rettype(#11070, #10003) +#11071 = @"C_type$Element$2clear" +ext_rettype(#11071, #10003) +#11072 = @"C_type$Element$2set" +ext_rettype(#11072, #10003) +#11073 = @"C_type$Element$2find" +ext_rettype(#11073, #10003) +#11074 = @"C_type$Element$2findtext" +ext_rettype(#11074, #10024) +#11075 = @"C_type$Element$2findall" +ext_rettype(#11075, #10021) +#11076 = @"C_type$Element$2append" +ext_rettype(#11076, #10003) +#11077 = @"C_type$Element$2extend" +ext_rettype(#11077, #10003) +#11078 = @"C_type$Element$2insert" +ext_rettype(#11078, #10003) +#11079 = @"C_type$Element$2remove" +ext_rettype(#11079, #10003) +#11080 = @"C_type$Element$2getchildren" +ext_rettype(#11080, #10021) +#11081 = @"C_type$Element$2items" +ext_rettype(#11081, #10021) +#11082 = @"C_type$Element$2keys" +ext_rettype(#11082, #10021) +#11083 = @"C_type$Element$2makeelement" +ext_rettype(#11083, #10575) +#11084 = @"C_type$Element$2__copy__" +ext_rettype(#11084, #10575) +#11085 = @"C_type$Element$2__deepcopy__" +ext_rettype(#11085, #10575) +#11086 = @"C_type$Element$!__reduce__" +ext_rettype(#11086, #10001) +#11087 = @"C_type$TreeBuilder$2data" +ext_rettype(#11087, #10003) +#11088 = @"C_type$TreeBuilder$2start" +ext_rettype(#11088, #10575) +#11089 = @"C_type$TreeBuilder$2xml" +ext_rettype(#11089, #10003) +#11090 = @"C_type$TreeBuilder$2close" +ext_rettype(#11090, #10003) +#11091 = @"C_type$XMLParser$2feed" +ext_rettype(#11091, #10003) +#11092 = @"C_type$XMLParser$2close" +ext_rettype(#11092, #10003) +#11093 = @"C_type$XMLParser$2_parse" +ext_rettype(#11093, #10003) +#11094 = @"C_type$XMLParser$2_setevents" +ext_rettype(#11094, #10003) +#11095 = @"C_type$datetime.timedelta$__reduce__" +ext_rettype(#11095, #10001) +#11096 = @"C_type$datetime.time$__format__" +ext_rettype(#11096, #10024) +ext_rettype(#11096, #10218) +#11097 = @"C_type$datetime.time$utcoffset" +ext_rettype(#11097, #10003) +#11098 = @"C_type$datetime.time$tzname" +ext_rettype(#11098, #10003) +#11099 = @"C_type$datetime.time$dst" +ext_rettype(#11099, #10003) +#11100 = @"C_type$datetime.time$__reduce__" +ext_rettype(#11100, #10001) +#11101 = @"C_type$datetime.tzinfo$__reduce__" +ext_rettype(#11101, #10001) +#11102 = @"C_type$datetime.datetime$ctime" +ext_rettype(#11102, #10024) +#11103 = @"C_type$datetime.datetime$utcoffset" +ext_rettype(#11103, #10003) +#11104 = @"C_type$datetime.datetime$tzname" +ext_rettype(#11104, #10003) +#11105 = @"C_type$datetime.datetime$dst" +ext_rettype(#11105, #10003) +#11106 = @"C_type$datetime.datetime$__reduce__" +ext_rettype(#11106, #10001) +#11107 = @"C_type$datetime.date$ctime" +ext_rettype(#11107, #10024) +#11108 = @"C_type$datetime.date$__format__" +ext_rettype(#11108, #10024) +ext_rettype(#11108, #10218) +#11109 = @"C_type$datetime.date$isocalendar" +ext_rettype(#11109, #10001) +#11110 = @"C_type$datetime.date$isoformat" +ext_rettype(#11110, #10024) +#11111 = @"C_type$datetime.date$isoweekday" +ext_rettype(#11111, #10005) +#11112 = @"C_type$datetime.date$toordinal" +ext_rettype(#11112, #10005) +#11113 = @"C_type$datetime.date$weekday" +ext_rettype(#11113, #10005) +#11114 = @"C_type$datetime.date$__reduce__" +ext_rettype(#11114, #10001) +#11115 = @"C_type$_ast.AST$__reduce__" +ext_rettype(#11115, #10001) +#11116 = @"C_type$imp.NullImporter$find_module" +ext_rettype(#11116, #10003) +#11117 = @"C_type$rangeiterator$2__length_hint__" +ext_rettype(#11117, #10005) +#11118 = @"C_type$xrange$2__reversed__" +#11119 = @"C_type$rangeiterator" +ext_rettype(#11118, #11119) +#11120 = @"C_type$xrange$2__reduce__" +ext_rettype(#11120, #10001) +#11121 = @"C_type$reversed$2__length_hint__" +ext_rettype(#11121, #10005) +#11122 = @"C_type$str$2join" +ext_rettype(#11122, #10024) +ext_rettype(#11122, #10218) +#11123 = @"C_type$str$2split" +ext_rettype(#11123, #10021) +#11124 = @"C_type$str$2rsplit" +ext_rettype(#11124, #10021) +#11125 = @"C_type$str$2lower" +ext_rettype(#11125, #10024) +#11126 = @"C_type$str$2upper" +ext_rettype(#11126, #10024) +#11127 = @"C_type$str$2islower" +ext_rettype(#11127, #10058) +#11128 = @"C_type$str$2isupper" +ext_rettype(#11128, #10058) +#11129 = @"C_type$str$2isspace" +ext_rettype(#11129, #10058) +#11130 = @"C_type$str$2isdigit" +ext_rettype(#11130, #10058) +#11131 = @"C_type$str$2istitle" +ext_rettype(#11131, #10058) +#11132 = @"C_type$str$2isalpha" +ext_rettype(#11132, #10058) +#11133 = @"C_type$str$2isalnum" +ext_rettype(#11133, #10058) +#11134 = @"C_type$str$2capitalize" +ext_rettype(#11134, #10024) +#11135 = @"C_type$str$2count" +ext_rettype(#11135, #10005) +#11136 = @"C_type$str$2endswith" +ext_rettype(#11136, #10058) +#11137 = @"C_type$str$2partition" +ext_rettype(#11137, #10001) +#11138 = @"C_type$str$2find" +ext_rettype(#11138, #10005) +#11139 = @"C_type$str$2index" +ext_rettype(#11139, #10005) +#11140 = @"C_type$str$2lstrip" +ext_rettype(#11140, #10024) +ext_rettype(#11140, #10218) +#11141 = @"C_type$str$2replace" +ext_rettype(#11141, #10024) +ext_rettype(#11141, #10218) +#11142 = @"C_type$str$2rfind" +ext_rettype(#11142, #10005) +#11143 = @"C_type$str$2rindex" +ext_rettype(#11143, #10005) +#11144 = @"C_type$str$2rstrip" +ext_rettype(#11144, #10024) +ext_rettype(#11144, #10218) +#11145 = @"C_type$str$2rpartition" +ext_rettype(#11145, #10001) +#11146 = @"C_type$str$2startswith" +ext_rettype(#11146, #10058) +#11147 = @"C_type$str$2strip" +ext_rettype(#11147, #10024) +ext_rettype(#11147, #10218) +#11148 = @"C_type$str$2swapcase" +ext_rettype(#11148, #10024) +#11149 = @"C_type$str$2translate" +ext_rettype(#11149, #10024) +#11150 = @"C_type$str$2title" +ext_rettype(#11150, #10024) +#11151 = @"C_type$str$2ljust" +ext_rettype(#11151, #10024) +#11152 = @"C_type$str$2rjust" +ext_rettype(#11152, #10024) +#11153 = @"C_type$str$2center" +ext_rettype(#11153, #10024) +#11154 = @"C_type$str$2zfill" +ext_rettype(#11154, #10024) +#11155 = @"C_type$str$2__format__" +ext_rettype(#11155, #10024) +ext_rettype(#11155, #10218) +#11156 = @"C_type$str$2_formatter_field_name_split" +ext_rettype(#11156, #10001) +#11157 = @"C_type$str$2_formatter_parser" +#11158 = @"C_type$formatteriterator" +ext_rettype(#11157, #11158) +#11159 = @"C_type$str$2expandtabs" +ext_rettype(#11159, #10024) +#11160 = @"C_type$str$2splitlines" +ext_rettype(#11160, #10021) +#11161 = @"C_type$str$2__sizeof__" +ext_rettype(#11161, #10005) +#11162 = @"C_type$str$2__getnewargs__" +ext_rettype(#11162, #10001) +#11163 = @"C_type$frame$2__sizeof__" +ext_rettype(#11163, #10005) +#11164 = @"C_type$exceptions.BaseException$__reduce__" +ext_rettype(#11164, #10001) +#11165 = @"C_type$exceptions.BaseException$__setstate__" +ext_rettype(#11165, #10003) +#11166 = @"C_type$exceptions.BaseException$__unicode__" +ext_rettype(#11166, #10024) +ext_rettype(#11166, #10218) +#11167 = @"C_type$exceptions.EnvironmentError$__reduce__" +ext_rettype(#11167, #10001) +#11168 = @"C_type$file$2readline" +ext_rettype(#11168, #10024) +#11169 = @"C_type$file$2write" +ext_rettype(#11169, #10003) +#11170 = @"C_type$file$2fileno" +ext_rettype(#11170, #10005) +#11171 = @"C_type$file$2seek" +ext_rettype(#11171, #10003) +#11172 = @"C_type$file$2truncate" +ext_rettype(#11172, #10003) +#11173 = @"C_type$file$2tell" +ext_rettype(#11173, #10005) +#11174 = @"C_type$file$2readinto" +ext_rettype(#11174, #10005) +#11175 = @"C_type$file$2readlines" +ext_rettype(#11175, #10021) +#11176 = @"C_type$file$2xreadlines" +ext_rettype(#11176, #10250) +#11177 = @"C_type$file$2writelines" +ext_rettype(#11177, #10003) +#11178 = @"C_type$file$2flush" +ext_rettype(#11178, #10003) +#11179 = @"C_type$file$2close" +ext_rettype(#11179, #10005) +ext_rettype(#11179, #10003) +#11180 = @"C_type$file$2isatty" +ext_rettype(#11180, #10058) +#11181 = @"C_type$file$2__enter__" +ext_rettype(#11181, #10250) +#11182 = @"C_type$file$2__exit__" +ext_rettype(#11182, #10003) +#11183 = @"C_type$int$2conjugate" +ext_rettype(#11183, #10005) +#11184 = @"C_type$int$2bit_length" +ext_rettype(#11184, #10005) +#11185 = @"C_type$int$2__trunc__" +ext_rettype(#11185, #10005) +#11186 = @"C_type$int$2__getnewargs__" +ext_rettype(#11186, #10001) +#11187 = @"C_type$int$2__format__" +ext_rettype(#11187, #10024) +#11188 = @"C_type$listiterator$2__length_hint__" +ext_rettype(#11188, #10005) +#11189 = @"C_type$listreverseiterator$2__length_hint__" +ext_rettype(#11189, #10005) +#11190 = @"C_type$list$2__getitem__" +ext_rettype(#11190, #10021) +#11191 = @"C_type$list$2__reversed__" +#11192 = @"C_type$listreverseiterator" +ext_rettype(#11191, #11192) +#11193 = @"C_type$list$2__sizeof__" +ext_rettype(#11193, #10005) +#11194 = @"C_type$list$2append" +ext_rettype(#11194, #10003) +#11195 = @"C_type$list$2insert" +ext_rettype(#11195, #10003) +#11196 = @"C_type$list$2extend" +ext_rettype(#11196, #10003) +#11197 = @"C_type$list$2remove" +ext_rettype(#11197, #10003) +#11198 = @"C_type$list$2index" +ext_rettype(#11198, #10005) +#11199 = @"C_type$list$2count" +ext_rettype(#11199, #10005) +#11200 = @"C_type$list$2reverse" +ext_rettype(#11200, #10003) +#11201 = @"C_type$list$2sort" +ext_rettype(#11201, #10003) +#11202 = @"C_type$slice$22indices" +ext_rettype(#11202, #10001) +#11203 = @"C_type$slice$2__reduce__" +ext_rettype(#11203, #10001) +#11204 = @"C_type$dictionary-keyiterator$__length_hint__" +ext_rettype(#11204, #10005) +#11205 = @"C_type$dictionary-valueiterator$__length_hint__" +ext_rettype(#11205, #10005) +#11206 = @"C_type$dictionary-itemiterator$__length_hint__" +ext_rettype(#11206, #10005) +#11207 = @"C_type$dict$2__contains__" +ext_rettype(#11207, #10058) +#11208 = @"C_type$dict$2__sizeof__" +ext_rettype(#11208, #10005) +#11209 = @"C_type$dict$2has_key" +ext_rettype(#11209, #10058) +#11210 = @"C_type$dict$2popitem" +ext_rettype(#11210, #10001) +#11211 = @"C_type$dict$2keys" +ext_rettype(#11211, #10021) +#11212 = @"C_type$dict$2items" +ext_rettype(#11212, #10021) +#11213 = @"C_type$dict$2values" +ext_rettype(#11213, #10021) +#11214 = @"C_type$dict$2update" +ext_rettype(#11214, #10003) +#11215 = @"C_type$dict$2clear" +ext_rettype(#11215, #10003) +#11216 = @"C_type$dict$2copy" +ext_rettype(#11216, #10007) +#11217 = @"C_type$long$2conjugate" +ext_rettype(#11217, #10005) +#11218 = @"C_type$long$2bit_length" +ext_rettype(#11218, #10005) +#11219 = @"C_type$long$2__trunc__" +ext_rettype(#11219, #10005) +#11220 = @"C_type$long$2__getnewargs__" +ext_rettype(#11220, #10001) +#11221 = @"C_type$long$2__format__" +ext_rettype(#11221, #10024) +#11222 = @"C_type$long$2__sizeof__" +ext_rettype(#11222, #10005) +#11223 = @"C_type$generator$2close" +ext_rettype(#11223, #10003) +#11224 = @"C_type$complex$2conjugate" +ext_rettype(#11224, #10517) +#11225 = @"C_type$complex$2__getnewargs__" +ext_rettype(#11225, #10001) +#11226 = @"C_type$complex$2__format__" +ext_rettype(#11226, #10024) +#11227 = @"C_type$type$2mro" +ext_rettype(#11227, #10001) +#11228 = @"C_type$type$2__subclasses__" +ext_rettype(#11228, #10021) +#11229 = @"C_type$type$2__instancecheck__" +ext_rettype(#11229, #10058) +#11230 = @"C_type$type$2__subclasscheck__" +ext_rettype(#11230, #10058) +#11231 = @"C_type$object$2__reduce_ex__" +ext_rettype(#11231, #10001) +#11232 = @"C_type$object$2__reduce__" +ext_rettype(#11232, #10001) +#11233 = @"C_type$object$2__format__" +ext_rettype(#11233, #10024) +ext_rettype(#11233, #10218) +#11234 = @"C_type$object$2__sizeof__" +ext_rettype(#11234, #10005) +#11235 = @"C_type$setiterator$2__length_hint__" +ext_rettype(#11235, #10005) +#11236 = @"C_type$frozenset$2__contains__" +ext_rettype(#11236, #10058) +#11237 = @"C_type$frozenset$2copy" +#11238 = @"C_type$set" +ext_rettype(#11237, #11238) +#11239 = @"C_type$frozenset" +ext_rettype(#11237, #11239) +#11240 = @"C_type$frozenset$2difference" +ext_rettype(#11240, #11238) +ext_rettype(#11240, #11239) +#11241 = @"C_type$frozenset$2intersection" +ext_rettype(#11241, #11238) +ext_rettype(#11241, #11239) +#11242 = @"C_type$frozenset$2isdisjoint" +ext_rettype(#11242, #10058) +#11243 = @"C_type$frozenset$2issubset" +ext_rettype(#11243, #10058) +#11244 = @"C_type$frozenset$2issuperset" +ext_rettype(#11244, #10058) +#11245 = @"C_type$frozenset$2__reduce__" +ext_rettype(#11245, #10001) +#11246 = @"C_type$frozenset$2__sizeof__" +ext_rettype(#11246, #10005) +#11247 = @"C_type$frozenset$2symmetric_difference" +ext_rettype(#11247, #11238) +ext_rettype(#11247, #11239) +#11248 = @"C_type$frozenset$2union" +ext_rettype(#11248, #11238) +ext_rettype(#11248, #11239) +#11249 = @"C_type$set$2add" +ext_rettype(#11249, #10003) +#11250 = @"C_type$set$2clear" +ext_rettype(#11250, #10003) +#11251 = @"C_type$set$2__contains__" +ext_rettype(#11251, #10058) +#11252 = @"C_type$set$2copy" +ext_rettype(#11252, #11238) +ext_rettype(#11252, #11239) +#11253 = @"C_type$set$2discard" +ext_rettype(#11253, #10003) +#11254 = @"C_type$set$2difference" +ext_rettype(#11254, #11238) +ext_rettype(#11254, #11239) +#11255 = @"C_type$set$2difference_update" +ext_rettype(#11255, #10003) +#11256 = @"C_type$set$2intersection" +ext_rettype(#11256, #11238) +ext_rettype(#11256, #11239) +#11257 = @"C_type$set$2intersection_update" +ext_rettype(#11257, #10003) +#11258 = @"C_type$set$2isdisjoint" +ext_rettype(#11258, #10058) +#11259 = @"C_type$set$2issubset" +ext_rettype(#11259, #10058) +#11260 = @"C_type$set$2issuperset" +ext_rettype(#11260, #10058) +#11261 = @"C_type$set$2__reduce__" +ext_rettype(#11261, #10001) +#11262 = @"C_type$set$2remove" +ext_rettype(#11262, #10003) +#11263 = @"C_type$set$2__sizeof__" +ext_rettype(#11263, #10005) +#11264 = @"C_type$set$2symmetric_difference" +ext_rettype(#11264, #11238) +ext_rettype(#11264, #11239) +#11265 = @"C_type$set$2symmetric_difference_update" +ext_rettype(#11265, #10003) +#11266 = @"C_type$set$2union" +ext_rettype(#11266, #11238) +ext_rettype(#11266, #11239) +#11267 = @"C_type$set$2update" +ext_rettype(#11267, #10003) +#11268 = @"C_type$iterator$2__length_hint__" +ext_rettype(#11268, #10005) +#11269 = @"C_type$float$2conjugate" +ext_rettype(#11269, #10038) +#11270 = @"C_type$float$2__trunc__" +ext_rettype(#11270, #10005) +#11271 = @"C_type$float$2as_integer_ratio" +ext_rettype(#11271, #10001) +#11272 = @"C_type$float$2hex" +ext_rettype(#11272, #10024) +#11273 = @"C_type$float$2is_integer" +ext_rettype(#11273, #10058) +#11274 = @"C_type$float$2__getnewargs__" +ext_rettype(#11274, #10001) +#11275 = @"C_type$float$2__getformat__" +ext_rettype(#11275, #10024) +#11276 = @"C_type$float$2__setformat__" +ext_rettype(#11276, #10003) +#11277 = @"C_type$float$2__format__" +ext_rettype(#11277, #10024) +#11278 = @"C_type$dictproxy$2has_key" +ext_rettype(#11278, #10058) +#11279 = @"C_type$bytearray_iterator$2__length_hint__" +ext_rettype(#11279, #10005) +#11280 = @"C_type$bytearray$2__alloc__" +ext_rettype(#11280, #10005) +#11281 = @"C_type$bytearray$2__reduce__" +ext_rettype(#11281, #10001) +#11282 = @"C_type$bytearray$2__sizeof__" +ext_rettype(#11282, #10005) +#11283 = @"C_type$bytearray$2append" +ext_rettype(#11283, #10003) +#11284 = @"C_type$bytearray$2capitalize" +#11285 = @"C_type$bytearray" +ext_rettype(#11284, #11285) +#11286 = @"C_type$bytearray$2center" +ext_rettype(#11286, #11285) +#11287 = @"C_type$bytearray$2count" +ext_rettype(#11287, #10005) +#11288 = @"C_type$bytearray$2endswith" +ext_rettype(#11288, #10058) +#11289 = @"C_type$bytearray$2expandtabs" +ext_rettype(#11289, #11285) +#11290 = @"C_type$bytearray$2extend" +ext_rettype(#11290, #10003) +#11291 = @"C_type$bytearray$2find" +ext_rettype(#11291, #10005) +#11292 = @"C_type$bytearray$2fromhex" +ext_rettype(#11292, #11285) +#11293 = @"C_type$bytearray$2index" +ext_rettype(#11293, #10005) +#11294 = @"C_type$bytearray$2insert" +ext_rettype(#11294, #10003) +#11295 = @"C_type$bytearray$2isalnum" +ext_rettype(#11295, #10058) +#11296 = @"C_type$bytearray$2isalpha" +ext_rettype(#11296, #10058) +#11297 = @"C_type$bytearray$2isdigit" +ext_rettype(#11297, #10058) +#11298 = @"C_type$bytearray$2islower" +ext_rettype(#11298, #10058) +#11299 = @"C_type$bytearray$2isspace" +ext_rettype(#11299, #10058) +#11300 = @"C_type$bytearray$2istitle" +ext_rettype(#11300, #10058) +#11301 = @"C_type$bytearray$2isupper" +ext_rettype(#11301, #10058) +#11302 = @"C_type$bytearray$2join" +ext_rettype(#11302, #11285) +#11303 = @"C_type$bytearray$2ljust" +ext_rettype(#11303, #11285) +#11304 = @"C_type$bytearray$2lower" +ext_rettype(#11304, #11285) +#11305 = @"C_type$bytearray$2lstrip" +ext_rettype(#11305, #11285) +#11306 = @"C_type$bytearray$2partition" +ext_rettype(#11306, #10001) +#11307 = @"C_type$bytearray$2pop" +ext_rettype(#11307, #10005) +#11308 = @"C_type$bytearray$2remove" +ext_rettype(#11308, #10003) +#11309 = @"C_type$bytearray$2replace" +ext_rettype(#11309, #11285) +#11310 = @"C_type$bytearray$2reverse" +ext_rettype(#11310, #10003) +#11311 = @"C_type$bytearray$2rfind" +ext_rettype(#11311, #10005) +#11312 = @"C_type$bytearray$2rindex" +ext_rettype(#11312, #10005) +#11313 = @"C_type$bytearray$2rjust" +ext_rettype(#11313, #11285) +#11314 = @"C_type$bytearray$2rpartition" +ext_rettype(#11314, #10001) +#11315 = @"C_type$bytearray$2rsplit" +ext_rettype(#11315, #10021) +#11316 = @"C_type$bytearray$2rstrip" +ext_rettype(#11316, #11285) +#11317 = @"C_type$bytearray$2split" +ext_rettype(#11317, #10021) +#11318 = @"C_type$bytearray$2splitlines" +ext_rettype(#11318, #10021) +#11319 = @"C_type$bytearray$2startswith" +ext_rettype(#11319, #10058) +#11320 = @"C_type$bytearray$2strip" +ext_rettype(#11320, #11285) +#11321 = @"C_type$bytearray$2swapcase" +ext_rettype(#11321, #11285) +#11322 = @"C_type$bytearray$2title" +ext_rettype(#11322, #11285) +#11323 = @"C_type$bytearray$2translate" +ext_rettype(#11323, #11285) +#11324 = @"C_type$bytearray$2upper" +ext_rettype(#11324, #11285) +#11325 = @"C_type$bytearray$2zfill" +ext_rettype(#11325, #11285) +#11326 = @"C_type$unicode$2replace" +ext_rettype(#11326, #10218) +#11327 = @"C_type$unicode$2split" +ext_rettype(#11327, #10021) +#11328 = @"C_type$unicode$2rsplit" +ext_rettype(#11328, #10021) +#11329 = @"C_type$unicode$2join" +ext_rettype(#11329, #10218) +#11330 = @"C_type$unicode$2capitalize" +ext_rettype(#11330, #10218) +#11331 = @"C_type$unicode$2title" +ext_rettype(#11331, #10218) +#11332 = @"C_type$unicode$2center" +ext_rettype(#11332, #10218) +#11333 = @"C_type$unicode$2count" +ext_rettype(#11333, #10005) +#11334 = @"C_type$unicode$2expandtabs" +ext_rettype(#11334, #10218) +#11335 = @"C_type$unicode$2find" +ext_rettype(#11335, #10005) +#11336 = @"C_type$unicode$2partition" +ext_rettype(#11336, #10001) +#11337 = @"C_type$unicode$2index" +ext_rettype(#11337, #10005) +#11338 = @"C_type$unicode$2ljust" +ext_rettype(#11338, #10218) +#11339 = @"C_type$unicode$2lower" +ext_rettype(#11339, #10218) +#11340 = @"C_type$unicode$2lstrip" +ext_rettype(#11340, #10218) +#11341 = @"C_type$unicode$2rfind" +ext_rettype(#11341, #10005) +#11342 = @"C_type$unicode$2rindex" +ext_rettype(#11342, #10005) +#11343 = @"C_type$unicode$2rjust" +ext_rettype(#11343, #10218) +#11344 = @"C_type$unicode$2rstrip" +ext_rettype(#11344, #10218) +#11345 = @"C_type$unicode$2rpartition" +ext_rettype(#11345, #10001) +#11346 = @"C_type$unicode$2splitlines" +ext_rettype(#11346, #10021) +#11347 = @"C_type$unicode$2strip" +ext_rettype(#11347, #10218) +#11348 = @"C_type$unicode$2swapcase" +ext_rettype(#11348, #10218) +#11349 = @"C_type$unicode$2upper" +ext_rettype(#11349, #10218) +#11350 = @"C_type$unicode$2startswith" +ext_rettype(#11350, #10058) +#11351 = @"C_type$unicode$2endswith" +ext_rettype(#11351, #10058) +#11352 = @"C_type$unicode$2islower" +ext_rettype(#11352, #10058) +#11353 = @"C_type$unicode$2isupper" +ext_rettype(#11353, #10058) +#11354 = @"C_type$unicode$2istitle" +ext_rettype(#11354, #10058) +#11355 = @"C_type$unicode$2isspace" +ext_rettype(#11355, #10058) +#11356 = @"C_type$unicode$2isdecimal" +ext_rettype(#11356, #10058) +#11357 = @"C_type$unicode$2isdigit" +ext_rettype(#11357, #10058) +#11358 = @"C_type$unicode$2isnumeric" +ext_rettype(#11358, #10058) +#11359 = @"C_type$unicode$2isalpha" +ext_rettype(#11359, #10058) +#11360 = @"C_type$unicode$2isalnum" +ext_rettype(#11360, #10058) +#11361 = @"C_type$unicode$2zfill" +ext_rettype(#11361, #10218) +#11362 = @"C_type$unicode$2__format__" +ext_rettype(#11362, #10024) +ext_rettype(#11362, #10218) +#11363 = @"C_type$unicode$2_formatter_field_name_split" +ext_rettype(#11363, #10001) +#11364 = @"C_type$unicode$2_formatter_parser" +ext_rettype(#11364, #11158) +#11365 = @"C_type$unicode$2__sizeof__" +ext_rettype(#11365, #10005) +#11366 = @"C_type$unicode$2__getnewargs__" +ext_rettype(#11366, #10001) +#11367 = @"C_type$EncodingMap$2size" +ext_rettype(#11367, #10005) +#11368 = @"C_type$memoryview$2tobytes" +ext_rettype(#11368, #10024) +#11369 = @"C_type$memoryview$2tolist" +ext_rettype(#11369, #10021) +#11370 = @"C_type$tupleiterator$2__length_hint__" +ext_rettype(#11370, #10005) +#11371 = @"C_type$tuple$2__getnewargs__" +ext_rettype(#11371, #10001) +#11372 = @"C_type$tuple$2__sizeof__" +ext_rettype(#11372, #10005) +#11373 = @"C_type$tuple$2index" +ext_rettype(#11373, #10005) +#11374 = @"C_type$tuple$2count" +ext_rettype(#11374, #10005) +#11375 = @"C_type$object" +ext_argtype(#10000, 0, #11375) +#11376 = @"C_builtin_function_or_method$_heapq.heappop" +ext_argtype(#11376, 0, #11375) +ext_argtype(#10019, 0, #11375) +ext_argtype(#10020, 0, #10005) +ext_argtype(#10020, 1, #11375) +ext_argtype(#10022, 0, #10005) +ext_argtype(#10022, 1, #11375) +#11377 = @"C_type$buffer" +ext_argtype(#10023, 0, #11377) +ext_argtype(#10023, 1, #10024) +ext_argtype(#10023, 1, #10218) +ext_argtype(#10023, 2, #10024) +ext_argtype(#10023, 2, #10218) +ext_argtype(#10025, 0, #10024) +ext_argtype(#10025, 0, #10218) +ext_argtype(#10025, 1, #10024) +ext_argtype(#10025, 1, #10218) +ext_argtype(#10026, 0, #10024) +ext_argtype(#10026, 0, #10218) +#11378 = @"C_builtin_function_or_method$pwd.getpwuid" +ext_argtype(#11378, 0, #11375) +#11379 = @"C_builtin_function_or_method$pwd.getpwnam" +ext_argtype(#11379, 0, #10024) +ext_argtype(#11379, 0, #10218) +ext_argtype(#10029, 0, #10024) +ext_argtype(#10029, 0, #10218) +ext_argtype(#10029, 1, #10005) +ext_argtype(#10030, 0, #10024) +ext_argtype(#10030, 0, #10218) +ext_argtype(#10030, 1, #10005) +ext_argtype(#10031, 0, #10024) +ext_argtype(#10031, 0, #10218) +ext_argtype(#10031, 1, #10005) +ext_argtype(#10032, 0, #10024) +ext_argtype(#10032, 0, #10218) +ext_argtype(#10032, 1, #10005) +ext_argtype(#10033, 0, #10024) +ext_argtype(#10033, 0, #10218) +ext_argtype(#10033, 1, #10005) +ext_argtype(#10034, 0, #10024) +ext_argtype(#10034, 0, #10218) +ext_argtype(#10034, 1, #10005) +ext_argtype(#10035, 0, #10024) +ext_argtype(#10035, 0, #10218) +ext_argtype(#10035, 1, #10024) +ext_argtype(#10035, 1, #10218) +ext_argtype(#10036, 0, #10024) +ext_argtype(#10036, 0, #10218) +ext_argtype(#10036, 1, #10005) +ext_argtype(#10037, 0, #10024) +ext_argtype(#10037, 0, #10218) +ext_argtype(#10037, 1, #10024) +ext_argtype(#10037, 1, #10218) +ext_argtype(#10039, 0, #10024) +ext_argtype(#10039, 0, #10218) +ext_argtype(#10039, 1, #10005) +ext_argtype(#10040, 0, #10024) +ext_argtype(#10040, 0, #10218) +ext_argtype(#10040, 1, #10005) +ext_argtype(#10040, 2, #10038) +ext_argtype(#10041, 0, #10024) +ext_argtype(#10041, 0, #10218) +ext_argtype(#10041, 1, #10024) +ext_argtype(#10041, 1, #10218) +ext_argtype(#10041, 2, #10005) +ext_argtype(#10042, 0, #10024) +ext_argtype(#10042, 0, #10218) +ext_argtype(#10042, 1, #10005) +ext_argtype(#10042, 2, #10005) +ext_argtype(#10043, 0, #10024) +ext_argtype(#10043, 0, #10218) +ext_argtype(#10043, 1, #10005) +ext_argtype(#10044, 0, #10024) +ext_argtype(#10044, 0, #10218) +ext_argtype(#10044, 1, #10005) +ext_argtype(#10045, 0, #10024) +ext_argtype(#10045, 0, #10218) +ext_argtype(#10045, 1, #10005) +ext_argtype(#10046, 0, #10024) +ext_argtype(#10046, 0, #10218) +ext_argtype(#10046, 1, #10005) +ext_argtype(#10047, 0, #10024) +ext_argtype(#10047, 0, #10218) +ext_argtype(#10047, 1, #10005) +ext_argtype(#10047, 2, #10005) +ext_argtype(#10048, 0, #10024) +ext_argtype(#10048, 0, #10218) +ext_argtype(#10048, 1, #10005) +ext_argtype(#10048, 2, #11375) +ext_argtype(#10049, 0, #10024) +ext_argtype(#10049, 0, #10218) +ext_argtype(#10049, 1, #10005) +ext_argtype(#10049, 2, #11375) +ext_argtype(#10050, 0, #10024) +ext_argtype(#10050, 0, #10218) +ext_argtype(#10050, 1, #10005) +ext_argtype(#10050, 2, #10038) +ext_argtype(#10050, 3, #10038) +ext_argtype(#10051, 0, #10024) +ext_argtype(#10051, 0, #10218) +ext_argtype(#10051, 1, #10005) +ext_argtype(#10051, 2, #10038) +ext_argtype(#10051, 3, #10038) +ext_argtype(#10052, 0, #10024) +ext_argtype(#10052, 0, #10218) +ext_argtype(#10052, 1, #10005) +ext_argtype(#10052, 2, #10005) +ext_argtype(#10053, 0, #10024) +ext_argtype(#10053, 0, #10218) +ext_argtype(#10053, 1, #10005) +ext_argtype(#10054, 0, #10024) +ext_argtype(#10054, 0, #10218) +ext_argtype(#10054, 1, #10005) +ext_argtype(#10054, 2, #10005) +ext_argtype(#10054, 3, #10005) +ext_argtype(#10054, 4, #10005) +ext_argtype(#10054, 5, #11375) +ext_argtype(#10054, 6, #10005) +ext_argtype(#10054, 7, #10005) +#11380 = @"C_builtin_function_or_method$_codecs_jp.getcodec" +ext_argtype(#11380, 0, #11375) +#11381 = @"C_builtin_function_or_method$_codecs_tw.getcodec" +ext_argtype(#11381, 0, #11375) +#11382 = @"C_builtin_function_or_method$_codecs_kr.getcodec" +ext_argtype(#11382, 0, #11375) +#11383 = @"C_builtin_function_or_method$_codecs_cn.getcodec" +ext_argtype(#11383, 0, #11375) +#11384 = @"C_builtin_function_or_method$_codecs_iso2022.getcodec" +ext_argtype(#11384, 0, #11375) +#11385 = @"C_builtin_function_or_method$_codecs_hk.getcodec" +ext_argtype(#11385, 0, #11375) +ext_argtype(#10055, 0, #11375) +ext_argtype(#10057, 0, #11375) +ext_argtype(#10059, 0, #11375) +ext_argtype(#10060, 0, #11375) +ext_argtype(#10061, 0, #11375) +ext_argtype(#10067, 0, #11375) +#11386 = @"C_builtin_function_or_method$operator.index" +ext_argtype(#11386, 0, #11375) +#11387 = @"C_builtin_function_or_method$operator.__index__" +ext_argtype(#11387, 0, #11375) +#11388 = @"C_builtin_function_or_method$operator.neg" +ext_argtype(#11388, 0, #11375) +#11389 = @"C_builtin_function_or_method$operator.__neg__" +ext_argtype(#11389, 0, #11375) +#11390 = @"C_builtin_function_or_method$operator.pos" +ext_argtype(#11390, 0, #11375) +#11391 = @"C_builtin_function_or_method$operator.__pos__" +ext_argtype(#11391, 0, #11375) +#11392 = @"C_builtin_function_or_method$operator.abs" +ext_argtype(#11392, 0, #11375) +#11393 = @"C_builtin_function_or_method$operator.__abs__" +ext_argtype(#11393, 0, #11375) +#11394 = @"C_builtin_function_or_method$operator.inv" +ext_argtype(#11394, 0, #11375) +#11395 = @"C_builtin_function_or_method$operator.__inv__" +ext_argtype(#11395, 0, #11375) +#11396 = @"C_builtin_function_or_method$operator.invert" +ext_argtype(#11396, 0, #11375) +#11397 = @"C_builtin_function_or_method$operator.__invert__" +ext_argtype(#11397, 0, #11375) +ext_argtype(#10068, 0, #11375) +ext_argtype(#10069, 0, #11375) +#11398 = @"C_builtin_function_or_method$operator.repeat" +ext_argtype(#11398, 0, #11375) +ext_argtype(#11398, 1, #10005) +#11399 = @"C_builtin_function_or_method$operator.__repeat__" +ext_argtype(#11399, 0, #11375) +ext_argtype(#11399, 1, #10005) +#11400 = @"C_builtin_function_or_method$operator.irepeat" +ext_argtype(#11400, 0, #11375) +ext_argtype(#11400, 1, #10005) +#11401 = @"C_builtin_function_or_method$operator.__irepeat__" +ext_argtype(#11401, 0, #11375) +ext_argtype(#11401, 1, #10005) +#11402 = @"C_builtin_function_or_method$operator.getslice" +ext_argtype(#11402, 0, #11375) +ext_argtype(#11402, 1, #10005) +ext_argtype(#11402, 2, #10005) +#11403 = @"C_builtin_function_or_method$operator.__getslice__" +ext_argtype(#11403, 0, #11375) +ext_argtype(#11403, 1, #10005) +ext_argtype(#11403, 2, #10005) +ext_argtype(#10074, 0, #11375) +ext_argtype(#10074, 1, #10005) +ext_argtype(#10074, 2, #10005) +ext_argtype(#10074, 3, #11375) +ext_argtype(#10075, 0, #11375) +ext_argtype(#10075, 1, #10005) +ext_argtype(#10075, 2, #10005) +ext_argtype(#10075, 3, #11375) +ext_argtype(#10076, 0, #11375) +ext_argtype(#10076, 1, #10005) +ext_argtype(#10076, 2, #10005) +ext_argtype(#10077, 0, #11375) +ext_argtype(#10077, 1, #10005) +ext_argtype(#10077, 2, #10005) +ext_argtype(#10078, 0, #11375) +ext_argtype(#10078, 1, #11375) +ext_argtype(#10088, 0, #11375) +ext_argtype(#10092, 0, #11375) +ext_argtype(#10093, 0, #10085) +ext_argtype(#10094, 0, #10024) +ext_argtype(#10094, 0, #10218) +ext_argtype(#10095, 0, #10024) +ext_argtype(#10095, 0, #10218) +ext_argtype(#10096, 0, #10024) +ext_argtype(#10096, 0, #10218) +ext_argtype(#10098, 0, #10024) +ext_argtype(#10098, 0, #10218) +ext_argtype(#10098, 1, #10024) +ext_argtype(#10098, 1, #10218) +ext_argtype(#10099, 0, #10005) +ext_argtype(#10099, 1, #10024) +ext_argtype(#10099, 1, #10218) +ext_argtype(#10100, 0, #10024) +ext_argtype(#10100, 0, #10218) +ext_argtype(#10101, 0, #10005) +ext_argtype(#10101, 1, #10005) +ext_argtype(#10101, 2, #10005) +ext_argtype(#10101, 3, #10005) +ext_argtype(#10103, 0, #10005) +ext_argtype(#10103, 1, #10005) +ext_argtype(#10103, 2, #10005) +ext_argtype(#10104, 0, #10005) +ext_argtype(#10105, 0, #11375) +ext_argtype(#10106, 0, #10005) +ext_argtype(#10107, 0, #11375) +ext_argtype(#10108, 0, #10024) +ext_argtype(#10108, 0, #10218) +ext_argtype(#10109, 0, #10024) +ext_argtype(#10109, 0, #10218) +ext_argtype(#10110, 0, #10005) +ext_argtype(#10110, 1, #10024) +ext_argtype(#10110, 1, #10218) +ext_argtype(#10111, 0, #10005) +ext_argtype(#10111, 1, #10024) +ext_argtype(#10111, 1, #10218) +ext_argtype(#10112, 0, #11375) +ext_argtype(#10112, 1, #11375) +ext_argtype(#10112, 2, #10005) +ext_argtype(#10112, 3, #10005) +ext_argtype(#10112, 4, #10005) +ext_argtype(#10112, 5, #10005) +ext_argtype(#10113, 0, #11375) +ext_argtype(#10113, 1, #10005) +ext_argtype(#10115, 0, #11375) +ext_argtype(#10116, 0, #11375) +ext_argtype(#10116, 1, #10005) +ext_argtype(#10117, 0, #11375) +ext_argtype(#10118, 0, #11375) +ext_argtype(#10119, 0, #11375) +ext_argtype(#10120, 0, #11375) +ext_argtype(#10121, 0, #11375) +ext_argtype(#10123, 0, #11375) +ext_argtype(#10124, 0, #11375) +ext_argtype(#10126, 0, #11375) +ext_argtype(#10127, 0, #11375) +ext_argtype(#10128, 0, #11375) +ext_argtype(#10129, 0, #11375) +ext_argtype(#10130, 0, #11375) +ext_argtype(#10131, 0, #11375) +ext_argtype(#10132, 0, #11375) +ext_argtype(#10133, 0, #11375) +ext_argtype(#10134, 0, #11375) +ext_argtype(#10135, 0, #11375) +ext_argtype(#10137, 0, #11375) +ext_argtype(#10138, 0, #11375) +ext_argtype(#10139, 0, #11375) +ext_argtype(#10141, 0, #11375) +ext_argtype(#10142, 0, #11375) +ext_argtype(#10143, 0, #10038) +ext_argtype(#10143, 1, #11375) +ext_argtype(#10144, 0, #11375) +ext_argtype(#10146, 0, #11375) +ext_argtype(#10147, 0, #11375) +ext_argtype(#10148, 0, #11375) +ext_argtype(#10150, 0, #11375) +ext_argtype(#10151, 0, #11375) +ext_argtype(#10152, 0, #11375) +ext_argtype(#10153, 0, #11375) +ext_argtype(#10154, 0, #11375) +ext_argtype(#10155, 0, #11375) +#11404 = @"C_builtin_function_or_method$math.trunc" +ext_argtype(#11404, 0, #11375) +#11405 = @"C_builtin_function_or_method$_symtable.symtable" +ext_argtype(#11405, 0, #10024) +ext_argtype(#11405, 0, #10218) +ext_argtype(#11405, 1, #10024) +ext_argtype(#11405, 1, #10218) +ext_argtype(#11405, 2, #10024) +ext_argtype(#11405, 2, #10218) +ext_argtype(#10156, 0, #10005) +ext_argtype(#10157, 0, #10005) +ext_argtype(#10157, 1, #10038) +ext_argtype(#10157, 2, #10038) +ext_argtype(#10158, 0, #10005) +ext_argtype(#10159, 0, #10005) +ext_argtype(#10159, 1, #11375) +ext_argtype(#10160, 0, #10005) +ext_argtype(#10161, 0, #10005) +ext_argtype(#10162, 0, #10005) +ext_argtype(#10162, 1, #10005) +ext_argtype(#10170, 0, #11375) +#11406 = @"C_builtin_function_or_method$_csv.get_dialect" +ext_argtype(#11406, 0, #11375) +ext_argtype(#10175, 0, #10005) +ext_argtype(#10178, 0, #10005) +ext_argtype(#10178, 1, #10005) +ext_argtype(#10178, 2, #10005) +ext_argtype(#10180, 0, #10005) +ext_argtype(#10182, 0, #11375) +ext_argtype(#10185, 0, #11375) +ext_argtype(#10186, 0, #11375) +ext_argtype(#10186, 1, #10005) +ext_argtype(#10186, 2, #11375) +ext_argtype(#10187, 0, #11375) +ext_argtype(#10187, 1, #10005) +ext_argtype(#10188, 0, #11375) +ext_argtype(#10189, 0, #11375) +ext_argtype(#10189, 1, #10005) +ext_argtype(#10190, 0, #11375) +ext_argtype(#10190, 1, #10005) +#11407 = @"C_builtin_function_or_method$grp.getgrgid" +ext_argtype(#11407, 0, #11375) +#11408 = @"C_builtin_function_or_method$grp.getgrnam" +ext_argtype(#11408, 0, #11375) +ext_argtype(#10194, 0, #10038) +ext_argtype(#10197, 0, #11375) +ext_argtype(#10198, 0, #10024) +ext_argtype(#10198, 0, #10218) +ext_argtype(#10198, 1, #11375) +ext_argtype(#10200, 0, #10024) +ext_argtype(#10200, 0, #10218) +ext_argtype(#10202, 0, #10024) +ext_argtype(#10202, 0, #10218) +ext_argtype(#10202, 1, #10005) +ext_argtype(#10202, 2, #10005) +ext_argtype(#10203, 0, #10024) +ext_argtype(#10203, 0, #10218) +ext_argtype(#10257, 0, #11375) +ext_argtype(#10289, 0, #11375) +ext_argtype(#10290, 0, #11375) +ext_argtype(#10291, 0, #11375) +ext_argtype(#10317, 0, #11375) +ext_argtype(#10322, 0, #10024) +ext_argtype(#10322, 0, #10218) +ext_argtype(#10322, 1, #10024) +ext_argtype(#10322, 1, #10218) +ext_argtype(#10326, 0, #11375) +ext_argtype(#10330, 0, #11375) +ext_argtype(#10331, 0, #11375) +ext_argtype(#10335, 0, #11375) +ext_argtype(#10338, 0, #11375) +ext_argtype(#10339, 0, #11375) +ext_argtype(#10340, 0, #11375) +ext_argtype(#10352, 0, #11375) +ext_argtype(#10352, 1, #11375) +ext_argtype(#10352, 2, #10005) +#11409 = @"C_builtin_function_or_method$cPickle.dumps" +ext_argtype(#11409, 0, #11375) +ext_argtype(#11409, 1, #10005) +#11410 = @"C_builtin_function_or_method$cPickle.load" +ext_argtype(#11410, 0, #11375) +#11411 = @"C_builtin_function_or_method$cPickle.loads" +ext_argtype(#11411, 0, #10024) +ext_argtype(#10355, 0, #11375) +#11412 = @"C_type$unicodedata.UCD" +ext_argtype(#10357, 0, #11412) +ext_argtype(#10357, 1, #10218) +ext_argtype(#10357, 2, #11375) +ext_argtype(#10358, 0, #11412) +ext_argtype(#10358, 1, #10218) +ext_argtype(#10358, 2, #11375) +ext_argtype(#10359, 0, #11412) +ext_argtype(#10359, 1, #10218) +ext_argtype(#10359, 2, #11375) +ext_argtype(#10360, 0, #11412) +ext_argtype(#10360, 1, #10218) +ext_argtype(#10361, 0, #11412) +ext_argtype(#10361, 1, #10218) +ext_argtype(#10362, 0, #11412) +ext_argtype(#10362, 1, #10218) +ext_argtype(#10363, 0, #11412) +ext_argtype(#10363, 1, #10218) +ext_argtype(#10364, 0, #11412) +ext_argtype(#10364, 1, #10218) +ext_argtype(#10365, 0, #11412) +ext_argtype(#10365, 1, #10218) +ext_argtype(#10366, 0, #11412) +ext_argtype(#10366, 1, #10218) +ext_argtype(#10366, 2, #11375) +ext_argtype(#10367, 0, #11412) +ext_argtype(#10367, 1, #10024) +ext_argtype(#10367, 1, #10218) +#11413 = @"C_builtin_function_or_method$unicodedata.normalize" +ext_argtype(#11413, 0, #11412) +ext_argtype(#11413, 1, #10024) +ext_argtype(#11413, 1, #10218) +ext_argtype(#11413, 2, #10218) +ext_argtype(#10368, 0, #11375) +ext_argtype(#10368, 1, #10024) +ext_argtype(#10368, 2, #10005) +ext_argtype(#10378, 0, #10024) +ext_argtype(#10378, 0, #10218) +ext_argtype(#10378, 1, #10005) +ext_argtype(#10379, 0, #10024) +ext_argtype(#10379, 0, #10218) +ext_argtype(#10379, 1, #10005) +#11414 = @"C_builtin_function_or_method$zlib.compressobj" +ext_argtype(#11414, 0, #10005) +ext_argtype(#11414, 1, #10005) +ext_argtype(#11414, 2, #10005) +ext_argtype(#11414, 3, #10005) +ext_argtype(#11414, 4, #10005) +ext_argtype(#10380, 0, #10024) +ext_argtype(#10380, 0, #10218) +ext_argtype(#10380, 1, #10005) +#11415 = @"C_builtin_function_or_method$zlib.decompress" +ext_argtype(#11415, 0, #10024) +ext_argtype(#11415, 0, #10218) +ext_argtype(#11415, 1, #10005) +ext_argtype(#11415, 2, #10005) +#11416 = @"C_builtin_function_or_method$zlib.decompressobj" +ext_argtype(#11416, 0, #10005) +ext_argtype(#10389, 0, #10005) +#11417 = @"C_builtin_function_or_method$bz2.compress" +ext_argtype(#11417, 0, #10024) +ext_argtype(#11417, 0, #10218) +ext_argtype(#11417, 1, #10005) +ext_argtype(#10390, 0, #10024) +ext_argtype(#10390, 0, #10218) +#11418 = @"C_builtin_function_or_method$resource.getrusage" +ext_argtype(#11418, 0, #10005) +ext_argtype(#10391, 0, #10005) +ext_argtype(#10392, 0, #10005) +ext_argtype(#10392, 1, #11375) +ext_argtype(#10394, 0, #11375) +ext_argtype(#10431, 0, #10024) +ext_argtype(#10431, 0, #10218) +ext_argtype(#10433, 0, #10024) +ext_argtype(#10433, 0, #10218) +ext_argtype(#10435, 0, #10024) +ext_argtype(#10435, 0, #10218) +ext_argtype(#10435, 0, #10003) +ext_argtype(#10436, 0, #10024) +ext_argtype(#10436, 0, #10218) +ext_argtype(#10436, 0, #10003) +ext_argtype(#10437, 0, #10024) +ext_argtype(#10437, 0, #10218) +ext_argtype(#10437, 0, #10003) +ext_argtype(#10438, 0, #10005) +ext_argtype(#10440, 0, #10005) +ext_argtype(#10445, 0, #10024) +ext_argtype(#10445, 0, #10218) +ext_argtype(#10446, 0, #10024) +ext_argtype(#10446, 0, #10218) +ext_argtype(#10447, 0, #10005) +ext_argtype(#10448, 0, #10005) +ext_argtype(#10448, 1, #10024) +ext_argtype(#10448, 1, #10218) +#11419 = @"C_builtin_function_or_method$_testcapi.raise_exception" +ext_argtype(#11419, 0, #11375) +ext_argtype(#11419, 1, #10005) +ext_argtype(#10468, 0, #10005) +ext_argtype(#10468, 1, #10001) +ext_argtype(#10470, 0, #10005) +ext_argtype(#10471, 0, #10005) +ext_argtype(#10472, 0, #10005) +ext_argtype(#10473, 0, #10005) +ext_argtype(#10474, 0, #10005) +ext_argtype(#10475, 0, #10005) +ext_argtype(#10476, 0, #10005) +ext_argtype(#10477, 0, #10005) +ext_argtype(#10478, 0, #10005) +ext_argtype(#10479, 0, #10005) +ext_argtype(#10480, 0, #10005) +#11420 = @"C_builtin_function_or_method$_testcapi.codec_incrementalencoder" +ext_argtype(#11420, 0, #10024) +ext_argtype(#11420, 0, #10218) +ext_argtype(#11420, 1, #10024) +ext_argtype(#11420, 1, #10218) +#11421 = @"C_builtin_function_or_method$_testcapi.codec_incrementaldecoder" +ext_argtype(#11421, 0, #10024) +ext_argtype(#11421, 0, #10218) +ext_argtype(#11421, 1, #10024) +ext_argtype(#11421, 1, #10218) +#11422 = @"C_builtin_function_or_method$_testcapi.unicode_encodedecimal" +ext_argtype(#11422, 0, #10218) +ext_argtype(#11422, 1, #10024) +ext_argtype(#11422, 1, #10218) +ext_argtype(#10486, 0, #11375) +ext_argtype(#10487, 0, #11375) +ext_argtype(#10489, 0, #11375) +ext_argtype(#10489, 1, #11375) +ext_argtype(#10490, 0, #10024) +ext_argtype(#10490, 0, #10218) +ext_argtype(#10490, 1, #10024) +ext_argtype(#10490, 1, #10218) +ext_argtype(#10490, 2, #10005) +ext_argtype(#10491, 0, #10024) +ext_argtype(#10491, 0, #10218) +ext_argtype(#10491, 1, #10024) +ext_argtype(#10491, 1, #10218) +ext_argtype(#10491, 2, #11375) +ext_argtype(#10491, 3, #11375) +ext_argtype(#10493, 0, #11375) +ext_argtype(#10493, 1, #10005) +ext_argtype(#10494, 0, #11375) +#11423 = @"C_builtin_function_or_method$spwd.getspnam" +ext_argtype(#11423, 0, #10024) +ext_argtype(#11423, 0, #10218) +ext_argtype(#10499, 0, #10005) +ext_argtype(#10499, 1, #10024) +ext_argtype(#10499, 1, #10218) +ext_argtype(#10499, 1, #10003) +ext_argtype(#10502, 0, #10024) +ext_argtype(#10502, 0, #10218) +ext_argtype(#10503, 0, #10005) +ext_argtype(#10504, 0, #10024) +ext_argtype(#10504, 0, #10218) +ext_argtype(#10505, 0, #10024) +ext_argtype(#10505, 0, #10218) +ext_argtype(#10505, 0, #10003) +ext_argtype(#10505, 1, #10024) +ext_argtype(#10505, 1, #10218) +ext_argtype(#10506, 0, #10024) +ext_argtype(#10506, 0, #10218) +ext_argtype(#10506, 0, #10003) +ext_argtype(#10506, 1, #10024) +ext_argtype(#10506, 1, #10218) +ext_argtype(#10506, 2, #10005) +ext_argtype(#10507, 0, #10024) +ext_argtype(#10507, 0, #10218) +ext_argtype(#10507, 0, #10003) +ext_argtype(#10508, 0, #10024) +ext_argtype(#10508, 0, #10218) +ext_argtype(#10508, 1, #10024) +ext_argtype(#10508, 1, #10218) +ext_argtype(#10508, 1, #10003) +ext_argtype(#10509, 0, #10024) +ext_argtype(#10509, 0, #10218) +ext_argtype(#10509, 1, #10024) +ext_argtype(#10509, 1, #10218) +ext_argtype(#10509, 1, #10003) +ext_argtype(#10510, 0, #10024) +ext_argtype(#10510, 0, #10218) +ext_argtype(#10510, 0, #10003) +ext_argtype(#10510, 1, #10024) +ext_argtype(#10510, 1, #10218) +ext_argtype(#10510, 1, #10003) +ext_argtype(#10510, 2, #11375) +ext_argtype(#10512, 0, #10005) +ext_argtype(#10513, 0, #11375) +ext_argtype(#10514, 0, #11375) +ext_argtype(#10515, 0, #11375) +ext_argtype(#10526, 0, #10517) +ext_argtype(#10527, 0, #10517) +ext_argtype(#10528, 0, #10517) +ext_argtype(#10528, 1, #10517) +ext_argtype(#10530, 0, #10517) +ext_argtype(#10531, 0, #10517) +ext_argtype(#10532, 0, #10038) +ext_argtype(#10532, 1, #10038) +ext_argtype(#10538, 0, #11375) +ext_argtype(#10539, 0, #11375) +#11424 = @"C_builtin_function_or_method$_ctypes.POINTER" +ext_argtype(#11424, 0, #11375) +#11425 = @"C_builtin_function_or_method$_ctypes.pointer" +ext_argtype(#11425, 0, #11375) +#11426 = @"C_builtin_function_or_method$_ctypes._unpickle" +ext_argtype(#11426, 0, #11375) +ext_argtype(#11426, 1, #11375) +ext_argtype(#10548, 0, #11375) +ext_argtype(#10549, 0, #11375) +ext_argtype(#10549, 1, #10005) +ext_argtype(#10550, 0, #10024) +ext_argtype(#10550, 0, #10218) +ext_argtype(#10550, 0, #10003) +ext_argtype(#10550, 1, #10024) +ext_argtype(#10550, 1, #10218) +ext_argtype(#10551, 0, #10024) +ext_argtype(#10551, 0, #10218) +ext_argtype(#10551, 0, #10003) +ext_argtype(#10551, 1, #10005) +ext_argtype(#10552, 0, #11375) +ext_argtype(#10553, 0, #11375) +ext_argtype(#10553, 1, #10024) +ext_argtype(#10553, 1, #10218) +ext_argtype(#10554, 0, #11375) +ext_argtype(#10555, 0, #11375) +ext_argtype(#10558, 0, #11375) +ext_argtype(#10559, 0, #11375) +ext_argtype(#10559, 1, #10001) +ext_argtype(#10560, 0, #11375) +ext_argtype(#10560, 1, #10001) +#11427 = @"C_builtin_function_or_method$_ctypes.PyObj_FromPtr" +ext_argtype(#11427, 0, #11375) +#11428 = @"C_builtin_function_or_method$_ctypes.Py_INCREF" +ext_argtype(#11428, 0, #11375) +#11429 = @"C_builtin_function_or_method$_ctypes.Py_DECREF" +ext_argtype(#11429, 0, #11375) +ext_argtype(#10561, 0, #10024) +ext_argtype(#10561, 0, #10218) +ext_argtype(#10561, 1, #10005) +#11430 = @"C_builtin_function_or_method$_json.encode_basestring_ascii" +ext_argtype(#11430, 0, #11375) +ext_argtype(#10567, 0, #11375) +ext_argtype(#10567, 1, #11375) +ext_argtype(#10567, 2, #10024) +ext_argtype(#10567, 2, #10218) +ext_argtype(#10567, 2, #10003) +ext_argtype(#10567, 3, #10005) +ext_argtype(#10568, 0, #10024) +ext_argtype(#10568, 1, #10005) +ext_argtype(#10568, 2, #10005) +ext_argtype(#10571, 0, #10005) +ext_argtype(#10572, 0, #10005) +ext_argtype(#10573, 0, #10005) +ext_argtype(#10574, 0, #11375) +ext_argtype(#10574, 1, #10007) +ext_argtype(#10576, 0, #10575) +ext_argtype(#10576, 1, #11375) +ext_argtype(#10576, 2, #10007) +ext_argtype(#10579, 0, #11375) +ext_argtype(#10579, 1, #10024) +ext_argtype(#10579, 1, #10218) +ext_argtype(#10579, 1, #10003) +ext_argtype(#10581, 0, #11375) +ext_argtype(#10581, 1, #10024) +ext_argtype(#10581, 1, #10218) +ext_argtype(#10581, 1, #10003) +ext_argtype(#10582, 0, #11375) +ext_argtype(#10582, 1, #11375) +ext_argtype(#10582, 2, #10005) +ext_argtype(#10582, 3, #10005) +ext_argtype(#10583, 0, #11375) +ext_argtype(#10583, 1, #11375) +ext_argtype(#10583, 2, #10005) +ext_argtype(#10583, 3, #10005) +ext_argtype(#10584, 0, #11375) +ext_argtype(#10584, 1, #11375) +ext_argtype(#10584, 2, #10005) +ext_argtype(#10584, 3, #10005) +ext_argtype(#10585, 0, #11375) +ext_argtype(#10585, 1, #11375) +ext_argtype(#10585, 2, #10005) +ext_argtype(#10585, 3, #10005) +ext_argtype(#10586, 0, #11375) +ext_argtype(#10586, 1, #11375) +ext_argtype(#10586, 2, #10005) +ext_argtype(#10586, 3, #10005) +ext_argtype(#10587, 0, #11375) +ext_argtype(#10587, 1, #11375) +ext_argtype(#10587, 2, #10005) +ext_argtype(#10587, 3, #10005) +ext_argtype(#10591, 0, #11375) +ext_argtype(#10598, 0, #11375) +ext_argtype(#10600, 0, #11375) +ext_argtype(#10600, 1, #11375) +ext_argtype(#10601, 0, #10005) +ext_argtype(#10603, 0, #10024) +ext_argtype(#10603, 0, #10218) +ext_argtype(#10604, 0, #10005) +ext_argtype(#10606, 0, #10005) +ext_argtype(#10607, 0, #11375) +ext_argtype(#10609, 0, #10005) +ext_argtype(#10610, 0, #11375) +#11431 = @"C_builtin_function_or_method$sys.call_tracing" +ext_argtype(#11431, 0, #11375) +ext_argtype(#11431, 1, #10001) +ext_argtype(#10612, 0, #11375) +ext_argtype(#10612, 1, #11375) +ext_argtype(#10612, 2, #10005) +ext_argtype(#10613, 0, #11375) +ext_argtype(#10613, 1, #11375) +ext_argtype(#10613, 2, #11375) +ext_argtype(#10613, 3, #10005) +ext_argtype(#10613, 4, #11375) +ext_argtype(#10613, 5, #11375) +ext_argtype(#10613, 6, #11375) +ext_argtype(#10615, 0, #11375) +ext_argtype(#10617, 0, #11375) +ext_argtype(#10619, 0, #10024) +ext_argtype(#10619, 0, #10218) +ext_argtype(#10619, 1, #11375) +ext_argtype(#10622, 0, #10024) +ext_argtype(#10622, 0, #10218) +ext_argtype(#10622, 1, #11375) +ext_argtype(#10622, 2, #10024) +ext_argtype(#10622, 2, #10218) +ext_argtype(#10622, 3, #10001) +ext_argtype(#10623, 0, #10024) +ext_argtype(#10623, 0, #10218) +ext_argtype(#10627, 0, #10024) +ext_argtype(#10627, 0, #10218) +ext_argtype(#10628, 0, #10024) +ext_argtype(#10628, 0, #10218) +ext_argtype(#10629, 0, #10024) +ext_argtype(#10629, 0, #10218) +ext_argtype(#10630, 0, #10024) +ext_argtype(#10630, 0, #10218) +ext_argtype(#10631, 0, #10024) +ext_argtype(#10631, 0, #10218) +#11432 = @"C_builtin_function_or_method$imp.load_compiled" +ext_argtype(#11432, 0, #10024) +ext_argtype(#11432, 0, #10218) +ext_argtype(#11432, 1, #10024) +ext_argtype(#11432, 1, #10218) +ext_argtype(#11432, 2, #10250) +ext_argtype(#10632, 0, #10024) +ext_argtype(#10632, 0, #10218) +ext_argtype(#10632, 1, #10024) +ext_argtype(#10632, 1, #10218) +ext_argtype(#10632, 2, #10250) +ext_argtype(#10633, 0, #10024) +ext_argtype(#10633, 0, #10218) +ext_argtype(#10633, 1, #10024) +ext_argtype(#10633, 1, #10218) +#11433 = @"C_builtin_function_or_method$imp.load_source" +ext_argtype(#11433, 0, #10024) +ext_argtype(#11433, 0, #10218) +ext_argtype(#11433, 1, #10024) +ext_argtype(#11433, 1, #10218) +ext_argtype(#11433, 2, #10250) +ext_argtype(#10634, 0, #10024) +ext_argtype(#10634, 0, #10218) +ext_argtype(#10634, 1, #11375) +ext_argtype(#10634, 2, #11375) +ext_argtype(#10634, 3, #11375) +ext_argtype(#10634, 4, #10005) +#11434 = @"C_builtin_function_or_method$builtins.abs" +ext_argtype(#11434, 0, #11375) +ext_argtype(#10635, 0, #11375) +ext_argtype(#10636, 0, #11375) +ext_argtype(#10637, 0, #11375) +ext_argtype(#10638, 0, #11375) +ext_argtype(#10639, 0, #10005) +ext_argtype(#10642, 0, #11375) +ext_argtype(#10642, 1, #10024) +ext_argtype(#10642, 1, #10218) +ext_argtype(#10642, 2, #10024) +ext_argtype(#10642, 2, #10218) +ext_argtype(#10642, 3, #10005) +ext_argtype(#10642, 4, #10005) +#11435 = @"C_builtin_function_or_method$builtins.execfile" +ext_argtype(#11435, 0, #10024) +ext_argtype(#11435, 0, #10218) +ext_argtype(#11435, 1, #10007) +ext_argtype(#11435, 2, #11375) +ext_argtype(#10646, 0, #11375) +ext_argtype(#10646, 1, #11375) +ext_argtype(#10649, 0, #11375) +#11436 = @"C_builtin_function_or_method$builtins.hex" +ext_argtype(#11436, 0, #11375) +ext_argtype(#10650, 0, #11375) +#11437 = @"C_builtin_function_or_method$builtins.intern" +ext_argtype(#11437, 0, #10024) +ext_argtype(#10657, 0, #11375) +#11438 = @"C_builtin_function_or_method$builtins.oct" +ext_argtype(#11438, 0, #11375) +ext_argtype(#10661, 0, #11375) +ext_argtype(#10665, 0, #11375) +ext_argtype(#10666, 0, #11375) +ext_argtype(#10667, 0, #10038) +ext_argtype(#10667, 1, #11375) +ext_argtype(#10669, 0, #11375) +ext_argtype(#10669, 1, #11375) +ext_argtype(#10669, 2, #11375) +ext_argtype(#10669, 3, #10005) +ext_argtype(#10671, 0, #10005) +#11439 = @"C_type$_multiprocessing.SemLock" +ext_argtype(#10674, 0, #11439) +ext_argtype(#10675, 0, #11439) +ext_argtype(#10676, 0, #11439) +ext_argtype(#10677, 0, #11439) +ext_argtype(#10678, 0, #11439) +ext_argtype(#10679, 0, #11439) +ext_argtype(#10680, 0, #11439) +ext_argtype(#10681, 0, #11439) +#11440 = @"C_type$_multiprocessing.SemLock$_rebuild" +ext_argtype(#11440, 0, #11439) +ext_argtype(#10682, 0, #11439) +#11441 = @"C_type$_multiprocessing.Connection" +ext_argtype(#10683, 0, #11441) +ext_argtype(#10684, 0, #11441) +ext_argtype(#10685, 0, #11441) +ext_argtype(#10686, 0, #11441) +ext_argtype(#10686, 1, #11375) +#11442 = @"C_type$_multiprocessing.Connection$recv" +ext_argtype(#11442, 0, #11441) +ext_argtype(#10687, 0, #11441) +ext_argtype(#10688, 0, #11441) +ext_argtype(#10689, 0, #11441) +#11443 = @"C_type$_ssl._SSLContext" +ext_argtype(#10690, 0, #11443) +ext_argtype(#10692, 0, #11443) +ext_argtype(#10693, 0, #11443) +ext_argtype(#10694, 0, #11443) +ext_argtype(#10695, 0, #11443) +ext_argtype(#10695, 1, #11375) +ext_argtype(#10696, 0, #11443) +ext_argtype(#10697, 0, #11443) +ext_argtype(#10698, 0, #11443) +ext_argtype(#10699, 0, #11443) +ext_argtype(#10699, 1, #11375) +ext_argtype(#10700, 0, #11443) +ext_argtype(#10701, 0, #11443) +ext_argtype(#10702, 0, #11443) +ext_argtype(#10703, 0, #10691) +ext_argtype(#10704, 0, #10691) +ext_argtype(#10705, 0, #10691) +ext_argtype(#10706, 0, #10691) +ext_argtype(#10707, 0, #10691) +ext_argtype(#10708, 0, #10691) +ext_argtype(#10709, 0, #10691) +ext_argtype(#10710, 0, #10691) +ext_argtype(#10711, 0, #10691) +ext_argtype(#10712, 0, #10691) +ext_argtype(#10713, 0, #10691) +#11444 = @"C_type$_sre.SRE_Match" +ext_argtype(#10714, 0, #11444) +ext_argtype(#10715, 0, #11444) +ext_argtype(#10716, 0, #11444) +ext_argtype(#10717, 0, #11444) +ext_argtype(#10718, 0, #11444) +ext_argtype(#10719, 0, #11444) +#11445 = @"C_type$_sre.SRE_Match$expand" +ext_argtype(#11445, 0, #11444) +ext_argtype(#11445, 1, #11375) +#11446 = @"C_type$_sre.SRE_Match$__copy__" +ext_argtype(#11446, 0, #11444) +#11447 = @"C_type$_sre.SRE_Match$__deepcopy__" +ext_argtype(#11447, 0, #11444) +ext_argtype(#11447, 1, #11375) +#11448 = @"C_type$_sre.SRE_Scanner" +ext_argtype(#10720, 0, #11448) +ext_argtype(#10721, 0, #11448) +#11449 = @"C_type$_sre.SRE_Pattern" +ext_argtype(#10722, 0, #11449) +ext_argtype(#10723, 0, #11449) +ext_argtype(#10724, 0, #11449) +ext_argtype(#10725, 0, #11449) +ext_argtype(#10726, 0, #11449) +ext_argtype(#10727, 0, #11449) +ext_argtype(#10728, 0, #11449) +#11450 = @"C_type$_sre.SRE_Pattern$scanner" +ext_argtype(#11450, 0, #11449) +#11451 = @"C_type$_sre.SRE_Pattern$__copy__" +ext_argtype(#11451, 0, #11449) +#11452 = @"C_type$_sre.SRE_Pattern$__deepcopy__" +ext_argtype(#11452, 0, #11449) +ext_argtype(#11452, 1, #11375) +#11453 = @"C_type$linuxaudiodev.linux_audio_device$read" +ext_argtype(#11453, 0, #10017) +ext_argtype(#11453, 1, #10005) +ext_argtype(#10729, 0, #10017) +ext_argtype(#10729, 1, #10024) +ext_argtype(#10729, 1, #10218) +ext_argtype(#10730, 0, #10017) +ext_argtype(#10730, 1, #10005) +ext_argtype(#10730, 2, #10005) +ext_argtype(#10730, 3, #10005) +ext_argtype(#10730, 4, #10005) +ext_argtype(#10730, 5, #10005) +ext_argtype(#10731, 0, #10017) +ext_argtype(#10732, 0, #10017) +ext_argtype(#10733, 0, #10017) +ext_argtype(#10734, 0, #10017) +ext_argtype(#10735, 0, #10017) +ext_argtype(#10736, 0, #10017) +ext_argtype(#10737, 0, #10017) +ext_argtype(#10738, 0, #10056) +ext_argtype(#10739, 0, #10056) +#11454 = @"C_type$MultibyteIncrementalEncoder" +ext_argtype(#10740, 0, #11454) +ext_argtype(#10741, 0, #11454) +#11455 = @"C_type$MultibyteIncrementalDecoder$2decode" +#11456 = @"C_type$MultibyteIncrementalDecoder" +ext_argtype(#11455, 0, #11456) +ext_argtype(#10742, 0, #11456) +#11457 = @"C_type$MultibyteStreamReader" +ext_argtype(#10743, 0, #11457) +ext_argtype(#10744, 0, #11457) +ext_argtype(#10745, 0, #11457) +ext_argtype(#10746, 0, #11457) +#11458 = @"C_type$MultibyteStreamWriter" +ext_argtype(#10747, 0, #11458) +ext_argtype(#10747, 1, #11375) +ext_argtype(#10748, 0, #11458) +ext_argtype(#10748, 1, #11375) +ext_argtype(#10749, 0, #11458) +#11459 = @"C_type$deque_iterator" +ext_argtype(#10750, 0, #11459) +ext_argtype(#10750, 0, #10761) +ext_argtype(#10751, 0, #11459) +ext_argtype(#10751, 0, #10761) +#11460 = @"C_type$collections.deque" +ext_argtype(#10752, 0, #11460) +ext_argtype(#10752, 1, #11375) +ext_argtype(#10753, 0, #11460) +ext_argtype(#10753, 1, #11375) +ext_argtype(#10754, 0, #11460) +#11461 = @"C_type$collections.deque$__copy__" +ext_argtype(#11461, 0, #11460) +ext_argtype(#10755, 0, #11460) +ext_argtype(#10755, 1, #11375) +ext_argtype(#10756, 0, #11460) +ext_argtype(#10756, 1, #11375) +ext_argtype(#10757, 0, #11460) +ext_argtype(#10757, 1, #11375) +#11462 = @"C_type$collections.deque$pop" +ext_argtype(#11462, 0, #11460) +#11463 = @"C_type$collections.deque$popleft" +ext_argtype(#11463, 0, #11460) +ext_argtype(#10758, 0, #11460) +ext_argtype(#10759, 0, #11460) +ext_argtype(#10759, 1, #11375) +ext_argtype(#10760, 0, #11460) +ext_argtype(#10762, 0, #11460) +ext_argtype(#10763, 0, #11460) +ext_argtype(#10763, 1, #10005) +ext_argtype(#10764, 0, #11460) +#11464 = @"C_type$collections.defaultdict$__missing__" +#11465 = @"C_type$collections.defaultdict" +ext_argtype(#11464, 0, #11465) +ext_argtype(#11464, 1, #11375) +#11466 = @"C_type$collections.defaultdict$copy" +ext_argtype(#11466, 0, #11465) +#11467 = @"C_type$collections.defaultdict$__copy__" +ext_argtype(#11467, 0, #11465) +ext_argtype(#10765, 0, #11465) +ext_argtype(#10766, 0, #10085) +#11468 = @"C_type$parser.st$isexpr" +ext_argtype(#11468, 0, #10085) +#11469 = @"C_type$parser.st$issuite" +ext_argtype(#11469, 0, #10085) +ext_argtype(#10767, 0, #10085) +ext_argtype(#10768, 0, #10085) +ext_argtype(#10769, 0, #10085) +ext_argtype(#10770, 0, #10102) +ext_argtype(#10771, 0, #10102) +ext_argtype(#10771, 1, #11375) +ext_argtype(#10772, 0, #10102) +ext_argtype(#10773, 0, #10102) +ext_argtype(#10773, 1, #11375) +ext_argtype(#10774, 0, #10102) +ext_argtype(#10774, 1, #11375) +ext_argtype(#10775, 0, #10102) +ext_argtype(#10776, 0, #10102) +ext_argtype(#10777, 0, #10102) +ext_argtype(#10778, 0, #10102) +ext_argtype(#10779, 0, #10102) +ext_argtype(#10779, 1, #10005) +ext_argtype(#10779, 2, #10005) +ext_argtype(#10779, 3, #10005) +ext_argtype(#10780, 0, #10102) +ext_argtype(#10780, 1, #11375) +ext_argtype(#10781, 0, #10102) +ext_argtype(#10781, 1, #10024) +ext_argtype(#10781, 1, #10218) +ext_argtype(#10781, 2, #10005) +#11470 = @"C_type$_socket.socket$recv" +ext_argtype(#11470, 0, #10102) +ext_argtype(#11470, 1, #10005) +ext_argtype(#11470, 2, #10005) +ext_argtype(#10782, 0, #10102) +ext_argtype(#10782, 1, #11377) +ext_argtype(#10782, 2, #10005) +ext_argtype(#10782, 3, #10005) +ext_argtype(#10783, 0, #10102) +ext_argtype(#10783, 1, #10005) +ext_argtype(#10783, 2, #10005) +ext_argtype(#10784, 0, #10102) +ext_argtype(#10784, 1, #11377) +ext_argtype(#10784, 2, #10005) +ext_argtype(#10784, 3, #10005) +ext_argtype(#10785, 0, #10102) +ext_argtype(#10785, 1, #10024) +ext_argtype(#10785, 1, #10218) +ext_argtype(#10785, 2, #10005) +ext_argtype(#10786, 0, #10102) +ext_argtype(#10786, 1, #10024) +ext_argtype(#10786, 1, #10218) +ext_argtype(#10786, 2, #10005) +ext_argtype(#10787, 0, #10102) +ext_argtype(#10788, 0, #10102) +ext_argtype(#10788, 1, #11375) +ext_argtype(#10789, 0, #10102) +ext_argtype(#10789, 1, #11375) +ext_argtype(#10790, 0, #10102) +ext_argtype(#10791, 0, #10102) +ext_argtype(#10792, 0, #10102) +ext_argtype(#10792, 1, #11375) +ext_argtype(#10793, 0, #10794) +#11471 = @"C_type$itertools.chain$from_iterable" +#11472 = @"C_type$itertools.chain" +ext_argtype(#11471, 0, #11472) +ext_argtype(#11471, 1, #11375) +#11473 = @"C_type$itertools.count" +ext_argtype(#10795, 0, #11473) +#11474 = @"C_type$itertools.repeat" +ext_argtype(#10796, 0, #11474) +#11475 = @"C_type$_csv.writer$writerow" +ext_argtype(#11475, 0, #10167) +ext_argtype(#11475, 1, #11375) +ext_argtype(#10797, 0, #10167) +ext_argtype(#10797, 1, #11375) +#11476 = @"C_type$array.array" +ext_argtype(#10798, 0, #11476) +ext_argtype(#10798, 1, #11375) +ext_argtype(#10799, 0, #11476) +ext_argtype(#10800, 0, #11476) +#11477 = @"C_type$array.array$__copy__" +ext_argtype(#11477, 0, #11476) +ext_argtype(#10801, 0, #11476) +ext_argtype(#10801, 1, #11375) +#11478 = @"C_type$array.array$__deepcopy__" +ext_argtype(#11478, 0, #11476) +ext_argtype(#11478, 1, #11375) +ext_argtype(#10802, 0, #11476) +ext_argtype(#10802, 1, #11375) +ext_argtype(#10803, 0, #11476) +ext_argtype(#10804, 0, #11476) +ext_argtype(#10804, 1, #11375) +ext_argtype(#10805, 0, #11476) +ext_argtype(#10806, 0, #11476) +ext_argtype(#10807, 0, #11476) +ext_argtype(#10807, 1, #11375) +ext_argtype(#10808, 0, #11476) +#11479 = @"C_type$array.array$pop" +ext_argtype(#11479, 0, #11476) +ext_argtype(#10809, 0, #11476) +ext_argtype(#10810, 0, #11476) +ext_argtype(#10811, 0, #11476) +ext_argtype(#10811, 1, #11375) +ext_argtype(#10812, 0, #11476) +ext_argtype(#10813, 0, #11476) +ext_argtype(#10813, 1, #11375) +ext_argtype(#10814, 0, #11476) +ext_argtype(#10815, 0, #11476) +ext_argtype(#10816, 0, #11476) +ext_argtype(#10817, 0, #11476) +ext_argtype(#10817, 1, #11375) +ext_argtype(#10818, 0, #11476) +#11480 = @"C_type$mmap.mmap" +ext_argtype(#10819, 0, #11480) +ext_argtype(#10820, 0, #11480) +ext_argtype(#10821, 0, #11480) +ext_argtype(#10822, 0, #11480) +ext_argtype(#10823, 0, #11480) +ext_argtype(#10824, 0, #11480) +ext_argtype(#10825, 0, #11480) +ext_argtype(#10826, 0, #11480) +ext_argtype(#10827, 0, #11480) +ext_argtype(#10828, 0, #11480) +ext_argtype(#10829, 0, #11480) +ext_argtype(#10830, 0, #11480) +ext_argtype(#10831, 0, #11480) +ext_argtype(#10832, 0, #11480) +ext_argtype(#10833, 0, #10201) +ext_argtype(#10833, 1, #10024) +ext_argtype(#10833, 1, #10218) +ext_argtype(#10833, 2, #10024) +ext_argtype(#10833, 2, #10218) +ext_argtype(#10834, 0, #10201) +ext_argtype(#10835, 0, #10201) +#11481 = @"C_type$_hotshot.ProfilerType$runcall" +ext_argtype(#11481, 0, #10201) +#11482 = @"C_type$_hotshot.ProfilerType$runcode" +ext_argtype(#11482, 0, #10201) +ext_argtype(#11482, 1, #10082) +ext_argtype(#11482, 2, #10007) +ext_argtype(#11482, 3, #11375) +ext_argtype(#10836, 0, #10201) +ext_argtype(#10837, 0, #10201) +ext_argtype(#10838, 0, #10204) +ext_argtype(#10839, 0, #10204) +ext_argtype(#10840, 0, #10314) +ext_argtype(#10841, 0, #10314) +ext_argtype(#10842, 0, #10314) +ext_argtype(#10843, 0, #10314) +ext_argtype(#10843, 1, #10005) +ext_argtype(#10844, 0, #10314) +ext_argtype(#10844, 1, #10005) +ext_argtype(#10845, 0, #10314) +ext_argtype(#10845, 1, #10005) +ext_argtype(#10846, 0, #10314) +ext_argtype(#10847, 0, #10314) +ext_argtype(#10847, 1, #10005) +ext_argtype(#10847, 2, #10005) +ext_argtype(#10848, 0, #10314) +ext_argtype(#10849, 0, #10314) +ext_argtype(#10849, 1, #10005) +ext_argtype(#10850, 0, #10314) +ext_argtype(#10851, 0, #10314) +ext_argtype(#10851, 1, #10024) +ext_argtype(#10851, 1, #10218) +ext_argtype(#10852, 0, #10314) +ext_argtype(#10852, 1, #11375) +ext_argtype(#10853, 0, #10315) +ext_argtype(#10854, 0, #10315) +ext_argtype(#10855, 0, #10315) +ext_argtype(#10856, 0, #10315) +ext_argtype(#10856, 1, #10005) +ext_argtype(#10857, 0, #10315) +ext_argtype(#10857, 1, #10005) +ext_argtype(#10858, 0, #10315) +ext_argtype(#10858, 1, #10005) +ext_argtype(#10859, 0, #10315) +ext_argtype(#10860, 0, #10315) +ext_argtype(#10860, 1, #10005) +ext_argtype(#10860, 2, #10005) +ext_argtype(#10861, 0, #10315) +ext_argtype(#10862, 0, #10315) +ext_argtype(#10862, 1, #10005) +ext_argtype(#10863, 0, #10315) +#11483 = @"C_type$Struct" +ext_argtype(#10864, 0, #11483) +ext_argtype(#10865, 0, #11483) +ext_argtype(#10866, 0, #11483) +ext_argtype(#10866, 1, #11375) +ext_argtype(#10867, 0, #11483) +ext_argtype(#10868, 0, #11483) +ext_argtype(#10869, 0, #10354) +ext_argtype(#10869, 1, #11375) +ext_argtype(#10869, 2, #10005) +ext_argtype(#10870, 0, #10354) +ext_argtype(#10871, 0, #10354) +ext_argtype(#10871, 1, #10005) +#11484 = @"C_type$cPickle.Unpickler$load" +ext_argtype(#11484, 0, #10356) +#11485 = @"C_type$cPickle.Unpickler$noload" +ext_argtype(#11485, 0, #10356) +#11486 = @"C_type$zipimport.zipimporter" +ext_argtype(#10872, 0, #11486) +ext_argtype(#10872, 1, #10024) +ext_argtype(#10872, 1, #10218) +ext_argtype(#10872, 2, #11375) +#11487 = @"C_type$zipimport.zipimporter$load_module" +ext_argtype(#11487, 0, #11486) +ext_argtype(#11487, 1, #10024) +ext_argtype(#11487, 1, #10218) +ext_argtype(#10873, 0, #11486) +ext_argtype(#10873, 1, #10024) +ext_argtype(#10873, 1, #10218) +ext_argtype(#10874, 0, #11486) +ext_argtype(#10874, 1, #10024) +ext_argtype(#10874, 1, #10218) +ext_argtype(#10875, 0, #11486) +ext_argtype(#10875, 1, #10024) +ext_argtype(#10875, 1, #10218) +ext_argtype(#10876, 0, #11486) +ext_argtype(#10876, 1, #10024) +ext_argtype(#10876, 1, #10218) +ext_argtype(#10877, 0, #11486) +ext_argtype(#10877, 1, #10024) +ext_argtype(#10877, 1, #10218) +ext_argtype(#10878, 0, #11412) +ext_argtype(#10878, 1, #10218) +ext_argtype(#10878, 2, #11375) +ext_argtype(#10879, 0, #11412) +ext_argtype(#10879, 1, #10218) +ext_argtype(#10879, 2, #11375) +ext_argtype(#10880, 0, #11412) +ext_argtype(#10880, 1, #10218) +ext_argtype(#10880, 2, #11375) +ext_argtype(#10881, 0, #11412) +ext_argtype(#10881, 1, #10218) +ext_argtype(#10882, 0, #11412) +ext_argtype(#10882, 1, #10218) +ext_argtype(#10883, 0, #11412) +ext_argtype(#10883, 1, #10218) +ext_argtype(#10884, 0, #11412) +ext_argtype(#10884, 1, #10218) +ext_argtype(#10885, 0, #11412) +ext_argtype(#10885, 1, #10218) +ext_argtype(#10886, 0, #11412) +ext_argtype(#10886, 1, #10218) +ext_argtype(#10887, 0, #11412) +ext_argtype(#10887, 1, #10218) +ext_argtype(#10887, 2, #11375) +ext_argtype(#10888, 0, #11412) +ext_argtype(#10888, 1, #10024) +ext_argtype(#10888, 1, #10218) +#11488 = @"C_type$unicodedata.UCD$normalize" +ext_argtype(#11488, 0, #11412) +ext_argtype(#11488, 1, #10024) +ext_argtype(#11488, 1, #10218) +ext_argtype(#11488, 2, #10218) +#11489 = @"C_type$xxsubtype.spamlist" +ext_argtype(#10889, 0, #11489) +ext_argtype(#10890, 0, #11489) +ext_argtype(#10890, 1, #10005) +ext_argtype(#10891, 0, #11489) +#11490 = @"C_type$xxsubtype.spamdict" +ext_argtype(#10893, 0, #11490) +ext_argtype(#10894, 0, #11490) +ext_argtype(#10894, 1, #10005) +ext_argtype(#10895, 0, #10370) +ext_argtype(#10896, 0, #10370) +ext_argtype(#10897, 0, #10370) +ext_argtype(#10898, 0, #10370) +#11491 = @"C_type$zlib.Compress$compress" +#11492 = @"C_type$zlib.Compress" +ext_argtype(#11491, 0, #11492) +ext_argtype(#11491, 1, #10024) +ext_argtype(#11491, 1, #10218) +ext_argtype(#10899, 0, #11492) +ext_argtype(#10899, 1, #10005) +#11493 = @"C_type$zlib.Compress$copy" +ext_argtype(#11493, 0, #11492) +#11494 = @"C_type$zlib.Decompress$decompress" +#11495 = @"C_type$zlib.Decompress" +ext_argtype(#11494, 0, #11495) +ext_argtype(#11494, 1, #10024) +ext_argtype(#11494, 1, #10218) +ext_argtype(#11494, 2, #10005) +#11496 = @"C_type$zlib.Decompress$flush" +ext_argtype(#11496, 0, #11495) +ext_argtype(#11496, 1, #10005) +#11497 = @"C_type$zlib.Decompress$copy" +ext_argtype(#11497, 0, #11495) +#11498 = @"C_type$_random.Random" +ext_argtype(#10900, 0, #11498) +ext_argtype(#10901, 0, #11498) +ext_argtype(#10902, 0, #11498) +ext_argtype(#10903, 0, #11498) +ext_argtype(#10903, 1, #11375) +ext_argtype(#10904, 0, #11498) +ext_argtype(#10904, 1, #11375) +ext_argtype(#10905, 0, #11498) +ext_argtype(#10905, 1, #10005) +ext_argtype(#10906, 0, #10384) +ext_argtype(#10906, 1, #10005) +ext_argtype(#10907, 0, #10384) +ext_argtype(#10907, 1, #10005) +ext_argtype(#10908, 0, #10384) +ext_argtype(#10909, 0, #10384) +ext_argtype(#10910, 0, #10384) +ext_argtype(#10911, 0, #10384) +ext_argtype(#10912, 0, #10384) +ext_argtype(#10912, 1, #10005) +ext_argtype(#10913, 0, #10384) +#11499 = @"C_type$bz2.BZ2File$read" +#11500 = @"C_type$bz2.BZ2File" +ext_argtype(#11499, 0, #11500) +ext_argtype(#11499, 1, #10005) +ext_argtype(#10914, 0, #11500) +ext_argtype(#10914, 1, #10005) +ext_argtype(#10915, 0, #11500) +ext_argtype(#10915, 1, #10005) +#11501 = @"C_type$bz2.BZ2File$xreadlines" +ext_argtype(#11501, 0, #11500) +ext_argtype(#10916, 0, #11500) +ext_argtype(#10916, 1, #10024) +ext_argtype(#10916, 1, #10218) +ext_argtype(#10917, 0, #11500) +ext_argtype(#10917, 1, #11375) +ext_argtype(#10918, 0, #11500) +ext_argtype(#10918, 1, #11375) +ext_argtype(#10918, 2, #10005) +ext_argtype(#10919, 0, #11500) +ext_argtype(#10920, 0, #11500) +#11502 = @"C_type$bz2.BZ2File$__enter__" +ext_argtype(#11502, 0, #11500) +ext_argtype(#10921, 0, #11500) +#11503 = @"C_type$bz2.BZ2Compressor" +ext_argtype(#10922, 0, #11503) +ext_argtype(#10922, 1, #10024) +ext_argtype(#10922, 1, #10218) +#11504 = @"C_type$bz2.BZ2Compressor$flush" +ext_argtype(#11504, 0, #11503) +#11505 = @"C_type$bz2.BZ2Decompressor$decompress" +#11506 = @"C_type$bz2.BZ2Decompressor" +ext_argtype(#11505, 0, #11506) +ext_argtype(#11505, 1, #10024) +ext_argtype(#11505, 1, #10218) +ext_argtype(#10923, 0, #10497) +ext_argtype(#10923, 1, #11375) +ext_argtype(#10923, 2, #11375) +ext_argtype(#10924, 0, #10497) +ext_argtype(#10924, 1, #11375) +ext_argtype(#10924, 2, #11375) +ext_argtype(#10925, 0, #10497) +ext_argtype(#10925, 1, #11375) +ext_argtype(#10926, 0, #10497) +#11507 = @"C_type$select.epoll$fromfd" +#11508 = @"C_type$select.epoll" +ext_argtype(#11507, 0, #11508) +ext_argtype(#11507, 1, #10005) +ext_argtype(#10927, 0, #11508) +ext_argtype(#10928, 0, #11508) +ext_argtype(#10929, 0, #11508) +ext_argtype(#10929, 1, #11375) +ext_argtype(#10929, 2, #10005) +ext_argtype(#10930, 0, #11508) +ext_argtype(#10930, 1, #11375) +ext_argtype(#10930, 2, #10005) +ext_argtype(#10931, 0, #11508) +ext_argtype(#10931, 1, #11375) +ext_argtype(#10932, 0, #11508) +ext_argtype(#10932, 1, #10038) +ext_argtype(#10932, 2, #10005) +#11509 = @"C_type$_io.BytesIO" +ext_argtype(#10933, 0, #11509) +ext_argtype(#10934, 0, #11509) +ext_argtype(#10935, 0, #11509) +ext_argtype(#10936, 0, #11509) +ext_argtype(#10937, 0, #11509) +ext_argtype(#10938, 0, #11509) +ext_argtype(#10939, 0, #11509) +ext_argtype(#10940, 0, #11509) +ext_argtype(#10940, 1, #11375) +ext_argtype(#10941, 0, #11509) +ext_argtype(#10941, 1, #11375) +ext_argtype(#10942, 0, #11509) +ext_argtype(#10942, 1, #11375) +ext_argtype(#10943, 0, #11509) +ext_argtype(#10943, 1, #11377) +ext_argtype(#10944, 0, #11509) +ext_argtype(#10944, 1, #11375) +ext_argtype(#10945, 0, #11509) +ext_argtype(#10945, 1, #11375) +ext_argtype(#10946, 0, #11509) +ext_argtype(#10946, 1, #11375) +ext_argtype(#10947, 0, #11509) +ext_argtype(#10948, 0, #11509) +ext_argtype(#10948, 1, #11375) +ext_argtype(#10948, 2, #10005) +ext_argtype(#10949, 0, #11509) +ext_argtype(#10949, 1, #11375) +ext_argtype(#10950, 0, #11509) +ext_argtype(#10951, 0, #11509) +ext_argtype(#10951, 1, #11375) +ext_argtype(#10952, 0, #11509) +#11510 = @"C_type$_io._BufferedIOBase$detach" +#11511 = @"C_type$_io._BufferedIOBase" +ext_argtype(#11510, 0, #11511) +#11512 = @"C_type$_io._BufferedIOBase$read" +ext_argtype(#11512, 0, #11511) +#11513 = @"C_type$_io._BufferedIOBase$read1" +ext_argtype(#11513, 0, #11511) +ext_argtype(#10953, 0, #11511) +#11514 = @"C_type$_io._BufferedIOBase$write" +ext_argtype(#11514, 0, #11511) +#11515 = @"C_type$_io.BufferedReader$detach" +#11516 = @"C_type$_io.BufferedReader" +ext_argtype(#11515, 0, #11516) +#11517 = @"C_type$_io.BufferedReader$flush" +ext_argtype(#11517, 0, #11516) +ext_argtype(#10954, 0, #11516) +#11518 = @"C_type$_io.BufferedReader$seekable" +ext_argtype(#11518, 0, #11516) +#11519 = @"C_type$_io.BufferedReader$readable" +ext_argtype(#11519, 0, #11516) +#11520 = @"C_type$_io.BufferedReader$writable" +ext_argtype(#11520, 0, #11516) +#11521 = @"C_type$_io.BufferedReader$fileno" +ext_argtype(#11521, 0, #11516) +#11522 = @"C_type$_io.BufferedReader$isatty" +ext_argtype(#11522, 0, #11516) +ext_argtype(#10955, 0, #11516) +ext_argtype(#10956, 0, #11516) +ext_argtype(#10957, 0, #11516) +ext_argtype(#10958, 0, #11516) +ext_argtype(#10959, 0, #11516) +ext_argtype(#10960, 0, #11516) +ext_argtype(#10961, 0, #11516) +ext_argtype(#10962, 0, #11516) +#11523 = @"C_type$_io.BufferedRandom" +ext_argtype(#10963, 0, #11523) +#11524 = @"C_type$_io.BufferedRandom$detach" +ext_argtype(#11524, 0, #11523) +#11525 = @"C_type$_io.BufferedRandom$seekable" +ext_argtype(#11525, 0, #11523) +#11526 = @"C_type$_io.BufferedRandom$readable" +ext_argtype(#11526, 0, #11523) +#11527 = @"C_type$_io.BufferedRandom$writable" +ext_argtype(#11527, 0, #11523) +#11528 = @"C_type$_io.BufferedRandom$fileno" +ext_argtype(#11528, 0, #11523) +#11529 = @"C_type$_io.BufferedRandom$isatty" +ext_argtype(#11529, 0, #11523) +ext_argtype(#10964, 0, #11523) +ext_argtype(#10965, 0, #11523) +ext_argtype(#10966, 0, #11523) +ext_argtype(#10967, 0, #11523) +ext_argtype(#10968, 0, #11523) +ext_argtype(#10969, 0, #11523) +ext_argtype(#10970, 0, #11523) +ext_argtype(#10971, 0, #11523) +ext_argtype(#10972, 0, #11523) +ext_argtype(#10973, 0, #11523) +ext_argtype(#10974, 0, #11523) +#11530 = @"C_type$_io.BufferedWriter" +ext_argtype(#10975, 0, #11530) +#11531 = @"C_type$_io.BufferedWriter$detach" +ext_argtype(#11531, 0, #11530) +#11532 = @"C_type$_io.BufferedWriter$seekable" +ext_argtype(#11532, 0, #11530) +#11533 = @"C_type$_io.BufferedWriter$readable" +ext_argtype(#11533, 0, #11530) +#11534 = @"C_type$_io.BufferedWriter$writable" +ext_argtype(#11534, 0, #11530) +#11535 = @"C_type$_io.BufferedWriter$fileno" +ext_argtype(#11535, 0, #11530) +#11536 = @"C_type$_io.BufferedWriter$isatty" +ext_argtype(#11536, 0, #11530) +ext_argtype(#10976, 0, #11530) +ext_argtype(#10977, 0, #11530) +ext_argtype(#10978, 0, #11530) +ext_argtype(#10979, 0, #11530) +ext_argtype(#10980, 0, #11530) +ext_argtype(#10981, 0, #11530) +#11537 = @"C_type$_io.BufferedRWPair$read" +#11538 = @"C_type$_io.BufferedRWPair" +ext_argtype(#11537, 0, #11538) +#11539 = @"C_type$_io.BufferedRWPair$peek" +ext_argtype(#11539, 0, #11538) +#11540 = @"C_type$_io.BufferedRWPair$read1" +ext_argtype(#11540, 0, #11538) +#11541 = @"C_type$_io.BufferedRWPair$readinto" +ext_argtype(#11541, 0, #11538) +#11542 = @"C_type$_io.BufferedRWPair$write" +ext_argtype(#11542, 0, #11538) +#11543 = @"C_type$_io.BufferedRWPair$flush" +ext_argtype(#11543, 0, #11538) +#11544 = @"C_type$_io.BufferedRWPair$readable" +ext_argtype(#11544, 0, #11538) +#11545 = @"C_type$_io.BufferedRWPair$writable" +ext_argtype(#11545, 0, #11538) +#11546 = @"C_type$_io.BufferedRWPair$close" +ext_argtype(#11546, 0, #11538) +#11547 = @"C_type$_io.BufferedRWPair$isatty" +ext_argtype(#11547, 0, #11538) +#11548 = @"C_type$_io._IOBase$seek" +#11549 = @"C_type$_io._IOBase" +ext_argtype(#11548, 0, #11549) +#11550 = @"C_type$_io._IOBase$tell" +ext_argtype(#11550, 0, #11549) +#11551 = @"C_type$_io._IOBase$truncate" +ext_argtype(#11551, 0, #11549) +ext_argtype(#10982, 0, #11549) +ext_argtype(#10983, 0, #11549) +ext_argtype(#10984, 0, #11549) +ext_argtype(#10985, 0, #11549) +ext_argtype(#10986, 0, #11549) +ext_argtype(#10987, 0, #11549) +#11552 = @"C_type$_io._IOBase$_checkSeekable" +ext_argtype(#11552, 0, #11549) +#11553 = @"C_type$_io._IOBase$_checkReadable" +ext_argtype(#11553, 0, #11549) +#11554 = @"C_type$_io._IOBase$_checkWritable" +ext_argtype(#11554, 0, #11549) +#11555 = @"C_type$_io._IOBase$fileno" +ext_argtype(#11555, 0, #11549) +ext_argtype(#10988, 0, #11549) +#11556 = @"C_type$_io._IOBase$__enter__" +ext_argtype(#11556, 0, #11549) +#11557 = @"C_type$_io._IOBase$__exit__" +ext_argtype(#11557, 0, #11549) +ext_argtype(#10989, 0, #11549) +ext_argtype(#10990, 0, #11549) +ext_argtype(#10991, 0, #11549) +#11558 = @"C_type$_io._RawIOBase" +ext_argtype(#10992, 0, #11558) +ext_argtype(#10993, 0, #11558) +#11559 = @"C_type$_io.StringIO" +ext_argtype(#10994, 0, #11559) +ext_argtype(#10995, 0, #11559) +ext_argtype(#10996, 0, #11559) +ext_argtype(#10997, 0, #11559) +ext_argtype(#10998, 0, #11559) +ext_argtype(#10999, 0, #11559) +ext_argtype(#11000, 0, #11559) +ext_argtype(#11001, 0, #11559) +ext_argtype(#11001, 1, #11375) +ext_argtype(#11002, 0, #11559) +ext_argtype(#11003, 0, #11559) +ext_argtype(#11004, 0, #11559) +ext_argtype(#11005, 0, #11559) +ext_argtype(#11006, 0, #11559) +ext_argtype(#11006, 1, #11375) +#11560 = @"C_type$_io.FileIO" +ext_argtype(#11007, 0, #11560) +ext_argtype(#11008, 0, #11560) +ext_argtype(#11009, 0, #11560) +ext_argtype(#11010, 0, #11560) +ext_argtype(#11011, 0, #11560) +ext_argtype(#11012, 0, #11560) +#11561 = @"C_type$_io.FileIO$truncate" +ext_argtype(#11561, 0, #11560) +ext_argtype(#11013, 0, #11560) +ext_argtype(#11014, 0, #11560) +ext_argtype(#11015, 0, #11560) +ext_argtype(#11016, 0, #11560) +ext_argtype(#11017, 0, #11560) +ext_argtype(#11018, 0, #11560) +#11562 = @"C_type$_io._TextIOBase$detach" +#11563 = @"C_type$_io._TextIOBase" +ext_argtype(#11562, 0, #11563) +#11564 = @"C_type$_io._TextIOBase$read" +ext_argtype(#11564, 0, #11563) +#11565 = @"C_type$_io._TextIOBase$readline" +ext_argtype(#11565, 0, #11563) +#11566 = @"C_type$_io._TextIOBase$write" +ext_argtype(#11566, 0, #11563) +#11567 = @"C_type$_io.IncrementalNewlineDecoder$decode" +#11568 = @"C_type$_io.IncrementalNewlineDecoder" +ext_argtype(#11567, 0, #11568) +ext_argtype(#11019, 0, #11568) +ext_argtype(#11020, 0, #11568) +ext_argtype(#11020, 1, #11375) +ext_argtype(#11021, 0, #11568) +#11569 = @"C_type$_io.TextIOWrapper$detach" +#11570 = @"C_type$_io.TextIOWrapper" +ext_argtype(#11569, 0, #11570) +ext_argtype(#11022, 0, #11570) +ext_argtype(#11023, 0, #11570) +#11571 = @"C_type$_io.TextIOWrapper$readline" +ext_argtype(#11571, 0, #11570) +#11572 = @"C_type$_io.TextIOWrapper$flush" +ext_argtype(#11572, 0, #11570) +ext_argtype(#11024, 0, #11570) +#11573 = @"C_type$_io.TextIOWrapper$fileno" +ext_argtype(#11573, 0, #11570) +#11574 = @"C_type$_io.TextIOWrapper$seekable" +ext_argtype(#11574, 0, #11570) +#11575 = @"C_type$_io.TextIOWrapper$readable" +ext_argtype(#11575, 0, #11570) +#11576 = @"C_type$_io.TextIOWrapper$writable" +ext_argtype(#11576, 0, #11570) +#11577 = @"C_type$_io.TextIOWrapper$isatty" +ext_argtype(#11577, 0, #11570) +#11578 = @"C_type$_io.TextIOWrapper$seek" +ext_argtype(#11578, 0, #11570) +ext_argtype(#11025, 0, #11570) +#11579 = @"C_type$_io.TextIOWrapper$truncate" +ext_argtype(#11579, 0, #11570) +#11580 = @"C_type$functools.partial" +ext_argtype(#11026, 0, #11580) +ext_argtype(#11027, 0, #11580) +ext_argtype(#11027, 1, #11375) +ext_argtype(#11028, 0, #10511) +ext_argtype(#11028, 1, #10024) +ext_argtype(#11028, 1, #10218) +ext_argtype(#11028, 2, #10005) +ext_argtype(#11029, 0, #10511) +ext_argtype(#11029, 1, #11375) +ext_argtype(#11030, 0, #10511) +ext_argtype(#11030, 1, #10024) +ext_argtype(#11030, 1, #10218) +ext_argtype(#11031, 0, #10511) +ext_argtype(#11032, 0, #10511) +ext_argtype(#11032, 1, #10024) +ext_argtype(#11032, 1, #10218) +ext_argtype(#11032, 1, #10003) +ext_argtype(#11032, 2, #10024) +ext_argtype(#11032, 2, #10218) +ext_argtype(#11033, 0, #10511) +ext_argtype(#11033, 1, #10005) +ext_argtype(#11034, 0, #10511) +ext_argtype(#11035, 0, #10511) +ext_argtype(#11035, 1, #11375) +#11581 = @"C_type$ossaudiodev.oss_audio_device$read" +ext_argtype(#11581, 0, #10543) +ext_argtype(#11581, 1, #10005) +ext_argtype(#11036, 0, #10543) +ext_argtype(#11036, 1, #10024) +ext_argtype(#11036, 1, #10218) +ext_argtype(#11037, 0, #10543) +ext_argtype(#11037, 1, #10024) +ext_argtype(#11037, 1, #10218) +ext_argtype(#11038, 0, #10543) +ext_argtype(#11039, 0, #10543) +ext_argtype(#11040, 0, #10543) +ext_argtype(#11041, 0, #10543) +ext_argtype(#11042, 0, #10543) +ext_argtype(#11043, 0, #10543) +ext_argtype(#11044, 0, #10543) +ext_argtype(#11045, 0, #10543) +ext_argtype(#11046, 0, #10543) +ext_argtype(#11047, 0, #10543) +ext_argtype(#11048, 0, #10543) +ext_argtype(#11048, 1, #10005) +ext_argtype(#11048, 2, #10005) +ext_argtype(#11048, 3, #10005) +ext_argtype(#11048, 4, #10005) +ext_argtype(#11049, 0, #10543) +ext_argtype(#11050, 0, #10543) +ext_argtype(#11051, 0, #10543) +ext_argtype(#11052, 0, #10543) +ext_argtype(#11053, 0, #10543) +ext_argtype(#11054, 0, #10545) +ext_argtype(#11055, 0, #10545) +ext_argtype(#11056, 0, #10545) +ext_argtype(#11057, 0, #10545) +ext_argtype(#11058, 0, #10545) +ext_argtype(#11059, 0, #10545) +ext_argtype(#11059, 1, #10005) +ext_argtype(#11060, 0, #10545) +ext_argtype(#11060, 1, #10005) +ext_argtype(#11060, 2, #10001) +ext_argtype(#11061, 0, #10545) +ext_argtype(#11062, 0, #10545) +#11582 = @"C_type$_ctypes.PyCArrayType$from_param" +#11583 = @"C_type$_ctypes.PyCArrayType" +ext_argtype(#11582, 0, #11583) +#11584 = @"C_type$_ctypes.PyCFuncPtrType" +ext_argtype(#11582, 0, #11584) +#11585 = @"C_type$_ctypes.PyCStructType" +ext_argtype(#11582, 0, #11585) +#11586 = @"C_type$_ctypes.UnionType" +ext_argtype(#11582, 0, #11586) +ext_argtype(#11582, 1, #11375) +#11587 = @"C_type$_ctypes.PyCArrayType$from_address" +ext_argtype(#11587, 0, #11583) +ext_argtype(#11587, 0, #11584) +ext_argtype(#11587, 0, #11585) +ext_argtype(#11587, 0, #11586) +ext_argtype(#11587, 1, #11375) +#11588 = @"C_type$_ctypes.PyCArrayType$from_buffer" +ext_argtype(#11588, 0, #11583) +ext_argtype(#11588, 0, #11584) +ext_argtype(#11588, 0, #11585) +ext_argtype(#11588, 0, #11586) +#11589 = @"C_type$_ctypes.PyCArrayType$from_buffer_copy" +ext_argtype(#11589, 0, #11583) +ext_argtype(#11589, 0, #11584) +ext_argtype(#11589, 0, #11585) +ext_argtype(#11589, 0, #11586) +#11590 = @"C_type$_ctypes.PyCArrayType$in_dll" +ext_argtype(#11590, 0, #11583) +ext_argtype(#11590, 0, #11584) +ext_argtype(#11590, 0, #11585) +ext_argtype(#11590, 0, #11586) +#11591 = @"C_type$_ctypes.PyCFuncPtrType$from_param" +ext_argtype(#11591, 0, #11583) +ext_argtype(#11591, 0, #11584) +ext_argtype(#11591, 0, #11585) +ext_argtype(#11591, 0, #11586) +ext_argtype(#11591, 1, #11375) +#11592 = @"C_type$_ctypes.PyCFuncPtrType$from_address" +ext_argtype(#11592, 0, #11583) +ext_argtype(#11592, 0, #11584) +ext_argtype(#11592, 0, #11585) +ext_argtype(#11592, 0, #11586) +ext_argtype(#11592, 1, #11375) +#11593 = @"C_type$_ctypes.PyCFuncPtrType$from_buffer" +ext_argtype(#11593, 0, #11583) +ext_argtype(#11593, 0, #11584) +ext_argtype(#11593, 0, #11585) +ext_argtype(#11593, 0, #11586) +#11594 = @"C_type$_ctypes.PyCFuncPtrType$from_buffer_copy" +ext_argtype(#11594, 0, #11583) +ext_argtype(#11594, 0, #11584) +ext_argtype(#11594, 0, #11585) +ext_argtype(#11594, 0, #11586) +#11595 = @"C_type$_ctypes.PyCFuncPtrType$in_dll" +ext_argtype(#11595, 0, #11583) +ext_argtype(#11595, 0, #11584) +ext_argtype(#11595, 0, #11585) +ext_argtype(#11595, 0, #11586) +#11596 = @"C_type$_ctypes.PyCStructType$from_param" +ext_argtype(#11596, 0, #11583) +ext_argtype(#11596, 0, #11584) +ext_argtype(#11596, 0, #11585) +ext_argtype(#11596, 0, #11586) +ext_argtype(#11596, 1, #11375) +#11597 = @"C_type$_ctypes.PyCStructType$from_address" +ext_argtype(#11597, 0, #11583) +ext_argtype(#11597, 0, #11584) +ext_argtype(#11597, 0, #11585) +ext_argtype(#11597, 0, #11586) +ext_argtype(#11597, 1, #11375) +#11598 = @"C_type$_ctypes.PyCStructType$from_buffer" +ext_argtype(#11598, 0, #11583) +ext_argtype(#11598, 0, #11584) +ext_argtype(#11598, 0, #11585) +ext_argtype(#11598, 0, #11586) +#11599 = @"C_type$_ctypes.PyCStructType$from_buffer_copy" +ext_argtype(#11599, 0, #11583) +ext_argtype(#11599, 0, #11584) +ext_argtype(#11599, 0, #11585) +ext_argtype(#11599, 0, #11586) +#11600 = @"C_type$_ctypes.PyCStructType$in_dll" +ext_argtype(#11600, 0, #11583) +ext_argtype(#11600, 0, #11584) +ext_argtype(#11600, 0, #11585) +ext_argtype(#11600, 0, #11586) +#11601 = @"C_type$_ctypes.UnionType$from_param" +ext_argtype(#11601, 0, #11583) +ext_argtype(#11601, 0, #11584) +ext_argtype(#11601, 0, #11585) +ext_argtype(#11601, 0, #11586) +ext_argtype(#11601, 1, #11375) +#11602 = @"C_type$_ctypes.UnionType$from_address" +ext_argtype(#11602, 0, #11583) +ext_argtype(#11602, 0, #11584) +ext_argtype(#11602, 0, #11585) +ext_argtype(#11602, 0, #11586) +ext_argtype(#11602, 1, #11375) +#11603 = @"C_type$_ctypes.UnionType$from_buffer" +ext_argtype(#11603, 0, #11583) +ext_argtype(#11603, 0, #11584) +ext_argtype(#11603, 0, #11585) +ext_argtype(#11603, 0, #11586) +#11604 = @"C_type$_ctypes.UnionType$from_buffer_copy" +ext_argtype(#11604, 0, #11583) +ext_argtype(#11604, 0, #11584) +ext_argtype(#11604, 0, #11585) +ext_argtype(#11604, 0, #11586) +#11605 = @"C_type$_ctypes.UnionType$in_dll" +ext_argtype(#11605, 0, #11583) +ext_argtype(#11605, 0, #11584) +ext_argtype(#11605, 0, #11585) +ext_argtype(#11605, 0, #11586) +#11606 = @"C_type$_ctypes._SimpleCData$__ctypes_from_outparam__" +#11607 = @"C_type$_ctypes._SimpleCData" +ext_argtype(#11606, 0, #11607) +#11608 = @"C_type$_ctypes._CData$__ctypes_from_outparam__" +#11609 = @"C_type$_ctypes._CData" +ext_argtype(#11608, 0, #11609) +ext_argtype(#11063, 0, #11609) +ext_argtype(#11064, 0, #11609) +#11610 = @"C_type$_ctypes.PyCPointerType$from_address" +#11611 = @"C_type$_ctypes.PyCPointerType" +ext_argtype(#11610, 0, #11611) +ext_argtype(#11610, 1, #11375) +#11612 = @"C_type$_ctypes.PyCPointerType$from_buffer" +ext_argtype(#11612, 0, #11611) +#11613 = @"C_type$_ctypes.PyCPointerType$from_buffer_copy" +ext_argtype(#11613, 0, #11611) +#11614 = @"C_type$_ctypes.PyCPointerType$in_dll" +ext_argtype(#11614, 0, #11611) +ext_argtype(#11065, 0, #11611) +ext_argtype(#11065, 1, #11375) +ext_argtype(#11066, 0, #11611) +ext_argtype(#11066, 1, #11375) +#11615 = @"C_type$_ctypes.PyCSimpleType" +ext_argtype(#11067, 0, #11615) +ext_argtype(#11067, 1, #11375) +#11616 = @"C_type$_ctypes.PyCSimpleType$from_address" +ext_argtype(#11616, 0, #11615) +ext_argtype(#11616, 1, #11375) +#11617 = @"C_type$_ctypes.PyCSimpleType$from_buffer" +ext_argtype(#11617, 0, #11615) +#11618 = @"C_type$_ctypes.PyCSimpleType$from_buffer_copy" +ext_argtype(#11618, 0, #11615) +#11619 = @"C_type$_ctypes.PyCSimpleType$in_dll" +ext_argtype(#11619, 0, #11615) +#11620 = @"C_type$_lsprof.Profiler$getstats" +#11621 = @"C_type$_lsprof.Profiler" +ext_argtype(#11620, 0, #11621) +ext_argtype(#11068, 0, #11621) +ext_argtype(#11068, 1, #10005) +ext_argtype(#11068, 2, #10005) +ext_argtype(#11069, 0, #11621) +ext_argtype(#11070, 0, #11621) +ext_argtype(#11071, 0, #10575) +#11622 = @"C_type$Element$2get" +ext_argtype(#11622, 0, #10575) +ext_argtype(#11622, 1, #11375) +ext_argtype(#11622, 2, #11375) +ext_argtype(#11072, 0, #10575) +ext_argtype(#11072, 1, #11375) +ext_argtype(#11072, 2, #11375) +ext_argtype(#11073, 0, #10575) +ext_argtype(#11073, 1, #11375) +ext_argtype(#11073, 2, #11375) +ext_argtype(#11074, 0, #10575) +ext_argtype(#11074, 1, #11375) +ext_argtype(#11074, 2, #11375) +ext_argtype(#11074, 3, #11375) +ext_argtype(#11075, 0, #10575) +ext_argtype(#11075, 1, #11375) +ext_argtype(#11075, 2, #11375) +ext_argtype(#11076, 0, #10575) +ext_argtype(#11076, 1, #10575) +ext_argtype(#11077, 0, #10575) +ext_argtype(#11077, 1, #11375) +ext_argtype(#11078, 0, #10575) +ext_argtype(#11078, 1, #10005) +ext_argtype(#11078, 2, #10575) +ext_argtype(#11079, 0, #10575) +ext_argtype(#11079, 1, #10575) +#11623 = @"C_type$Element$2iter" +ext_argtype(#11623, 0, #10575) +ext_argtype(#11623, 1, #11375) +#11624 = @"C_type$Element$2itertext" +ext_argtype(#11624, 0, #10575) +#11625 = @"C_type$Element$2iterfind" +ext_argtype(#11625, 0, #10575) +ext_argtype(#11625, 1, #11375) +ext_argtype(#11625, 2, #11375) +#11626 = @"C_type$Element$2getiterator" +ext_argtype(#11626, 0, #10575) +ext_argtype(#11626, 1, #11375) +ext_argtype(#11080, 0, #10575) +ext_argtype(#11081, 0, #10575) +ext_argtype(#11082, 0, #10575) +ext_argtype(#11083, 0, #10575) +ext_argtype(#11083, 1, #11375) +ext_argtype(#11083, 2, #11375) +ext_argtype(#11084, 0, #10575) +ext_argtype(#11085, 0, #10575) +ext_argtype(#11085, 1, #11375) +ext_argtype(#11086, 0, #10575) +ext_argtype(#11087, 0, #10578) +ext_argtype(#11087, 1, #11375) +ext_argtype(#11088, 0, #10578) +ext_argtype(#11088, 1, #11375) +ext_argtype(#11088, 2, #11375) +#11627 = @"C_type$TreeBuilder$2end" +ext_argtype(#11627, 0, #10578) +ext_argtype(#11627, 1, #11375) +ext_argtype(#11089, 0, #10578) +ext_argtype(#11089, 1, #11375) +ext_argtype(#11089, 2, #11375) +ext_argtype(#11090, 0, #10578) +ext_argtype(#11091, 0, #10580) +ext_argtype(#11091, 1, #10024) +ext_argtype(#11091, 1, #10218) +ext_argtype(#11092, 0, #10580) +ext_argtype(#11093, 0, #10580) +ext_argtype(#11093, 1, #11375) +ext_argtype(#11094, 0, #10580) +ext_argtype(#11094, 1, #10021) +ext_argtype(#11094, 2, #11375) +#11628 = @"C_type$datetime.timedelta$total_seconds" +#11629 = @"C_type$datetime.timedelta" +ext_argtype(#11628, 0, #11629) +ext_argtype(#11095, 0, #11629) +#11630 = @"C_type$datetime.time$isoformat" +#11631 = @"C_type$datetime.time" +ext_argtype(#11630, 0, #11631) +#11632 = @"C_type$datetime.time$strftime" +ext_argtype(#11632, 0, #11631) +ext_argtype(#11096, 0, #11631) +ext_argtype(#11097, 0, #11631) +ext_argtype(#11098, 0, #11631) +ext_argtype(#11099, 0, #11631) +#11633 = @"C_type$datetime.time$replace" +ext_argtype(#11633, 0, #11631) +ext_argtype(#11100, 0, #11631) +#11634 = @"C_type$datetime.tzinfo$tzname" +#11635 = @"C_type$datetime.tzinfo" +ext_argtype(#11634, 0, #11635) +ext_argtype(#11634, 1, #11375) +#11636 = @"C_type$datetime.tzinfo$utcoffset" +ext_argtype(#11636, 0, #11635) +ext_argtype(#11636, 1, #11375) +#11637 = @"C_type$datetime.tzinfo$dst" +ext_argtype(#11637, 0, #11635) +ext_argtype(#11637, 1, #11375) +#11638 = @"C_type$datetime.tzinfo$fromutc" +ext_argtype(#11638, 0, #11635) +ext_argtype(#11638, 1, #11375) +ext_argtype(#11101, 0, #11635) +#11639 = @"C_type$datetime.datetime$now" +#11640 = @"C_type$datetime.datetime" +ext_argtype(#11639, 0, #11640) +#11641 = @"C_type$datetime.datetime$utcnow" +ext_argtype(#11641, 0, #11640) +#11642 = @"C_type$datetime.datetime$fromtimestamp" +ext_argtype(#11642, 0, #11640) +#11643 = @"C_type$datetime.datetime$utcfromtimestamp" +ext_argtype(#11643, 0, #11640) +#11644 = @"C_type$datetime.datetime$strptime" +ext_argtype(#11644, 0, #11640) +#11645 = @"C_type$datetime.datetime$combine" +ext_argtype(#11645, 0, #11640) +#11646 = @"C_type$datetime.datetime$date" +ext_argtype(#11646, 0, #11640) +#11647 = @"C_type$datetime.datetime$time" +ext_argtype(#11647, 0, #11640) +#11648 = @"C_type$datetime.datetime$timetz" +ext_argtype(#11648, 0, #11640) +ext_argtype(#11102, 0, #11640) +#11649 = @"C_type$datetime.datetime$timetuple" +ext_argtype(#11649, 0, #11640) +#11650 = @"C_type$datetime.datetime$utctimetuple" +ext_argtype(#11650, 0, #11640) +#11651 = @"C_type$datetime.datetime$isoformat" +ext_argtype(#11651, 0, #11640) +ext_argtype(#11103, 0, #11640) +ext_argtype(#11104, 0, #11640) +ext_argtype(#11105, 0, #11640) +#11652 = @"C_type$datetime.datetime$replace" +ext_argtype(#11652, 0, #11640) +#11653 = @"C_type$datetime.datetime$astimezone" +ext_argtype(#11653, 0, #11640) +ext_argtype(#11106, 0, #11640) +#11654 = @"C_type$datetime.date$fromtimestamp" +#11655 = @"C_type$datetime.date" +ext_argtype(#11654, 0, #11655) +#11656 = @"C_type$datetime.date$fromordinal" +ext_argtype(#11656, 0, #11655) +#11657 = @"C_type$datetime.date$today" +ext_argtype(#11657, 0, #11655) +ext_argtype(#11107, 0, #11655) +#11658 = @"C_type$datetime.date$strftime" +ext_argtype(#11658, 0, #11655) +ext_argtype(#11108, 0, #11655) +#11659 = @"C_type$datetime.date$timetuple" +ext_argtype(#11659, 0, #11655) +ext_argtype(#11109, 0, #11655) +ext_argtype(#11110, 0, #11655) +ext_argtype(#11111, 0, #11655) +ext_argtype(#11112, 0, #11655) +ext_argtype(#11113, 0, #11655) +#11660 = @"C_type$datetime.date$replace" +ext_argtype(#11660, 0, #11655) +ext_argtype(#11114, 0, #11655) +#11661 = @"C_type$_ast.AST" +ext_argtype(#11115, 0, #11661) +#11662 = @"C_type$imp.NullImporter" +ext_argtype(#11116, 0, #11662) +ext_argtype(#11117, 0, #11119) +#11663 = @"C_type$xrange" +ext_argtype(#11118, 0, #11663) +ext_argtype(#11120, 0, #11663) +#11664 = @"C_type$reversed" +ext_argtype(#11121, 0, #11664) +ext_argtype(#11122, 0, #10024) +ext_argtype(#11122, 1, #11375) +ext_argtype(#11123, 0, #10024) +ext_argtype(#11124, 0, #10024) +ext_argtype(#11125, 0, #10024) +ext_argtype(#11126, 0, #10024) +ext_argtype(#11127, 0, #10024) +ext_argtype(#11128, 0, #10024) +ext_argtype(#11129, 0, #10024) +ext_argtype(#11130, 0, #10024) +ext_argtype(#11131, 0, #10024) +ext_argtype(#11132, 0, #10024) +ext_argtype(#11133, 0, #10024) +ext_argtype(#11134, 0, #10024) +ext_argtype(#11135, 0, #10024) +ext_argtype(#11136, 0, #10024) +ext_argtype(#11137, 0, #10024) +ext_argtype(#11137, 1, #11375) +ext_argtype(#11138, 0, #10024) +ext_argtype(#11139, 0, #10024) +ext_argtype(#11140, 0, #10024) +ext_argtype(#11141, 0, #10024) +ext_argtype(#11142, 0, #10024) +ext_argtype(#11143, 0, #10024) +ext_argtype(#11144, 0, #10024) +ext_argtype(#11145, 0, #10024) +ext_argtype(#11145, 1, #11375) +ext_argtype(#11146, 0, #10024) +ext_argtype(#11147, 0, #10024) +ext_argtype(#11148, 0, #10024) +ext_argtype(#11149, 0, #10024) +ext_argtype(#11150, 0, #10024) +ext_argtype(#11151, 0, #10024) +ext_argtype(#11152, 0, #10024) +ext_argtype(#11153, 0, #10024) +ext_argtype(#11154, 0, #10024) +#11665 = @"C_type$str$2format" +ext_argtype(#11665, 0, #10024) +ext_argtype(#11155, 0, #10024) +ext_argtype(#11156, 0, #10024) +ext_argtype(#11157, 0, #10024) +#11666 = @"C_type$str$2encode" +ext_argtype(#11666, 0, #10024) +#11667 = @"C_type$str$2decode" +ext_argtype(#11667, 0, #10024) +ext_argtype(#11159, 0, #10024) +ext_argtype(#11160, 0, #10024) +ext_argtype(#11161, 0, #10024) +ext_argtype(#11162, 0, #10024) +ext_argtype(#11163, 0, #10602) +#11668 = @"C_type$exceptions.BaseException" +ext_argtype(#11164, 0, #11668) +ext_argtype(#11165, 0, #11668) +ext_argtype(#11165, 1, #11375) +ext_argtype(#11166, 0, #11668) +#11669 = @"C_type$exceptions.EnvironmentError" +ext_argtype(#11167, 0, #11669) +ext_argtype(#11168, 0, #10250) +#11670 = @"C_type$file$2read" +ext_argtype(#11670, 0, #10250) +ext_argtype(#11169, 0, #10250) +ext_argtype(#11170, 0, #10250) +ext_argtype(#11171, 0, #10250) +ext_argtype(#11172, 0, #10250) +ext_argtype(#11173, 0, #10250) +ext_argtype(#11174, 0, #10250) +ext_argtype(#11175, 0, #10250) +ext_argtype(#11176, 0, #10250) +ext_argtype(#11177, 0, #10250) +ext_argtype(#11177, 1, #11375) +ext_argtype(#11178, 0, #10250) +ext_argtype(#11179, 0, #10250) +ext_argtype(#11180, 0, #10250) +ext_argtype(#11181, 0, #10250) +ext_argtype(#11182, 0, #10250) +ext_argtype(#11183, 0, #10005) +ext_argtype(#11184, 0, #10005) +ext_argtype(#11185, 0, #10005) +ext_argtype(#11186, 0, #10005) +ext_argtype(#11187, 0, #10005) +ext_argtype(#11187, 1, #11375) +#11671 = @"C_type$listiterator" +ext_argtype(#11188, 0, #11671) +ext_argtype(#11189, 0, #11192) +ext_argtype(#11190, 0, #10021) +ext_argtype(#11190, 1, #11375) +ext_argtype(#11191, 0, #10021) +ext_argtype(#11193, 0, #10021) +ext_argtype(#11194, 0, #10021) +ext_argtype(#11194, 1, #11375) +ext_argtype(#11195, 0, #10021) +ext_argtype(#11195, 1, #10005) +ext_argtype(#11195, 2, #11375) +ext_argtype(#11196, 0, #10021) +ext_argtype(#11196, 1, #11375) +#11672 = @"C_type$list$2pop" +ext_argtype(#11672, 0, #10021) +ext_argtype(#11672, 1, #10005) +ext_argtype(#11197, 0, #10021) +ext_argtype(#11197, 1, #11375) +ext_argtype(#11198, 0, #10021) +ext_argtype(#11198, 1, #11375) +ext_argtype(#11198, 2, #11375) +ext_argtype(#11198, 3, #11375) +ext_argtype(#11199, 0, #10021) +ext_argtype(#11199, 1, #11375) +ext_argtype(#11200, 0, #10021) +ext_argtype(#11201, 0, #10021) +ext_argtype(#11201, 1, #11375) +ext_argtype(#11201, 2, #11375) +ext_argtype(#11201, 3, #10005) +#11673 = @"C_type$slice" +ext_argtype(#11202, 0, #11673) +ext_argtype(#11202, 1, #11375) +ext_argtype(#11203, 0, #11673) +#11674 = @"C_type$dictionary-keyiterator" +ext_argtype(#11204, 0, #11674) +#11675 = @"C_type$dictionary-valueiterator" +ext_argtype(#11204, 0, #11675) +#11676 = @"C_type$dictionary-itemiterator" +ext_argtype(#11204, 0, #11676) +ext_argtype(#11205, 0, #11674) +ext_argtype(#11205, 0, #11675) +ext_argtype(#11205, 0, #11676) +ext_argtype(#11206, 0, #11674) +ext_argtype(#11206, 0, #11675) +ext_argtype(#11206, 0, #11676) +ext_argtype(#11207, 0, #10007) +ext_argtype(#11207, 1, #11375) +#11677 = @"C_type$dict$2__getitem__" +ext_argtype(#11677, 0, #10007) +ext_argtype(#11677, 1, #11375) +ext_argtype(#11208, 0, #10007) +ext_argtype(#11209, 0, #10007) +ext_argtype(#11209, 1, #11375) +#11678 = @"C_type$dict$2get" +ext_argtype(#11678, 0, #10007) +#11679 = @"C_type$dict$2setdefault" +ext_argtype(#11679, 0, #10007) +#11680 = @"C_type$dict$2pop" +ext_argtype(#11680, 0, #10007) +ext_argtype(#11210, 0, #10007) +ext_argtype(#11211, 0, #10007) +ext_argtype(#11212, 0, #10007) +ext_argtype(#11213, 0, #10007) +#11681 = @"C_type$dict$2viewkeys" +ext_argtype(#11681, 0, #10007) +#11682 = @"C_type$dict$2viewitems" +ext_argtype(#11682, 0, #10007) +#11683 = @"C_type$dict$2viewvalues" +ext_argtype(#11683, 0, #10007) +ext_argtype(#11214, 0, #10007) +#11684 = @"C_type$dict$2fromkeys" +ext_argtype(#11684, 0, #10007) +ext_argtype(#11215, 0, #10007) +ext_argtype(#11216, 0, #10007) +#11685 = @"C_type$dict$2iterkeys" +ext_argtype(#11685, 0, #10007) +#11686 = @"C_type$dict$2itervalues" +ext_argtype(#11686, 0, #10007) +#11687 = @"C_type$dict$2iteritems" +ext_argtype(#11687, 0, #10007) +#11688 = @"C_type$long" +ext_argtype(#11217, 0, #11688) +ext_argtype(#11218, 0, #11688) +ext_argtype(#11219, 0, #11688) +ext_argtype(#11220, 0, #11688) +ext_argtype(#11221, 0, #11688) +ext_argtype(#11221, 1, #11375) +ext_argtype(#11222, 0, #11688) +#11689 = @"C_type$generator$2send" +#11690 = @"C_type$generator" +ext_argtype(#11689, 0, #11690) +ext_argtype(#11689, 1, #11375) +#11691 = @"C_type$generator$2throw" +ext_argtype(#11691, 0, #11690) +ext_argtype(#11223, 0, #11690) +#11692 = @"C_type$weakproxy$2__unicode__" +#11693 = @"C_type$weakproxy" +ext_argtype(#11692, 0, #11693) +ext_argtype(#11224, 0, #10517) +ext_argtype(#11225, 0, #10517) +ext_argtype(#11226, 0, #10517) +ext_argtype(#11226, 1, #11375) +ext_argtype(#11227, 0, #10492) +ext_argtype(#11228, 0, #10492) +ext_argtype(#11229, 0, #10492) +ext_argtype(#11229, 1, #11375) +ext_argtype(#11230, 0, #10492) +ext_argtype(#11230, 1, #11375) +ext_argtype(#11231, 0, #11375) +ext_argtype(#11231, 1, #10005) +ext_argtype(#11232, 0, #11375) +ext_argtype(#11232, 1, #10005) +#11694 = @"C_type$object$2__subclasshook__" +ext_argtype(#11694, 0, #11375) +ext_argtype(#11233, 0, #11375) +ext_argtype(#11233, 1, #11375) +ext_argtype(#11234, 0, #11375) +#11695 = @"C_type$setiterator" +ext_argtype(#11235, 0, #11695) +ext_argtype(#11236, 0, #11239) +ext_argtype(#11236, 1, #11375) +ext_argtype(#11237, 0, #11239) +ext_argtype(#11240, 0, #11239) +ext_argtype(#11241, 0, #11239) +ext_argtype(#11242, 0, #11239) +ext_argtype(#11242, 1, #11375) +ext_argtype(#11243, 0, #11239) +ext_argtype(#11243, 1, #11375) +ext_argtype(#11244, 0, #11239) +ext_argtype(#11244, 1, #11375) +ext_argtype(#11245, 0, #11239) +ext_argtype(#11246, 0, #11239) +ext_argtype(#11247, 0, #11239) +ext_argtype(#11247, 1, #11375) +ext_argtype(#11248, 0, #11239) +ext_argtype(#11249, 0, #11238) +ext_argtype(#11249, 1, #11375) +ext_argtype(#11250, 0, #11238) +ext_argtype(#11251, 0, #11238) +ext_argtype(#11251, 1, #11375) +ext_argtype(#11252, 0, #11238) +ext_argtype(#11253, 0, #11238) +ext_argtype(#11253, 1, #11375) +ext_argtype(#11254, 0, #11238) +ext_argtype(#11255, 0, #11238) +ext_argtype(#11256, 0, #11238) +ext_argtype(#11257, 0, #11238) +ext_argtype(#11258, 0, #11238) +ext_argtype(#11258, 1, #11375) +ext_argtype(#11259, 0, #11238) +ext_argtype(#11259, 1, #11375) +ext_argtype(#11260, 0, #11238) +ext_argtype(#11260, 1, #11375) +#11696 = @"C_type$set$2pop" +ext_argtype(#11696, 0, #11238) +ext_argtype(#11261, 0, #11238) +ext_argtype(#11262, 0, #11238) +ext_argtype(#11262, 1, #11375) +ext_argtype(#11263, 0, #11238) +ext_argtype(#11264, 0, #11238) +ext_argtype(#11264, 1, #11375) +ext_argtype(#11265, 0, #11238) +ext_argtype(#11265, 1, #11375) +ext_argtype(#11266, 0, #11238) +ext_argtype(#11267, 0, #11238) +ext_argtype(#11268, 0, #10655) +ext_argtype(#11269, 0, #10038) +ext_argtype(#11270, 0, #10038) +ext_argtype(#11271, 0, #10038) +#11697 = @"C_type$float$2fromhex" +ext_argtype(#11697, 0, #10038) +ext_argtype(#11697, 1, #11375) +ext_argtype(#11272, 0, #10038) +ext_argtype(#11273, 0, #10038) +ext_argtype(#11274, 0, #10038) +ext_argtype(#11275, 0, #10038) +ext_argtype(#11275, 1, #11375) +ext_argtype(#11276, 0, #10038) +ext_argtype(#11276, 1, #10024) +ext_argtype(#11276, 1, #10218) +ext_argtype(#11276, 2, #10024) +ext_argtype(#11276, 2, #10218) +ext_argtype(#11277, 0, #10038) +ext_argtype(#11277, 1, #11375) +#11698 = @"C_type$dictproxy" +ext_argtype(#11278, 0, #11698) +ext_argtype(#11278, 1, #11375) +#11699 = @"C_type$dictproxy$2get" +ext_argtype(#11699, 0, #11698) +#11700 = @"C_type$dictproxy$2keys" +ext_argtype(#11700, 0, #11698) +#11701 = @"C_type$dictproxy$2values" +ext_argtype(#11701, 0, #11698) +#11702 = @"C_type$dictproxy$2items" +ext_argtype(#11702, 0, #11698) +#11703 = @"C_type$dictproxy$2iterkeys" +ext_argtype(#11703, 0, #11698) +#11704 = @"C_type$dictproxy$2itervalues" +ext_argtype(#11704, 0, #11698) +#11705 = @"C_type$dictproxy$2iteritems" +ext_argtype(#11705, 0, #11698) +#11706 = @"C_type$dictproxy$2copy" +ext_argtype(#11706, 0, #11698) +#11707 = @"C_type$property$2getter" +#11708 = @"C_type$property" +ext_argtype(#11707, 0, #11708) +ext_argtype(#11707, 1, #11375) +#11709 = @"C_type$property$2setter" +ext_argtype(#11709, 0, #11708) +ext_argtype(#11709, 1, #11375) +#11710 = @"C_type$property$2deleter" +ext_argtype(#11710, 0, #11708) +ext_argtype(#11710, 1, #11375) +#11711 = @"C_type$bytearray_iterator" +ext_argtype(#11279, 0, #11711) +ext_argtype(#11280, 0, #11285) +ext_argtype(#11281, 0, #11285) +ext_argtype(#11282, 0, #11285) +ext_argtype(#11283, 0, #11285) +ext_argtype(#11283, 1, #11375) +ext_argtype(#11284, 0, #11285) +ext_argtype(#11286, 0, #11285) +ext_argtype(#11287, 0, #11285) +#11712 = @"C_type$bytearray$2decode" +ext_argtype(#11712, 0, #11285) +ext_argtype(#11288, 0, #11285) +ext_argtype(#11289, 0, #11285) +ext_argtype(#11290, 0, #11285) +ext_argtype(#11290, 1, #11375) +ext_argtype(#11291, 0, #11285) +ext_argtype(#11292, 0, #11285) +ext_argtype(#11293, 0, #11285) +ext_argtype(#11294, 0, #11285) +ext_argtype(#11295, 0, #11285) +ext_argtype(#11296, 0, #11285) +ext_argtype(#11297, 0, #11285) +ext_argtype(#11298, 0, #11285) +ext_argtype(#11299, 0, #11285) +ext_argtype(#11300, 0, #11285) +ext_argtype(#11301, 0, #11285) +ext_argtype(#11302, 0, #11285) +ext_argtype(#11302, 1, #11375) +ext_argtype(#11303, 0, #11285) +ext_argtype(#11304, 0, #11285) +ext_argtype(#11305, 0, #11285) +ext_argtype(#11306, 0, #11285) +ext_argtype(#11306, 1, #11375) +ext_argtype(#11307, 0, #11285) +ext_argtype(#11308, 0, #11285) +ext_argtype(#11308, 1, #11375) +ext_argtype(#11309, 0, #11285) +ext_argtype(#11310, 0, #11285) +ext_argtype(#11311, 0, #11285) +ext_argtype(#11312, 0, #11285) +ext_argtype(#11313, 0, #11285) +ext_argtype(#11314, 0, #11285) +ext_argtype(#11314, 1, #11375) +ext_argtype(#11315, 0, #11285) +ext_argtype(#11316, 0, #11285) +ext_argtype(#11317, 0, #11285) +ext_argtype(#11318, 0, #11285) +ext_argtype(#11319, 0, #11285) +ext_argtype(#11320, 0, #11285) +ext_argtype(#11321, 0, #11285) +ext_argtype(#11322, 0, #11285) +ext_argtype(#11323, 0, #11285) +ext_argtype(#11324, 0, #11285) +ext_argtype(#11325, 0, #11285) +#11713 = @"C_type$unicode$2encode" +ext_argtype(#11713, 0, #10218) +ext_argtype(#11326, 0, #10218) +ext_argtype(#11327, 0, #10218) +ext_argtype(#11328, 0, #10218) +ext_argtype(#11329, 0, #10218) +ext_argtype(#11329, 1, #11375) +ext_argtype(#11330, 0, #10218) +ext_argtype(#11331, 0, #10218) +ext_argtype(#11332, 0, #10218) +ext_argtype(#11333, 0, #10218) +ext_argtype(#11334, 0, #10218) +ext_argtype(#11335, 0, #10218) +ext_argtype(#11336, 0, #10218) +ext_argtype(#11336, 1, #11375) +ext_argtype(#11337, 0, #10218) +ext_argtype(#11338, 0, #10218) +ext_argtype(#11339, 0, #10218) +ext_argtype(#11340, 0, #10218) +#11714 = @"C_type$unicode$2decode" +ext_argtype(#11714, 0, #10218) +ext_argtype(#11341, 0, #10218) +ext_argtype(#11342, 0, #10218) +ext_argtype(#11343, 0, #10218) +ext_argtype(#11344, 0, #10218) +ext_argtype(#11345, 0, #10218) +ext_argtype(#11345, 1, #11375) +ext_argtype(#11346, 0, #10218) +ext_argtype(#11347, 0, #10218) +ext_argtype(#11348, 0, #10218) +#11715 = @"C_type$unicode$2translate" +ext_argtype(#11715, 0, #10218) +ext_argtype(#11715, 1, #11375) +ext_argtype(#11349, 0, #10218) +ext_argtype(#11350, 0, #10218) +ext_argtype(#11351, 0, #10218) +ext_argtype(#11352, 0, #10218) +ext_argtype(#11353, 0, #10218) +ext_argtype(#11354, 0, #10218) +ext_argtype(#11355, 0, #10218) +ext_argtype(#11356, 0, #10218) +ext_argtype(#11357, 0, #10218) +ext_argtype(#11358, 0, #10218) +ext_argtype(#11359, 0, #10218) +ext_argtype(#11360, 0, #10218) +ext_argtype(#11361, 0, #10218) +#11716 = @"C_type$unicode$2format" +ext_argtype(#11716, 0, #10218) +ext_argtype(#11362, 0, #10218) +ext_argtype(#11363, 0, #10218) +ext_argtype(#11364, 0, #10218) +ext_argtype(#11365, 0, #10218) +ext_argtype(#11366, 0, #10218) +#11717 = @"C_type$EncodingMap" +ext_argtype(#11367, 0, #11717) +#11718 = @"C_type$memoryview" +ext_argtype(#11368, 0, #11718) +ext_argtype(#11369, 0, #11718) +#11719 = @"C_type$tupleiterator" +ext_argtype(#11370, 0, #11719) +ext_argtype(#11371, 0, #10001) +ext_argtype(#11372, 0, #10001) +ext_argtype(#11373, 0, #10001) +ext_argtype(#11373, 1, #11375) +ext_argtype(#11373, 2, #11375) +ext_argtype(#11373, 3, #11375) +ext_argtype(#11374, 0, #10001) +ext_argtype(#11374, 1, #11375) +ext_argreturn(#11428, 1) +ext_argreturn(#11429, 1) +ext_argreturn(#11608, 0) +#11720 = @"C_type$_multiprocessing.Connection$closed" +ext_proptype(#11720, #10058) +#11721 = @"C_type$_multiprocessing.Connection$readable" +ext_proptype(#11721, #10058) +#11722 = @"C_type$_multiprocessing.Connection$writable" +ext_proptype(#11722, #10058) +#11723 = @"C_type$_ssl._SSLContext$check_hostname" +ext_proptype(#11723, #10058) +#11724 = @"C_type$_ssl._SSLContext$options" +ext_proptype(#11724, #10005) +#11725 = @"C_type$_ssl._SSLContext$verify_flags" +ext_proptype(#11725, #10005) +#11726 = @"C_type$_ssl._SSLContext$verify_mode" +ext_proptype(#11726, #10005) +#11727 = @"C_type$_sre.SRE_Match$lastindex" +ext_proptype(#11727, #10005) +ext_proptype(#11727, #10003) +#11728 = @"C_type$_sre.SRE_Match$lastgroup" +ext_proptype(#11728, #10003) +#11729 = @"C_type$_sre.SRE_Match$regs" +ext_proptype(#11729, #10001) +#11730 = @"C_type$MultibyteIncrementalEncoder$2errors" +ext_proptype(#11730, #10024) +#11731 = @"C_type$MultibyteIncrementalDecoder$2errors" +ext_proptype(#11731, #10024) +#11732 = @"C_type$MultibyteStreamReader$2errors" +ext_proptype(#11732, #10024) +#11733 = @"C_type$MultibyteStreamWriter$2errors" +ext_proptype(#11733, #10024) +#11734 = @"C_type$collections.deque$maxlen" +ext_proptype(#11734, #10005) +ext_proptype(#11734, #10003) +#11735 = @"C_type$_csv.Dialect$escapechar" +ext_proptype(#11735, #10024) +ext_proptype(#11735, #10003) +#11736 = @"C_type$_csv.Dialect$quotechar" +ext_proptype(#11736, #10024) +ext_proptype(#11736, #10003) +#11737 = @"C_type$_csv.Dialect$quoting" +ext_proptype(#11737, #10005) +#11738 = @"C_type$array.array$typecode" +ext_proptype(#11738, #10024) +#11739 = @"C_type$array.array$itemsize" +ext_proptype(#11739, #10005) +#11740 = @"C_type$cStringIO.StringO$closed" +ext_proptype(#11740, #10058) +#11741 = @"C_type$cStringIO.StringI$closed" +ext_proptype(#11741, #10058) +#11742 = @"C_type$Struct$2size" +ext_proptype(#11742, #10005) +#11743 = @"C_type$xxsubtype.spamlist$state" +ext_proptype(#11743, #10005) +#11744 = @"C_type$_hashlib.HASH$digest_size" +ext_proptype(#11744, #10005) +#11745 = @"C_type$_hashlib.HASH$block_size" +ext_proptype(#11745, #10005) +#11746 = @"C_type$_hashlib.HASH$digestsize" +ext_proptype(#11746, #10005) +#11747 = @"C_type$bz2.BZ2File$closed" +ext_proptype(#11747, #10005) +#11748 = @"C_type$bz2.BZ2File$newlines" +ext_proptype(#11748, #10001) +ext_proptype(#11748, #10024) +ext_proptype(#11748, #10003) +#11749 = @"C_type$select.epoll$closed" +ext_proptype(#11749, #10058) +#11750 = @"C_type$_io.BytesIO$closed" +ext_proptype(#11750, #10058) +#11751 = @"C_type$_io._IOBase$closed" +ext_proptype(#11751, #10058) +#11752 = @"C_type$_io.StringIO$closed" +ext_proptype(#11752, #10058) +#11753 = @"C_type$_io.StringIO$newlines" +ext_proptype(#11753, #10003) +#11754 = @"C_type$_io.StringIO$line_buffering" +ext_proptype(#11754, #10058) +#11755 = @"C_type$_io.FileIO$closed" +ext_proptype(#11755, #10058) +#11756 = @"C_type$_io.FileIO$closefd" +ext_proptype(#11756, #10058) +#11757 = @"C_type$_io.FileIO$mode" +ext_proptype(#11757, #10218) +#11758 = @"C_type$_io._TextIOBase$encoding" +ext_proptype(#11758, #10003) +#11759 = @"C_type$_io._TextIOBase$newlines" +ext_proptype(#11759, #10003) +#11760 = @"C_type$_io._TextIOBase$errors" +ext_proptype(#11760, #10003) +#11761 = @"C_type$_io.IncrementalNewlineDecoder$newlines" +ext_proptype(#11761, #10001) +ext_proptype(#11761, #10218) +ext_proptype(#11761, #10003) +#11762 = @"C_type$_io.TextIOWrapper$newlines" +ext_proptype(#11762, #10003) +#11763 = @"C_type$_io.TextIOWrapper$_CHUNK_SIZE" +ext_proptype(#11763, #10005) +#11764 = @"C_type$_ctypes.CField$offset" +ext_proptype(#11764, #10005) +#11765 = @"C_type$_ctypes.CField$size" +ext_proptype(#11765, #10005) +#11766 = @"C_type$_ctypes.PyCFuncPtr$errcheck" +ext_proptype(#11766, #10003) +#11767 = @"C_type$_ctypes.PyCFuncPtr$restype" +ext_proptype(#11767, #10003) +#11768 = @"C_type$_ctypes.PyCFuncPtr$argtypes" +ext_proptype(#11768, #10003) +#11769 = @"C_type$datetime.time$hour" +ext_proptype(#11769, #10005) +#11770 = @"C_type$datetime.time$minute" +ext_proptype(#11770, #10005) +#11771 = @"C_type$datetime.time$second" +ext_proptype(#11771, #10005) +#11772 = @"C_type$datetime.time$microsecond" +ext_proptype(#11772, #10005) +#11773 = @"C_type$datetime.datetime$hour" +ext_proptype(#11773, #10005) +#11774 = @"C_type$datetime.datetime$minute" +ext_proptype(#11774, #10005) +#11775 = @"C_type$datetime.datetime$second" +ext_proptype(#11775, #10005) +#11776 = @"C_type$datetime.datetime$microsecond" +ext_proptype(#11776, #10005) +#11777 = @"C_type$datetime.date$year" +ext_proptype(#11777, #10005) +#11778 = @"C_type$datetime.date$month" +ext_proptype(#11778, #10005) +#11779 = @"C_type$datetime.date$day" +ext_proptype(#11779, #10005) +#11780 = @"C_type$frame$2f_lineno" +ext_proptype(#11780, #10005) +#11781 = @"C_type$frame$2f_trace" +ext_proptype(#11781, #10003) +#11782 = @"C_type$frame$2f_restricted" +ext_proptype(#11782, #10058) +#11783 = @"C_type$frame$2f_exc_traceback" +ext_proptype(#11783, #10003) +#11784 = @"C_type$frame$2f_exc_type" +ext_proptype(#11784, #10003) +#11785 = @"C_type$frame$2f_exc_value" +ext_proptype(#11785, #10003) +#11786 = @"C_type$exceptions.BaseException$args" +ext_proptype(#11786, #10003) +#11787 = @"C_type$file$2closed" +ext_proptype(#11787, #10058) +#11788 = @"C_type$file$2newlines" +ext_proptype(#11788, #10001) +ext_proptype(#11788, #10024) +ext_proptype(#11788, #10003) +#11789 = @"C_type$file$2softspace" +ext_proptype(#11789, #10005) +#11790 = @"C_type$int$2real" +ext_proptype(#11790, #10005) +#11791 = @"C_type$int$2imag" +ext_proptype(#11791, #10005) +#11792 = @"C_type$int$2numerator" +ext_proptype(#11792, #10005) +#11793 = @"C_type$int$2denominator" +ext_proptype(#11793, #10005) +#11794 = @"C_type$long$2real" +ext_proptype(#11794, #10005) +#11795 = @"C_type$long$2imag" +ext_proptype(#11795, #10005) +#11796 = @"C_type$long$2numerator" +ext_proptype(#11796, #10005) +#11797 = @"C_type$long$2denominator" +ext_proptype(#11797, #10005) +#11798 = @"C_type$type$2__name__" +ext_proptype(#11798, #10024) +#11799 = @"C_type$type$2__module__" +ext_proptype(#11799, #10024) +#11800 = @"C_type$type$2__dict__" +ext_proptype(#11800, #11698) +ext_proptype(#11800, #10003) +#11801 = @"C_type$type$2__doc__" +ext_proptype(#11801, #10024) +ext_proptype(#11801, #10003) +#11802 = @"C_type$function$2func_defaults" +ext_proptype(#11802, #10003) +#11803 = @"C_type$function$2__defaults__" +ext_proptype(#11803, #10003) +#11804 = @"C_type$float$2real" +ext_proptype(#11804, #10038) +#11805 = @"C_type$float$2imag" +ext_proptype(#11805, #10038) +#11806 = @"C_type$builtin_function_or_method$2__doc__" +ext_proptype(#11806, #10024) +ext_proptype(#11806, #10003) +#11807 = @"C_type$builtin_function_or_method$2__name__" +ext_proptype(#11807, #10024) +#11808 = @"C_type$builtin_function_or_method$2__self__" +ext_proptype(#11808, #10003) +#11809 = @"C_type$method-wrapper$__name__" +ext_proptype(#11809, #10024) +#11810 = @"C_type$method-wrapper$__doc__" +ext_proptype(#11810, #10024) +ext_proptype(#11810, #10003) +#11811 = @"C_type$method_descriptor$2__doc__" +ext_proptype(#11811, #10024) +ext_proptype(#11811, #10003) +#11812 = @"C_type$classmethod_descriptor$2__doc__" +ext_proptype(#11812, #10024) +ext_proptype(#11812, #10003) +#11813 = @"C_type$member_descriptor$2__doc__" +ext_proptype(#11813, #10024) +ext_proptype(#11813, #10003) +#11814 = @"C_type$getset_descriptor$2__doc__" +ext_proptype(#11814, #10024) +ext_proptype(#11814, #10003) +#11815 = @"C_type$wrapper_descriptor$2__doc__" +ext_proptype(#11815, #10024) +ext_proptype(#11815, #10003) +#11816 = @"C_type$memoryview$2format" +ext_proptype(#11816, #10024) +#11817 = @"C_type$memoryview$2itemsize" +ext_proptype(#11817, #10005) +#11818 = @"C_type$memoryview$2shape" +ext_proptype(#11818, #10001) +ext_proptype(#11818, #10003) +#11819 = @"C_type$memoryview$2strides" +ext_proptype(#11819, #10001) +ext_proptype(#11819, #10003) +#11820 = @"C_type$memoryview$2suboffsets" +ext_proptype(#11820, #10001) +ext_proptype(#11820, #10003) +#11821 = @"C_type$memoryview$2readonly" +ext_proptype(#11821, #10058) +#11822 = @"C_type$memoryview$2ndim" +ext_proptype(#11822, #10005) +py_cobjects(#11441) +py_cobjects(#11439) +py_cobjects(#10691) +py_cobjects(#11443) +py_cobjects(#11285) +py_cobjects(#11444) +py_cobjects(#11448) +py_cobjects(#11449) +py_cobjects(#10021) +py_cobjects(#10492) +py_cobjects(#10017) +py_cobjects(#10001) +py_cobjects(#10056) +py_cobjects(#11454) +py_cobjects(#11456) +py_cobjects(#11457) +py_cobjects(#11458) +#11823 = @"C_type$operator.itemgetter" +py_cobjects(#11823) +#11824 = @"C_type$operator.attrgetter" +py_cobjects(#11824) +#11825 = @"C_type$operator.methodcaller" +py_cobjects(#11825) +py_cobjects(#11460) +py_cobjects(#11459) +py_cobjects(#10761) +py_cobjects(#11465) +py_cobjects(#10007) +py_cobjects(#10085) +py_cobjects(#10102) +#11826 = @"C_type$itertools._grouper" +py_cobjects(#11826) +#11827 = @"C_type$itertools.groupby" +py_cobjects(#11827) +#11828 = @"C_type$itertools.tee_dataobject" +py_cobjects(#11828) +py_cobjects(#10794) +#11829 = @"C_type$itertools.cycle" +py_cobjects(#11829) +#11830 = @"C_type$itertools.dropwhile" +py_cobjects(#11830) +#11831 = @"C_type$itertools.takewhile" +py_cobjects(#11831) +#11832 = @"C_type$itertools.islice" +py_cobjects(#11832) +#11833 = @"C_type$itertools.starmap" +py_cobjects(#11833) +#11834 = @"C_type$itertools.imap" +py_cobjects(#11834) +py_cobjects(#11472) +#11835 = @"C_type$itertools.product" +py_cobjects(#11835) +#11836 = @"C_type$itertools.combinations" +py_cobjects(#11836) +#11837 = @"C_type$itertools.combinations_with_replacement" +py_cobjects(#11837) +#11838 = @"C_type$itertools.permutations" +py_cobjects(#11838) +#11839 = @"C_type$itertools.compress" +py_cobjects(#11839) +#11840 = @"C_type$itertools.ifilter" +py_cobjects(#11840) +py_cobjects(#10058) +#11841 = @"C_type$itertools.ifilterfalse" +py_cobjects(#11841) +py_cobjects(#11473) +#11842 = @"C_type$itertools.izip" +py_cobjects(#11842) +py_cobjects(#11474) +#11843 = @"C_type$itertools.izip_longest" +py_cobjects(#11843) +py_cobjects(#10038) +#11844 = @"C_type$symtable entry" +py_cobjects(#11844) +#11845 = @"C_type$basestring" +py_cobjects(#11845) +#11846 = @"C_type$_csv.Dialect" +py_cobjects(#11846) +py_cobjects(#10165) +py_cobjects(#10167) +py_cobjects(#11476) +py_cobjects(#11673) +#11847 = @"C_type$arrayiterator" +py_cobjects(#11847) +py_cobjects(#11480) +#11848 = @"C_type$instance" +py_cobjects(#11848) +py_cobjects(#11690) +py_cobjects(#11662) +py_cobjects(#10082) +py_cobjects(#10201) +py_cobjects(#10204) +py_cobjects(#10314) +py_cobjects(#10315) +py_cobjects(#11483) +#11849 = @"C_type$cPickle.Pdata" +py_cobjects(#11849) +py_cobjects(#10354) +py_cobjects(#10005) +py_cobjects(#11688) +py_cobjects(#10024) +py_cobjects(#10218) +#11850 = @"C_type$classobj" +py_cobjects(#11850) +#11851 = @"C_type$function" +py_cobjects(#11851) +#11852 = @"C_type$builtin_function_or_method" +py_cobjects(#11852) +py_cobjects(#10356) +py_cobjects(#10250) +py_cobjects(#11486) +py_cobjects(#11412) +py_cobjects(#11489) +py_cobjects(#11490) +py_cobjects(#10370) +py_cobjects(#11492) +py_cobjects(#11495) +py_cobjects(#11498) +py_cobjects(#10384) +#11853 = @"C_type$_thread._localdummy" +py_cobjects(#11853) +py_cobjects(#11375) +#11854 = @"C_type$thread._local" +py_cobjects(#11854) +py_cobjects(#11500) +py_cobjects(#11503) +py_cobjects(#11506) +#11855 = @"C_type$hashinheritancetester" +py_cobjects(#11855) +#11856 = @"C_type$memoryviewtester" +py_cobjects(#11856) +#11857 = @"C_type$test_structmembersType" +py_cobjects(#11857) +py_cobjects(#10497) +py_cobjects(#11508) +py_cobjects(#11549) +py_cobjects(#11558) +py_cobjects(#11511) +py_cobjects(#11563) +py_cobjects(#11560) +py_cobjects(#11509) +py_cobjects(#11559) +py_cobjects(#11516) +py_cobjects(#11530) +py_cobjects(#11538) +py_cobjects(#11523) +py_cobjects(#11570) +py_cobjects(#11568) +#11858 = @"C_type$BlockingIOError" +py_cobjects(#11858) +py_cobjects(#11580) +py_cobjects(#10511) +py_cobjects(#10541) +py_cobjects(#11693) +#11859 = @"C_type$weakcallableproxy" +py_cobjects(#11859) +py_cobjects(#10543) +py_cobjects(#10545) +#11860 = @"C_type$_ctypes.CField" +py_cobjects(#11860) +py_cobjects(#11583) +#11861 = @"C_type$_ctypes.CThunkObject" +py_cobjects(#11861) +#11862 = @"C_type$StgDict" +py_cobjects(#11862) +py_cobjects(#11609) +py_cobjects(#11615) +#11863 = @"C_type$_ctypes.Array" +py_cobjects(#11863) +py_cobjects(#11611) +#11864 = @"C_type$_ctypes._Pointer" +py_cobjects(#11864) +#11865 = @"C_type$_ctypes.PyCFuncPtr" +py_cobjects(#11865) +py_cobjects(#11584) +py_cobjects(#11585) +py_cobjects(#10557) +py_cobjects(#11607) +py_cobjects(#11377) +#11866 = @"C_type$_ctypes.DictRemover" +py_cobjects(#11866) +py_cobjects(#11586) +#11867 = @"C_type$_ctypes.Structure" +py_cobjects(#11867) +#11868 = @"C_type$_ctypes.Union" +py_cobjects(#11868) +py_cobjects(#10618) +py_cobjects(#11621) +#11869 = @"C_type$_json.Scanner" +py_cobjects(#11869) +#11870 = @"C_type$_json.Encoder" +py_cobjects(#11870) +py_cobjects(#10575) +py_cobjects(#10578) +py_cobjects(#10580) +py_cobjects(#11640) +py_cobjects(#11629) +py_cobjects(#11655) +py_cobjects(#11631) +py_cobjects(#11635) +#11871 = @"C_type$instancemethod" +py_cobjects(#11871) +#11872 = @"C_type$traceback" +py_cobjects(#11872) +py_cobjects(#10602) +py_cobjects(#11661) +py_cobjects(#10517) +py_cobjects(#11238) +py_cobjects(#11239) +py_cobjects(#11718) +#11873 = @"C_type$classmethod" +py_cobjects(#11873) +#11874 = @"C_type$enumerate" +py_cobjects(#11874) +py_cobjects(#11708) +py_cobjects(#11664) +#11875 = @"C_type$staticmethod" +py_cobjects(#11875) +#11876 = @"C_type$super" +py_cobjects(#11876) +py_cobjects(#11663) +#11877 = @"C_type$PyCObject" +py_cobjects(#11877) +#11878 = @"C_type$ellipsis" +py_cobjects(#11878) +#11879 = @"C_type$cell" +py_cobjects(#11879) +#11880 = @"C_type$PyCapsule" +py_cobjects(#11880) +py_cobjects(#11711) +py_cobjects(#10655) +py_cobjects(#10656) +py_cobjects(#11674) +py_cobjects(#11675) +py_cobjects(#11676) +#11881 = @"C_type$dict_keys" +py_cobjects(#11881) +#11882 = @"C_type$dict_items" +py_cobjects(#11882) +#11883 = @"C_type$dict_values" +py_cobjects(#11883) +#11884 = @"C_type$wrapper_descriptor" +py_cobjects(#11884) +py_cobjects(#11698) +#11885 = @"C_type$getset_descriptor" +py_cobjects(#11885) +#11886 = @"C_type$member_descriptor" +py_cobjects(#11886) +py_cobjects(#11119) +#11887 = @"C_type$exceptions.TypeError" +py_cobjects(#11887) +#11888 = @"C_type$exceptions.StandardError" +py_cobjects(#11888) +#11889 = @"C_type$exceptions.Exception" +py_cobjects(#11889) +py_cobjects(#11668) +#11890 = @"C_type$exceptions.DeprecationWarning" +py_cobjects(#11890) +#11891 = @"C_type$exceptions.Warning" +py_cobjects(#11891) +#11892 = @"C_type$exceptions.AttributeError" +py_cobjects(#11892) +#11893 = @"C_type$exceptions.StopIteration" +py_cobjects(#11893) +#11894 = @"C_type$exceptions.GeneratorExit" +py_cobjects(#11894) +#11895 = @"C_type$exceptions.SystemExit" +py_cobjects(#11895) +#11896 = @"C_type$exceptions.KeyboardInterrupt" +py_cobjects(#11896) +#11897 = @"C_type$exceptions.ImportError" +py_cobjects(#11897) +py_cobjects(#11669) +#11898 = @"C_type$exceptions.IOError" +py_cobjects(#11898) +#11899 = @"C_type$exceptions.OSError" +py_cobjects(#11899) +#11900 = @"C_type$exceptions.EOFError" +py_cobjects(#11900) +#11901 = @"C_type$exceptions.RuntimeError" +py_cobjects(#11901) +#11902 = @"C_type$exceptions.NotImplementedError" +py_cobjects(#11902) +#11903 = @"C_type$exceptions.NameError" +py_cobjects(#11903) +#11904 = @"C_type$exceptions.UnboundLocalError" +py_cobjects(#11904) +#11905 = @"C_type$exceptions.IndexError" +py_cobjects(#11905) +#11906 = @"C_type$exceptions.LookupError" +py_cobjects(#11906) +#11907 = @"C_type$exceptions.SyntaxError" +py_cobjects(#11907) +#11908 = @"C_type$exceptions.IndentationError" +py_cobjects(#11908) +#11909 = @"C_type$exceptions.TabError" +py_cobjects(#11909) +#11910 = @"C_type$exceptions.KeyError" +py_cobjects(#11910) +#11911 = @"C_type$exceptions.ValueError" +py_cobjects(#11911) +#11912 = @"C_type$exceptions.UnicodeError" +py_cobjects(#11912) +#11913 = @"C_type$exceptions.UnicodeEncodeError" +py_cobjects(#11913) +#11914 = @"C_type$exceptions.UnicodeDecodeError" +py_cobjects(#11914) +#11915 = @"C_type$exceptions.UnicodeTranslateError" +py_cobjects(#11915) +#11916 = @"C_type$exceptions.AssertionError" +py_cobjects(#11916) +#11917 = @"C_type$exceptions.ArithmeticError" +py_cobjects(#11917) +#11918 = @"C_type$exceptions.FloatingPointError" +py_cobjects(#11918) +#11919 = @"C_type$exceptions.OverflowError" +py_cobjects(#11919) +#11920 = @"C_type$exceptions.ZeroDivisionError" +py_cobjects(#11920) +#11921 = @"C_type$exceptions.SystemError" +py_cobjects(#11921) +#11922 = @"C_type$exceptions.ReferenceError" +py_cobjects(#11922) +#11923 = @"C_type$exceptions.MemoryError" +py_cobjects(#11923) +#11924 = @"C_type$exceptions.BufferError" +py_cobjects(#11924) +#11925 = @"C_type$exceptions.UserWarning" +py_cobjects(#11925) +#11926 = @"C_type$exceptions.PendingDeprecationWarning" +py_cobjects(#11926) +#11927 = @"C_type$exceptions.SyntaxWarning" +py_cobjects(#11927) +#11928 = @"C_type$exceptions.RuntimeWarning" +py_cobjects(#11928) +#11929 = @"C_type$exceptions.FutureWarning" +py_cobjects(#11929) +#11930 = @"C_type$exceptions.ImportWarning" +py_cobjects(#11930) +#11931 = @"C_type$exceptions.UnicodeWarning" +py_cobjects(#11931) +#11932 = @"C_type$exceptions.BytesWarning" +py_cobjects(#11932) +py_cobjects(#11671) +py_cobjects(#11192) +#11933 = @"C_type$cmpwrapper" +py_cobjects(#11933) +#11934 = @"C_type$sortwrapper" +py_cobjects(#11934) +#11935 = @"C_type$NotImplementedType" +py_cobjects(#11935) +py_cobjects(#10003) +py_cobjects(#11695) +py_cobjects(#11158) +#11936 = @"C_type$fieldnameiterator" +py_cobjects(#11936) +#11937 = @"C_type$method-wrapper" +py_cobjects(#11937) +#11938 = @"C_type$method_descriptor" +py_cobjects(#11938) +#11939 = @"C_type$classmethod_descriptor" +py_cobjects(#11939) +py_cobjects(#11717) +py_cobjects(#11719) +py_cobjects(#11720) +py_cobjects(#11721) +py_cobjects(#11722) +#11940 = @"C_type$_ssl._SSLSocket$context" +py_cobjects(#11940) +py_cobjects(#11723) +py_cobjects(#11724) +py_cobjects(#11725) +py_cobjects(#11726) +py_cobjects(#11727) +py_cobjects(#11728) +py_cobjects(#11729) +py_cobjects(#11730) +py_cobjects(#11731) +py_cobjects(#11732) +py_cobjects(#11733) +py_cobjects(#11734) +py_cobjects(#11735) +#11941 = @"C_type$_csv.Dialect$lineterminator" +py_cobjects(#11941) +py_cobjects(#11736) +py_cobjects(#11737) +py_cobjects(#11738) +py_cobjects(#11739) +#11942 = @"C_type$_hotshot.ProfilerType$closed" +py_cobjects(#11942) +#11943 = @"C_type$_hotshot.LogReaderType$closed" +py_cobjects(#11943) +py_cobjects(#11740) +py_cobjects(#11741) +#11944 = @"C_type$Struct$2format" +py_cobjects(#11944) +py_cobjects(#11742) +#11945 = @"C_type$cPickle.Pickler$persistent_id" +py_cobjects(#11945) +#11946 = @"C_type$cPickle.Pickler$inst_persistent_id" +py_cobjects(#11946) +#11947 = @"C_type$cPickle.Pickler$memo" +py_cobjects(#11947) +#11948 = @"C_type$cPickle.Pickler$PicklingError" +py_cobjects(#11948) +py_cobjects(#11743) +py_cobjects(#11744) +py_cobjects(#11745) +py_cobjects(#11746) +py_cobjects(#11747) +py_cobjects(#11748) +#11949 = @"C_type$bz2.BZ2File$mode" +py_cobjects(#11949) +#11950 = @"C_type$bz2.BZ2File$name" +py_cobjects(#11950) +py_cobjects(#11749) +py_cobjects(#11750) +#11951 = @"C_type$_io.BufferedReader$closed" +py_cobjects(#11951) +#11952 = @"C_type$_io.BufferedReader$name" +py_cobjects(#11952) +#11953 = @"C_type$_io.BufferedReader$mode" +py_cobjects(#11953) +#11954 = @"C_type$_io.BufferedRandom$closed" +py_cobjects(#11954) +#11955 = @"C_type$_io.BufferedRandom$name" +py_cobjects(#11955) +#11956 = @"C_type$_io.BufferedRandom$mode" +py_cobjects(#11956) +#11957 = @"C_type$_io.BufferedWriter$closed" +py_cobjects(#11957) +#11958 = @"C_type$_io.BufferedWriter$name" +py_cobjects(#11958) +#11959 = @"C_type$_io.BufferedWriter$mode" +py_cobjects(#11959) +#11960 = @"C_type$_io.BufferedRWPair$closed" +py_cobjects(#11960) +py_cobjects(#11751) +py_cobjects(#11752) +py_cobjects(#11753) +py_cobjects(#11754) +py_cobjects(#11755) +py_cobjects(#11756) +py_cobjects(#11757) +py_cobjects(#11758) +py_cobjects(#11759) +py_cobjects(#11760) +py_cobjects(#11761) +#11961 = @"C_type$_io.TextIOWrapper$name" +py_cobjects(#11961) +#11962 = @"C_type$_io.TextIOWrapper$closed" +py_cobjects(#11962) +py_cobjects(#11762) +#11963 = @"C_type$_io.TextIOWrapper$errors" +py_cobjects(#11963) +py_cobjects(#11763) +#11964 = @"C_type$functools.partial$__dict__" +py_cobjects(#11964) +py_cobjects(#11764) +py_cobjects(#11765) +#11965 = @"C_type$_ctypes._Pointer$contents" +py_cobjects(#11965) +py_cobjects(#11766) +py_cobjects(#11767) +py_cobjects(#11768) +#11966 = @"C_type$_ctypes._SimpleCData$value" +py_cobjects(#11966) +py_cobjects(#11769) +py_cobjects(#11770) +py_cobjects(#11771) +py_cobjects(#11772) +#11967 = @"C_type$datetime.time$tzinfo" +py_cobjects(#11967) +py_cobjects(#11773) +py_cobjects(#11774) +py_cobjects(#11775) +py_cobjects(#11776) +#11968 = @"C_type$datetime.datetime$tzinfo" +py_cobjects(#11968) +py_cobjects(#11777) +py_cobjects(#11778) +py_cobjects(#11779) +#11969 = @"C_type$frame$2f_locals" +py_cobjects(#11969) +py_cobjects(#11780) +py_cobjects(#11781) +py_cobjects(#11782) +py_cobjects(#11783) +py_cobjects(#11784) +py_cobjects(#11785) +#11970 = @"C_type$exceptions.BaseException$__dict__" +py_cobjects(#11970) +py_cobjects(#11786) +#11971 = @"C_type$exceptions.BaseException$message" +py_cobjects(#11971) +py_cobjects(#11787) +py_cobjects(#11788) +py_cobjects(#11789) +py_cobjects(#11790) +py_cobjects(#11791) +py_cobjects(#11792) +py_cobjects(#11793) +py_cobjects(#11794) +py_cobjects(#11795) +py_cobjects(#11796) +py_cobjects(#11797) +#11972 = @"C_type$generator$2__name__" +py_cobjects(#11972) +py_cobjects(#11798) +#11973 = @"C_type$type$2__bases__" +py_cobjects(#11973) +py_cobjects(#11799) +#11974 = @"C_type$type$2__abstractmethods__" +py_cobjects(#11974) +py_cobjects(#11800) +py_cobjects(#11801) +#11975 = @"C_type$object$2__class__" +py_cobjects(#11975) +#11976 = @"C_type$function$2func_code" +py_cobjects(#11976) +#11977 = @"C_type$function$2__code__" +py_cobjects(#11977) +py_cobjects(#11802) +py_cobjects(#11803) +#11978 = @"C_type$function$2func_dict" +py_cobjects(#11978) +#11979 = @"C_type$function$2__dict__" +py_cobjects(#11979) +#11980 = @"C_type$function$2func_name" +py_cobjects(#11980) +#11981 = @"C_type$function$2__name__" +py_cobjects(#11981) +py_cobjects(#11804) +py_cobjects(#11805) +py_cobjects(#11806) +py_cobjects(#11807) +py_cobjects(#11808) +#11982 = @"C_type$cell$2cell_contents" +py_cobjects(#11982) +#11983 = @"C_type$instancemethod$2__doc__" +py_cobjects(#11983) +#11984 = @"C_type$method-wrapper$__objclass__" +py_cobjects(#11984) +py_cobjects(#11809) +py_cobjects(#11810) +py_cobjects(#11811) +py_cobjects(#11812) +py_cobjects(#11813) +py_cobjects(#11814) +py_cobjects(#11815) +py_cobjects(#11816) +py_cobjects(#11817) +py_cobjects(#11818) +py_cobjects(#11819) +py_cobjects(#11820) +py_cobjects(#11821) +py_cobjects(#11822) +py_cobjects(#10000) +py_cobjects(#10002) +py_cobjects(#10004) +py_cobjects(#10006) +py_cobjects(#10008) +py_cobjects(#10009) +py_cobjects(#10010) +py_cobjects(#10011) +py_cobjects(#10012) +py_cobjects(#10013) +#11985 = @"C_builtin_function_or_method$_sre.compile" +py_cobjects(#11985) +py_cobjects(#10014) +py_cobjects(#10015) +py_cobjects(#10016) +py_cobjects(#10018) +#11986 = @"C_builtin_function_or_method$_heapq.heappushpop" +py_cobjects(#11986) +py_cobjects(#11376) +#11987 = @"C_builtin_function_or_method$_heapq.heapreplace" +py_cobjects(#11987) +py_cobjects(#10019) +py_cobjects(#10020) +py_cobjects(#10022) +py_cobjects(#10023) +py_cobjects(#10025) +py_cobjects(#10026) +py_cobjects(#10027) +py_cobjects(#11378) +py_cobjects(#11379) +py_cobjects(#10028) +py_cobjects(#10029) +py_cobjects(#10030) +py_cobjects(#10031) +py_cobjects(#10032) +py_cobjects(#10033) +py_cobjects(#10034) +py_cobjects(#10035) +py_cobjects(#10036) +py_cobjects(#10037) +py_cobjects(#10039) +py_cobjects(#10040) +py_cobjects(#10041) +py_cobjects(#10042) +py_cobjects(#10043) +py_cobjects(#10044) +py_cobjects(#10045) +py_cobjects(#10046) +py_cobjects(#10047) +py_cobjects(#10048) +py_cobjects(#10049) +py_cobjects(#10050) +py_cobjects(#10051) +py_cobjects(#10052) +py_cobjects(#10053) +py_cobjects(#10054) +py_cobjects(#11380) +py_cobjects(#11381) +py_cobjects(#11382) +py_cobjects(#11383) +py_cobjects(#11384) +py_cobjects(#11385) +py_cobjects(#10055) +py_cobjects(#10057) +py_cobjects(#10059) +py_cobjects(#10060) +py_cobjects(#10061) +py_cobjects(#10062) +py_cobjects(#10063) +py_cobjects(#10064) +py_cobjects(#10065) +py_cobjects(#10066) +py_cobjects(#10067) +#11988 = @"C_builtin_function_or_method$operator.is_" +py_cobjects(#11988) +#11989 = @"C_builtin_function_or_method$operator.is_not" +py_cobjects(#11989) +py_cobjects(#11386) +py_cobjects(#11387) +#11990 = @"C_builtin_function_or_method$operator.add" +py_cobjects(#11990) +#11991 = @"C_builtin_function_or_method$operator.__add__" +py_cobjects(#11991) +#11992 = @"C_builtin_function_or_method$operator.sub" +py_cobjects(#11992) +#11993 = @"C_builtin_function_or_method$operator.__sub__" +py_cobjects(#11993) +#11994 = @"C_builtin_function_or_method$operator.mul" +py_cobjects(#11994) +#11995 = @"C_builtin_function_or_method$operator.__mul__" +py_cobjects(#11995) +#11996 = @"C_builtin_function_or_method$operator.div" +py_cobjects(#11996) +#11997 = @"C_builtin_function_or_method$operator.__div__" +py_cobjects(#11997) +#11998 = @"C_builtin_function_or_method$operator.floordiv" +py_cobjects(#11998) +#11999 = @"C_builtin_function_or_method$operator.__floordiv__" +py_cobjects(#11999) +#12000 = @"C_builtin_function_or_method$operator.truediv" +py_cobjects(#12000) +#12001 = @"C_builtin_function_or_method$operator.__truediv__" +py_cobjects(#12001) +#12002 = @"C_builtin_function_or_method$operator.mod" +py_cobjects(#12002) +#12003 = @"C_builtin_function_or_method$operator.__mod__" +py_cobjects(#12003) +py_cobjects(#11388) +py_cobjects(#11389) +py_cobjects(#11390) +py_cobjects(#11391) +py_cobjects(#11392) +py_cobjects(#11393) +py_cobjects(#11394) +py_cobjects(#11395) +py_cobjects(#11396) +py_cobjects(#11397) +#12004 = @"C_builtin_function_or_method$operator.lshift" +py_cobjects(#12004) +#12005 = @"C_builtin_function_or_method$operator.__lshift__" +py_cobjects(#12005) +#12006 = @"C_builtin_function_or_method$operator.rshift" +py_cobjects(#12006) +#12007 = @"C_builtin_function_or_method$operator.__rshift__" +py_cobjects(#12007) +py_cobjects(#10068) +py_cobjects(#10069) +#12008 = @"C_builtin_function_or_method$operator.and_" +py_cobjects(#12008) +#12009 = @"C_builtin_function_or_method$operator.__and__" +py_cobjects(#12009) +#12010 = @"C_builtin_function_or_method$operator.xor" +py_cobjects(#12010) +#12011 = @"C_builtin_function_or_method$operator.__xor__" +py_cobjects(#12011) +#12012 = @"C_builtin_function_or_method$operator.or_" +py_cobjects(#12012) +#12013 = @"C_builtin_function_or_method$operator.__or__" +py_cobjects(#12013) +#12014 = @"C_builtin_function_or_method$operator.iadd" +py_cobjects(#12014) +#12015 = @"C_builtin_function_or_method$operator.__iadd__" +py_cobjects(#12015) +#12016 = @"C_builtin_function_or_method$operator.isub" +py_cobjects(#12016) +#12017 = @"C_builtin_function_or_method$operator.__isub__" +py_cobjects(#12017) +#12018 = @"C_builtin_function_or_method$operator.imul" +py_cobjects(#12018) +#12019 = @"C_builtin_function_or_method$operator.__imul__" +py_cobjects(#12019) +#12020 = @"C_builtin_function_or_method$operator.idiv" +py_cobjects(#12020) +#12021 = @"C_builtin_function_or_method$operator.__idiv__" +py_cobjects(#12021) +#12022 = @"C_builtin_function_or_method$operator.ifloordiv" +py_cobjects(#12022) +#12023 = @"C_builtin_function_or_method$operator.__ifloordiv__" +py_cobjects(#12023) +#12024 = @"C_builtin_function_or_method$operator.itruediv" +py_cobjects(#12024) +#12025 = @"C_builtin_function_or_method$operator.__itruediv__" +py_cobjects(#12025) +#12026 = @"C_builtin_function_or_method$operator.imod" +py_cobjects(#12026) +#12027 = @"C_builtin_function_or_method$operator.__imod__" +py_cobjects(#12027) +#12028 = @"C_builtin_function_or_method$operator.ilshift" +py_cobjects(#12028) +#12029 = @"C_builtin_function_or_method$operator.__ilshift__" +py_cobjects(#12029) +#12030 = @"C_builtin_function_or_method$operator.irshift" +py_cobjects(#12030) +#12031 = @"C_builtin_function_or_method$operator.__irshift__" +py_cobjects(#12031) +#12032 = @"C_builtin_function_or_method$operator.iand" +py_cobjects(#12032) +#12033 = @"C_builtin_function_or_method$operator.__iand__" +py_cobjects(#12033) +#12034 = @"C_builtin_function_or_method$operator.ixor" +py_cobjects(#12034) +#12035 = @"C_builtin_function_or_method$operator.__ixor__" +py_cobjects(#12035) +#12036 = @"C_builtin_function_or_method$operator.ior" +py_cobjects(#12036) +#12037 = @"C_builtin_function_or_method$operator.__ior__" +py_cobjects(#12037) +#12038 = @"C_builtin_function_or_method$operator.concat" +py_cobjects(#12038) +#12039 = @"C_builtin_function_or_method$operator.__concat__" +py_cobjects(#12039) +py_cobjects(#11398) +py_cobjects(#11399) +#12040 = @"C_builtin_function_or_method$operator.iconcat" +py_cobjects(#12040) +#12041 = @"C_builtin_function_or_method$operator.__iconcat__" +py_cobjects(#12041) +py_cobjects(#11400) +py_cobjects(#11401) +#12042 = @"C_builtin_function_or_method$operator.getitem" +py_cobjects(#12042) +#12043 = @"C_builtin_function_or_method$operator.__getitem__" +py_cobjects(#12043) +py_cobjects(#10070) +py_cobjects(#10071) +py_cobjects(#10072) +py_cobjects(#10073) +#12044 = @"C_builtin_function_or_method$operator.pow" +py_cobjects(#12044) +#12045 = @"C_builtin_function_or_method$operator.__pow__" +py_cobjects(#12045) +#12046 = @"C_builtin_function_or_method$operator.ipow" +py_cobjects(#12046) +#12047 = @"C_builtin_function_or_method$operator.__ipow__" +py_cobjects(#12047) +py_cobjects(#11402) +py_cobjects(#11403) +py_cobjects(#10074) +py_cobjects(#10075) +py_cobjects(#10076) +py_cobjects(#10077) +#12048 = @"C_builtin_function_or_method$operator.lt" +py_cobjects(#12048) +#12049 = @"C_builtin_function_or_method$operator.__lt__" +py_cobjects(#12049) +#12050 = @"C_builtin_function_or_method$operator.le" +py_cobjects(#12050) +#12051 = @"C_builtin_function_or_method$operator.__le__" +py_cobjects(#12051) +#12052 = @"C_builtin_function_or_method$operator.eq" +py_cobjects(#12052) +#12053 = @"C_builtin_function_or_method$operator.__eq__" +py_cobjects(#12053) +#12054 = @"C_builtin_function_or_method$operator.ne" +py_cobjects(#12054) +#12055 = @"C_builtin_function_or_method$operator.__ne__" +py_cobjects(#12055) +#12056 = @"C_builtin_function_or_method$operator.gt" +py_cobjects(#12056) +#12057 = @"C_builtin_function_or_method$operator.__gt__" +py_cobjects(#12057) +#12058 = @"C_builtin_function_or_method$operator.ge" +py_cobjects(#12058) +#12059 = @"C_builtin_function_or_method$operator.__ge__" +py_cobjects(#12059) +py_cobjects(#10078) +py_cobjects(#10079) +py_cobjects(#10080) +py_cobjects(#10081) +py_cobjects(#10083) +py_cobjects(#10084) +#12060 = @"C_builtin_function_or_method$parser.isexpr" +py_cobjects(#12060) +#12061 = @"C_builtin_function_or_method$parser.issuite" +py_cobjects(#12061) +py_cobjects(#10086) +py_cobjects(#10087) +py_cobjects(#10088) +py_cobjects(#10089) +py_cobjects(#10090) +py_cobjects(#10091) +py_cobjects(#10092) +py_cobjects(#10093) +py_cobjects(#10094) +py_cobjects(#10095) +py_cobjects(#10096) +py_cobjects(#10097) +py_cobjects(#10098) +py_cobjects(#10099) +py_cobjects(#10100) +py_cobjects(#10101) +py_cobjects(#10103) +py_cobjects(#10104) +py_cobjects(#10105) +py_cobjects(#10106) +py_cobjects(#10107) +py_cobjects(#10108) +py_cobjects(#10109) +py_cobjects(#10110) +py_cobjects(#10111) +py_cobjects(#10112) +py_cobjects(#10113) +py_cobjects(#10114) +py_cobjects(#10115) +py_cobjects(#10116) +py_cobjects(#10117) +py_cobjects(#10118) +py_cobjects(#10119) +py_cobjects(#10120) +py_cobjects(#10121) +py_cobjects(#10122) +py_cobjects(#10123) +py_cobjects(#10124) +py_cobjects(#10125) +py_cobjects(#10126) +py_cobjects(#10127) +py_cobjects(#10128) +py_cobjects(#10129) +py_cobjects(#10130) +py_cobjects(#10131) +py_cobjects(#10132) +py_cobjects(#10133) +py_cobjects(#10134) +py_cobjects(#10135) +py_cobjects(#10136) +py_cobjects(#10137) +py_cobjects(#10138) +py_cobjects(#10139) +py_cobjects(#10140) +py_cobjects(#10141) +py_cobjects(#10142) +py_cobjects(#10143) +py_cobjects(#10144) +py_cobjects(#10145) +py_cobjects(#10146) +py_cobjects(#10147) +py_cobjects(#10148) +py_cobjects(#10149) +py_cobjects(#10150) +py_cobjects(#10151) +py_cobjects(#10152) +py_cobjects(#10153) +py_cobjects(#10154) +py_cobjects(#10155) +py_cobjects(#11404) +py_cobjects(#11405) +py_cobjects(#10156) +py_cobjects(#10157) +py_cobjects(#10158) +py_cobjects(#10159) +py_cobjects(#10160) +py_cobjects(#10161) +py_cobjects(#10162) +py_cobjects(#10163) +#12062 = @"C_builtin_function_or_method$signal.default_int_handler" +py_cobjects(#12062) +py_cobjects(#10164) +py_cobjects(#10166) +py_cobjects(#10168) +py_cobjects(#10169) +py_cobjects(#10170) +py_cobjects(#11406) +py_cobjects(#10171) +py_cobjects(#10172) +py_cobjects(#10173) +py_cobjects(#10174) +py_cobjects(#10175) +py_cobjects(#10176) +py_cobjects(#10177) +py_cobjects(#10178) +py_cobjects(#10179) +py_cobjects(#10180) +py_cobjects(#10181) +py_cobjects(#10182) +py_cobjects(#10183) +py_cobjects(#10184) +py_cobjects(#10185) +py_cobjects(#10186) +py_cobjects(#10187) +py_cobjects(#10188) +py_cobjects(#10189) +py_cobjects(#10190) +py_cobjects(#11407) +py_cobjects(#11408) +py_cobjects(#10191) +py_cobjects(#10192) +py_cobjects(#10193) +py_cobjects(#10194) +#12063 = @"C_builtin_function_or_method$time.gmtime" +py_cobjects(#12063) +#12064 = @"C_builtin_function_or_method$time.localtime" +py_cobjects(#12064) +py_cobjects(#10195) +py_cobjects(#10196) +py_cobjects(#10197) +py_cobjects(#10198) +#12065 = @"C_builtin_function_or_method$time.strptime" +py_cobjects(#12065) +py_cobjects(#10199) +py_cobjects(#10200) +py_cobjects(#10202) +py_cobjects(#10203) +py_cobjects(#10205) +py_cobjects(#10206) +py_cobjects(#10207) +py_cobjects(#10208) +py_cobjects(#10209) +py_cobjects(#10210) +py_cobjects(#10211) +py_cobjects(#10212) +py_cobjects(#10213) +py_cobjects(#10214) +py_cobjects(#10215) +py_cobjects(#10216) +py_cobjects(#10217) +py_cobjects(#10219) +py_cobjects(#10220) +#12066 = @"C_builtin_function_or_method$posix.lstat" +py_cobjects(#12066) +py_cobjects(#10221) +py_cobjects(#10222) +py_cobjects(#10223) +py_cobjects(#10224) +py_cobjects(#10225) +#12067 = @"C_builtin_function_or_method$posix.stat" +py_cobjects(#12067) +py_cobjects(#10226) +py_cobjects(#10227) +py_cobjects(#10228) +py_cobjects(#10229) +py_cobjects(#10230) +py_cobjects(#10231) +py_cobjects(#10232) +py_cobjects(#10233) +py_cobjects(#10234) +#12068 = @"C_builtin_function_or_method$posix._exit" +py_cobjects(#12068) +#12069 = @"C_builtin_function_or_method$posix.execv" +py_cobjects(#12069) +#12070 = @"C_builtin_function_or_method$posix.execve" +py_cobjects(#12070) +py_cobjects(#10235) +py_cobjects(#10236) +py_cobjects(#10237) +py_cobjects(#10238) +py_cobjects(#10239) +py_cobjects(#10240) +py_cobjects(#10241) +py_cobjects(#10242) +py_cobjects(#10243) +py_cobjects(#10244) +py_cobjects(#10245) +py_cobjects(#10246) +py_cobjects(#10247) +py_cobjects(#10248) +py_cobjects(#10249) +py_cobjects(#10251) +py_cobjects(#10252) +py_cobjects(#10253) +py_cobjects(#10254) +py_cobjects(#10255) +py_cobjects(#10256) +py_cobjects(#10257) +py_cobjects(#10258) +py_cobjects(#10259) +py_cobjects(#10260) +py_cobjects(#10261) +py_cobjects(#10262) +py_cobjects(#10263) +py_cobjects(#10264) +py_cobjects(#10265) +py_cobjects(#10266) +py_cobjects(#10267) +py_cobjects(#10268) +py_cobjects(#10269) +py_cobjects(#10270) +py_cobjects(#10271) +py_cobjects(#10272) +py_cobjects(#10273) +py_cobjects(#10274) +py_cobjects(#10275) +#12071 = @"C_builtin_function_or_method$posix.read" +py_cobjects(#12071) +py_cobjects(#10276) +#12072 = @"C_builtin_function_or_method$posix.fstat" +py_cobjects(#12072) +py_cobjects(#10277) +py_cobjects(#10278) +py_cobjects(#10279) +py_cobjects(#10280) +py_cobjects(#10281) +py_cobjects(#10282) +py_cobjects(#10283) +py_cobjects(#10284) +py_cobjects(#10285) +py_cobjects(#10286) +py_cobjects(#10287) +py_cobjects(#10288) +py_cobjects(#10289) +py_cobjects(#10290) +py_cobjects(#10291) +py_cobjects(#10292) +py_cobjects(#10293) +py_cobjects(#10294) +py_cobjects(#10295) +py_cobjects(#10296) +py_cobjects(#10297) +py_cobjects(#10298) +py_cobjects(#10299) +#12073 = @"C_builtin_function_or_method$posix.fstatvfs" +py_cobjects(#12073) +#12074 = @"C_builtin_function_or_method$posix.statvfs" +py_cobjects(#12074) +py_cobjects(#10300) +py_cobjects(#10301) +py_cobjects(#10302) +py_cobjects(#10303) +py_cobjects(#10304) +py_cobjects(#10305) +py_cobjects(#10306) +#12075 = @"C_builtin_function_or_method$posix.abort" +py_cobjects(#12075) +py_cobjects(#10307) +py_cobjects(#10308) +py_cobjects(#10309) +py_cobjects(#10310) +py_cobjects(#10311) +py_cobjects(#10312) +py_cobjects(#10313) +py_cobjects(#10316) +py_cobjects(#10317) +py_cobjects(#10318) +py_cobjects(#10319) +py_cobjects(#10320) +py_cobjects(#10321) +py_cobjects(#10322) +py_cobjects(#10323) +py_cobjects(#10324) +py_cobjects(#10325) +py_cobjects(#10326) +py_cobjects(#10327) +py_cobjects(#10328) +py_cobjects(#10329) +#12076 = @"C_builtin_function_or_method$strop.join" +py_cobjects(#12076) +#12077 = @"C_builtin_function_or_method$strop.joinfields" +py_cobjects(#12077) +py_cobjects(#10330) +py_cobjects(#10331) +py_cobjects(#10332) +py_cobjects(#10333) +py_cobjects(#10334) +py_cobjects(#10335) +py_cobjects(#10336) +py_cobjects(#10337) +py_cobjects(#10338) +py_cobjects(#10339) +#12078 = @"C_builtin_function_or_method$strop.translate" +py_cobjects(#12078) +py_cobjects(#10340) +py_cobjects(#10341) +#12079 = @"C_builtin_function_or_method$binascii.b2a_uu" +py_cobjects(#12079) +#12080 = @"C_builtin_function_or_method$binascii.a2b_base64" +py_cobjects(#12080) +#12081 = @"C_builtin_function_or_method$binascii.b2a_base64" +py_cobjects(#12081) +py_cobjects(#10342) +#12082 = @"C_builtin_function_or_method$binascii.b2a_hqx" +py_cobjects(#12082) +py_cobjects(#10343) +py_cobjects(#10344) +py_cobjects(#10345) +py_cobjects(#10346) +#12083 = @"C_builtin_function_or_method$binascii.rlecode_hqx" +py_cobjects(#12083) +py_cobjects(#10347) +py_cobjects(#10348) +py_cobjects(#10349) +py_cobjects(#10350) +py_cobjects(#10351) +py_cobjects(#10352) +py_cobjects(#11409) +py_cobjects(#11410) +py_cobjects(#11411) +py_cobjects(#10353) +py_cobjects(#10355) +py_cobjects(#10357) +py_cobjects(#10358) +py_cobjects(#10359) +py_cobjects(#10360) +py_cobjects(#10361) +py_cobjects(#10362) +py_cobjects(#10363) +py_cobjects(#10364) +py_cobjects(#10365) +py_cobjects(#10366) +py_cobjects(#10367) +py_cobjects(#11413) +py_cobjects(#10368) +py_cobjects(#10369) +py_cobjects(#10371) +py_cobjects(#10372) +py_cobjects(#10373) +py_cobjects(#10374) +py_cobjects(#10375) +py_cobjects(#10376) +py_cobjects(#10377) +py_cobjects(#10378) +py_cobjects(#10379) +py_cobjects(#11414) +py_cobjects(#10380) +py_cobjects(#11415) +py_cobjects(#11416) +py_cobjects(#10381) +py_cobjects(#10382) +py_cobjects(#10383) +py_cobjects(#10385) +#12084 = @"C_builtin_function_or_method$thread.exit_thread" +py_cobjects(#12084) +#12085 = @"C_builtin_function_or_method$thread.exit" +py_cobjects(#12085) +py_cobjects(#10386) +py_cobjects(#10387) +py_cobjects(#10388) +py_cobjects(#10389) +py_cobjects(#11417) +py_cobjects(#10390) +py_cobjects(#11418) +py_cobjects(#10391) +py_cobjects(#10392) +py_cobjects(#10393) +py_cobjects(#10394) +#12086 = @"C_builtin_function_or_method$_codecs.lookup" +py_cobjects(#12086) +#12087 = @"C_builtin_function_or_method$_codecs.encode" +py_cobjects(#12087) +#12088 = @"C_builtin_function_or_method$_codecs.decode" +py_cobjects(#12088) +py_cobjects(#10395) +py_cobjects(#10396) +py_cobjects(#10397) +py_cobjects(#10398) +py_cobjects(#10399) +py_cobjects(#10400) +py_cobjects(#10401) +py_cobjects(#10402) +py_cobjects(#10403) +py_cobjects(#10404) +py_cobjects(#10405) +py_cobjects(#10406) +py_cobjects(#10407) +py_cobjects(#10408) +py_cobjects(#10409) +py_cobjects(#10410) +py_cobjects(#10411) +py_cobjects(#10412) +py_cobjects(#10413) +py_cobjects(#10414) +py_cobjects(#10415) +py_cobjects(#10416) +py_cobjects(#10417) +py_cobjects(#10418) +py_cobjects(#10419) +py_cobjects(#10420) +py_cobjects(#10421) +py_cobjects(#10422) +py_cobjects(#10423) +py_cobjects(#10424) +py_cobjects(#10425) +py_cobjects(#10426) +py_cobjects(#10427) +py_cobjects(#10428) +py_cobjects(#10429) +py_cobjects(#10430) +#12089 = @"C_builtin_function_or_method$_codecs.lookup_error" +py_cobjects(#12089) +py_cobjects(#10431) +py_cobjects(#10432) +py_cobjects(#10433) +py_cobjects(#10434) +py_cobjects(#10435) +py_cobjects(#10436) +py_cobjects(#10437) +py_cobjects(#10438) +py_cobjects(#10439) +py_cobjects(#10440) +py_cobjects(#10441) +py_cobjects(#10442) +py_cobjects(#10443) +py_cobjects(#10444) +#12090 = @"C_builtin_function_or_method$readline.get_begidx" +py_cobjects(#12090) +#12091 = @"C_builtin_function_or_method$readline.get_endidx" +py_cobjects(#12091) +py_cobjects(#10445) +py_cobjects(#10446) +py_cobjects(#10447) +py_cobjects(#10448) +py_cobjects(#10449) +py_cobjects(#10450) +py_cobjects(#10451) +py_cobjects(#10452) +py_cobjects(#10453) +py_cobjects(#11419) +py_cobjects(#10454) +py_cobjects(#10455) +py_cobjects(#10456) +py_cobjects(#10457) +py_cobjects(#10458) +py_cobjects(#10459) +py_cobjects(#10460) +py_cobjects(#10461) +py_cobjects(#10462) +py_cobjects(#10463) +py_cobjects(#10464) +py_cobjects(#10465) +py_cobjects(#10466) +py_cobjects(#10467) +py_cobjects(#10468) +py_cobjects(#10469) +py_cobjects(#10470) +py_cobjects(#10471) +py_cobjects(#10472) +py_cobjects(#10473) +py_cobjects(#10474) +py_cobjects(#10475) +py_cobjects(#10476) +py_cobjects(#10477) +py_cobjects(#10478) +py_cobjects(#10479) +py_cobjects(#10480) +py_cobjects(#10481) +py_cobjects(#10482) +py_cobjects(#10483) +py_cobjects(#11420) +py_cobjects(#11421) +py_cobjects(#10484) +py_cobjects(#10485) +py_cobjects(#11422) +py_cobjects(#10486) +py_cobjects(#10487) +py_cobjects(#10488) +py_cobjects(#10489) +py_cobjects(#10490) +py_cobjects(#10491) +py_cobjects(#10493) +py_cobjects(#10494) +py_cobjects(#10495) +py_cobjects(#10496) +py_cobjects(#11423) +py_cobjects(#10498) +#12092 = @"C_builtin_function_or_method$_io.open" +py_cobjects(#12092) +#12093 = @"C_builtin_function_or_method$_functools.reduce" +py_cobjects(#12093) +py_cobjects(#10499) +py_cobjects(#10500) +py_cobjects(#10501) +py_cobjects(#10502) +py_cobjects(#10503) +py_cobjects(#10504) +py_cobjects(#10505) +py_cobjects(#10506) +py_cobjects(#10507) +py_cobjects(#10508) +py_cobjects(#10509) +py_cobjects(#10510) +py_cobjects(#10512) +py_cobjects(#10513) +py_cobjects(#10514) +py_cobjects(#10515) +py_cobjects(#10516) +py_cobjects(#10518) +py_cobjects(#10519) +py_cobjects(#10520) +py_cobjects(#10521) +py_cobjects(#10522) +py_cobjects(#10523) +py_cobjects(#10524) +py_cobjects(#10525) +py_cobjects(#10526) +py_cobjects(#10527) +py_cobjects(#10528) +py_cobjects(#10529) +py_cobjects(#10530) +py_cobjects(#10531) +py_cobjects(#10532) +py_cobjects(#10533) +py_cobjects(#10534) +py_cobjects(#10535) +py_cobjects(#10536) +py_cobjects(#10537) +py_cobjects(#10538) +py_cobjects(#10539) +py_cobjects(#10540) +py_cobjects(#10542) +py_cobjects(#10544) +py_cobjects(#10546) +py_cobjects(#10547) +py_cobjects(#11424) +py_cobjects(#11425) +py_cobjects(#11426) +py_cobjects(#10548) +py_cobjects(#10549) +py_cobjects(#10550) +py_cobjects(#10551) +py_cobjects(#10552) +py_cobjects(#10553) +py_cobjects(#10554) +py_cobjects(#10555) +py_cobjects(#10556) +py_cobjects(#10558) +py_cobjects(#10559) +py_cobjects(#10560) +py_cobjects(#11427) +py_cobjects(#11428) +py_cobjects(#11429) +py_cobjects(#10561) +py_cobjects(#10562) +py_cobjects(#10563) +py_cobjects(#10564) +py_cobjects(#10565) +py_cobjects(#10566) +py_cobjects(#11430) +py_cobjects(#10567) +py_cobjects(#10568) +py_cobjects(#10569) +py_cobjects(#10570) +py_cobjects(#10571) +py_cobjects(#10572) +py_cobjects(#10573) +py_cobjects(#10574) +py_cobjects(#10576) +py_cobjects(#10577) +py_cobjects(#10579) +py_cobjects(#10581) +py_cobjects(#10582) +py_cobjects(#10583) +py_cobjects(#10584) +py_cobjects(#10585) +py_cobjects(#10586) +py_cobjects(#10587) +py_cobjects(#10588) +py_cobjects(#10589) +py_cobjects(#10590) +py_cobjects(#10591) +py_cobjects(#10592) +py_cobjects(#10593) +py_cobjects(#10594) +#12094 = @"C_builtin_function_or_method$sys.exit" +py_cobjects(#12094) +py_cobjects(#10595) +py_cobjects(#10596) +py_cobjects(#10597) +py_cobjects(#10598) +py_cobjects(#10599) +py_cobjects(#10600) +py_cobjects(#10601) +py_cobjects(#10603) +py_cobjects(#10604) +py_cobjects(#10605) +py_cobjects(#10606) +py_cobjects(#10607) +py_cobjects(#10608) +py_cobjects(#10609) +py_cobjects(#10610) +py_cobjects(#10611) +py_cobjects(#11431) +py_cobjects(#10612) +py_cobjects(#10613) +py_cobjects(#10614) +py_cobjects(#10615) +#12095 = @"C_builtin_function_or_method$marshal.dumps" +py_cobjects(#12095) +py_cobjects(#10616) +py_cobjects(#10617) +py_cobjects(#10619) +py_cobjects(#10620) +py_cobjects(#10621) +py_cobjects(#10622) +py_cobjects(#10623) +py_cobjects(#10624) +py_cobjects(#10625) +py_cobjects(#10626) +py_cobjects(#10627) +py_cobjects(#10628) +py_cobjects(#10629) +py_cobjects(#10630) +py_cobjects(#10631) +py_cobjects(#11432) +py_cobjects(#10632) +py_cobjects(#10633) +py_cobjects(#11433) +py_cobjects(#10634) +py_cobjects(#11434) +py_cobjects(#10635) +py_cobjects(#10636) +#12096 = @"C_builtin_function_or_method$builtins.apply" +py_cobjects(#12096) +py_cobjects(#10637) +py_cobjects(#10638) +py_cobjects(#10639) +py_cobjects(#10640) +py_cobjects(#10641) +py_cobjects(#10642) +py_cobjects(#10643) +py_cobjects(#10644) +#12097 = @"C_builtin_function_or_method$builtins.divmod" +py_cobjects(#12097) +#12098 = @"C_builtin_function_or_method$builtins.eval" +py_cobjects(#12098) +py_cobjects(#11435) +py_cobjects(#10645) +py_cobjects(#10646) +#12099 = @"C_builtin_function_or_method$builtins.getattr" +py_cobjects(#12099) +py_cobjects(#10647) +py_cobjects(#10648) +py_cobjects(#10649) +py_cobjects(#11436) +py_cobjects(#10650) +py_cobjects(#10651) +py_cobjects(#11437) +py_cobjects(#10652) +py_cobjects(#10653) +py_cobjects(#10654) +py_cobjects(#10657) +py_cobjects(#10658) +py_cobjects(#10659) +#12100 = @"C_builtin_function_or_method$builtins.max" +py_cobjects(#12100) +#12101 = @"C_builtin_function_or_method$builtins.min" +py_cobjects(#12101) +#12102 = @"C_builtin_function_or_method$builtins.next" +py_cobjects(#12102) +py_cobjects(#11438) +py_cobjects(#10660) +py_cobjects(#10661) +#12103 = @"C_builtin_function_or_method$builtins.pow" +py_cobjects(#12103) +py_cobjects(#10662) +py_cobjects(#10663) +py_cobjects(#10664) +#12104 = @"C_builtin_function_or_method$builtins.reduce" +py_cobjects(#12104) +py_cobjects(#10665) +py_cobjects(#10666) +py_cobjects(#10667) +py_cobjects(#10668) +py_cobjects(#10669) +py_cobjects(#10670) +py_cobjects(#10671) +py_cobjects(#10672) +py_cobjects(#10673) +py_cobjects(#10674) +py_cobjects(#10675) +py_cobjects(#10676) +py_cobjects(#10677) +py_cobjects(#10678) +py_cobjects(#10679) +py_cobjects(#10680) +py_cobjects(#10681) +py_cobjects(#11440) +py_cobjects(#10682) +py_cobjects(#10683) +py_cobjects(#10684) +py_cobjects(#10685) +py_cobjects(#10686) +py_cobjects(#11442) +py_cobjects(#10687) +py_cobjects(#10688) +py_cobjects(#10689) +py_cobjects(#10690) +py_cobjects(#10692) +py_cobjects(#10693) +py_cobjects(#10694) +py_cobjects(#10695) +py_cobjects(#10696) +py_cobjects(#10697) +py_cobjects(#10698) +py_cobjects(#10699) +py_cobjects(#10700) +py_cobjects(#10701) +py_cobjects(#10702) +py_cobjects(#10703) +py_cobjects(#10704) +py_cobjects(#10705) +py_cobjects(#10706) +py_cobjects(#10707) +py_cobjects(#10708) +py_cobjects(#10709) +py_cobjects(#10710) +py_cobjects(#10711) +py_cobjects(#10712) +py_cobjects(#10713) +py_cobjects(#10714) +py_cobjects(#10715) +py_cobjects(#10716) +py_cobjects(#10717) +py_cobjects(#10718) +py_cobjects(#10719) +py_cobjects(#11445) +py_cobjects(#11446) +py_cobjects(#11447) +py_cobjects(#10720) +py_cobjects(#10721) +py_cobjects(#10722) +py_cobjects(#10723) +py_cobjects(#10724) +py_cobjects(#10725) +py_cobjects(#10726) +py_cobjects(#10727) +py_cobjects(#10728) +py_cobjects(#11450) +py_cobjects(#11451) +py_cobjects(#11452) +py_cobjects(#11453) +py_cobjects(#10729) +py_cobjects(#10730) +py_cobjects(#10731) +py_cobjects(#10732) +py_cobjects(#10733) +py_cobjects(#10734) +py_cobjects(#10735) +py_cobjects(#10736) +py_cobjects(#10737) +py_cobjects(#10738) +py_cobjects(#10739) +py_cobjects(#10740) +py_cobjects(#10741) +py_cobjects(#11455) +py_cobjects(#10742) +py_cobjects(#10743) +py_cobjects(#10744) +py_cobjects(#10745) +py_cobjects(#10746) +py_cobjects(#10747) +py_cobjects(#10748) +py_cobjects(#10749) +py_cobjects(#10750) +py_cobjects(#10751) +py_cobjects(#10752) +py_cobjects(#10753) +py_cobjects(#10754) +py_cobjects(#11461) +py_cobjects(#10755) +py_cobjects(#10756) +py_cobjects(#10757) +py_cobjects(#11462) +py_cobjects(#11463) +py_cobjects(#10758) +py_cobjects(#10759) +py_cobjects(#10760) +py_cobjects(#10762) +py_cobjects(#10763) +py_cobjects(#10764) +py_cobjects(#11464) +py_cobjects(#11466) +py_cobjects(#11467) +py_cobjects(#10765) +py_cobjects(#10766) +py_cobjects(#11468) +py_cobjects(#11469) +py_cobjects(#10767) +py_cobjects(#10768) +py_cobjects(#10769) +py_cobjects(#10770) +py_cobjects(#10771) +py_cobjects(#10772) +py_cobjects(#10773) +py_cobjects(#10774) +py_cobjects(#10775) +py_cobjects(#10776) +py_cobjects(#10777) +py_cobjects(#10778) +py_cobjects(#10779) +py_cobjects(#10780) +py_cobjects(#10781) +py_cobjects(#11470) +py_cobjects(#10782) +py_cobjects(#10783) +py_cobjects(#10784) +py_cobjects(#10785) +py_cobjects(#10786) +py_cobjects(#10787) +py_cobjects(#10788) +py_cobjects(#10789) +py_cobjects(#10790) +py_cobjects(#10791) +py_cobjects(#10792) +py_cobjects(#10793) +py_cobjects(#11471) +py_cobjects(#10795) +py_cobjects(#10796) +py_cobjects(#11475) +py_cobjects(#10797) +py_cobjects(#10798) +py_cobjects(#10799) +py_cobjects(#10800) +py_cobjects(#11477) +py_cobjects(#10801) +py_cobjects(#11478) +py_cobjects(#10802) +py_cobjects(#10803) +py_cobjects(#10804) +py_cobjects(#10805) +py_cobjects(#10806) +py_cobjects(#10807) +py_cobjects(#10808) +py_cobjects(#11479) +py_cobjects(#10809) +py_cobjects(#10810) +py_cobjects(#10811) +py_cobjects(#10812) +py_cobjects(#10813) +py_cobjects(#10814) +py_cobjects(#10815) +py_cobjects(#10816) +py_cobjects(#10817) +py_cobjects(#10818) +py_cobjects(#10819) +py_cobjects(#10820) +py_cobjects(#10821) +py_cobjects(#10822) +py_cobjects(#10823) +py_cobjects(#10824) +py_cobjects(#10825) +py_cobjects(#10826) +py_cobjects(#10827) +py_cobjects(#10828) +py_cobjects(#10829) +py_cobjects(#10830) +py_cobjects(#10831) +py_cobjects(#10832) +py_cobjects(#10833) +py_cobjects(#10834) +py_cobjects(#10835) +py_cobjects(#11481) +py_cobjects(#11482) +py_cobjects(#10836) +py_cobjects(#10837) +py_cobjects(#10838) +py_cobjects(#10839) +py_cobjects(#10840) +py_cobjects(#10841) +py_cobjects(#10842) +py_cobjects(#10843) +py_cobjects(#10844) +py_cobjects(#10845) +py_cobjects(#10846) +py_cobjects(#10847) +py_cobjects(#10848) +py_cobjects(#10849) +py_cobjects(#10850) +py_cobjects(#10851) +py_cobjects(#10852) +py_cobjects(#10853) +py_cobjects(#10854) +py_cobjects(#10855) +py_cobjects(#10856) +py_cobjects(#10857) +py_cobjects(#10858) +py_cobjects(#10859) +py_cobjects(#10860) +py_cobjects(#10861) +py_cobjects(#10862) +py_cobjects(#10863) +py_cobjects(#10864) +py_cobjects(#10865) +py_cobjects(#10866) +py_cobjects(#10867) +py_cobjects(#10868) +py_cobjects(#10869) +py_cobjects(#10870) +py_cobjects(#10871) +py_cobjects(#11484) +py_cobjects(#11485) +py_cobjects(#10872) +py_cobjects(#11487) +py_cobjects(#10873) +py_cobjects(#10874) +py_cobjects(#10875) +py_cobjects(#10876) +py_cobjects(#10877) +py_cobjects(#10878) +py_cobjects(#10879) +py_cobjects(#10880) +py_cobjects(#10881) +py_cobjects(#10882) +py_cobjects(#10883) +py_cobjects(#10884) +py_cobjects(#10885) +py_cobjects(#10886) +py_cobjects(#10887) +py_cobjects(#10888) +py_cobjects(#11488) +py_cobjects(#10889) +py_cobjects(#10890) +py_cobjects(#10891) +py_cobjects(#10892) +py_cobjects(#10893) +py_cobjects(#10894) +py_cobjects(#10895) +py_cobjects(#10896) +py_cobjects(#10897) +py_cobjects(#10898) +py_cobjects(#11491) +py_cobjects(#10899) +py_cobjects(#11493) +py_cobjects(#11494) +py_cobjects(#11496) +py_cobjects(#11497) +py_cobjects(#10900) +py_cobjects(#10901) +py_cobjects(#10902) +py_cobjects(#10903) +py_cobjects(#10904) +py_cobjects(#10905) +py_cobjects(#10906) +py_cobjects(#10907) +py_cobjects(#10908) +py_cobjects(#10909) +py_cobjects(#10910) +py_cobjects(#10911) +py_cobjects(#10912) +py_cobjects(#10913) +py_cobjects(#11499) +py_cobjects(#10914) +py_cobjects(#10915) +py_cobjects(#11501) +py_cobjects(#10916) +py_cobjects(#10917) +py_cobjects(#10918) +py_cobjects(#10919) +py_cobjects(#10920) +py_cobjects(#11502) +py_cobjects(#10921) +py_cobjects(#10922) +py_cobjects(#11504) +py_cobjects(#11505) +py_cobjects(#10923) +py_cobjects(#10924) +py_cobjects(#10925) +py_cobjects(#10926) +py_cobjects(#11507) +py_cobjects(#10927) +py_cobjects(#10928) +py_cobjects(#10929) +py_cobjects(#10930) +py_cobjects(#10931) +py_cobjects(#10932) +py_cobjects(#10933) +py_cobjects(#10934) +py_cobjects(#10935) +py_cobjects(#10936) +py_cobjects(#10937) +py_cobjects(#10938) +py_cobjects(#10939) +py_cobjects(#10940) +py_cobjects(#10941) +py_cobjects(#10942) +py_cobjects(#10943) +py_cobjects(#10944) +py_cobjects(#10945) +py_cobjects(#10946) +py_cobjects(#10947) +py_cobjects(#10948) +py_cobjects(#10949) +py_cobjects(#10950) +py_cobjects(#10951) +py_cobjects(#10952) +py_cobjects(#11510) +py_cobjects(#11512) +py_cobjects(#11513) +py_cobjects(#10953) +py_cobjects(#11514) +py_cobjects(#11515) +py_cobjects(#11517) +py_cobjects(#10954) +py_cobjects(#11518) +py_cobjects(#11519) +py_cobjects(#11520) +py_cobjects(#11521) +py_cobjects(#11522) +py_cobjects(#10955) +py_cobjects(#10956) +py_cobjects(#10957) +py_cobjects(#10958) +py_cobjects(#10959) +py_cobjects(#10960) +py_cobjects(#10961) +py_cobjects(#10962) +py_cobjects(#10963) +py_cobjects(#11524) +py_cobjects(#11525) +py_cobjects(#11526) +py_cobjects(#11527) +py_cobjects(#11528) +py_cobjects(#11529) +py_cobjects(#10964) +py_cobjects(#10965) +py_cobjects(#10966) +py_cobjects(#10967) +py_cobjects(#10968) +py_cobjects(#10969) +py_cobjects(#10970) +py_cobjects(#10971) +py_cobjects(#10972) +py_cobjects(#10973) +py_cobjects(#10974) +py_cobjects(#10975) +py_cobjects(#11531) +py_cobjects(#11532) +py_cobjects(#11533) +py_cobjects(#11534) +py_cobjects(#11535) +py_cobjects(#11536) +py_cobjects(#10976) +py_cobjects(#10977) +py_cobjects(#10978) +py_cobjects(#10979) +py_cobjects(#10980) +py_cobjects(#10981) +py_cobjects(#11537) +py_cobjects(#11539) +py_cobjects(#11540) +py_cobjects(#11541) +py_cobjects(#11542) +py_cobjects(#11543) +py_cobjects(#11544) +py_cobjects(#11545) +py_cobjects(#11546) +py_cobjects(#11547) +py_cobjects(#11548) +py_cobjects(#11550) +py_cobjects(#11551) +py_cobjects(#10982) +py_cobjects(#10983) +py_cobjects(#10984) +py_cobjects(#10985) +py_cobjects(#10986) +py_cobjects(#10987) +py_cobjects(#11552) +py_cobjects(#11553) +py_cobjects(#11554) +py_cobjects(#11555) +py_cobjects(#10988) +py_cobjects(#11556) +py_cobjects(#11557) +py_cobjects(#10989) +py_cobjects(#10990) +py_cobjects(#10991) +py_cobjects(#10992) +py_cobjects(#10993) +py_cobjects(#10994) +py_cobjects(#10995) +py_cobjects(#10996) +py_cobjects(#10997) +py_cobjects(#10998) +py_cobjects(#10999) +py_cobjects(#11000) +py_cobjects(#11001) +py_cobjects(#11002) +py_cobjects(#11003) +py_cobjects(#11004) +py_cobjects(#11005) +py_cobjects(#11006) +py_cobjects(#11007) +py_cobjects(#11008) +py_cobjects(#11009) +py_cobjects(#11010) +py_cobjects(#11011) +py_cobjects(#11012) +py_cobjects(#11561) +py_cobjects(#11013) +py_cobjects(#11014) +py_cobjects(#11015) +py_cobjects(#11016) +py_cobjects(#11017) +py_cobjects(#11018) +py_cobjects(#11562) +py_cobjects(#11564) +py_cobjects(#11565) +py_cobjects(#11566) +py_cobjects(#11567) +py_cobjects(#11019) +py_cobjects(#11020) +py_cobjects(#11021) +py_cobjects(#11569) +py_cobjects(#11022) +py_cobjects(#11023) +py_cobjects(#11571) +py_cobjects(#11572) +py_cobjects(#11024) +py_cobjects(#11573) +py_cobjects(#11574) +py_cobjects(#11575) +py_cobjects(#11576) +py_cobjects(#11577) +py_cobjects(#11578) +py_cobjects(#11025) +py_cobjects(#11579) +py_cobjects(#11026) +py_cobjects(#11027) +py_cobjects(#11028) +py_cobjects(#11029) +py_cobjects(#11030) +py_cobjects(#11031) +py_cobjects(#11032) +py_cobjects(#11033) +py_cobjects(#11034) +py_cobjects(#11035) +py_cobjects(#11581) +py_cobjects(#11036) +py_cobjects(#11037) +py_cobjects(#11038) +py_cobjects(#11039) +py_cobjects(#11040) +py_cobjects(#11041) +py_cobjects(#11042) +py_cobjects(#11043) +py_cobjects(#11044) +py_cobjects(#11045) +py_cobjects(#11046) +py_cobjects(#11047) +py_cobjects(#11048) +py_cobjects(#11049) +py_cobjects(#11050) +py_cobjects(#11051) +py_cobjects(#11052) +py_cobjects(#11053) +py_cobjects(#11054) +py_cobjects(#11055) +py_cobjects(#11056) +py_cobjects(#11057) +py_cobjects(#11058) +py_cobjects(#11059) +py_cobjects(#11060) +py_cobjects(#11061) +py_cobjects(#11062) +py_cobjects(#11582) +py_cobjects(#11587) +py_cobjects(#11588) +py_cobjects(#11589) +py_cobjects(#11590) +py_cobjects(#11591) +py_cobjects(#11592) +py_cobjects(#11593) +py_cobjects(#11594) +py_cobjects(#11595) +py_cobjects(#11596) +py_cobjects(#11597) +py_cobjects(#11598) +py_cobjects(#11599) +py_cobjects(#11600) +py_cobjects(#11601) +py_cobjects(#11602) +py_cobjects(#11603) +py_cobjects(#11604) +py_cobjects(#11605) +py_cobjects(#11606) +py_cobjects(#11608) +py_cobjects(#11063) +py_cobjects(#11064) +py_cobjects(#11610) +py_cobjects(#11612) +py_cobjects(#11613) +py_cobjects(#11614) +py_cobjects(#11065) +py_cobjects(#11066) +py_cobjects(#11067) +py_cobjects(#11616) +py_cobjects(#11617) +py_cobjects(#11618) +py_cobjects(#11619) +py_cobjects(#11620) +py_cobjects(#11068) +py_cobjects(#11069) +py_cobjects(#11070) +py_cobjects(#11071) +py_cobjects(#11622) +py_cobjects(#11072) +py_cobjects(#11073) +py_cobjects(#11074) +py_cobjects(#11075) +py_cobjects(#11076) +py_cobjects(#11077) +py_cobjects(#11078) +py_cobjects(#11079) +py_cobjects(#11623) +py_cobjects(#11624) +py_cobjects(#11625) +py_cobjects(#11626) +py_cobjects(#11080) +py_cobjects(#11081) +py_cobjects(#11082) +py_cobjects(#11083) +py_cobjects(#11084) +py_cobjects(#11085) +py_cobjects(#11086) +py_cobjects(#11087) +py_cobjects(#11088) +py_cobjects(#11627) +py_cobjects(#11089) +py_cobjects(#11090) +py_cobjects(#11091) +py_cobjects(#11092) +py_cobjects(#11093) +py_cobjects(#11094) +py_cobjects(#11628) +py_cobjects(#11095) +py_cobjects(#11630) +py_cobjects(#11632) +py_cobjects(#11096) +py_cobjects(#11097) +py_cobjects(#11098) +py_cobjects(#11099) +py_cobjects(#11633) +py_cobjects(#11100) +py_cobjects(#11634) +py_cobjects(#11636) +py_cobjects(#11637) +py_cobjects(#11638) +py_cobjects(#11101) +py_cobjects(#11639) +py_cobjects(#11641) +py_cobjects(#11642) +py_cobjects(#11643) +py_cobjects(#11644) +py_cobjects(#11645) +py_cobjects(#11646) +py_cobjects(#11647) +py_cobjects(#11648) +py_cobjects(#11102) +py_cobjects(#11649) +py_cobjects(#11650) +py_cobjects(#11651) +py_cobjects(#11103) +py_cobjects(#11104) +py_cobjects(#11105) +py_cobjects(#11652) +py_cobjects(#11653) +py_cobjects(#11106) +py_cobjects(#11654) +py_cobjects(#11656) +py_cobjects(#11657) +py_cobjects(#11107) +py_cobjects(#11658) +py_cobjects(#11108) +py_cobjects(#11659) +py_cobjects(#11109) +py_cobjects(#11110) +py_cobjects(#11111) +py_cobjects(#11112) +py_cobjects(#11113) +py_cobjects(#11660) +py_cobjects(#11114) +py_cobjects(#11115) +py_cobjects(#11116) +py_cobjects(#11117) +py_cobjects(#11118) +py_cobjects(#11120) +py_cobjects(#11121) +py_cobjects(#11122) +py_cobjects(#11123) +py_cobjects(#11124) +py_cobjects(#11125) +py_cobjects(#11126) +py_cobjects(#11127) +py_cobjects(#11128) +py_cobjects(#11129) +py_cobjects(#11130) +py_cobjects(#11131) +py_cobjects(#11132) +py_cobjects(#11133) +py_cobjects(#11134) +py_cobjects(#11135) +py_cobjects(#11136) +py_cobjects(#11137) +py_cobjects(#11138) +py_cobjects(#11139) +py_cobjects(#11140) +py_cobjects(#11141) +py_cobjects(#11142) +py_cobjects(#11143) +py_cobjects(#11144) +py_cobjects(#11145) +py_cobjects(#11146) +py_cobjects(#11147) +py_cobjects(#11148) +py_cobjects(#11149) +py_cobjects(#11150) +py_cobjects(#11151) +py_cobjects(#11152) +py_cobjects(#11153) +py_cobjects(#11154) +py_cobjects(#11665) +py_cobjects(#11155) +py_cobjects(#11156) +py_cobjects(#11157) +py_cobjects(#11666) +py_cobjects(#11667) +py_cobjects(#11159) +py_cobjects(#11160) +py_cobjects(#11161) +py_cobjects(#11162) +py_cobjects(#11163) +py_cobjects(#11164) +py_cobjects(#11165) +py_cobjects(#11166) +py_cobjects(#11167) +py_cobjects(#11168) +py_cobjects(#11670) +py_cobjects(#11169) +py_cobjects(#11170) +py_cobjects(#11171) +py_cobjects(#11172) +py_cobjects(#11173) +py_cobjects(#11174) +py_cobjects(#11175) +py_cobjects(#11176) +py_cobjects(#11177) +py_cobjects(#11178) +py_cobjects(#11179) +py_cobjects(#11180) +py_cobjects(#11181) +py_cobjects(#11182) +py_cobjects(#11183) +py_cobjects(#11184) +py_cobjects(#11185) +py_cobjects(#11186) +py_cobjects(#11187) +py_cobjects(#11188) +py_cobjects(#11189) +py_cobjects(#11190) +py_cobjects(#11191) +py_cobjects(#11193) +py_cobjects(#11194) +py_cobjects(#11195) +py_cobjects(#11196) +py_cobjects(#11672) +py_cobjects(#11197) +py_cobjects(#11198) +py_cobjects(#11199) +py_cobjects(#11200) +py_cobjects(#11201) +py_cobjects(#11202) +py_cobjects(#11203) +py_cobjects(#11204) +py_cobjects(#11205) +py_cobjects(#11206) +py_cobjects(#11207) +py_cobjects(#11677) +py_cobjects(#11208) +py_cobjects(#11209) +py_cobjects(#11678) +py_cobjects(#11679) +py_cobjects(#11680) +py_cobjects(#11210) +py_cobjects(#11211) +py_cobjects(#11212) +py_cobjects(#11213) +py_cobjects(#11681) +py_cobjects(#11682) +py_cobjects(#11683) +py_cobjects(#11214) +py_cobjects(#11684) +py_cobjects(#11215) +py_cobjects(#11216) +py_cobjects(#11685) +py_cobjects(#11686) +py_cobjects(#11687) +py_cobjects(#11217) +py_cobjects(#11218) +py_cobjects(#11219) +py_cobjects(#11220) +py_cobjects(#11221) +py_cobjects(#11222) +py_cobjects(#11689) +py_cobjects(#11691) +py_cobjects(#11223) +py_cobjects(#11692) +py_cobjects(#11224) +py_cobjects(#11225) +py_cobjects(#11226) +py_cobjects(#11227) +py_cobjects(#11228) +py_cobjects(#11229) +py_cobjects(#11230) +py_cobjects(#11231) +py_cobjects(#11232) +py_cobjects(#11694) +py_cobjects(#11233) +py_cobjects(#11234) +py_cobjects(#11235) +py_cobjects(#11236) +py_cobjects(#11237) +py_cobjects(#11240) +py_cobjects(#11241) +py_cobjects(#11242) +py_cobjects(#11243) +py_cobjects(#11244) +py_cobjects(#11245) +py_cobjects(#11246) +py_cobjects(#11247) +py_cobjects(#11248) +py_cobjects(#11249) +py_cobjects(#11250) +py_cobjects(#11251) +py_cobjects(#11252) +py_cobjects(#11253) +py_cobjects(#11254) +py_cobjects(#11255) +py_cobjects(#11256) +py_cobjects(#11257) +py_cobjects(#11258) +py_cobjects(#11259) +py_cobjects(#11260) +py_cobjects(#11696) +py_cobjects(#11261) +py_cobjects(#11262) +py_cobjects(#11263) +py_cobjects(#11264) +py_cobjects(#11265) +py_cobjects(#11266) +py_cobjects(#11267) +py_cobjects(#11268) +py_cobjects(#11269) +py_cobjects(#11270) +py_cobjects(#11271) +py_cobjects(#11697) +py_cobjects(#11272) +py_cobjects(#11273) +py_cobjects(#11274) +py_cobjects(#11275) +py_cobjects(#11276) +py_cobjects(#11277) +py_cobjects(#11278) +py_cobjects(#11699) +py_cobjects(#11700) +py_cobjects(#11701) +py_cobjects(#11702) +py_cobjects(#11703) +py_cobjects(#11704) +py_cobjects(#11705) +py_cobjects(#11706) +py_cobjects(#11707) +py_cobjects(#11709) +py_cobjects(#11710) +py_cobjects(#11279) +py_cobjects(#11280) +py_cobjects(#11281) +py_cobjects(#11282) +py_cobjects(#11283) +py_cobjects(#11284) +py_cobjects(#11286) +py_cobjects(#11287) +py_cobjects(#11712) +py_cobjects(#11288) +py_cobjects(#11289) +py_cobjects(#11290) +py_cobjects(#11291) +py_cobjects(#11292) +py_cobjects(#11293) +py_cobjects(#11294) +py_cobjects(#11295) +py_cobjects(#11296) +py_cobjects(#11297) +py_cobjects(#11298) +py_cobjects(#11299) +py_cobjects(#11300) +py_cobjects(#11301) +py_cobjects(#11302) +py_cobjects(#11303) +py_cobjects(#11304) +py_cobjects(#11305) +py_cobjects(#11306) +py_cobjects(#11307) +py_cobjects(#11308) +py_cobjects(#11309) +py_cobjects(#11310) +py_cobjects(#11311) +py_cobjects(#11312) +py_cobjects(#11313) +py_cobjects(#11314) +py_cobjects(#11315) +py_cobjects(#11316) +py_cobjects(#11317) +py_cobjects(#11318) +py_cobjects(#11319) +py_cobjects(#11320) +py_cobjects(#11321) +py_cobjects(#11322) +py_cobjects(#11323) +py_cobjects(#11324) +py_cobjects(#11325) +py_cobjects(#11713) +py_cobjects(#11326) +py_cobjects(#11327) +py_cobjects(#11328) +py_cobjects(#11329) +py_cobjects(#11330) +py_cobjects(#11331) +py_cobjects(#11332) +py_cobjects(#11333) +py_cobjects(#11334) +py_cobjects(#11335) +py_cobjects(#11336) +py_cobjects(#11337) +py_cobjects(#11338) +py_cobjects(#11339) +py_cobjects(#11340) +py_cobjects(#11714) +py_cobjects(#11341) +py_cobjects(#11342) +py_cobjects(#11343) +py_cobjects(#11344) +py_cobjects(#11345) +py_cobjects(#11346) +py_cobjects(#11347) +py_cobjects(#11348) +py_cobjects(#11715) +py_cobjects(#11349) +py_cobjects(#11350) +py_cobjects(#11351) +py_cobjects(#11352) +py_cobjects(#11353) +py_cobjects(#11354) +py_cobjects(#11355) +py_cobjects(#11356) +py_cobjects(#11357) +py_cobjects(#11358) +py_cobjects(#11359) +py_cobjects(#11360) +py_cobjects(#11361) +py_cobjects(#11716) +py_cobjects(#11362) +py_cobjects(#11363) +py_cobjects(#11364) +py_cobjects(#11365) +py_cobjects(#11366) +py_cobjects(#11367) +py_cobjects(#11368) +py_cobjects(#11369) +py_cobjects(#11370) +py_cobjects(#11371) +py_cobjects(#11372) +py_cobjects(#11373) +py_cobjects(#11374) +py_cobject_sources(#11441, 1) +py_cobject_sources(#11439, 1) +py_cobject_sources(#10691, 1) +py_cobject_sources(#11443, 1) +py_cobject_sources(#11285, 1) +py_cobject_sources(#11444, 1) +py_cobject_sources(#11448, 1) +py_cobject_sources(#11449, 1) +py_cobject_sources(#10021, 1) +py_cobject_sources(#10492, 1) +py_cobject_sources(#10017, 1) +py_cobject_sources(#10001, 1) +py_cobject_sources(#10056, 1) +py_cobject_sources(#11454, 1) +py_cobject_sources(#11456, 1) +py_cobject_sources(#11457, 1) +py_cobject_sources(#11458, 1) +py_cobject_sources(#11823, 1) +py_cobject_sources(#11824, 1) +py_cobject_sources(#11825, 1) +py_cobject_sources(#11460, 1) +py_cobject_sources(#11459, 1) +py_cobject_sources(#10761, 1) +py_cobject_sources(#11465, 1) +py_cobject_sources(#10007, 1) +py_cobject_sources(#10085, 1) +py_cobject_sources(#10102, 1) +py_cobject_sources(#11826, 1) +py_cobject_sources(#11827, 1) +py_cobject_sources(#11828, 1) +py_cobject_sources(#10794, 1) +py_cobject_sources(#11829, 1) +py_cobject_sources(#11830, 1) +py_cobject_sources(#11831, 1) +py_cobject_sources(#11832, 1) +py_cobject_sources(#11833, 1) +py_cobject_sources(#11834, 1) +py_cobject_sources(#11472, 1) +py_cobject_sources(#11835, 1) +py_cobject_sources(#11836, 1) +py_cobject_sources(#11837, 1) +py_cobject_sources(#11838, 1) +py_cobject_sources(#11839, 1) +py_cobject_sources(#11840, 1) +py_cobject_sources(#10058, 1) +py_cobject_sources(#11841, 1) +py_cobject_sources(#11473, 1) +py_cobject_sources(#11842, 1) +py_cobject_sources(#11474, 1) +py_cobject_sources(#11843, 1) +py_cobject_sources(#10038, 1) +py_cobject_sources(#11844, 1) +py_cobject_sources(#11845, 1) +py_cobject_sources(#11846, 1) +py_cobject_sources(#10165, 1) +py_cobject_sources(#10167, 1) +py_cobject_sources(#11476, 1) +py_cobject_sources(#11673, 1) +py_cobject_sources(#11847, 1) +py_cobject_sources(#11480, 1) +py_cobject_sources(#11848, 1) +py_cobject_sources(#11690, 1) +py_cobject_sources(#11662, 1) +py_cobject_sources(#10082, 1) +py_cobject_sources(#10201, 1) +py_cobject_sources(#10204, 1) +py_cobject_sources(#10314, 1) +py_cobject_sources(#10315, 1) +py_cobject_sources(#11483, 1) +py_cobject_sources(#11849, 1) +py_cobject_sources(#10354, 1) +py_cobject_sources(#10005, 1) +py_cobject_sources(#11688, 1) +py_cobject_sources(#10024, 1) +py_cobject_sources(#10218, 1) +py_cobject_sources(#11850, 1) +py_cobject_sources(#11851, 1) +py_cobject_sources(#11852, 1) +py_cobject_sources(#10356, 1) +py_cobject_sources(#10250, 1) +py_cobject_sources(#11486, 1) +py_cobject_sources(#11412, 1) +py_cobject_sources(#11489, 1) +py_cobject_sources(#11490, 1) +py_cobject_sources(#10370, 1) +py_cobject_sources(#11492, 1) +py_cobject_sources(#11495, 1) +py_cobject_sources(#11498, 1) +py_cobject_sources(#10384, 1) +py_cobject_sources(#11853, 1) +py_cobject_sources(#11375, 1) +py_cobject_sources(#11854, 1) +py_cobject_sources(#11500, 1) +py_cobject_sources(#11503, 1) +py_cobject_sources(#11506, 1) +py_cobject_sources(#11855, 1) +py_cobject_sources(#11856, 1) +py_cobject_sources(#11857, 1) +py_cobject_sources(#10497, 1) +py_cobject_sources(#11508, 1) +py_cobject_sources(#11549, 1) +py_cobject_sources(#11558, 1) +py_cobject_sources(#11511, 1) +py_cobject_sources(#11563, 1) +py_cobject_sources(#11560, 1) +py_cobject_sources(#11509, 1) +py_cobject_sources(#11559, 1) +py_cobject_sources(#11516, 1) +py_cobject_sources(#11530, 1) +py_cobject_sources(#11538, 1) +py_cobject_sources(#11523, 1) +py_cobject_sources(#11570, 1) +py_cobject_sources(#11568, 1) +py_cobject_sources(#11858, 1) +py_cobject_sources(#11580, 1) +py_cobject_sources(#10511, 1) +py_cobject_sources(#10541, 1) +py_cobject_sources(#11693, 1) +py_cobject_sources(#11859, 1) +py_cobject_sources(#10543, 1) +py_cobject_sources(#10545, 1) +py_cobject_sources(#11860, 1) +py_cobject_sources(#11583, 1) +py_cobject_sources(#11861, 1) +py_cobject_sources(#11862, 1) +py_cobject_sources(#11609, 1) +py_cobject_sources(#11615, 1) +py_cobject_sources(#11863, 1) +py_cobject_sources(#11611, 1) +py_cobject_sources(#11864, 1) +py_cobject_sources(#11865, 1) +py_cobject_sources(#11584, 1) +py_cobject_sources(#11585, 1) +py_cobject_sources(#10557, 1) +py_cobject_sources(#11607, 1) +py_cobject_sources(#11377, 1) +py_cobject_sources(#11866, 1) +py_cobject_sources(#11586, 1) +py_cobject_sources(#11867, 1) +py_cobject_sources(#11868, 1) +py_cobject_sources(#10618, 1) +py_cobject_sources(#11621, 1) +py_cobject_sources(#11869, 1) +py_cobject_sources(#11870, 1) +py_cobject_sources(#10575, 1) +py_cobject_sources(#10578, 1) +py_cobject_sources(#10580, 1) +py_cobject_sources(#11640, 1) +py_cobject_sources(#11629, 1) +py_cobject_sources(#11655, 1) +py_cobject_sources(#11631, 1) +py_cobject_sources(#11635, 1) +py_cobject_sources(#11871, 1) +py_cobject_sources(#11872, 1) +py_cobject_sources(#10602, 1) +py_cobject_sources(#11661, 1) +py_cobject_sources(#10517, 1) +py_cobject_sources(#11238, 1) +py_cobject_sources(#11239, 1) +py_cobject_sources(#11718, 1) +py_cobject_sources(#11873, 1) +py_cobject_sources(#11874, 1) +py_cobject_sources(#11708, 1) +py_cobject_sources(#11664, 1) +py_cobject_sources(#11875, 1) +py_cobject_sources(#11876, 1) +py_cobject_sources(#11663, 1) +py_cobject_sources(#11877, 1) +py_cobject_sources(#11878, 1) +py_cobject_sources(#11879, 1) +py_cobject_sources(#11880, 1) +py_cobject_sources(#11711, 1) +py_cobject_sources(#10655, 1) +py_cobject_sources(#10656, 1) +py_cobject_sources(#11674, 1) +py_cobject_sources(#11675, 1) +py_cobject_sources(#11676, 1) +py_cobject_sources(#11881, 1) +py_cobject_sources(#11882, 1) +py_cobject_sources(#11883, 1) +py_cobject_sources(#11884, 1) +py_cobject_sources(#11698, 1) +py_cobject_sources(#11885, 1) +py_cobject_sources(#11886, 1) +py_cobject_sources(#11119, 1) +py_cobject_sources(#11887, 1) +py_cobject_sources(#11888, 1) +py_cobject_sources(#11889, 1) +py_cobject_sources(#11668, 1) +py_cobject_sources(#11890, 1) +py_cobject_sources(#11891, 1) +py_cobject_sources(#11892, 1) +py_cobject_sources(#11893, 1) +py_cobject_sources(#11894, 1) +py_cobject_sources(#11895, 1) +py_cobject_sources(#11896, 1) +py_cobject_sources(#11897, 1) +py_cobject_sources(#11669, 1) +py_cobject_sources(#11898, 1) +py_cobject_sources(#11899, 1) +py_cobject_sources(#11900, 1) +py_cobject_sources(#11901, 1) +py_cobject_sources(#11902, 1) +py_cobject_sources(#11903, 1) +py_cobject_sources(#11904, 1) +py_cobject_sources(#11905, 1) +py_cobject_sources(#11906, 1) +py_cobject_sources(#11907, 1) +py_cobject_sources(#11908, 1) +py_cobject_sources(#11909, 1) +py_cobject_sources(#11910, 1) +py_cobject_sources(#11911, 1) +py_cobject_sources(#11912, 1) +py_cobject_sources(#11913, 1) +py_cobject_sources(#11914, 1) +py_cobject_sources(#11915, 1) +py_cobject_sources(#11916, 1) +py_cobject_sources(#11917, 1) +py_cobject_sources(#11918, 1) +py_cobject_sources(#11919, 1) +py_cobject_sources(#11920, 1) +py_cobject_sources(#11921, 1) +py_cobject_sources(#11922, 1) +py_cobject_sources(#11923, 1) +py_cobject_sources(#11924, 1) +py_cobject_sources(#11925, 1) +py_cobject_sources(#11926, 1) +py_cobject_sources(#11927, 1) +py_cobject_sources(#11928, 1) +py_cobject_sources(#11929, 1) +py_cobject_sources(#11930, 1) +py_cobject_sources(#11931, 1) +py_cobject_sources(#11932, 1) +py_cobject_sources(#11671, 1) +py_cobject_sources(#11192, 1) +py_cobject_sources(#11933, 1) +py_cobject_sources(#11934, 1) +py_cobject_sources(#11935, 1) +py_cobject_sources(#10003, 1) +py_cobject_sources(#11695, 1) +py_cobject_sources(#11158, 1) +py_cobject_sources(#11936, 1) +py_cobject_sources(#11937, 1) +py_cobject_sources(#11938, 1) +py_cobject_sources(#11939, 1) +py_cobject_sources(#11717, 1) +py_cobject_sources(#11719, 1) +py_cobject_sources(#11720, 1) +py_cobject_sources(#11721, 1) +py_cobject_sources(#11722, 1) +py_cobject_sources(#11940, 1) +py_cobject_sources(#11723, 1) +py_cobject_sources(#11724, 1) +py_cobject_sources(#11725, 1) +py_cobject_sources(#11726, 1) +py_cobject_sources(#11727, 1) +py_cobject_sources(#11728, 1) +py_cobject_sources(#11729, 1) +py_cobject_sources(#11730, 1) +py_cobject_sources(#11731, 1) +py_cobject_sources(#11732, 1) +py_cobject_sources(#11733, 1) +py_cobject_sources(#11734, 1) +py_cobject_sources(#11735, 1) +py_cobject_sources(#11941, 1) +py_cobject_sources(#11736, 1) +py_cobject_sources(#11737, 1) +py_cobject_sources(#11738, 1) +py_cobject_sources(#11739, 1) +py_cobject_sources(#11942, 1) +py_cobject_sources(#11943, 1) +py_cobject_sources(#11740, 1) +py_cobject_sources(#11741, 1) +py_cobject_sources(#11944, 1) +py_cobject_sources(#11742, 1) +py_cobject_sources(#11945, 1) +py_cobject_sources(#11946, 1) +py_cobject_sources(#11947, 1) +py_cobject_sources(#11948, 1) +py_cobject_sources(#11743, 1) +py_cobject_sources(#11744, 1) +py_cobject_sources(#11745, 1) +py_cobject_sources(#11746, 1) +py_cobject_sources(#11747, 1) +py_cobject_sources(#11748, 1) +py_cobject_sources(#11949, 1) +py_cobject_sources(#11950, 1) +py_cobject_sources(#11749, 1) +py_cobject_sources(#11750, 1) +py_cobject_sources(#11951, 1) +py_cobject_sources(#11952, 1) +py_cobject_sources(#11953, 1) +py_cobject_sources(#11954, 1) +py_cobject_sources(#11955, 1) +py_cobject_sources(#11956, 1) +py_cobject_sources(#11957, 1) +py_cobject_sources(#11958, 1) +py_cobject_sources(#11959, 1) +py_cobject_sources(#11960, 1) +py_cobject_sources(#11751, 1) +py_cobject_sources(#11752, 1) +py_cobject_sources(#11753, 1) +py_cobject_sources(#11754, 1) +py_cobject_sources(#11755, 1) +py_cobject_sources(#11756, 1) +py_cobject_sources(#11757, 1) +py_cobject_sources(#11758, 1) +py_cobject_sources(#11759, 1) +py_cobject_sources(#11760, 1) +py_cobject_sources(#11761, 1) +py_cobject_sources(#11961, 1) +py_cobject_sources(#11962, 1) +py_cobject_sources(#11762, 1) +py_cobject_sources(#11963, 1) +py_cobject_sources(#11763, 1) +py_cobject_sources(#11964, 1) +py_cobject_sources(#11764, 1) +py_cobject_sources(#11765, 1) +py_cobject_sources(#11965, 1) +py_cobject_sources(#11766, 1) +py_cobject_sources(#11767, 1) +py_cobject_sources(#11768, 1) +py_cobject_sources(#11966, 1) +py_cobject_sources(#11769, 1) +py_cobject_sources(#11770, 1) +py_cobject_sources(#11771, 1) +py_cobject_sources(#11772, 1) +py_cobject_sources(#11967, 1) +py_cobject_sources(#11773, 1) +py_cobject_sources(#11774, 1) +py_cobject_sources(#11775, 1) +py_cobject_sources(#11776, 1) +py_cobject_sources(#11968, 1) +py_cobject_sources(#11777, 1) +py_cobject_sources(#11778, 1) +py_cobject_sources(#11779, 1) +py_cobject_sources(#11969, 1) +py_cobject_sources(#11780, 1) +py_cobject_sources(#11781, 1) +py_cobject_sources(#11782, 1) +py_cobject_sources(#11783, 1) +py_cobject_sources(#11784, 1) +py_cobject_sources(#11785, 1) +py_cobject_sources(#11970, 1) +py_cobject_sources(#11786, 1) +py_cobject_sources(#11971, 1) +py_cobject_sources(#11787, 1) +py_cobject_sources(#11788, 1) +py_cobject_sources(#11789, 1) +py_cobject_sources(#11790, 1) +py_cobject_sources(#11791, 1) +py_cobject_sources(#11792, 1) +py_cobject_sources(#11793, 1) +py_cobject_sources(#11794, 1) +py_cobject_sources(#11795, 1) +py_cobject_sources(#11796, 1) +py_cobject_sources(#11797, 1) +py_cobject_sources(#11972, 1) +py_cobject_sources(#11798, 1) +py_cobject_sources(#11973, 1) +py_cobject_sources(#11799, 1) +py_cobject_sources(#11974, 1) +py_cobject_sources(#11800, 1) +py_cobject_sources(#11801, 1) +py_cobject_sources(#11975, 1) +py_cobject_sources(#11976, 1) +py_cobject_sources(#11977, 1) +py_cobject_sources(#11802, 1) +py_cobject_sources(#11803, 1) +py_cobject_sources(#11978, 1) +py_cobject_sources(#11979, 1) +py_cobject_sources(#11980, 1) +py_cobject_sources(#11981, 1) +py_cobject_sources(#11804, 1) +py_cobject_sources(#11805, 1) +py_cobject_sources(#11806, 1) +py_cobject_sources(#11807, 1) +py_cobject_sources(#11808, 1) +py_cobject_sources(#11982, 1) +py_cobject_sources(#11983, 1) +py_cobject_sources(#11984, 1) +py_cobject_sources(#11809, 1) +py_cobject_sources(#11810, 1) +py_cobject_sources(#11811, 1) +py_cobject_sources(#11812, 1) +py_cobject_sources(#11813, 1) +py_cobject_sources(#11814, 1) +py_cobject_sources(#11815, 1) +py_cobject_sources(#11816, 1) +py_cobject_sources(#11817, 1) +py_cobject_sources(#11818, 1) +py_cobject_sources(#11819, 1) +py_cobject_sources(#11820, 1) +py_cobject_sources(#11821, 1) +py_cobject_sources(#11822, 1) +py_cobject_sources(#10000, 1) +py_cobject_sources(#10002, 1) +py_cobject_sources(#10004, 1) +py_cobject_sources(#10006, 1) +py_cobject_sources(#10008, 1) +py_cobject_sources(#10009, 1) +py_cobject_sources(#10010, 1) +py_cobject_sources(#10011, 1) +py_cobject_sources(#10012, 1) +py_cobject_sources(#10013, 1) +py_cobject_sources(#11985, 1) +py_cobject_sources(#10014, 1) +py_cobject_sources(#10015, 1) +py_cobject_sources(#10016, 1) +py_cobject_sources(#10018, 1) +py_cobject_sources(#11986, 1) +py_cobject_sources(#11376, 1) +py_cobject_sources(#11987, 1) +py_cobject_sources(#10019, 1) +py_cobject_sources(#10020, 1) +py_cobject_sources(#10022, 1) +py_cobject_sources(#10023, 1) +py_cobject_sources(#10025, 1) +py_cobject_sources(#10026, 1) +py_cobject_sources(#10027, 1) +py_cobject_sources(#11378, 1) +py_cobject_sources(#11379, 1) +py_cobject_sources(#10028, 1) +py_cobject_sources(#10029, 1) +py_cobject_sources(#10030, 1) +py_cobject_sources(#10031, 1) +py_cobject_sources(#10032, 1) +py_cobject_sources(#10033, 1) +py_cobject_sources(#10034, 1) +py_cobject_sources(#10035, 1) +py_cobject_sources(#10036, 1) +py_cobject_sources(#10037, 1) +py_cobject_sources(#10039, 1) +py_cobject_sources(#10040, 1) +py_cobject_sources(#10041, 1) +py_cobject_sources(#10042, 1) +py_cobject_sources(#10043, 1) +py_cobject_sources(#10044, 1) +py_cobject_sources(#10045, 1) +py_cobject_sources(#10046, 1) +py_cobject_sources(#10047, 1) +py_cobject_sources(#10048, 1) +py_cobject_sources(#10049, 1) +py_cobject_sources(#10050, 1) +py_cobject_sources(#10051, 1) +py_cobject_sources(#10052, 1) +py_cobject_sources(#10053, 1) +py_cobject_sources(#10054, 1) +py_cobject_sources(#11380, 1) +py_cobject_sources(#11381, 1) +py_cobject_sources(#11382, 1) +py_cobject_sources(#11383, 1) +py_cobject_sources(#11384, 1) +py_cobject_sources(#11385, 1) +py_cobject_sources(#10055, 1) +py_cobject_sources(#10057, 1) +py_cobject_sources(#10059, 1) +py_cobject_sources(#10060, 1) +py_cobject_sources(#10061, 1) +py_cobject_sources(#10062, 1) +py_cobject_sources(#10063, 1) +py_cobject_sources(#10064, 1) +py_cobject_sources(#10065, 1) +py_cobject_sources(#10066, 1) +py_cobject_sources(#10067, 1) +py_cobject_sources(#11988, 1) +py_cobject_sources(#11989, 1) +py_cobject_sources(#11386, 1) +py_cobject_sources(#11387, 1) +py_cobject_sources(#11990, 1) +py_cobject_sources(#11991, 1) +py_cobject_sources(#11992, 1) +py_cobject_sources(#11993, 1) +py_cobject_sources(#11994, 1) +py_cobject_sources(#11995, 1) +py_cobject_sources(#11996, 1) +py_cobject_sources(#11997, 1) +py_cobject_sources(#11998, 1) +py_cobject_sources(#11999, 1) +py_cobject_sources(#12000, 1) +py_cobject_sources(#12001, 1) +py_cobject_sources(#12002, 1) +py_cobject_sources(#12003, 1) +py_cobject_sources(#11388, 1) +py_cobject_sources(#11389, 1) +py_cobject_sources(#11390, 1) +py_cobject_sources(#11391, 1) +py_cobject_sources(#11392, 1) +py_cobject_sources(#11393, 1) +py_cobject_sources(#11394, 1) +py_cobject_sources(#11395, 1) +py_cobject_sources(#11396, 1) +py_cobject_sources(#11397, 1) +py_cobject_sources(#12004, 1) +py_cobject_sources(#12005, 1) +py_cobject_sources(#12006, 1) +py_cobject_sources(#12007, 1) +py_cobject_sources(#10068, 1) +py_cobject_sources(#10069, 1) +py_cobject_sources(#12008, 1) +py_cobject_sources(#12009, 1) +py_cobject_sources(#12010, 1) +py_cobject_sources(#12011, 1) +py_cobject_sources(#12012, 1) +py_cobject_sources(#12013, 1) +py_cobject_sources(#12014, 1) +py_cobject_sources(#12015, 1) +py_cobject_sources(#12016, 1) +py_cobject_sources(#12017, 1) +py_cobject_sources(#12018, 1) +py_cobject_sources(#12019, 1) +py_cobject_sources(#12020, 1) +py_cobject_sources(#12021, 1) +py_cobject_sources(#12022, 1) +py_cobject_sources(#12023, 1) +py_cobject_sources(#12024, 1) +py_cobject_sources(#12025, 1) +py_cobject_sources(#12026, 1) +py_cobject_sources(#12027, 1) +py_cobject_sources(#12028, 1) +py_cobject_sources(#12029, 1) +py_cobject_sources(#12030, 1) +py_cobject_sources(#12031, 1) +py_cobject_sources(#12032, 1) +py_cobject_sources(#12033, 1) +py_cobject_sources(#12034, 1) +py_cobject_sources(#12035, 1) +py_cobject_sources(#12036, 1) +py_cobject_sources(#12037, 1) +py_cobject_sources(#12038, 1) +py_cobject_sources(#12039, 1) +py_cobject_sources(#11398, 1) +py_cobject_sources(#11399, 1) +py_cobject_sources(#12040, 1) +py_cobject_sources(#12041, 1) +py_cobject_sources(#11400, 1) +py_cobject_sources(#11401, 1) +py_cobject_sources(#12042, 1) +py_cobject_sources(#12043, 1) +py_cobject_sources(#10070, 1) +py_cobject_sources(#10071, 1) +py_cobject_sources(#10072, 1) +py_cobject_sources(#10073, 1) +py_cobject_sources(#12044, 1) +py_cobject_sources(#12045, 1) +py_cobject_sources(#12046, 1) +py_cobject_sources(#12047, 1) +py_cobject_sources(#11402, 1) +py_cobject_sources(#11403, 1) +py_cobject_sources(#10074, 1) +py_cobject_sources(#10075, 1) +py_cobject_sources(#10076, 1) +py_cobject_sources(#10077, 1) +py_cobject_sources(#12048, 1) +py_cobject_sources(#12049, 1) +py_cobject_sources(#12050, 1) +py_cobject_sources(#12051, 1) +py_cobject_sources(#12052, 1) +py_cobject_sources(#12053, 1) +py_cobject_sources(#12054, 1) +py_cobject_sources(#12055, 1) +py_cobject_sources(#12056, 1) +py_cobject_sources(#12057, 1) +py_cobject_sources(#12058, 1) +py_cobject_sources(#12059, 1) +py_cobject_sources(#10078, 1) +py_cobject_sources(#10079, 1) +py_cobject_sources(#10080, 1) +py_cobject_sources(#10081, 1) +py_cobject_sources(#10083, 1) +py_cobject_sources(#10084, 1) +py_cobject_sources(#12060, 1) +py_cobject_sources(#12061, 1) +py_cobject_sources(#10086, 1) +py_cobject_sources(#10087, 1) +py_cobject_sources(#10088, 1) +py_cobject_sources(#10089, 1) +py_cobject_sources(#10090, 1) +py_cobject_sources(#10091, 1) +py_cobject_sources(#10092, 1) +py_cobject_sources(#10093, 1) +py_cobject_sources(#10094, 1) +py_cobject_sources(#10095, 1) +py_cobject_sources(#10096, 1) +py_cobject_sources(#10097, 1) +py_cobject_sources(#10098, 1) +py_cobject_sources(#10099, 1) +py_cobject_sources(#10100, 1) +py_cobject_sources(#10101, 1) +py_cobject_sources(#10103, 1) +py_cobject_sources(#10104, 1) +py_cobject_sources(#10105, 1) +py_cobject_sources(#10106, 1) +py_cobject_sources(#10107, 1) +py_cobject_sources(#10108, 1) +py_cobject_sources(#10109, 1) +py_cobject_sources(#10110, 1) +py_cobject_sources(#10111, 1) +py_cobject_sources(#10112, 1) +py_cobject_sources(#10113, 1) +py_cobject_sources(#10114, 1) +py_cobject_sources(#10115, 1) +py_cobject_sources(#10116, 1) +py_cobject_sources(#10117, 1) +py_cobject_sources(#10118, 1) +py_cobject_sources(#10119, 1) +py_cobject_sources(#10120, 1) +py_cobject_sources(#10121, 1) +py_cobject_sources(#10122, 1) +py_cobject_sources(#10123, 1) +py_cobject_sources(#10124, 1) +py_cobject_sources(#10125, 1) +py_cobject_sources(#10126, 1) +py_cobject_sources(#10127, 1) +py_cobject_sources(#10128, 1) +py_cobject_sources(#10129, 1) +py_cobject_sources(#10130, 1) +py_cobject_sources(#10131, 1) +py_cobject_sources(#10132, 1) +py_cobject_sources(#10133, 1) +py_cobject_sources(#10134, 1) +py_cobject_sources(#10135, 1) +py_cobject_sources(#10136, 1) +py_cobject_sources(#10137, 1) +py_cobject_sources(#10138, 1) +py_cobject_sources(#10139, 1) +py_cobject_sources(#10140, 1) +py_cobject_sources(#10141, 1) +py_cobject_sources(#10142, 1) +py_cobject_sources(#10143, 1) +py_cobject_sources(#10144, 1) +py_cobject_sources(#10145, 1) +py_cobject_sources(#10146, 1) +py_cobject_sources(#10147, 1) +py_cobject_sources(#10148, 1) +py_cobject_sources(#10149, 1) +py_cobject_sources(#10150, 1) +py_cobject_sources(#10151, 1) +py_cobject_sources(#10152, 1) +py_cobject_sources(#10153, 1) +py_cobject_sources(#10154, 1) +py_cobject_sources(#10155, 1) +py_cobject_sources(#11404, 1) +py_cobject_sources(#11405, 1) +py_cobject_sources(#10156, 1) +py_cobject_sources(#10157, 1) +py_cobject_sources(#10158, 1) +py_cobject_sources(#10159, 1) +py_cobject_sources(#10160, 1) +py_cobject_sources(#10161, 1) +py_cobject_sources(#10162, 1) +py_cobject_sources(#10163, 1) +py_cobject_sources(#12062, 1) +py_cobject_sources(#10164, 1) +py_cobject_sources(#10166, 1) +py_cobject_sources(#10168, 1) +py_cobject_sources(#10169, 1) +py_cobject_sources(#10170, 1) +py_cobject_sources(#11406, 1) +py_cobject_sources(#10171, 1) +py_cobject_sources(#10172, 1) +py_cobject_sources(#10173, 1) +py_cobject_sources(#10174, 1) +py_cobject_sources(#10175, 1) +py_cobject_sources(#10176, 1) +py_cobject_sources(#10177, 1) +py_cobject_sources(#10178, 1) +py_cobject_sources(#10179, 1) +py_cobject_sources(#10180, 1) +py_cobject_sources(#10181, 1) +py_cobject_sources(#10182, 1) +py_cobject_sources(#10183, 1) +py_cobject_sources(#10184, 1) +py_cobject_sources(#10185, 1) +py_cobject_sources(#10186, 1) +py_cobject_sources(#10187, 1) +py_cobject_sources(#10188, 1) +py_cobject_sources(#10189, 1) +py_cobject_sources(#10190, 1) +py_cobject_sources(#11407, 1) +py_cobject_sources(#11408, 1) +py_cobject_sources(#10191, 1) +py_cobject_sources(#10192, 1) +py_cobject_sources(#10193, 1) +py_cobject_sources(#10194, 1) +py_cobject_sources(#12063, 1) +py_cobject_sources(#12064, 1) +py_cobject_sources(#10195, 1) +py_cobject_sources(#10196, 1) +py_cobject_sources(#10197, 1) +py_cobject_sources(#10198, 1) +py_cobject_sources(#12065, 1) +py_cobject_sources(#10199, 1) +py_cobject_sources(#10200, 1) +py_cobject_sources(#10202, 1) +py_cobject_sources(#10203, 1) +py_cobject_sources(#10205, 1) +py_cobject_sources(#10206, 1) +py_cobject_sources(#10207, 1) +py_cobject_sources(#10208, 1) +py_cobject_sources(#10209, 1) +py_cobject_sources(#10210, 1) +py_cobject_sources(#10211, 1) +py_cobject_sources(#10212, 1) +py_cobject_sources(#10213, 1) +py_cobject_sources(#10214, 1) +py_cobject_sources(#10215, 1) +py_cobject_sources(#10216, 1) +py_cobject_sources(#10217, 1) +py_cobject_sources(#10219, 1) +py_cobject_sources(#10220, 1) +py_cobject_sources(#12066, 1) +py_cobject_sources(#10221, 1) +py_cobject_sources(#10222, 1) +py_cobject_sources(#10223, 1) +py_cobject_sources(#10224, 1) +py_cobject_sources(#10225, 1) +py_cobject_sources(#12067, 1) +py_cobject_sources(#10226, 1) +py_cobject_sources(#10227, 1) +py_cobject_sources(#10228, 1) +py_cobject_sources(#10229, 1) +py_cobject_sources(#10230, 1) +py_cobject_sources(#10231, 1) +py_cobject_sources(#10232, 1) +py_cobject_sources(#10233, 1) +py_cobject_sources(#10234, 1) +py_cobject_sources(#12068, 1) +py_cobject_sources(#12069, 1) +py_cobject_sources(#12070, 1) +py_cobject_sources(#10235, 1) +py_cobject_sources(#10236, 1) +py_cobject_sources(#10237, 1) +py_cobject_sources(#10238, 1) +py_cobject_sources(#10239, 1) +py_cobject_sources(#10240, 1) +py_cobject_sources(#10241, 1) +py_cobject_sources(#10242, 1) +py_cobject_sources(#10243, 1) +py_cobject_sources(#10244, 1) +py_cobject_sources(#10245, 1) +py_cobject_sources(#10246, 1) +py_cobject_sources(#10247, 1) +py_cobject_sources(#10248, 1) +py_cobject_sources(#10249, 1) +py_cobject_sources(#10251, 1) +py_cobject_sources(#10252, 1) +py_cobject_sources(#10253, 1) +py_cobject_sources(#10254, 1) +py_cobject_sources(#10255, 1) +py_cobject_sources(#10256, 1) +py_cobject_sources(#10257, 1) +py_cobject_sources(#10258, 1) +py_cobject_sources(#10259, 1) +py_cobject_sources(#10260, 1) +py_cobject_sources(#10261, 1) +py_cobject_sources(#10262, 1) +py_cobject_sources(#10263, 1) +py_cobject_sources(#10264, 1) +py_cobject_sources(#10265, 1) +py_cobject_sources(#10266, 1) +py_cobject_sources(#10267, 1) +py_cobject_sources(#10268, 1) +py_cobject_sources(#10269, 1) +py_cobject_sources(#10270, 1) +py_cobject_sources(#10271, 1) +py_cobject_sources(#10272, 1) +py_cobject_sources(#10273, 1) +py_cobject_sources(#10274, 1) +py_cobject_sources(#10275, 1) +py_cobject_sources(#12071, 1) +py_cobject_sources(#10276, 1) +py_cobject_sources(#12072, 1) +py_cobject_sources(#10277, 1) +py_cobject_sources(#10278, 1) +py_cobject_sources(#10279, 1) +py_cobject_sources(#10280, 1) +py_cobject_sources(#10281, 1) +py_cobject_sources(#10282, 1) +py_cobject_sources(#10283, 1) +py_cobject_sources(#10284, 1) +py_cobject_sources(#10285, 1) +py_cobject_sources(#10286, 1) +py_cobject_sources(#10287, 1) +py_cobject_sources(#10288, 1) +py_cobject_sources(#10289, 1) +py_cobject_sources(#10290, 1) +py_cobject_sources(#10291, 1) +py_cobject_sources(#10292, 1) +py_cobject_sources(#10293, 1) +py_cobject_sources(#10294, 1) +py_cobject_sources(#10295, 1) +py_cobject_sources(#10296, 1) +py_cobject_sources(#10297, 1) +py_cobject_sources(#10298, 1) +py_cobject_sources(#10299, 1) +py_cobject_sources(#12073, 1) +py_cobject_sources(#12074, 1) +py_cobject_sources(#10300, 1) +py_cobject_sources(#10301, 1) +py_cobject_sources(#10302, 1) +py_cobject_sources(#10303, 1) +py_cobject_sources(#10304, 1) +py_cobject_sources(#10305, 1) +py_cobject_sources(#10306, 1) +py_cobject_sources(#12075, 1) +py_cobject_sources(#10307, 1) +py_cobject_sources(#10308, 1) +py_cobject_sources(#10309, 1) +py_cobject_sources(#10310, 1) +py_cobject_sources(#10311, 1) +py_cobject_sources(#10312, 1) +py_cobject_sources(#10313, 1) +py_cobject_sources(#10316, 1) +py_cobject_sources(#10317, 1) +py_cobject_sources(#10318, 1) +py_cobject_sources(#10319, 1) +py_cobject_sources(#10320, 1) +py_cobject_sources(#10321, 1) +py_cobject_sources(#10322, 1) +py_cobject_sources(#10323, 1) +py_cobject_sources(#10324, 1) +py_cobject_sources(#10325, 1) +py_cobject_sources(#10326, 1) +py_cobject_sources(#10327, 1) +py_cobject_sources(#10328, 1) +py_cobject_sources(#10329, 1) +py_cobject_sources(#12076, 1) +py_cobject_sources(#12077, 1) +py_cobject_sources(#10330, 1) +py_cobject_sources(#10331, 1) +py_cobject_sources(#10332, 1) +py_cobject_sources(#10333, 1) +py_cobject_sources(#10334, 1) +py_cobject_sources(#10335, 1) +py_cobject_sources(#10336, 1) +py_cobject_sources(#10337, 1) +py_cobject_sources(#10338, 1) +py_cobject_sources(#10339, 1) +py_cobject_sources(#12078, 1) +py_cobject_sources(#10340, 1) +py_cobject_sources(#10341, 1) +py_cobject_sources(#12079, 1) +py_cobject_sources(#12080, 1) +py_cobject_sources(#12081, 1) +py_cobject_sources(#10342, 1) +py_cobject_sources(#12082, 1) +py_cobject_sources(#10343, 1) +py_cobject_sources(#10344, 1) +py_cobject_sources(#10345, 1) +py_cobject_sources(#10346, 1) +py_cobject_sources(#12083, 1) +py_cobject_sources(#10347, 1) +py_cobject_sources(#10348, 1) +py_cobject_sources(#10349, 1) +py_cobject_sources(#10350, 1) +py_cobject_sources(#10351, 1) +py_cobject_sources(#10352, 1) +py_cobject_sources(#11409, 1) +py_cobject_sources(#11410, 1) +py_cobject_sources(#11411, 1) +py_cobject_sources(#10353, 1) +py_cobject_sources(#10355, 1) +py_cobject_sources(#10357, 1) +py_cobject_sources(#10358, 1) +py_cobject_sources(#10359, 1) +py_cobject_sources(#10360, 1) +py_cobject_sources(#10361, 1) +py_cobject_sources(#10362, 1) +py_cobject_sources(#10363, 1) +py_cobject_sources(#10364, 1) +py_cobject_sources(#10365, 1) +py_cobject_sources(#10366, 1) +py_cobject_sources(#10367, 1) +py_cobject_sources(#11413, 1) +py_cobject_sources(#10368, 1) +py_cobject_sources(#10369, 1) +py_cobject_sources(#10371, 1) +py_cobject_sources(#10372, 1) +py_cobject_sources(#10373, 1) +py_cobject_sources(#10374, 1) +py_cobject_sources(#10375, 1) +py_cobject_sources(#10376, 1) +py_cobject_sources(#10377, 1) +py_cobject_sources(#10378, 1) +py_cobject_sources(#10379, 1) +py_cobject_sources(#11414, 1) +py_cobject_sources(#10380, 1) +py_cobject_sources(#11415, 1) +py_cobject_sources(#11416, 1) +py_cobject_sources(#10381, 1) +py_cobject_sources(#10382, 1) +py_cobject_sources(#10383, 1) +py_cobject_sources(#10385, 1) +py_cobject_sources(#12084, 1) +py_cobject_sources(#12085, 1) +py_cobject_sources(#10386, 1) +py_cobject_sources(#10387, 1) +py_cobject_sources(#10388, 1) +py_cobject_sources(#10389, 1) +py_cobject_sources(#11417, 1) +py_cobject_sources(#10390, 1) +py_cobject_sources(#11418, 1) +py_cobject_sources(#10391, 1) +py_cobject_sources(#10392, 1) +py_cobject_sources(#10393, 1) +py_cobject_sources(#10394, 1) +py_cobject_sources(#12086, 1) +py_cobject_sources(#12087, 1) +py_cobject_sources(#12088, 1) +py_cobject_sources(#10395, 1) +py_cobject_sources(#10396, 1) +py_cobject_sources(#10397, 1) +py_cobject_sources(#10398, 1) +py_cobject_sources(#10399, 1) +py_cobject_sources(#10400, 1) +py_cobject_sources(#10401, 1) +py_cobject_sources(#10402, 1) +py_cobject_sources(#10403, 1) +py_cobject_sources(#10404, 1) +py_cobject_sources(#10405, 1) +py_cobject_sources(#10406, 1) +py_cobject_sources(#10407, 1) +py_cobject_sources(#10408, 1) +py_cobject_sources(#10409, 1) +py_cobject_sources(#10410, 1) +py_cobject_sources(#10411, 1) +py_cobject_sources(#10412, 1) +py_cobject_sources(#10413, 1) +py_cobject_sources(#10414, 1) +py_cobject_sources(#10415, 1) +py_cobject_sources(#10416, 1) +py_cobject_sources(#10417, 1) +py_cobject_sources(#10418, 1) +py_cobject_sources(#10419, 1) +py_cobject_sources(#10420, 1) +py_cobject_sources(#10421, 1) +py_cobject_sources(#10422, 1) +py_cobject_sources(#10423, 1) +py_cobject_sources(#10424, 1) +py_cobject_sources(#10425, 1) +py_cobject_sources(#10426, 1) +py_cobject_sources(#10427, 1) +py_cobject_sources(#10428, 1) +py_cobject_sources(#10429, 1) +py_cobject_sources(#10430, 1) +py_cobject_sources(#12089, 1) +py_cobject_sources(#10431, 1) +py_cobject_sources(#10432, 1) +py_cobject_sources(#10433, 1) +py_cobject_sources(#10434, 1) +py_cobject_sources(#10435, 1) +py_cobject_sources(#10436, 1) +py_cobject_sources(#10437, 1) +py_cobject_sources(#10438, 1) +py_cobject_sources(#10439, 1) +py_cobject_sources(#10440, 1) +py_cobject_sources(#10441, 1) +py_cobject_sources(#10442, 1) +py_cobject_sources(#10443, 1) +py_cobject_sources(#10444, 1) +py_cobject_sources(#12090, 1) +py_cobject_sources(#12091, 1) +py_cobject_sources(#10445, 1) +py_cobject_sources(#10446, 1) +py_cobject_sources(#10447, 1) +py_cobject_sources(#10448, 1) +py_cobject_sources(#10449, 1) +py_cobject_sources(#10450, 1) +py_cobject_sources(#10451, 1) +py_cobject_sources(#10452, 1) +py_cobject_sources(#10453, 1) +py_cobject_sources(#11419, 1) +py_cobject_sources(#10454, 1) +py_cobject_sources(#10455, 1) +py_cobject_sources(#10456, 1) +py_cobject_sources(#10457, 1) +py_cobject_sources(#10458, 1) +py_cobject_sources(#10459, 1) +py_cobject_sources(#10460, 1) +py_cobject_sources(#10461, 1) +py_cobject_sources(#10462, 1) +py_cobject_sources(#10463, 1) +py_cobject_sources(#10464, 1) +py_cobject_sources(#10465, 1) +py_cobject_sources(#10466, 1) +py_cobject_sources(#10467, 1) +py_cobject_sources(#10468, 1) +py_cobject_sources(#10469, 1) +py_cobject_sources(#10470, 1) +py_cobject_sources(#10471, 1) +py_cobject_sources(#10472, 1) +py_cobject_sources(#10473, 1) +py_cobject_sources(#10474, 1) +py_cobject_sources(#10475, 1) +py_cobject_sources(#10476, 1) +py_cobject_sources(#10477, 1) +py_cobject_sources(#10478, 1) +py_cobject_sources(#10479, 1) +py_cobject_sources(#10480, 1) +py_cobject_sources(#10481, 1) +py_cobject_sources(#10482, 1) +py_cobject_sources(#10483, 1) +py_cobject_sources(#11420, 1) +py_cobject_sources(#11421, 1) +py_cobject_sources(#10484, 1) +py_cobject_sources(#10485, 1) +py_cobject_sources(#11422, 1) +py_cobject_sources(#10486, 1) +py_cobject_sources(#10487, 1) +py_cobject_sources(#10488, 1) +py_cobject_sources(#10489, 1) +py_cobject_sources(#10490, 1) +py_cobject_sources(#10491, 1) +py_cobject_sources(#10493, 1) +py_cobject_sources(#10494, 1) +py_cobject_sources(#10495, 1) +py_cobject_sources(#10496, 1) +py_cobject_sources(#11423, 1) +py_cobject_sources(#10498, 1) +py_cobject_sources(#12092, 1) +py_cobject_sources(#12093, 1) +py_cobject_sources(#10499, 1) +py_cobject_sources(#10500, 1) +py_cobject_sources(#10501, 1) +py_cobject_sources(#10502, 1) +py_cobject_sources(#10503, 1) +py_cobject_sources(#10504, 1) +py_cobject_sources(#10505, 1) +py_cobject_sources(#10506, 1) +py_cobject_sources(#10507, 1) +py_cobject_sources(#10508, 1) +py_cobject_sources(#10509, 1) +py_cobject_sources(#10510, 1) +py_cobject_sources(#10512, 1) +py_cobject_sources(#10513, 1) +py_cobject_sources(#10514, 1) +py_cobject_sources(#10515, 1) +py_cobject_sources(#10516, 1) +py_cobject_sources(#10518, 1) +py_cobject_sources(#10519, 1) +py_cobject_sources(#10520, 1) +py_cobject_sources(#10521, 1) +py_cobject_sources(#10522, 1) +py_cobject_sources(#10523, 1) +py_cobject_sources(#10524, 1) +py_cobject_sources(#10525, 1) +py_cobject_sources(#10526, 1) +py_cobject_sources(#10527, 1) +py_cobject_sources(#10528, 1) +py_cobject_sources(#10529, 1) +py_cobject_sources(#10530, 1) +py_cobject_sources(#10531, 1) +py_cobject_sources(#10532, 1) +py_cobject_sources(#10533, 1) +py_cobject_sources(#10534, 1) +py_cobject_sources(#10535, 1) +py_cobject_sources(#10536, 1) +py_cobject_sources(#10537, 1) +py_cobject_sources(#10538, 1) +py_cobject_sources(#10539, 1) +py_cobject_sources(#10540, 1) +py_cobject_sources(#10542, 1) +py_cobject_sources(#10544, 1) +py_cobject_sources(#10546, 1) +py_cobject_sources(#10547, 1) +py_cobject_sources(#11424, 1) +py_cobject_sources(#11425, 1) +py_cobject_sources(#11426, 1) +py_cobject_sources(#10548, 1) +py_cobject_sources(#10549, 1) +py_cobject_sources(#10550, 1) +py_cobject_sources(#10551, 1) +py_cobject_sources(#10552, 1) +py_cobject_sources(#10553, 1) +py_cobject_sources(#10554, 1) +py_cobject_sources(#10555, 1) +py_cobject_sources(#10556, 1) +py_cobject_sources(#10558, 1) +py_cobject_sources(#10559, 1) +py_cobject_sources(#10560, 1) +py_cobject_sources(#11427, 1) +py_cobject_sources(#11428, 1) +py_cobject_sources(#11429, 1) +py_cobject_sources(#10561, 1) +py_cobject_sources(#10562, 1) +py_cobject_sources(#10563, 1) +py_cobject_sources(#10564, 1) +py_cobject_sources(#10565, 1) +py_cobject_sources(#10566, 1) +py_cobject_sources(#11430, 1) +py_cobject_sources(#10567, 1) +py_cobject_sources(#10568, 1) +py_cobject_sources(#10569, 1) +py_cobject_sources(#10570, 1) +py_cobject_sources(#10571, 1) +py_cobject_sources(#10572, 1) +py_cobject_sources(#10573, 1) +py_cobject_sources(#10574, 1) +py_cobject_sources(#10576, 1) +py_cobject_sources(#10577, 1) +py_cobject_sources(#10579, 1) +py_cobject_sources(#10581, 1) +py_cobject_sources(#10582, 1) +py_cobject_sources(#10583, 1) +py_cobject_sources(#10584, 1) +py_cobject_sources(#10585, 1) +py_cobject_sources(#10586, 1) +py_cobject_sources(#10587, 1) +py_cobject_sources(#10588, 1) +py_cobject_sources(#10589, 1) +py_cobject_sources(#10590, 1) +py_cobject_sources(#10591, 1) +py_cobject_sources(#10592, 1) +py_cobject_sources(#10593, 1) +py_cobject_sources(#10594, 1) +py_cobject_sources(#12094, 1) +py_cobject_sources(#10595, 1) +py_cobject_sources(#10596, 1) +py_cobject_sources(#10597, 1) +py_cobject_sources(#10598, 1) +py_cobject_sources(#10599, 1) +py_cobject_sources(#10600, 1) +py_cobject_sources(#10601, 1) +py_cobject_sources(#10603, 1) +py_cobject_sources(#10604, 1) +py_cobject_sources(#10605, 1) +py_cobject_sources(#10606, 1) +py_cobject_sources(#10607, 1) +py_cobject_sources(#10608, 1) +py_cobject_sources(#10609, 1) +py_cobject_sources(#10610, 1) +py_cobject_sources(#10611, 1) +py_cobject_sources(#11431, 1) +py_cobject_sources(#10612, 1) +py_cobject_sources(#10613, 1) +py_cobject_sources(#10614, 1) +py_cobject_sources(#10615, 1) +py_cobject_sources(#12095, 1) +py_cobject_sources(#10616, 1) +py_cobject_sources(#10617, 1) +py_cobject_sources(#10619, 1) +py_cobject_sources(#10620, 1) +py_cobject_sources(#10621, 1) +py_cobject_sources(#10622, 1) +py_cobject_sources(#10623, 1) +py_cobject_sources(#10624, 1) +py_cobject_sources(#10625, 1) +py_cobject_sources(#10626, 1) +py_cobject_sources(#10627, 1) +py_cobject_sources(#10628, 1) +py_cobject_sources(#10629, 1) +py_cobject_sources(#10630, 1) +py_cobject_sources(#10631, 1) +py_cobject_sources(#11432, 1) +py_cobject_sources(#10632, 1) +py_cobject_sources(#10633, 1) +py_cobject_sources(#11433, 1) +py_cobject_sources(#10634, 1) +py_cobject_sources(#11434, 1) +py_cobject_sources(#10635, 1) +py_cobject_sources(#10636, 1) +py_cobject_sources(#12096, 1) +py_cobject_sources(#10637, 1) +py_cobject_sources(#10638, 1) +py_cobject_sources(#10639, 1) +py_cobject_sources(#10640, 1) +py_cobject_sources(#10641, 1) +py_cobject_sources(#10642, 1) +py_cobject_sources(#10643, 1) +py_cobject_sources(#10644, 1) +py_cobject_sources(#12097, 1) +py_cobject_sources(#12098, 1) +py_cobject_sources(#11435, 1) +py_cobject_sources(#10645, 1) +py_cobject_sources(#10646, 1) +py_cobject_sources(#12099, 1) +py_cobject_sources(#10647, 1) +py_cobject_sources(#10648, 1) +py_cobject_sources(#10649, 1) +py_cobject_sources(#11436, 1) +py_cobject_sources(#10650, 1) +py_cobject_sources(#10651, 1) +py_cobject_sources(#11437, 1) +py_cobject_sources(#10652, 1) +py_cobject_sources(#10653, 1) +py_cobject_sources(#10654, 1) +py_cobject_sources(#10657, 1) +py_cobject_sources(#10658, 1) +py_cobject_sources(#10659, 1) +py_cobject_sources(#12100, 1) +py_cobject_sources(#12101, 1) +py_cobject_sources(#12102, 1) +py_cobject_sources(#11438, 1) +py_cobject_sources(#10660, 1) +py_cobject_sources(#10661, 1) +py_cobject_sources(#12103, 1) +py_cobject_sources(#10662, 1) +py_cobject_sources(#10663, 1) +py_cobject_sources(#10664, 1) +py_cobject_sources(#12104, 1) +py_cobject_sources(#10665, 1) +py_cobject_sources(#10666, 1) +py_cobject_sources(#10667, 1) +py_cobject_sources(#10668, 1) +py_cobject_sources(#10669, 1) +py_cobject_sources(#10670, 1) +py_cobject_sources(#10671, 1) +py_cobject_sources(#10672, 1) +py_cobject_sources(#10673, 1) +py_cobject_sources(#10674, 1) +py_cobject_sources(#10675, 1) +py_cobject_sources(#10676, 1) +py_cobject_sources(#10677, 1) +py_cobject_sources(#10678, 1) +py_cobject_sources(#10679, 1) +py_cobject_sources(#10680, 1) +py_cobject_sources(#10681, 1) +py_cobject_sources(#11440, 1) +py_cobject_sources(#10682, 1) +py_cobject_sources(#10683, 1) +py_cobject_sources(#10684, 1) +py_cobject_sources(#10685, 1) +py_cobject_sources(#10686, 1) +py_cobject_sources(#11442, 1) +py_cobject_sources(#10687, 1) +py_cobject_sources(#10688, 1) +py_cobject_sources(#10689, 1) +py_cobject_sources(#10690, 1) +py_cobject_sources(#10692, 1) +py_cobject_sources(#10693, 1) +py_cobject_sources(#10694, 1) +py_cobject_sources(#10695, 1) +py_cobject_sources(#10696, 1) +py_cobject_sources(#10697, 1) +py_cobject_sources(#10698, 1) +py_cobject_sources(#10699, 1) +py_cobject_sources(#10700, 1) +py_cobject_sources(#10701, 1) +py_cobject_sources(#10702, 1) +py_cobject_sources(#10703, 1) +py_cobject_sources(#10704, 1) +py_cobject_sources(#10705, 1) +py_cobject_sources(#10706, 1) +py_cobject_sources(#10707, 1) +py_cobject_sources(#10708, 1) +py_cobject_sources(#10709, 1) +py_cobject_sources(#10710, 1) +py_cobject_sources(#10711, 1) +py_cobject_sources(#10712, 1) +py_cobject_sources(#10713, 1) +py_cobject_sources(#10714, 1) +py_cobject_sources(#10715, 1) +py_cobject_sources(#10716, 1) +py_cobject_sources(#10717, 1) +py_cobject_sources(#10718, 1) +py_cobject_sources(#10719, 1) +py_cobject_sources(#11445, 1) +py_cobject_sources(#11446, 1) +py_cobject_sources(#11447, 1) +py_cobject_sources(#10720, 1) +py_cobject_sources(#10721, 1) +py_cobject_sources(#10722, 1) +py_cobject_sources(#10723, 1) +py_cobject_sources(#10724, 1) +py_cobject_sources(#10725, 1) +py_cobject_sources(#10726, 1) +py_cobject_sources(#10727, 1) +py_cobject_sources(#10728, 1) +py_cobject_sources(#11450, 1) +py_cobject_sources(#11451, 1) +py_cobject_sources(#11452, 1) +py_cobject_sources(#11453, 1) +py_cobject_sources(#10729, 1) +py_cobject_sources(#10730, 1) +py_cobject_sources(#10731, 1) +py_cobject_sources(#10732, 1) +py_cobject_sources(#10733, 1) +py_cobject_sources(#10734, 1) +py_cobject_sources(#10735, 1) +py_cobject_sources(#10736, 1) +py_cobject_sources(#10737, 1) +py_cobject_sources(#10738, 1) +py_cobject_sources(#10739, 1) +py_cobject_sources(#10740, 1) +py_cobject_sources(#10741, 1) +py_cobject_sources(#11455, 1) +py_cobject_sources(#10742, 1) +py_cobject_sources(#10743, 1) +py_cobject_sources(#10744, 1) +py_cobject_sources(#10745, 1) +py_cobject_sources(#10746, 1) +py_cobject_sources(#10747, 1) +py_cobject_sources(#10748, 1) +py_cobject_sources(#10749, 1) +py_cobject_sources(#10750, 1) +py_cobject_sources(#10751, 1) +py_cobject_sources(#10752, 1) +py_cobject_sources(#10753, 1) +py_cobject_sources(#10754, 1) +py_cobject_sources(#11461, 1) +py_cobject_sources(#10755, 1) +py_cobject_sources(#10756, 1) +py_cobject_sources(#10757, 1) +py_cobject_sources(#11462, 1) +py_cobject_sources(#11463, 1) +py_cobject_sources(#10758, 1) +py_cobject_sources(#10759, 1) +py_cobject_sources(#10760, 1) +py_cobject_sources(#10762, 1) +py_cobject_sources(#10763, 1) +py_cobject_sources(#10764, 1) +py_cobject_sources(#11464, 1) +py_cobject_sources(#11466, 1) +py_cobject_sources(#11467, 1) +py_cobject_sources(#10765, 1) +py_cobject_sources(#10766, 1) +py_cobject_sources(#11468, 1) +py_cobject_sources(#11469, 1) +py_cobject_sources(#10767, 1) +py_cobject_sources(#10768, 1) +py_cobject_sources(#10769, 1) +py_cobject_sources(#10770, 1) +py_cobject_sources(#10771, 1) +py_cobject_sources(#10772, 1) +py_cobject_sources(#10773, 1) +py_cobject_sources(#10774, 1) +py_cobject_sources(#10775, 1) +py_cobject_sources(#10776, 1) +py_cobject_sources(#10777, 1) +py_cobject_sources(#10778, 1) +py_cobject_sources(#10779, 1) +py_cobject_sources(#10780, 1) +py_cobject_sources(#10781, 1) +py_cobject_sources(#11470, 1) +py_cobject_sources(#10782, 1) +py_cobject_sources(#10783, 1) +py_cobject_sources(#10784, 1) +py_cobject_sources(#10785, 1) +py_cobject_sources(#10786, 1) +py_cobject_sources(#10787, 1) +py_cobject_sources(#10788, 1) +py_cobject_sources(#10789, 1) +py_cobject_sources(#10790, 1) +py_cobject_sources(#10791, 1) +py_cobject_sources(#10792, 1) +py_cobject_sources(#10793, 1) +py_cobject_sources(#11471, 1) +py_cobject_sources(#10795, 1) +py_cobject_sources(#10796, 1) +py_cobject_sources(#11475, 1) +py_cobject_sources(#10797, 1) +py_cobject_sources(#10798, 1) +py_cobject_sources(#10799, 1) +py_cobject_sources(#10800, 1) +py_cobject_sources(#11477, 1) +py_cobject_sources(#10801, 1) +py_cobject_sources(#11478, 1) +py_cobject_sources(#10802, 1) +py_cobject_sources(#10803, 1) +py_cobject_sources(#10804, 1) +py_cobject_sources(#10805, 1) +py_cobject_sources(#10806, 1) +py_cobject_sources(#10807, 1) +py_cobject_sources(#10808, 1) +py_cobject_sources(#11479, 1) +py_cobject_sources(#10809, 1) +py_cobject_sources(#10810, 1) +py_cobject_sources(#10811, 1) +py_cobject_sources(#10812, 1) +py_cobject_sources(#10813, 1) +py_cobject_sources(#10814, 1) +py_cobject_sources(#10815, 1) +py_cobject_sources(#10816, 1) +py_cobject_sources(#10817, 1) +py_cobject_sources(#10818, 1) +py_cobject_sources(#10819, 1) +py_cobject_sources(#10820, 1) +py_cobject_sources(#10821, 1) +py_cobject_sources(#10822, 1) +py_cobject_sources(#10823, 1) +py_cobject_sources(#10824, 1) +py_cobject_sources(#10825, 1) +py_cobject_sources(#10826, 1) +py_cobject_sources(#10827, 1) +py_cobject_sources(#10828, 1) +py_cobject_sources(#10829, 1) +py_cobject_sources(#10830, 1) +py_cobject_sources(#10831, 1) +py_cobject_sources(#10832, 1) +py_cobject_sources(#10833, 1) +py_cobject_sources(#10834, 1) +py_cobject_sources(#10835, 1) +py_cobject_sources(#11481, 1) +py_cobject_sources(#11482, 1) +py_cobject_sources(#10836, 1) +py_cobject_sources(#10837, 1) +py_cobject_sources(#10838, 1) +py_cobject_sources(#10839, 1) +py_cobject_sources(#10840, 1) +py_cobject_sources(#10841, 1) +py_cobject_sources(#10842, 1) +py_cobject_sources(#10843, 1) +py_cobject_sources(#10844, 1) +py_cobject_sources(#10845, 1) +py_cobject_sources(#10846, 1) +py_cobject_sources(#10847, 1) +py_cobject_sources(#10848, 1) +py_cobject_sources(#10849, 1) +py_cobject_sources(#10850, 1) +py_cobject_sources(#10851, 1) +py_cobject_sources(#10852, 1) +py_cobject_sources(#10853, 1) +py_cobject_sources(#10854, 1) +py_cobject_sources(#10855, 1) +py_cobject_sources(#10856, 1) +py_cobject_sources(#10857, 1) +py_cobject_sources(#10858, 1) +py_cobject_sources(#10859, 1) +py_cobject_sources(#10860, 1) +py_cobject_sources(#10861, 1) +py_cobject_sources(#10862, 1) +py_cobject_sources(#10863, 1) +py_cobject_sources(#10864, 1) +py_cobject_sources(#10865, 1) +py_cobject_sources(#10866, 1) +py_cobject_sources(#10867, 1) +py_cobject_sources(#10868, 1) +py_cobject_sources(#10869, 1) +py_cobject_sources(#10870, 1) +py_cobject_sources(#10871, 1) +py_cobject_sources(#11484, 1) +py_cobject_sources(#11485, 1) +py_cobject_sources(#10872, 1) +py_cobject_sources(#11487, 1) +py_cobject_sources(#10873, 1) +py_cobject_sources(#10874, 1) +py_cobject_sources(#10875, 1) +py_cobject_sources(#10876, 1) +py_cobject_sources(#10877, 1) +py_cobject_sources(#10878, 1) +py_cobject_sources(#10879, 1) +py_cobject_sources(#10880, 1) +py_cobject_sources(#10881, 1) +py_cobject_sources(#10882, 1) +py_cobject_sources(#10883, 1) +py_cobject_sources(#10884, 1) +py_cobject_sources(#10885, 1) +py_cobject_sources(#10886, 1) +py_cobject_sources(#10887, 1) +py_cobject_sources(#10888, 1) +py_cobject_sources(#11488, 1) +py_cobject_sources(#10889, 1) +py_cobject_sources(#10890, 1) +py_cobject_sources(#10891, 1) +py_cobject_sources(#10892, 1) +py_cobject_sources(#10893, 1) +py_cobject_sources(#10894, 1) +py_cobject_sources(#10895, 1) +py_cobject_sources(#10896, 1) +py_cobject_sources(#10897, 1) +py_cobject_sources(#10898, 1) +py_cobject_sources(#11491, 1) +py_cobject_sources(#10899, 1) +py_cobject_sources(#11493, 1) +py_cobject_sources(#11494, 1) +py_cobject_sources(#11496, 1) +py_cobject_sources(#11497, 1) +py_cobject_sources(#10900, 1) +py_cobject_sources(#10901, 1) +py_cobject_sources(#10902, 1) +py_cobject_sources(#10903, 1) +py_cobject_sources(#10904, 1) +py_cobject_sources(#10905, 1) +py_cobject_sources(#10906, 1) +py_cobject_sources(#10907, 1) +py_cobject_sources(#10908, 1) +py_cobject_sources(#10909, 1) +py_cobject_sources(#10910, 1) +py_cobject_sources(#10911, 1) +py_cobject_sources(#10912, 1) +py_cobject_sources(#10913, 1) +py_cobject_sources(#11499, 1) +py_cobject_sources(#10914, 1) +py_cobject_sources(#10915, 1) +py_cobject_sources(#11501, 1) +py_cobject_sources(#10916, 1) +py_cobject_sources(#10917, 1) +py_cobject_sources(#10918, 1) +py_cobject_sources(#10919, 1) +py_cobject_sources(#10920, 1) +py_cobject_sources(#11502, 1) +py_cobject_sources(#10921, 1) +py_cobject_sources(#10922, 1) +py_cobject_sources(#11504, 1) +py_cobject_sources(#11505, 1) +py_cobject_sources(#10923, 1) +py_cobject_sources(#10924, 1) +py_cobject_sources(#10925, 1) +py_cobject_sources(#10926, 1) +py_cobject_sources(#11507, 1) +py_cobject_sources(#10927, 1) +py_cobject_sources(#10928, 1) +py_cobject_sources(#10929, 1) +py_cobject_sources(#10930, 1) +py_cobject_sources(#10931, 1) +py_cobject_sources(#10932, 1) +py_cobject_sources(#10933, 1) +py_cobject_sources(#10934, 1) +py_cobject_sources(#10935, 1) +py_cobject_sources(#10936, 1) +py_cobject_sources(#10937, 1) +py_cobject_sources(#10938, 1) +py_cobject_sources(#10939, 1) +py_cobject_sources(#10940, 1) +py_cobject_sources(#10941, 1) +py_cobject_sources(#10942, 1) +py_cobject_sources(#10943, 1) +py_cobject_sources(#10944, 1) +py_cobject_sources(#10945, 1) +py_cobject_sources(#10946, 1) +py_cobject_sources(#10947, 1) +py_cobject_sources(#10948, 1) +py_cobject_sources(#10949, 1) +py_cobject_sources(#10950, 1) +py_cobject_sources(#10951, 1) +py_cobject_sources(#10952, 1) +py_cobject_sources(#11510, 1) +py_cobject_sources(#11512, 1) +py_cobject_sources(#11513, 1) +py_cobject_sources(#10953, 1) +py_cobject_sources(#11514, 1) +py_cobject_sources(#11515, 1) +py_cobject_sources(#11517, 1) +py_cobject_sources(#10954, 1) +py_cobject_sources(#11518, 1) +py_cobject_sources(#11519, 1) +py_cobject_sources(#11520, 1) +py_cobject_sources(#11521, 1) +py_cobject_sources(#11522, 1) +py_cobject_sources(#10955, 1) +py_cobject_sources(#10956, 1) +py_cobject_sources(#10957, 1) +py_cobject_sources(#10958, 1) +py_cobject_sources(#10959, 1) +py_cobject_sources(#10960, 1) +py_cobject_sources(#10961, 1) +py_cobject_sources(#10962, 1) +py_cobject_sources(#10963, 1) +py_cobject_sources(#11524, 1) +py_cobject_sources(#11525, 1) +py_cobject_sources(#11526, 1) +py_cobject_sources(#11527, 1) +py_cobject_sources(#11528, 1) +py_cobject_sources(#11529, 1) +py_cobject_sources(#10964, 1) +py_cobject_sources(#10965, 1) +py_cobject_sources(#10966, 1) +py_cobject_sources(#10967, 1) +py_cobject_sources(#10968, 1) +py_cobject_sources(#10969, 1) +py_cobject_sources(#10970, 1) +py_cobject_sources(#10971, 1) +py_cobject_sources(#10972, 1) +py_cobject_sources(#10973, 1) +py_cobject_sources(#10974, 1) +py_cobject_sources(#10975, 1) +py_cobject_sources(#11531, 1) +py_cobject_sources(#11532, 1) +py_cobject_sources(#11533, 1) +py_cobject_sources(#11534, 1) +py_cobject_sources(#11535, 1) +py_cobject_sources(#11536, 1) +py_cobject_sources(#10976, 1) +py_cobject_sources(#10977, 1) +py_cobject_sources(#10978, 1) +py_cobject_sources(#10979, 1) +py_cobject_sources(#10980, 1) +py_cobject_sources(#10981, 1) +py_cobject_sources(#11537, 1) +py_cobject_sources(#11539, 1) +py_cobject_sources(#11540, 1) +py_cobject_sources(#11541, 1) +py_cobject_sources(#11542, 1) +py_cobject_sources(#11543, 1) +py_cobject_sources(#11544, 1) +py_cobject_sources(#11545, 1) +py_cobject_sources(#11546, 1) +py_cobject_sources(#11547, 1) +py_cobject_sources(#11548, 1) +py_cobject_sources(#11550, 1) +py_cobject_sources(#11551, 1) +py_cobject_sources(#10982, 1) +py_cobject_sources(#10983, 1) +py_cobject_sources(#10984, 1) +py_cobject_sources(#10985, 1) +py_cobject_sources(#10986, 1) +py_cobject_sources(#10987, 1) +py_cobject_sources(#11552, 1) +py_cobject_sources(#11553, 1) +py_cobject_sources(#11554, 1) +py_cobject_sources(#11555, 1) +py_cobject_sources(#10988, 1) +py_cobject_sources(#11556, 1) +py_cobject_sources(#11557, 1) +py_cobject_sources(#10989, 1) +py_cobject_sources(#10990, 1) +py_cobject_sources(#10991, 1) +py_cobject_sources(#10992, 1) +py_cobject_sources(#10993, 1) +py_cobject_sources(#10994, 1) +py_cobject_sources(#10995, 1) +py_cobject_sources(#10996, 1) +py_cobject_sources(#10997, 1) +py_cobject_sources(#10998, 1) +py_cobject_sources(#10999, 1) +py_cobject_sources(#11000, 1) +py_cobject_sources(#11001, 1) +py_cobject_sources(#11002, 1) +py_cobject_sources(#11003, 1) +py_cobject_sources(#11004, 1) +py_cobject_sources(#11005, 1) +py_cobject_sources(#11006, 1) +py_cobject_sources(#11007, 1) +py_cobject_sources(#11008, 1) +py_cobject_sources(#11009, 1) +py_cobject_sources(#11010, 1) +py_cobject_sources(#11011, 1) +py_cobject_sources(#11012, 1) +py_cobject_sources(#11561, 1) +py_cobject_sources(#11013, 1) +py_cobject_sources(#11014, 1) +py_cobject_sources(#11015, 1) +py_cobject_sources(#11016, 1) +py_cobject_sources(#11017, 1) +py_cobject_sources(#11018, 1) +py_cobject_sources(#11562, 1) +py_cobject_sources(#11564, 1) +py_cobject_sources(#11565, 1) +py_cobject_sources(#11566, 1) +py_cobject_sources(#11567, 1) +py_cobject_sources(#11019, 1) +py_cobject_sources(#11020, 1) +py_cobject_sources(#11021, 1) +py_cobject_sources(#11569, 1) +py_cobject_sources(#11022, 1) +py_cobject_sources(#11023, 1) +py_cobject_sources(#11571, 1) +py_cobject_sources(#11572, 1) +py_cobject_sources(#11024, 1) +py_cobject_sources(#11573, 1) +py_cobject_sources(#11574, 1) +py_cobject_sources(#11575, 1) +py_cobject_sources(#11576, 1) +py_cobject_sources(#11577, 1) +py_cobject_sources(#11578, 1) +py_cobject_sources(#11025, 1) +py_cobject_sources(#11579, 1) +py_cobject_sources(#11026, 1) +py_cobject_sources(#11027, 1) +py_cobject_sources(#11028, 1) +py_cobject_sources(#11029, 1) +py_cobject_sources(#11030, 1) +py_cobject_sources(#11031, 1) +py_cobject_sources(#11032, 1) +py_cobject_sources(#11033, 1) +py_cobject_sources(#11034, 1) +py_cobject_sources(#11035, 1) +py_cobject_sources(#11581, 1) +py_cobject_sources(#11036, 1) +py_cobject_sources(#11037, 1) +py_cobject_sources(#11038, 1) +py_cobject_sources(#11039, 1) +py_cobject_sources(#11040, 1) +py_cobject_sources(#11041, 1) +py_cobject_sources(#11042, 1) +py_cobject_sources(#11043, 1) +py_cobject_sources(#11044, 1) +py_cobject_sources(#11045, 1) +py_cobject_sources(#11046, 1) +py_cobject_sources(#11047, 1) +py_cobject_sources(#11048, 1) +py_cobject_sources(#11049, 1) +py_cobject_sources(#11050, 1) +py_cobject_sources(#11051, 1) +py_cobject_sources(#11052, 1) +py_cobject_sources(#11053, 1) +py_cobject_sources(#11054, 1) +py_cobject_sources(#11055, 1) +py_cobject_sources(#11056, 1) +py_cobject_sources(#11057, 1) +py_cobject_sources(#11058, 1) +py_cobject_sources(#11059, 1) +py_cobject_sources(#11060, 1) +py_cobject_sources(#11061, 1) +py_cobject_sources(#11062, 1) +py_cobject_sources(#11582, 1) +py_cobject_sources(#11587, 1) +py_cobject_sources(#11588, 1) +py_cobject_sources(#11589, 1) +py_cobject_sources(#11590, 1) +py_cobject_sources(#11591, 1) +py_cobject_sources(#11592, 1) +py_cobject_sources(#11593, 1) +py_cobject_sources(#11594, 1) +py_cobject_sources(#11595, 1) +py_cobject_sources(#11596, 1) +py_cobject_sources(#11597, 1) +py_cobject_sources(#11598, 1) +py_cobject_sources(#11599, 1) +py_cobject_sources(#11600, 1) +py_cobject_sources(#11601, 1) +py_cobject_sources(#11602, 1) +py_cobject_sources(#11603, 1) +py_cobject_sources(#11604, 1) +py_cobject_sources(#11605, 1) +py_cobject_sources(#11606, 1) +py_cobject_sources(#11608, 1) +py_cobject_sources(#11063, 1) +py_cobject_sources(#11064, 1) +py_cobject_sources(#11610, 1) +py_cobject_sources(#11612, 1) +py_cobject_sources(#11613, 1) +py_cobject_sources(#11614, 1) +py_cobject_sources(#11065, 1) +py_cobject_sources(#11066, 1) +py_cobject_sources(#11067, 1) +py_cobject_sources(#11616, 1) +py_cobject_sources(#11617, 1) +py_cobject_sources(#11618, 1) +py_cobject_sources(#11619, 1) +py_cobject_sources(#11620, 1) +py_cobject_sources(#11068, 1) +py_cobject_sources(#11069, 1) +py_cobject_sources(#11070, 1) +py_cobject_sources(#11071, 1) +py_cobject_sources(#11622, 1) +py_cobject_sources(#11072, 1) +py_cobject_sources(#11073, 1) +py_cobject_sources(#11074, 1) +py_cobject_sources(#11075, 1) +py_cobject_sources(#11076, 1) +py_cobject_sources(#11077, 1) +py_cobject_sources(#11078, 1) +py_cobject_sources(#11079, 1) +py_cobject_sources(#11623, 1) +py_cobject_sources(#11624, 1) +py_cobject_sources(#11625, 1) +py_cobject_sources(#11626, 1) +py_cobject_sources(#11080, 1) +py_cobject_sources(#11081, 1) +py_cobject_sources(#11082, 1) +py_cobject_sources(#11083, 1) +py_cobject_sources(#11084, 1) +py_cobject_sources(#11085, 1) +py_cobject_sources(#11086, 1) +py_cobject_sources(#11087, 1) +py_cobject_sources(#11088, 1) +py_cobject_sources(#11627, 1) +py_cobject_sources(#11089, 1) +py_cobject_sources(#11090, 1) +py_cobject_sources(#11091, 1) +py_cobject_sources(#11092, 1) +py_cobject_sources(#11093, 1) +py_cobject_sources(#11094, 1) +py_cobject_sources(#11628, 1) +py_cobject_sources(#11095, 1) +py_cobject_sources(#11630, 1) +py_cobject_sources(#11632, 1) +py_cobject_sources(#11096, 1) +py_cobject_sources(#11097, 1) +py_cobject_sources(#11098, 1) +py_cobject_sources(#11099, 1) +py_cobject_sources(#11633, 1) +py_cobject_sources(#11100, 1) +py_cobject_sources(#11634, 1) +py_cobject_sources(#11636, 1) +py_cobject_sources(#11637, 1) +py_cobject_sources(#11638, 1) +py_cobject_sources(#11101, 1) +py_cobject_sources(#11639, 1) +py_cobject_sources(#11641, 1) +py_cobject_sources(#11642, 1) +py_cobject_sources(#11643, 1) +py_cobject_sources(#11644, 1) +py_cobject_sources(#11645, 1) +py_cobject_sources(#11646, 1) +py_cobject_sources(#11647, 1) +py_cobject_sources(#11648, 1) +py_cobject_sources(#11102, 1) +py_cobject_sources(#11649, 1) +py_cobject_sources(#11650, 1) +py_cobject_sources(#11651, 1) +py_cobject_sources(#11103, 1) +py_cobject_sources(#11104, 1) +py_cobject_sources(#11105, 1) +py_cobject_sources(#11652, 1) +py_cobject_sources(#11653, 1) +py_cobject_sources(#11106, 1) +py_cobject_sources(#11654, 1) +py_cobject_sources(#11656, 1) +py_cobject_sources(#11657, 1) +py_cobject_sources(#11107, 1) +py_cobject_sources(#11658, 1) +py_cobject_sources(#11108, 1) +py_cobject_sources(#11659, 1) +py_cobject_sources(#11109, 1) +py_cobject_sources(#11110, 1) +py_cobject_sources(#11111, 1) +py_cobject_sources(#11112, 1) +py_cobject_sources(#11113, 1) +py_cobject_sources(#11660, 1) +py_cobject_sources(#11114, 1) +py_cobject_sources(#11115, 1) +py_cobject_sources(#11116, 1) +py_cobject_sources(#11117, 1) +py_cobject_sources(#11118, 1) +py_cobject_sources(#11120, 1) +py_cobject_sources(#11121, 1) +py_cobject_sources(#11122, 1) +py_cobject_sources(#11123, 1) +py_cobject_sources(#11124, 1) +py_cobject_sources(#11125, 1) +py_cobject_sources(#11126, 1) +py_cobject_sources(#11127, 1) +py_cobject_sources(#11128, 1) +py_cobject_sources(#11129, 1) +py_cobject_sources(#11130, 1) +py_cobject_sources(#11131, 1) +py_cobject_sources(#11132, 1) +py_cobject_sources(#11133, 1) +py_cobject_sources(#11134, 1) +py_cobject_sources(#11135, 1) +py_cobject_sources(#11136, 1) +py_cobject_sources(#11137, 1) +py_cobject_sources(#11138, 1) +py_cobject_sources(#11139, 1) +py_cobject_sources(#11140, 1) +py_cobject_sources(#11141, 1) +py_cobject_sources(#11142, 1) +py_cobject_sources(#11143, 1) +py_cobject_sources(#11144, 1) +py_cobject_sources(#11145, 1) +py_cobject_sources(#11146, 1) +py_cobject_sources(#11147, 1) +py_cobject_sources(#11148, 1) +py_cobject_sources(#11149, 1) +py_cobject_sources(#11150, 1) +py_cobject_sources(#11151, 1) +py_cobject_sources(#11152, 1) +py_cobject_sources(#11153, 1) +py_cobject_sources(#11154, 1) +py_cobject_sources(#11665, 1) +py_cobject_sources(#11155, 1) +py_cobject_sources(#11156, 1) +py_cobject_sources(#11157, 1) +py_cobject_sources(#11666, 1) +py_cobject_sources(#11667, 1) +py_cobject_sources(#11159, 1) +py_cobject_sources(#11160, 1) +py_cobject_sources(#11161, 1) +py_cobject_sources(#11162, 1) +py_cobject_sources(#11163, 1) +py_cobject_sources(#11164, 1) +py_cobject_sources(#11165, 1) +py_cobject_sources(#11166, 1) +py_cobject_sources(#11167, 1) +py_cobject_sources(#11168, 1) +py_cobject_sources(#11670, 1) +py_cobject_sources(#11169, 1) +py_cobject_sources(#11170, 1) +py_cobject_sources(#11171, 1) +py_cobject_sources(#11172, 1) +py_cobject_sources(#11173, 1) +py_cobject_sources(#11174, 1) +py_cobject_sources(#11175, 1) +py_cobject_sources(#11176, 1) +py_cobject_sources(#11177, 1) +py_cobject_sources(#11178, 1) +py_cobject_sources(#11179, 1) +py_cobject_sources(#11180, 1) +py_cobject_sources(#11181, 1) +py_cobject_sources(#11182, 1) +py_cobject_sources(#11183, 1) +py_cobject_sources(#11184, 1) +py_cobject_sources(#11185, 1) +py_cobject_sources(#11186, 1) +py_cobject_sources(#11187, 1) +py_cobject_sources(#11188, 1) +py_cobject_sources(#11189, 1) +py_cobject_sources(#11190, 1) +py_cobject_sources(#11191, 1) +py_cobject_sources(#11193, 1) +py_cobject_sources(#11194, 1) +py_cobject_sources(#11195, 1) +py_cobject_sources(#11196, 1) +py_cobject_sources(#11672, 1) +py_cobject_sources(#11197, 1) +py_cobject_sources(#11198, 1) +py_cobject_sources(#11199, 1) +py_cobject_sources(#11200, 1) +py_cobject_sources(#11201, 1) +py_cobject_sources(#11202, 1) +py_cobject_sources(#11203, 1) +py_cobject_sources(#11204, 1) +py_cobject_sources(#11205, 1) +py_cobject_sources(#11206, 1) +py_cobject_sources(#11207, 1) +py_cobject_sources(#11677, 1) +py_cobject_sources(#11208, 1) +py_cobject_sources(#11209, 1) +py_cobject_sources(#11678, 1) +py_cobject_sources(#11679, 1) +py_cobject_sources(#11680, 1) +py_cobject_sources(#11210, 1) +py_cobject_sources(#11211, 1) +py_cobject_sources(#11212, 1) +py_cobject_sources(#11213, 1) +py_cobject_sources(#11681, 1) +py_cobject_sources(#11682, 1) +py_cobject_sources(#11683, 1) +py_cobject_sources(#11214, 1) +py_cobject_sources(#11684, 1) +py_cobject_sources(#11215, 1) +py_cobject_sources(#11216, 1) +py_cobject_sources(#11685, 1) +py_cobject_sources(#11686, 1) +py_cobject_sources(#11687, 1) +py_cobject_sources(#11217, 1) +py_cobject_sources(#11218, 1) +py_cobject_sources(#11219, 1) +py_cobject_sources(#11220, 1) +py_cobject_sources(#11221, 1) +py_cobject_sources(#11222, 1) +py_cobject_sources(#11689, 1) +py_cobject_sources(#11691, 1) +py_cobject_sources(#11223, 1) +py_cobject_sources(#11692, 1) +py_cobject_sources(#11224, 1) +py_cobject_sources(#11225, 1) +py_cobject_sources(#11226, 1) +py_cobject_sources(#11227, 1) +py_cobject_sources(#11228, 1) +py_cobject_sources(#11229, 1) +py_cobject_sources(#11230, 1) +py_cobject_sources(#11231, 1) +py_cobject_sources(#11232, 1) +py_cobject_sources(#11694, 1) +py_cobject_sources(#11233, 1) +py_cobject_sources(#11234, 1) +py_cobject_sources(#11235, 1) +py_cobject_sources(#11236, 1) +py_cobject_sources(#11237, 1) +py_cobject_sources(#11240, 1) +py_cobject_sources(#11241, 1) +py_cobject_sources(#11242, 1) +py_cobject_sources(#11243, 1) +py_cobject_sources(#11244, 1) +py_cobject_sources(#11245, 1) +py_cobject_sources(#11246, 1) +py_cobject_sources(#11247, 1) +py_cobject_sources(#11248, 1) +py_cobject_sources(#11249, 1) +py_cobject_sources(#11250, 1) +py_cobject_sources(#11251, 1) +py_cobject_sources(#11252, 1) +py_cobject_sources(#11253, 1) +py_cobject_sources(#11254, 1) +py_cobject_sources(#11255, 1) +py_cobject_sources(#11256, 1) +py_cobject_sources(#11257, 1) +py_cobject_sources(#11258, 1) +py_cobject_sources(#11259, 1) +py_cobject_sources(#11260, 1) +py_cobject_sources(#11696, 1) +py_cobject_sources(#11261, 1) +py_cobject_sources(#11262, 1) +py_cobject_sources(#11263, 1) +py_cobject_sources(#11264, 1) +py_cobject_sources(#11265, 1) +py_cobject_sources(#11266, 1) +py_cobject_sources(#11267, 1) +py_cobject_sources(#11268, 1) +py_cobject_sources(#11269, 1) +py_cobject_sources(#11270, 1) +py_cobject_sources(#11271, 1) +py_cobject_sources(#11697, 1) +py_cobject_sources(#11272, 1) +py_cobject_sources(#11273, 1) +py_cobject_sources(#11274, 1) +py_cobject_sources(#11275, 1) +py_cobject_sources(#11276, 1) +py_cobject_sources(#11277, 1) +py_cobject_sources(#11278, 1) +py_cobject_sources(#11699, 1) +py_cobject_sources(#11700, 1) +py_cobject_sources(#11701, 1) +py_cobject_sources(#11702, 1) +py_cobject_sources(#11703, 1) +py_cobject_sources(#11704, 1) +py_cobject_sources(#11705, 1) +py_cobject_sources(#11706, 1) +py_cobject_sources(#11707, 1) +py_cobject_sources(#11709, 1) +py_cobject_sources(#11710, 1) +py_cobject_sources(#11279, 1) +py_cobject_sources(#11280, 1) +py_cobject_sources(#11281, 1) +py_cobject_sources(#11282, 1) +py_cobject_sources(#11283, 1) +py_cobject_sources(#11284, 1) +py_cobject_sources(#11286, 1) +py_cobject_sources(#11287, 1) +py_cobject_sources(#11712, 1) +py_cobject_sources(#11288, 1) +py_cobject_sources(#11289, 1) +py_cobject_sources(#11290, 1) +py_cobject_sources(#11291, 1) +py_cobject_sources(#11292, 1) +py_cobject_sources(#11293, 1) +py_cobject_sources(#11294, 1) +py_cobject_sources(#11295, 1) +py_cobject_sources(#11296, 1) +py_cobject_sources(#11297, 1) +py_cobject_sources(#11298, 1) +py_cobject_sources(#11299, 1) +py_cobject_sources(#11300, 1) +py_cobject_sources(#11301, 1) +py_cobject_sources(#11302, 1) +py_cobject_sources(#11303, 1) +py_cobject_sources(#11304, 1) +py_cobject_sources(#11305, 1) +py_cobject_sources(#11306, 1) +py_cobject_sources(#11307, 1) +py_cobject_sources(#11308, 1) +py_cobject_sources(#11309, 1) +py_cobject_sources(#11310, 1) +py_cobject_sources(#11311, 1) +py_cobject_sources(#11312, 1) +py_cobject_sources(#11313, 1) +py_cobject_sources(#11314, 1) +py_cobject_sources(#11315, 1) +py_cobject_sources(#11316, 1) +py_cobject_sources(#11317, 1) +py_cobject_sources(#11318, 1) +py_cobject_sources(#11319, 1) +py_cobject_sources(#11320, 1) +py_cobject_sources(#11321, 1) +py_cobject_sources(#11322, 1) +py_cobject_sources(#11323, 1) +py_cobject_sources(#11324, 1) +py_cobject_sources(#11325, 1) +py_cobject_sources(#11713, 1) +py_cobject_sources(#11326, 1) +py_cobject_sources(#11327, 1) +py_cobject_sources(#11328, 1) +py_cobject_sources(#11329, 1) +py_cobject_sources(#11330, 1) +py_cobject_sources(#11331, 1) +py_cobject_sources(#11332, 1) +py_cobject_sources(#11333, 1) +py_cobject_sources(#11334, 1) +py_cobject_sources(#11335, 1) +py_cobject_sources(#11336, 1) +py_cobject_sources(#11337, 1) +py_cobject_sources(#11338, 1) +py_cobject_sources(#11339, 1) +py_cobject_sources(#11340, 1) +py_cobject_sources(#11714, 1) +py_cobject_sources(#11341, 1) +py_cobject_sources(#11342, 1) +py_cobject_sources(#11343, 1) +py_cobject_sources(#11344, 1) +py_cobject_sources(#11345, 1) +py_cobject_sources(#11346, 1) +py_cobject_sources(#11347, 1) +py_cobject_sources(#11348, 1) +py_cobject_sources(#11715, 1) +py_cobject_sources(#11349, 1) +py_cobject_sources(#11350, 1) +py_cobject_sources(#11351, 1) +py_cobject_sources(#11352, 1) +py_cobject_sources(#11353, 1) +py_cobject_sources(#11354, 1) +py_cobject_sources(#11355, 1) +py_cobject_sources(#11356, 1) +py_cobject_sources(#11357, 1) +py_cobject_sources(#11358, 1) +py_cobject_sources(#11359, 1) +py_cobject_sources(#11360, 1) +py_cobject_sources(#11361, 1) +py_cobject_sources(#11716, 1) +py_cobject_sources(#11362, 1) +py_cobject_sources(#11363, 1) +py_cobject_sources(#11364, 1) +py_cobject_sources(#11365, 1) +py_cobject_sources(#11366, 1) +py_cobject_sources(#11367, 1) +py_cobject_sources(#11368, 1) +py_cobject_sources(#11369, 1) +py_cobject_sources(#11370, 1) +py_cobject_sources(#11371, 1) +py_cobject_sources(#11372, 1) +py_cobject_sources(#11373, 1) +py_cobject_sources(#11374, 1) + diff --git a/python/extractor/semmle/data/$stdlib_33.trap b/python/extractor/semmle/data/$stdlib_33.trap new file mode 100644 index 00000000000..1e49ba73101 --- /dev/null +++ b/python/extractor/semmle/data/$stdlib_33.trap @@ -0,0 +1,11130 @@ +#10000 = @"C_builtin_function_or_method$time.time" +#10001 = @"C_type$float" +ext_rettype(#10000, #10001) +#10002 = @"C_builtin_function_or_method$time.clock" +ext_rettype(#10002, #10001) +#10003 = @"C_builtin_function_or_method$time.clock_gettime" +ext_rettype(#10003, #10001) +#10004 = @"C_builtin_function_or_method$time.clock_settime" +#10005 = @"C_type$NoneType" +ext_rettype(#10004, #10005) +#10006 = @"C_builtin_function_or_method$time.clock_getres" +ext_rettype(#10006, #10001) +#10007 = @"C_builtin_function_or_method$time.sleep" +ext_rettype(#10007, #10005) +#10008 = @"C_builtin_function_or_method$time.mktime" +ext_rettype(#10008, #10001) +#10009 = @"C_builtin_function_or_method$time.strftime" +#10010 = @"C_type$unicode" +ext_rettype(#10009, #10010) +#10011 = @"C_builtin_function_or_method$time.tzset" +ext_rettype(#10011, #10005) +#10012 = @"C_builtin_function_or_method$time.monotonic" +ext_rettype(#10012, #10001) +#10013 = @"C_builtin_function_or_method$time.process_time" +ext_rettype(#10013, #10001) +#10014 = @"C_builtin_function_or_method$time.perf_counter" +ext_rettype(#10014, #10001) +#10015 = @"C_builtin_function_or_method$_csv.reader" +#10016 = @"C_type$_csv.reader" +ext_rettype(#10015, #10016) +#10017 = @"C_builtin_function_or_method$_csv.writer" +#10018 = @"C_type$_csv.writer" +ext_rettype(#10017, #10018) +#10019 = @"C_builtin_function_or_method$_csv.list_dialects" +#10020 = @"C_type$list" +ext_rettype(#10019, #10020) +#10021 = @"C_builtin_function_or_method$_csv.register_dialect" +ext_rettype(#10021, #10005) +#10022 = @"C_builtin_function_or_method$_csv.unregister_dialect" +ext_rettype(#10022, #10005) +#10023 = @"C_builtin_function_or_method$_csv.field_size_limit" +#10024 = @"C_type$int" +ext_rettype(#10023, #10024) +#10025 = @"C_builtin_function_or_method$xxsubtype.bench" +ext_rettype(#10025, #10001) +#10026 = @"C_builtin_function_or_method$_collections._count_elements" +ext_rettype(#10026, #10005) +#10027 = @"C_builtin_function_or_method$parser.compilest" +#10028 = @"C_type$code" +ext_rettype(#10027, #10028) +#10029 = @"C_builtin_function_or_method$parser.expr" +#10030 = @"C_type$parser.st" +ext_rettype(#10029, #10030) +#10031 = @"C_builtin_function_or_method$parser.suite" +ext_rettype(#10031, #10030) +#10032 = @"C_builtin_function_or_method$parser.sequence2st" +ext_rettype(#10032, #10030) +#10033 = @"C_builtin_function_or_method$parser.st2tuple" +ext_rettype(#10033, #10005) +#10034 = @"C_builtin_function_or_method$parser.st2list" +ext_rettype(#10034, #10005) +#10035 = @"C_builtin_function_or_method$parser.tuple2st" +ext_rettype(#10035, #10030) +#10036 = @"C_builtin_function_or_method$parser._pickler" +#10037 = @"C_type$tuple" +ext_rettype(#10036, #10037) +#10038 = @"C_builtin_function_or_method$decimal.getcontext" +#10039 = @"C_type$decimal.Context" +ext_rettype(#10038, #10039) +#10040 = @"C_builtin_function_or_method$decimal.setcontext" +ext_rettype(#10040, #10005) +#10041 = @"C_builtin_function_or_method$decimal.localcontext" +#10042 = @"C_type$decimal.ContextManager" +ext_rettype(#10041, #10042) +#10043 = @"C_builtin_function_or_method$_weakref.getweakrefcount" +ext_rettype(#10043, #10024) +#10044 = @"C_builtin_function_or_method$_weakref.getweakrefs" +ext_rettype(#10044, #10020) +#10045 = @"C_builtin_function_or_method$_weakref.proxy" +#10046 = @"C_type$weakref" +ext_rettype(#10045, #10046) +#10047 = @"C_builtin_function_or_method$gc.enable" +ext_rettype(#10047, #10005) +#10048 = @"C_builtin_function_or_method$gc.disable" +ext_rettype(#10048, #10005) +#10049 = @"C_builtin_function_or_method$gc.isenabled" +#10050 = @"C_type$bool" +ext_rettype(#10049, #10050) +#10051 = @"C_builtin_function_or_method$gc.set_debug" +ext_rettype(#10051, #10005) +#10052 = @"C_builtin_function_or_method$gc.get_debug" +ext_rettype(#10052, #10024) +#10053 = @"C_builtin_function_or_method$gc.get_count" +ext_rettype(#10053, #10037) +#10054 = @"C_builtin_function_or_method$gc.set_threshold" +ext_rettype(#10054, #10005) +#10055 = @"C_builtin_function_or_method$gc.get_threshold" +ext_rettype(#10055, #10037) +#10056 = @"C_builtin_function_or_method$gc.collect" +ext_rettype(#10056, #10024) +#10057 = @"C_builtin_function_or_method$gc.get_objects" +ext_rettype(#10057, #10020) +#10058 = @"C_builtin_function_or_method$gc.is_tracked" +ext_rettype(#10058, #10050) +#10059 = @"C_builtin_function_or_method$gc.get_referrers" +ext_rettype(#10059, #10020) +#10060 = @"C_builtin_function_or_method$gc.get_referents" +ext_rettype(#10060, #10020) +#10061 = @"C_builtin_function_or_method$_multibytecodec.__create_codec" +#10062 = @"C_type$MultibyteCodec" +ext_rettype(#10061, #10062) +#10063 = @"C_builtin_function_or_method$signal.alarm" +ext_rettype(#10063, #10024) +#10064 = @"C_builtin_function_or_method$signal.setitimer" +ext_rettype(#10064, #10037) +#10065 = @"C_builtin_function_or_method$signal.getitimer" +ext_rettype(#10065, #10037) +#10066 = @"C_builtin_function_or_method$signal.signal" +ext_rettype(#10066, #10005) +#10067 = @"C_builtin_function_or_method$signal.getsignal" +ext_rettype(#10067, #10005) +#10068 = @"C_builtin_function_or_method$signal.set_wakeup_fd" +ext_rettype(#10068, #10024) +#10069 = @"C_builtin_function_or_method$signal.siginterrupt" +ext_rettype(#10069, #10005) +#10070 = @"C_builtin_function_or_method$signal.pause" +ext_rettype(#10070, #10005) +#10071 = @"C_builtin_function_or_method$signal.pthread_kill" +ext_rettype(#10071, #10005) +#10072 = @"C_builtin_function_or_method$signal.pthread_sigmask" +#10073 = @"C_type$set" +ext_rettype(#10072, #10073) +#10074 = @"C_type$frozenset" +ext_rettype(#10072, #10074) +#10075 = @"C_builtin_function_or_method$signal.sigpending" +ext_rettype(#10075, #10073) +ext_rettype(#10075, #10074) +#10076 = @"C_builtin_function_or_method$signal.sigwait" +ext_rettype(#10076, #10024) +#10077 = @"C_builtin_function_or_method$signal.sigtimedwait" +ext_rettype(#10077, #10005) +#10078 = @"C_builtin_function_or_method$_struct._clearcache" +ext_rettype(#10078, #10005) +#10079 = @"C_builtin_function_or_method$_struct.calcsize" +ext_rettype(#10079, #10024) +#10080 = @"C_builtin_function_or_method$_struct.pack" +#10081 = @"C_type$bytes" +ext_rettype(#10080, #10081) +#10082 = @"C_builtin_function_or_method$_struct.pack_into" +ext_rettype(#10082, #10005) +#10083 = @"C_builtin_function_or_method$_struct.unpack" +ext_rettype(#10083, #10037) +#10084 = @"C_builtin_function_or_method$_struct.unpack_from" +ext_rettype(#10084, #10037) +#10085 = @"C_builtin_function_or_method$audioop.max" +ext_rettype(#10085, #10024) +#10086 = @"C_builtin_function_or_method$audioop.minmax" +ext_rettype(#10086, #10037) +#10087 = @"C_builtin_function_or_method$audioop.avg" +ext_rettype(#10087, #10024) +#10088 = @"C_builtin_function_or_method$audioop.maxpp" +ext_rettype(#10088, #10024) +#10089 = @"C_builtin_function_or_method$audioop.avgpp" +ext_rettype(#10089, #10024) +#10090 = @"C_builtin_function_or_method$audioop.rms" +ext_rettype(#10090, #10024) +#10091 = @"C_builtin_function_or_method$audioop.findfit" +ext_rettype(#10091, #10037) +#10092 = @"C_builtin_function_or_method$audioop.findmax" +ext_rettype(#10092, #10024) +#10093 = @"C_builtin_function_or_method$audioop.findfactor" +ext_rettype(#10093, #10001) +#10094 = @"C_builtin_function_or_method$audioop.cross" +ext_rettype(#10094, #10024) +#10095 = @"C_builtin_function_or_method$audioop.mul" +ext_rettype(#10095, #10081) +#10096 = @"C_builtin_function_or_method$audioop.add" +ext_rettype(#10096, #10081) +#10097 = @"C_builtin_function_or_method$audioop.bias" +ext_rettype(#10097, #10081) +#10098 = @"C_builtin_function_or_method$audioop.ulaw2lin" +ext_rettype(#10098, #10081) +#10099 = @"C_builtin_function_or_method$audioop.lin2ulaw" +ext_rettype(#10099, #10081) +#10100 = @"C_builtin_function_or_method$audioop.alaw2lin" +ext_rettype(#10100, #10081) +#10101 = @"C_builtin_function_or_method$audioop.lin2alaw" +ext_rettype(#10101, #10081) +#10102 = @"C_builtin_function_or_method$audioop.lin2lin" +ext_rettype(#10102, #10081) +#10103 = @"C_builtin_function_or_method$audioop.adpcm2lin" +ext_rettype(#10103, #10037) +#10104 = @"C_builtin_function_or_method$audioop.lin2adpcm" +ext_rettype(#10104, #10037) +#10105 = @"C_builtin_function_or_method$audioop.tomono" +ext_rettype(#10105, #10081) +#10106 = @"C_builtin_function_or_method$audioop.tostereo" +ext_rettype(#10106, #10081) +#10107 = @"C_builtin_function_or_method$audioop.getsample" +ext_rettype(#10107, #10024) +#10108 = @"C_builtin_function_or_method$audioop.reverse" +ext_rettype(#10108, #10081) +#10109 = @"C_builtin_function_or_method$audioop.ratecv" +ext_rettype(#10109, #10037) +ext_rettype(#10109, #10081) +#10110 = @"C_builtin_function_or_method$_ssl._test_decode_cert" +#10111 = @"C_type$dict" +ext_rettype(#10110, #10111) +#10112 = @"C_builtin_function_or_method$_ssl.RAND_add" +ext_rettype(#10112, #10005) +#10113 = @"C_builtin_function_or_method$_ssl.RAND_bytes" +ext_rettype(#10113, #10037) +ext_rettype(#10113, #10081) +#10114 = @"C_builtin_function_or_method$_ssl.RAND_pseudo_bytes" +ext_rettype(#10114, #10037) +ext_rettype(#10114, #10081) +#10115 = @"C_builtin_function_or_method$_ssl.RAND_egd" +ext_rettype(#10115, #10024) +#10116 = @"C_builtin_function_or_method$_ssl.RAND_status" +ext_rettype(#10116, #10024) +#10117 = @"C_builtin_function_or_method$fcntl.fcntl" +ext_rettype(#10117, #10024) +ext_rettype(#10117, #10081) +#10118 = @"C_builtin_function_or_method$fcntl.ioctl" +ext_rettype(#10118, #10024) +ext_rettype(#10118, #10081) +#10119 = @"C_builtin_function_or_method$fcntl.flock" +ext_rettype(#10119, #10005) +#10120 = @"C_builtin_function_or_method$fcntl.lockf" +ext_rettype(#10120, #10005) +#10121 = @"C_builtin_function_or_method$_thread.start_new_thread" +ext_rettype(#10121, #10024) +#10122 = @"C_builtin_function_or_method$_thread.start_new" +ext_rettype(#10122, #10024) +#10123 = @"C_builtin_function_or_method$_thread.allocate_lock" +#10124 = @"C_type$_thread.lock" +ext_rettype(#10123, #10124) +#10125 = @"C_builtin_function_or_method$_thread.allocate" +ext_rettype(#10125, #10124) +#10126 = @"C_builtin_function_or_method$_thread.interrupt_main" +ext_rettype(#10126, #10005) +#10127 = @"C_builtin_function_or_method$_thread.get_ident" +ext_rettype(#10127, #10024) +#10128 = @"C_builtin_function_or_method$_thread._count" +ext_rettype(#10128, #10024) +#10129 = @"C_builtin_function_or_method$_thread.stack_size" +ext_rettype(#10129, #10024) +#10130 = @"C_builtin_function_or_method$_codecs.register" +ext_rettype(#10130, #10005) +#10131 = @"C_builtin_function_or_method$_codecs.escape_encode" +ext_rettype(#10131, #10037) +#10132 = @"C_builtin_function_or_method$_codecs.escape_decode" +ext_rettype(#10132, #10037) +#10133 = @"C_builtin_function_or_method$_codecs.utf_8_encode" +ext_rettype(#10133, #10037) +#10134 = @"C_builtin_function_or_method$_codecs.utf_8_decode" +ext_rettype(#10134, #10037) +#10135 = @"C_builtin_function_or_method$_codecs.utf_7_encode" +ext_rettype(#10135, #10037) +#10136 = @"C_builtin_function_or_method$_codecs.utf_7_decode" +ext_rettype(#10136, #10037) +#10137 = @"C_builtin_function_or_method$_codecs.utf_16_encode" +ext_rettype(#10137, #10037) +#10138 = @"C_builtin_function_or_method$_codecs.utf_16_le_encode" +ext_rettype(#10138, #10037) +#10139 = @"C_builtin_function_or_method$_codecs.utf_16_be_encode" +ext_rettype(#10139, #10037) +#10140 = @"C_builtin_function_or_method$_codecs.utf_16_decode" +ext_rettype(#10140, #10037) +#10141 = @"C_builtin_function_or_method$_codecs.utf_16_le_decode" +ext_rettype(#10141, #10037) +#10142 = @"C_builtin_function_or_method$_codecs.utf_16_be_decode" +ext_rettype(#10142, #10037) +#10143 = @"C_builtin_function_or_method$_codecs.utf_16_ex_decode" +ext_rettype(#10143, #10037) +#10144 = @"C_builtin_function_or_method$_codecs.utf_32_encode" +ext_rettype(#10144, #10037) +#10145 = @"C_builtin_function_or_method$_codecs.utf_32_le_encode" +ext_rettype(#10145, #10037) +#10146 = @"C_builtin_function_or_method$_codecs.utf_32_be_encode" +ext_rettype(#10146, #10037) +#10147 = @"C_builtin_function_or_method$_codecs.utf_32_decode" +ext_rettype(#10147, #10037) +#10148 = @"C_builtin_function_or_method$_codecs.utf_32_le_decode" +ext_rettype(#10148, #10037) +#10149 = @"C_builtin_function_or_method$_codecs.utf_32_be_decode" +ext_rettype(#10149, #10037) +#10150 = @"C_builtin_function_or_method$_codecs.utf_32_ex_decode" +ext_rettype(#10150, #10037) +#10151 = @"C_builtin_function_or_method$_codecs.unicode_escape_encode" +ext_rettype(#10151, #10037) +#10152 = @"C_builtin_function_or_method$_codecs.unicode_escape_decode" +ext_rettype(#10152, #10037) +#10153 = @"C_builtin_function_or_method$_codecs.unicode_internal_encode" +ext_rettype(#10153, #10037) +#10154 = @"C_builtin_function_or_method$_codecs.unicode_internal_decode" +ext_rettype(#10154, #10037) +#10155 = @"C_builtin_function_or_method$_codecs.raw_unicode_escape_encode" +ext_rettype(#10155, #10037) +#10156 = @"C_builtin_function_or_method$_codecs.raw_unicode_escape_decode" +ext_rettype(#10156, #10037) +#10157 = @"C_builtin_function_or_method$_codecs.latin_1_encode" +ext_rettype(#10157, #10037) +#10158 = @"C_builtin_function_or_method$_codecs.latin_1_decode" +ext_rettype(#10158, #10037) +#10159 = @"C_builtin_function_or_method$_codecs.ascii_encode" +ext_rettype(#10159, #10037) +#10160 = @"C_builtin_function_or_method$_codecs.ascii_decode" +ext_rettype(#10160, #10037) +#10161 = @"C_builtin_function_or_method$_codecs.charmap_encode" +ext_rettype(#10161, #10037) +#10162 = @"C_builtin_function_or_method$_codecs.charmap_decode" +ext_rettype(#10162, #10037) +#10163 = @"C_builtin_function_or_method$_codecs.charmap_build" +ext_rettype(#10163, #10111) +#10164 = @"C_builtin_function_or_method$_codecs.readbuffer_encode" +ext_rettype(#10164, #10037) +#10165 = @"C_builtin_function_or_method$_codecs.register_error" +ext_rettype(#10165, #10005) +#10166 = @"C_builtin_function_or_method$xxlimited.roj" +ext_rettype(#10166, #10005) +#10167 = @"C_builtin_function_or_method$xxlimited.foo" +ext_rettype(#10167, #10024) +#10168 = @"C_builtin_function_or_method$_hashlib.new" +#10169 = @"C_type$_hashlib.HASH" +ext_rettype(#10168, #10169) +#10170 = @"C_builtin_function_or_method$_hashlib.openssl_md5" +ext_rettype(#10170, #10169) +#10171 = @"C_builtin_function_or_method$_hashlib.openssl_sha1" +ext_rettype(#10171, #10169) +#10172 = @"C_builtin_function_or_method$_hashlib.openssl_sha224" +ext_rettype(#10172, #10169) +#10173 = @"C_builtin_function_or_method$_hashlib.openssl_sha256" +ext_rettype(#10173, #10169) +#10174 = @"C_builtin_function_or_method$_hashlib.openssl_sha384" +ext_rettype(#10174, #10169) +#10175 = @"C_builtin_function_or_method$_hashlib.openssl_sha512" +ext_rettype(#10175, #10169) +#10176 = @"C_builtin_function_or_method$termios.tcgetattr" +ext_rettype(#10176, #10020) +#10177 = @"C_builtin_function_or_method$termios.tcsetattr" +ext_rettype(#10177, #10005) +#10178 = @"C_builtin_function_or_method$termios.tcsendbreak" +ext_rettype(#10178, #10005) +#10179 = @"C_builtin_function_or_method$termios.tcdrain" +ext_rettype(#10179, #10005) +#10180 = @"C_builtin_function_or_method$termios.tcflush" +ext_rettype(#10180, #10005) +#10181 = @"C_builtin_function_or_method$termios.tcflow" +ext_rettype(#10181, #10005) +#10182 = @"C_builtin_function_or_method$_bisect.bisect_right" +ext_rettype(#10182, #10024) +#10183 = @"C_builtin_function_or_method$_bisect.bisect" +ext_rettype(#10183, #10024) +#10184 = @"C_builtin_function_or_method$_bisect.insort_right" +ext_rettype(#10184, #10005) +#10185 = @"C_builtin_function_or_method$_bisect.insort" +ext_rettype(#10185, #10005) +#10186 = @"C_builtin_function_or_method$_bisect.bisect_left" +ext_rettype(#10186, #10024) +#10187 = @"C_builtin_function_or_method$_bisect.insort_left" +ext_rettype(#10187, #10005) +#10188 = @"C_builtin_function_or_method$_sha256.sha256" +#10189 = @"C_type$_sha256.sha256" +ext_rettype(#10188, #10189) +#10190 = @"C_builtin_function_or_method$_sha256.sha224" +#10191 = @"C_type$_sha256.sha224" +ext_rettype(#10190, #10191) +#10192 = @"C_builtin_function_or_method$faulthandler.enable" +ext_rettype(#10192, #10005) +#10193 = @"C_builtin_function_or_method$faulthandler.disable" +ext_rettype(#10193, #10050) +#10194 = @"C_builtin_function_or_method$faulthandler.is_enabled" +ext_rettype(#10194, #10050) +#10195 = @"C_builtin_function_or_method$faulthandler.dump_traceback" +ext_rettype(#10195, #10005) +#10196 = @"C_builtin_function_or_method$faulthandler.dump_traceback_later" +ext_rettype(#10196, #10005) +#10197 = @"C_builtin_function_or_method$faulthandler.cancel_dump_traceback_later" +ext_rettype(#10197, #10005) +#10198 = @"C_builtin_function_or_method$faulthandler.register" +ext_rettype(#10198, #10005) +#10199 = @"C_builtin_function_or_method$faulthandler.unregister" +ext_rettype(#10199, #10050) +#10200 = @"C_builtin_function_or_method$faulthandler._read_null" +ext_rettype(#10200, #10024) +#10201 = @"C_builtin_function_or_method$faulthandler._sigsegv" +ext_rettype(#10201, #10005) +#10202 = @"C_builtin_function_or_method$faulthandler._sigabrt" +ext_rettype(#10202, #10005) +#10203 = @"C_builtin_function_or_method$faulthandler._sigfpe" +ext_rettype(#10203, #10024) +#10204 = @"C_builtin_function_or_method$faulthandler._sigbus" +ext_rettype(#10204, #10005) +#10205 = @"C_builtin_function_or_method$faulthandler._sigill" +ext_rettype(#10205, #10005) +#10206 = @"C_builtin_function_or_method$faulthandler._fatal_error" +ext_rettype(#10206, #10005) +#10207 = @"C_builtin_function_or_method$_functools.cmp_to_key" +#10208 = @"C_type$functools.KeyWrapper" +ext_rettype(#10207, #10208) +#10209 = @"C_builtin_function_or_method$_locale.setlocale" +ext_rettype(#10209, #10010) +#10210 = @"C_builtin_function_or_method$_locale.localeconv" +ext_rettype(#10210, #10111) +#10211 = @"C_builtin_function_or_method$_locale.strcoll" +ext_rettype(#10211, #10024) +#10212 = @"C_builtin_function_or_method$_locale.strxfrm" +ext_rettype(#10212, #10010) +#10213 = @"C_builtin_function_or_method$_locale.nl_langinfo" +ext_rettype(#10213, #10010) +#10214 = @"C_builtin_function_or_method$_locale.gettext" +ext_rettype(#10214, #10010) +#10215 = @"C_builtin_function_or_method$_locale.dgettext" +ext_rettype(#10215, #10010) +#10216 = @"C_builtin_function_or_method$_locale.dcgettext" +ext_rettype(#10216, #10010) +#10217 = @"C_builtin_function_or_method$_locale.textdomain" +ext_rettype(#10217, #10010) +#10218 = @"C_builtin_function_or_method$_locale.bindtextdomain" +ext_rettype(#10218, #10010) +#10219 = @"C_builtin_function_or_method$_locale.bind_textdomain_codeset" +ext_rettype(#10219, #10010) +ext_rettype(#10219, #10005) +#10220 = @"C_builtin_function_or_method$grp.getgrall" +ext_rettype(#10220, #10020) +#10221 = @"C_builtin_function_or_method$_pickle.dump" +ext_rettype(#10221, #10005) +#10222 = @"C_builtin_function_or_method$_md5.md5" +#10223 = @"C_type$_md5.md5" +ext_rettype(#10222, #10223) +#10224 = @"C_builtin_function_or_method$_crypt.crypt" +ext_rettype(#10224, #10010) +#10225 = @"C_builtin_function_or_method$cmath.acos" +#10226 = @"C_type$complex" +ext_rettype(#10225, #10226) +#10227 = @"C_builtin_function_or_method$cmath.acosh" +ext_rettype(#10227, #10226) +#10228 = @"C_builtin_function_or_method$cmath.asin" +ext_rettype(#10228, #10226) +#10229 = @"C_builtin_function_or_method$cmath.asinh" +ext_rettype(#10229, #10226) +#10230 = @"C_builtin_function_or_method$cmath.atan" +ext_rettype(#10230, #10226) +#10231 = @"C_builtin_function_or_method$cmath.atanh" +ext_rettype(#10231, #10226) +#10232 = @"C_builtin_function_or_method$cmath.cos" +ext_rettype(#10232, #10226) +#10233 = @"C_builtin_function_or_method$cmath.cosh" +ext_rettype(#10233, #10226) +#10234 = @"C_builtin_function_or_method$cmath.exp" +ext_rettype(#10234, #10226) +#10235 = @"C_builtin_function_or_method$cmath.isfinite" +ext_rettype(#10235, #10050) +#10236 = @"C_builtin_function_or_method$cmath.isinf" +ext_rettype(#10236, #10050) +#10237 = @"C_builtin_function_or_method$cmath.isnan" +ext_rettype(#10237, #10050) +#10238 = @"C_builtin_function_or_method$cmath.log" +ext_rettype(#10238, #10226) +#10239 = @"C_builtin_function_or_method$cmath.log10" +ext_rettype(#10239, #10226) +#10240 = @"C_builtin_function_or_method$cmath.phase" +ext_rettype(#10240, #10001) +#10241 = @"C_builtin_function_or_method$cmath.polar" +ext_rettype(#10241, #10037) +#10242 = @"C_builtin_function_or_method$cmath.rect" +ext_rettype(#10242, #10226) +#10243 = @"C_builtin_function_or_method$cmath.sin" +ext_rettype(#10243, #10226) +#10244 = @"C_builtin_function_or_method$cmath.sinh" +ext_rettype(#10244, #10226) +#10245 = @"C_builtin_function_or_method$cmath.sqrt" +ext_rettype(#10245, #10226) +#10246 = @"C_builtin_function_or_method$cmath.tan" +ext_rettype(#10246, #10226) +#10247 = @"C_builtin_function_or_method$cmath.tanh" +ext_rettype(#10247, #10226) +#10248 = @"C_builtin_function_or_method$_sha1.sha1" +#10249 = @"C_type$_sha1.sha1" +ext_rettype(#10248, #10249) +#10250 = @"C_builtin_function_or_method$_sre.getcodesize" +ext_rettype(#10250, #10024) +#10251 = @"C_builtin_function_or_method$_sre.getlower" +ext_rettype(#10251, #10024) +#10252 = @"C_builtin_function_or_method$syslog.openlog" +ext_rettype(#10252, #10005) +#10253 = @"C_builtin_function_or_method$syslog.closelog" +ext_rettype(#10253, #10005) +#10254 = @"C_builtin_function_or_method$syslog.syslog" +ext_rettype(#10254, #10005) +#10255 = @"C_builtin_function_or_method$syslog.setlogmask" +ext_rettype(#10255, #10024) +#10256 = @"C_builtin_function_or_method$syslog.LOG_MASK" +ext_rettype(#10256, #10024) +#10257 = @"C_builtin_function_or_method$syslog.LOG_UPTO" +ext_rettype(#10257, #10024) +#10258 = @"C_builtin_function_or_method$binascii.a2b_uu" +ext_rettype(#10258, #10081) +#10259 = @"C_builtin_function_or_method$binascii.a2b_hqx" +ext_rettype(#10259, #10037) +#10260 = @"C_builtin_function_or_method$binascii.b2a_hex" +ext_rettype(#10260, #10081) +#10261 = @"C_builtin_function_or_method$binascii.a2b_hex" +ext_rettype(#10261, #10081) +#10262 = @"C_builtin_function_or_method$binascii.hexlify" +ext_rettype(#10262, #10081) +#10263 = @"C_builtin_function_or_method$binascii.unhexlify" +ext_rettype(#10263, #10081) +#10264 = @"C_builtin_function_or_method$binascii.rledecode_hqx" +ext_rettype(#10264, #10081) +#10265 = @"C_builtin_function_or_method$binascii.crc_hqx" +ext_rettype(#10265, #10024) +#10266 = @"C_builtin_function_or_method$binascii.crc32" +ext_rettype(#10266, #10024) +#10267 = @"C_builtin_function_or_method$binascii.a2b_qp" +ext_rettype(#10267, #10081) +#10268 = @"C_builtin_function_or_method$binascii.b2a_qp" +ext_rettype(#10268, #10081) +#10269 = @"C_builtin_function_or_method$posix.access" +ext_rettype(#10269, #10050) +#10270 = @"C_builtin_function_or_method$posix.ttyname" +ext_rettype(#10270, #10010) +#10271 = @"C_builtin_function_or_method$posix.chdir" +ext_rettype(#10271, #10005) +#10272 = @"C_builtin_function_or_method$posix.chmod" +ext_rettype(#10272, #10005) +#10273 = @"C_builtin_function_or_method$posix.fchmod" +ext_rettype(#10273, #10005) +#10274 = @"C_builtin_function_or_method$posix.chown" +ext_rettype(#10274, #10005) +#10275 = @"C_builtin_function_or_method$posix.fchown" +ext_rettype(#10275, #10005) +#10276 = @"C_builtin_function_or_method$posix.lchown" +ext_rettype(#10276, #10005) +#10277 = @"C_builtin_function_or_method$posix.chroot" +ext_rettype(#10277, #10005) +#10278 = @"C_builtin_function_or_method$posix.ctermid" +ext_rettype(#10278, #10010) +#10279 = @"C_builtin_function_or_method$posix.getcwd" +ext_rettype(#10279, #10081) +ext_rettype(#10279, #10010) +#10280 = @"C_builtin_function_or_method$posix.getcwdb" +ext_rettype(#10280, #10081) +ext_rettype(#10280, #10010) +#10281 = @"C_builtin_function_or_method$posix.link" +ext_rettype(#10281, #10005) +#10282 = @"C_builtin_function_or_method$posix.listdir" +ext_rettype(#10282, #10020) +#10283 = @"C_builtin_function_or_method$posix.mkdir" +ext_rettype(#10283, #10005) +#10284 = @"C_builtin_function_or_method$posix.nice" +ext_rettype(#10284, #10024) +#10285 = @"C_builtin_function_or_method$posix.getpriority" +ext_rettype(#10285, #10024) +#10286 = @"C_builtin_function_or_method$posix.setpriority" +ext_rettype(#10286, #10005) +#10287 = @"C_builtin_function_or_method$posix.readlink" +ext_rettype(#10287, #10081) +ext_rettype(#10287, #10010) +#10288 = @"C_builtin_function_or_method$posix.rename" +ext_rettype(#10288, #10005) +#10289 = @"C_builtin_function_or_method$posix.replace" +ext_rettype(#10289, #10005) +#10290 = @"C_builtin_function_or_method$posix.rmdir" +ext_rettype(#10290, #10005) +#10291 = @"C_builtin_function_or_method$posix.stat_float_times" +ext_rettype(#10291, #10005) +ext_rettype(#10291, #10050) +#10292 = @"C_builtin_function_or_method$posix.symlink" +ext_rettype(#10292, #10005) +#10293 = @"C_builtin_function_or_method$posix.system" +ext_rettype(#10293, #10024) +#10294 = @"C_builtin_function_or_method$posix.umask" +ext_rettype(#10294, #10024) +#10295 = @"C_builtin_function_or_method$posix.unlink" +ext_rettype(#10295, #10005) +#10296 = @"C_builtin_function_or_method$posix.remove" +ext_rettype(#10296, #10005) +#10297 = @"C_builtin_function_or_method$posix.utime" +ext_rettype(#10297, #10005) +#10298 = @"C_builtin_function_or_method$posix.fork" +ext_rettype(#10298, #10024) +#10299 = @"C_builtin_function_or_method$posix.sched_get_priority_max" +ext_rettype(#10299, #10024) +#10300 = @"C_builtin_function_or_method$posix.sched_get_priority_min" +ext_rettype(#10300, #10024) +#10301 = @"C_builtin_function_or_method$posix.sched_getscheduler" +ext_rettype(#10301, #10024) +#10302 = @"C_builtin_function_or_method$posix.sched_rr_get_interval" +ext_rettype(#10302, #10001) +#10303 = @"C_builtin_function_or_method$posix.sched_setparam" +ext_rettype(#10303, #10005) +#10304 = @"C_builtin_function_or_method$posix.sched_setscheduler" +ext_rettype(#10304, #10005) +#10305 = @"C_builtin_function_or_method$posix.sched_yield" +ext_rettype(#10305, #10005) +#10306 = @"C_builtin_function_or_method$posix.sched_setaffinity" +ext_rettype(#10306, #10005) +#10307 = @"C_builtin_function_or_method$posix.sched_getaffinity" +ext_rettype(#10307, #10073) +ext_rettype(#10307, #10074) +#10308 = @"C_builtin_function_or_method$posix.openpty" +ext_rettype(#10308, #10037) +#10309 = @"C_builtin_function_or_method$posix.forkpty" +ext_rettype(#10309, #10037) +#10310 = @"C_builtin_function_or_method$posix.getegid" +ext_rettype(#10310, #10024) +#10311 = @"C_builtin_function_or_method$posix.geteuid" +ext_rettype(#10311, #10024) +#10312 = @"C_builtin_function_or_method$posix.getgid" +ext_rettype(#10312, #10024) +#10313 = @"C_builtin_function_or_method$posix.getgrouplist" +ext_rettype(#10313, #10020) +#10314 = @"C_builtin_function_or_method$posix.getgroups" +ext_rettype(#10314, #10020) +#10315 = @"C_builtin_function_or_method$posix.getpid" +ext_rettype(#10315, #10024) +#10316 = @"C_builtin_function_or_method$posix.getpgrp" +ext_rettype(#10316, #10024) +#10317 = @"C_builtin_function_or_method$posix.getppid" +ext_rettype(#10317, #10024) +#10318 = @"C_builtin_function_or_method$posix.getuid" +ext_rettype(#10318, #10024) +#10319 = @"C_builtin_function_or_method$posix.getlogin" +ext_rettype(#10319, #10010) +#10320 = @"C_builtin_function_or_method$posix.kill" +ext_rettype(#10320, #10005) +#10321 = @"C_builtin_function_or_method$posix.killpg" +ext_rettype(#10321, #10005) +#10322 = @"C_builtin_function_or_method$posix.setuid" +ext_rettype(#10322, #10005) +#10323 = @"C_builtin_function_or_method$posix.seteuid" +ext_rettype(#10323, #10005) +#10324 = @"C_builtin_function_or_method$posix.setegid" +ext_rettype(#10324, #10005) +#10325 = @"C_builtin_function_or_method$posix.setreuid" +ext_rettype(#10325, #10005) +#10326 = @"C_builtin_function_or_method$posix.setregid" +ext_rettype(#10326, #10005) +#10327 = @"C_builtin_function_or_method$posix.setgid" +ext_rettype(#10327, #10005) +#10328 = @"C_builtin_function_or_method$posix.setgroups" +ext_rettype(#10328, #10005) +#10329 = @"C_builtin_function_or_method$posix.initgroups" +ext_rettype(#10329, #10005) +#10330 = @"C_builtin_function_or_method$posix.getpgid" +ext_rettype(#10330, #10024) +#10331 = @"C_builtin_function_or_method$posix.setpgrp" +ext_rettype(#10331, #10005) +#10332 = @"C_builtin_function_or_method$posix.wait" +ext_rettype(#10332, #10037) +#10333 = @"C_builtin_function_or_method$posix.wait3" +ext_rettype(#10333, #10037) +#10334 = @"C_builtin_function_or_method$posix.wait4" +ext_rettype(#10334, #10037) +#10335 = @"C_builtin_function_or_method$posix.waitid" +ext_rettype(#10335, #10005) +#10336 = @"C_builtin_function_or_method$posix.waitpid" +ext_rettype(#10336, #10037) +#10337 = @"C_builtin_function_or_method$posix.getsid" +ext_rettype(#10337, #10024) +#10338 = @"C_builtin_function_or_method$posix.setsid" +ext_rettype(#10338, #10005) +#10339 = @"C_builtin_function_or_method$posix.setpgid" +ext_rettype(#10339, #10005) +#10340 = @"C_builtin_function_or_method$posix.tcgetpgrp" +ext_rettype(#10340, #10024) +#10341 = @"C_builtin_function_or_method$posix.tcsetpgrp" +ext_rettype(#10341, #10005) +#10342 = @"C_builtin_function_or_method$posix.open" +ext_rettype(#10342, #10024) +#10343 = @"C_builtin_function_or_method$posix.close" +ext_rettype(#10343, #10005) +#10344 = @"C_builtin_function_or_method$posix.closerange" +ext_rettype(#10344, #10005) +#10345 = @"C_builtin_function_or_method$posix.device_encoding" +ext_rettype(#10345, #10005) +#10346 = @"C_builtin_function_or_method$posix.dup" +ext_rettype(#10346, #10024) +#10347 = @"C_builtin_function_or_method$posix.dup2" +ext_rettype(#10347, #10005) +#10348 = @"C_builtin_function_or_method$posix.lockf" +ext_rettype(#10348, #10005) +#10349 = @"C_builtin_function_or_method$posix.lseek" +ext_rettype(#10349, #10024) +#10350 = @"C_builtin_function_or_method$posix.readv" +ext_rettype(#10350, #10024) +#10351 = @"C_builtin_function_or_method$posix.write" +ext_rettype(#10351, #10024) +#10352 = @"C_builtin_function_or_method$posix.writev" +ext_rettype(#10352, #10024) +#10353 = @"C_builtin_function_or_method$posix.pwrite" +ext_rettype(#10353, #10024) +#10354 = @"C_builtin_function_or_method$posix.sendfile" +ext_rettype(#10354, #10024) +#10355 = @"C_builtin_function_or_method$posix.isatty" +ext_rettype(#10355, #10050) +#10356 = @"C_builtin_function_or_method$posix.pipe" +ext_rettype(#10356, #10037) +#10357 = @"C_builtin_function_or_method$posix.pipe2" +ext_rettype(#10357, #10037) +#10358 = @"C_builtin_function_or_method$posix.mkfifo" +ext_rettype(#10358, #10005) +#10359 = @"C_builtin_function_or_method$posix.mknod" +ext_rettype(#10359, #10005) +#10360 = @"C_builtin_function_or_method$posix.major" +ext_rettype(#10360, #10024) +#10361 = @"C_builtin_function_or_method$posix.minor" +ext_rettype(#10361, #10024) +#10362 = @"C_builtin_function_or_method$posix.makedev" +ext_rettype(#10362, #10024) +#10363 = @"C_builtin_function_or_method$posix.ftruncate" +ext_rettype(#10363, #10005) +#10364 = @"C_builtin_function_or_method$posix.truncate" +ext_rettype(#10364, #10005) +#10365 = @"C_builtin_function_or_method$posix.posix_fallocate" +ext_rettype(#10365, #10005) +#10366 = @"C_builtin_function_or_method$posix.posix_fadvise" +ext_rettype(#10366, #10005) +#10367 = @"C_builtin_function_or_method$posix.putenv" +ext_rettype(#10367, #10005) +#10368 = @"C_builtin_function_or_method$posix.unsetenv" +ext_rettype(#10368, #10005) +#10369 = @"C_builtin_function_or_method$posix.strerror" +ext_rettype(#10369, #10010) +#10370 = @"C_builtin_function_or_method$posix.fchdir" +ext_rettype(#10370, #10005) +#10371 = @"C_builtin_function_or_method$posix.fsync" +ext_rettype(#10371, #10005) +#10372 = @"C_builtin_function_or_method$posix.sync" +ext_rettype(#10372, #10005) +#10373 = @"C_builtin_function_or_method$posix.fdatasync" +ext_rettype(#10373, #10005) +#10374 = @"C_builtin_function_or_method$posix.WCOREDUMP" +ext_rettype(#10374, #10050) +#10375 = @"C_builtin_function_or_method$posix.WIFCONTINUED" +ext_rettype(#10375, #10050) +#10376 = @"C_builtin_function_or_method$posix.WIFSTOPPED" +ext_rettype(#10376, #10050) +#10377 = @"C_builtin_function_or_method$posix.WIFSIGNALED" +ext_rettype(#10377, #10050) +#10378 = @"C_builtin_function_or_method$posix.WIFEXITED" +ext_rettype(#10378, #10050) +#10379 = @"C_builtin_function_or_method$posix.WEXITSTATUS" +ext_rettype(#10379, #10024) +#10380 = @"C_builtin_function_or_method$posix.WTERMSIG" +ext_rettype(#10380, #10024) +#10381 = @"C_builtin_function_or_method$posix.WSTOPSIG" +ext_rettype(#10381, #10024) +#10382 = @"C_builtin_function_or_method$posix.confstr" +ext_rettype(#10382, #10010) +ext_rettype(#10382, #10005) +#10383 = @"C_builtin_function_or_method$posix.sysconf" +ext_rettype(#10383, #10024) +#10384 = @"C_builtin_function_or_method$posix.fpathconf" +ext_rettype(#10384, #10024) +#10385 = @"C_builtin_function_or_method$posix.pathconf" +ext_rettype(#10385, #10024) +#10386 = @"C_builtin_function_or_method$posix.getloadavg" +ext_rettype(#10386, #10037) +#10387 = @"C_builtin_function_or_method$posix.urandom" +ext_rettype(#10387, #10081) +#10388 = @"C_builtin_function_or_method$posix.setresuid" +ext_rettype(#10388, #10005) +#10389 = @"C_builtin_function_or_method$posix.setresgid" +ext_rettype(#10389, #10005) +#10390 = @"C_builtin_function_or_method$posix.getresuid" +ext_rettype(#10390, #10037) +#10391 = @"C_builtin_function_or_method$posix.getresgid" +ext_rettype(#10391, #10037) +#10392 = @"C_builtin_function_or_method$posix.setxattr" +ext_rettype(#10392, #10005) +#10393 = @"C_builtin_function_or_method$posix.removexattr" +ext_rettype(#10393, #10005) +#10394 = @"C_builtin_function_or_method$posix.listxattr" +ext_rettype(#10394, #10020) +#10395 = @"C_builtin_function_or_method$atexit._clear" +ext_rettype(#10395, #10005) +#10396 = @"C_builtin_function_or_method$atexit.unregister" +ext_rettype(#10396, #10005) +#10397 = @"C_builtin_function_or_method$atexit._run_exitfuncs" +ext_rettype(#10397, #10005) +#10398 = @"C_builtin_function_or_method$_posixsubprocess.fork_exec" +ext_rettype(#10398, #10024) +#10399 = @"C_builtin_function_or_method$_posixsubprocess.cloexec_pipe" +ext_rettype(#10399, #10037) +#10400 = @"C_builtin_function_or_method$_heapq.heappush" +ext_rettype(#10400, #10005) +#10401 = @"C_builtin_function_or_method$_heapq.heapify" +ext_rettype(#10401, #10005) +#10402 = @"C_builtin_function_or_method$_heapq.nlargest" +ext_rettype(#10402, #10020) +#10403 = @"C_builtin_function_or_method$_heapq.nsmallest" +ext_rettype(#10403, #10020) +#10404 = @"C_builtin_function_or_method$_testbuffer.slice_indices" +ext_rettype(#10404, #10037) +#10405 = @"C_builtin_function_or_method$_testbuffer.get_sizeof_void_p" +ext_rettype(#10405, #10024) +#10406 = @"C_builtin_function_or_method$_testbuffer.get_contiguous" +#10407 = @"C_type$memoryview" +ext_rettype(#10406, #10407) +#10408 = @"C_builtin_function_or_method$_testbuffer.py_buffer_to_contiguous" +ext_rettype(#10408, #10081) +#10409 = @"C_builtin_function_or_method$select.select" +ext_rettype(#10409, #10037) +#10410 = @"C_builtin_function_or_method$select.poll" +#10411 = @"C_type$select.poll" +ext_rettype(#10410, #10411) +#10412 = @"C_builtin_function_or_method$operator.truth" +ext_rettype(#10412, #10050) +#10413 = @"C_builtin_function_or_method$operator.contains" +ext_rettype(#10413, #10050) +#10414 = @"C_builtin_function_or_method$operator.__contains__" +ext_rettype(#10414, #10050) +#10415 = @"C_builtin_function_or_method$operator.indexOf" +ext_rettype(#10415, #10024) +#10416 = @"C_builtin_function_or_method$operator.countOf" +ext_rettype(#10416, #10024) +#10417 = @"C_builtin_function_or_method$operator.not_" +ext_rettype(#10417, #10050) +#10418 = @"C_builtin_function_or_method$operator.__not__" +ext_rettype(#10418, #10050) +#10419 = @"C_builtin_function_or_method$operator.setitem" +ext_rettype(#10419, #10005) +#10420 = @"C_builtin_function_or_method$operator.__setitem__" +ext_rettype(#10420, #10005) +#10421 = @"C_builtin_function_or_method$operator.delitem" +ext_rettype(#10421, #10005) +#10422 = @"C_builtin_function_or_method$operator.__delitem__" +ext_rettype(#10422, #10005) +#10423 = @"C_builtin_function_or_method$operator._compare_digest" +ext_rettype(#10423, #10050) +#10424 = @"C_builtin_function_or_method$nis.match" +ext_rettype(#10424, #10010) +#10425 = @"C_builtin_function_or_method$nis.cat" +ext_rettype(#10425, #10111) +#10426 = @"C_builtin_function_or_method$nis.maps" +ext_rettype(#10426, #10020) +#10427 = @"C_builtin_function_or_method$nis.get_default_domain" +ext_rettype(#10427, #10010) +#10428 = @"C_builtin_function_or_method$readline.parse_and_bind" +ext_rettype(#10428, #10005) +#10429 = @"C_builtin_function_or_method$readline.insert_text" +ext_rettype(#10429, #10005) +#10430 = @"C_builtin_function_or_method$readline.redisplay" +ext_rettype(#10430, #10005) +#10431 = @"C_builtin_function_or_method$readline.read_init_file" +ext_rettype(#10431, #10005) +#10432 = @"C_builtin_function_or_method$readline.read_history_file" +ext_rettype(#10432, #10005) +#10433 = @"C_builtin_function_or_method$readline.write_history_file" +ext_rettype(#10433, #10005) +#10434 = @"C_builtin_function_or_method$readline.get_history_item" +ext_rettype(#10434, #10005) +#10435 = @"C_builtin_function_or_method$readline.get_current_history_length" +ext_rettype(#10435, #10024) +#10436 = @"C_builtin_function_or_method$readline.set_history_length" +ext_rettype(#10436, #10005) +#10437 = @"C_builtin_function_or_method$readline.get_history_length" +ext_rettype(#10437, #10024) +#10438 = @"C_builtin_function_or_method$readline.set_completer" +ext_rettype(#10438, #10005) +#10439 = @"C_builtin_function_or_method$readline.get_completer" +ext_rettype(#10439, #10005) +#10440 = @"C_builtin_function_or_method$readline.get_completion_type" +ext_rettype(#10440, #10024) +#10441 = @"C_builtin_function_or_method$readline.set_completer_delims" +ext_rettype(#10441, #10005) +#10442 = @"C_builtin_function_or_method$readline.add_history" +ext_rettype(#10442, #10005) +#10443 = @"C_builtin_function_or_method$readline.remove_history_item" +ext_rettype(#10443, #10005) +#10444 = @"C_builtin_function_or_method$readline.replace_history_item" +ext_rettype(#10444, #10005) +#10445 = @"C_builtin_function_or_method$readline.set_completion_display_matches_hook" +ext_rettype(#10445, #10005) +#10446 = @"C_builtin_function_or_method$readline.set_startup_hook" +ext_rettype(#10446, #10005) +#10447 = @"C_builtin_function_or_method$readline.set_pre_input_hook" +ext_rettype(#10447, #10005) +#10448 = @"C_builtin_function_or_method$readline.clear_history" +ext_rettype(#10448, #10005) +#10449 = @"C_builtin_function_or_method$_testcapi.test_config" +ext_rettype(#10449, #10005) +#10450 = @"C_builtin_function_or_method$_testcapi.test_datetime_capi" +ext_rettype(#10450, #10005) +#10451 = @"C_builtin_function_or_method$_testcapi.test_list_api" +ext_rettype(#10451, #10005) +#10452 = @"C_builtin_function_or_method$_testcapi.test_dict_iteration" +ext_rettype(#10452, #10005) +#10453 = @"C_builtin_function_or_method$_testcapi.test_lazy_hash_inheritance" +ext_rettype(#10453, #10005) +#10454 = @"C_builtin_function_or_method$_testcapi.test_long_api" +ext_rettype(#10454, #10005) +#10455 = @"C_builtin_function_or_method$_testcapi.test_long_and_overflow" +ext_rettype(#10455, #10005) +#10456 = @"C_builtin_function_or_method$_testcapi.test_long_as_double" +ext_rettype(#10456, #10005) +#10457 = @"C_builtin_function_or_method$_testcapi.test_long_as_size_t" +ext_rettype(#10457, #10005) +#10458 = @"C_builtin_function_or_method$_testcapi.test_long_numbits" +ext_rettype(#10458, #10005) +#10459 = @"C_builtin_function_or_method$_testcapi.test_k_code" +ext_rettype(#10459, #10005) +#10460 = @"C_builtin_function_or_method$_testcapi.test_empty_argparse" +ext_rettype(#10460, #10005) +#10461 = @"C_builtin_function_or_method$_testcapi.parse_tuple_and_keywords" +ext_rettype(#10461, #10005) +#10462 = @"C_builtin_function_or_method$_testcapi.test_null_strings" +ext_rettype(#10462, #10037) +#10463 = @"C_builtin_function_or_method$_testcapi.test_string_from_format" +ext_rettype(#10463, #10005) +#10464 = @"C_builtin_function_or_method$_testcapi.test_with_docstring" +ext_rettype(#10464, #10005) +#10465 = @"C_builtin_function_or_method$_testcapi.test_string_to_double" +ext_rettype(#10465, #10005) +#10466 = @"C_builtin_function_or_method$_testcapi.test_unicode_compare_with_ascii" +ext_rettype(#10466, #10005) +#10467 = @"C_builtin_function_or_method$_testcapi.test_capsule" +ext_rettype(#10467, #10005) +#10468 = @"C_builtin_function_or_method$_testcapi.getargs_tuple" +ext_rettype(#10468, #10037) +#10469 = @"C_builtin_function_or_method$_testcapi.getargs_keywords" +ext_rettype(#10469, #10037) +#10470 = @"C_builtin_function_or_method$_testcapi.getargs_keyword_only" +ext_rettype(#10470, #10037) +#10471 = @"C_builtin_function_or_method$_testcapi.getargs_b" +ext_rettype(#10471, #10024) +#10472 = @"C_builtin_function_or_method$_testcapi.getargs_B" +ext_rettype(#10472, #10024) +#10473 = @"C_builtin_function_or_method$_testcapi.getargs_h" +ext_rettype(#10473, #10024) +#10474 = @"C_builtin_function_or_method$_testcapi.getargs_H" +ext_rettype(#10474, #10024) +#10475 = @"C_builtin_function_or_method$_testcapi.getargs_I" +ext_rettype(#10475, #10024) +#10476 = @"C_builtin_function_or_method$_testcapi.getargs_k" +ext_rettype(#10476, #10024) +#10477 = @"C_builtin_function_or_method$_testcapi.getargs_i" +ext_rettype(#10477, #10024) +#10478 = @"C_builtin_function_or_method$_testcapi.getargs_l" +ext_rettype(#10478, #10024) +#10479 = @"C_builtin_function_or_method$_testcapi.getargs_n" +ext_rettype(#10479, #10024) +#10480 = @"C_builtin_function_or_method$_testcapi.getargs_p" +ext_rettype(#10480, #10024) +#10481 = @"C_builtin_function_or_method$_testcapi.getargs_L" +ext_rettype(#10481, #10024) +#10482 = @"C_builtin_function_or_method$_testcapi.getargs_K" +ext_rettype(#10482, #10024) +#10483 = @"C_builtin_function_or_method$_testcapi.test_longlong_api" +ext_rettype(#10483, #10005) +#10484 = @"C_builtin_function_or_method$_testcapi.test_long_long_and_overflow" +ext_rettype(#10484, #10005) +#10485 = @"C_builtin_function_or_method$_testcapi.test_L_code" +ext_rettype(#10485, #10005) +#10486 = @"C_builtin_function_or_method$_testcapi.getargs_c" +ext_rettype(#10486, #10081) +#10487 = @"C_builtin_function_or_method$_testcapi.getargs_s" +ext_rettype(#10487, #10081) +#10488 = @"C_builtin_function_or_method$_testcapi.getargs_s_star" +ext_rettype(#10488, #10081) +#10489 = @"C_builtin_function_or_method$_testcapi.getargs_s_hash" +ext_rettype(#10489, #10081) +#10490 = @"C_builtin_function_or_method$_testcapi.getargs_z" +ext_rettype(#10490, #10081) +ext_rettype(#10490, #10005) +#10491 = @"C_builtin_function_or_method$_testcapi.getargs_z_star" +ext_rettype(#10491, #10081) +ext_rettype(#10491, #10005) +#10492 = @"C_builtin_function_or_method$_testcapi.getargs_z_hash" +ext_rettype(#10492, #10081) +ext_rettype(#10492, #10005) +#10493 = @"C_builtin_function_or_method$_testcapi.getargs_y" +ext_rettype(#10493, #10081) +#10494 = @"C_builtin_function_or_method$_testcapi.getargs_y_star" +ext_rettype(#10494, #10081) +#10495 = @"C_builtin_function_or_method$_testcapi.getargs_y_hash" +ext_rettype(#10495, #10081) +#10496 = @"C_builtin_function_or_method$_testcapi.getargs_u" +ext_rettype(#10496, #10010) +#10497 = @"C_builtin_function_or_method$_testcapi.getargs_u_hash" +ext_rettype(#10497, #10010) +#10498 = @"C_builtin_function_or_method$_testcapi.getargs_Z" +ext_rettype(#10498, #10010) +ext_rettype(#10498, #10005) +#10499 = @"C_builtin_function_or_method$_testcapi.getargs_Z_hash" +ext_rettype(#10499, #10010) +ext_rettype(#10499, #10005) +#10500 = @"C_builtin_function_or_method$_testcapi.getargs_w_star" +ext_rettype(#10500, #10081) +#10501 = @"C_builtin_function_or_method$_testcapi.test_s_code" +ext_rettype(#10501, #10005) +#10502 = @"C_builtin_function_or_method$_testcapi.test_u_code" +ext_rettype(#10502, #10005) +#10503 = @"C_builtin_function_or_method$_testcapi.test_Z_code" +ext_rettype(#10503, #10005) +#10504 = @"C_builtin_function_or_method$_testcapi.test_widechar" +ext_rettype(#10504, #10005) +#10505 = @"C_builtin_function_or_method$_testcapi.unicode_aswidechar" +ext_rettype(#10505, #10037) +#10506 = @"C_builtin_function_or_method$_testcapi.unicode_aswidecharstring" +ext_rettype(#10506, #10037) +#10507 = @"C_builtin_function_or_method$_testcapi.unicode_legacy_string" +ext_rettype(#10507, #10010) +#10508 = @"C_builtin_function_or_method$_testcapi._test_thread_state" +ext_rettype(#10508, #10005) +#10509 = @"C_builtin_function_or_method$_testcapi._pending_threadfunc" +ext_rettype(#10509, #10050) +#10510 = @"C_builtin_function_or_method$_testcapi.profile_int" +ext_rettype(#10510, #10005) +#10511 = @"C_builtin_function_or_method$_testcapi.traceback_print" +ext_rettype(#10511, #10005) +#10512 = @"C_builtin_function_or_method$_testcapi.exception_print" +ext_rettype(#10512, #10005) +#10513 = @"C_builtin_function_or_method$_testcapi.set_exc_info" +ext_rettype(#10513, #10037) +#10514 = @"C_builtin_function_or_method$_testcapi.argparsing" +ext_rettype(#10514, #10024) +ext_rettype(#10514, #10005) +#10515 = @"C_builtin_function_or_method$_testcapi.code_newempty" +ext_rettype(#10515, #10028) +#10516 = @"C_builtin_function_or_method$_testcapi.make_exception_with_doc" +#10517 = @"C_type$type" +ext_rettype(#10516, #10517) +#10518 = @"C_builtin_function_or_method$_testcapi.make_memoryview_from_NULL_pointer" +ext_rettype(#10518, #10407) +#10519 = @"C_builtin_function_or_method$_testcapi.run_in_subinterp" +ext_rettype(#10519, #10024) +#10520 = @"C_builtin_function_or_method$_testcapi.pytime_object_to_time_t" +ext_rettype(#10520, #10024) +#10521 = @"C_builtin_function_or_method$_testcapi.pytime_object_to_timeval" +ext_rettype(#10521, #10037) +#10522 = @"C_builtin_function_or_method$_testcapi.pytime_object_to_timespec" +ext_rettype(#10522, #10037) +#10523 = @"C_builtin_function_or_method$_testcapi.call_in_temporary_c_thread" +ext_rettype(#10523, #10005) +#10524 = @"C_builtin_function_or_method$_json.scanstring" +ext_rettype(#10524, #10037) +#10525 = @"C_builtin_function_or_method$_sha512.sha512" +#10526 = @"C_type$_sha512.sha512" +ext_rettype(#10525, #10526) +#10527 = @"C_builtin_function_or_method$_sha512.sha384" +#10528 = @"C_type$_sha512.sha384" +ext_rettype(#10527, #10528) +#10529 = @"C_builtin_function_or_method$spwd.getspall" +ext_rettype(#10529, #10020) +#10530 = @"C_builtin_function_or_method$_elementtree.SubElement" +#10531 = @"C_type$xml.etree.ElementTree.Element" +ext_rettype(#10530, #10531) +#10532 = @"C_builtin_function_or_method$_ctypes.get_errno" +ext_rettype(#10532, #10024) +#10533 = @"C_builtin_function_or_method$_ctypes.set_errno" +ext_rettype(#10533, #10024) +#10534 = @"C_builtin_function_or_method$_ctypes.buffer_info" +ext_rettype(#10534, #10037) +#10535 = @"C_builtin_function_or_method$_ctypes.resize" +ext_rettype(#10535, #10005) +#10536 = @"C_builtin_function_or_method$_ctypes.dlopen" +ext_rettype(#10536, #10024) +#10537 = @"C_builtin_function_or_method$_ctypes.dlclose" +ext_rettype(#10537, #10005) +#10538 = @"C_builtin_function_or_method$_ctypes.dlsym" +ext_rettype(#10538, #10024) +#10539 = @"C_builtin_function_or_method$_ctypes.alignment" +ext_rettype(#10539, #10024) +#10540 = @"C_builtin_function_or_method$_ctypes.sizeof" +ext_rettype(#10540, #10024) +#10541 = @"C_builtin_function_or_method$_ctypes.byref" +#10542 = @"C_type$CArgObject" +ext_rettype(#10541, #10542) +#10543 = @"C_builtin_function_or_method$_ctypes.addressof" +ext_rettype(#10543, #10024) +#10544 = @"C_builtin_function_or_method$_ctypes.call_function" +ext_rettype(#10544, #10024) +ext_rettype(#10544, #10005) +#10545 = @"C_builtin_function_or_method$_ctypes.call_cdeclfunction" +ext_rettype(#10545, #10024) +ext_rettype(#10545, #10005) +#10546 = @"C_builtin_function_or_method$_ctypes_test.func_si" +ext_rettype(#10546, #10005) +#10547 = @"C_builtin_function_or_method$_ctypes_test.func" +ext_rettype(#10547, #10005) +#10548 = @"C_builtin_function_or_method$pwd.getpwall" +ext_rettype(#10548, #10020) +#10549 = @"C_builtin_function_or_method$zlib.adler32" +ext_rettype(#10549, #10024) +#10550 = @"C_builtin_function_or_method$zlib.compress" +ext_rettype(#10550, #10081) +#10551 = @"C_builtin_function_or_method$zlib.crc32" +ext_rettype(#10551, #10024) +#10552 = @"C_builtin_function_or_method$unicodedata.decimal" +ext_rettype(#10552, #10024) +#10553 = @"C_builtin_function_or_method$unicodedata.digit" +ext_rettype(#10553, #10024) +#10554 = @"C_builtin_function_or_method$unicodedata.numeric" +ext_rettype(#10554, #10001) +#10555 = @"C_builtin_function_or_method$unicodedata.combining" +ext_rettype(#10555, #10024) +#10556 = @"C_builtin_function_or_method$unicodedata.mirrored" +ext_rettype(#10556, #10024) +#10557 = @"C_builtin_function_or_method$unicodedata.decomposition" +ext_rettype(#10557, #10010) +#10558 = @"C_builtin_function_or_method$itertools.tee" +ext_rettype(#10558, #10037) +#10559 = @"C_builtin_function_or_method$math.atan2" +ext_rettype(#10559, #10001) +#10560 = @"C_builtin_function_or_method$math.copysign" +ext_rettype(#10560, #10001) +#10561 = @"C_builtin_function_or_method$math.degrees" +ext_rettype(#10561, #10001) +#10562 = @"C_builtin_function_or_method$math.erf" +ext_rettype(#10562, #10001) +#10563 = @"C_builtin_function_or_method$math.erfc" +ext_rettype(#10563, #10001) +#10564 = @"C_builtin_function_or_method$math.factorial" +ext_rettype(#10564, #10024) +#10565 = @"C_builtin_function_or_method$math.fmod" +ext_rettype(#10565, #10001) +#10566 = @"C_builtin_function_or_method$math.frexp" +ext_rettype(#10566, #10037) +#10567 = @"C_builtin_function_or_method$math.fsum" +ext_rettype(#10567, #10001) +#10568 = @"C_builtin_function_or_method$math.gamma" +ext_rettype(#10568, #10001) +#10569 = @"C_builtin_function_or_method$math.hypot" +ext_rettype(#10569, #10001) +#10570 = @"C_builtin_function_or_method$math.isfinite" +ext_rettype(#10570, #10050) +#10571 = @"C_builtin_function_or_method$math.isinf" +ext_rettype(#10571, #10050) +#10572 = @"C_builtin_function_or_method$math.isnan" +ext_rettype(#10572, #10050) +#10573 = @"C_builtin_function_or_method$math.ldexp" +ext_rettype(#10573, #10001) +#10574 = @"C_builtin_function_or_method$math.lgamma" +ext_rettype(#10574, #10001) +#10575 = @"C_builtin_function_or_method$math.log" +ext_rettype(#10575, #10001) +#10576 = @"C_builtin_function_or_method$math.log10" +ext_rettype(#10576, #10001) +#10577 = @"C_builtin_function_or_method$math.log2" +ext_rettype(#10577, #10001) +#10578 = @"C_builtin_function_or_method$math.modf" +ext_rettype(#10578, #10037) +#10579 = @"C_builtin_function_or_method$math.pow" +ext_rettype(#10579, #10001) +#10580 = @"C_builtin_function_or_method$math.radians" +ext_rettype(#10580, #10001) +#10581 = @"C_builtin_function_or_method$ossaudiodev.open" +#10582 = @"C_type$ossaudiodev.oss_audio_device" +ext_rettype(#10581, #10582) +#10583 = @"C_builtin_function_or_method$ossaudiodev.openmixer" +#10584 = @"C_type$ossaudiodev.oss_mixer_device" +ext_rettype(#10583, #10584) +#10585 = @"C_builtin_function_or_method$pyexpat.ParserCreate" +#10586 = @"C_type$pyexpat.xmlparser" +ext_rettype(#10585, #10586) +#10587 = @"C_builtin_function_or_method$pyexpat.ErrorString" +ext_rettype(#10587, #10010) +#10588 = @"C_builtin_function_or_method$_socket.gethostbyname_ex" +ext_rettype(#10588, #10037) +#10589 = @"C_builtin_function_or_method$_socket.gethostbyaddr" +ext_rettype(#10589, #10037) +#10590 = @"C_builtin_function_or_method$_socket.gethostname" +ext_rettype(#10590, #10010) +#10591 = @"C_builtin_function_or_method$_socket.sethostname" +ext_rettype(#10591, #10005) +#10592 = @"C_builtin_function_or_method$_socket.getservbyname" +ext_rettype(#10592, #10024) +#10593 = @"C_builtin_function_or_method$_socket.getprotobyname" +ext_rettype(#10593, #10024) +#10594 = @"C_builtin_function_or_method$_socket.dup" +ext_rettype(#10594, #10024) +#10595 = @"C_builtin_function_or_method$_socket.socketpair" +ext_rettype(#10595, #10037) +#10596 = @"C_builtin_function_or_method$_socket.ntohs" +ext_rettype(#10596, #10024) +#10597 = @"C_builtin_function_or_method$_socket.ntohl" +ext_rettype(#10597, #10024) +#10598 = @"C_builtin_function_or_method$_socket.htons" +ext_rettype(#10598, #10024) +#10599 = @"C_builtin_function_or_method$_socket.htonl" +ext_rettype(#10599, #10024) +#10600 = @"C_builtin_function_or_method$_socket.inet_aton" +ext_rettype(#10600, #10081) +#10601 = @"C_builtin_function_or_method$_socket.inet_pton" +ext_rettype(#10601, #10081) +#10602 = @"C_builtin_function_or_method$_socket.getaddrinfo" +ext_rettype(#10602, #10020) +#10603 = @"C_builtin_function_or_method$_socket.getnameinfo" +ext_rettype(#10603, #10037) +#10604 = @"C_builtin_function_or_method$_socket.getdefaulttimeout" +ext_rettype(#10604, #10001) +ext_rettype(#10604, #10005) +#10605 = @"C_builtin_function_or_method$_socket.setdefaulttimeout" +ext_rettype(#10605, #10005) +#10606 = @"C_builtin_function_or_method$_socket.if_nameindex" +ext_rettype(#10606, #10020) +#10607 = @"C_builtin_function_or_method$_socket.if_nametoindex" +ext_rettype(#10607, #10024) +#10608 = @"C_builtin_function_or_method$_socket.if_indextoname" +ext_rettype(#10608, #10010) +#10609 = @"C_builtin_function_or_method$_socket.CMSG_LEN" +ext_rettype(#10609, #10024) +#10610 = @"C_builtin_function_or_method$_socket.CMSG_SPACE" +ext_rettype(#10610, #10024) +#10611 = @"C_builtin_function_or_method$resource.getrlimit" +ext_rettype(#10611, #10037) +#10612 = @"C_builtin_function_or_method$resource.setrlimit" +ext_rettype(#10612, #10005) +#10613 = @"C_builtin_function_or_method$resource.getpagesize" +ext_rettype(#10613, #10024) +#10614 = @"C_builtin_function_or_method$_warnings.warn" +ext_rettype(#10614, #10005) +#10615 = @"C_builtin_function_or_method$_warnings.warn_explicit" +ext_rettype(#10615, #10005) +#10616 = @"C_builtin_function_or_method$sys.callstats" +ext_rettype(#10616, #10005) +#10617 = @"C_builtin_function_or_method$sys._clear_type_cache" +ext_rettype(#10617, #10005) +#10618 = @"C_builtin_function_or_method$sys._current_frames" +ext_rettype(#10618, #10111) +#10619 = @"C_builtin_function_or_method$sys.displayhook" +ext_rettype(#10619, #10005) +#10620 = @"C_builtin_function_or_method$sys.exc_info" +ext_rettype(#10620, #10037) +#10621 = @"C_builtin_function_or_method$sys.excepthook" +ext_rettype(#10621, #10005) +#10622 = @"C_builtin_function_or_method$sys.getdlopenflags" +ext_rettype(#10622, #10024) +#10623 = @"C_builtin_function_or_method$sys.getrefcount" +ext_rettype(#10623, #10024) +#10624 = @"C_builtin_function_or_method$sys.getrecursionlimit" +ext_rettype(#10624, #10024) +#10625 = @"C_builtin_function_or_method$sys._getframe" +#10626 = @"C_type$frame" +ext_rettype(#10625, #10626) +#10627 = @"C_builtin_function_or_method$sys.setcheckinterval" +ext_rettype(#10627, #10005) +#10628 = @"C_builtin_function_or_method$sys.getcheckinterval" +ext_rettype(#10628, #10024) +#10629 = @"C_builtin_function_or_method$sys.setswitchinterval" +ext_rettype(#10629, #10005) +#10630 = @"C_builtin_function_or_method$sys.getswitchinterval" +ext_rettype(#10630, #10001) +#10631 = @"C_builtin_function_or_method$sys.setdlopenflags" +ext_rettype(#10631, #10005) +#10632 = @"C_builtin_function_or_method$sys.setprofile" +ext_rettype(#10632, #10005) +#10633 = @"C_builtin_function_or_method$sys.getprofile" +ext_rettype(#10633, #10005) +#10634 = @"C_builtin_function_or_method$sys.setrecursionlimit" +ext_rettype(#10634, #10005) +#10635 = @"C_builtin_function_or_method$sys.settrace" +ext_rettype(#10635, #10005) +#10636 = @"C_builtin_function_or_method$sys.gettrace" +ext_rettype(#10636, #10005) +#10637 = @"C_builtin_function_or_method$sys._debugmallocstats" +ext_rettype(#10637, #10005) +#10638 = @"C_builtin_function_or_method$marshal.load" +ext_rettype(#10638, #10024) +ext_rettype(#10638, #10020) +ext_rettype(#10638, #10111) +ext_rettype(#10638, #10001) +ext_rettype(#10638, #10226) +ext_rettype(#10638, #10037) +ext_rettype(#10638, #10028) +ext_rettype(#10638, #10081) +ext_rettype(#10638, #10005) +ext_rettype(#10638, #10050) +#10639 = @"C_builtin_function_or_method$marshal.loads" +ext_rettype(#10639, #10024) +ext_rettype(#10639, #10020) +ext_rettype(#10639, #10111) +ext_rettype(#10639, #10001) +ext_rettype(#10639, #10226) +ext_rettype(#10639, #10037) +ext_rettype(#10639, #10028) +ext_rettype(#10639, #10081) +ext_rettype(#10639, #10005) +ext_rettype(#10639, #10050) +#10640 = @"C_builtin_function_or_method$_imp.extension_suffixes" +ext_rettype(#10640, #10020) +#10641 = @"C_builtin_function_or_method$_imp.lock_held" +ext_rettype(#10641, #10050) +#10642 = @"C_builtin_function_or_method$_imp.acquire_lock" +ext_rettype(#10642, #10005) +#10643 = @"C_builtin_function_or_method$_imp.release_lock" +ext_rettype(#10643, #10005) +#10644 = @"C_builtin_function_or_method$_imp.get_frozen_object" +ext_rettype(#10644, #10024) +ext_rettype(#10644, #10020) +ext_rettype(#10644, #10111) +ext_rettype(#10644, #10001) +ext_rettype(#10644, #10226) +ext_rettype(#10644, #10037) +ext_rettype(#10644, #10028) +ext_rettype(#10644, #10081) +ext_rettype(#10644, #10005) +ext_rettype(#10644, #10050) +#10645 = @"C_builtin_function_or_method$_imp.is_frozen_package" +ext_rettype(#10645, #10050) +#10646 = @"C_builtin_function_or_method$_imp.init_builtin" +#10647 = @"C_type$module" +ext_rettype(#10646, #10647) +ext_rettype(#10646, #10005) +#10648 = @"C_builtin_function_or_method$_imp.init_frozen" +ext_rettype(#10648, #10647) +ext_rettype(#10648, #10005) +#10649 = @"C_builtin_function_or_method$_imp.is_builtin" +ext_rettype(#10649, #10024) +#10650 = @"C_builtin_function_or_method$_imp.is_frozen" +ext_rettype(#10650, #10050) +#10651 = @"C_builtin_function_or_method$_imp.load_dynamic" +ext_rettype(#10651, #10647) +#10652 = @"C_builtin_function_or_method$_imp._fix_co_filename" +ext_rettype(#10652, #10005) +#10653 = @"C_builtin_function_or_method$builtins.all" +ext_rettype(#10653, #10050) +#10654 = @"C_builtin_function_or_method$builtins.any" +ext_rettype(#10654, #10050) +#10655 = @"C_builtin_function_or_method$builtins.callable" +ext_rettype(#10655, #10050) +#10656 = @"C_builtin_function_or_method$builtins.compile" +ext_rettype(#10656, #10028) +ext_rettype(#10656, #10005) +#10657 = @"C_builtin_function_or_method$builtins.delattr" +ext_rettype(#10657, #10005) +#10658 = @"C_builtin_function_or_method$builtins.exec" +ext_rettype(#10658, #10005) +#10659 = @"C_builtin_function_or_method$builtins.globals" +ext_rettype(#10659, #10111) +#10660 = @"C_builtin_function_or_method$builtins.hasattr" +ext_rettype(#10660, #10050) +#10661 = @"C_builtin_function_or_method$builtins.hash" +ext_rettype(#10661, #10024) +#10662 = @"C_builtin_function_or_method$builtins.id" +ext_rettype(#10662, #10024) +#10663 = @"C_builtin_function_or_method$builtins.isinstance" +ext_rettype(#10663, #10050) +#10664 = @"C_builtin_function_or_method$builtins.issubclass" +ext_rettype(#10664, #10050) +#10665 = @"C_builtin_function_or_method$builtins.iter" +#10666 = @"C_type$iterator" +ext_rettype(#10665, #10666) +#10667 = @"C_type$callable_iterator" +ext_rettype(#10665, #10667) +#10668 = @"C_builtin_function_or_method$builtins.len" +ext_rettype(#10668, #10024) +#10669 = @"C_builtin_function_or_method$builtins.locals" +ext_rettype(#10669, #10111) +#10670 = @"C_builtin_function_or_method$builtins.ord" +ext_rettype(#10670, #10024) +#10671 = @"C_builtin_function_or_method$builtins.print" +ext_rettype(#10671, #10005) +#10672 = @"C_builtin_function_or_method$builtins.setattr" +ext_rettype(#10672, #10005) +#10673 = @"C_builtin_function_or_method$builtins.sorted" +ext_rettype(#10673, #10020) +#10674 = @"C_builtin_function_or_method$builtins.sum" +ext_rettype(#10674, #10024) +ext_rettype(#10674, #10001) +#10675 = @"C_builtin_function_or_method$builtins.vars" +ext_rettype(#10675, #10111) +#10676 = @"C_builtin_function_or_method$_string.formatter_field_name_split" +ext_rettype(#10676, #10037) +#10677 = @"C_builtin_function_or_method$_string.formatter_parser" +#10678 = @"C_type$formatteriterator" +ext_rettype(#10677, #10678) +#10679 = @"C_type$_multiprocessing.SemLock$acquire" +ext_rettype(#10679, #10050) +#10680 = @"C_type$_multiprocessing.SemLock$release" +ext_rettype(#10680, #10005) +#10681 = @"C_type$_multiprocessing.SemLock$__enter__" +ext_rettype(#10681, #10050) +#10682 = @"C_type$_multiprocessing.SemLock$__exit__" +ext_rettype(#10682, #10005) +#10683 = @"C_type$_multiprocessing.SemLock$_count" +ext_rettype(#10683, #10024) +#10684 = @"C_type$_multiprocessing.SemLock$_is_mine" +ext_rettype(#10684, #10050) +#10685 = @"C_type$_multiprocessing.SemLock$_get_value" +ext_rettype(#10685, #10024) +#10686 = @"C_type$_multiprocessing.SemLock$_is_zero" +ext_rettype(#10686, #10050) +#10687 = @"C_type$_multiprocessing.SemLock$_after_fork" +ext_rettype(#10687, #10005) +#10688 = @"C_type$_random.Random$random" +ext_rettype(#10688, #10001) +#10689 = @"C_type$_random.Random$seed" +ext_rettype(#10689, #10005) +#10690 = @"C_type$_random.Random$getstate" +ext_rettype(#10690, #10037) +#10691 = @"C_type$_random.Random$setstate" +ext_rettype(#10691, #10005) +#10692 = @"C_type$_random.Random$getrandbits" +ext_rettype(#10692, #10024) +#10693 = @"C_type$_csv.writer$writerows" +ext_rettype(#10693, #10005) +#10694 = @"C_type$xxsubtype.spamlist$getstate" +ext_rettype(#10694, #10024) +#10695 = @"C_type$xxsubtype.spamlist$setstate" +ext_rettype(#10695, #10005) +#10696 = @"C_type$xxsubtype.spamlist$classmeth" +ext_rettype(#10696, #10037) +#10697 = @"C_type$xxsubtype.spamlist$staticmeth" +ext_rettype(#10697, #10037) +#10698 = @"C_type$xxsubtype.spamdict$getstate" +ext_rettype(#10698, #10024) +#10699 = @"C_type$xxsubtype.spamdict$setstate" +ext_rettype(#10699, #10005) +#10700 = @"C_type$_collections._deque_iterator$__length_hint__" +ext_rettype(#10700, #10024) +#10701 = @"C_type$_collections._deque_iterator$__reduce__" +ext_rettype(#10701, #10037) +#10702 = @"C_type$_collections._deque_reverse_iterator$__length_hint__" +ext_rettype(#10702, #10024) +#10703 = @"C_type$_collections._deque_reverse_iterator$__reduce__" +ext_rettype(#10703, #10037) +#10704 = @"C_type$collections.deque$append" +ext_rettype(#10704, #10005) +#10705 = @"C_type$collections.deque$appendleft" +ext_rettype(#10705, #10005) +#10706 = @"C_type$collections.deque$clear" +ext_rettype(#10706, #10005) +#10707 = @"C_type$collections.deque$count" +ext_rettype(#10707, #10024) +#10708 = @"C_type$collections.deque$extend" +ext_rettype(#10708, #10005) +#10709 = @"C_type$collections.deque$extendleft" +ext_rettype(#10709, #10005) +#10710 = @"C_type$collections.deque$__reduce__" +ext_rettype(#10710, #10037) +#10711 = @"C_type$collections.deque$remove" +ext_rettype(#10711, #10005) +#10712 = @"C_type$collections.deque$__reversed__" +#10713 = @"C_type$_collections._deque_reverse_iterator" +ext_rettype(#10712, #10713) +#10714 = @"C_type$collections.deque$reverse" +ext_rettype(#10714, #10005) +#10715 = @"C_type$collections.deque$rotate" +ext_rettype(#10715, #10005) +#10716 = @"C_type$collections.deque$__sizeof__" +ext_rettype(#10716, #10024) +#10717 = @"C_type$collections.defaultdict$__reduce__" +ext_rettype(#10717, #10037) +#10718 = @"C_type$parser.st$compile" +ext_rettype(#10718, #10028) +#10719 = @"C_type$parser.st$tolist" +ext_rettype(#10719, #10005) +#10720 = @"C_type$parser.st$totuple" +ext_rettype(#10720, #10005) +#10721 = @"C_type$parser.st$__sizeof__" +ext_rettype(#10721, #10024) +#10722 = @"C_type$decimal.Context$abs" +#10723 = @"C_type$decimal.Decimal" +ext_rettype(#10722, #10723) +#10724 = @"C_type$decimal.Context$exp" +ext_rettype(#10724, #10723) +#10725 = @"C_type$decimal.Context$ln" +ext_rettype(#10725, #10723) +#10726 = @"C_type$decimal.Context$log10" +ext_rettype(#10726, #10723) +#10727 = @"C_type$decimal.Context$minus" +ext_rettype(#10727, #10723) +#10728 = @"C_type$decimal.Context$next_minus" +ext_rettype(#10728, #10723) +#10729 = @"C_type$decimal.Context$next_plus" +ext_rettype(#10729, #10723) +#10730 = @"C_type$decimal.Context$normalize" +ext_rettype(#10730, #10723) +#10731 = @"C_type$decimal.Context$plus" +ext_rettype(#10731, #10723) +#10732 = @"C_type$decimal.Context$to_integral" +ext_rettype(#10732, #10723) +#10733 = @"C_type$decimal.Context$to_integral_exact" +ext_rettype(#10733, #10723) +#10734 = @"C_type$decimal.Context$to_integral_value" +ext_rettype(#10734, #10723) +#10735 = @"C_type$decimal.Context$sqrt" +ext_rettype(#10735, #10723) +#10736 = @"C_type$decimal.Context$add" +ext_rettype(#10736, #10723) +#10737 = @"C_type$decimal.Context$compare" +ext_rettype(#10737, #10723) +#10738 = @"C_type$decimal.Context$compare_signal" +ext_rettype(#10738, #10723) +#10739 = @"C_type$decimal.Context$divide" +ext_rettype(#10739, #10723) +#10740 = @"C_type$decimal.Context$divide_int" +ext_rettype(#10740, #10723) +#10741 = @"C_type$decimal.Context$divmod" +ext_rettype(#10741, #10037) +#10742 = @"C_type$decimal.Context$max" +ext_rettype(#10742, #10723) +#10743 = @"C_type$decimal.Context$max_mag" +ext_rettype(#10743, #10723) +#10744 = @"C_type$decimal.Context$min" +ext_rettype(#10744, #10723) +#10745 = @"C_type$decimal.Context$min_mag" +ext_rettype(#10745, #10723) +#10746 = @"C_type$decimal.Context$multiply" +ext_rettype(#10746, #10723) +#10747 = @"C_type$decimal.Context$next_toward" +ext_rettype(#10747, #10723) +#10748 = @"C_type$decimal.Context$quantize" +ext_rettype(#10748, #10723) +#10749 = @"C_type$decimal.Context$remainder" +ext_rettype(#10749, #10723) +#10750 = @"C_type$decimal.Context$remainder_near" +ext_rettype(#10750, #10723) +#10751 = @"C_type$decimal.Context$subtract" +ext_rettype(#10751, #10723) +#10752 = @"C_type$decimal.Context$power" +ext_rettype(#10752, #10723) +#10753 = @"C_type$decimal.Context$fma" +ext_rettype(#10753, #10723) +#10754 = @"C_type$decimal.Context$Etiny" +ext_rettype(#10754, #10024) +#10755 = @"C_type$decimal.Context$Etop" +ext_rettype(#10755, #10024) +#10756 = @"C_type$decimal.Context$radix" +ext_rettype(#10756, #10723) +#10757 = @"C_type$decimal.Context$_apply" +ext_rettype(#10757, #10723) +#10758 = @"C_type$decimal.Context$copy_abs" +ext_rettype(#10758, #10723) +#10759 = @"C_type$decimal.Context$copy_negate" +ext_rettype(#10759, #10723) +#10760 = @"C_type$decimal.Context$logb" +ext_rettype(#10760, #10723) +#10761 = @"C_type$decimal.Context$logical_invert" +ext_rettype(#10761, #10723) +#10762 = @"C_type$decimal.Context$compare_total" +ext_rettype(#10762, #10723) +#10763 = @"C_type$decimal.Context$compare_total_mag" +ext_rettype(#10763, #10723) +#10764 = @"C_type$decimal.Context$copy_sign" +ext_rettype(#10764, #10723) +#10765 = @"C_type$decimal.Context$logical_and" +ext_rettype(#10765, #10723) +#10766 = @"C_type$decimal.Context$logical_or" +ext_rettype(#10766, #10723) +#10767 = @"C_type$decimal.Context$logical_xor" +ext_rettype(#10767, #10723) +#10768 = @"C_type$decimal.Context$rotate" +ext_rettype(#10768, #10723) +#10769 = @"C_type$decimal.Context$scaleb" +ext_rettype(#10769, #10723) +#10770 = @"C_type$decimal.Context$shift" +ext_rettype(#10770, #10723) +#10771 = @"C_type$decimal.Context$clear_flags" +ext_rettype(#10771, #10005) +#10772 = @"C_type$decimal.Context$clear_traps" +ext_rettype(#10772, #10005) +#10773 = @"C_type$decimal.Context$__copy__" +ext_rettype(#10773, #10039) +#10774 = @"C_type$decimal.Context$__reduce__" +ext_rettype(#10774, #10037) +#10775 = @"C_type$decimal.Context$copy" +ext_rettype(#10775, #10039) +#10776 = @"C_type$decimal.Context$create_decimal" +ext_rettype(#10776, #10723) +#10777 = @"C_type$decimal.Context$create_decimal_from_float" +ext_rettype(#10777, #10723) +#10778 = @"C_type$decimal.Decimal$exp" +ext_rettype(#10778, #10723) +#10779 = @"C_type$decimal.Decimal$ln" +ext_rettype(#10779, #10723) +#10780 = @"C_type$decimal.Decimal$log10" +ext_rettype(#10780, #10723) +#10781 = @"C_type$decimal.Decimal$next_minus" +ext_rettype(#10781, #10723) +#10782 = @"C_type$decimal.Decimal$next_plus" +ext_rettype(#10782, #10723) +#10783 = @"C_type$decimal.Decimal$normalize" +ext_rettype(#10783, #10723) +#10784 = @"C_type$decimal.Decimal$to_integral" +ext_rettype(#10784, #10723) +#10785 = @"C_type$decimal.Decimal$to_integral_exact" +ext_rettype(#10785, #10723) +#10786 = @"C_type$decimal.Decimal$to_integral_value" +ext_rettype(#10786, #10723) +#10787 = @"C_type$decimal.Decimal$sqrt" +ext_rettype(#10787, #10723) +#10788 = @"C_type$decimal.Decimal$compare" +ext_rettype(#10788, #10723) +#10789 = @"C_type$decimal.Decimal$compare_signal" +ext_rettype(#10789, #10723) +#10790 = @"C_type$decimal.Decimal$max" +ext_rettype(#10790, #10723) +#10791 = @"C_type$decimal.Decimal$max_mag" +ext_rettype(#10791, #10723) +#10792 = @"C_type$decimal.Decimal$min" +ext_rettype(#10792, #10723) +#10793 = @"C_type$decimal.Decimal$min_mag" +ext_rettype(#10793, #10723) +#10794 = @"C_type$decimal.Decimal$next_toward" +ext_rettype(#10794, #10723) +#10795 = @"C_type$decimal.Decimal$quantize" +ext_rettype(#10795, #10723) +#10796 = @"C_type$decimal.Decimal$remainder_near" +ext_rettype(#10796, #10723) +#10797 = @"C_type$decimal.Decimal$fma" +ext_rettype(#10797, #10723) +#10798 = @"C_type$decimal.Decimal$adjusted" +ext_rettype(#10798, #10024) +#10799 = @"C_type$decimal.Decimal$radix" +ext_rettype(#10799, #10723) +#10800 = @"C_type$decimal.Decimal$copy_abs" +ext_rettype(#10800, #10723) +#10801 = @"C_type$decimal.Decimal$copy_negate" +ext_rettype(#10801, #10723) +#10802 = @"C_type$decimal.Decimal$logb" +ext_rettype(#10802, #10723) +#10803 = @"C_type$decimal.Decimal$logical_invert" +ext_rettype(#10803, #10723) +#10804 = @"C_type$decimal.Decimal$compare_total" +ext_rettype(#10804, #10723) +#10805 = @"C_type$decimal.Decimal$compare_total_mag" +ext_rettype(#10805, #10723) +#10806 = @"C_type$decimal.Decimal$copy_sign" +ext_rettype(#10806, #10723) +#10807 = @"C_type$decimal.Decimal$logical_and" +ext_rettype(#10807, #10723) +#10808 = @"C_type$decimal.Decimal$logical_or" +ext_rettype(#10808, #10723) +#10809 = @"C_type$decimal.Decimal$logical_xor" +ext_rettype(#10809, #10723) +#10810 = @"C_type$decimal.Decimal$rotate" +ext_rettype(#10810, #10723) +#10811 = @"C_type$decimal.Decimal$scaleb" +ext_rettype(#10811, #10723) +#10812 = @"C_type$decimal.Decimal$shift" +ext_rettype(#10812, #10723) +#10813 = @"C_type$decimal.Decimal$from_float" +ext_rettype(#10813, #10723) +#10814 = @"C_type$decimal.Decimal$__reduce__" +ext_rettype(#10814, #10037) +#10815 = @"C_type$decimal.Decimal$__round__" +ext_rettype(#10815, #10024) +ext_rettype(#10815, #10723) +#10816 = @"C_type$decimal.Decimal$__ceil__" +ext_rettype(#10816, #10024) +#10817 = @"C_type$decimal.Decimal$__floor__" +ext_rettype(#10817, #10024) +#10818 = @"C_type$decimal.Decimal$__trunc__" +ext_rettype(#10818, #10024) +#10819 = @"C_type$decimal.Decimal$__complex__" +ext_rettype(#10819, #10226) +#10820 = @"C_type$decimal.Decimal$__sizeof__" +ext_rettype(#10820, #10024) +#10821 = @"C_type$decimal.ContextManager$__exit__" +ext_rettype(#10821, #10005) +#10822 = @"C_type$decimal.SignalDictMixin$copy" +ext_rettype(#10822, #10111) +#10823 = @"C_type$zipimport.zipimporter$find_module" +ext_rettype(#10823, #10005) +#10824 = @"C_type$zipimport.zipimporter$find_loader" +ext_rettype(#10824, #10037) +#10825 = @"C_type$zipimport.zipimporter$get_data" +ext_rettype(#10825, #10081) +#10826 = @"C_type$zipimport.zipimporter$get_code" +ext_rettype(#10826, #10024) +ext_rettype(#10826, #10020) +ext_rettype(#10826, #10111) +ext_rettype(#10826, #10001) +ext_rettype(#10826, #10226) +ext_rettype(#10826, #10037) +ext_rettype(#10826, #10028) +ext_rettype(#10826, #10081) +ext_rettype(#10826, #10005) +ext_rettype(#10826, #10050) +#10827 = @"C_type$zipimport.zipimporter$get_source" +ext_rettype(#10827, #10010) +ext_rettype(#10827, #10005) +#10828 = @"C_type$zipimport.zipimporter$is_package" +ext_rettype(#10828, #10050) +#10829 = @"C_type$arrayiterator$33__reduce__" +ext_rettype(#10829, #10037) +#10830 = @"C_type$arrayiterator$3__setstate__" +ext_rettype(#10830, #10005) +#10831 = @"C_type$array.array$append" +ext_rettype(#10831, #10005) +#10832 = @"C_type$array.array$buffer_info" +ext_rettype(#10832, #10037) +#10833 = @"C_type$array.array$byteswap" +ext_rettype(#10833, #10005) +#10834 = @"C_type$array.array$count" +ext_rettype(#10834, #10024) +#10835 = @"C_type$array.array$extend" +ext_rettype(#10835, #10005) +#10836 = @"C_type$array.array$fromfile" +ext_rettype(#10836, #10005) +#10837 = @"C_type$array.array$fromlist" +ext_rettype(#10837, #10005) +#10838 = @"C_type$array.array$fromstring" +ext_rettype(#10838, #10005) +#10839 = @"C_type$array.array$frombytes" +ext_rettype(#10839, #10005) +#10840 = @"C_type$array.array$fromunicode" +ext_rettype(#10840, #10005) +#10841 = @"C_type$array.array$index" +ext_rettype(#10841, #10024) +#10842 = @"C_type$array.array$insert" +ext_rettype(#10842, #10005) +#10843 = @"C_type$array.array$__reduce_ex__" +ext_rettype(#10843, #10037) +#10844 = @"C_type$array.array$remove" +ext_rettype(#10844, #10005) +#10845 = @"C_type$array.array$reverse" +ext_rettype(#10845, #10005) +#10846 = @"C_type$array.array$tofile" +ext_rettype(#10846, #10005) +#10847 = @"C_type$array.array$tolist" +ext_rettype(#10847, #10020) +#10848 = @"C_type$array.array$tostring" +ext_rettype(#10848, #10081) +#10849 = @"C_type$array.array$tobytes" +ext_rettype(#10849, #10081) +#10850 = @"C_type$array.array$tounicode" +ext_rettype(#10850, #10010) +#10851 = @"C_type$array.array$__sizeof__" +ext_rettype(#10851, #10024) +#10852 = @"C_type$MultibyteCodec$3encode" +ext_rettype(#10852, #10037) +#10853 = @"C_type$MultibyteCodec$3decode" +ext_rettype(#10853, #10037) +#10854 = @"C_type$MultibyteIncrementalEncoder$3encode" +ext_rettype(#10854, #10081) +#10855 = @"C_type$MultibyteIncrementalEncoder$3reset" +ext_rettype(#10855, #10005) +#10856 = @"C_type$MultibyteIncrementalDecoder$3reset" +ext_rettype(#10856, #10005) +#10857 = @"C_type$MultibyteStreamReader$3readlines" +ext_rettype(#10857, #10020) +#10858 = @"C_type$MultibyteStreamReader$3reset" +ext_rettype(#10858, #10005) +#10859 = @"C_type$MultibyteStreamWriter$3write" +ext_rettype(#10859, #10005) +#10860 = @"C_type$MultibyteStreamWriter$3writelines" +ext_rettype(#10860, #10005) +#10861 = @"C_type$MultibyteStreamWriter$3reset" +ext_rettype(#10861, #10005) +#10862 = @"C_type$Struct$3pack" +ext_rettype(#10862, #10081) +#10863 = @"C_type$Struct$3pack_into" +ext_rettype(#10863, #10005) +#10864 = @"C_type$Struct$3unpack" +ext_rettype(#10864, #10037) +#10865 = @"C_type$Struct$3unpack_from" +ext_rettype(#10865, #10037) +#10866 = @"C_type$Struct$3__sizeof__" +ext_rettype(#10866, #10024) +#10867 = @"C_type$_ssl._SSLContext$_wrap_socket" +#10868 = @"C_type$_ssl._SSLSocket" +ext_rettype(#10867, #10868) +#10869 = @"C_type$_ssl._SSLContext$set_ciphers" +ext_rettype(#10869, #10005) +#10870 = @"C_type$_ssl._SSLContext$_set_npn_protocols" +ext_rettype(#10870, #10005) +#10871 = @"C_type$_ssl._SSLContext$load_cert_chain" +ext_rettype(#10871, #10005) +#10872 = @"C_type$_ssl._SSLContext$load_dh_params" +ext_rettype(#10872, #10005) +#10873 = @"C_type$_ssl._SSLContext$load_verify_locations" +ext_rettype(#10873, #10005) +#10874 = @"C_type$_ssl._SSLContext$session_stats" +ext_rettype(#10874, #10111) +#10875 = @"C_type$_ssl._SSLContext$set_default_verify_paths" +ext_rettype(#10875, #10005) +#10876 = @"C_type$_ssl._SSLContext$set_ecdh_curve" +ext_rettype(#10876, #10005) +#10877 = @"C_type$_ssl._SSLSocket$do_handshake" +ext_rettype(#10877, #10005) +#10878 = @"C_type$_ssl._SSLSocket$write" +ext_rettype(#10878, #10024) +#10879 = @"C_type$_ssl._SSLSocket$read" +ext_rettype(#10879, #10024) +#10880 = @"C_type$_ssl._SSLSocket$pending" +ext_rettype(#10880, #10024) +#10881 = @"C_type$_ssl._SSLSocket$peer_certificate" +ext_rettype(#10881, #10111) +ext_rettype(#10881, #10081) +ext_rettype(#10881, #10005) +#10882 = @"C_type$_ssl._SSLSocket$cipher" +ext_rettype(#10882, #10037) +ext_rettype(#10882, #10005) +#10883 = @"C_type$_ssl._SSLSocket$selected_npn_protocol" +ext_rettype(#10883, #10010) +ext_rettype(#10883, #10005) +#10884 = @"C_type$_ssl._SSLSocket$compression" +ext_rettype(#10884, #10010) +ext_rettype(#10884, #10005) +#10885 = @"C_type$_ssl._SSLSocket$shutdown" +#10886 = @"C_type$_socket.socket" +ext_rettype(#10885, #10886) +#10887 = @"C_type$_ssl._SSLSocket$tls_unique_cb" +ext_rettype(#10887, #10081) +ext_rettype(#10887, #10005) +#10888 = @"C_type$_thread.lock$acquire_lock" +ext_rettype(#10888, #10050) +#10889 = @"C_type$_thread.lock$acquire" +ext_rettype(#10889, #10050) +#10890 = @"C_type$_thread.lock$release_lock" +ext_rettype(#10890, #10005) +#10891 = @"C_type$_thread.lock$release" +ext_rettype(#10891, #10005) +#10892 = @"C_type$_thread.lock$locked_lock" +ext_rettype(#10892, #10050) +#10893 = @"C_type$_thread.lock$locked" +ext_rettype(#10893, #10050) +#10894 = @"C_type$_thread.lock$__enter__" +ext_rettype(#10894, #10050) +#10895 = @"C_type$_thread.lock$__exit__" +ext_rettype(#10895, #10005) +#10896 = @"C_type$_thread.RLock$acquire" +ext_rettype(#10896, #10050) +#10897 = @"C_type$_thread.RLock$release" +ext_rettype(#10897, #10005) +#10898 = @"C_type$_thread.RLock$_is_owned" +ext_rettype(#10898, #10050) +#10899 = @"C_type$_thread.RLock$_acquire_restore" +ext_rettype(#10899, #10005) +#10900 = @"C_type$_thread.RLock$_release_save" +ext_rettype(#10900, #10037) +#10901 = @"C_type$_thread.RLock$__enter__" +ext_rettype(#10901, #10050) +#10902 = @"C_type$_thread.RLock$__exit__" +ext_rettype(#10902, #10005) +#10903 = @"C_type$_hashlib.HASH$update" +ext_rettype(#10903, #10005) +#10904 = @"C_type$_hashlib.HASH$digest" +ext_rettype(#10904, #10081) +#10905 = @"C_type$_hashlib.HASH$hexdigest" +ext_rettype(#10905, #10010) +#10906 = @"C_type$_hashlib.HASH$copy" +ext_rettype(#10906, #10169) +#10907 = @"C_type$_sha256.sha256$copy" +ext_rettype(#10907, #10189) +ext_rettype(#10907, #10191) +#10908 = @"C_type$_sha256.sha256$digest" +ext_rettype(#10908, #10081) +#10909 = @"C_type$_sha256.sha256$update" +ext_rettype(#10909, #10005) +#10910 = @"C_type$_sha256.sha224$copy" +ext_rettype(#10910, #10189) +ext_rettype(#10910, #10191) +#10911 = @"C_type$_sha256.sha224$digest" +ext_rettype(#10911, #10081) +#10912 = @"C_type$_sha256.sha224$update" +ext_rettype(#10912, #10005) +#10913 = @"C_type$functools.partial$__reduce__" +ext_rettype(#10913, #10037) +#10914 = @"C_type$functools.partial$__setstate__" +ext_rettype(#10914, #10005) +#10915 = @"C_type$_pickle.Pickler$dump" +ext_rettype(#10915, #10005) +#10916 = @"C_type$_pickle.Pickler$clear_memo" +ext_rettype(#10916, #10005) +#10917 = @"C_type$_pickle.PicklerMemoProxy$clear" +ext_rettype(#10917, #10005) +#10918 = @"C_type$_pickle.PicklerMemoProxy$copy" +ext_rettype(#10918, #10111) +#10919 = @"C_type$_pickle.PicklerMemoProxy$__reduce__" +ext_rettype(#10919, #10037) +#10920 = @"C_type$_pickle.UnpicklerMemoProxy$clear" +ext_rettype(#10920, #10005) +#10921 = @"C_type$_pickle.UnpicklerMemoProxy$copy" +ext_rettype(#10921, #10111) +#10922 = @"C_type$_pickle.UnpicklerMemoProxy$__reduce__" +ext_rettype(#10922, #10037) +#10923 = @"C_type$_md5.md5$copy" +ext_rettype(#10923, #10223) +#10924 = @"C_type$_md5.md5$digest" +ext_rettype(#10924, #10081) +#10925 = @"C_type$_md5.md5$update" +ext_rettype(#10925, #10005) +#10926 = @"C_type$_sha1.sha1$copy" +ext_rettype(#10926, #10249) +#10927 = @"C_type$_sha1.sha1$digest" +ext_rettype(#10927, #10081) +#10928 = @"C_type$_sha1.sha1$update" +ext_rettype(#10928, #10005) +#10929 = @"C_type$_sre.SRE_Match$group" +ext_rettype(#10929, #10037) +#10930 = @"C_type$_sre.SRE_Match$start" +ext_rettype(#10930, #10024) +#10931 = @"C_type$_sre.SRE_Match$end" +ext_rettype(#10931, #10024) +#10932 = @"C_type$_sre.SRE_Match$span" +ext_rettype(#10932, #10037) +#10933 = @"C_type$_sre.SRE_Match$groups" +ext_rettype(#10933, #10037) +#10934 = @"C_type$_sre.SRE_Match$groupdict" +ext_rettype(#10934, #10111) +#10935 = @"C_type$_sre.SRE_Scanner$match" +ext_rettype(#10935, #10005) +#10936 = @"C_type$_sre.SRE_Scanner$search" +ext_rettype(#10936, #10005) +#10937 = @"C_type$_sre.SRE_Pattern$match" +ext_rettype(#10937, #10005) +#10938 = @"C_type$_sre.SRE_Pattern$search" +ext_rettype(#10938, #10005) +#10939 = @"C_type$_sre.SRE_Pattern$sub" +ext_rettype(#10939, #10037) +#10940 = @"C_type$_sre.SRE_Pattern$subn" +ext_rettype(#10940, #10037) +#10941 = @"C_type$_sre.SRE_Pattern$split" +ext_rettype(#10941, #10020) +#10942 = @"C_type$_sre.SRE_Pattern$findall" +ext_rettype(#10942, #10020) +#10943 = @"C_type$_sre.SRE_Pattern$finditer" +ext_rettype(#10943, #10667) +#10944 = @"C_type$datetime.timedelta$__reduce__" +ext_rettype(#10944, #10037) +#10945 = @"C_type$datetime.tzinfo$__reduce__" +ext_rettype(#10945, #10037) +#10946 = @"C_type$datetime.datetime$timestamp" +ext_rettype(#10946, #10001) +#10947 = @"C_type$datetime.datetime$utcoffset" +ext_rettype(#10947, #10005) +#10948 = @"C_type$datetime.datetime$tzname" +ext_rettype(#10948, #10005) +#10949 = @"C_type$datetime.datetime$dst" +ext_rettype(#10949, #10005) +#10950 = @"C_type$datetime.datetime$__reduce__" +ext_rettype(#10950, #10037) +#10951 = @"C_type$datetime.time$utcoffset" +ext_rettype(#10951, #10005) +#10952 = @"C_type$datetime.time$tzname" +ext_rettype(#10952, #10005) +#10953 = @"C_type$datetime.time$dst" +ext_rettype(#10953, #10005) +#10954 = @"C_type$datetime.time$__reduce__" +ext_rettype(#10954, #10037) +#10955 = @"C_type$datetime.timezone$dst" +ext_rettype(#10955, #10005) +#10956 = @"C_type$datetime.timezone$__getinitargs__" +ext_rettype(#10956, #10037) +#10957 = @"C_type$datetime.date$isocalendar" +ext_rettype(#10957, #10037) +#10958 = @"C_type$datetime.date$isoweekday" +ext_rettype(#10958, #10024) +#10959 = @"C_type$datetime.date$toordinal" +ext_rettype(#10959, #10024) +#10960 = @"C_type$datetime.date$weekday" +ext_rettype(#10960, #10024) +#10961 = @"C_type$datetime.date$__reduce__" +ext_rettype(#10961, #10037) +#10962 = @"C_type$ndarray$3tolist" +ext_rettype(#10962, #10020) +#10963 = @"C_type$ndarray$3tobytes" +ext_rettype(#10963, #10081) +#10964 = @"C_type$ndarray$3push" +ext_rettype(#10964, #10005) +#10965 = @"C_type$ndarray$3pop" +ext_rettype(#10965, #10005) +#10966 = @"C_type$ndarray$3add_suboffsets" +ext_rettype(#10966, #10005) +#10967 = @"C_type$ndarray$3memoryview_from_buffer" +ext_rettype(#10967, #10407) +#10968 = @"C_type$mmap.mmap$close" +ext_rettype(#10968, #10005) +#10969 = @"C_type$mmap.mmap$find" +ext_rettype(#10969, #10024) +#10970 = @"C_type$mmap.mmap$rfind" +ext_rettype(#10970, #10024) +#10971 = @"C_type$mmap.mmap$flush" +ext_rettype(#10971, #10024) +#10972 = @"C_type$mmap.mmap$move" +ext_rettype(#10972, #10005) +#10973 = @"C_type$mmap.mmap$read" +ext_rettype(#10973, #10081) +#10974 = @"C_type$mmap.mmap$read_byte" +ext_rettype(#10974, #10024) +#10975 = @"C_type$mmap.mmap$readline" +ext_rettype(#10975, #10081) +#10976 = @"C_type$mmap.mmap$resize" +ext_rettype(#10976, #10005) +#10977 = @"C_type$mmap.mmap$seek" +ext_rettype(#10977, #10005) +#10978 = @"C_type$mmap.mmap$size" +ext_rettype(#10978, #10024) +#10979 = @"C_type$mmap.mmap$tell" +ext_rettype(#10979, #10024) +#10980 = @"C_type$mmap.mmap$write" +ext_rettype(#10980, #10005) +#10981 = @"C_type$mmap.mmap$write_byte" +ext_rettype(#10981, #10005) +#10982 = @"C_type$select.poll$register" +ext_rettype(#10982, #10005) +#10983 = @"C_type$select.poll$modify" +ext_rettype(#10983, #10005) +#10984 = @"C_type$select.poll$unregister" +ext_rettype(#10984, #10005) +#10985 = @"C_type$select.poll$poll" +ext_rettype(#10985, #10020) +#10986 = @"C_type$select.epoll$close" +ext_rettype(#10986, #10005) +#10987 = @"C_type$select.epoll$fileno" +ext_rettype(#10987, #10024) +#10988 = @"C_type$select.epoll$modify" +ext_rettype(#10988, #10005) +#10989 = @"C_type$select.epoll$register" +ext_rettype(#10989, #10005) +#10990 = @"C_type$select.epoll$unregister" +ext_rettype(#10990, #10005) +#10991 = @"C_type$select.epoll$poll" +ext_rettype(#10991, #10020) +#10992 = @"C_type$_io.IncrementalNewlineDecoder$getstate" +ext_rettype(#10992, #10037) +#10993 = @"C_type$_io.IncrementalNewlineDecoder$setstate" +ext_rettype(#10993, #10005) +#10994 = @"C_type$_io.IncrementalNewlineDecoder$reset" +ext_rettype(#10994, #10005) +#10995 = @"C_type$_io.TextIOWrapper$write" +ext_rettype(#10995, #10024) +#10996 = @"C_type$_io.TextIOWrapper$close" +ext_rettype(#10996, #10005) +#10997 = @"C_type$_io.TextIOWrapper$tell" +ext_rettype(#10997, #10024) +#10998 = @"C_type$_io.BytesIO$readable" +ext_rettype(#10998, #10050) +#10999 = @"C_type$_io.BytesIO$seekable" +ext_rettype(#10999, #10050) +#11000 = @"C_type$_io.BytesIO$writable" +ext_rettype(#11000, #10050) +#11001 = @"C_type$_io.BytesIO$close" +ext_rettype(#11001, #10005) +#11002 = @"C_type$_io.BytesIO$flush" +ext_rettype(#11002, #10005) +#11003 = @"C_type$_io.BytesIO$isatty" +ext_rettype(#11003, #10050) +#11004 = @"C_type$_io.BytesIO$tell" +ext_rettype(#11004, #10024) +#11005 = @"C_type$_io.BytesIO$write" +ext_rettype(#11005, #10024) +#11006 = @"C_type$_io.BytesIO$writelines" +ext_rettype(#11006, #10005) +#11007 = @"C_type$_io.BytesIO$read1" +ext_rettype(#11007, #10081) +#11008 = @"C_type$_io.BytesIO$readinto" +ext_rettype(#11008, #10024) +#11009 = @"C_type$_io.BytesIO$readline" +ext_rettype(#11009, #10081) +#11010 = @"C_type$_io.BytesIO$readlines" +ext_rettype(#11010, #10020) +#11011 = @"C_type$_io.BytesIO$read" +ext_rettype(#11011, #10081) +#11012 = @"C_type$_io.BytesIO$getbuffer" +ext_rettype(#11012, #10407) +#11013 = @"C_type$_io.BytesIO$getvalue" +ext_rettype(#11013, #10081) +#11014 = @"C_type$_io.BytesIO$seek" +ext_rettype(#11014, #10024) +#11015 = @"C_type$_io.BytesIO$truncate" +ext_rettype(#11015, #10024) +#11016 = @"C_type$_io.BytesIO$__getstate__" +ext_rettype(#11016, #10037) +#11017 = @"C_type$_io.BytesIO$__setstate__" +ext_rettype(#11017, #10005) +#11018 = @"C_type$_io.BytesIO$__sizeof__" +ext_rettype(#11018, #10024) +#11019 = @"C_type$_io._IOBase$flush" +ext_rettype(#11019, #10005) +#11020 = @"C_type$_io._IOBase$close" +ext_rettype(#11020, #10005) +#11021 = @"C_type$_io._IOBase$seekable" +ext_rettype(#11021, #10050) +#11022 = @"C_type$_io._IOBase$readable" +ext_rettype(#11022, #10050) +#11023 = @"C_type$_io._IOBase$writable" +ext_rettype(#11023, #10050) +#11024 = @"C_type$_io._IOBase$_checkClosed" +ext_rettype(#11024, #10005) +#11025 = @"C_type$_io._IOBase$isatty" +ext_rettype(#11025, #10050) +#11026 = @"C_type$_io._IOBase$readline" +ext_rettype(#11026, #10081) +#11027 = @"C_type$_io._IOBase$readlines" +ext_rettype(#11027, #10020) +#11028 = @"C_type$_io._IOBase$writelines" +ext_rettype(#11028, #10005) +#11029 = @"C_type$_io._RawIOBase$read" +ext_rettype(#11029, #10081) +#11030 = @"C_type$_io._RawIOBase$readall" +ext_rettype(#11030, #10081) +#11031 = @"C_type$_io._BufferedIOBase$readinto" +ext_rettype(#11031, #10024) +#11032 = @"C_type$_io.BufferedReader$close" +ext_rettype(#11032, #10005) +#11033 = @"C_type$_io.BufferedReader$_dealloc_warn" +ext_rettype(#11033, #10005) +#11034 = @"C_type$_io.BufferedReader$read" +ext_rettype(#11034, #10081) +ext_rettype(#11034, #10005) +#11035 = @"C_type$_io.BufferedReader$peek" +ext_rettype(#11035, #10081) +ext_rettype(#11035, #10005) +#11036 = @"C_type$_io.BufferedReader$read1" +ext_rettype(#11036, #10081) +#11037 = @"C_type$_io.BufferedReader$readinto" +ext_rettype(#11037, #10024) +ext_rettype(#11037, #10005) +#11038 = @"C_type$_io.BufferedReader$readline" +ext_rettype(#11038, #10081) +#11039 = @"C_type$_io.BufferedReader$seek" +ext_rettype(#11039, #10024) +ext_rettype(#11039, #10005) +#11040 = @"C_type$_io.BufferedReader$tell" +ext_rettype(#11040, #10024) +#11041 = @"C_type$_io.BufferedReader$truncate" +ext_rettype(#11041, #10005) +#11042 = @"C_type$_io.BufferedReader$__sizeof__" +ext_rettype(#11042, #10024) +#11043 = @"C_type$_io.BufferedRandom$close" +ext_rettype(#11043, #10005) +#11044 = @"C_type$_io.BufferedRandom$_dealloc_warn" +ext_rettype(#11044, #10005) +#11045 = @"C_type$_io.BufferedRandom$flush" +ext_rettype(#11045, #10005) +#11046 = @"C_type$_io.BufferedRandom$seek" +ext_rettype(#11046, #10024) +ext_rettype(#11046, #10005) +#11047 = @"C_type$_io.BufferedRandom$tell" +ext_rettype(#11047, #10024) +#11048 = @"C_type$_io.BufferedRandom$truncate" +ext_rettype(#11048, #10005) +#11049 = @"C_type$_io.BufferedRandom$read" +ext_rettype(#11049, #10081) +ext_rettype(#11049, #10005) +#11050 = @"C_type$_io.BufferedRandom$read1" +ext_rettype(#11050, #10081) +#11051 = @"C_type$_io.BufferedRandom$readinto" +ext_rettype(#11051, #10024) +ext_rettype(#11051, #10005) +#11052 = @"C_type$_io.BufferedRandom$readline" +ext_rettype(#11052, #10081) +#11053 = @"C_type$_io.BufferedRandom$peek" +ext_rettype(#11053, #10081) +ext_rettype(#11053, #10005) +#11054 = @"C_type$_io.BufferedRandom$write" +ext_rettype(#11054, #10024) +ext_rettype(#11054, #10005) +#11055 = @"C_type$_io.BufferedRandom$__sizeof__" +ext_rettype(#11055, #10024) +#11056 = @"C_type$_io.BufferedWriter$close" +ext_rettype(#11056, #10005) +#11057 = @"C_type$_io.BufferedWriter$_dealloc_warn" +ext_rettype(#11057, #10005) +#11058 = @"C_type$_io.BufferedWriter$write" +ext_rettype(#11058, #10024) +ext_rettype(#11058, #10005) +#11059 = @"C_type$_io.BufferedWriter$truncate" +ext_rettype(#11059, #10005) +#11060 = @"C_type$_io.BufferedWriter$flush" +ext_rettype(#11060, #10005) +#11061 = @"C_type$_io.BufferedWriter$seek" +ext_rettype(#11061, #10024) +ext_rettype(#11061, #10005) +#11062 = @"C_type$_io.BufferedWriter$tell" +ext_rettype(#11062, #10024) +#11063 = @"C_type$_io.BufferedWriter$__sizeof__" +ext_rettype(#11063, #10024) +#11064 = @"C_type$_io.StringIO$close" +ext_rettype(#11064, #10005) +#11065 = @"C_type$_io.StringIO$tell" +ext_rettype(#11065, #10024) +#11066 = @"C_type$_io.StringIO$truncate" +ext_rettype(#11066, #10024) +#11067 = @"C_type$_io.StringIO$seek" +ext_rettype(#11067, #10024) +#11068 = @"C_type$_io.StringIO$write" +ext_rettype(#11068, #10024) +#11069 = @"C_type$_io.StringIO$seekable" +ext_rettype(#11069, #10050) +#11070 = @"C_type$_io.StringIO$readable" +ext_rettype(#11070, #10050) +#11071 = @"C_type$_io.StringIO$writable" +ext_rettype(#11071, #10050) +#11072 = @"C_type$_io.StringIO$__getstate__" +ext_rettype(#11072, #10037) +#11073 = @"C_type$_io.StringIO$__setstate__" +ext_rettype(#11073, #10005) +#11074 = @"C_type$_io.FileIO$read" +ext_rettype(#11074, #10005) +#11075 = @"C_type$_io.FileIO$readall" +ext_rettype(#11075, #10005) +#11076 = @"C_type$_io.FileIO$readinto" +ext_rettype(#11076, #10024) +ext_rettype(#11076, #10005) +#11077 = @"C_type$_io.FileIO$write" +ext_rettype(#11077, #10024) +ext_rettype(#11077, #10005) +#11078 = @"C_type$_io.FileIO$seek" +ext_rettype(#11078, #10024) +#11079 = @"C_type$_io.FileIO$tell" +ext_rettype(#11079, #10024) +#11080 = @"C_type$_io.FileIO$close" +ext_rettype(#11080, #10005) +#11081 = @"C_type$_io.FileIO$seekable" +ext_rettype(#11081, #10050) +#11082 = @"C_type$_io.FileIO$readable" +ext_rettype(#11082, #10050) +#11083 = @"C_type$_io.FileIO$writable" +ext_rettype(#11083, #10050) +#11084 = @"C_type$_io.FileIO$fileno" +ext_rettype(#11084, #10024) +#11085 = @"C_type$_io.FileIO$isatty" +ext_rettype(#11085, #10050) +#11086 = @"C_type$_io.FileIO$_dealloc_warn" +ext_rettype(#11086, #10005) +#11087 = @"C_type$_sha512.sha512$copy" +ext_rettype(#11087, #10526) +ext_rettype(#11087, #10528) +#11088 = @"C_type$_sha512.sha512$digest" +ext_rettype(#11088, #10081) +#11089 = @"C_type$_sha512.sha512$update" +ext_rettype(#11089, #10005) +#11090 = @"C_type$_sha512.sha384$copy" +ext_rettype(#11090, #10526) +ext_rettype(#11090, #10528) +#11091 = @"C_type$_sha512.sha384$digest" +ext_rettype(#11091, #10081) +#11092 = @"C_type$_sha512.sha384$update" +ext_rettype(#11092, #10005) +#11093 = @"C_type$_lsprof.Profiler$enable" +ext_rettype(#11093, #10005) +#11094 = @"C_type$_lsprof.Profiler$disable" +ext_rettype(#11094, #10005) +#11095 = @"C_type$_lsprof.Profiler$clear" +ext_rettype(#11095, #10005) +#11096 = @"C_type$xml.etree.ElementTree.Element$clear" +ext_rettype(#11096, #10005) +#11097 = @"C_type$xml.etree.ElementTree.Element$set" +ext_rettype(#11097, #10005) +#11098 = @"C_type$xml.etree.ElementTree.Element$find" +ext_rettype(#11098, #10005) +#11099 = @"C_type$xml.etree.ElementTree.Element$findall" +ext_rettype(#11099, #10020) +#11100 = @"C_type$xml.etree.ElementTree.Element$append" +ext_rettype(#11100, #10005) +#11101 = @"C_type$xml.etree.ElementTree.Element$extend" +ext_rettype(#11101, #10005) +#11102 = @"C_type$xml.etree.ElementTree.Element$insert" +ext_rettype(#11102, #10005) +#11103 = @"C_type$xml.etree.ElementTree.Element$remove" +ext_rettype(#11103, #10005) +#11104 = @"C_type$xml.etree.ElementTree.Element$iter" +#11105 = @"C_type$_elementtree._element_iterator" +ext_rettype(#11104, #11105) +#11106 = @"C_type$xml.etree.ElementTree.Element$itertext" +ext_rettype(#11106, #11105) +#11107 = @"C_type$xml.etree.ElementTree.Element$getiterator" +ext_rettype(#11107, #11105) +#11108 = @"C_type$xml.etree.ElementTree.Element$getchildren" +ext_rettype(#11108, #10020) +#11109 = @"C_type$xml.etree.ElementTree.Element$items" +ext_rettype(#11109, #10020) +#11110 = @"C_type$xml.etree.ElementTree.Element$keys" +ext_rettype(#11110, #10020) +#11111 = @"C_type$xml.etree.ElementTree.Element$makeelement" +ext_rettype(#11111, #10531) +#11112 = @"C_type$xml.etree.ElementTree.Element$__copy__" +ext_rettype(#11112, #10531) +#11113 = @"C_type$xml.etree.ElementTree.Element$__deepcopy__" +ext_rettype(#11113, #10531) +#11114 = @"C_type$xml.etree.ElementTree.Element$__sizeof__" +ext_rettype(#11114, #10024) +#11115 = @"C_type$xml.etree.ElementTree.Element$__getstate__" +ext_rettype(#11115, #10111) +#11116 = @"C_type$xml.etree.ElementTree.Element$__setstate__" +ext_rettype(#11116, #10005) +#11117 = @"C_type$xml.etree.ElementTree.TreeBuilder$data" +ext_rettype(#11117, #10005) +#11118 = @"C_type$xml.etree.ElementTree.TreeBuilder$start" +ext_rettype(#11118, #10531) +#11119 = @"C_type$xml.etree.ElementTree.TreeBuilder$close" +ext_rettype(#11119, #10005) +#11120 = @"C_type$xml.etree.ElementTree.XMLParser$feed" +ext_rettype(#11120, #10005) +#11121 = @"C_type$xml.etree.ElementTree.XMLParser$close" +ext_rettype(#11121, #10005) +#11122 = @"C_type$xml.etree.ElementTree.XMLParser$_parse" +ext_rettype(#11122, #10005) +#11123 = @"C_type$xml.etree.ElementTree.XMLParser$_setevents" +ext_rettype(#11123, #10005) +#11124 = @"C_type$xml.etree.ElementTree.XMLParser$doctype" +ext_rettype(#11124, #10005) +#11125 = @"C_type$_ctypes._CData$__reduce__" +ext_rettype(#11125, #10037) +#11126 = @"C_type$_ctypes._CData$__setstate__" +ext_rettype(#11126, #10005) +#11127 = @"C_type$_ctypes.PyCPointerType$from_param" +ext_rettype(#11127, #10542) +#11128 = @"C_type$_ctypes.PyCPointerType$set_type" +ext_rettype(#11128, #10005) +#11129 = @"C_type$_ctypes.PyCSimpleType$from_param" +ext_rettype(#11129, #10542) +#11130 = @"C_type$zlib.Compress$flush" +ext_rettype(#11130, #10081) +#11131 = @"C_type$unicodedata.UCD$decimal" +ext_rettype(#11131, #10024) +#11132 = @"C_type$unicodedata.UCD$digit" +ext_rettype(#11132, #10024) +#11133 = @"C_type$unicodedata.UCD$numeric" +ext_rettype(#11133, #10001) +#11134 = @"C_type$unicodedata.UCD$combining" +ext_rettype(#11134, #10024) +#11135 = @"C_type$unicodedata.UCD$mirrored" +ext_rettype(#11135, #10024) +#11136 = @"C_type$unicodedata.UCD$decomposition" +ext_rettype(#11136, #10010) +#11137 = @"C_type$itertools._grouper$__reduce__" +ext_rettype(#11137, #10037) +#11138 = @"C_type$itertools.groupby$__reduce__" +ext_rettype(#11138, #10037) +#11139 = @"C_type$itertools.groupby$__setstate__" +ext_rettype(#11139, #10005) +#11140 = @"C_type$itertools._tee_dataobject$__reduce__" +ext_rettype(#11140, #10037) +#11141 = @"C_type$itertools._tee$__copy__" +#11142 = @"C_type$itertools._tee" +ext_rettype(#11141, #11142) +#11143 = @"C_type$itertools._tee$__reduce__" +ext_rettype(#11143, #10037) +#11144 = @"C_type$itertools._tee$__setstate__" +ext_rettype(#11144, #10005) +#11145 = @"C_type$itertools.cycle$__reduce__" +ext_rettype(#11145, #10037) +#11146 = @"C_type$itertools.cycle$__setstate__" +ext_rettype(#11146, #10005) +#11147 = @"C_type$itertools.dropwhile$__reduce__" +ext_rettype(#11147, #10037) +#11148 = @"C_type$itertools.dropwhile$__setstate__" +ext_rettype(#11148, #10005) +#11149 = @"C_type$itertools.takewhile$__reduce__" +ext_rettype(#11149, #10037) +#11150 = @"C_type$itertools.takewhile$__setstate__" +ext_rettype(#11150, #10005) +#11151 = @"C_type$itertools.islice$__reduce__" +ext_rettype(#11151, #10037) +#11152 = @"C_type$itertools.islice$__setstate__" +ext_rettype(#11152, #10005) +#11153 = @"C_type$itertools.starmap$__reduce__" +ext_rettype(#11153, #10037) +#11154 = @"C_type$itertools.chain$__reduce__" +ext_rettype(#11154, #10037) +#11155 = @"C_type$itertools.chain$__setstate__" +ext_rettype(#11155, #10005) +#11156 = @"C_type$itertools.product$__reduce__" +ext_rettype(#11156, #10037) +#11157 = @"C_type$itertools.product$__setstate__" +ext_rettype(#11157, #10005) +#11158 = @"C_type$itertools.combinations$__reduce__" +ext_rettype(#11158, #10037) +#11159 = @"C_type$itertools.combinations$__setstate__" +ext_rettype(#11159, #10005) +#11160 = @"C_type$itertools.combinations_with_replacement$__reduce__" +ext_rettype(#11160, #10037) +#11161 = @"C_type$itertools.combinations_with_replacement$__setstate__" +ext_rettype(#11161, #10005) +#11162 = @"C_type$itertools.permutations$__reduce__" +ext_rettype(#11162, #10037) +#11163 = @"C_type$itertools.permutations$__setstate__" +ext_rettype(#11163, #10005) +#11164 = @"C_type$itertools.accumulate$__reduce__" +ext_rettype(#11164, #10037) +#11165 = @"C_type$itertools.accumulate$__setstate__" +ext_rettype(#11165, #10005) +#11166 = @"C_type$itertools.compress$__reduce__" +ext_rettype(#11166, #10037) +#11167 = @"C_type$itertools.filterfalse$__reduce__" +ext_rettype(#11167, #10037) +#11168 = @"C_type$itertools.count$__reduce__" +ext_rettype(#11168, #10037) +#11169 = @"C_type$itertools.repeat$__length_hint__" +ext_rettype(#11169, #10024) +#11170 = @"C_type$itertools.repeat$__reduce__" +ext_rettype(#11170, #10037) +#11171 = @"C_type$itertools.zip_longest$__reduce__" +ext_rettype(#11171, #10037) +#11172 = @"C_type$itertools.zip_longest$__setstate__" +ext_rettype(#11172, #10005) +#11173 = @"C_type$ossaudiodev.oss_audio_device$write" +ext_rettype(#11173, #10024) +#11174 = @"C_type$ossaudiodev.oss_audio_device$writeall" +ext_rettype(#11174, #10005) +#11175 = @"C_type$ossaudiodev.oss_audio_device$close" +ext_rettype(#11175, #10005) +#11176 = @"C_type$ossaudiodev.oss_audio_device$fileno" +ext_rettype(#11176, #10024) +#11177 = @"C_type$ossaudiodev.oss_audio_device$nonblock" +ext_rettype(#11177, #10005) +#11178 = @"C_type$ossaudiodev.oss_audio_device$setfmt" +ext_rettype(#11178, #10024) +#11179 = @"C_type$ossaudiodev.oss_audio_device$getfmts" +ext_rettype(#11179, #10024) +#11180 = @"C_type$ossaudiodev.oss_audio_device$channels" +ext_rettype(#11180, #10024) +#11181 = @"C_type$ossaudiodev.oss_audio_device$speed" +ext_rettype(#11181, #10024) +#11182 = @"C_type$ossaudiodev.oss_audio_device$sync" +ext_rettype(#11182, #10005) +#11183 = @"C_type$ossaudiodev.oss_audio_device$reset" +ext_rettype(#11183, #10005) +#11184 = @"C_type$ossaudiodev.oss_audio_device$post" +ext_rettype(#11184, #10005) +#11185 = @"C_type$ossaudiodev.oss_audio_device$setparameters" +ext_rettype(#11185, #10037) +#11186 = @"C_type$ossaudiodev.oss_audio_device$bufsize" +ext_rettype(#11186, #10024) +#11187 = @"C_type$ossaudiodev.oss_audio_device$obufcount" +ext_rettype(#11187, #10024) +#11188 = @"C_type$ossaudiodev.oss_audio_device$obuffree" +ext_rettype(#11188, #10024) +#11189 = @"C_type$ossaudiodev.oss_audio_device$getptr" +ext_rettype(#11189, #10037) +#11190 = @"C_type$ossaudiodev.oss_audio_device$flush" +ext_rettype(#11190, #10005) +#11191 = @"C_type$ossaudiodev.oss_audio_device$__exit__" +ext_rettype(#11191, #10005) +#11192 = @"C_type$ossaudiodev.oss_mixer_device$close" +ext_rettype(#11192, #10005) +#11193 = @"C_type$ossaudiodev.oss_mixer_device$fileno" +ext_rettype(#11193, #10024) +#11194 = @"C_type$ossaudiodev.oss_mixer_device$__exit__" +ext_rettype(#11194, #10005) +#11195 = @"C_type$ossaudiodev.oss_mixer_device$controls" +ext_rettype(#11195, #10024) +#11196 = @"C_type$ossaudiodev.oss_mixer_device$stereocontrols" +ext_rettype(#11196, #10024) +#11197 = @"C_type$ossaudiodev.oss_mixer_device$reccontrols" +ext_rettype(#11197, #10024) +#11198 = @"C_type$ossaudiodev.oss_mixer_device$get" +ext_rettype(#11198, #10037) +#11199 = @"C_type$ossaudiodev.oss_mixer_device$set" +ext_rettype(#11199, #10037) +#11200 = @"C_type$ossaudiodev.oss_mixer_device$get_recsrc" +ext_rettype(#11200, #10024) +#11201 = @"C_type$ossaudiodev.oss_mixer_device$set_recsrc" +ext_rettype(#11201, #10024) +#11202 = @"C_type$pyexpat.xmlparser$Parse" +ext_rettype(#11202, #10024) +#11203 = @"C_type$pyexpat.xmlparser$ParseFile" +ext_rettype(#11203, #10024) +#11204 = @"C_type$pyexpat.xmlparser$SetBase" +ext_rettype(#11204, #10005) +#11205 = @"C_type$pyexpat.xmlparser$GetBase" +ext_rettype(#11205, #10010) +#11206 = @"C_type$pyexpat.xmlparser$ExternalEntityParserCreate" +ext_rettype(#11206, #10586) +#11207 = @"C_type$pyexpat.xmlparser$SetParamEntityParsing" +ext_rettype(#11207, #10024) +#11208 = @"C_type$pyexpat.xmlparser$GetInputContext" +ext_rettype(#11208, #10081) +ext_rettype(#11208, #10005) +#11209 = @"C_type$pyexpat.xmlparser$UseForeignDTD" +ext_rettype(#11209, #10005) +#11210 = @"C_type$pyexpat.xmlparser$__dir__" +ext_rettype(#11210, #10020) +#11211 = @"C_type$_socket.socket$_accept" +ext_rettype(#11211, #10037) +#11212 = @"C_type$_socket.socket$bind" +ext_rettype(#11212, #10005) +#11213 = @"C_type$_socket.socket$close" +ext_rettype(#11213, #10005) +#11214 = @"C_type$_socket.socket$connect" +ext_rettype(#11214, #10005) +#11215 = @"C_type$_socket.socket$connect_ex" +ext_rettype(#11215, #10024) +#11216 = @"C_type$_socket.socket$detach" +ext_rettype(#11216, #10024) +#11217 = @"C_type$_socket.socket$fileno" +ext_rettype(#11217, #10024) +#11218 = @"C_type$_socket.socket$getpeername" +ext_rettype(#11218, #10037) +ext_rettype(#11218, #10081) +ext_rettype(#11218, #10010) +ext_rettype(#11218, #10005) +#11219 = @"C_type$_socket.socket$getsockname" +ext_rettype(#11219, #10037) +ext_rettype(#11219, #10081) +ext_rettype(#11219, #10010) +ext_rettype(#11219, #10005) +#11220 = @"C_type$_socket.socket$getsockopt" +ext_rettype(#11220, #10024) +#11221 = @"C_type$_socket.socket$listen" +ext_rettype(#11221, #10005) +#11222 = @"C_type$_socket.socket$recv_into" +ext_rettype(#11222, #10024) +#11223 = @"C_type$_socket.socket$recvfrom" +ext_rettype(#11223, #10037) +#11224 = @"C_type$_socket.socket$recvfrom_into" +ext_rettype(#11224, #10037) +#11225 = @"C_type$_socket.socket$send" +ext_rettype(#11225, #10024) +#11226 = @"C_type$_socket.socket$sendall" +ext_rettype(#11226, #10005) +#11227 = @"C_type$_socket.socket$sendto" +ext_rettype(#11227, #10024) +#11228 = @"C_type$_socket.socket$setblocking" +ext_rettype(#11228, #10005) +#11229 = @"C_type$_socket.socket$settimeout" +ext_rettype(#11229, #10005) +#11230 = @"C_type$_socket.socket$gettimeout" +ext_rettype(#11230, #10001) +ext_rettype(#11230, #10005) +#11231 = @"C_type$_socket.socket$setsockopt" +ext_rettype(#11231, #10005) +#11232 = @"C_type$_socket.socket$shutdown" +ext_rettype(#11232, #10005) +#11233 = @"C_type$_socket.socket$recvmsg" +ext_rettype(#11233, #10037) +#11234 = @"C_type$_socket.socket$recvmsg_into" +ext_rettype(#11234, #10037) +#11235 = @"C_type$_socket.socket$sendmsg" +ext_rettype(#11235, #10024) +#11236 = @"C_type$_ast.AST$__reduce__" +ext_rettype(#11236, #10037) +#11237 = @"C_type$traceback$3__dir__" +ext_rettype(#11237, #10037) +#11238 = @"C_type$filter$3__reduce__" +ext_rettype(#11238, #10037) +#11239 = @"C_type$map$3__reduce__" +ext_rettype(#11239, #10037) +#11240 = @"C_type$zip$3__reduce__" +ext_rettype(#11240, #10037) +#11241 = @"C_type$type$3mro" +ext_rettype(#11241, #10037) +#11242 = @"C_type$type$3__subclasses__" +ext_rettype(#11242, #10020) +#11243 = @"C_type$type$3__prepare__" +ext_rettype(#11243, #10111) +#11244 = @"C_type$type$3__instancecheck__" +ext_rettype(#11244, #10050) +#11245 = @"C_type$type$3__subclasscheck__" +ext_rettype(#11245, #10050) +#11246 = @"C_type$type$3__dir__" +ext_rettype(#11246, #10020) +#11247 = @"C_type$type$3__sizeof__" +ext_rettype(#11247, #10024) +#11248 = @"C_type$object$3__reduce_ex__" +ext_rettype(#11248, #10037) +#11249 = @"C_type$object$3__reduce__" +ext_rettype(#11249, #10037) +#11250 = @"C_type$object$3__sizeof__" +ext_rettype(#11250, #10024) +#11251 = @"C_type$object$3__dir__" +ext_rettype(#11251, #10020) +#11252 = @"C_type$dict_keyiterator$3__length_hint__" +ext_rettype(#11252, #10024) +#11253 = @"C_type$dict_keyiterator$3__reduce__" +ext_rettype(#11253, #10037) +#11254 = @"C_type$dict_valueiterator$3__length_hint__" +ext_rettype(#11254, #10024) +#11255 = @"C_type$dict_valueiterator$3__reduce__" +ext_rettype(#11255, #10037) +#11256 = @"C_type$dict_itemiterator$3__length_hint__" +ext_rettype(#11256, #10024) +#11257 = @"C_type$dict_itemiterator$3__reduce__" +ext_rettype(#11257, #10037) +#11258 = @"C_type$dict$3__contains__" +ext_rettype(#11258, #10050) +#11259 = @"C_type$dict$3__sizeof__" +ext_rettype(#11259, #10024) +#11260 = @"C_type$dict$3popitem" +ext_rettype(#11260, #10037) +#11261 = @"C_type$dict$3update" +ext_rettype(#11261, #10005) +#11262 = @"C_type$dict$3clear" +ext_rettype(#11262, #10005) +#11263 = @"C_type$dict$3copy" +ext_rettype(#11263, #10111) +#11264 = @"C_type$dict_items$3isdisjoint" +ext_rettype(#11264, #10050) +#11265 = @"C_type$dict_keys$3isdisjoint" +ext_rettype(#11265, #10050) +#11266 = @"C_type$module$3__dir__" +ext_rettype(#11266, #10020) +#11267 = @"C_type$bytearray_iterator$3__length_hint__" +ext_rettype(#11267, #10024) +#11268 = @"C_type$bytearray_iterator$3__reduce__" +ext_rettype(#11268, #10037) +#11269 = @"C_type$bytearray_iterator$3__setstate__" +ext_rettype(#11269, #10005) +#11270 = @"C_type$bytearray$3__alloc__" +ext_rettype(#11270, #10024) +#11271 = @"C_type$bytearray$3__reduce__" +ext_rettype(#11271, #10037) +#11272 = @"C_type$bytearray$3__reduce_ex__" +ext_rettype(#11272, #10037) +#11273 = @"C_type$bytearray$3__sizeof__" +ext_rettype(#11273, #10024) +#11274 = @"C_type$bytearray$3append" +ext_rettype(#11274, #10005) +#11275 = @"C_type$bytearray$3capitalize" +#11276 = @"C_type$bytearray" +ext_rettype(#11275, #11276) +ext_rettype(#11275, #10081) +#11277 = @"C_type$bytearray$3center" +ext_rettype(#11277, #11276) +ext_rettype(#11277, #10081) +#11278 = @"C_type$bytearray$3clear" +ext_rettype(#11278, #10005) +#11279 = @"C_type$bytearray$3copy" +ext_rettype(#11279, #11276) +#11280 = @"C_type$bytearray$3count" +ext_rettype(#11280, #10024) +#11281 = @"C_type$bytearray$3endswith" +ext_rettype(#11281, #10050) +#11282 = @"C_type$bytearray$3expandtabs" +ext_rettype(#11282, #11276) +ext_rettype(#11282, #10081) +#11283 = @"C_type$bytearray$3extend" +ext_rettype(#11283, #10005) +#11284 = @"C_type$bytearray$3find" +ext_rettype(#11284, #10024) +#11285 = @"C_type$bytearray$3fromhex" +ext_rettype(#11285, #11276) +#11286 = @"C_type$bytearray$3index" +ext_rettype(#11286, #10024) +#11287 = @"C_type$bytearray$3insert" +ext_rettype(#11287, #10005) +#11288 = @"C_type$bytearray$3isalnum" +ext_rettype(#11288, #10050) +#11289 = @"C_type$bytearray$3isalpha" +ext_rettype(#11289, #10050) +#11290 = @"C_type$bytearray$3isdigit" +ext_rettype(#11290, #10050) +#11291 = @"C_type$bytearray$3islower" +ext_rettype(#11291, #10050) +#11292 = @"C_type$bytearray$3isspace" +ext_rettype(#11292, #10050) +#11293 = @"C_type$bytearray$3istitle" +ext_rettype(#11293, #10050) +#11294 = @"C_type$bytearray$3isupper" +ext_rettype(#11294, #10050) +#11295 = @"C_type$bytearray$3join" +ext_rettype(#11295, #11276) +#11296 = @"C_type$bytearray$3ljust" +ext_rettype(#11296, #11276) +ext_rettype(#11296, #10081) +#11297 = @"C_type$bytearray$3lower" +ext_rettype(#11297, #11276) +ext_rettype(#11297, #10081) +#11298 = @"C_type$bytearray$3lstrip" +ext_rettype(#11298, #11276) +#11299 = @"C_type$bytearray$3maketrans" +ext_rettype(#11299, #10081) +#11300 = @"C_type$bytearray$3partition" +ext_rettype(#11300, #10037) +#11301 = @"C_type$bytearray$3pop" +ext_rettype(#11301, #10024) +#11302 = @"C_type$bytearray$3remove" +ext_rettype(#11302, #10005) +#11303 = @"C_type$bytearray$3replace" +ext_rettype(#11303, #11276) +#11304 = @"C_type$bytearray$3reverse" +ext_rettype(#11304, #10005) +#11305 = @"C_type$bytearray$3rfind" +ext_rettype(#11305, #10024) +#11306 = @"C_type$bytearray$3rindex" +ext_rettype(#11306, #10024) +#11307 = @"C_type$bytearray$3rjust" +ext_rettype(#11307, #11276) +ext_rettype(#11307, #10081) +#11308 = @"C_type$bytearray$3rpartition" +ext_rettype(#11308, #10037) +#11309 = @"C_type$bytearray$3rsplit" +ext_rettype(#11309, #10020) +#11310 = @"C_type$bytearray$3rstrip" +ext_rettype(#11310, #11276) +#11311 = @"C_type$bytearray$3split" +ext_rettype(#11311, #10020) +#11312 = @"C_type$bytearray$3splitlines" +ext_rettype(#11312, #10020) +#11313 = @"C_type$bytearray$3startswith" +ext_rettype(#11313, #10050) +#11314 = @"C_type$bytearray$3strip" +ext_rettype(#11314, #11276) +#11315 = @"C_type$bytearray$3swapcase" +ext_rettype(#11315, #11276) +ext_rettype(#11315, #10081) +#11316 = @"C_type$bytearray$3title" +ext_rettype(#11316, #11276) +ext_rettype(#11316, #10081) +#11317 = @"C_type$bytearray$3translate" +ext_rettype(#11317, #11276) +#11318 = @"C_type$bytearray$3upper" +ext_rettype(#11318, #11276) +ext_rettype(#11318, #10081) +#11319 = @"C_type$bytearray$3zfill" +ext_rettype(#11319, #11276) +ext_rettype(#11319, #10081) +#11320 = @"C_type$frame$3__sizeof__" +ext_rettype(#11320, #10024) +#11321 = @"C_type$list_iterator$3__length_hint__" +ext_rettype(#11321, #10024) +#11322 = @"C_type$list_iterator$3__reduce__" +ext_rettype(#11322, #10037) +#11323 = @"C_type$list_iterator$3__setstate__" +ext_rettype(#11323, #10005) +#11324 = @"C_type$list_reverseiterator$3__length_hint__" +ext_rettype(#11324, #10024) +#11325 = @"C_type$list_reverseiterator$3__reduce__" +ext_rettype(#11325, #10037) +#11326 = @"C_type$list_reverseiterator$3__setstate__" +ext_rettype(#11326, #10005) +#11327 = @"C_type$list$3__getitem__" +ext_rettype(#11327, #10020) +#11328 = @"C_type$list$3__reversed__" +#11329 = @"C_type$list_reverseiterator" +ext_rettype(#11328, #11329) +#11330 = @"C_type$list$3__sizeof__" +ext_rettype(#11330, #10024) +#11331 = @"C_type$list$3clear" +ext_rettype(#11331, #10005) +#11332 = @"C_type$list$3copy" +ext_rettype(#11332, #10020) +#11333 = @"C_type$list$3append" +ext_rettype(#11333, #10005) +#11334 = @"C_type$list$3insert" +ext_rettype(#11334, #10005) +#11335 = @"C_type$list$3extend" +ext_rettype(#11335, #10005) +#11336 = @"C_type$list$3remove" +ext_rettype(#11336, #10005) +#11337 = @"C_type$list$3index" +ext_rettype(#11337, #10024) +#11338 = @"C_type$list$3count" +ext_rettype(#11338, #10024) +#11339 = @"C_type$list$3reverse" +ext_rettype(#11339, #10005) +#11340 = @"C_type$list$3sort" +ext_rettype(#11340, #10005) +#11341 = @"C_type$int$3conjugate" +ext_rettype(#11341, #10024) +#11342 = @"C_type$int$3bit_length" +ext_rettype(#11342, #10024) +#11343 = @"C_type$int$3to_bytes" +ext_rettype(#11343, #10081) +#11344 = @"C_type$int$3from_bytes" +ext_rettype(#11344, #10024) +#11345 = @"C_type$int$3__trunc__" +ext_rettype(#11345, #10024) +#11346 = @"C_type$int$3__floor__" +ext_rettype(#11346, #10024) +#11347 = @"C_type$int$3__ceil__" +ext_rettype(#11347, #10024) +#11348 = @"C_type$int$3__round__" +ext_rettype(#11348, #10024) +#11349 = @"C_type$int$3__getnewargs__" +ext_rettype(#11349, #10037) +#11350 = @"C_type$int$3__sizeof__" +ext_rettype(#11350, #10024) +#11351 = @"C_type$generator$3close" +ext_rettype(#11351, #10005) +#11352 = @"C_type$stderrprinter$3close" +ext_rettype(#11352, #10005) +#11353 = @"C_type$stderrprinter$3flush" +ext_rettype(#11353, #10005) +#11354 = @"C_type$stderrprinter$3fileno" +ext_rettype(#11354, #10024) +#11355 = @"C_type$stderrprinter$3isatty" +ext_rettype(#11355, #10050) +#11356 = @"C_type$stderrprinter$3write" +ext_rettype(#11356, #10024) +ext_rettype(#11356, #10005) +#11357 = @"C_type$slice$3indices" +ext_rettype(#11357, #10037) +#11358 = @"C_type$slice$3__reduce__" +ext_rettype(#11358, #10037) +#11359 = @"C_type$BaseException$3__reduce__" +ext_rettype(#11359, #10037) +#11360 = @"C_type$BaseException$3__setstate__" +ext_rettype(#11360, #10005) +#11361 = @"C_type$OSError$3__reduce__" +ext_rettype(#11361, #10037) +#11362 = @"C_type$float$3conjugate" +ext_rettype(#11362, #10001) +#11363 = @"C_type$float$3__trunc__" +ext_rettype(#11363, #10024) +#11364 = @"C_type$float$3__round__" +ext_rettype(#11364, #10024) +ext_rettype(#11364, #10001) +#11365 = @"C_type$float$3as_integer_ratio" +ext_rettype(#11365, #10037) +#11366 = @"C_type$float$3is_integer" +ext_rettype(#11366, #10050) +#11367 = @"C_type$float$3__getnewargs__" +ext_rettype(#11367, #10037) +#11368 = @"C_type$float$3__setformat__" +ext_rettype(#11368, #10005) +#11369 = @"C_type$bytes_iterator$3__length_hint__" +ext_rettype(#11369, #10024) +#11370 = @"C_type$bytes_iterator$3__reduce__" +ext_rettype(#11370, #10037) +#11371 = @"C_type$bytes_iterator$3__setstate__" +ext_rettype(#11371, #10005) +#11372 = @"C_type$bytes$3__getnewargs__" +ext_rettype(#11372, #10037) +#11373 = @"C_type$bytes$3capitalize" +ext_rettype(#11373, #11276) +ext_rettype(#11373, #10081) +#11374 = @"C_type$bytes$3center" +ext_rettype(#11374, #11276) +ext_rettype(#11374, #10081) +#11375 = @"C_type$bytes$3count" +ext_rettype(#11375, #10024) +#11376 = @"C_type$bytes$3endswith" +ext_rettype(#11376, #10050) +#11377 = @"C_type$bytes$3expandtabs" +ext_rettype(#11377, #11276) +ext_rettype(#11377, #10081) +#11378 = @"C_type$bytes$3find" +ext_rettype(#11378, #10024) +#11379 = @"C_type$bytes$3index" +ext_rettype(#11379, #10024) +#11380 = @"C_type$bytes$3isalnum" +ext_rettype(#11380, #10050) +#11381 = @"C_type$bytes$3isalpha" +ext_rettype(#11381, #10050) +#11382 = @"C_type$bytes$3isdigit" +ext_rettype(#11382, #10050) +#11383 = @"C_type$bytes$3islower" +ext_rettype(#11383, #10050) +#11384 = @"C_type$bytes$3isspace" +ext_rettype(#11384, #10050) +#11385 = @"C_type$bytes$3istitle" +ext_rettype(#11385, #10050) +#11386 = @"C_type$bytes$3isupper" +ext_rettype(#11386, #10050) +#11387 = @"C_type$bytes$3join" +ext_rettype(#11387, #10081) +#11388 = @"C_type$bytes$3ljust" +ext_rettype(#11388, #11276) +ext_rettype(#11388, #10081) +#11389 = @"C_type$bytes$3lower" +ext_rettype(#11389, #11276) +ext_rettype(#11389, #10081) +#11390 = @"C_type$bytes$3lstrip" +ext_rettype(#11390, #10081) +#11391 = @"C_type$bytes$3maketrans" +ext_rettype(#11391, #10081) +#11392 = @"C_type$bytes$3partition" +ext_rettype(#11392, #10037) +#11393 = @"C_type$bytes$3replace" +ext_rettype(#11393, #10081) +#11394 = @"C_type$bytes$3rfind" +ext_rettype(#11394, #10024) +#11395 = @"C_type$bytes$3rindex" +ext_rettype(#11395, #10024) +#11396 = @"C_type$bytes$3rjust" +ext_rettype(#11396, #11276) +ext_rettype(#11396, #10081) +#11397 = @"C_type$bytes$3rpartition" +ext_rettype(#11397, #10037) +#11398 = @"C_type$bytes$3rsplit" +ext_rettype(#11398, #10020) +#11399 = @"C_type$bytes$3rstrip" +ext_rettype(#11399, #10081) +#11400 = @"C_type$bytes$3split" +ext_rettype(#11400, #10020) +#11401 = @"C_type$bytes$3splitlines" +ext_rettype(#11401, #10020) +#11402 = @"C_type$bytes$3startswith" +ext_rettype(#11402, #10050) +#11403 = @"C_type$bytes$3strip" +ext_rettype(#11403, #10081) +#11404 = @"C_type$bytes$3swapcase" +ext_rettype(#11404, #11276) +ext_rettype(#11404, #10081) +#11405 = @"C_type$bytes$3title" +ext_rettype(#11405, #11276) +ext_rettype(#11405, #10081) +#11406 = @"C_type$bytes$3translate" +ext_rettype(#11406, #10081) +#11407 = @"C_type$bytes$3upper" +ext_rettype(#11407, #11276) +ext_rettype(#11407, #10081) +#11408 = @"C_type$bytes$3zfill" +ext_rettype(#11408, #11276) +ext_rettype(#11408, #10081) +#11409 = @"C_type$bytes$3__sizeof__" +ext_rettype(#11409, #10024) +#11410 = @"C_type$set_iterator$3__length_hint__" +ext_rettype(#11410, #10024) +#11411 = @"C_type$set_iterator$3__reduce__" +ext_rettype(#11411, #10037) +#11412 = @"C_type$frozenset$3__contains__" +ext_rettype(#11412, #10050) +#11413 = @"C_type$frozenset$3copy" +ext_rettype(#11413, #10073) +ext_rettype(#11413, #10074) +#11414 = @"C_type$frozenset$3difference" +ext_rettype(#11414, #10073) +ext_rettype(#11414, #10074) +#11415 = @"C_type$frozenset$3intersection" +ext_rettype(#11415, #10073) +ext_rettype(#11415, #10074) +#11416 = @"C_type$frozenset$3isdisjoint" +ext_rettype(#11416, #10050) +#11417 = @"C_type$frozenset$3issubset" +ext_rettype(#11417, #10050) +#11418 = @"C_type$frozenset$3issuperset" +ext_rettype(#11418, #10050) +#11419 = @"C_type$frozenset$3__reduce__" +ext_rettype(#11419, #10037) +#11420 = @"C_type$frozenset$3__sizeof__" +ext_rettype(#11420, #10024) +#11421 = @"C_type$frozenset$3symmetric_difference" +ext_rettype(#11421, #10073) +ext_rettype(#11421, #10074) +#11422 = @"C_type$frozenset$3union" +ext_rettype(#11422, #10073) +ext_rettype(#11422, #10074) +#11423 = @"C_type$set$3add" +ext_rettype(#11423, #10005) +#11424 = @"C_type$set$3clear" +ext_rettype(#11424, #10005) +#11425 = @"C_type$set$3__contains__" +ext_rettype(#11425, #10050) +#11426 = @"C_type$set$3copy" +ext_rettype(#11426, #10073) +ext_rettype(#11426, #10074) +#11427 = @"C_type$set$3discard" +ext_rettype(#11427, #10005) +#11428 = @"C_type$set$3difference" +ext_rettype(#11428, #10073) +ext_rettype(#11428, #10074) +#11429 = @"C_type$set$3difference_update" +ext_rettype(#11429, #10005) +#11430 = @"C_type$set$3intersection" +ext_rettype(#11430, #10073) +ext_rettype(#11430, #10074) +#11431 = @"C_type$set$3intersection_update" +ext_rettype(#11431, #10005) +#11432 = @"C_type$set$3isdisjoint" +ext_rettype(#11432, #10050) +#11433 = @"C_type$set$3issubset" +ext_rettype(#11433, #10050) +#11434 = @"C_type$set$3issuperset" +ext_rettype(#11434, #10050) +#11435 = @"C_type$set$3__reduce__" +ext_rettype(#11435, #10037) +#11436 = @"C_type$set$3remove" +ext_rettype(#11436, #10005) +#11437 = @"C_type$set$3__sizeof__" +ext_rettype(#11437, #10024) +#11438 = @"C_type$set$3symmetric_difference" +ext_rettype(#11438, #10073) +ext_rettype(#11438, #10074) +#11439 = @"C_type$set$3symmetric_difference_update" +ext_rettype(#11439, #10005) +#11440 = @"C_type$set$3union" +ext_rettype(#11440, #10073) +ext_rettype(#11440, #10074) +#11441 = @"C_type$set$3update" +ext_rettype(#11441, #10005) +#11442 = @"C_type$code$3__sizeof__" +ext_rettype(#11442, #10024) +#11443 = @"C_type$tuple_iterator$3__length_hint__" +ext_rettype(#11443, #10024) +#11444 = @"C_type$tuple_iterator$3__reduce__" +ext_rettype(#11444, #10037) +#11445 = @"C_type$tuple_iterator$3__setstate__" +ext_rettype(#11445, #10005) +#11446 = @"C_type$tuple$3__getnewargs__" +ext_rettype(#11446, #10037) +#11447 = @"C_type$tuple$3__sizeof__" +ext_rettype(#11447, #10024) +#11448 = @"C_type$tuple$3index" +ext_rettype(#11448, #10024) +#11449 = @"C_type$tuple$3count" +ext_rettype(#11449, #10024) +#11450 = @"C_type$iterator$3__length_hint__" +ext_rettype(#11450, #10024) +#11451 = @"C_type$iterator$3__reduce__" +ext_rettype(#11451, #10037) +#11452 = @"C_type$iterator$3__setstate__" +ext_rettype(#11452, #10005) +#11453 = @"C_type$callable_iterator$3__reduce__" +ext_rettype(#11453, #10037) +#11454 = @"C_type$str_iterator$3__length_hint__" +ext_rettype(#11454, #10024) +#11455 = @"C_type$str_iterator$3__reduce__" +ext_rettype(#11455, #10037) +#11456 = @"C_type$str_iterator$3__setstate__" +ext_rettype(#11456, #10005) +#11457 = @"C_type$str$3encode" +ext_rettype(#11457, #10081) +#11458 = @"C_type$str$3split" +ext_rettype(#11458, #10020) +#11459 = @"C_type$str$3rsplit" +ext_rettype(#11459, #10020) +#11460 = @"C_type$str$3count" +ext_rettype(#11460, #10024) +#11461 = @"C_type$str$3find" +ext_rettype(#11461, #10024) +#11462 = @"C_type$str$3partition" +ext_rettype(#11462, #10037) +#11463 = @"C_type$str$3index" +ext_rettype(#11463, #10024) +#11464 = @"C_type$str$3rfind" +ext_rettype(#11464, #10024) +#11465 = @"C_type$str$3rindex" +ext_rettype(#11465, #10024) +#11466 = @"C_type$str$3rpartition" +ext_rettype(#11466, #10037) +#11467 = @"C_type$str$3splitlines" +ext_rettype(#11467, #10020) +#11468 = @"C_type$str$3startswith" +ext_rettype(#11468, #10050) +#11469 = @"C_type$str$3endswith" +ext_rettype(#11469, #10050) +#11470 = @"C_type$str$3islower" +ext_rettype(#11470, #10050) +#11471 = @"C_type$str$3isupper" +ext_rettype(#11471, #10050) +#11472 = @"C_type$str$3istitle" +ext_rettype(#11472, #10050) +#11473 = @"C_type$str$3isspace" +ext_rettype(#11473, #10050) +#11474 = @"C_type$str$3isdecimal" +ext_rettype(#11474, #10050) +#11475 = @"C_type$str$3isdigit" +ext_rettype(#11475, #10050) +#11476 = @"C_type$str$3isnumeric" +ext_rettype(#11476, #10050) +#11477 = @"C_type$str$3isalpha" +ext_rettype(#11477, #10050) +#11478 = @"C_type$str$3isalnum" +ext_rettype(#11478, #10050) +#11479 = @"C_type$str$3isidentifier" +ext_rettype(#11479, #10050) +#11480 = @"C_type$str$3isprintable" +ext_rettype(#11480, #10050) +#11481 = @"C_type$str$3maketrans" +ext_rettype(#11481, #10111) +#11482 = @"C_type$str$3__sizeof__" +ext_rettype(#11482, #10024) +#11483 = @"C_type$str$3__getnewargs__" +ext_rettype(#11483, #10037) +#11484 = @"C_type$EncodingMap$3size" +ext_rettype(#11484, #10024) +#11485 = @"C_type$range_iterator$3__length_hint__" +ext_rettype(#11485, #10024) +#11486 = @"C_type$range_iterator$3__reduce__" +ext_rettype(#11486, #10037) +#11487 = @"C_type$range_iterator$3__setstate__" +ext_rettype(#11487, #10005) +#11488 = @"C_type$longrange_iterator$3__reduce__" +ext_rettype(#11488, #10037) +#11489 = @"C_type$longrange_iterator$3__setstate__" +ext_rettype(#11489, #10005) +#11490 = @"C_type$range$3__reversed__" +#11491 = @"C_type$range_iterator" +ext_rettype(#11490, #11491) +#11492 = @"C_type$longrange_iterator" +ext_rettype(#11490, #11492) +#11493 = @"C_type$range$3__reduce__" +ext_rettype(#11493, #10037) +#11494 = @"C_type$range$3count" +ext_rettype(#11494, #10024) +#11495 = @"C_type$range$3index" +ext_rettype(#11495, #10024) +#11496 = @"C_type$complex$3conjugate" +ext_rettype(#11496, #10226) +#11497 = @"C_type$complex$3__getnewargs__" +ext_rettype(#11497, #10037) +#11498 = @"C_type$memoryview$3release" +ext_rettype(#11498, #10005) +#11499 = @"C_type$memoryview$3tobytes" +ext_rettype(#11499, #10081) +#11500 = @"C_type$memoryview$3tolist" +ext_rettype(#11500, #10024) +ext_rettype(#11500, #10020) +ext_rettype(#11500, #10001) +ext_rettype(#11500, #10081) +ext_rettype(#11500, #10050) +#11501 = @"C_type$memoryview$3cast" +ext_rettype(#11501, #10407) +#11502 = @"C_type$memoryview$3__exit__" +ext_rettype(#11502, #10005) +#11503 = @"C_type$enumerate$3__reduce__" +ext_rettype(#11503, #10037) +#11504 = @"C_type$reversed$3__length_hint__" +ext_rettype(#11504, #10024) +#11505 = @"C_type$reversed$3__reduce__" +ext_rettype(#11505, #10037) +#11506 = @"C_type$reversed$3__setstate__" +ext_rettype(#11506, #10005) +ext_argtype(#10003, 0, #10024) +ext_argtype(#10004, 0, #10024) +#11507 = @"C_type$object" +ext_argtype(#10004, 1, #11507) +ext_argtype(#10006, 0, #10024) +ext_argtype(#10007, 0, #10001) +ext_argtype(#10008, 0, #11507) +ext_argtype(#10009, 1, #11507) +#11508 = @"C_builtin_function_or_method$time.get_clock_info" +ext_argtype(#11508, 0, #10010) +ext_argtype(#10022, 0, #11507) +#11509 = @"C_builtin_function_or_method$_csv.get_dialect" +ext_argtype(#11509, 0, #11507) +ext_argtype(#10025, 0, #11507) +ext_argtype(#10025, 1, #10010) +ext_argtype(#10025, 2, #10024) +ext_argtype(#10032, 0, #11507) +ext_argtype(#10035, 0, #11507) +ext_argtype(#10036, 0, #10030) +ext_argtype(#10040, 0, #11507) +ext_argtype(#10041, 0, #11507) +ext_argtype(#10043, 0, #11507) +ext_argtype(#10044, 0, #11507) +ext_argtype(#10051, 0, #10024) +ext_argtype(#10054, 0, #10024) +ext_argtype(#10054, 1, #10024) +ext_argtype(#10054, 2, #10024) +ext_argtype(#10056, 0, #10024) +ext_argtype(#10058, 0, #11507) +#11510 = @"C_builtin_function_or_method$_codecs_jp.getcodec" +ext_argtype(#11510, 0, #11507) +#11511 = @"C_builtin_function_or_method$_codecs_tw.getcodec" +ext_argtype(#11511, 0, #11507) +#11512 = @"C_builtin_function_or_method$_codecs_hk.getcodec" +ext_argtype(#11512, 0, #11507) +#11513 = @"C_builtin_function_or_method$_codecs_iso2022.getcodec" +ext_argtype(#11513, 0, #11507) +#11514 = @"C_builtin_function_or_method$_codecs_kr.getcodec" +ext_argtype(#11514, 0, #11507) +#11515 = @"C_builtin_function_or_method$_codecs_cn.getcodec" +ext_argtype(#11515, 0, #11507) +ext_argtype(#10061, 0, #11507) +ext_argtype(#10063, 0, #10024) +ext_argtype(#10064, 0, #10024) +ext_argtype(#10064, 1, #10001) +ext_argtype(#10064, 2, #10001) +ext_argtype(#10065, 0, #10024) +ext_argtype(#10066, 0, #10024) +ext_argtype(#10066, 1, #11507) +ext_argtype(#10067, 0, #10024) +ext_argtype(#10068, 0, #10024) +ext_argtype(#10069, 0, #10024) +ext_argtype(#10069, 1, #10024) +ext_argtype(#10071, 0, #10024) +ext_argtype(#10071, 1, #10024) +ext_argtype(#10072, 0, #10024) +ext_argtype(#10072, 1, #11507) +ext_argtype(#10076, 0, #11507) +#11516 = @"C_builtin_function_or_method$signal.sigwaitinfo" +ext_argtype(#11516, 0, #11507) +ext_argtype(#10077, 0, #11507) +ext_argtype(#10077, 1, #11507) +ext_argtype(#10079, 0, #11507) +ext_argtype(#10110, 0, #11507) +ext_argtype(#10112, 0, #10010) +ext_argtype(#10112, 1, #10001) +ext_argtype(#10113, 0, #10024) +ext_argtype(#10114, 0, #10024) +ext_argtype(#10115, 0, #11507) +ext_argtype(#10129, 0, #10024) +ext_argtype(#10130, 0, #11507) +ext_argtype(#10167, 0, #10024) +ext_argtype(#10167, 1, #10024) +ext_argtype(#10176, 0, #11507) +ext_argtype(#10177, 0, #11507) +ext_argtype(#10177, 1, #10024) +ext_argtype(#10177, 2, #11507) +ext_argtype(#10178, 0, #11507) +ext_argtype(#10178, 1, #10024) +ext_argtype(#10179, 0, #11507) +ext_argtype(#10180, 0, #11507) +ext_argtype(#10180, 1, #10024) +ext_argtype(#10181, 0, #11507) +ext_argtype(#10181, 1, #10024) +ext_argtype(#10188, 0, #11507) +ext_argtype(#10190, 0, #11507) +ext_argtype(#10192, 0, #11507) +ext_argtype(#10192, 1, #10024) +ext_argtype(#10195, 0, #11507) +ext_argtype(#10195, 1, #10024) +ext_argtype(#10196, 0, #10001) +ext_argtype(#10196, 1, #10024) +ext_argtype(#10196, 2, #11507) +ext_argtype(#10196, 3, #10024) +ext_argtype(#10198, 0, #10024) +ext_argtype(#10198, 1, #11507) +ext_argtype(#10198, 2, #10024) +ext_argtype(#10198, 3, #10024) +ext_argtype(#10199, 0, #10024) +ext_argtype(#10200, 0, #10024) +ext_argtype(#10206, 0, #10081) +ext_argtype(#10207, 0, #11507) +#11517 = @"C_builtin_function_or_method$grp.getgrgid" +ext_argtype(#11517, 0, #11507) +ext_argtype(#10221, 0, #11507) +ext_argtype(#10221, 1, #11507) +ext_argtype(#10221, 2, #11507) +ext_argtype(#10221, 3, #11507) +#11518 = @"C_builtin_function_or_method$_pickle.dumps" +ext_argtype(#11518, 0, #11507) +ext_argtype(#11518, 1, #11507) +ext_argtype(#11518, 2, #11507) +#11519 = @"C_builtin_function_or_method$_pickle.load" +ext_argtype(#11519, 0, #11507) +ext_argtype(#11519, 1, #11507) +ext_argtype(#11519, 2, #10010) +ext_argtype(#11519, 3, #10010) +#11520 = @"C_builtin_function_or_method$_pickle.loads" +ext_argtype(#11520, 0, #11507) +ext_argtype(#11520, 1, #11507) +ext_argtype(#11520, 2, #10010) +ext_argtype(#11520, 3, #10010) +ext_argtype(#10222, 0, #11507) +ext_argtype(#10224, 0, #10010) +ext_argtype(#10224, 1, #10010) +ext_argtype(#10235, 0, #10226) +ext_argtype(#10236, 0, #10226) +ext_argtype(#10237, 0, #10226) +ext_argtype(#10238, 0, #10226) +ext_argtype(#10238, 1, #10226) +ext_argtype(#10240, 0, #10226) +ext_argtype(#10241, 0, #10226) +ext_argtype(#10242, 0, #10001) +ext_argtype(#10242, 1, #10001) +ext_argtype(#10248, 0, #11507) +ext_argtype(#10252, 1, #10024) +ext_argtype(#10252, 2, #10024) +ext_argtype(#10255, 0, #10024) +ext_argtype(#10256, 0, #10024) +ext_argtype(#10257, 0, #10024) +ext_argtype(#10328, 0, #11507) +ext_argtype(#10357, 0, #11507) +ext_argtype(#10370, 0, #11507) +ext_argtype(#10371, 0, #11507) +ext_argtype(#10373, 0, #11507) +ext_argtype(#10396, 0, #11507) +ext_argtype(#10398, 0, #11507) +ext_argtype(#10398, 1, #11507) +ext_argtype(#10398, 2, #11507) +ext_argtype(#10398, 3, #11507) +ext_argtype(#10398, 4, #11507) +ext_argtype(#10398, 5, #11507) +ext_argtype(#10398, 6, #10024) +ext_argtype(#10398, 7, #10024) +ext_argtype(#10398, 8, #10024) +ext_argtype(#10398, 9, #10024) +ext_argtype(#10398, 10, #10024) +ext_argtype(#10398, 11, #10024) +ext_argtype(#10398, 12, #10024) +ext_argtype(#10398, 13, #10024) +ext_argtype(#10398, 14, #10024) +ext_argtype(#10398, 15, #10024) +ext_argtype(#10398, 16, #11507) +#11521 = @"C_builtin_function_or_method$_heapq.heappop" +ext_argtype(#11521, 0, #11507) +ext_argtype(#10401, 0, #11507) +ext_argtype(#10402, 0, #10024) +ext_argtype(#10402, 1, #11507) +ext_argtype(#10403, 0, #10024) +ext_argtype(#10403, 1, #11507) +ext_argtype(#10412, 0, #11507) +#11522 = @"C_builtin_function_or_method$operator.index" +ext_argtype(#11522, 0, #11507) +#11523 = @"C_builtin_function_or_method$operator.__index__" +ext_argtype(#11523, 0, #11507) +#11524 = @"C_builtin_function_or_method$operator.neg" +ext_argtype(#11524, 0, #11507) +#11525 = @"C_builtin_function_or_method$operator.__neg__" +ext_argtype(#11525, 0, #11507) +#11526 = @"C_builtin_function_or_method$operator.pos" +ext_argtype(#11526, 0, #11507) +#11527 = @"C_builtin_function_or_method$operator.__pos__" +ext_argtype(#11527, 0, #11507) +#11528 = @"C_builtin_function_or_method$operator.abs" +ext_argtype(#11528, 0, #11507) +#11529 = @"C_builtin_function_or_method$operator.__abs__" +ext_argtype(#11529, 0, #11507) +#11530 = @"C_builtin_function_or_method$operator.inv" +ext_argtype(#11530, 0, #11507) +#11531 = @"C_builtin_function_or_method$operator.__inv__" +ext_argtype(#11531, 0, #11507) +#11532 = @"C_builtin_function_or_method$operator.invert" +ext_argtype(#11532, 0, #11507) +#11533 = @"C_builtin_function_or_method$operator.__invert__" +ext_argtype(#11533, 0, #11507) +ext_argtype(#10417, 0, #11507) +ext_argtype(#10418, 0, #11507) +ext_argtype(#10423, 0, #11507) +ext_argtype(#10423, 1, #11507) +ext_argtype(#10424, 1, #10010) +ext_argtype(#10424, 2, #10010) +ext_argtype(#10425, 0, #10010) +ext_argtype(#10425, 1, #10010) +ext_argtype(#10426, 0, #10010) +ext_argtype(#10428, 0, #10010) +ext_argtype(#10429, 0, #10010) +ext_argtype(#10431, 0, #11507) +ext_argtype(#10432, 0, #11507) +ext_argtype(#10433, 0, #11507) +ext_argtype(#10434, 0, #10024) +ext_argtype(#10436, 0, #10024) +ext_argtype(#10441, 0, #10010) +ext_argtype(#10442, 0, #10010) +ext_argtype(#10443, 0, #10024) +ext_argtype(#10444, 0, #10024) +ext_argtype(#10444, 1, #10010) +ext_argtype(#10523, 0, #11507) +#11534 = @"C_builtin_function_or_method$_json.encode_basestring_ascii" +ext_argtype(#11534, 0, #11507) +ext_argtype(#10524, 0, #11507) +ext_argtype(#10524, 1, #11507) +ext_argtype(#10524, 2, #10024) +ext_argtype(#10525, 0, #11507) +ext_argtype(#10527, 0, #11507) +ext_argtype(#10530, 0, #10531) +ext_argtype(#10530, 1, #11507) +ext_argtype(#10530, 2, #10111) +#11535 = @"C_builtin_function_or_method$_ctypes.POINTER" +ext_argtype(#11535, 0, #11507) +#11536 = @"C_builtin_function_or_method$_ctypes.pointer" +ext_argtype(#11536, 0, #11507) +#11537 = @"C_builtin_function_or_method$_ctypes._unpickle" +ext_argtype(#11537, 0, #11507) +ext_argtype(#11537, 1, #11507) +ext_argtype(#10534, 0, #11507) +ext_argtype(#10535, 0, #11507) +ext_argtype(#10535, 1, #10024) +ext_argtype(#10536, 0, #11507) +ext_argtype(#10536, 1, #10024) +ext_argtype(#10537, 0, #11507) +ext_argtype(#10538, 0, #11507) +ext_argtype(#10538, 1, #10010) +ext_argtype(#10539, 0, #11507) +ext_argtype(#10540, 0, #11507) +ext_argtype(#10543, 0, #11507) +ext_argtype(#10544, 0, #11507) +ext_argtype(#10544, 1, #10037) +ext_argtype(#10545, 0, #11507) +ext_argtype(#10545, 1, #10037) +#11538 = @"C_builtin_function_or_method$_ctypes.PyObj_FromPtr" +ext_argtype(#11538, 0, #11507) +#11539 = @"C_builtin_function_or_method$_ctypes.Py_INCREF" +ext_argtype(#11539, 0, #11507) +#11540 = @"C_builtin_function_or_method$_ctypes.Py_DECREF" +ext_argtype(#11540, 0, #11507) +ext_argtype(#10546, 0, #10010) +ext_argtype(#10546, 1, #10024) +#11541 = @"C_builtin_function_or_method$pwd.getpwuid" +ext_argtype(#11541, 0, #11507) +#11542 = @"C_builtin_function_or_method$_symtable.symtable" +ext_argtype(#11542, 0, #10010) +ext_argtype(#11542, 1, #10010) +ext_argtype(#11542, 2, #10010) +ext_argtype(#10549, 0, #11276) +ext_argtype(#10549, 0, #10081) +ext_argtype(#10549, 1, #10024) +ext_argtype(#10550, 0, #11276) +ext_argtype(#10550, 0, #10081) +ext_argtype(#10550, 1, #10024) +#11543 = @"C_builtin_function_or_method$zlib.compressobj" +ext_argtype(#11543, 0, #10024) +ext_argtype(#11543, 1, #10024) +ext_argtype(#11543, 2, #10024) +ext_argtype(#11543, 3, #10024) +ext_argtype(#11543, 4, #10024) +ext_argtype(#11543, 5, #11276) +ext_argtype(#11543, 5, #10081) +ext_argtype(#10551, 0, #11276) +ext_argtype(#10551, 0, #10081) +ext_argtype(#10551, 1, #10024) +#11544 = @"C_builtin_function_or_method$zlib.decompress" +ext_argtype(#11544, 0, #11276) +ext_argtype(#11544, 0, #10081) +ext_argtype(#11544, 1, #10024) +ext_argtype(#11544, 2, #10024) +#11545 = @"C_builtin_function_or_method$zlib.decompressobj" +ext_argtype(#11545, 0, #10024) +ext_argtype(#11545, 1, #11507) +#11546 = @"C_type$unicodedata.UCD" +ext_argtype(#10552, 0, #11546) +ext_argtype(#10552, 1, #10010) +ext_argtype(#10552, 2, #11507) +ext_argtype(#10553, 0, #11546) +ext_argtype(#10553, 1, #10010) +ext_argtype(#10553, 2, #11507) +ext_argtype(#10554, 0, #11546) +ext_argtype(#10554, 1, #10010) +ext_argtype(#10554, 2, #11507) +#11547 = @"C_builtin_function_or_method$unicodedata.category" +ext_argtype(#11547, 0, #11546) +ext_argtype(#11547, 1, #10010) +#11548 = @"C_builtin_function_or_method$unicodedata.bidirectional" +ext_argtype(#11548, 0, #11546) +ext_argtype(#11548, 1, #10010) +ext_argtype(#10555, 0, #11546) +ext_argtype(#10555, 1, #10010) +ext_argtype(#10556, 0, #11546) +ext_argtype(#10556, 1, #10010) +#11549 = @"C_builtin_function_or_method$unicodedata.east_asian_width" +ext_argtype(#11549, 0, #11546) +ext_argtype(#11549, 1, #10010) +ext_argtype(#10557, 0, #11546) +ext_argtype(#10557, 1, #10010) +#11550 = @"C_builtin_function_or_method$unicodedata.name" +ext_argtype(#11550, 0, #11546) +ext_argtype(#11550, 1, #10010) +ext_argtype(#11550, 2, #11507) +#11551 = @"C_builtin_function_or_method$unicodedata.lookup" +ext_argtype(#11551, 0, #11546) +ext_argtype(#11551, 1, #10010) +#11552 = @"C_builtin_function_or_method$unicodedata.normalize" +ext_argtype(#11552, 0, #11546) +ext_argtype(#11552, 1, #10010) +ext_argtype(#11552, 2, #10010) +ext_argtype(#10558, 0, #11507) +ext_argtype(#10558, 1, #10024) +#11553 = @"C_builtin_function_or_method$math.acos" +ext_argtype(#11553, 0, #11507) +#11554 = @"C_builtin_function_or_method$math.acosh" +ext_argtype(#11554, 0, #11507) +#11555 = @"C_builtin_function_or_method$math.asin" +ext_argtype(#11555, 0, #11507) +#11556 = @"C_builtin_function_or_method$math.asinh" +ext_argtype(#11556, 0, #11507) +#11557 = @"C_builtin_function_or_method$math.atan" +ext_argtype(#11557, 0, #11507) +#11558 = @"C_builtin_function_or_method$math.atanh" +ext_argtype(#11558, 0, #11507) +#11559 = @"C_builtin_function_or_method$math.ceil" +ext_argtype(#11559, 0, #11507) +#11560 = @"C_builtin_function_or_method$math.cos" +ext_argtype(#11560, 0, #11507) +#11561 = @"C_builtin_function_or_method$math.cosh" +ext_argtype(#11561, 0, #11507) +ext_argtype(#10561, 0, #11507) +ext_argtype(#10562, 0, #11507) +ext_argtype(#10563, 0, #11507) +#11562 = @"C_builtin_function_or_method$math.exp" +ext_argtype(#11562, 0, #11507) +#11563 = @"C_builtin_function_or_method$math.expm1" +ext_argtype(#11563, 0, #11507) +#11564 = @"C_builtin_function_or_method$math.fabs" +ext_argtype(#11564, 0, #11507) +ext_argtype(#10564, 0, #11507) +#11565 = @"C_builtin_function_or_method$math.floor" +ext_argtype(#11565, 0, #11507) +ext_argtype(#10566, 0, #11507) +ext_argtype(#10567, 0, #11507) +ext_argtype(#10568, 0, #11507) +ext_argtype(#10570, 0, #11507) +ext_argtype(#10571, 0, #11507) +ext_argtype(#10572, 0, #11507) +ext_argtype(#10573, 0, #10001) +ext_argtype(#10573, 1, #11507) +ext_argtype(#10574, 0, #11507) +#11566 = @"C_builtin_function_or_method$math.log1p" +ext_argtype(#11566, 0, #11507) +ext_argtype(#10576, 0, #11507) +ext_argtype(#10577, 0, #11507) +ext_argtype(#10578, 0, #11507) +ext_argtype(#10580, 0, #11507) +#11567 = @"C_builtin_function_or_method$math.sin" +ext_argtype(#11567, 0, #11507) +#11568 = @"C_builtin_function_or_method$math.sinh" +ext_argtype(#11568, 0, #11507) +#11569 = @"C_builtin_function_or_method$math.sqrt" +ext_argtype(#11569, 0, #11507) +#11570 = @"C_builtin_function_or_method$math.tan" +ext_argtype(#11570, 0, #11507) +#11571 = @"C_builtin_function_or_method$math.tanh" +ext_argtype(#11571, 0, #11507) +#11572 = @"C_builtin_function_or_method$math.trunc" +ext_argtype(#11572, 0, #11507) +ext_argtype(#10585, 0, #10010) +ext_argtype(#10585, 0, #10005) +ext_argtype(#10585, 1, #10010) +ext_argtype(#10585, 1, #10005) +ext_argtype(#10585, 2, #11507) +ext_argtype(#10587, 0, #10024) +#11573 = @"C_builtin_function_or_method$_socket.gethostbyname" +ext_argtype(#11573, 0, #10010) +ext_argtype(#10588, 0, #10010) +ext_argtype(#10589, 0, #10010) +ext_argtype(#10592, 0, #10010) +ext_argtype(#10592, 1, #10010) +#11574 = @"C_builtin_function_or_method$_socket.getservbyport" +ext_argtype(#11574, 0, #10024) +ext_argtype(#11574, 1, #10010) +ext_argtype(#10593, 0, #10010) +ext_argtype(#10594, 0, #11507) +ext_argtype(#10595, 0, #10024) +ext_argtype(#10595, 1, #10024) +ext_argtype(#10595, 2, #10024) +ext_argtype(#10596, 0, #10024) +ext_argtype(#10597, 0, #11507) +ext_argtype(#10598, 0, #10024) +ext_argtype(#10599, 0, #11507) +ext_argtype(#10600, 0, #10010) +#11575 = @"C_builtin_function_or_method$_socket.inet_ntoa" +ext_argtype(#11575, 0, #11276) +ext_argtype(#11575, 0, #10081) +ext_argtype(#10601, 0, #10024) +ext_argtype(#10601, 1, #10010) +#11576 = @"C_builtin_function_or_method$_socket.inet_ntop" +ext_argtype(#11576, 0, #10024) +ext_argtype(#11576, 1, #11276) +ext_argtype(#11576, 1, #10081) +ext_argtype(#10602, 0, #11507) +ext_argtype(#10602, 1, #11507) +ext_argtype(#10602, 2, #10024) +ext_argtype(#10602, 3, #10024) +ext_argtype(#10602, 4, #10024) +ext_argtype(#10602, 5, #10024) +ext_argtype(#10603, 0, #11507) +ext_argtype(#10603, 1, #10024) +ext_argtype(#10605, 0, #11507) +ext_argtype(#10607, 0, #11507) +ext_argtype(#10608, 0, #11507) +ext_argtype(#10609, 0, #10024) +ext_argtype(#10610, 0, #10024) +#11577 = @"C_builtin_function_or_method$resource.getrusage" +ext_argtype(#11577, 0, #10024) +ext_argtype(#10611, 0, #10024) +ext_argtype(#10612, 0, #10024) +ext_argtype(#10612, 1, #11507) +ext_argtype(#10614, 0, #11507) +ext_argtype(#10614, 1, #11507) +ext_argtype(#10614, 2, #10024) +ext_argtype(#10615, 0, #11507) +ext_argtype(#10615, 1, #11507) +ext_argtype(#10615, 2, #11507) +ext_argtype(#10615, 3, #10024) +ext_argtype(#10615, 4, #11507) +ext_argtype(#10615, 5, #11507) +ext_argtype(#10615, 6, #11507) +ext_argtype(#10619, 0, #11507) +ext_argtype(#10623, 0, #11507) +#11578 = @"C_builtin_function_or_method$sys.getsizeof" +ext_argtype(#11578, 0, #11507) +ext_argtype(#11578, 1, #11507) +ext_argtype(#10625, 0, #10024) +ext_argtype(#10627, 0, #10024) +ext_argtype(#10629, 0, #10001) +ext_argtype(#10631, 0, #10024) +ext_argtype(#10632, 0, #11507) +ext_argtype(#10634, 0, #10024) +ext_argtype(#10635, 0, #11507) +#11579 = @"C_builtin_function_or_method$sys.call_tracing" +ext_argtype(#11579, 0, #11507) +ext_argtype(#11579, 1, #10037) +ext_argtype(#10638, 0, #11507) +ext_argtype(#10651, 1, #11507) +ext_argtype(#10651, 2, #11507) +ext_argtype(#10652, 0, #11507) +ext_argtype(#10652, 1, #11507) +#11580 = @"C_builtin_function_or_method$builtins.__import__" +ext_argtype(#11580, 1, #11507) +ext_argtype(#11580, 2, #11507) +ext_argtype(#11580, 3, #11507) +ext_argtype(#11580, 4, #10024) +#11581 = @"C_builtin_function_or_method$builtins.abs" +ext_argtype(#11581, 0, #11507) +ext_argtype(#10653, 0, #11507) +ext_argtype(#10654, 0, #11507) +#11582 = @"C_builtin_function_or_method$builtins.ascii" +ext_argtype(#11582, 0, #11507) +#11583 = @"C_builtin_function_or_method$builtins.bin" +ext_argtype(#11583, 0, #11507) +ext_argtype(#10655, 0, #11507) +#11584 = @"C_builtin_function_or_method$builtins.chr" +ext_argtype(#11584, 0, #10024) +ext_argtype(#10656, 0, #11507) +ext_argtype(#10656, 1, #11507) +ext_argtype(#10656, 2, #10010) +ext_argtype(#10656, 3, #10024) +ext_argtype(#10656, 4, #10024) +ext_argtype(#10656, 5, #10024) +#11585 = @"C_builtin_function_or_method$builtins.format" +ext_argtype(#11585, 0, #11507) +ext_argtype(#10661, 0, #11507) +#11586 = @"C_builtin_function_or_method$builtins.hex" +ext_argtype(#11586, 0, #11507) +ext_argtype(#10662, 0, #11507) +ext_argtype(#10668, 0, #11507) +#11587 = @"C_builtin_function_or_method$builtins.oct" +ext_argtype(#11587, 0, #11507) +ext_argtype(#10670, 0, #11507) +#11588 = @"C_builtin_function_or_method$builtins.repr" +ext_argtype(#11588, 0, #11507) +#11589 = @"C_builtin_function_or_method$builtins.round" +ext_argtype(#11589, 0, #11507) +ext_argtype(#11589, 1, #11507) +ext_argtype(#10673, 0, #11507) +ext_argtype(#10673, 1, #11507) +ext_argtype(#10673, 2, #10024) +ext_argtype(#10676, 0, #11507) +ext_argtype(#10677, 0, #11507) +#11590 = @"C_type$_multiprocessing.SemLock" +ext_argtype(#10679, 0, #11590) +ext_argtype(#10680, 0, #11590) +ext_argtype(#10681, 0, #11590) +ext_argtype(#10682, 0, #11590) +ext_argtype(#10683, 0, #11590) +ext_argtype(#10684, 0, #11590) +ext_argtype(#10685, 0, #11590) +ext_argtype(#10686, 0, #11590) +#11591 = @"C_type$_multiprocessing.SemLock$_rebuild" +ext_argtype(#11591, 0, #11590) +ext_argtype(#10687, 0, #11590) +#11592 = @"C_type$_bz2.BZ2Compressor$compress" +#11593 = @"C_type$_bz2.BZ2Compressor" +ext_argtype(#11592, 0, #11593) +#11594 = @"C_type$_bz2.BZ2Compressor$flush" +ext_argtype(#11594, 0, #11593) +#11595 = @"C_type$_bz2.BZ2Compressor$__getstate__" +ext_argtype(#11595, 0, #11593) +#11596 = @"C_type$_bz2.BZ2Decompressor$decompress" +#11597 = @"C_type$_bz2.BZ2Decompressor" +ext_argtype(#11596, 0, #11597) +#11598 = @"C_type$_bz2.BZ2Decompressor$__getstate__" +ext_argtype(#11598, 0, #11597) +#11599 = @"C_type$_random.Random" +ext_argtype(#10688, 0, #11599) +ext_argtype(#10689, 0, #11599) +ext_argtype(#10690, 0, #11599) +ext_argtype(#10691, 0, #11599) +ext_argtype(#10691, 1, #11507) +ext_argtype(#10692, 0, #11599) +ext_argtype(#10692, 1, #10024) +#11600 = @"C_type$_csv.writer$writerow" +ext_argtype(#11600, 0, #10018) +ext_argtype(#11600, 1, #11507) +ext_argtype(#10693, 0, #10018) +ext_argtype(#10693, 1, #11507) +#11601 = @"C_type$xxsubtype.spamlist" +ext_argtype(#10694, 0, #11601) +ext_argtype(#10695, 0, #11601) +ext_argtype(#10695, 1, #10024) +ext_argtype(#10696, 0, #11601) +#11602 = @"C_type$xxsubtype.spamdict" +ext_argtype(#10698, 0, #11602) +ext_argtype(#10699, 0, #11602) +ext_argtype(#10699, 1, #10024) +#11603 = @"C_type$_collections._deque_iterator" +ext_argtype(#10700, 0, #11603) +ext_argtype(#10700, 0, #10713) +ext_argtype(#10701, 0, #11603) +ext_argtype(#10701, 0, #10713) +ext_argtype(#10702, 0, #11603) +ext_argtype(#10702, 0, #10713) +ext_argtype(#10703, 0, #11603) +ext_argtype(#10703, 0, #10713) +#11604 = @"C_type$collections.deque" +ext_argtype(#10704, 0, #11604) +ext_argtype(#10704, 1, #11507) +ext_argtype(#10705, 0, #11604) +ext_argtype(#10705, 1, #11507) +ext_argtype(#10706, 0, #11604) +#11605 = @"C_type$collections.deque$__copy__" +ext_argtype(#11605, 0, #11604) +ext_argtype(#10707, 0, #11604) +ext_argtype(#10707, 1, #11507) +ext_argtype(#10708, 0, #11604) +ext_argtype(#10708, 1, #11507) +ext_argtype(#10709, 0, #11604) +ext_argtype(#10709, 1, #11507) +#11606 = @"C_type$collections.deque$pop" +ext_argtype(#11606, 0, #11604) +#11607 = @"C_type$collections.deque$popleft" +ext_argtype(#11607, 0, #11604) +ext_argtype(#10710, 0, #11604) +ext_argtype(#10711, 0, #11604) +ext_argtype(#10711, 1, #11507) +ext_argtype(#10712, 0, #11604) +ext_argtype(#10714, 0, #11604) +ext_argtype(#10715, 0, #11604) +ext_argtype(#10715, 1, #10024) +ext_argtype(#10716, 0, #11604) +#11608 = @"C_type$collections.defaultdict$__missing__" +#11609 = @"C_type$collections.defaultdict" +ext_argtype(#11608, 0, #11609) +ext_argtype(#11608, 1, #11507) +#11610 = @"C_type$collections.defaultdict$copy" +ext_argtype(#11610, 0, #11609) +#11611 = @"C_type$collections.defaultdict$__copy__" +ext_argtype(#11611, 0, #11609) +ext_argtype(#10717, 0, #11609) +ext_argtype(#10718, 0, #10030) +#11612 = @"C_type$parser.st$isexpr" +ext_argtype(#11612, 0, #10030) +#11613 = @"C_type$parser.st$issuite" +ext_argtype(#11613, 0, #10030) +ext_argtype(#10719, 0, #10030) +ext_argtype(#10720, 0, #10030) +ext_argtype(#10721, 0, #10030) +ext_argtype(#10722, 0, #10039) +ext_argtype(#10722, 1, #11507) +ext_argtype(#10724, 0, #10039) +ext_argtype(#10724, 1, #11507) +ext_argtype(#10725, 0, #10039) +ext_argtype(#10725, 1, #11507) +ext_argtype(#10726, 0, #10039) +ext_argtype(#10726, 1, #11507) +ext_argtype(#10727, 0, #10039) +ext_argtype(#10727, 1, #11507) +ext_argtype(#10728, 0, #10039) +ext_argtype(#10728, 1, #11507) +ext_argtype(#10729, 0, #10039) +ext_argtype(#10729, 1, #11507) +ext_argtype(#10730, 0, #10039) +ext_argtype(#10730, 1, #11507) +ext_argtype(#10731, 0, #10039) +ext_argtype(#10731, 1, #11507) +ext_argtype(#10732, 0, #10039) +ext_argtype(#10732, 1, #11507) +ext_argtype(#10733, 0, #10039) +ext_argtype(#10733, 1, #11507) +ext_argtype(#10734, 0, #10039) +ext_argtype(#10734, 1, #11507) +ext_argtype(#10735, 0, #10039) +ext_argtype(#10735, 1, #11507) +ext_argtype(#10736, 0, #10039) +ext_argtype(#10736, 1, #11507) +ext_argtype(#10736, 2, #11507) +ext_argtype(#10737, 0, #10039) +ext_argtype(#10737, 1, #11507) +ext_argtype(#10737, 2, #11507) +ext_argtype(#10738, 0, #10039) +ext_argtype(#10738, 1, #11507) +ext_argtype(#10738, 2, #11507) +ext_argtype(#10739, 0, #10039) +ext_argtype(#10739, 1, #11507) +ext_argtype(#10739, 2, #11507) +ext_argtype(#10740, 0, #10039) +ext_argtype(#10740, 1, #11507) +ext_argtype(#10740, 2, #11507) +ext_argtype(#10741, 0, #10039) +ext_argtype(#10741, 1, #11507) +ext_argtype(#10741, 2, #11507) +ext_argtype(#10742, 0, #10039) +ext_argtype(#10742, 1, #11507) +ext_argtype(#10742, 2, #11507) +ext_argtype(#10743, 0, #10039) +ext_argtype(#10743, 1, #11507) +ext_argtype(#10743, 2, #11507) +ext_argtype(#10744, 0, #10039) +ext_argtype(#10744, 1, #11507) +ext_argtype(#10744, 2, #11507) +ext_argtype(#10745, 0, #10039) +ext_argtype(#10745, 1, #11507) +ext_argtype(#10745, 2, #11507) +ext_argtype(#10746, 0, #10039) +ext_argtype(#10746, 1, #11507) +ext_argtype(#10746, 2, #11507) +ext_argtype(#10747, 0, #10039) +ext_argtype(#10747, 1, #11507) +ext_argtype(#10747, 2, #11507) +ext_argtype(#10748, 0, #10039) +ext_argtype(#10748, 1, #11507) +ext_argtype(#10748, 2, #11507) +ext_argtype(#10749, 0, #10039) +ext_argtype(#10749, 1, #11507) +ext_argtype(#10749, 2, #11507) +ext_argtype(#10750, 0, #10039) +ext_argtype(#10750, 1, #11507) +ext_argtype(#10750, 2, #11507) +ext_argtype(#10751, 0, #10039) +ext_argtype(#10751, 1, #11507) +ext_argtype(#10751, 2, #11507) +ext_argtype(#10752, 0, #10039) +ext_argtype(#10752, 1, #11507) +ext_argtype(#10752, 2, #11507) +ext_argtype(#10752, 3, #11507) +ext_argtype(#10753, 0, #10039) +ext_argtype(#10753, 1, #11507) +ext_argtype(#10753, 2, #11507) +ext_argtype(#10753, 3, #11507) +ext_argtype(#10754, 0, #10039) +ext_argtype(#10755, 0, #10039) +ext_argtype(#10756, 0, #10039) +#11614 = @"C_type$decimal.Context$is_canonical" +ext_argtype(#11614, 0, #10039) +ext_argtype(#11614, 1, #11507) +#11615 = @"C_type$decimal.Context$is_finite" +ext_argtype(#11615, 0, #10039) +ext_argtype(#11615, 1, #11507) +#11616 = @"C_type$decimal.Context$is_infinite" +ext_argtype(#11616, 0, #10039) +ext_argtype(#11616, 1, #11507) +#11617 = @"C_type$decimal.Context$is_nan" +ext_argtype(#11617, 0, #10039) +ext_argtype(#11617, 1, #11507) +#11618 = @"C_type$decimal.Context$is_normal" +ext_argtype(#11618, 0, #10039) +ext_argtype(#11618, 1, #11507) +#11619 = @"C_type$decimal.Context$is_qnan" +ext_argtype(#11619, 0, #10039) +ext_argtype(#11619, 1, #11507) +#11620 = @"C_type$decimal.Context$is_signed" +ext_argtype(#11620, 0, #10039) +ext_argtype(#11620, 1, #11507) +#11621 = @"C_type$decimal.Context$is_snan" +ext_argtype(#11621, 0, #10039) +ext_argtype(#11621, 1, #11507) +#11622 = @"C_type$decimal.Context$is_subnormal" +ext_argtype(#11622, 0, #10039) +ext_argtype(#11622, 1, #11507) +#11623 = @"C_type$decimal.Context$is_zero" +ext_argtype(#11623, 0, #10039) +ext_argtype(#11623, 1, #11507) +ext_argtype(#10757, 0, #10039) +ext_argtype(#10757, 1, #11507) +#11624 = @"C_type$decimal.Context$canonical" +ext_argtype(#11624, 0, #10039) +ext_argtype(#11624, 1, #11507) +ext_argtype(#10758, 0, #10039) +ext_argtype(#10758, 1, #11507) +#11625 = @"C_type$decimal.Context$copy_decimal" +ext_argtype(#11625, 0, #10039) +ext_argtype(#11625, 1, #11507) +ext_argtype(#10759, 0, #10039) +ext_argtype(#10759, 1, #11507) +ext_argtype(#10760, 0, #10039) +ext_argtype(#10760, 1, #11507) +ext_argtype(#10761, 0, #10039) +ext_argtype(#10761, 1, #11507) +#11626 = @"C_type$decimal.Context$number_class" +ext_argtype(#11626, 0, #10039) +ext_argtype(#11626, 1, #11507) +#11627 = @"C_type$decimal.Context$to_sci_string" +ext_argtype(#11627, 0, #10039) +ext_argtype(#11627, 1, #11507) +#11628 = @"C_type$decimal.Context$to_eng_string" +ext_argtype(#11628, 0, #10039) +ext_argtype(#11628, 1, #11507) +ext_argtype(#10762, 0, #10039) +ext_argtype(#10762, 1, #11507) +ext_argtype(#10762, 2, #11507) +ext_argtype(#10763, 0, #10039) +ext_argtype(#10763, 1, #11507) +ext_argtype(#10763, 2, #11507) +ext_argtype(#10764, 0, #10039) +ext_argtype(#10764, 1, #11507) +ext_argtype(#10764, 2, #11507) +ext_argtype(#10765, 0, #10039) +ext_argtype(#10765, 1, #11507) +ext_argtype(#10765, 2, #11507) +ext_argtype(#10766, 0, #10039) +ext_argtype(#10766, 1, #11507) +ext_argtype(#10766, 2, #11507) +ext_argtype(#10767, 0, #10039) +ext_argtype(#10767, 1, #11507) +ext_argtype(#10767, 2, #11507) +ext_argtype(#10768, 0, #10039) +ext_argtype(#10768, 1, #11507) +ext_argtype(#10768, 2, #11507) +#11629 = @"C_type$decimal.Context$same_quantum" +ext_argtype(#11629, 0, #10039) +ext_argtype(#11629, 1, #11507) +ext_argtype(#11629, 2, #11507) +ext_argtype(#10769, 0, #10039) +ext_argtype(#10769, 1, #11507) +ext_argtype(#10769, 2, #11507) +ext_argtype(#10770, 0, #10039) +ext_argtype(#10770, 1, #11507) +ext_argtype(#10770, 2, #11507) +ext_argtype(#10771, 0, #10039) +ext_argtype(#10772, 0, #10039) +ext_argtype(#10773, 0, #10039) +ext_argtype(#10774, 0, #10039) +ext_argtype(#10775, 0, #10039) +ext_argtype(#10776, 0, #10039) +ext_argtype(#10776, 1, #11507) +ext_argtype(#10777, 0, #10039) +ext_argtype(#10777, 1, #11507) +ext_argtype(#10778, 0, #10723) +ext_argtype(#10778, 1, #11507) +ext_argtype(#10779, 0, #10723) +ext_argtype(#10779, 1, #11507) +ext_argtype(#10780, 0, #10723) +ext_argtype(#10780, 1, #11507) +ext_argtype(#10781, 0, #10723) +ext_argtype(#10781, 1, #11507) +ext_argtype(#10782, 0, #10723) +ext_argtype(#10782, 1, #11507) +ext_argtype(#10783, 0, #10723) +ext_argtype(#10783, 1, #11507) +ext_argtype(#10784, 0, #10723) +ext_argtype(#10784, 1, #11507) +ext_argtype(#10784, 2, #11507) +ext_argtype(#10785, 0, #10723) +ext_argtype(#10785, 1, #11507) +ext_argtype(#10785, 2, #11507) +ext_argtype(#10786, 0, #10723) +ext_argtype(#10786, 1, #11507) +ext_argtype(#10786, 2, #11507) +ext_argtype(#10787, 0, #10723) +ext_argtype(#10787, 1, #11507) +ext_argtype(#10788, 0, #10723) +ext_argtype(#10788, 1, #11507) +ext_argtype(#10788, 2, #11507) +ext_argtype(#10789, 0, #10723) +ext_argtype(#10789, 1, #11507) +ext_argtype(#10789, 2, #11507) +ext_argtype(#10790, 0, #10723) +ext_argtype(#10790, 1, #11507) +ext_argtype(#10790, 2, #11507) +ext_argtype(#10791, 0, #10723) +ext_argtype(#10791, 1, #11507) +ext_argtype(#10791, 2, #11507) +ext_argtype(#10792, 0, #10723) +ext_argtype(#10792, 1, #11507) +ext_argtype(#10792, 2, #11507) +ext_argtype(#10793, 0, #10723) +ext_argtype(#10793, 1, #11507) +ext_argtype(#10793, 2, #11507) +ext_argtype(#10794, 0, #10723) +ext_argtype(#10794, 1, #11507) +ext_argtype(#10794, 2, #11507) +ext_argtype(#10795, 0, #10723) +ext_argtype(#10795, 1, #11507) +ext_argtype(#10795, 2, #11507) +ext_argtype(#10795, 3, #11507) +ext_argtype(#10796, 0, #10723) +ext_argtype(#10796, 1, #11507) +ext_argtype(#10796, 2, #11507) +ext_argtype(#10797, 0, #10723) +ext_argtype(#10797, 1, #11507) +ext_argtype(#10797, 2, #11507) +ext_argtype(#10797, 3, #11507) +#11630 = @"C_type$decimal.Decimal$is_canonical" +ext_argtype(#11630, 0, #10723) +#11631 = @"C_type$decimal.Decimal$is_finite" +ext_argtype(#11631, 0, #10723) +#11632 = @"C_type$decimal.Decimal$is_infinite" +ext_argtype(#11632, 0, #10723) +#11633 = @"C_type$decimal.Decimal$is_nan" +ext_argtype(#11633, 0, #10723) +#11634 = @"C_type$decimal.Decimal$is_qnan" +ext_argtype(#11634, 0, #10723) +#11635 = @"C_type$decimal.Decimal$is_snan" +ext_argtype(#11635, 0, #10723) +#11636 = @"C_type$decimal.Decimal$is_signed" +ext_argtype(#11636, 0, #10723) +#11637 = @"C_type$decimal.Decimal$is_zero" +ext_argtype(#11637, 0, #10723) +#11638 = @"C_type$decimal.Decimal$is_normal" +ext_argtype(#11638, 0, #10723) +ext_argtype(#11638, 1, #11507) +#11639 = @"C_type$decimal.Decimal$is_subnormal" +ext_argtype(#11639, 0, #10723) +ext_argtype(#11639, 1, #11507) +ext_argtype(#10798, 0, #10723) +#11640 = @"C_type$decimal.Decimal$canonical" +ext_argtype(#11640, 0, #10723) +#11641 = @"C_type$decimal.Decimal$conjugate" +ext_argtype(#11641, 0, #10723) +ext_argtype(#10799, 0, #10723) +ext_argtype(#10800, 0, #10723) +ext_argtype(#10801, 0, #10723) +ext_argtype(#10802, 0, #10723) +ext_argtype(#10802, 1, #11507) +ext_argtype(#10803, 0, #10723) +ext_argtype(#10803, 1, #11507) +#11642 = @"C_type$decimal.Decimal$number_class" +ext_argtype(#11642, 0, #10723) +ext_argtype(#11642, 1, #11507) +#11643 = @"C_type$decimal.Decimal$to_eng_string" +ext_argtype(#11643, 0, #10723) +ext_argtype(#11643, 1, #11507) +ext_argtype(#10804, 0, #10723) +ext_argtype(#10804, 1, #11507) +ext_argtype(#10804, 2, #11507) +ext_argtype(#10805, 0, #10723) +ext_argtype(#10805, 1, #11507) +ext_argtype(#10805, 2, #11507) +ext_argtype(#10806, 0, #10723) +ext_argtype(#10806, 1, #11507) +ext_argtype(#10806, 2, #11507) +#11644 = @"C_type$decimal.Decimal$same_quantum" +ext_argtype(#11644, 0, #10723) +ext_argtype(#11644, 1, #11507) +ext_argtype(#11644, 2, #11507) +ext_argtype(#10807, 0, #10723) +ext_argtype(#10807, 1, #11507) +ext_argtype(#10807, 2, #11507) +ext_argtype(#10808, 0, #10723) +ext_argtype(#10808, 1, #11507) +ext_argtype(#10808, 2, #11507) +ext_argtype(#10809, 0, #10723) +ext_argtype(#10809, 1, #11507) +ext_argtype(#10809, 2, #11507) +ext_argtype(#10810, 0, #10723) +ext_argtype(#10810, 1, #11507) +ext_argtype(#10810, 2, #11507) +ext_argtype(#10811, 0, #10723) +ext_argtype(#10811, 1, #11507) +ext_argtype(#10811, 2, #11507) +ext_argtype(#10812, 0, #10723) +ext_argtype(#10812, 1, #11507) +ext_argtype(#10812, 2, #11507) +ext_argtype(#10813, 0, #10723) +ext_argtype(#10813, 1, #11507) +#11645 = @"C_type$decimal.Decimal$as_tuple" +ext_argtype(#11645, 0, #10723) +#11646 = @"C_type$decimal.Decimal$__copy__" +ext_argtype(#11646, 0, #10723) +#11647 = @"C_type$decimal.Decimal$__deepcopy__" +ext_argtype(#11647, 0, #10723) +ext_argtype(#11647, 1, #11507) +#11648 = @"C_type$decimal.Decimal$__format__" +ext_argtype(#11648, 0, #10723) +ext_argtype(#11648, 1, #11507) +ext_argtype(#11648, 2, #11507) +ext_argtype(#10814, 0, #10723) +ext_argtype(#10815, 0, #10723) +ext_argtype(#10815, 1, #11507) +ext_argtype(#10816, 0, #10723) +ext_argtype(#10817, 0, #10723) +ext_argtype(#10818, 0, #10723) +ext_argtype(#10819, 0, #10723) +ext_argtype(#10820, 0, #10723) +#11649 = @"C_type$decimal.ContextManager$__enter__" +ext_argtype(#11649, 0, #10042) +ext_argtype(#10821, 0, #10042) +#11650 = @"C_type$decimal.SignalDictMixin" +ext_argtype(#10822, 0, #11650) +#11651 = @"C_type$zipimport.zipimporter" +ext_argtype(#10823, 0, #11651) +ext_argtype(#10823, 2, #11507) +ext_argtype(#10824, 0, #11651) +ext_argtype(#10824, 2, #11507) +#11652 = @"C_type$zipimport.zipimporter$load_module" +ext_argtype(#11652, 0, #11651) +ext_argtype(#10825, 0, #11651) +ext_argtype(#10826, 0, #11651) +ext_argtype(#10827, 0, #11651) +#11653 = @"C_type$zipimport.zipimporter$get_filename" +ext_argtype(#11653, 0, #11651) +ext_argtype(#10828, 0, #11651) +#11654 = @"C_type$arrayiterator" +ext_argtype(#10829, 0, #11654) +ext_argtype(#10830, 0, #11654) +ext_argtype(#10830, 1, #11507) +#11655 = @"C_type$array.array" +ext_argtype(#10831, 0, #11655) +ext_argtype(#10831, 1, #11507) +ext_argtype(#10832, 0, #11655) +ext_argtype(#10833, 0, #11655) +#11656 = @"C_type$array.array$__copy__" +ext_argtype(#11656, 0, #11655) +ext_argtype(#10834, 0, #11655) +ext_argtype(#10834, 1, #11507) +#11657 = @"C_type$array.array$__deepcopy__" +ext_argtype(#11657, 0, #11655) +ext_argtype(#11657, 1, #11507) +ext_argtype(#10835, 0, #11655) +ext_argtype(#10835, 1, #11507) +ext_argtype(#10836, 0, #11655) +ext_argtype(#10837, 0, #11655) +ext_argtype(#10837, 1, #11507) +ext_argtype(#10838, 0, #11655) +ext_argtype(#10839, 0, #11655) +ext_argtype(#10840, 0, #11655) +ext_argtype(#10841, 0, #11655) +ext_argtype(#10841, 1, #11507) +ext_argtype(#10842, 0, #11655) +#11658 = @"C_type$array.array$pop" +ext_argtype(#11658, 0, #11655) +ext_argtype(#10843, 0, #11655) +ext_argtype(#10843, 1, #11507) +ext_argtype(#10844, 0, #11655) +ext_argtype(#10844, 1, #11507) +ext_argtype(#10845, 0, #11655) +ext_argtype(#10846, 0, #11655) +ext_argtype(#10846, 1, #11507) +ext_argtype(#10847, 0, #11655) +ext_argtype(#10848, 0, #11655) +ext_argtype(#10849, 0, #11655) +ext_argtype(#10850, 0, #11655) +ext_argtype(#10851, 0, #11655) +ext_argtype(#10852, 0, #10062) +ext_argtype(#10853, 0, #10062) +#11659 = @"C_type$MultibyteIncrementalEncoder" +ext_argtype(#10854, 0, #11659) +ext_argtype(#10855, 0, #11659) +#11660 = @"C_type$MultibyteIncrementalDecoder$3decode" +#11661 = @"C_type$MultibyteIncrementalDecoder" +ext_argtype(#11660, 0, #11661) +ext_argtype(#10856, 0, #11661) +#11662 = @"C_type$MultibyteStreamReader$3read" +#11663 = @"C_type$MultibyteStreamReader" +ext_argtype(#11662, 0, #11663) +#11664 = @"C_type$MultibyteStreamReader$3readline" +ext_argtype(#11664, 0, #11663) +ext_argtype(#10857, 0, #11663) +ext_argtype(#10858, 0, #11663) +#11665 = @"C_type$MultibyteStreamWriter" +ext_argtype(#10859, 0, #11665) +ext_argtype(#10859, 1, #11507) +ext_argtype(#10860, 0, #11665) +ext_argtype(#10860, 1, #11507) +ext_argtype(#10861, 0, #11665) +#11666 = @"C_type$Struct" +ext_argtype(#10862, 0, #11666) +ext_argtype(#10863, 0, #11666) +ext_argtype(#10864, 0, #11666) +ext_argtype(#10864, 1, #11507) +ext_argtype(#10865, 0, #11666) +ext_argtype(#10866, 0, #11666) +#11667 = @"C_type$_ssl._SSLContext" +ext_argtype(#10867, 0, #11667) +ext_argtype(#10869, 0, #11667) +ext_argtype(#10869, 1, #10010) +ext_argtype(#10870, 0, #11667) +ext_argtype(#10870, 1, #11276) +ext_argtype(#10870, 1, #10081) +ext_argtype(#10871, 0, #11667) +ext_argtype(#10871, 1, #11507) +ext_argtype(#10871, 2, #11507) +ext_argtype(#10871, 3, #11507) +ext_argtype(#10872, 0, #11667) +ext_argtype(#10872, 1, #11507) +ext_argtype(#10873, 0, #11667) +ext_argtype(#10873, 1, #11507) +ext_argtype(#10873, 2, #11507) +ext_argtype(#10874, 0, #11667) +ext_argtype(#10875, 0, #11667) +ext_argtype(#10876, 0, #11667) +ext_argtype(#10876, 1, #11507) +ext_argtype(#10877, 0, #10868) +ext_argtype(#10878, 0, #10868) +ext_argtype(#10878, 1, #11276) +ext_argtype(#10878, 1, #10081) +ext_argtype(#10879, 0, #10868) +ext_argtype(#10879, 1, #10024) +ext_argtype(#10880, 0, #10868) +ext_argtype(#10881, 0, #10868) +ext_argtype(#10881, 1, #11507) +ext_argtype(#10882, 0, #10868) +ext_argtype(#10883, 0, #10868) +ext_argtype(#10884, 0, #10868) +ext_argtype(#10885, 0, #10868) +ext_argtype(#10887, 0, #10868) +ext_argtype(#10888, 0, #10124) +ext_argtype(#10888, 1, #10024) +ext_argtype(#10888, 2, #10001) +ext_argtype(#10889, 0, #10124) +ext_argtype(#10889, 1, #10024) +ext_argtype(#10889, 2, #10001) +ext_argtype(#10890, 0, #10124) +ext_argtype(#10891, 0, #10124) +ext_argtype(#10892, 0, #10124) +ext_argtype(#10893, 0, #10124) +ext_argtype(#10894, 0, #10124) +ext_argtype(#10894, 1, #10024) +ext_argtype(#10894, 2, #10001) +ext_argtype(#10895, 0, #10124) +#11668 = @"C_type$_thread.RLock" +ext_argtype(#10896, 0, #11668) +ext_argtype(#10896, 1, #10024) +ext_argtype(#10896, 2, #10001) +ext_argtype(#10897, 0, #11668) +ext_argtype(#10898, 0, #11668) +ext_argtype(#10899, 0, #11668) +ext_argtype(#10899, 1, #11507) +ext_argtype(#10900, 0, #11668) +ext_argtype(#10901, 0, #11668) +ext_argtype(#10901, 1, #10024) +ext_argtype(#10901, 2, #10001) +ext_argtype(#10902, 0, #11668) +ext_argtype(#10903, 0, #10169) +ext_argtype(#10904, 0, #10169) +ext_argtype(#10905, 0, #10169) +ext_argtype(#10906, 0, #10169) +ext_argtype(#10907, 0, #10189) +ext_argtype(#10907, 0, #10191) +ext_argtype(#10908, 0, #10189) +ext_argtype(#10908, 0, #10191) +#11669 = @"C_type$_sha256.sha256$hexdigest" +ext_argtype(#11669, 0, #10189) +ext_argtype(#11669, 0, #10191) +ext_argtype(#10909, 0, #10189) +ext_argtype(#10909, 0, #10191) +ext_argtype(#10909, 1, #11507) +ext_argtype(#10910, 0, #10189) +ext_argtype(#10910, 0, #10191) +ext_argtype(#10911, 0, #10189) +ext_argtype(#10911, 0, #10191) +#11670 = @"C_type$_sha256.sha224$hexdigest" +ext_argtype(#11670, 0, #10189) +ext_argtype(#11670, 0, #10191) +ext_argtype(#10912, 0, #10189) +ext_argtype(#10912, 0, #10191) +ext_argtype(#10912, 1, #11507) +#11671 = @"C_type$functools.partial" +ext_argtype(#10913, 0, #11671) +ext_argtype(#10914, 0, #11671) +ext_argtype(#10914, 1, #11507) +#11672 = @"C_type$_pickle.Pickler" +ext_argtype(#10915, 0, #11672) +ext_argtype(#10915, 1, #11507) +ext_argtype(#10916, 0, #11672) +#11673 = @"C_type$_pickle.PicklerMemoProxy" +ext_argtype(#10917, 0, #11673) +ext_argtype(#10918, 0, #11673) +ext_argtype(#10919, 0, #11673) +#11674 = @"C_type$_pickle.Unpickler$load" +#11675 = @"C_type$_pickle.Unpickler" +ext_argtype(#11674, 0, #11675) +#11676 = @"C_type$_pickle.Unpickler$find_class" +ext_argtype(#11676, 0, #11675) +#11677 = @"C_type$_pickle.UnpicklerMemoProxy" +ext_argtype(#10920, 0, #11677) +ext_argtype(#10921, 0, #11677) +ext_argtype(#10922, 0, #11677) +ext_argtype(#10923, 0, #10223) +ext_argtype(#10924, 0, #10223) +#11678 = @"C_type$_md5.md5$hexdigest" +ext_argtype(#11678, 0, #10223) +ext_argtype(#10925, 0, #10223) +ext_argtype(#10925, 1, #11507) +ext_argtype(#10926, 0, #10249) +ext_argtype(#10927, 0, #10249) +#11679 = @"C_type$_sha1.sha1$hexdigest" +ext_argtype(#11679, 0, #10249) +ext_argtype(#10928, 0, #10249) +ext_argtype(#10928, 1, #11507) +#11680 = @"C_type$_sre.SRE_Match" +ext_argtype(#10929, 0, #11680) +ext_argtype(#10930, 0, #11680) +ext_argtype(#10931, 0, #11680) +ext_argtype(#10932, 0, #11680) +ext_argtype(#10933, 0, #11680) +ext_argtype(#10934, 0, #11680) +#11681 = @"C_type$_sre.SRE_Match$expand" +ext_argtype(#11681, 0, #11680) +ext_argtype(#11681, 1, #11507) +#11682 = @"C_type$_sre.SRE_Match$__copy__" +ext_argtype(#11682, 0, #11680) +#11683 = @"C_type$_sre.SRE_Match$__deepcopy__" +ext_argtype(#11683, 0, #11680) +ext_argtype(#11683, 1, #11507) +#11684 = @"C_type$_sre.SRE_Scanner" +ext_argtype(#10935, 0, #11684) +ext_argtype(#10936, 0, #11684) +#11685 = @"C_type$_sre.SRE_Pattern" +ext_argtype(#10937, 0, #11685) +ext_argtype(#10938, 0, #11685) +ext_argtype(#10939, 0, #11685) +ext_argtype(#10940, 0, #11685) +ext_argtype(#10941, 0, #11685) +ext_argtype(#10942, 0, #11685) +ext_argtype(#10943, 0, #11685) +#11686 = @"C_type$_sre.SRE_Pattern$scanner" +ext_argtype(#11686, 0, #11685) +#11687 = @"C_type$_sre.SRE_Pattern$__copy__" +ext_argtype(#11687, 0, #11685) +#11688 = @"C_type$_sre.SRE_Pattern$__deepcopy__" +ext_argtype(#11688, 0, #11685) +ext_argtype(#11688, 1, #11507) +#11689 = @"C_type$datetime.timedelta$total_seconds" +#11690 = @"C_type$datetime.timedelta" +ext_argtype(#11689, 0, #11690) +ext_argtype(#10944, 0, #11690) +#11691 = @"C_type$datetime.tzinfo$tzname" +#11692 = @"C_type$datetime.tzinfo" +ext_argtype(#11691, 0, #11692) +ext_argtype(#11691, 1, #11507) +#11693 = @"C_type$datetime.tzinfo$utcoffset" +ext_argtype(#11693, 0, #11692) +ext_argtype(#11693, 1, #11507) +#11694 = @"C_type$datetime.tzinfo$dst" +ext_argtype(#11694, 0, #11692) +ext_argtype(#11694, 1, #11507) +#11695 = @"C_type$datetime.tzinfo$fromutc" +ext_argtype(#11695, 0, #11692) +ext_argtype(#11695, 1, #11507) +ext_argtype(#10945, 0, #11692) +#11696 = @"C_type$datetime.datetime$now" +#11697 = @"C_type$datetime.datetime" +ext_argtype(#11696, 0, #11697) +ext_argtype(#11696, 1, #11507) +#11698 = @"C_type$datetime.datetime$utcnow" +ext_argtype(#11698, 0, #11697) +#11699 = @"C_type$datetime.datetime$fromtimestamp" +ext_argtype(#11699, 0, #11697) +ext_argtype(#11699, 1, #11507) +ext_argtype(#11699, 2, #11507) +#11700 = @"C_type$datetime.datetime$utcfromtimestamp" +ext_argtype(#11700, 0, #11697) +ext_argtype(#11700, 1, #11507) +#11701 = @"C_type$datetime.datetime$strptime" +ext_argtype(#11701, 0, #11697) +#11702 = @"C_type$datetime.datetime$combine" +ext_argtype(#11702, 0, #11697) +#11703 = @"C_type$datetime.date" +ext_argtype(#11702, 1, #11703) +#11704 = @"C_type$datetime.time" +ext_argtype(#11702, 2, #11704) +#11705 = @"C_type$datetime.datetime$date" +ext_argtype(#11705, 0, #11697) +#11706 = @"C_type$datetime.datetime$time" +ext_argtype(#11706, 0, #11697) +#11707 = @"C_type$datetime.datetime$timetz" +ext_argtype(#11707, 0, #11697) +#11708 = @"C_type$datetime.datetime$ctime" +ext_argtype(#11708, 0, #11697) +#11709 = @"C_type$datetime.datetime$timetuple" +ext_argtype(#11709, 0, #11697) +ext_argtype(#10946, 0, #11697) +#11710 = @"C_type$datetime.datetime$utctimetuple" +ext_argtype(#11710, 0, #11697) +#11711 = @"C_type$datetime.datetime$isoformat" +ext_argtype(#11711, 0, #11697) +ext_argtype(#10947, 0, #11697) +ext_argtype(#10948, 0, #11697) +ext_argtype(#10949, 0, #11697) +#11712 = @"C_type$datetime.datetime$replace" +ext_argtype(#11712, 0, #11697) +ext_argtype(#11712, 1, #10024) +ext_argtype(#11712, 2, #10024) +ext_argtype(#11712, 3, #10024) +ext_argtype(#11712, 4, #10024) +ext_argtype(#11712, 5, #10024) +ext_argtype(#11712, 6, #10024) +ext_argtype(#11712, 7, #10024) +ext_argtype(#11712, 8, #11507) +#11713 = @"C_type$datetime.datetime$astimezone" +ext_argtype(#11713, 0, #11697) +ext_argtype(#11713, 1, #11507) +ext_argtype(#10950, 0, #11697) +#11714 = @"C_type$datetime.time$isoformat" +ext_argtype(#11714, 0, #11704) +#11715 = @"C_type$datetime.time$strftime" +ext_argtype(#11715, 0, #11704) +#11716 = @"C_type$datetime.time$__format__" +ext_argtype(#11716, 0, #11704) +ext_argtype(#10951, 0, #11704) +ext_argtype(#10952, 0, #11704) +ext_argtype(#10953, 0, #11704) +#11717 = @"C_type$datetime.time$replace" +ext_argtype(#11717, 0, #11704) +ext_argtype(#11717, 1, #10024) +ext_argtype(#11717, 2, #10024) +ext_argtype(#11717, 3, #10024) +ext_argtype(#11717, 4, #10024) +ext_argtype(#11717, 5, #11507) +ext_argtype(#10954, 0, #11704) +#11718 = @"C_type$datetime.timezone$tzname" +#11719 = @"C_type$datetime.timezone" +ext_argtype(#11718, 0, #11719) +ext_argtype(#11718, 1, #11507) +#11720 = @"C_type$datetime.timezone$utcoffset" +ext_argtype(#11720, 0, #11719) +ext_argtype(#11720, 1, #11507) +ext_argtype(#10955, 0, #11719) +ext_argtype(#10955, 1, #11507) +#11721 = @"C_type$datetime.timezone$fromutc" +ext_argtype(#11721, 0, #11719) +ext_argtype(#11721, 1, #11507) +ext_argtype(#10956, 0, #11719) +#11722 = @"C_type$datetime.date$fromtimestamp" +ext_argtype(#11722, 0, #11703) +ext_argtype(#11722, 1, #11507) +#11723 = @"C_type$datetime.date$fromordinal" +ext_argtype(#11723, 0, #11703) +ext_argtype(#11723, 1, #10024) +#11724 = @"C_type$datetime.date$today" +ext_argtype(#11724, 0, #11703) +#11725 = @"C_type$datetime.date$ctime" +ext_argtype(#11725, 0, #11703) +#11726 = @"C_type$datetime.date$strftime" +ext_argtype(#11726, 0, #11703) +#11727 = @"C_type$datetime.date$__format__" +ext_argtype(#11727, 0, #11703) +#11728 = @"C_type$datetime.date$timetuple" +ext_argtype(#11728, 0, #11703) +ext_argtype(#10957, 0, #11703) +#11729 = @"C_type$datetime.date$isoformat" +ext_argtype(#11729, 0, #11703) +ext_argtype(#10958, 0, #11703) +ext_argtype(#10959, 0, #11703) +ext_argtype(#10960, 0, #11703) +#11730 = @"C_type$datetime.date$replace" +ext_argtype(#11730, 0, #11703) +ext_argtype(#11730, 1, #10024) +ext_argtype(#11730, 2, #10024) +ext_argtype(#11730, 3, #10024) +ext_argtype(#10961, 0, #11703) +#11731 = @"C_type$ndarray" +ext_argtype(#10962, 0, #11731) +ext_argtype(#10963, 0, #11731) +ext_argtype(#10964, 0, #11731) +ext_argtype(#10965, 0, #11731) +ext_argtype(#10966, 0, #11731) +ext_argtype(#10967, 0, #11731) +#11732 = @"C_type$mmap.mmap" +ext_argtype(#10968, 0, #11732) +ext_argtype(#10969, 0, #11732) +ext_argtype(#10970, 0, #11732) +ext_argtype(#10971, 0, #11732) +ext_argtype(#10972, 0, #11732) +ext_argtype(#10973, 0, #11732) +ext_argtype(#10974, 0, #11732) +ext_argtype(#10975, 0, #11732) +ext_argtype(#10976, 0, #11732) +ext_argtype(#10977, 0, #11732) +ext_argtype(#10978, 0, #11732) +ext_argtype(#10979, 0, #11732) +ext_argtype(#10980, 0, #11732) +ext_argtype(#10981, 0, #11732) +#11733 = @"C_type$mmap.mmap$__enter__" +ext_argtype(#11733, 0, #11732) +#11734 = @"C_type$mmap.mmap$__exit__" +ext_argtype(#11734, 0, #11732) +ext_argtype(#10982, 0, #10411) +ext_argtype(#10982, 1, #11507) +ext_argtype(#10982, 2, #11507) +ext_argtype(#10983, 0, #10411) +ext_argtype(#10983, 1, #11507) +ext_argtype(#10983, 2, #11507) +ext_argtype(#10984, 0, #10411) +ext_argtype(#10984, 1, #11507) +ext_argtype(#10985, 0, #10411) +#11735 = @"C_type$select.epoll$fromfd" +#11736 = @"C_type$select.epoll" +ext_argtype(#11735, 0, #11736) +ext_argtype(#11735, 1, #10024) +ext_argtype(#10986, 0, #11736) +ext_argtype(#10987, 0, #11736) +ext_argtype(#10988, 0, #11736) +ext_argtype(#10988, 1, #11507) +ext_argtype(#10988, 2, #10024) +ext_argtype(#10989, 0, #11736) +ext_argtype(#10989, 1, #11507) +ext_argtype(#10989, 2, #10024) +ext_argtype(#10990, 0, #11736) +ext_argtype(#10990, 1, #11507) +ext_argtype(#10991, 0, #11736) +ext_argtype(#10991, 1, #10001) +ext_argtype(#10991, 2, #10024) +#11737 = @"C_type$_io._TextIOBase$detach" +#11738 = @"C_type$_io._TextIOBase" +ext_argtype(#11737, 0, #11738) +#11739 = @"C_type$_io._TextIOBase$read" +ext_argtype(#11739, 0, #11738) +#11740 = @"C_type$_io._TextIOBase$readline" +ext_argtype(#11740, 0, #11738) +#11741 = @"C_type$_io._TextIOBase$write" +ext_argtype(#11741, 0, #11738) +#11742 = @"C_type$_io.IncrementalNewlineDecoder$decode" +#11743 = @"C_type$_io.IncrementalNewlineDecoder" +ext_argtype(#11742, 0, #11743) +ext_argtype(#10992, 0, #11743) +ext_argtype(#10993, 0, #11743) +ext_argtype(#10993, 1, #11507) +ext_argtype(#10994, 0, #11743) +#11744 = @"C_type$_io.TextIOWrapper$detach" +#11745 = @"C_type$_io.TextIOWrapper" +ext_argtype(#11744, 0, #11745) +ext_argtype(#10995, 0, #11745) +#11746 = @"C_type$_io.TextIOWrapper$read" +ext_argtype(#11746, 0, #11745) +#11747 = @"C_type$_io.TextIOWrapper$readline" +ext_argtype(#11747, 0, #11745) +#11748 = @"C_type$_io.TextIOWrapper$flush" +ext_argtype(#11748, 0, #11745) +ext_argtype(#10996, 0, #11745) +#11749 = @"C_type$_io.TextIOWrapper$fileno" +ext_argtype(#11749, 0, #11745) +#11750 = @"C_type$_io.TextIOWrapper$seekable" +ext_argtype(#11750, 0, #11745) +#11751 = @"C_type$_io.TextIOWrapper$readable" +ext_argtype(#11751, 0, #11745) +#11752 = @"C_type$_io.TextIOWrapper$writable" +ext_argtype(#11752, 0, #11745) +#11753 = @"C_type$_io.TextIOWrapper$isatty" +ext_argtype(#11753, 0, #11745) +#11754 = @"C_type$_io.TextIOWrapper$__getstate__" +ext_argtype(#11754, 0, #11745) +#11755 = @"C_type$_io.TextIOWrapper$seek" +ext_argtype(#11755, 0, #11745) +ext_argtype(#10997, 0, #11745) +#11756 = @"C_type$_io.TextIOWrapper$truncate" +ext_argtype(#11756, 0, #11745) +#11757 = @"C_type$_io.BytesIO" +ext_argtype(#10998, 0, #11757) +ext_argtype(#10999, 0, #11757) +ext_argtype(#11000, 0, #11757) +ext_argtype(#11001, 0, #11757) +ext_argtype(#11002, 0, #11757) +ext_argtype(#11003, 0, #11757) +ext_argtype(#11004, 0, #11757) +ext_argtype(#11005, 0, #11757) +ext_argtype(#11005, 1, #11507) +ext_argtype(#11006, 0, #11757) +ext_argtype(#11006, 1, #11507) +ext_argtype(#11007, 0, #11757) +ext_argtype(#11007, 1, #11507) +ext_argtype(#11008, 0, #11757) +ext_argtype(#11008, 1, #11507) +ext_argtype(#11009, 0, #11757) +ext_argtype(#11009, 1, #11507) +ext_argtype(#11010, 0, #11757) +ext_argtype(#11010, 1, #11507) +ext_argtype(#11011, 0, #11757) +ext_argtype(#11011, 1, #11507) +ext_argtype(#11012, 0, #11757) +ext_argtype(#11013, 0, #11757) +ext_argtype(#11014, 0, #11757) +ext_argtype(#11014, 1, #10024) +ext_argtype(#11014, 2, #10024) +ext_argtype(#11015, 0, #11757) +ext_argtype(#11015, 1, #11507) +ext_argtype(#11016, 0, #11757) +ext_argtype(#11017, 0, #11757) +ext_argtype(#11017, 1, #11507) +ext_argtype(#11018, 0, #11757) +#11758 = @"C_type$_io._IOBase$seek" +#11759 = @"C_type$_io._IOBase" +ext_argtype(#11758, 0, #11759) +#11760 = @"C_type$_io._IOBase$tell" +ext_argtype(#11760, 0, #11759) +#11761 = @"C_type$_io._IOBase$truncate" +ext_argtype(#11761, 0, #11759) +ext_argtype(#11019, 0, #11759) +ext_argtype(#11020, 0, #11759) +ext_argtype(#11021, 0, #11759) +ext_argtype(#11022, 0, #11759) +ext_argtype(#11023, 0, #11759) +ext_argtype(#11024, 0, #11759) +#11762 = @"C_type$_io._IOBase$_checkSeekable" +ext_argtype(#11762, 0, #11759) +#11763 = @"C_type$_io._IOBase$_checkReadable" +ext_argtype(#11763, 0, #11759) +#11764 = @"C_type$_io._IOBase$_checkWritable" +ext_argtype(#11764, 0, #11759) +#11765 = @"C_type$_io._IOBase$fileno" +ext_argtype(#11765, 0, #11759) +ext_argtype(#11025, 0, #11759) +#11766 = @"C_type$_io._IOBase$__enter__" +ext_argtype(#11766, 0, #11759) +#11767 = @"C_type$_io._IOBase$__exit__" +ext_argtype(#11767, 0, #11759) +ext_argtype(#11026, 0, #11759) +ext_argtype(#11027, 0, #11759) +ext_argtype(#11028, 0, #11759) +#11768 = @"C_type$_io._RawIOBase" +ext_argtype(#11029, 0, #11768) +ext_argtype(#11030, 0, #11768) +#11769 = @"C_type$_io._BufferedIOBase$detach" +#11770 = @"C_type$_io._BufferedIOBase" +ext_argtype(#11769, 0, #11770) +#11771 = @"C_type$_io._BufferedIOBase$read" +ext_argtype(#11771, 0, #11770) +#11772 = @"C_type$_io._BufferedIOBase$read1" +ext_argtype(#11772, 0, #11770) +ext_argtype(#11031, 0, #11770) +#11773 = @"C_type$_io._BufferedIOBase$write" +ext_argtype(#11773, 0, #11770) +#11774 = @"C_type$_io.BufferedReader$detach" +#11775 = @"C_type$_io.BufferedReader" +ext_argtype(#11774, 0, #11775) +#11776 = @"C_type$_io.BufferedReader$flush" +ext_argtype(#11776, 0, #11775) +ext_argtype(#11032, 0, #11775) +#11777 = @"C_type$_io.BufferedReader$seekable" +ext_argtype(#11777, 0, #11775) +#11778 = @"C_type$_io.BufferedReader$readable" +ext_argtype(#11778, 0, #11775) +#11779 = @"C_type$_io.BufferedReader$writable" +ext_argtype(#11779, 0, #11775) +#11780 = @"C_type$_io.BufferedReader$fileno" +ext_argtype(#11780, 0, #11775) +#11781 = @"C_type$_io.BufferedReader$isatty" +ext_argtype(#11781, 0, #11775) +ext_argtype(#11033, 0, #11775) +ext_argtype(#11033, 1, #11507) +#11782 = @"C_type$_io.BufferedReader$__getstate__" +ext_argtype(#11782, 0, #11775) +ext_argtype(#11034, 0, #11775) +ext_argtype(#11035, 0, #11775) +ext_argtype(#11036, 0, #11775) +ext_argtype(#11037, 0, #11775) +ext_argtype(#11038, 0, #11775) +ext_argtype(#11039, 0, #11775) +ext_argtype(#11040, 0, #11775) +ext_argtype(#11041, 0, #11775) +ext_argtype(#11042, 0, #11775) +#11783 = @"C_type$_io.BufferedRandom" +ext_argtype(#11043, 0, #11783) +#11784 = @"C_type$_io.BufferedRandom$detach" +ext_argtype(#11784, 0, #11783) +#11785 = @"C_type$_io.BufferedRandom$seekable" +ext_argtype(#11785, 0, #11783) +#11786 = @"C_type$_io.BufferedRandom$readable" +ext_argtype(#11786, 0, #11783) +#11787 = @"C_type$_io.BufferedRandom$writable" +ext_argtype(#11787, 0, #11783) +#11788 = @"C_type$_io.BufferedRandom$fileno" +ext_argtype(#11788, 0, #11783) +#11789 = @"C_type$_io.BufferedRandom$isatty" +ext_argtype(#11789, 0, #11783) +ext_argtype(#11044, 0, #11783) +ext_argtype(#11044, 1, #11507) +#11790 = @"C_type$_io.BufferedRandom$__getstate__" +ext_argtype(#11790, 0, #11783) +ext_argtype(#11045, 0, #11783) +ext_argtype(#11046, 0, #11783) +ext_argtype(#11047, 0, #11783) +ext_argtype(#11048, 0, #11783) +ext_argtype(#11049, 0, #11783) +ext_argtype(#11050, 0, #11783) +ext_argtype(#11051, 0, #11783) +ext_argtype(#11052, 0, #11783) +ext_argtype(#11053, 0, #11783) +ext_argtype(#11054, 0, #11783) +ext_argtype(#11055, 0, #11783) +#11791 = @"C_type$_io.BufferedWriter" +ext_argtype(#11056, 0, #11791) +#11792 = @"C_type$_io.BufferedWriter$detach" +ext_argtype(#11792, 0, #11791) +#11793 = @"C_type$_io.BufferedWriter$seekable" +ext_argtype(#11793, 0, #11791) +#11794 = @"C_type$_io.BufferedWriter$readable" +ext_argtype(#11794, 0, #11791) +#11795 = @"C_type$_io.BufferedWriter$writable" +ext_argtype(#11795, 0, #11791) +#11796 = @"C_type$_io.BufferedWriter$fileno" +ext_argtype(#11796, 0, #11791) +#11797 = @"C_type$_io.BufferedWriter$isatty" +ext_argtype(#11797, 0, #11791) +ext_argtype(#11057, 0, #11791) +ext_argtype(#11057, 1, #11507) +#11798 = @"C_type$_io.BufferedWriter$__getstate__" +ext_argtype(#11798, 0, #11791) +ext_argtype(#11058, 0, #11791) +ext_argtype(#11059, 0, #11791) +ext_argtype(#11060, 0, #11791) +ext_argtype(#11061, 0, #11791) +ext_argtype(#11062, 0, #11791) +ext_argtype(#11063, 0, #11791) +#11799 = @"C_type$_io.BufferedRWPair$read" +#11800 = @"C_type$_io.BufferedRWPair" +ext_argtype(#11799, 0, #11800) +#11801 = @"C_type$_io.BufferedRWPair$peek" +ext_argtype(#11801, 0, #11800) +#11802 = @"C_type$_io.BufferedRWPair$read1" +ext_argtype(#11802, 0, #11800) +#11803 = @"C_type$_io.BufferedRWPair$readinto" +ext_argtype(#11803, 0, #11800) +#11804 = @"C_type$_io.BufferedRWPair$write" +ext_argtype(#11804, 0, #11800) +#11805 = @"C_type$_io.BufferedRWPair$flush" +ext_argtype(#11805, 0, #11800) +#11806 = @"C_type$_io.BufferedRWPair$readable" +ext_argtype(#11806, 0, #11800) +#11807 = @"C_type$_io.BufferedRWPair$writable" +ext_argtype(#11807, 0, #11800) +#11808 = @"C_type$_io.BufferedRWPair$close" +ext_argtype(#11808, 0, #11800) +#11809 = @"C_type$_io.BufferedRWPair$isatty" +ext_argtype(#11809, 0, #11800) +#11810 = @"C_type$_io.BufferedRWPair$__getstate__" +ext_argtype(#11810, 0, #11800) +#11811 = @"C_type$_io.StringIO" +ext_argtype(#11064, 0, #11811) +#11812 = @"C_type$_io.StringIO$getvalue" +ext_argtype(#11812, 0, #11811) +#11813 = @"C_type$_io.StringIO$read" +ext_argtype(#11813, 0, #11811) +#11814 = @"C_type$_io.StringIO$readline" +ext_argtype(#11814, 0, #11811) +ext_argtype(#11065, 0, #11811) +ext_argtype(#11066, 0, #11811) +ext_argtype(#11067, 0, #11811) +ext_argtype(#11068, 0, #11811) +ext_argtype(#11068, 1, #11507) +ext_argtype(#11069, 0, #11811) +ext_argtype(#11070, 0, #11811) +ext_argtype(#11071, 0, #11811) +ext_argtype(#11072, 0, #11811) +ext_argtype(#11073, 0, #11811) +ext_argtype(#11073, 1, #11507) +#11815 = @"C_type$_io.FileIO" +ext_argtype(#11074, 0, #11815) +ext_argtype(#11075, 0, #11815) +ext_argtype(#11076, 0, #11815) +ext_argtype(#11077, 0, #11815) +ext_argtype(#11078, 0, #11815) +ext_argtype(#11079, 0, #11815) +#11816 = @"C_type$_io.FileIO$truncate" +ext_argtype(#11816, 0, #11815) +ext_argtype(#11080, 0, #11815) +ext_argtype(#11081, 0, #11815) +ext_argtype(#11082, 0, #11815) +ext_argtype(#11083, 0, #11815) +ext_argtype(#11084, 0, #11815) +ext_argtype(#11085, 0, #11815) +ext_argtype(#11086, 0, #11815) +ext_argtype(#11086, 1, #11507) +#11817 = @"C_type$_io.FileIO$__getstate__" +ext_argtype(#11817, 0, #11815) +ext_argtype(#11087, 0, #10526) +ext_argtype(#11087, 0, #10528) +ext_argtype(#11088, 0, #10526) +ext_argtype(#11088, 0, #10528) +#11818 = @"C_type$_sha512.sha512$hexdigest" +ext_argtype(#11818, 0, #10526) +ext_argtype(#11818, 0, #10528) +ext_argtype(#11089, 0, #10526) +ext_argtype(#11089, 0, #10528) +ext_argtype(#11089, 1, #11507) +ext_argtype(#11090, 0, #10526) +ext_argtype(#11090, 0, #10528) +ext_argtype(#11091, 0, #10526) +ext_argtype(#11091, 0, #10528) +#11819 = @"C_type$_sha512.sha384$hexdigest" +ext_argtype(#11819, 0, #10526) +ext_argtype(#11819, 0, #10528) +ext_argtype(#11092, 0, #10526) +ext_argtype(#11092, 0, #10528) +ext_argtype(#11092, 1, #11507) +#11820 = @"C_type$_lsprof.Profiler$getstats" +#11821 = @"C_type$_lsprof.Profiler" +ext_argtype(#11820, 0, #11821) +ext_argtype(#11093, 0, #11821) +ext_argtype(#11093, 1, #10024) +ext_argtype(#11093, 2, #10024) +ext_argtype(#11094, 0, #11821) +ext_argtype(#11095, 0, #11821) +ext_argtype(#11096, 0, #10531) +#11822 = @"C_type$xml.etree.ElementTree.Element$get" +ext_argtype(#11822, 0, #10531) +ext_argtype(#11822, 1, #11507) +ext_argtype(#11822, 2, #11507) +ext_argtype(#11097, 0, #10531) +ext_argtype(#11097, 1, #11507) +ext_argtype(#11097, 2, #11507) +ext_argtype(#11098, 0, #10531) +ext_argtype(#11098, 1, #11507) +ext_argtype(#11098, 2, #11507) +#11823 = @"C_type$xml.etree.ElementTree.Element$findtext" +ext_argtype(#11823, 0, #10531) +ext_argtype(#11823, 1, #11507) +ext_argtype(#11823, 2, #11507) +ext_argtype(#11823, 3, #11507) +ext_argtype(#11099, 0, #10531) +ext_argtype(#11099, 1, #11507) +ext_argtype(#11099, 2, #11507) +ext_argtype(#11100, 0, #10531) +ext_argtype(#11100, 1, #10531) +ext_argtype(#11101, 0, #10531) +ext_argtype(#11101, 1, #11507) +ext_argtype(#11102, 0, #10531) +ext_argtype(#11102, 1, #10024) +ext_argtype(#11102, 2, #10531) +ext_argtype(#11103, 0, #10531) +ext_argtype(#11103, 1, #10531) +ext_argtype(#11104, 0, #10531) +ext_argtype(#11104, 1, #11507) +ext_argtype(#11106, 0, #10531) +#11824 = @"C_type$xml.etree.ElementTree.Element$iterfind" +ext_argtype(#11824, 0, #10531) +ext_argtype(#11824, 1, #11507) +ext_argtype(#11824, 2, #11507) +ext_argtype(#11107, 0, #10531) +ext_argtype(#11107, 1, #11507) +ext_argtype(#11108, 0, #10531) +ext_argtype(#11109, 0, #10531) +ext_argtype(#11110, 0, #10531) +ext_argtype(#11111, 0, #10531) +ext_argtype(#11111, 1, #11507) +ext_argtype(#11111, 2, #11507) +ext_argtype(#11112, 0, #10531) +ext_argtype(#11113, 0, #10531) +ext_argtype(#11113, 1, #11507) +ext_argtype(#11114, 0, #10531) +ext_argtype(#11115, 0, #10531) +ext_argtype(#11116, 0, #10531) +ext_argtype(#11116, 1, #11507) +#11825 = @"C_type$xml.etree.ElementTree.TreeBuilder" +ext_argtype(#11117, 0, #11825) +ext_argtype(#11117, 1, #11507) +ext_argtype(#11118, 0, #11825) +ext_argtype(#11118, 1, #11507) +ext_argtype(#11118, 2, #11507) +#11826 = @"C_type$xml.etree.ElementTree.TreeBuilder$end" +ext_argtype(#11826, 0, #11825) +ext_argtype(#11826, 1, #11507) +ext_argtype(#11119, 0, #11825) +#11827 = @"C_type$xml.etree.ElementTree.XMLParser" +ext_argtype(#11120, 0, #11827) +ext_argtype(#11120, 1, #11507) +ext_argtype(#11121, 0, #11827) +ext_argtype(#11122, 0, #11827) +ext_argtype(#11122, 1, #11507) +ext_argtype(#11123, 0, #11827) +ext_argtype(#11123, 1, #10020) +ext_argtype(#11123, 2, #11507) +ext_argtype(#11124, 0, #11827) +#11828 = @"C_type$_ctypes.PyCArrayType$from_param" +#11829 = @"C_type$_ctypes.PyCArrayType" +ext_argtype(#11828, 0, #11829) +#11830 = @"C_type$_ctypes.PyCFuncPtrType" +ext_argtype(#11828, 0, #11830) +#11831 = @"C_type$_ctypes.PyCStructType" +ext_argtype(#11828, 0, #11831) +#11832 = @"C_type$_ctypes.UnionType" +ext_argtype(#11828, 0, #11832) +ext_argtype(#11828, 1, #11507) +#11833 = @"C_type$_ctypes.PyCArrayType$from_address" +ext_argtype(#11833, 0, #11829) +ext_argtype(#11833, 0, #11830) +ext_argtype(#11833, 0, #11831) +ext_argtype(#11833, 0, #11832) +ext_argtype(#11833, 1, #11507) +#11834 = @"C_type$_ctypes.PyCArrayType$from_buffer" +ext_argtype(#11834, 0, #11829) +ext_argtype(#11834, 0, #11830) +ext_argtype(#11834, 0, #11831) +ext_argtype(#11834, 0, #11832) +#11835 = @"C_type$_ctypes.PyCArrayType$from_buffer_copy" +ext_argtype(#11835, 0, #11829) +ext_argtype(#11835, 0, #11830) +ext_argtype(#11835, 0, #11831) +ext_argtype(#11835, 0, #11832) +#11836 = @"C_type$_ctypes.PyCArrayType$in_dll" +ext_argtype(#11836, 0, #11829) +ext_argtype(#11836, 0, #11830) +ext_argtype(#11836, 0, #11831) +ext_argtype(#11836, 0, #11832) +#11837 = @"C_type$_ctypes.PyCFuncPtrType$from_param" +ext_argtype(#11837, 0, #11829) +ext_argtype(#11837, 0, #11830) +ext_argtype(#11837, 0, #11831) +ext_argtype(#11837, 0, #11832) +ext_argtype(#11837, 1, #11507) +#11838 = @"C_type$_ctypes.PyCFuncPtrType$from_address" +ext_argtype(#11838, 0, #11829) +ext_argtype(#11838, 0, #11830) +ext_argtype(#11838, 0, #11831) +ext_argtype(#11838, 0, #11832) +ext_argtype(#11838, 1, #11507) +#11839 = @"C_type$_ctypes.PyCFuncPtrType$from_buffer" +ext_argtype(#11839, 0, #11829) +ext_argtype(#11839, 0, #11830) +ext_argtype(#11839, 0, #11831) +ext_argtype(#11839, 0, #11832) +#11840 = @"C_type$_ctypes.PyCFuncPtrType$from_buffer_copy" +ext_argtype(#11840, 0, #11829) +ext_argtype(#11840, 0, #11830) +ext_argtype(#11840, 0, #11831) +ext_argtype(#11840, 0, #11832) +#11841 = @"C_type$_ctypes.PyCFuncPtrType$in_dll" +ext_argtype(#11841, 0, #11829) +ext_argtype(#11841, 0, #11830) +ext_argtype(#11841, 0, #11831) +ext_argtype(#11841, 0, #11832) +#11842 = @"C_type$_ctypes.PyCStructType$from_param" +ext_argtype(#11842, 0, #11829) +ext_argtype(#11842, 0, #11830) +ext_argtype(#11842, 0, #11831) +ext_argtype(#11842, 0, #11832) +ext_argtype(#11842, 1, #11507) +#11843 = @"C_type$_ctypes.PyCStructType$from_address" +ext_argtype(#11843, 0, #11829) +ext_argtype(#11843, 0, #11830) +ext_argtype(#11843, 0, #11831) +ext_argtype(#11843, 0, #11832) +ext_argtype(#11843, 1, #11507) +#11844 = @"C_type$_ctypes.PyCStructType$from_buffer" +ext_argtype(#11844, 0, #11829) +ext_argtype(#11844, 0, #11830) +ext_argtype(#11844, 0, #11831) +ext_argtype(#11844, 0, #11832) +#11845 = @"C_type$_ctypes.PyCStructType$from_buffer_copy" +ext_argtype(#11845, 0, #11829) +ext_argtype(#11845, 0, #11830) +ext_argtype(#11845, 0, #11831) +ext_argtype(#11845, 0, #11832) +#11846 = @"C_type$_ctypes.PyCStructType$in_dll" +ext_argtype(#11846, 0, #11829) +ext_argtype(#11846, 0, #11830) +ext_argtype(#11846, 0, #11831) +ext_argtype(#11846, 0, #11832) +#11847 = @"C_type$_ctypes.UnionType$from_param" +ext_argtype(#11847, 0, #11829) +ext_argtype(#11847, 0, #11830) +ext_argtype(#11847, 0, #11831) +ext_argtype(#11847, 0, #11832) +ext_argtype(#11847, 1, #11507) +#11848 = @"C_type$_ctypes.UnionType$from_address" +ext_argtype(#11848, 0, #11829) +ext_argtype(#11848, 0, #11830) +ext_argtype(#11848, 0, #11831) +ext_argtype(#11848, 0, #11832) +ext_argtype(#11848, 1, #11507) +#11849 = @"C_type$_ctypes.UnionType$from_buffer" +ext_argtype(#11849, 0, #11829) +ext_argtype(#11849, 0, #11830) +ext_argtype(#11849, 0, #11831) +ext_argtype(#11849, 0, #11832) +#11850 = @"C_type$_ctypes.UnionType$from_buffer_copy" +ext_argtype(#11850, 0, #11829) +ext_argtype(#11850, 0, #11830) +ext_argtype(#11850, 0, #11831) +ext_argtype(#11850, 0, #11832) +#11851 = @"C_type$_ctypes.UnionType$in_dll" +ext_argtype(#11851, 0, #11829) +ext_argtype(#11851, 0, #11830) +ext_argtype(#11851, 0, #11831) +ext_argtype(#11851, 0, #11832) +#11852 = @"C_type$_ctypes._SimpleCData$__ctypes_from_outparam__" +#11853 = @"C_type$_ctypes._SimpleCData" +ext_argtype(#11852, 0, #11853) +#11854 = @"C_type$_ctypes._CData$__ctypes_from_outparam__" +#11855 = @"C_type$_ctypes._CData" +ext_argtype(#11854, 0, #11855) +ext_argtype(#11125, 0, #11855) +ext_argtype(#11126, 0, #11855) +#11856 = @"C_type$_ctypes.PyCPointerType$from_address" +#11857 = @"C_type$_ctypes.PyCPointerType" +ext_argtype(#11856, 0, #11857) +ext_argtype(#11856, 1, #11507) +#11858 = @"C_type$_ctypes.PyCPointerType$from_buffer" +ext_argtype(#11858, 0, #11857) +#11859 = @"C_type$_ctypes.PyCPointerType$from_buffer_copy" +ext_argtype(#11859, 0, #11857) +#11860 = @"C_type$_ctypes.PyCPointerType$in_dll" +ext_argtype(#11860, 0, #11857) +ext_argtype(#11127, 0, #11857) +ext_argtype(#11127, 1, #11507) +ext_argtype(#11128, 0, #11857) +ext_argtype(#11128, 1, #11507) +#11861 = @"C_type$_ctypes.PyCSimpleType" +ext_argtype(#11129, 0, #11861) +ext_argtype(#11129, 1, #11507) +#11862 = @"C_type$_ctypes.PyCSimpleType$from_address" +ext_argtype(#11862, 0, #11861) +ext_argtype(#11862, 1, #11507) +#11863 = @"C_type$_ctypes.PyCSimpleType$from_buffer" +ext_argtype(#11863, 0, #11861) +#11864 = @"C_type$_ctypes.PyCSimpleType$from_buffer_copy" +ext_argtype(#11864, 0, #11861) +#11865 = @"C_type$_ctypes.PyCSimpleType$in_dll" +ext_argtype(#11865, 0, #11861) +#11866 = @"C_type$zlib.Compress$compress" +#11867 = @"C_type$zlib.Compress" +ext_argtype(#11866, 0, #11867) +ext_argtype(#11866, 1, #11276) +ext_argtype(#11866, 1, #10081) +ext_argtype(#11130, 0, #11867) +ext_argtype(#11130, 1, #10024) +#11868 = @"C_type$zlib.Compress$copy" +ext_argtype(#11868, 0, #11867) +#11869 = @"C_type$zlib.Decompress$decompress" +#11870 = @"C_type$zlib.Decompress" +ext_argtype(#11869, 0, #11870) +ext_argtype(#11869, 1, #11276) +ext_argtype(#11869, 1, #10081) +ext_argtype(#11869, 2, #10024) +#11871 = @"C_type$zlib.Decompress$flush" +ext_argtype(#11871, 0, #11870) +ext_argtype(#11871, 1, #10024) +#11872 = @"C_type$zlib.Decompress$copy" +ext_argtype(#11872, 0, #11870) +ext_argtype(#11131, 0, #11546) +ext_argtype(#11131, 1, #10010) +ext_argtype(#11131, 2, #11507) +ext_argtype(#11132, 0, #11546) +ext_argtype(#11132, 1, #10010) +ext_argtype(#11132, 2, #11507) +ext_argtype(#11133, 0, #11546) +ext_argtype(#11133, 1, #10010) +ext_argtype(#11133, 2, #11507) +#11873 = @"C_type$unicodedata.UCD$category" +ext_argtype(#11873, 0, #11546) +ext_argtype(#11873, 1, #10010) +#11874 = @"C_type$unicodedata.UCD$bidirectional" +ext_argtype(#11874, 0, #11546) +ext_argtype(#11874, 1, #10010) +ext_argtype(#11134, 0, #11546) +ext_argtype(#11134, 1, #10010) +ext_argtype(#11135, 0, #11546) +ext_argtype(#11135, 1, #10010) +#11875 = @"C_type$unicodedata.UCD$east_asian_width" +ext_argtype(#11875, 0, #11546) +ext_argtype(#11875, 1, #10010) +ext_argtype(#11136, 0, #11546) +ext_argtype(#11136, 1, #10010) +#11876 = @"C_type$unicodedata.UCD$name" +ext_argtype(#11876, 0, #11546) +ext_argtype(#11876, 1, #10010) +ext_argtype(#11876, 2, #11507) +#11877 = @"C_type$unicodedata.UCD$lookup" +ext_argtype(#11877, 0, #11546) +ext_argtype(#11877, 1, #10010) +#11878 = @"C_type$unicodedata.UCD$normalize" +ext_argtype(#11878, 0, #11546) +ext_argtype(#11878, 1, #10010) +ext_argtype(#11878, 2, #10010) +#11879 = @"C_type$itertools._grouper" +ext_argtype(#11137, 0, #11879) +#11880 = @"C_type$itertools.groupby" +ext_argtype(#11138, 0, #11880) +ext_argtype(#11139, 0, #11880) +ext_argtype(#11139, 1, #11507) +#11881 = @"C_type$itertools._tee_dataobject" +ext_argtype(#11140, 0, #11881) +ext_argtype(#11141, 0, #11142) +ext_argtype(#11143, 0, #11142) +ext_argtype(#11144, 0, #11142) +ext_argtype(#11144, 1, #11507) +#11882 = @"C_type$itertools.cycle" +ext_argtype(#11145, 0, #11882) +ext_argtype(#11146, 0, #11882) +ext_argtype(#11146, 1, #11507) +#11883 = @"C_type$itertools.dropwhile" +ext_argtype(#11147, 0, #11883) +ext_argtype(#11148, 0, #11883) +ext_argtype(#11148, 1, #11507) +#11884 = @"C_type$itertools.takewhile" +ext_argtype(#11149, 0, #11884) +ext_argtype(#11150, 0, #11884) +ext_argtype(#11150, 1, #11507) +#11885 = @"C_type$itertools.islice" +ext_argtype(#11151, 0, #11885) +ext_argtype(#11152, 0, #11885) +ext_argtype(#11152, 1, #11507) +#11886 = @"C_type$itertools.starmap" +ext_argtype(#11153, 0, #11886) +#11887 = @"C_type$itertools.chain$from_iterable" +#11888 = @"C_type$itertools.chain" +ext_argtype(#11887, 0, #11888) +ext_argtype(#11887, 1, #11507) +ext_argtype(#11154, 0, #11888) +ext_argtype(#11155, 0, #11888) +ext_argtype(#11155, 1, #11507) +#11889 = @"C_type$itertools.product" +ext_argtype(#11156, 0, #11889) +ext_argtype(#11157, 0, #11889) +ext_argtype(#11157, 1, #11507) +#11890 = @"C_type$itertools.combinations" +ext_argtype(#11158, 0, #11890) +ext_argtype(#11159, 0, #11890) +ext_argtype(#11159, 1, #11507) +#11891 = @"C_type$itertools.combinations_with_replacement" +ext_argtype(#11160, 0, #11891) +ext_argtype(#11161, 0, #11891) +ext_argtype(#11161, 1, #11507) +#11892 = @"C_type$itertools.permutations" +ext_argtype(#11162, 0, #11892) +ext_argtype(#11163, 0, #11892) +ext_argtype(#11163, 1, #11507) +#11893 = @"C_type$itertools.accumulate" +ext_argtype(#11164, 0, #11893) +ext_argtype(#11165, 0, #11893) +ext_argtype(#11165, 1, #11507) +#11894 = @"C_type$itertools.compress" +ext_argtype(#11166, 0, #11894) +#11895 = @"C_type$itertools.filterfalse" +ext_argtype(#11167, 0, #11895) +#11896 = @"C_type$itertools.count" +ext_argtype(#11168, 0, #11896) +#11897 = @"C_type$itertools.repeat" +ext_argtype(#11169, 0, #11897) +ext_argtype(#11170, 0, #11897) +#11898 = @"C_type$itertools.zip_longest" +ext_argtype(#11171, 0, #11898) +ext_argtype(#11172, 0, #11898) +ext_argtype(#11172, 1, #11507) +#11899 = @"C_type$ossaudiodev.oss_audio_device$read" +ext_argtype(#11899, 0, #10582) +ext_argtype(#11899, 1, #10024) +ext_argtype(#11173, 0, #10582) +ext_argtype(#11173, 1, #11276) +ext_argtype(#11173, 1, #10081) +ext_argtype(#11174, 0, #10582) +ext_argtype(#11174, 1, #11276) +ext_argtype(#11174, 1, #10081) +ext_argtype(#11175, 0, #10582) +ext_argtype(#11176, 0, #10582) +ext_argtype(#11177, 0, #10582) +ext_argtype(#11178, 0, #10582) +ext_argtype(#11179, 0, #10582) +ext_argtype(#11180, 0, #10582) +ext_argtype(#11181, 0, #10582) +ext_argtype(#11182, 0, #10582) +ext_argtype(#11183, 0, #10582) +ext_argtype(#11184, 0, #10582) +ext_argtype(#11185, 0, #10582) +ext_argtype(#11185, 1, #10024) +ext_argtype(#11185, 2, #10024) +ext_argtype(#11185, 3, #10024) +ext_argtype(#11185, 4, #10024) +ext_argtype(#11186, 0, #10582) +ext_argtype(#11187, 0, #10582) +ext_argtype(#11188, 0, #10582) +ext_argtype(#11189, 0, #10582) +ext_argtype(#11190, 0, #10582) +#11900 = @"C_type$ossaudiodev.oss_audio_device$__enter__" +ext_argtype(#11900, 0, #10582) +ext_argtype(#11191, 0, #10582) +ext_argtype(#11192, 0, #10584) +ext_argtype(#11193, 0, #10584) +#11901 = @"C_type$ossaudiodev.oss_mixer_device$__enter__" +ext_argtype(#11901, 0, #10584) +ext_argtype(#11194, 0, #10584) +ext_argtype(#11195, 0, #10584) +ext_argtype(#11196, 0, #10584) +ext_argtype(#11197, 0, #10584) +ext_argtype(#11198, 0, #10584) +ext_argtype(#11198, 1, #10024) +ext_argtype(#11199, 0, #10584) +ext_argtype(#11199, 1, #10024) +ext_argtype(#11199, 2, #10037) +ext_argtype(#11200, 0, #10584) +ext_argtype(#11201, 0, #10584) +ext_argtype(#11202, 0, #10586) +ext_argtype(#11202, 1, #11507) +ext_argtype(#11202, 2, #10024) +ext_argtype(#11203, 0, #10586) +ext_argtype(#11203, 1, #11507) +ext_argtype(#11204, 0, #10586) +ext_argtype(#11204, 1, #10010) +ext_argtype(#11205, 0, #10586) +ext_argtype(#11206, 0, #10586) +ext_argtype(#11206, 1, #10010) +ext_argtype(#11206, 1, #10005) +ext_argtype(#11206, 2, #10010) +ext_argtype(#11207, 0, #10586) +ext_argtype(#11207, 1, #10024) +ext_argtype(#11208, 0, #10586) +ext_argtype(#11209, 0, #10586) +ext_argtype(#11209, 1, #11507) +ext_argtype(#11210, 0, #10586) +ext_argtype(#11211, 0, #10886) +ext_argtype(#11212, 0, #10886) +ext_argtype(#11212, 1, #11507) +ext_argtype(#11213, 0, #10886) +ext_argtype(#11214, 0, #10886) +ext_argtype(#11214, 1, #11507) +ext_argtype(#11215, 0, #10886) +ext_argtype(#11215, 1, #11507) +ext_argtype(#11216, 0, #10886) +ext_argtype(#11217, 0, #10886) +ext_argtype(#11218, 0, #10886) +ext_argtype(#11219, 0, #10886) +ext_argtype(#11220, 0, #10886) +ext_argtype(#11220, 1, #10024) +ext_argtype(#11220, 2, #10024) +ext_argtype(#11220, 3, #10024) +ext_argtype(#11221, 0, #10886) +ext_argtype(#11221, 1, #11507) +#11902 = @"C_type$_socket.socket$recv" +ext_argtype(#11902, 0, #10886) +ext_argtype(#11902, 1, #10024) +ext_argtype(#11902, 2, #10024) +ext_argtype(#11222, 0, #10886) +ext_argtype(#11222, 2, #10024) +ext_argtype(#11222, 3, #10024) +ext_argtype(#11223, 0, #10886) +ext_argtype(#11223, 1, #10024) +ext_argtype(#11223, 2, #10024) +ext_argtype(#11224, 0, #10886) +ext_argtype(#11224, 2, #10024) +ext_argtype(#11224, 3, #10024) +ext_argtype(#11225, 0, #10886) +ext_argtype(#11225, 1, #11276) +ext_argtype(#11225, 1, #10081) +ext_argtype(#11225, 2, #10024) +ext_argtype(#11226, 0, #10886) +ext_argtype(#11226, 1, #11276) +ext_argtype(#11226, 1, #10081) +ext_argtype(#11226, 2, #10024) +ext_argtype(#11227, 0, #10886) +ext_argtype(#11228, 0, #10886) +ext_argtype(#11228, 1, #11507) +ext_argtype(#11229, 0, #10886) +ext_argtype(#11229, 1, #11507) +ext_argtype(#11230, 0, #10886) +ext_argtype(#11231, 0, #10886) +ext_argtype(#11232, 0, #10886) +ext_argtype(#11232, 1, #11507) +ext_argtype(#11233, 0, #10886) +ext_argtype(#11233, 1, #10024) +ext_argtype(#11233, 2, #10024) +ext_argtype(#11233, 3, #10024) +ext_argtype(#11234, 0, #10886) +ext_argtype(#11234, 1, #11507) +ext_argtype(#11234, 2, #10024) +ext_argtype(#11234, 3, #10024) +ext_argtype(#11235, 0, #10886) +ext_argtype(#11235, 1, #11507) +ext_argtype(#11235, 2, #11507) +ext_argtype(#11235, 3, #10024) +ext_argtype(#11235, 4, #11507) +#11903 = @"C_type$_ast.AST" +ext_argtype(#11236, 0, #11903) +#11904 = @"C_type$traceback" +ext_argtype(#11237, 0, #11904) +#11905 = @"C_type$filter" +ext_argtype(#11238, 0, #11905) +#11906 = @"C_type$map" +ext_argtype(#11239, 0, #11906) +#11907 = @"C_type$zip" +ext_argtype(#11240, 0, #11907) +ext_argtype(#11241, 0, #10517) +ext_argtype(#11242, 0, #10517) +ext_argtype(#11243, 0, #10517) +ext_argtype(#11244, 0, #10517) +ext_argtype(#11244, 1, #11507) +ext_argtype(#11245, 0, #10517) +ext_argtype(#11245, 1, #11507) +ext_argtype(#11246, 0, #10517) +ext_argtype(#11247, 0, #10517) +ext_argtype(#11248, 0, #11507) +ext_argtype(#11248, 1, #10024) +ext_argtype(#11249, 0, #11507) +ext_argtype(#11249, 1, #10024) +#11908 = @"C_type$object$3__subclasshook__" +ext_argtype(#11908, 0, #11507) +#11909 = @"C_type$object$3__format__" +ext_argtype(#11909, 0, #11507) +ext_argtype(#11250, 0, #11507) +ext_argtype(#11251, 0, #11507) +#11910 = @"C_type$dict_keyiterator" +ext_argtype(#11252, 0, #11910) +#11911 = @"C_type$dict_valueiterator" +ext_argtype(#11252, 0, #11911) +#11912 = @"C_type$dict_itemiterator" +ext_argtype(#11252, 0, #11912) +ext_argtype(#11253, 0, #11910) +ext_argtype(#11253, 0, #11911) +ext_argtype(#11253, 0, #11912) +ext_argtype(#11254, 0, #11910) +ext_argtype(#11254, 0, #11911) +ext_argtype(#11254, 0, #11912) +ext_argtype(#11255, 0, #11910) +ext_argtype(#11255, 0, #11911) +ext_argtype(#11255, 0, #11912) +ext_argtype(#11256, 0, #11910) +ext_argtype(#11256, 0, #11911) +ext_argtype(#11256, 0, #11912) +ext_argtype(#11257, 0, #11910) +ext_argtype(#11257, 0, #11911) +ext_argtype(#11257, 0, #11912) +ext_argtype(#11258, 0, #10111) +ext_argtype(#11258, 1, #11507) +#11913 = @"C_type$dict$3__getitem__" +ext_argtype(#11913, 0, #10111) +ext_argtype(#11913, 1, #11507) +ext_argtype(#11259, 0, #10111) +#11914 = @"C_type$dict$3get" +ext_argtype(#11914, 0, #10111) +#11915 = @"C_type$dict$3setdefault" +ext_argtype(#11915, 0, #10111) +#11916 = @"C_type$dict$3pop" +ext_argtype(#11916, 0, #10111) +ext_argtype(#11260, 0, #10111) +#11917 = @"C_type$dict$3keys" +ext_argtype(#11917, 0, #10111) +#11918 = @"C_type$dict$3items" +ext_argtype(#11918, 0, #10111) +#11919 = @"C_type$dict$3values" +ext_argtype(#11919, 0, #10111) +ext_argtype(#11261, 0, #10111) +#11920 = @"C_type$dict$3fromkeys" +ext_argtype(#11920, 0, #10111) +ext_argtype(#11262, 0, #10111) +ext_argtype(#11263, 0, #10111) +#11921 = @"C_type$dict_items" +ext_argtype(#11264, 0, #11921) +ext_argtype(#11264, 1, #11507) +#11922 = @"C_type$dict_keys" +ext_argtype(#11265, 0, #11922) +ext_argtype(#11265, 1, #11507) +ext_argtype(#11266, 0, #10647) +#11923 = @"C_type$bytearray_iterator" +ext_argtype(#11267, 0, #11923) +ext_argtype(#11268, 0, #11923) +ext_argtype(#11269, 0, #11923) +ext_argtype(#11269, 1, #11507) +ext_argtype(#11270, 0, #11276) +ext_argtype(#11271, 0, #11276) +ext_argtype(#11272, 0, #11276) +ext_argtype(#11273, 0, #11276) +ext_argtype(#11274, 0, #11276) +ext_argtype(#11274, 1, #11507) +ext_argtype(#11275, 0, #11276) +ext_argtype(#11277, 0, #11276) +ext_argtype(#11278, 0, #11276) +ext_argtype(#11279, 0, #11276) +ext_argtype(#11280, 0, #11276) +#11924 = @"C_type$bytearray$3decode" +ext_argtype(#11924, 0, #11276) +ext_argtype(#11281, 0, #11276) +ext_argtype(#11282, 0, #11276) +ext_argtype(#11283, 0, #11276) +ext_argtype(#11283, 1, #11507) +ext_argtype(#11284, 0, #11276) +ext_argtype(#11285, 0, #11276) +ext_argtype(#11286, 0, #11276) +ext_argtype(#11287, 0, #11276) +ext_argtype(#11288, 0, #11276) +ext_argtype(#11289, 0, #11276) +ext_argtype(#11290, 0, #11276) +ext_argtype(#11291, 0, #11276) +ext_argtype(#11292, 0, #11276) +ext_argtype(#11293, 0, #11276) +ext_argtype(#11294, 0, #11276) +ext_argtype(#11295, 0, #11276) +ext_argtype(#11295, 1, #11507) +ext_argtype(#11296, 0, #11276) +ext_argtype(#11297, 0, #11276) +ext_argtype(#11298, 0, #11276) +ext_argtype(#11300, 0, #11276) +ext_argtype(#11300, 1, #11507) +ext_argtype(#11301, 0, #11276) +ext_argtype(#11302, 0, #11276) +ext_argtype(#11302, 1, #11507) +ext_argtype(#11303, 0, #11276) +ext_argtype(#11304, 0, #11276) +ext_argtype(#11305, 0, #11276) +ext_argtype(#11306, 0, #11276) +ext_argtype(#11307, 0, #11276) +ext_argtype(#11308, 0, #11276) +ext_argtype(#11308, 1, #11507) +ext_argtype(#11309, 0, #11276) +ext_argtype(#11310, 0, #11276) +ext_argtype(#11311, 0, #11276) +ext_argtype(#11312, 0, #11276) +ext_argtype(#11313, 0, #11276) +ext_argtype(#11314, 0, #11276) +ext_argtype(#11315, 0, #11276) +ext_argtype(#11316, 0, #11276) +ext_argtype(#11317, 0, #11276) +ext_argtype(#11318, 0, #11276) +ext_argtype(#11319, 0, #11276) +ext_argtype(#11320, 0, #10626) +#11925 = @"C_type$list_iterator" +ext_argtype(#11321, 0, #11925) +ext_argtype(#11322, 0, #11925) +ext_argtype(#11323, 0, #11925) +ext_argtype(#11323, 1, #11507) +ext_argtype(#11324, 0, #11329) +ext_argtype(#11325, 0, #11329) +ext_argtype(#11326, 0, #11329) +ext_argtype(#11326, 1, #11507) +ext_argtype(#11327, 0, #10020) +ext_argtype(#11327, 1, #11507) +ext_argtype(#11328, 0, #10020) +ext_argtype(#11330, 0, #10020) +ext_argtype(#11331, 0, #10020) +ext_argtype(#11332, 0, #10020) +ext_argtype(#11333, 0, #10020) +ext_argtype(#11333, 1, #11507) +ext_argtype(#11334, 0, #10020) +ext_argtype(#11334, 1, #10024) +ext_argtype(#11334, 2, #11507) +ext_argtype(#11335, 0, #10020) +ext_argtype(#11335, 1, #11507) +#11926 = @"C_type$list$3pop" +ext_argtype(#11926, 0, #10020) +ext_argtype(#11926, 1, #10024) +ext_argtype(#11336, 0, #10020) +ext_argtype(#11336, 1, #11507) +ext_argtype(#11337, 0, #10020) +ext_argtype(#11337, 1, #11507) +ext_argtype(#11337, 2, #11507) +ext_argtype(#11337, 3, #11507) +ext_argtype(#11338, 0, #10020) +ext_argtype(#11338, 1, #11507) +ext_argtype(#11339, 0, #10020) +ext_argtype(#11340, 0, #10020) +ext_argtype(#11340, 1, #11507) +ext_argtype(#11340, 2, #10024) +ext_argtype(#11341, 0, #10024) +ext_argtype(#11342, 0, #10024) +ext_argtype(#11343, 0, #10024) +ext_argtype(#11343, 1, #10024) +ext_argtype(#11343, 3, #11507) +ext_argtype(#11344, 0, #10024) +ext_argtype(#11344, 1, #11507) +ext_argtype(#11344, 3, #11507) +ext_argtype(#11345, 0, #10024) +ext_argtype(#11346, 0, #10024) +ext_argtype(#11347, 0, #10024) +ext_argtype(#11348, 0, #10024) +ext_argtype(#11348, 1, #11507) +ext_argtype(#11349, 0, #10024) +#11927 = @"C_type$int$3__format__" +ext_argtype(#11927, 0, #10024) +ext_argtype(#11350, 0, #10024) +#11928 = @"C_type$mappingproxy$3get" +#11929 = @"C_type$mappingproxy" +ext_argtype(#11928, 0, #11929) +#11930 = @"C_type$mappingproxy$3keys" +ext_argtype(#11930, 0, #11929) +#11931 = @"C_type$mappingproxy$3values" +ext_argtype(#11931, 0, #11929) +#11932 = @"C_type$mappingproxy$3items" +ext_argtype(#11932, 0, #11929) +#11933 = @"C_type$mappingproxy$3copy" +ext_argtype(#11933, 0, #11929) +#11934 = @"C_type$property$3getter" +#11935 = @"C_type$property" +ext_argtype(#11934, 0, #11935) +ext_argtype(#11934, 1, #11507) +#11936 = @"C_type$property$3setter" +ext_argtype(#11936, 0, #11935) +ext_argtype(#11936, 1, #11507) +#11937 = @"C_type$property$3deleter" +ext_argtype(#11937, 0, #11935) +ext_argtype(#11937, 1, #11507) +#11938 = @"C_type$generator$3send" +#11939 = @"C_type$generator" +ext_argtype(#11938, 0, #11939) +ext_argtype(#11938, 1, #11507) +#11940 = @"C_type$generator$3throw" +ext_argtype(#11940, 0, #11939) +ext_argtype(#11351, 0, #11939) +#11941 = @"C_type$stderrprinter" +ext_argtype(#11352, 0, #11941) +ext_argtype(#11353, 0, #11941) +ext_argtype(#11354, 0, #11941) +ext_argtype(#11355, 0, #11941) +ext_argtype(#11356, 0, #11941) +#11942 = @"C_type$slice" +ext_argtype(#11357, 0, #11942) +ext_argtype(#11357, 1, #11507) +ext_argtype(#11358, 0, #11942) +#11943 = @"C_type$BaseException" +ext_argtype(#11359, 0, #11943) +ext_argtype(#11360, 0, #11943) +ext_argtype(#11360, 1, #11507) +#11944 = @"C_type$BaseException$3with_traceback" +ext_argtype(#11944, 0, #11943) +ext_argtype(#11944, 1, #11507) +#11945 = @"C_type$OSError" +ext_argtype(#11361, 0, #11945) +ext_argtype(#11362, 0, #10001) +ext_argtype(#11363, 0, #10001) +ext_argtype(#11364, 0, #10001) +ext_argtype(#11364, 1, #11507) +ext_argtype(#11365, 0, #10001) +#11946 = @"C_type$float$3fromhex" +ext_argtype(#11946, 0, #10001) +ext_argtype(#11946, 1, #11507) +#11947 = @"C_type$float$3hex" +ext_argtype(#11947, 0, #10001) +ext_argtype(#11366, 0, #10001) +ext_argtype(#11367, 0, #10001) +#11948 = @"C_type$float$3__getformat__" +ext_argtype(#11948, 0, #10001) +ext_argtype(#11948, 1, #11507) +ext_argtype(#11368, 0, #10001) +ext_argtype(#11368, 1, #10010) +ext_argtype(#11368, 2, #10010) +#11949 = @"C_type$float$3__format__" +ext_argtype(#11949, 0, #10001) +#11950 = @"C_type$bytes_iterator" +ext_argtype(#11369, 0, #11950) +ext_argtype(#11370, 0, #11950) +ext_argtype(#11371, 0, #11950) +ext_argtype(#11371, 1, #11507) +ext_argtype(#11372, 0, #10081) +ext_argtype(#11373, 0, #10081) +ext_argtype(#11374, 0, #10081) +ext_argtype(#11375, 0, #10081) +#11951 = @"C_type$bytes$3decode" +ext_argtype(#11951, 0, #10081) +ext_argtype(#11376, 0, #10081) +ext_argtype(#11377, 0, #10081) +ext_argtype(#11378, 0, #10081) +#11952 = @"C_type$bytes$3fromhex" +ext_argtype(#11952, 0, #10081) +ext_argtype(#11379, 0, #10081) +ext_argtype(#11380, 0, #10081) +ext_argtype(#11381, 0, #10081) +ext_argtype(#11382, 0, #10081) +ext_argtype(#11383, 0, #10081) +ext_argtype(#11384, 0, #10081) +ext_argtype(#11385, 0, #10081) +ext_argtype(#11386, 0, #10081) +ext_argtype(#11387, 0, #10081) +ext_argtype(#11387, 1, #11507) +ext_argtype(#11388, 0, #10081) +ext_argtype(#11389, 0, #10081) +ext_argtype(#11390, 0, #10081) +ext_argtype(#11392, 0, #10081) +ext_argtype(#11392, 1, #11507) +ext_argtype(#11393, 0, #10081) +ext_argtype(#11394, 0, #10081) +ext_argtype(#11395, 0, #10081) +ext_argtype(#11396, 0, #10081) +ext_argtype(#11397, 0, #10081) +ext_argtype(#11397, 1, #11507) +ext_argtype(#11398, 0, #10081) +ext_argtype(#11399, 0, #10081) +ext_argtype(#11400, 0, #10081) +ext_argtype(#11401, 0, #10081) +ext_argtype(#11402, 0, #10081) +ext_argtype(#11403, 0, #10081) +ext_argtype(#11404, 0, #10081) +ext_argtype(#11405, 0, #10081) +ext_argtype(#11406, 0, #10081) +ext_argtype(#11407, 0, #10081) +ext_argtype(#11408, 0, #10081) +ext_argtype(#11409, 0, #10081) +#11953 = @"C_type$set_iterator" +ext_argtype(#11410, 0, #11953) +ext_argtype(#11411, 0, #11953) +ext_argtype(#11412, 0, #10074) +ext_argtype(#11412, 1, #11507) +ext_argtype(#11413, 0, #10074) +ext_argtype(#11414, 0, #10074) +ext_argtype(#11415, 0, #10074) +ext_argtype(#11416, 0, #10074) +ext_argtype(#11416, 1, #11507) +ext_argtype(#11417, 0, #10074) +ext_argtype(#11417, 1, #11507) +ext_argtype(#11418, 0, #10074) +ext_argtype(#11418, 1, #11507) +ext_argtype(#11419, 0, #10074) +ext_argtype(#11420, 0, #10074) +ext_argtype(#11421, 0, #10074) +ext_argtype(#11421, 1, #11507) +ext_argtype(#11422, 0, #10074) +ext_argtype(#11423, 0, #10073) +ext_argtype(#11423, 1, #11507) +ext_argtype(#11424, 0, #10073) +ext_argtype(#11425, 0, #10073) +ext_argtype(#11425, 1, #11507) +ext_argtype(#11426, 0, #10073) +ext_argtype(#11427, 0, #10073) +ext_argtype(#11427, 1, #11507) +ext_argtype(#11428, 0, #10073) +ext_argtype(#11429, 0, #10073) +ext_argtype(#11430, 0, #10073) +ext_argtype(#11431, 0, #10073) +ext_argtype(#11432, 0, #10073) +ext_argtype(#11432, 1, #11507) +ext_argtype(#11433, 0, #10073) +ext_argtype(#11433, 1, #11507) +ext_argtype(#11434, 0, #10073) +ext_argtype(#11434, 1, #11507) +#11954 = @"C_type$set$3pop" +ext_argtype(#11954, 0, #10073) +ext_argtype(#11435, 0, #10073) +ext_argtype(#11436, 0, #10073) +ext_argtype(#11436, 1, #11507) +ext_argtype(#11437, 0, #10073) +ext_argtype(#11438, 0, #10073) +ext_argtype(#11438, 1, #11507) +ext_argtype(#11439, 0, #10073) +ext_argtype(#11439, 1, #11507) +ext_argtype(#11440, 0, #10073) +ext_argtype(#11441, 0, #10073) +ext_argtype(#11442, 0, #10028) +#11955 = @"C_type$tuple_iterator" +ext_argtype(#11443, 0, #11955) +ext_argtype(#11444, 0, #11955) +ext_argtype(#11445, 0, #11955) +ext_argtype(#11445, 1, #11507) +ext_argtype(#11446, 0, #10037) +ext_argtype(#11447, 0, #10037) +ext_argtype(#11448, 0, #10037) +ext_argtype(#11448, 1, #11507) +ext_argtype(#11448, 2, #11507) +ext_argtype(#11448, 3, #11507) +ext_argtype(#11449, 0, #10037) +ext_argtype(#11449, 1, #11507) +ext_argtype(#11450, 0, #10666) +ext_argtype(#11451, 0, #10666) +ext_argtype(#11452, 0, #10666) +ext_argtype(#11452, 1, #11507) +ext_argtype(#11453, 0, #10667) +#11956 = @"C_type$str_iterator" +ext_argtype(#11454, 0, #11956) +ext_argtype(#11455, 0, #11956) +ext_argtype(#11456, 0, #11956) +ext_argtype(#11456, 1, #11507) +ext_argtype(#11457, 0, #10010) +#11957 = @"C_type$str$3replace" +ext_argtype(#11957, 0, #10010) +ext_argtype(#11458, 0, #10010) +ext_argtype(#11459, 0, #10010) +#11958 = @"C_type$str$3join" +ext_argtype(#11958, 0, #10010) +ext_argtype(#11958, 1, #11507) +#11959 = @"C_type$str$3capitalize" +ext_argtype(#11959, 0, #10010) +#11960 = @"C_type$str$3casefold" +ext_argtype(#11960, 0, #10010) +#11961 = @"C_type$str$3title" +ext_argtype(#11961, 0, #10010) +#11962 = @"C_type$str$3center" +ext_argtype(#11962, 0, #10010) +ext_argtype(#11460, 0, #10010) +#11963 = @"C_type$str$3expandtabs" +ext_argtype(#11963, 0, #10010) +ext_argtype(#11461, 0, #10010) +ext_argtype(#11462, 0, #10010) +ext_argtype(#11462, 1, #11507) +ext_argtype(#11463, 0, #10010) +#11964 = @"C_type$str$3ljust" +ext_argtype(#11964, 0, #10010) +#11965 = @"C_type$str$3lower" +ext_argtype(#11965, 0, #10010) +#11966 = @"C_type$str$3lstrip" +ext_argtype(#11966, 0, #10010) +ext_argtype(#11464, 0, #10010) +ext_argtype(#11465, 0, #10010) +#11967 = @"C_type$str$3rjust" +ext_argtype(#11967, 0, #10010) +#11968 = @"C_type$str$3rstrip" +ext_argtype(#11968, 0, #10010) +ext_argtype(#11466, 0, #10010) +ext_argtype(#11466, 1, #11507) +ext_argtype(#11467, 0, #10010) +#11969 = @"C_type$str$3strip" +ext_argtype(#11969, 0, #10010) +#11970 = @"C_type$str$3swapcase" +ext_argtype(#11970, 0, #10010) +#11971 = @"C_type$str$3translate" +ext_argtype(#11971, 0, #10010) +ext_argtype(#11971, 1, #11507) +#11972 = @"C_type$str$3upper" +ext_argtype(#11972, 0, #10010) +ext_argtype(#11468, 0, #10010) +ext_argtype(#11469, 0, #10010) +ext_argtype(#11470, 0, #10010) +ext_argtype(#11471, 0, #10010) +ext_argtype(#11472, 0, #10010) +ext_argtype(#11473, 0, #10010) +ext_argtype(#11474, 0, #10010) +ext_argtype(#11475, 0, #10010) +ext_argtype(#11476, 0, #10010) +ext_argtype(#11477, 0, #10010) +ext_argtype(#11478, 0, #10010) +ext_argtype(#11479, 0, #10010) +ext_argtype(#11480, 0, #10010) +#11973 = @"C_type$str$3zfill" +ext_argtype(#11973, 0, #10010) +#11974 = @"C_type$str$3format" +ext_argtype(#11974, 0, #10010) +#11975 = @"C_type$str$3format_map" +ext_argtype(#11975, 0, #10010) +ext_argtype(#11975, 1, #11507) +#11976 = @"C_type$str$3__format__" +ext_argtype(#11976, 0, #10010) +ext_argtype(#11482, 0, #10010) +ext_argtype(#11483, 0, #10010) +#11977 = @"C_type$EncodingMap" +ext_argtype(#11484, 0, #11977) +ext_argtype(#11485, 0, #11491) +ext_argtype(#11486, 0, #11491) +ext_argtype(#11487, 0, #11491) +ext_argtype(#11487, 1, #11507) +#11978 = @"C_type$longrange_iterator$3__length_hint__" +ext_argtype(#11978, 0, #11492) +ext_argtype(#11488, 0, #11492) +ext_argtype(#11489, 0, #11492) +ext_argtype(#11489, 1, #11507) +#11979 = @"C_type$range" +ext_argtype(#11490, 0, #11979) +ext_argtype(#11493, 0, #11979) +ext_argtype(#11494, 0, #11979) +ext_argtype(#11494, 1, #11507) +ext_argtype(#11495, 0, #11979) +ext_argtype(#11495, 1, #11507) +ext_argtype(#11496, 0, #10226) +ext_argtype(#11497, 0, #10226) +#11980 = @"C_type$complex$3__format__" +ext_argtype(#11980, 0, #10226) +#11981 = @"C_type$weakproxy$3__bytes__" +#11982 = @"C_type$weakproxy" +ext_argtype(#11981, 0, #11982) +ext_argtype(#11498, 0, #10407) +ext_argtype(#11499, 0, #10407) +ext_argtype(#11500, 0, #10407) +ext_argtype(#11501, 0, #10407) +ext_argtype(#11501, 1, #11507) +ext_argtype(#11501, 2, #11507) +#11983 = @"C_type$memoryview$3__enter__" +ext_argtype(#11983, 0, #10407) +ext_argtype(#11502, 0, #10407) +#11984 = @"C_type$enumerate" +ext_argtype(#11503, 0, #11984) +#11985 = @"C_type$reversed" +ext_argtype(#11504, 0, #11985) +ext_argtype(#11505, 0, #11985) +ext_argtype(#11506, 0, #11985) +ext_argtype(#11506, 1, #11507) +ext_argreturn(#11539, 1) +ext_argreturn(#11540, 1) +ext_argreturn(#11640, 0) +ext_argreturn(#11641, 0) +ext_argreturn(#11646, 0) +ext_argreturn(#11647, 0) +ext_argreturn(#11854, 0) +ext_argreturn(#11900, 0) +ext_argreturn(#11901, 0) +#11986 = @"C_type$_csv.Dialect$delimiter" +ext_proptype(#11986, #10005) +#11987 = @"C_type$_csv.Dialect$escapechar" +ext_proptype(#11987, #10005) +#11988 = @"C_type$_csv.Dialect$quotechar" +ext_proptype(#11988, #10005) +#11989 = @"C_type$_csv.Dialect$quoting" +ext_proptype(#11989, #10024) +#11990 = @"C_type$xxsubtype.spamlist$state" +ext_proptype(#11990, #10024) +#11991 = @"C_type$collections.deque$maxlen" +ext_proptype(#11991, #10024) +ext_proptype(#11991, #10005) +#11992 = @"C_type$decimal.Context$prec" +ext_proptype(#11992, #10024) +#11993 = @"C_type$decimal.Context$Emax" +ext_proptype(#11993, #10024) +#11994 = @"C_type$decimal.Context$Emin" +ext_proptype(#11994, #10024) +#11995 = @"C_type$decimal.Context$capitals" +ext_proptype(#11995, #10024) +#11996 = @"C_type$decimal.Context$clamp" +ext_proptype(#11996, #10024) +#11997 = @"C_type$decimal.Decimal$imag" +ext_proptype(#11997, #10723) +#11998 = @"C_type$array.array$itemsize" +ext_proptype(#11998, #10024) +#11999 = @"C_type$Struct$3size" +ext_proptype(#11999, #10024) +#12000 = @"C_type$_ssl._SSLContext$options" +ext_proptype(#12000, #10024) +#12001 = @"C_type$_ssl._SSLContext$verify_mode" +ext_proptype(#12001, #10024) +#12002 = @"C_type$_hashlib.HASH$digest_size" +ext_proptype(#12002, #10024) +#12003 = @"C_type$_hashlib.HASH$block_size" +ext_proptype(#12003, #10024) +#12004 = @"C_type$_sha256.sha256$block_size" +ext_proptype(#12004, #10024) +#12005 = @"C_type$_sha256.sha224$block_size" +ext_proptype(#12005, #10024) +#12006 = @"C_type$_sha256.sha256$name" +ext_proptype(#12006, #10010) +#12007 = @"C_type$_sha256.sha224$name" +ext_proptype(#12007, #10010) +#12008 = @"C_type$functools.partial$__dict__" +ext_proptype(#12008, #10111) +#12009 = @"C_type$_pickle.Pickler$memo" +ext_proptype(#12009, #11673) +#12010 = @"C_type$_pickle.Unpickler$memo" +ext_proptype(#12010, #11677) +#12011 = @"C_type$_md5.md5$block_size" +ext_proptype(#12011, #10024) +#12012 = @"C_type$_md5.md5$name" +ext_proptype(#12012, #10010) +#12013 = @"C_type$_md5.md5$digest_size" +ext_proptype(#12013, #10024) +#12014 = @"C_type$_sha1.sha1$block_size" +ext_proptype(#12014, #10024) +#12015 = @"C_type$_sha1.sha1$name" +ext_proptype(#12015, #10010) +#12016 = @"C_type$_sha1.sha1$digest_size" +ext_proptype(#12016, #10024) +#12017 = @"C_type$_sre.SRE_Match$lastindex" +ext_proptype(#12017, #10024) +ext_proptype(#12017, #10005) +#12018 = @"C_type$_sre.SRE_Match$lastgroup" +ext_proptype(#12018, #10005) +#12019 = @"C_type$_sre.SRE_Match$regs" +ext_proptype(#12019, #10037) +#12020 = @"C_type$datetime.time$hour" +ext_proptype(#12020, #10024) +#12021 = @"C_type$datetime.time$minute" +ext_proptype(#12021, #10024) +#12022 = @"C_type$datetime.time$second" +ext_proptype(#12022, #10024) +#12023 = @"C_type$datetime.time$microsecond" +ext_proptype(#12023, #10024) +#12024 = @"C_type$datetime.datetime$hour" +ext_proptype(#12024, #10024) +#12025 = @"C_type$datetime.datetime$minute" +ext_proptype(#12025, #10024) +#12026 = @"C_type$datetime.datetime$second" +ext_proptype(#12026, #10024) +#12027 = @"C_type$datetime.datetime$microsecond" +ext_proptype(#12027, #10024) +#12028 = @"C_type$datetime.date$year" +ext_proptype(#12028, #10024) +#12029 = @"C_type$datetime.date$month" +ext_proptype(#12029, #10024) +#12030 = @"C_type$datetime.date$day" +ext_proptype(#12030, #10024) +#12031 = @"C_type$ndarray$3flags" +ext_proptype(#12031, #10024) +#12032 = @"C_type$ndarray$3offset" +ext_proptype(#12032, #10024) +#12033 = @"C_type$ndarray$3obj" +ext_proptype(#12033, #10005) +#12034 = @"C_type$ndarray$3nbytes" +ext_proptype(#12034, #10024) +#12035 = @"C_type$ndarray$3readonly" +ext_proptype(#12035, #10024) +#12036 = @"C_type$ndarray$3itemsize" +ext_proptype(#12036, #10024) +#12037 = @"C_type$ndarray$3ndim" +ext_proptype(#12037, #10024) +#12038 = @"C_type$ndarray$3shape" +ext_proptype(#12038, #10037) +#12039 = @"C_type$ndarray$3strides" +ext_proptype(#12039, #10037) +#12040 = @"C_type$ndarray$3suboffsets" +ext_proptype(#12040, #10037) +#12041 = @"C_type$ndarray$3c_contiguous" +ext_proptype(#12041, #10050) +#12042 = @"C_type$ndarray$3f_contiguous" +ext_proptype(#12042, #10050) +#12043 = @"C_type$ndarray$3contiguous" +ext_proptype(#12043, #10050) +#12044 = @"C_type$mmap.mmap$closed" +ext_proptype(#12044, #10050) +#12045 = @"C_type$select.epoll$closed" +ext_proptype(#12045, #10050) +#12046 = @"C_type$_io._TextIOBase$encoding" +ext_proptype(#12046, #10005) +#12047 = @"C_type$_io._TextIOBase$newlines" +ext_proptype(#12047, #10005) +#12048 = @"C_type$_io._TextIOBase$errors" +ext_proptype(#12048, #10005) +#12049 = @"C_type$_io.IncrementalNewlineDecoder$newlines" +ext_proptype(#12049, #10037) +ext_proptype(#12049, #10005) +#12050 = @"C_type$_io.TextIOWrapper$newlines" +ext_proptype(#12050, #10005) +#12051 = @"C_type$_io.TextIOWrapper$_CHUNK_SIZE" +ext_proptype(#12051, #10024) +#12052 = @"C_type$_io.BytesIO$closed" +ext_proptype(#12052, #10050) +#12053 = @"C_type$_io._IOBase$__dict__" +ext_proptype(#12053, #10111) +#12054 = @"C_type$_io._IOBase$closed" +ext_proptype(#12054, #10050) +#12055 = @"C_type$_io.StringIO$closed" +ext_proptype(#12055, #10050) +#12056 = @"C_type$_io.StringIO$newlines" +ext_proptype(#12056, #10005) +#12057 = @"C_type$_io.StringIO$line_buffering" +ext_proptype(#12057, #10050) +#12058 = @"C_type$_io.FileIO$closed" +ext_proptype(#12058, #10050) +#12059 = @"C_type$_io.FileIO$closefd" +ext_proptype(#12059, #10050) +#12060 = @"C_type$_sha512.sha512$block_size" +ext_proptype(#12060, #10024) +#12061 = @"C_type$_sha512.sha384$block_size" +ext_proptype(#12061, #10024) +#12062 = @"C_type$_sha512.sha512$name" +ext_proptype(#12062, #10010) +#12063 = @"C_type$_sha512.sha384$name" +ext_proptype(#12063, #10010) +#12064 = @"C_type$_ctypes.PyCFuncPtr$errcheck" +ext_proptype(#12064, #10005) +#12065 = @"C_type$_ctypes.PyCFuncPtr$restype" +ext_proptype(#12065, #10005) +#12066 = @"C_type$_ctypes.PyCFuncPtr$argtypes" +ext_proptype(#12066, #10005) +#12067 = @"C_type$_ctypes.CField$offset" +ext_proptype(#12067, #10024) +#12068 = @"C_type$_ctypes.CField$size" +ext_proptype(#12068, #10024) +#12069 = @"C_type$_ast.AST$__dict__" +ext_proptype(#12069, #10111) +#12070 = @"C_type$type$3__module__" +ext_proptype(#12070, #10010) +#12071 = @"C_type$type$3__dict__" +ext_proptype(#12071, #10005) +ext_proptype(#12071, #11929) +#12072 = @"C_type$type$3__doc__" +ext_proptype(#12072, #10005) +#12073 = @"C_type$frame$3f_lineno" +ext_proptype(#12073, #10024) +#12074 = @"C_type$frame$3f_trace" +ext_proptype(#12074, #10005) +#12075 = @"C_type$int$3real" +ext_proptype(#12075, #10024) +#12076 = @"C_type$int$3imag" +ext_proptype(#12076, #10024) +#12077 = @"C_type$int$3numerator" +ext_proptype(#12077, #10024) +#12078 = @"C_type$int$3denominator" +ext_proptype(#12078, #10024) +#12079 = @"C_type$builtin_function_or_method$3__doc__" +ext_proptype(#12079, #10005) +#12080 = @"C_type$builtin_function_or_method$3__self__" +ext_proptype(#12080, #10005) +#12081 = @"C_type$method-wrapper$__doc__" +ext_proptype(#12081, #10005) +#12082 = @"C_type$classmethod_descriptor$3__doc__" +ext_proptype(#12082, #10005) +#12083 = @"C_type$method_descriptor$3__doc__" +ext_proptype(#12083, #10005) +#12084 = @"C_type$member_descriptor$3__doc__" +ext_proptype(#12084, #10005) +#12085 = @"C_type$getset_descriptor$3__doc__" +ext_proptype(#12085, #10005) +#12086 = @"C_type$wrapper_descriptor$3__doc__" +ext_proptype(#12086, #10005) +#12087 = @"C_type$property$3__isabstractmethod__" +ext_proptype(#12087, #10050) +#12088 = @"C_type$stderrprinter$3closed" +ext_proptype(#12088, #10050) +#12089 = @"C_type$stderrprinter$3encoding" +ext_proptype(#12089, #10005) +#12090 = @"C_type$BaseException$3__dict__" +ext_proptype(#12090, #10111) +#12091 = @"C_type$BaseException$3args" +ext_proptype(#12091, #10005) +#12092 = @"C_type$BaseException$3__traceback__" +ext_proptype(#12092, #10005) +#12093 = @"C_type$BaseException$3__context__" +ext_proptype(#12093, #10005) +#12094 = @"C_type$BaseException$3__cause__" +ext_proptype(#12094, #10005) +#12095 = @"C_type$OSError$3characters_written" +ext_proptype(#12095, #10024) +#12096 = @"C_type$float$3real" +ext_proptype(#12096, #10001) +#12097 = @"C_type$float$3imag" +ext_proptype(#12097, #10001) +#12098 = @"C_type$function$3__defaults__" +ext_proptype(#12098, #10005) +#12099 = @"C_type$function$3__kwdefaults__" +ext_proptype(#12099, #10005) +#12100 = @"C_type$function$3__dict__" +ext_proptype(#12100, #10111) +#12101 = @"C_type$classmethod$3__isabstractmethod__" +ext_proptype(#12101, #10050) +#12102 = @"C_type$classmethod$3__dict__" +ext_proptype(#12102, #10111) +#12103 = @"C_type$staticmethod$3__isabstractmethod__" +ext_proptype(#12103, #10050) +#12104 = @"C_type$staticmethod$3__dict__" +ext_proptype(#12104, #10111) +#12105 = @"C_type$memoryview$3obj" +ext_proptype(#12105, #10005) +#12106 = @"C_type$memoryview$3nbytes" +ext_proptype(#12106, #10024) +#12107 = @"C_type$memoryview$3readonly" +ext_proptype(#12107, #10050) +#12108 = @"C_type$memoryview$3itemsize" +ext_proptype(#12108, #10024) +#12109 = @"C_type$memoryview$3ndim" +ext_proptype(#12109, #10024) +#12110 = @"C_type$memoryview$3shape" +ext_proptype(#12110, #10037) +#12111 = @"C_type$memoryview$3strides" +ext_proptype(#12111, #10037) +#12112 = @"C_type$memoryview$3suboffsets" +ext_proptype(#12112, #10037) +#12113 = @"C_type$memoryview$3c_contiguous" +ext_proptype(#12113, #10050) +#12114 = @"C_type$memoryview$3f_contiguous" +ext_proptype(#12114, #10050) +#12115 = @"C_type$memoryview$3contiguous" +ext_proptype(#12115, #10050) +py_cobjects(#11590) +py_cobjects(#11593) +py_cobjects(#11597) +py_cobjects(#11599) +py_cobjects(#10016) +#12116 = @"C_type$_csv.Dialect" +py_cobjects(#12116) +py_cobjects(#10024) +py_cobjects(#10018) +py_cobjects(#10020) +py_cobjects(#11601) +py_cobjects(#10111) +py_cobjects(#11602) +py_cobjects(#11604) +py_cobjects(#11603) +py_cobjects(#10713) +py_cobjects(#11609) +py_cobjects(#10030) +py_cobjects(#10647) +py_cobjects(#10039) +py_cobjects(#10723) +py_cobjects(#10001) +py_cobjects(#10226) +py_cobjects(#10042) +py_cobjects(#10037) +py_cobjects(#11650) +py_cobjects(#11507) +py_cobjects(#10517) +py_cobjects(#10046) +py_cobjects(#11982) +#12117 = @"C_type$weakcallableproxy" +py_cobjects(#12117) +py_cobjects(#10028) +py_cobjects(#11651) +py_cobjects(#11655) +py_cobjects(#11942) +py_cobjects(#11654) +py_cobjects(#11276) +py_cobjects(#11939) +py_cobjects(#10062) +py_cobjects(#11659) +py_cobjects(#11661) +py_cobjects(#11663) +py_cobjects(#11665) +py_cobjects(#11666) +py_cobjects(#10868) +py_cobjects(#11667) +py_cobjects(#10124) +py_cobjects(#11668) +#12118 = @"C_type$_thread._localdummy" +py_cobjects(#12118) +#12119 = @"C_type$_thread._local" +py_cobjects(#12119) +py_cobjects(#10081) +py_cobjects(#10010) +py_cobjects(#10169) +py_cobjects(#10189) +py_cobjects(#10191) +py_cobjects(#11671) +py_cobjects(#10208) +#12120 = @"C_type$_pickle.Pdata" +py_cobjects(#12120) +py_cobjects(#10005) +#12121 = @"C_type$ellipsis" +py_cobjects(#12121) +#12122 = @"C_type$NotImplementedType" +py_cobjects(#12122) +#12123 = @"C_type$function" +py_cobjects(#12123) +#12124 = @"C_type$builtin_function_or_method" +py_cobjects(#12124) +py_cobjects(#11672) +py_cobjects(#11673) +py_cobjects(#11675) +py_cobjects(#11677) +py_cobjects(#10223) +py_cobjects(#10249) +py_cobjects(#11680) +py_cobjects(#11684) +py_cobjects(#11685) +py_cobjects(#11697) +py_cobjects(#11690) +py_cobjects(#11703) +py_cobjects(#11692) +py_cobjects(#11704) +py_cobjects(#11719) +py_cobjects(#11731) +#12125 = @"C_type$staticarray" +py_cobjects(#12125) +py_cobjects(#11732) +py_cobjects(#10411) +py_cobjects(#11736) +py_cobjects(#11759) +py_cobjects(#11768) +py_cobjects(#11770) +py_cobjects(#11738) +py_cobjects(#11815) +py_cobjects(#11757) +py_cobjects(#11811) +py_cobjects(#11775) +py_cobjects(#11791) +py_cobjects(#11800) +py_cobjects(#11783) +py_cobjects(#11745) +py_cobjects(#11743) +#12126 = @"C_type$_io._BytesIOBuffer" +py_cobjects(#12126) +#12127 = @"C_type$operator.itemgetter" +py_cobjects(#12127) +#12128 = @"C_type$operator.attrgetter" +py_cobjects(#12128) +#12129 = @"C_type$operator.methodcaller" +py_cobjects(#12129) +#12130 = @"C_type$hashinheritancetester" +py_cobjects(#12130) +#12131 = @"C_type$test_structmembersType" +py_cobjects(#12131) +#12132 = @"C_type$instancemethod" +py_cobjects(#12132) +#12133 = @"C_type$_json.Scanner" +py_cobjects(#12133) +#12134 = @"C_type$_json.Encoder" +py_cobjects(#12134) +py_cobjects(#10526) +py_cobjects(#10528) +py_cobjects(#11821) +py_cobjects(#10531) +py_cobjects(#11105) +py_cobjects(#11825) +py_cobjects(#11827) +#12135 = @"C_type$_ctypes.CThunkObject" +py_cobjects(#12135) +#12136 = @"C_type$StgDict" +py_cobjects(#12136) +py_cobjects(#11855) +py_cobjects(#11861) +#12137 = @"C_type$_ctypes.CField" +py_cobjects(#12137) +py_cobjects(#11829) +#12138 = @"C_type$_ctypes.Array" +py_cobjects(#12138) +py_cobjects(#11857) +#12139 = @"C_type$_ctypes._Pointer" +py_cobjects(#12139) +#12140 = @"C_type$_ctypes.PyCFuncPtr" +py_cobjects(#12140) +py_cobjects(#11830) +py_cobjects(#11831) +py_cobjects(#10542) +py_cobjects(#11853) +#12141 = @"C_type$_ctypes.DictRemover" +py_cobjects(#12141) +py_cobjects(#11832) +#12142 = @"C_type$_ctypes.Structure" +py_cobjects(#12142) +#12143 = @"C_type$_ctypes.Union" +py_cobjects(#12143) +#12144 = @"C_type$symtable entry" +py_cobjects(#12144) +py_cobjects(#11867) +py_cobjects(#11870) +py_cobjects(#11546) +py_cobjects(#11879) +py_cobjects(#11880) +py_cobjects(#11881) +py_cobjects(#11142) +py_cobjects(#11882) +py_cobjects(#11883) +py_cobjects(#11884) +py_cobjects(#11885) +py_cobjects(#11886) +py_cobjects(#11888) +py_cobjects(#11889) +py_cobjects(#11890) +py_cobjects(#11891) +py_cobjects(#11892) +py_cobjects(#11893) +py_cobjects(#11894) +py_cobjects(#11895) +py_cobjects(#10050) +py_cobjects(#11896) +py_cobjects(#11897) +py_cobjects(#11898) +py_cobjects(#10582) +py_cobjects(#10584) +py_cobjects(#10586) +py_cobjects(#10886) +py_cobjects(#11903) +#12145 = @"C_type$method" +py_cobjects(#12145) +py_cobjects(#11904) +py_cobjects(#10626) +py_cobjects(#10073) +py_cobjects(#10074) +#12146 = @"C_type$cell" +py_cobjects(#12146) +py_cobjects(#11905) +py_cobjects(#11906) +py_cobjects(#11907) +py_cobjects(#10407) +#12147 = @"C_type$classmethod" +py_cobjects(#12147) +py_cobjects(#11984) +py_cobjects(#11935) +py_cobjects(#11979) +py_cobjects(#11985) +#12148 = @"C_type$staticmethod" +py_cobjects(#12148) +#12149 = @"C_type$super" +py_cobjects(#12149) +py_cobjects(#11955) +py_cobjects(#11923) +py_cobjects(#11941) +py_cobjects(#11910) +py_cobjects(#11911) +py_cobjects(#11912) +py_cobjects(#11922) +py_cobjects(#11921) +#12150 = @"C_type$dict_values" +py_cobjects(#12150) +py_cobjects(#11956) +py_cobjects(#10666) +py_cobjects(#10667) +py_cobjects(#11950) +#12151 = @"C_type$classmethod_descriptor" +py_cobjects(#12151) +#12152 = @"C_type$getset_descriptor" +py_cobjects(#12152) +#12153 = @"C_type$member_descriptor" +py_cobjects(#12153) +#12154 = @"C_type$method_descriptor" +py_cobjects(#12154) +#12155 = @"C_type$wrapper_descriptor" +py_cobjects(#12155) +py_cobjects(#11929) +#12156 = @"C_type$method-wrapper" +py_cobjects(#12156) +#12157 = @"C_type$managedbuffer" +py_cobjects(#12157) +py_cobjects(#11925) +py_cobjects(#11329) +py_cobjects(#11953) +py_cobjects(#11491) +py_cobjects(#11492) +#12158 = @"C_type$PyCapsule" +py_cobjects(#12158) +#12159 = @"C_type$namespace" +py_cobjects(#12159) +#12160 = @"C_type$ type" +py_cobjects(#12160) +#12161 = @"C_type$moduledef" +py_cobjects(#12161) +#12162 = @"C_type$TypeError" +py_cobjects(#12162) +#12163 = @"C_type$Exception" +py_cobjects(#12163) +py_cobjects(#11943) +#12164 = @"C_type$StopIteration" +py_cobjects(#12164) +#12165 = @"C_type$GeneratorExit" +py_cobjects(#12165) +#12166 = @"C_type$SystemExit" +py_cobjects(#12166) +#12167 = @"C_type$KeyboardInterrupt" +py_cobjects(#12167) +#12168 = @"C_type$ImportError" +py_cobjects(#12168) +#12169 = @"C_type$BlockingIOError" +py_cobjects(#12169) +py_cobjects(#11945) +#12170 = @"C_type$AttributeError" +py_cobjects(#12170) +#12171 = @"C_type$ValueError" +py_cobjects(#12171) +#12172 = @"C_type$ConnectionError" +py_cobjects(#12172) +#12173 = @"C_type$ChildProcessError" +py_cobjects(#12173) +#12174 = @"C_type$BrokenPipeError" +py_cobjects(#12174) +#12175 = @"C_type$ConnectionAbortedError" +py_cobjects(#12175) +#12176 = @"C_type$ConnectionRefusedError" +py_cobjects(#12176) +#12177 = @"C_type$ConnectionResetError" +py_cobjects(#12177) +#12178 = @"C_type$FileExistsError" +py_cobjects(#12178) +#12179 = @"C_type$FileNotFoundError" +py_cobjects(#12179) +#12180 = @"C_type$IsADirectoryError" +py_cobjects(#12180) +#12181 = @"C_type$NotADirectoryError" +py_cobjects(#12181) +#12182 = @"C_type$InterruptedError" +py_cobjects(#12182) +#12183 = @"C_type$PermissionError" +py_cobjects(#12183) +#12184 = @"C_type$ProcessLookupError" +py_cobjects(#12184) +#12185 = @"C_type$TimeoutError" +py_cobjects(#12185) +#12186 = @"C_type$EOFError" +py_cobjects(#12186) +#12187 = @"C_type$RuntimeError" +py_cobjects(#12187) +#12188 = @"C_type$NotImplementedError" +py_cobjects(#12188) +#12189 = @"C_type$NameError" +py_cobjects(#12189) +#12190 = @"C_type$UnboundLocalError" +py_cobjects(#12190) +#12191 = @"C_type$IndexError" +py_cobjects(#12191) +#12192 = @"C_type$LookupError" +py_cobjects(#12192) +#12193 = @"C_type$SyntaxError" +py_cobjects(#12193) +#12194 = @"C_type$IndentationError" +py_cobjects(#12194) +#12195 = @"C_type$TabError" +py_cobjects(#12195) +#12196 = @"C_type$KeyError" +py_cobjects(#12196) +#12197 = @"C_type$UnicodeError" +py_cobjects(#12197) +#12198 = @"C_type$UnicodeEncodeError" +py_cobjects(#12198) +#12199 = @"C_type$UnicodeDecodeError" +py_cobjects(#12199) +#12200 = @"C_type$UnicodeTranslateError" +py_cobjects(#12200) +#12201 = @"C_type$AssertionError" +py_cobjects(#12201) +#12202 = @"C_type$ArithmeticError" +py_cobjects(#12202) +#12203 = @"C_type$FloatingPointError" +py_cobjects(#12203) +#12204 = @"C_type$OverflowError" +py_cobjects(#12204) +#12205 = @"C_type$ZeroDivisionError" +py_cobjects(#12205) +#12206 = @"C_type$SystemError" +py_cobjects(#12206) +#12207 = @"C_type$ReferenceError" +py_cobjects(#12207) +#12208 = @"C_type$MemoryError" +py_cobjects(#12208) +#12209 = @"C_type$BufferError" +py_cobjects(#12209) +#12210 = @"C_type$Warning" +py_cobjects(#12210) +#12211 = @"C_type$UserWarning" +py_cobjects(#12211) +#12212 = @"C_type$DeprecationWarning" +py_cobjects(#12212) +#12213 = @"C_type$PendingDeprecationWarning" +py_cobjects(#12213) +#12214 = @"C_type$SyntaxWarning" +py_cobjects(#12214) +#12215 = @"C_type$RuntimeWarning" +py_cobjects(#12215) +#12216 = @"C_type$FutureWarning" +py_cobjects(#12216) +#12217 = @"C_type$ImportWarning" +py_cobjects(#12217) +#12218 = @"C_type$UnicodeWarning" +py_cobjects(#12218) +#12219 = @"C_type$BytesWarning" +py_cobjects(#12219) +#12220 = @"C_type$ResourceWarning" +py_cobjects(#12220) +py_cobjects(#11977) +#12221 = @"C_type$fieldnameiterator" +py_cobjects(#12221) +py_cobjects(#10678) +py_cobjects(#11986) +py_cobjects(#11987) +#12222 = @"C_type$_csv.Dialect$lineterminator" +py_cobjects(#12222) +py_cobjects(#11988) +py_cobjects(#11989) +py_cobjects(#11990) +py_cobjects(#11991) +py_cobjects(#11992) +py_cobjects(#11993) +py_cobjects(#11994) +#12223 = @"C_type$decimal.Context$rounding" +py_cobjects(#12223) +py_cobjects(#11995) +py_cobjects(#11996) +#12224 = @"C_type$decimal.Decimal$real" +py_cobjects(#12224) +py_cobjects(#11997) +#12225 = @"C_type$array.array$typecode" +py_cobjects(#12225) +py_cobjects(#11998) +#12226 = @"C_type$MultibyteIncrementalEncoder$3errors" +py_cobjects(#12226) +#12227 = @"C_type$MultibyteIncrementalDecoder$3errors" +py_cobjects(#12227) +#12228 = @"C_type$MultibyteStreamReader$3errors" +py_cobjects(#12228) +#12229 = @"C_type$MultibyteStreamWriter$3errors" +py_cobjects(#12229) +#12230 = @"C_type$Struct$3format" +py_cobjects(#12230) +py_cobjects(#11999) +py_cobjects(#12000) +py_cobjects(#12001) +py_cobjects(#12002) +py_cobjects(#12003) +py_cobjects(#12004) +py_cobjects(#12005) +py_cobjects(#12006) +py_cobjects(#12007) +py_cobjects(#12008) +py_cobjects(#12009) +#12231 = @"C_type$_pickle.Pickler$persistent_id" +py_cobjects(#12231) +py_cobjects(#12010) +#12232 = @"C_type$_pickle.Unpickler$persistent_load" +py_cobjects(#12232) +py_cobjects(#12011) +py_cobjects(#12012) +py_cobjects(#12013) +py_cobjects(#12014) +py_cobjects(#12015) +py_cobjects(#12016) +py_cobjects(#12017) +py_cobjects(#12018) +py_cobjects(#12019) +py_cobjects(#12020) +py_cobjects(#12021) +py_cobjects(#12022) +py_cobjects(#12023) +#12233 = @"C_type$datetime.time$tzinfo" +py_cobjects(#12233) +py_cobjects(#12024) +py_cobjects(#12025) +py_cobjects(#12026) +py_cobjects(#12027) +#12234 = @"C_type$datetime.datetime$tzinfo" +py_cobjects(#12234) +py_cobjects(#12028) +py_cobjects(#12029) +py_cobjects(#12030) +py_cobjects(#12031) +py_cobjects(#12032) +py_cobjects(#12033) +py_cobjects(#12034) +py_cobjects(#12035) +py_cobjects(#12036) +#12235 = @"C_type$ndarray$3format" +py_cobjects(#12235) +py_cobjects(#12037) +py_cobjects(#12038) +py_cobjects(#12039) +py_cobjects(#12040) +py_cobjects(#12041) +py_cobjects(#12042) +py_cobjects(#12043) +py_cobjects(#12044) +py_cobjects(#12045) +py_cobjects(#12046) +py_cobjects(#12047) +py_cobjects(#12048) +py_cobjects(#12049) +#12236 = @"C_type$_io.TextIOWrapper$name" +py_cobjects(#12236) +#12237 = @"C_type$_io.TextIOWrapper$closed" +py_cobjects(#12237) +py_cobjects(#12050) +#12238 = @"C_type$_io.TextIOWrapper$errors" +py_cobjects(#12238) +py_cobjects(#12051) +py_cobjects(#12052) +py_cobjects(#12053) +py_cobjects(#12054) +#12239 = @"C_type$_io.BufferedReader$closed" +py_cobjects(#12239) +#12240 = @"C_type$_io.BufferedReader$name" +py_cobjects(#12240) +#12241 = @"C_type$_io.BufferedReader$mode" +py_cobjects(#12241) +#12242 = @"C_type$_io.BufferedRandom$closed" +py_cobjects(#12242) +#12243 = @"C_type$_io.BufferedRandom$name" +py_cobjects(#12243) +#12244 = @"C_type$_io.BufferedRandom$mode" +py_cobjects(#12244) +#12245 = @"C_type$_io.BufferedWriter$closed" +py_cobjects(#12245) +#12246 = @"C_type$_io.BufferedWriter$name" +py_cobjects(#12246) +#12247 = @"C_type$_io.BufferedWriter$mode" +py_cobjects(#12247) +#12248 = @"C_type$_io.BufferedRWPair$closed" +py_cobjects(#12248) +py_cobjects(#12055) +py_cobjects(#12056) +py_cobjects(#12057) +py_cobjects(#12058) +py_cobjects(#12059) +#12249 = @"C_type$_io.FileIO$mode" +py_cobjects(#12249) +py_cobjects(#12060) +py_cobjects(#12061) +py_cobjects(#12062) +py_cobjects(#12063) +#12250 = @"C_type$_ctypes._Pointer$contents" +py_cobjects(#12250) +py_cobjects(#12064) +py_cobjects(#12065) +py_cobjects(#12066) +#12251 = @"C_type$_ctypes._SimpleCData$value" +py_cobjects(#12251) +py_cobjects(#12067) +py_cobjects(#12068) +py_cobjects(#12069) +#12252 = @"C_type$type$3__name__" +py_cobjects(#12252) +#12253 = @"C_type$type$3__qualname__" +py_cobjects(#12253) +#12254 = @"C_type$type$3__bases__" +py_cobjects(#12254) +py_cobjects(#12070) +#12255 = @"C_type$type$3__abstractmethods__" +py_cobjects(#12255) +py_cobjects(#12071) +py_cobjects(#12072) +#12256 = @"C_type$object$3__class__" +py_cobjects(#12256) +#12257 = @"C_type$frame$3f_locals" +py_cobjects(#12257) +py_cobjects(#12073) +py_cobjects(#12074) +py_cobjects(#12075) +py_cobjects(#12076) +py_cobjects(#12077) +py_cobjects(#12078) +py_cobjects(#12079) +#12258 = @"C_type$builtin_function_or_method$3__name__" +py_cobjects(#12258) +#12259 = @"C_type$builtin_function_or_method$3__qualname__" +py_cobjects(#12259) +py_cobjects(#12080) +#12260 = @"C_type$method-wrapper$__objclass__" +py_cobjects(#12260) +#12261 = @"C_type$method-wrapper$__name__" +py_cobjects(#12261) +#12262 = @"C_type$method-wrapper$__qualname__" +py_cobjects(#12262) +py_cobjects(#12081) +py_cobjects(#12082) +py_cobjects(#12083) +#12263 = @"C_type$classmethod_descriptor$3__qualname__" +py_cobjects(#12263) +#12264 = @"C_type$method_descriptor$3__qualname__" +py_cobjects(#12264) +py_cobjects(#12084) +#12265 = @"C_type$member_descriptor$3__qualname__" +py_cobjects(#12265) +py_cobjects(#12085) +#12266 = @"C_type$getset_descriptor$3__qualname__" +py_cobjects(#12266) +py_cobjects(#12086) +#12267 = @"C_type$wrapper_descriptor$3__qualname__" +py_cobjects(#12267) +py_cobjects(#12087) +#12268 = @"C_type$generator$3__name__" +py_cobjects(#12268) +py_cobjects(#12088) +py_cobjects(#12089) +#12269 = @"C_type$stderrprinter$3mode" +py_cobjects(#12269) +py_cobjects(#12090) +py_cobjects(#12091) +py_cobjects(#12092) +py_cobjects(#12093) +py_cobjects(#12094) +py_cobjects(#12095) +py_cobjects(#12096) +py_cobjects(#12097) +#12270 = @"C_type$method$3__doc__" +py_cobjects(#12270) +#12271 = @"C_type$instancemethod$3__doc__" +py_cobjects(#12271) +#12272 = @"C_type$function$3__code__" +py_cobjects(#12272) +py_cobjects(#12098) +py_cobjects(#12099) +#12273 = @"C_type$function$3__annotations__" +py_cobjects(#12273) +py_cobjects(#12100) +#12274 = @"C_type$function$3__name__" +py_cobjects(#12274) +#12275 = @"C_type$function$3__qualname__" +py_cobjects(#12275) +py_cobjects(#12101) +py_cobjects(#12102) +py_cobjects(#12103) +py_cobjects(#12104) +#12276 = @"C_type$cell$3cell_contents" +py_cobjects(#12276) +py_cobjects(#12105) +py_cobjects(#12106) +py_cobjects(#12107) +py_cobjects(#12108) +#12277 = @"C_type$memoryview$3format" +py_cobjects(#12277) +py_cobjects(#12109) +py_cobjects(#12110) +py_cobjects(#12111) +py_cobjects(#12112) +py_cobjects(#12113) +py_cobjects(#12114) +py_cobjects(#12115) +py_cobjects(#10000) +py_cobjects(#10002) +py_cobjects(#10003) +py_cobjects(#10004) +py_cobjects(#10006) +py_cobjects(#10007) +#12278 = @"C_builtin_function_or_method$time.gmtime" +py_cobjects(#12278) +#12279 = @"C_builtin_function_or_method$time.localtime" +py_cobjects(#12279) +#12280 = @"C_builtin_function_or_method$time.asctime" +py_cobjects(#12280) +#12281 = @"C_builtin_function_or_method$time.ctime" +py_cobjects(#12281) +py_cobjects(#10008) +py_cobjects(#10009) +#12282 = @"C_builtin_function_or_method$time.strptime" +py_cobjects(#12282) +py_cobjects(#10011) +py_cobjects(#10012) +py_cobjects(#10013) +py_cobjects(#10014) +py_cobjects(#11508) +py_cobjects(#10015) +py_cobjects(#10017) +py_cobjects(#10019) +py_cobjects(#10021) +py_cobjects(#10022) +py_cobjects(#11509) +py_cobjects(#10023) +py_cobjects(#10025) +py_cobjects(#10026) +py_cobjects(#10027) +py_cobjects(#10029) +#12283 = @"C_builtin_function_or_method$parser.isexpr" +py_cobjects(#12283) +#12284 = @"C_builtin_function_or_method$parser.issuite" +py_cobjects(#12284) +py_cobjects(#10031) +py_cobjects(#10032) +py_cobjects(#10033) +py_cobjects(#10034) +py_cobjects(#10035) +py_cobjects(#10036) +py_cobjects(#10038) +py_cobjects(#10040) +py_cobjects(#10041) +py_cobjects(#10043) +py_cobjects(#10044) +py_cobjects(#10045) +#12285 = @"C_builtin_function_or_method$array._array_reconstructor" +py_cobjects(#12285) +py_cobjects(#10047) +py_cobjects(#10048) +py_cobjects(#10049) +py_cobjects(#10051) +py_cobjects(#10052) +py_cobjects(#10053) +py_cobjects(#10054) +py_cobjects(#10055) +py_cobjects(#10056) +py_cobjects(#10057) +py_cobjects(#10058) +py_cobjects(#10059) +py_cobjects(#10060) +py_cobjects(#11510) +py_cobjects(#11511) +py_cobjects(#11512) +py_cobjects(#11513) +py_cobjects(#11514) +py_cobjects(#11515) +py_cobjects(#10061) +py_cobjects(#10063) +py_cobjects(#10064) +py_cobjects(#10065) +py_cobjects(#10066) +py_cobjects(#10067) +py_cobjects(#10068) +py_cobjects(#10069) +py_cobjects(#10070) +#12286 = @"C_builtin_function_or_method$signal.default_int_handler" +py_cobjects(#12286) +py_cobjects(#10071) +py_cobjects(#10072) +py_cobjects(#10075) +py_cobjects(#10076) +py_cobjects(#11516) +py_cobjects(#10077) +py_cobjects(#10078) +py_cobjects(#10079) +py_cobjects(#10080) +py_cobjects(#10082) +py_cobjects(#10083) +py_cobjects(#10084) +py_cobjects(#10085) +py_cobjects(#10086) +py_cobjects(#10087) +py_cobjects(#10088) +py_cobjects(#10089) +py_cobjects(#10090) +py_cobjects(#10091) +py_cobjects(#10092) +py_cobjects(#10093) +py_cobjects(#10094) +py_cobjects(#10095) +py_cobjects(#10096) +py_cobjects(#10097) +py_cobjects(#10098) +py_cobjects(#10099) +py_cobjects(#10100) +py_cobjects(#10101) +py_cobjects(#10102) +py_cobjects(#10103) +py_cobjects(#10104) +py_cobjects(#10105) +py_cobjects(#10106) +py_cobjects(#10107) +py_cobjects(#10108) +py_cobjects(#10109) +py_cobjects(#10110) +py_cobjects(#10112) +py_cobjects(#10113) +py_cobjects(#10114) +py_cobjects(#10115) +py_cobjects(#10116) +py_cobjects(#10117) +py_cobjects(#10118) +py_cobjects(#10119) +py_cobjects(#10120) +py_cobjects(#10121) +py_cobjects(#10122) +py_cobjects(#10123) +py_cobjects(#10125) +#12287 = @"C_builtin_function_or_method$_thread.exit_thread" +py_cobjects(#12287) +#12288 = @"C_builtin_function_or_method$_thread.exit" +py_cobjects(#12288) +py_cobjects(#10126) +py_cobjects(#10127) +py_cobjects(#10128) +py_cobjects(#10129) +py_cobjects(#10130) +#12289 = @"C_builtin_function_or_method$_codecs.lookup" +py_cobjects(#12289) +#12290 = @"C_builtin_function_or_method$_codecs.encode" +py_cobjects(#12290) +#12291 = @"C_builtin_function_or_method$_codecs.decode" +py_cobjects(#12291) +py_cobjects(#10131) +py_cobjects(#10132) +py_cobjects(#10133) +py_cobjects(#10134) +py_cobjects(#10135) +py_cobjects(#10136) +py_cobjects(#10137) +py_cobjects(#10138) +py_cobjects(#10139) +py_cobjects(#10140) +py_cobjects(#10141) +py_cobjects(#10142) +py_cobjects(#10143) +py_cobjects(#10144) +py_cobjects(#10145) +py_cobjects(#10146) +py_cobjects(#10147) +py_cobjects(#10148) +py_cobjects(#10149) +py_cobjects(#10150) +py_cobjects(#10151) +py_cobjects(#10152) +py_cobjects(#10153) +py_cobjects(#10154) +py_cobjects(#10155) +py_cobjects(#10156) +py_cobjects(#10157) +py_cobjects(#10158) +py_cobjects(#10159) +py_cobjects(#10160) +py_cobjects(#10161) +py_cobjects(#10162) +py_cobjects(#10163) +py_cobjects(#10164) +py_cobjects(#10165) +#12292 = @"C_builtin_function_or_method$_codecs.lookup_error" +py_cobjects(#12292) +py_cobjects(#10166) +py_cobjects(#10167) +#12293 = @"C_builtin_function_or_method$xxlimited.new" +py_cobjects(#12293) +py_cobjects(#10168) +py_cobjects(#10170) +py_cobjects(#10171) +py_cobjects(#10172) +py_cobjects(#10173) +py_cobjects(#10174) +py_cobjects(#10175) +py_cobjects(#10176) +py_cobjects(#10177) +py_cobjects(#10178) +py_cobjects(#10179) +py_cobjects(#10180) +py_cobjects(#10181) +py_cobjects(#10182) +py_cobjects(#10183) +py_cobjects(#10184) +py_cobjects(#10185) +py_cobjects(#10186) +py_cobjects(#10187) +py_cobjects(#10188) +py_cobjects(#10190) +py_cobjects(#10192) +py_cobjects(#10193) +py_cobjects(#10194) +py_cobjects(#10195) +py_cobjects(#10196) +py_cobjects(#10197) +py_cobjects(#10198) +py_cobjects(#10199) +py_cobjects(#10200) +py_cobjects(#10201) +py_cobjects(#10202) +py_cobjects(#10203) +py_cobjects(#10204) +py_cobjects(#10205) +py_cobjects(#10206) +#12294 = @"C_builtin_function_or_method$faulthandler._stack_overflow" +py_cobjects(#12294) +#12295 = @"C_builtin_function_or_method$_functools.reduce" +py_cobjects(#12295) +py_cobjects(#10207) +py_cobjects(#10209) +py_cobjects(#10210) +py_cobjects(#10211) +py_cobjects(#10212) +py_cobjects(#10213) +py_cobjects(#10214) +py_cobjects(#10215) +py_cobjects(#10216) +py_cobjects(#10217) +py_cobjects(#10218) +py_cobjects(#10219) +py_cobjects(#11517) +#12296 = @"C_builtin_function_or_method$grp.getgrnam" +py_cobjects(#12296) +py_cobjects(#10220) +py_cobjects(#10221) +py_cobjects(#11518) +py_cobjects(#11519) +py_cobjects(#11520) +py_cobjects(#10222) +py_cobjects(#10224) +py_cobjects(#10225) +py_cobjects(#10227) +py_cobjects(#10228) +py_cobjects(#10229) +py_cobjects(#10230) +py_cobjects(#10231) +py_cobjects(#10232) +py_cobjects(#10233) +py_cobjects(#10234) +py_cobjects(#10235) +py_cobjects(#10236) +py_cobjects(#10237) +py_cobjects(#10238) +py_cobjects(#10239) +py_cobjects(#10240) +py_cobjects(#10241) +py_cobjects(#10242) +py_cobjects(#10243) +py_cobjects(#10244) +py_cobjects(#10245) +py_cobjects(#10246) +py_cobjects(#10247) +py_cobjects(#10248) +#12297 = @"C_builtin_function_or_method$_sre.compile" +py_cobjects(#12297) +py_cobjects(#10250) +py_cobjects(#10251) +py_cobjects(#10252) +py_cobjects(#10253) +py_cobjects(#10254) +py_cobjects(#10255) +py_cobjects(#10256) +py_cobjects(#10257) +py_cobjects(#10258) +#12298 = @"C_builtin_function_or_method$binascii.b2a_uu" +py_cobjects(#12298) +#12299 = @"C_builtin_function_or_method$binascii.a2b_base64" +py_cobjects(#12299) +#12300 = @"C_builtin_function_or_method$binascii.b2a_base64" +py_cobjects(#12300) +py_cobjects(#10259) +#12301 = @"C_builtin_function_or_method$binascii.b2a_hqx" +py_cobjects(#12301) +py_cobjects(#10260) +py_cobjects(#10261) +py_cobjects(#10262) +py_cobjects(#10263) +#12302 = @"C_builtin_function_or_method$binascii.rlecode_hqx" +py_cobjects(#12302) +py_cobjects(#10264) +py_cobjects(#10265) +py_cobjects(#10266) +py_cobjects(#10267) +py_cobjects(#10268) +py_cobjects(#10269) +py_cobjects(#10270) +py_cobjects(#10271) +py_cobjects(#10272) +py_cobjects(#10273) +py_cobjects(#10274) +py_cobjects(#10275) +py_cobjects(#10276) +py_cobjects(#10277) +py_cobjects(#10278) +py_cobjects(#10279) +py_cobjects(#10280) +py_cobjects(#10281) +py_cobjects(#10282) +#12303 = @"C_builtin_function_or_method$posix.lstat" +py_cobjects(#12303) +py_cobjects(#10283) +py_cobjects(#10284) +py_cobjects(#10285) +py_cobjects(#10286) +py_cobjects(#10287) +py_cobjects(#10288) +py_cobjects(#10289) +py_cobjects(#10290) +#12304 = @"C_builtin_function_or_method$posix.stat" +py_cobjects(#12304) +py_cobjects(#10291) +py_cobjects(#10292) +py_cobjects(#10293) +py_cobjects(#10294) +#12305 = @"C_builtin_function_or_method$posix.uname" +py_cobjects(#12305) +py_cobjects(#10295) +py_cobjects(#10296) +py_cobjects(#10297) +#12306 = @"C_builtin_function_or_method$posix.times" +py_cobjects(#12306) +#12307 = @"C_builtin_function_or_method$posix._exit" +py_cobjects(#12307) +#12308 = @"C_builtin_function_or_method$posix.execv" +py_cobjects(#12308) +#12309 = @"C_builtin_function_or_method$posix.execve" +py_cobjects(#12309) +py_cobjects(#10298) +py_cobjects(#10299) +py_cobjects(#10300) +#12310 = @"C_builtin_function_or_method$posix.sched_getparam" +py_cobjects(#12310) +py_cobjects(#10301) +py_cobjects(#10302) +py_cobjects(#10303) +py_cobjects(#10304) +py_cobjects(#10305) +py_cobjects(#10306) +py_cobjects(#10307) +py_cobjects(#10308) +py_cobjects(#10309) +py_cobjects(#10310) +py_cobjects(#10311) +py_cobjects(#10312) +py_cobjects(#10313) +py_cobjects(#10314) +py_cobjects(#10315) +py_cobjects(#10316) +py_cobjects(#10317) +py_cobjects(#10318) +py_cobjects(#10319) +py_cobjects(#10320) +py_cobjects(#10321) +py_cobjects(#10322) +py_cobjects(#10323) +py_cobjects(#10324) +py_cobjects(#10325) +py_cobjects(#10326) +py_cobjects(#10327) +py_cobjects(#10328) +py_cobjects(#10329) +py_cobjects(#10330) +py_cobjects(#10331) +py_cobjects(#10332) +py_cobjects(#10333) +py_cobjects(#10334) +py_cobjects(#10335) +py_cobjects(#10336) +py_cobjects(#10337) +py_cobjects(#10338) +py_cobjects(#10339) +py_cobjects(#10340) +py_cobjects(#10341) +py_cobjects(#10342) +py_cobjects(#10343) +py_cobjects(#10344) +py_cobjects(#10345) +py_cobjects(#10346) +py_cobjects(#10347) +py_cobjects(#10348) +py_cobjects(#10349) +#12311 = @"C_builtin_function_or_method$posix.read" +py_cobjects(#12311) +py_cobjects(#10350) +#12312 = @"C_builtin_function_or_method$posix.pread" +py_cobjects(#12312) +py_cobjects(#10351) +py_cobjects(#10352) +py_cobjects(#10353) +py_cobjects(#10354) +#12313 = @"C_builtin_function_or_method$posix.fstat" +py_cobjects(#12313) +py_cobjects(#10355) +py_cobjects(#10356) +py_cobjects(#10357) +py_cobjects(#10358) +py_cobjects(#10359) +py_cobjects(#10360) +py_cobjects(#10361) +py_cobjects(#10362) +py_cobjects(#10363) +py_cobjects(#10364) +py_cobjects(#10365) +py_cobjects(#10366) +py_cobjects(#10367) +py_cobjects(#10368) +py_cobjects(#10369) +py_cobjects(#10370) +py_cobjects(#10371) +py_cobjects(#10372) +py_cobjects(#10373) +py_cobjects(#10374) +py_cobjects(#10375) +py_cobjects(#10376) +py_cobjects(#10377) +py_cobjects(#10378) +py_cobjects(#10379) +py_cobjects(#10380) +py_cobjects(#10381) +#12314 = @"C_builtin_function_or_method$posix.fstatvfs" +py_cobjects(#12314) +#12315 = @"C_builtin_function_or_method$posix.statvfs" +py_cobjects(#12315) +py_cobjects(#10382) +py_cobjects(#10383) +py_cobjects(#10384) +py_cobjects(#10385) +#12316 = @"C_builtin_function_or_method$posix.abort" +py_cobjects(#12316) +py_cobjects(#10386) +py_cobjects(#10387) +py_cobjects(#10388) +py_cobjects(#10389) +py_cobjects(#10390) +py_cobjects(#10391) +py_cobjects(#10392) +#12317 = @"C_builtin_function_or_method$posix.getxattr" +py_cobjects(#12317) +py_cobjects(#10393) +py_cobjects(#10394) +#12318 = @"C_builtin_function_or_method$posix.get_terminal_size" +py_cobjects(#12318) +#12319 = @"C_builtin_function_or_method$atexit.register" +py_cobjects(#12319) +py_cobjects(#10395) +py_cobjects(#10396) +py_cobjects(#10397) +py_cobjects(#10398) +py_cobjects(#10399) +py_cobjects(#10400) +#12320 = @"C_builtin_function_or_method$_heapq.heappushpop" +py_cobjects(#12320) +py_cobjects(#11521) +#12321 = @"C_builtin_function_or_method$_heapq.heapreplace" +py_cobjects(#12321) +py_cobjects(#10401) +py_cobjects(#10402) +py_cobjects(#10403) +py_cobjects(#10404) +#12322 = @"C_builtin_function_or_method$_testbuffer.get_pointer" +py_cobjects(#12322) +py_cobjects(#10405) +py_cobjects(#10406) +py_cobjects(#10408) +#12323 = @"C_builtin_function_or_method$_testbuffer.is_contiguous" +py_cobjects(#12323) +#12324 = @"C_builtin_function_or_method$_testbuffer.cmp_contig" +py_cobjects(#12324) +py_cobjects(#10409) +py_cobjects(#10410) +#12325 = @"C_builtin_function_or_method$io.open" +py_cobjects(#12325) +py_cobjects(#10412) +py_cobjects(#10413) +py_cobjects(#10414) +py_cobjects(#10415) +py_cobjects(#10416) +#12326 = @"C_builtin_function_or_method$operator.is_" +py_cobjects(#12326) +#12327 = @"C_builtin_function_or_method$operator.is_not" +py_cobjects(#12327) +py_cobjects(#11522) +py_cobjects(#11523) +#12328 = @"C_builtin_function_or_method$operator.add" +py_cobjects(#12328) +#12329 = @"C_builtin_function_or_method$operator.__add__" +py_cobjects(#12329) +#12330 = @"C_builtin_function_or_method$operator.sub" +py_cobjects(#12330) +#12331 = @"C_builtin_function_or_method$operator.__sub__" +py_cobjects(#12331) +#12332 = @"C_builtin_function_or_method$operator.mul" +py_cobjects(#12332) +#12333 = @"C_builtin_function_or_method$operator.__mul__" +py_cobjects(#12333) +#12334 = @"C_builtin_function_or_method$operator.floordiv" +py_cobjects(#12334) +#12335 = @"C_builtin_function_or_method$operator.__floordiv__" +py_cobjects(#12335) +#12336 = @"C_builtin_function_or_method$operator.truediv" +py_cobjects(#12336) +#12337 = @"C_builtin_function_or_method$operator.__truediv__" +py_cobjects(#12337) +#12338 = @"C_builtin_function_or_method$operator.mod" +py_cobjects(#12338) +#12339 = @"C_builtin_function_or_method$operator.__mod__" +py_cobjects(#12339) +py_cobjects(#11524) +py_cobjects(#11525) +py_cobjects(#11526) +py_cobjects(#11527) +py_cobjects(#11528) +py_cobjects(#11529) +py_cobjects(#11530) +py_cobjects(#11531) +py_cobjects(#11532) +py_cobjects(#11533) +#12340 = @"C_builtin_function_or_method$operator.lshift" +py_cobjects(#12340) +#12341 = @"C_builtin_function_or_method$operator.__lshift__" +py_cobjects(#12341) +#12342 = @"C_builtin_function_or_method$operator.rshift" +py_cobjects(#12342) +#12343 = @"C_builtin_function_or_method$operator.__rshift__" +py_cobjects(#12343) +py_cobjects(#10417) +py_cobjects(#10418) +#12344 = @"C_builtin_function_or_method$operator.and_" +py_cobjects(#12344) +#12345 = @"C_builtin_function_or_method$operator.__and__" +py_cobjects(#12345) +#12346 = @"C_builtin_function_or_method$operator.xor" +py_cobjects(#12346) +#12347 = @"C_builtin_function_or_method$operator.__xor__" +py_cobjects(#12347) +#12348 = @"C_builtin_function_or_method$operator.or_" +py_cobjects(#12348) +#12349 = @"C_builtin_function_or_method$operator.__or__" +py_cobjects(#12349) +#12350 = @"C_builtin_function_or_method$operator.iadd" +py_cobjects(#12350) +#12351 = @"C_builtin_function_or_method$operator.__iadd__" +py_cobjects(#12351) +#12352 = @"C_builtin_function_or_method$operator.isub" +py_cobjects(#12352) +#12353 = @"C_builtin_function_or_method$operator.__isub__" +py_cobjects(#12353) +#12354 = @"C_builtin_function_or_method$operator.imul" +py_cobjects(#12354) +#12355 = @"C_builtin_function_or_method$operator.__imul__" +py_cobjects(#12355) +#12356 = @"C_builtin_function_or_method$operator.ifloordiv" +py_cobjects(#12356) +#12357 = @"C_builtin_function_or_method$operator.__ifloordiv__" +py_cobjects(#12357) +#12358 = @"C_builtin_function_or_method$operator.itruediv" +py_cobjects(#12358) +#12359 = @"C_builtin_function_or_method$operator.__itruediv__" +py_cobjects(#12359) +#12360 = @"C_builtin_function_or_method$operator.imod" +py_cobjects(#12360) +#12361 = @"C_builtin_function_or_method$operator.__imod__" +py_cobjects(#12361) +#12362 = @"C_builtin_function_or_method$operator.ilshift" +py_cobjects(#12362) +#12363 = @"C_builtin_function_or_method$operator.__ilshift__" +py_cobjects(#12363) +#12364 = @"C_builtin_function_or_method$operator.irshift" +py_cobjects(#12364) +#12365 = @"C_builtin_function_or_method$operator.__irshift__" +py_cobjects(#12365) +#12366 = @"C_builtin_function_or_method$operator.iand" +py_cobjects(#12366) +#12367 = @"C_builtin_function_or_method$operator.__iand__" +py_cobjects(#12367) +#12368 = @"C_builtin_function_or_method$operator.ixor" +py_cobjects(#12368) +#12369 = @"C_builtin_function_or_method$operator.__ixor__" +py_cobjects(#12369) +#12370 = @"C_builtin_function_or_method$operator.ior" +py_cobjects(#12370) +#12371 = @"C_builtin_function_or_method$operator.__ior__" +py_cobjects(#12371) +#12372 = @"C_builtin_function_or_method$operator.concat" +py_cobjects(#12372) +#12373 = @"C_builtin_function_or_method$operator.__concat__" +py_cobjects(#12373) +#12374 = @"C_builtin_function_or_method$operator.iconcat" +py_cobjects(#12374) +#12375 = @"C_builtin_function_or_method$operator.__iconcat__" +py_cobjects(#12375) +#12376 = @"C_builtin_function_or_method$operator.getitem" +py_cobjects(#12376) +#12377 = @"C_builtin_function_or_method$operator.__getitem__" +py_cobjects(#12377) +py_cobjects(#10419) +py_cobjects(#10420) +py_cobjects(#10421) +py_cobjects(#10422) +#12378 = @"C_builtin_function_or_method$operator.pow" +py_cobjects(#12378) +#12379 = @"C_builtin_function_or_method$operator.__pow__" +py_cobjects(#12379) +#12380 = @"C_builtin_function_or_method$operator.ipow" +py_cobjects(#12380) +#12381 = @"C_builtin_function_or_method$operator.__ipow__" +py_cobjects(#12381) +#12382 = @"C_builtin_function_or_method$operator.lt" +py_cobjects(#12382) +#12383 = @"C_builtin_function_or_method$operator.__lt__" +py_cobjects(#12383) +#12384 = @"C_builtin_function_or_method$operator.le" +py_cobjects(#12384) +#12385 = @"C_builtin_function_or_method$operator.__le__" +py_cobjects(#12385) +#12386 = @"C_builtin_function_or_method$operator.eq" +py_cobjects(#12386) +#12387 = @"C_builtin_function_or_method$operator.__eq__" +py_cobjects(#12387) +#12388 = @"C_builtin_function_or_method$operator.ne" +py_cobjects(#12388) +#12389 = @"C_builtin_function_or_method$operator.__ne__" +py_cobjects(#12389) +#12390 = @"C_builtin_function_or_method$operator.gt" +py_cobjects(#12390) +#12391 = @"C_builtin_function_or_method$operator.__gt__" +py_cobjects(#12391) +#12392 = @"C_builtin_function_or_method$operator.ge" +py_cobjects(#12392) +#12393 = @"C_builtin_function_or_method$operator.__ge__" +py_cobjects(#12393) +py_cobjects(#10423) +py_cobjects(#10424) +py_cobjects(#10425) +py_cobjects(#10426) +py_cobjects(#10427) +py_cobjects(#10428) +#12394 = @"C_builtin_function_or_method$readline.get_line_buffer" +py_cobjects(#12394) +py_cobjects(#10429) +py_cobjects(#10430) +py_cobjects(#10431) +py_cobjects(#10432) +py_cobjects(#10433) +py_cobjects(#10434) +py_cobjects(#10435) +py_cobjects(#10436) +py_cobjects(#10437) +py_cobjects(#10438) +py_cobjects(#10439) +py_cobjects(#10440) +#12395 = @"C_builtin_function_or_method$readline.get_begidx" +py_cobjects(#12395) +#12396 = @"C_builtin_function_or_method$readline.get_endidx" +py_cobjects(#12396) +py_cobjects(#10441) +py_cobjects(#10442) +py_cobjects(#10443) +py_cobjects(#10444) +#12397 = @"C_builtin_function_or_method$readline.get_completer_delims" +py_cobjects(#12397) +py_cobjects(#10445) +py_cobjects(#10446) +py_cobjects(#10447) +py_cobjects(#10448) +#12398 = @"C_builtin_function_or_method$_testcapi.raise_exception" +py_cobjects(#12398) +#12399 = @"C_builtin_function_or_method$_testcapi.raise_memoryerror" +py_cobjects(#12399) +py_cobjects(#10449) +py_cobjects(#10450) +py_cobjects(#10451) +py_cobjects(#10452) +py_cobjects(#10453) +py_cobjects(#10454) +py_cobjects(#10455) +py_cobjects(#10456) +py_cobjects(#10457) +py_cobjects(#10458) +py_cobjects(#10459) +py_cobjects(#10460) +py_cobjects(#10461) +py_cobjects(#10462) +py_cobjects(#10463) +py_cobjects(#10464) +py_cobjects(#10465) +py_cobjects(#10466) +py_cobjects(#10467) +py_cobjects(#10468) +py_cobjects(#10469) +py_cobjects(#10470) +py_cobjects(#10471) +py_cobjects(#10472) +py_cobjects(#10473) +py_cobjects(#10474) +py_cobjects(#10475) +py_cobjects(#10476) +py_cobjects(#10477) +py_cobjects(#10478) +py_cobjects(#10479) +py_cobjects(#10480) +py_cobjects(#10481) +py_cobjects(#10482) +py_cobjects(#10483) +py_cobjects(#10484) +py_cobjects(#10485) +py_cobjects(#10486) +py_cobjects(#10487) +py_cobjects(#10488) +py_cobjects(#10489) +py_cobjects(#10490) +py_cobjects(#10491) +py_cobjects(#10492) +py_cobjects(#10493) +py_cobjects(#10494) +py_cobjects(#10495) +py_cobjects(#10496) +py_cobjects(#10497) +py_cobjects(#10498) +py_cobjects(#10499) +py_cobjects(#10500) +#12400 = @"C_builtin_function_or_method$_testcapi.codec_incrementalencoder" +py_cobjects(#12400) +#12401 = @"C_builtin_function_or_method$_testcapi.codec_incrementaldecoder" +py_cobjects(#12401) +py_cobjects(#10501) +py_cobjects(#10502) +py_cobjects(#10503) +py_cobjects(#10504) +py_cobjects(#10505) +py_cobjects(#10506) +#12402 = @"C_builtin_function_or_method$_testcapi.unicode_encodedecimal" +py_cobjects(#12402) +#12403 = @"C_builtin_function_or_method$_testcapi.unicode_transformdecimaltoascii" +py_cobjects(#12403) +py_cobjects(#10507) +py_cobjects(#10508) +py_cobjects(#10509) +py_cobjects(#10510) +py_cobjects(#10511) +py_cobjects(#10512) +py_cobjects(#10513) +py_cobjects(#10514) +py_cobjects(#10515) +py_cobjects(#10516) +py_cobjects(#10518) +#12404 = @"C_builtin_function_or_method$_testcapi.crash_no_current_thread" +py_cobjects(#12404) +py_cobjects(#10519) +py_cobjects(#10520) +py_cobjects(#10521) +py_cobjects(#10522) +py_cobjects(#10523) +py_cobjects(#11534) +py_cobjects(#10524) +py_cobjects(#10525) +py_cobjects(#10527) +#12405 = @"C_builtin_function_or_method$spwd.getspnam" +py_cobjects(#12405) +py_cobjects(#10529) +py_cobjects(#10530) +py_cobjects(#10532) +py_cobjects(#10533) +py_cobjects(#11535) +py_cobjects(#11536) +py_cobjects(#11537) +py_cobjects(#10534) +py_cobjects(#10535) +py_cobjects(#10536) +py_cobjects(#10537) +py_cobjects(#10538) +py_cobjects(#10539) +py_cobjects(#10540) +py_cobjects(#10541) +py_cobjects(#10543) +py_cobjects(#10544) +py_cobjects(#10545) +py_cobjects(#11538) +py_cobjects(#11539) +py_cobjects(#11540) +py_cobjects(#10546) +py_cobjects(#10547) +py_cobjects(#11541) +#12406 = @"C_builtin_function_or_method$pwd.getpwnam" +py_cobjects(#12406) +py_cobjects(#10548) +py_cobjects(#11542) +py_cobjects(#10549) +py_cobjects(#10550) +py_cobjects(#11543) +py_cobjects(#10551) +py_cobjects(#11544) +py_cobjects(#11545) +py_cobjects(#10552) +py_cobjects(#10553) +py_cobjects(#10554) +py_cobjects(#11547) +py_cobjects(#11548) +py_cobjects(#10555) +py_cobjects(#10556) +py_cobjects(#11549) +py_cobjects(#10557) +py_cobjects(#11550) +py_cobjects(#11551) +py_cobjects(#11552) +py_cobjects(#10558) +py_cobjects(#11553) +py_cobjects(#11554) +py_cobjects(#11555) +py_cobjects(#11556) +py_cobjects(#11557) +py_cobjects(#10559) +py_cobjects(#11558) +py_cobjects(#11559) +py_cobjects(#10560) +py_cobjects(#11560) +py_cobjects(#11561) +py_cobjects(#10561) +py_cobjects(#10562) +py_cobjects(#10563) +py_cobjects(#11562) +py_cobjects(#11563) +py_cobjects(#11564) +py_cobjects(#10564) +py_cobjects(#11565) +py_cobjects(#10565) +py_cobjects(#10566) +py_cobjects(#10567) +py_cobjects(#10568) +py_cobjects(#10569) +py_cobjects(#10570) +py_cobjects(#10571) +py_cobjects(#10572) +py_cobjects(#10573) +py_cobjects(#10574) +py_cobjects(#10575) +py_cobjects(#11566) +py_cobjects(#10576) +py_cobjects(#10577) +py_cobjects(#10578) +py_cobjects(#10579) +py_cobjects(#10580) +py_cobjects(#11567) +py_cobjects(#11568) +py_cobjects(#11569) +py_cobjects(#11570) +py_cobjects(#11571) +py_cobjects(#11572) +py_cobjects(#10581) +py_cobjects(#10583) +py_cobjects(#10585) +py_cobjects(#10587) +py_cobjects(#11573) +py_cobjects(#10588) +py_cobjects(#10589) +py_cobjects(#10590) +py_cobjects(#10591) +py_cobjects(#10592) +py_cobjects(#11574) +py_cobjects(#10593) +py_cobjects(#10594) +py_cobjects(#10595) +py_cobjects(#10596) +py_cobjects(#10597) +py_cobjects(#10598) +py_cobjects(#10599) +py_cobjects(#10600) +py_cobjects(#11575) +py_cobjects(#10601) +py_cobjects(#11576) +py_cobjects(#10602) +py_cobjects(#10603) +py_cobjects(#10604) +py_cobjects(#10605) +py_cobjects(#10606) +py_cobjects(#10607) +py_cobjects(#10608) +py_cobjects(#10609) +py_cobjects(#10610) +py_cobjects(#11577) +py_cobjects(#10611) +py_cobjects(#10612) +py_cobjects(#10613) +py_cobjects(#10614) +py_cobjects(#10615) +py_cobjects(#10616) +py_cobjects(#10617) +py_cobjects(#10618) +py_cobjects(#10619) +py_cobjects(#10620) +py_cobjects(#10621) +#12407 = @"C_builtin_function_or_method$sys.exit" +py_cobjects(#12407) +#12408 = @"C_builtin_function_or_method$sys.getdefaultencoding" +py_cobjects(#12408) +py_cobjects(#10622) +#12409 = @"C_builtin_function_or_method$sys.getfilesystemencoding" +py_cobjects(#12409) +py_cobjects(#10623) +py_cobjects(#10624) +py_cobjects(#11578) +py_cobjects(#10625) +#12410 = @"C_builtin_function_or_method$sys.intern" +py_cobjects(#12410) +py_cobjects(#10627) +py_cobjects(#10628) +py_cobjects(#10629) +py_cobjects(#10630) +py_cobjects(#10631) +py_cobjects(#10632) +py_cobjects(#10633) +py_cobjects(#10634) +py_cobjects(#10635) +py_cobjects(#10636) +py_cobjects(#11579) +py_cobjects(#10637) +#12411 = @"C_builtin_function_or_method$marshal.dump" +py_cobjects(#12411) +py_cobjects(#10638) +#12412 = @"C_builtin_function_or_method$marshal.dumps" +py_cobjects(#12412) +py_cobjects(#10639) +py_cobjects(#10640) +py_cobjects(#10641) +py_cobjects(#10642) +py_cobjects(#10643) +py_cobjects(#10644) +py_cobjects(#10645) +py_cobjects(#10646) +py_cobjects(#10648) +py_cobjects(#10649) +py_cobjects(#10650) +py_cobjects(#10651) +py_cobjects(#10652) +#12413 = @"C_builtin_function_or_method$builtins.__build_class__" +py_cobjects(#12413) +py_cobjects(#11580) +py_cobjects(#11581) +py_cobjects(#10653) +py_cobjects(#10654) +py_cobjects(#11582) +py_cobjects(#11583) +py_cobjects(#10655) +py_cobjects(#11584) +py_cobjects(#10656) +py_cobjects(#10657) +#12414 = @"C_builtin_function_or_method$builtins.dir" +py_cobjects(#12414) +#12415 = @"C_builtin_function_or_method$builtins.divmod" +py_cobjects(#12415) +#12416 = @"C_builtin_function_or_method$builtins.eval" +py_cobjects(#12416) +py_cobjects(#10658) +py_cobjects(#11585) +#12417 = @"C_builtin_function_or_method$builtins.getattr" +py_cobjects(#12417) +py_cobjects(#10659) +py_cobjects(#10660) +py_cobjects(#10661) +py_cobjects(#11586) +py_cobjects(#10662) +#12418 = @"C_builtin_function_or_method$builtins.input" +py_cobjects(#12418) +py_cobjects(#10663) +py_cobjects(#10664) +py_cobjects(#10665) +py_cobjects(#10668) +py_cobjects(#10669) +#12419 = @"C_builtin_function_or_method$builtins.max" +py_cobjects(#12419) +#12420 = @"C_builtin_function_or_method$builtins.min" +py_cobjects(#12420) +#12421 = @"C_builtin_function_or_method$builtins.next" +py_cobjects(#12421) +py_cobjects(#11587) +py_cobjects(#10670) +#12422 = @"C_builtin_function_or_method$builtins.pow" +py_cobjects(#12422) +py_cobjects(#10671) +py_cobjects(#11588) +py_cobjects(#11589) +py_cobjects(#10672) +py_cobjects(#10673) +py_cobjects(#10674) +py_cobjects(#10675) +py_cobjects(#10676) +py_cobjects(#10677) +py_cobjects(#10679) +py_cobjects(#10680) +py_cobjects(#10681) +py_cobjects(#10682) +py_cobjects(#10683) +py_cobjects(#10684) +py_cobjects(#10685) +py_cobjects(#10686) +py_cobjects(#11591) +py_cobjects(#10687) +py_cobjects(#11592) +py_cobjects(#11594) +py_cobjects(#11595) +py_cobjects(#11596) +py_cobjects(#11598) +py_cobjects(#10688) +py_cobjects(#10689) +py_cobjects(#10690) +py_cobjects(#10691) +py_cobjects(#10692) +py_cobjects(#11600) +py_cobjects(#10693) +py_cobjects(#10694) +py_cobjects(#10695) +py_cobjects(#10696) +py_cobjects(#10697) +py_cobjects(#10698) +py_cobjects(#10699) +py_cobjects(#10700) +py_cobjects(#10701) +py_cobjects(#10702) +py_cobjects(#10703) +py_cobjects(#10704) +py_cobjects(#10705) +py_cobjects(#10706) +py_cobjects(#11605) +py_cobjects(#10707) +py_cobjects(#10708) +py_cobjects(#10709) +py_cobjects(#11606) +py_cobjects(#11607) +py_cobjects(#10710) +py_cobjects(#10711) +py_cobjects(#10712) +py_cobjects(#10714) +py_cobjects(#10715) +py_cobjects(#10716) +py_cobjects(#11608) +py_cobjects(#11610) +py_cobjects(#11611) +py_cobjects(#10717) +py_cobjects(#10718) +py_cobjects(#11612) +py_cobjects(#11613) +py_cobjects(#10719) +py_cobjects(#10720) +py_cobjects(#10721) +py_cobjects(#10722) +py_cobjects(#10724) +py_cobjects(#10725) +py_cobjects(#10726) +py_cobjects(#10727) +py_cobjects(#10728) +py_cobjects(#10729) +py_cobjects(#10730) +py_cobjects(#10731) +py_cobjects(#10732) +py_cobjects(#10733) +py_cobjects(#10734) +py_cobjects(#10735) +py_cobjects(#10736) +py_cobjects(#10737) +py_cobjects(#10738) +py_cobjects(#10739) +py_cobjects(#10740) +py_cobjects(#10741) +py_cobjects(#10742) +py_cobjects(#10743) +py_cobjects(#10744) +py_cobjects(#10745) +py_cobjects(#10746) +py_cobjects(#10747) +py_cobjects(#10748) +py_cobjects(#10749) +py_cobjects(#10750) +py_cobjects(#10751) +py_cobjects(#10752) +py_cobjects(#10753) +py_cobjects(#10754) +py_cobjects(#10755) +py_cobjects(#10756) +py_cobjects(#11614) +py_cobjects(#11615) +py_cobjects(#11616) +py_cobjects(#11617) +py_cobjects(#11618) +py_cobjects(#11619) +py_cobjects(#11620) +py_cobjects(#11621) +py_cobjects(#11622) +py_cobjects(#11623) +py_cobjects(#10757) +py_cobjects(#11624) +py_cobjects(#10758) +py_cobjects(#11625) +py_cobjects(#10759) +py_cobjects(#10760) +py_cobjects(#10761) +py_cobjects(#11626) +py_cobjects(#11627) +py_cobjects(#11628) +py_cobjects(#10762) +py_cobjects(#10763) +py_cobjects(#10764) +py_cobjects(#10765) +py_cobjects(#10766) +py_cobjects(#10767) +py_cobjects(#10768) +py_cobjects(#11629) +py_cobjects(#10769) +py_cobjects(#10770) +py_cobjects(#10771) +py_cobjects(#10772) +py_cobjects(#10773) +py_cobjects(#10774) +py_cobjects(#10775) +py_cobjects(#10776) +py_cobjects(#10777) +py_cobjects(#10778) +py_cobjects(#10779) +py_cobjects(#10780) +py_cobjects(#10781) +py_cobjects(#10782) +py_cobjects(#10783) +py_cobjects(#10784) +py_cobjects(#10785) +py_cobjects(#10786) +py_cobjects(#10787) +py_cobjects(#10788) +py_cobjects(#10789) +py_cobjects(#10790) +py_cobjects(#10791) +py_cobjects(#10792) +py_cobjects(#10793) +py_cobjects(#10794) +py_cobjects(#10795) +py_cobjects(#10796) +py_cobjects(#10797) +py_cobjects(#11630) +py_cobjects(#11631) +py_cobjects(#11632) +py_cobjects(#11633) +py_cobjects(#11634) +py_cobjects(#11635) +py_cobjects(#11636) +py_cobjects(#11637) +py_cobjects(#11638) +py_cobjects(#11639) +py_cobjects(#10798) +py_cobjects(#11640) +py_cobjects(#11641) +py_cobjects(#10799) +py_cobjects(#10800) +py_cobjects(#10801) +py_cobjects(#10802) +py_cobjects(#10803) +py_cobjects(#11642) +py_cobjects(#11643) +py_cobjects(#10804) +py_cobjects(#10805) +py_cobjects(#10806) +py_cobjects(#11644) +py_cobjects(#10807) +py_cobjects(#10808) +py_cobjects(#10809) +py_cobjects(#10810) +py_cobjects(#10811) +py_cobjects(#10812) +py_cobjects(#10813) +py_cobjects(#11645) +py_cobjects(#11646) +py_cobjects(#11647) +py_cobjects(#11648) +py_cobjects(#10814) +py_cobjects(#10815) +py_cobjects(#10816) +py_cobjects(#10817) +py_cobjects(#10818) +py_cobjects(#10819) +py_cobjects(#10820) +py_cobjects(#11649) +py_cobjects(#10821) +py_cobjects(#10822) +py_cobjects(#10823) +py_cobjects(#10824) +py_cobjects(#11652) +py_cobjects(#10825) +py_cobjects(#10826) +py_cobjects(#10827) +py_cobjects(#11653) +py_cobjects(#10828) +py_cobjects(#10829) +py_cobjects(#10830) +py_cobjects(#10831) +py_cobjects(#10832) +py_cobjects(#10833) +py_cobjects(#11656) +py_cobjects(#10834) +py_cobjects(#11657) +py_cobjects(#10835) +py_cobjects(#10836) +py_cobjects(#10837) +py_cobjects(#10838) +py_cobjects(#10839) +py_cobjects(#10840) +py_cobjects(#10841) +py_cobjects(#10842) +py_cobjects(#11658) +py_cobjects(#10843) +py_cobjects(#10844) +py_cobjects(#10845) +py_cobjects(#10846) +py_cobjects(#10847) +py_cobjects(#10848) +py_cobjects(#10849) +py_cobjects(#10850) +py_cobjects(#10851) +py_cobjects(#10852) +py_cobjects(#10853) +py_cobjects(#10854) +py_cobjects(#10855) +py_cobjects(#11660) +py_cobjects(#10856) +py_cobjects(#11662) +py_cobjects(#11664) +py_cobjects(#10857) +py_cobjects(#10858) +py_cobjects(#10859) +py_cobjects(#10860) +py_cobjects(#10861) +py_cobjects(#10862) +py_cobjects(#10863) +py_cobjects(#10864) +py_cobjects(#10865) +py_cobjects(#10866) +py_cobjects(#10867) +py_cobjects(#10869) +py_cobjects(#10870) +py_cobjects(#10871) +py_cobjects(#10872) +py_cobjects(#10873) +py_cobjects(#10874) +py_cobjects(#10875) +py_cobjects(#10876) +py_cobjects(#10877) +py_cobjects(#10878) +py_cobjects(#10879) +py_cobjects(#10880) +py_cobjects(#10881) +py_cobjects(#10882) +py_cobjects(#10883) +py_cobjects(#10884) +py_cobjects(#10885) +py_cobjects(#10887) +py_cobjects(#10888) +py_cobjects(#10889) +py_cobjects(#10890) +py_cobjects(#10891) +py_cobjects(#10892) +py_cobjects(#10893) +py_cobjects(#10894) +py_cobjects(#10895) +py_cobjects(#10896) +py_cobjects(#10897) +py_cobjects(#10898) +py_cobjects(#10899) +py_cobjects(#10900) +py_cobjects(#10901) +py_cobjects(#10902) +py_cobjects(#10903) +py_cobjects(#10904) +py_cobjects(#10905) +py_cobjects(#10906) +py_cobjects(#10907) +py_cobjects(#10908) +py_cobjects(#11669) +py_cobjects(#10909) +py_cobjects(#10910) +py_cobjects(#10911) +py_cobjects(#11670) +py_cobjects(#10912) +py_cobjects(#10913) +py_cobjects(#10914) +py_cobjects(#10915) +py_cobjects(#10916) +py_cobjects(#10917) +py_cobjects(#10918) +py_cobjects(#10919) +py_cobjects(#11674) +py_cobjects(#11676) +py_cobjects(#10920) +py_cobjects(#10921) +py_cobjects(#10922) +py_cobjects(#10923) +py_cobjects(#10924) +py_cobjects(#11678) +py_cobjects(#10925) +py_cobjects(#10926) +py_cobjects(#10927) +py_cobjects(#11679) +py_cobjects(#10928) +py_cobjects(#10929) +py_cobjects(#10930) +py_cobjects(#10931) +py_cobjects(#10932) +py_cobjects(#10933) +py_cobjects(#10934) +py_cobjects(#11681) +py_cobjects(#11682) +py_cobjects(#11683) +py_cobjects(#10935) +py_cobjects(#10936) +py_cobjects(#10937) +py_cobjects(#10938) +py_cobjects(#10939) +py_cobjects(#10940) +py_cobjects(#10941) +py_cobjects(#10942) +py_cobjects(#10943) +py_cobjects(#11686) +py_cobjects(#11687) +py_cobjects(#11688) +py_cobjects(#11689) +py_cobjects(#10944) +py_cobjects(#11691) +py_cobjects(#11693) +py_cobjects(#11694) +py_cobjects(#11695) +py_cobjects(#10945) +py_cobjects(#11696) +py_cobjects(#11698) +py_cobjects(#11699) +py_cobjects(#11700) +py_cobjects(#11701) +py_cobjects(#11702) +py_cobjects(#11705) +py_cobjects(#11706) +py_cobjects(#11707) +py_cobjects(#11708) +py_cobjects(#11709) +py_cobjects(#10946) +py_cobjects(#11710) +py_cobjects(#11711) +py_cobjects(#10947) +py_cobjects(#10948) +py_cobjects(#10949) +py_cobjects(#11712) +py_cobjects(#11713) +py_cobjects(#10950) +py_cobjects(#11714) +py_cobjects(#11715) +py_cobjects(#11716) +py_cobjects(#10951) +py_cobjects(#10952) +py_cobjects(#10953) +py_cobjects(#11717) +py_cobjects(#10954) +py_cobjects(#11718) +py_cobjects(#11720) +py_cobjects(#10955) +py_cobjects(#11721) +py_cobjects(#10956) +py_cobjects(#11722) +py_cobjects(#11723) +py_cobjects(#11724) +py_cobjects(#11725) +py_cobjects(#11726) +py_cobjects(#11727) +py_cobjects(#11728) +py_cobjects(#10957) +py_cobjects(#11729) +py_cobjects(#10958) +py_cobjects(#10959) +py_cobjects(#10960) +py_cobjects(#11730) +py_cobjects(#10961) +py_cobjects(#10962) +py_cobjects(#10963) +py_cobjects(#10964) +py_cobjects(#10965) +py_cobjects(#10966) +py_cobjects(#10967) +py_cobjects(#10968) +py_cobjects(#10969) +py_cobjects(#10970) +py_cobjects(#10971) +py_cobjects(#10972) +py_cobjects(#10973) +py_cobjects(#10974) +py_cobjects(#10975) +py_cobjects(#10976) +py_cobjects(#10977) +py_cobjects(#10978) +py_cobjects(#10979) +py_cobjects(#10980) +py_cobjects(#10981) +py_cobjects(#11733) +py_cobjects(#11734) +py_cobjects(#10982) +py_cobjects(#10983) +py_cobjects(#10984) +py_cobjects(#10985) +py_cobjects(#11735) +py_cobjects(#10986) +py_cobjects(#10987) +py_cobjects(#10988) +py_cobjects(#10989) +py_cobjects(#10990) +py_cobjects(#10991) +py_cobjects(#11737) +py_cobjects(#11739) +py_cobjects(#11740) +py_cobjects(#11741) +py_cobjects(#11742) +py_cobjects(#10992) +py_cobjects(#10993) +py_cobjects(#10994) +py_cobjects(#11744) +py_cobjects(#10995) +py_cobjects(#11746) +py_cobjects(#11747) +py_cobjects(#11748) +py_cobjects(#10996) +py_cobjects(#11749) +py_cobjects(#11750) +py_cobjects(#11751) +py_cobjects(#11752) +py_cobjects(#11753) +py_cobjects(#11754) +py_cobjects(#11755) +py_cobjects(#10997) +py_cobjects(#11756) +py_cobjects(#10998) +py_cobjects(#10999) +py_cobjects(#11000) +py_cobjects(#11001) +py_cobjects(#11002) +py_cobjects(#11003) +py_cobjects(#11004) +py_cobjects(#11005) +py_cobjects(#11006) +py_cobjects(#11007) +py_cobjects(#11008) +py_cobjects(#11009) +py_cobjects(#11010) +py_cobjects(#11011) +py_cobjects(#11012) +py_cobjects(#11013) +py_cobjects(#11014) +py_cobjects(#11015) +py_cobjects(#11016) +py_cobjects(#11017) +py_cobjects(#11018) +py_cobjects(#11758) +py_cobjects(#11760) +py_cobjects(#11761) +py_cobjects(#11019) +py_cobjects(#11020) +py_cobjects(#11021) +py_cobjects(#11022) +py_cobjects(#11023) +py_cobjects(#11024) +py_cobjects(#11762) +py_cobjects(#11763) +py_cobjects(#11764) +py_cobjects(#11765) +py_cobjects(#11025) +py_cobjects(#11766) +py_cobjects(#11767) +py_cobjects(#11026) +py_cobjects(#11027) +py_cobjects(#11028) +py_cobjects(#11029) +py_cobjects(#11030) +py_cobjects(#11769) +py_cobjects(#11771) +py_cobjects(#11772) +py_cobjects(#11031) +py_cobjects(#11773) +py_cobjects(#11774) +py_cobjects(#11776) +py_cobjects(#11032) +py_cobjects(#11777) +py_cobjects(#11778) +py_cobjects(#11779) +py_cobjects(#11780) +py_cobjects(#11781) +py_cobjects(#11033) +py_cobjects(#11782) +py_cobjects(#11034) +py_cobjects(#11035) +py_cobjects(#11036) +py_cobjects(#11037) +py_cobjects(#11038) +py_cobjects(#11039) +py_cobjects(#11040) +py_cobjects(#11041) +py_cobjects(#11042) +py_cobjects(#11043) +py_cobjects(#11784) +py_cobjects(#11785) +py_cobjects(#11786) +py_cobjects(#11787) +py_cobjects(#11788) +py_cobjects(#11789) +py_cobjects(#11044) +py_cobjects(#11790) +py_cobjects(#11045) +py_cobjects(#11046) +py_cobjects(#11047) +py_cobjects(#11048) +py_cobjects(#11049) +py_cobjects(#11050) +py_cobjects(#11051) +py_cobjects(#11052) +py_cobjects(#11053) +py_cobjects(#11054) +py_cobjects(#11055) +py_cobjects(#11056) +py_cobjects(#11792) +py_cobjects(#11793) +py_cobjects(#11794) +py_cobjects(#11795) +py_cobjects(#11796) +py_cobjects(#11797) +py_cobjects(#11057) +py_cobjects(#11798) +py_cobjects(#11058) +py_cobjects(#11059) +py_cobjects(#11060) +py_cobjects(#11061) +py_cobjects(#11062) +py_cobjects(#11063) +py_cobjects(#11799) +py_cobjects(#11801) +py_cobjects(#11802) +py_cobjects(#11803) +py_cobjects(#11804) +py_cobjects(#11805) +py_cobjects(#11806) +py_cobjects(#11807) +py_cobjects(#11808) +py_cobjects(#11809) +py_cobjects(#11810) +py_cobjects(#11064) +py_cobjects(#11812) +py_cobjects(#11813) +py_cobjects(#11814) +py_cobjects(#11065) +py_cobjects(#11066) +py_cobjects(#11067) +py_cobjects(#11068) +py_cobjects(#11069) +py_cobjects(#11070) +py_cobjects(#11071) +py_cobjects(#11072) +py_cobjects(#11073) +py_cobjects(#11074) +py_cobjects(#11075) +py_cobjects(#11076) +py_cobjects(#11077) +py_cobjects(#11078) +py_cobjects(#11079) +py_cobjects(#11816) +py_cobjects(#11080) +py_cobjects(#11081) +py_cobjects(#11082) +py_cobjects(#11083) +py_cobjects(#11084) +py_cobjects(#11085) +py_cobjects(#11086) +py_cobjects(#11817) +py_cobjects(#11087) +py_cobjects(#11088) +py_cobjects(#11818) +py_cobjects(#11089) +py_cobjects(#11090) +py_cobjects(#11091) +py_cobjects(#11819) +py_cobjects(#11092) +py_cobjects(#11820) +py_cobjects(#11093) +py_cobjects(#11094) +py_cobjects(#11095) +py_cobjects(#11096) +py_cobjects(#11822) +py_cobjects(#11097) +py_cobjects(#11098) +py_cobjects(#11823) +py_cobjects(#11099) +py_cobjects(#11100) +py_cobjects(#11101) +py_cobjects(#11102) +py_cobjects(#11103) +py_cobjects(#11104) +py_cobjects(#11106) +py_cobjects(#11824) +py_cobjects(#11107) +py_cobjects(#11108) +py_cobjects(#11109) +py_cobjects(#11110) +py_cobjects(#11111) +py_cobjects(#11112) +py_cobjects(#11113) +py_cobjects(#11114) +py_cobjects(#11115) +py_cobjects(#11116) +py_cobjects(#11117) +py_cobjects(#11118) +py_cobjects(#11826) +py_cobjects(#11119) +py_cobjects(#11120) +py_cobjects(#11121) +py_cobjects(#11122) +py_cobjects(#11123) +py_cobjects(#11124) +py_cobjects(#11828) +py_cobjects(#11833) +py_cobjects(#11834) +py_cobjects(#11835) +py_cobjects(#11836) +py_cobjects(#11837) +py_cobjects(#11838) +py_cobjects(#11839) +py_cobjects(#11840) +py_cobjects(#11841) +py_cobjects(#11842) +py_cobjects(#11843) +py_cobjects(#11844) +py_cobjects(#11845) +py_cobjects(#11846) +py_cobjects(#11847) +py_cobjects(#11848) +py_cobjects(#11849) +py_cobjects(#11850) +py_cobjects(#11851) +py_cobjects(#11852) +py_cobjects(#11854) +py_cobjects(#11125) +py_cobjects(#11126) +py_cobjects(#11856) +py_cobjects(#11858) +py_cobjects(#11859) +py_cobjects(#11860) +py_cobjects(#11127) +py_cobjects(#11128) +py_cobjects(#11129) +py_cobjects(#11862) +py_cobjects(#11863) +py_cobjects(#11864) +py_cobjects(#11865) +py_cobjects(#11866) +py_cobjects(#11130) +py_cobjects(#11868) +py_cobjects(#11869) +py_cobjects(#11871) +py_cobjects(#11872) +py_cobjects(#11131) +py_cobjects(#11132) +py_cobjects(#11133) +py_cobjects(#11873) +py_cobjects(#11874) +py_cobjects(#11134) +py_cobjects(#11135) +py_cobjects(#11875) +py_cobjects(#11136) +py_cobjects(#11876) +py_cobjects(#11877) +py_cobjects(#11878) +py_cobjects(#11137) +py_cobjects(#11138) +py_cobjects(#11139) +py_cobjects(#11140) +py_cobjects(#11141) +py_cobjects(#11143) +py_cobjects(#11144) +py_cobjects(#11145) +py_cobjects(#11146) +py_cobjects(#11147) +py_cobjects(#11148) +py_cobjects(#11149) +py_cobjects(#11150) +py_cobjects(#11151) +py_cobjects(#11152) +py_cobjects(#11153) +py_cobjects(#11887) +py_cobjects(#11154) +py_cobjects(#11155) +py_cobjects(#11156) +py_cobjects(#11157) +py_cobjects(#11158) +py_cobjects(#11159) +py_cobjects(#11160) +py_cobjects(#11161) +py_cobjects(#11162) +py_cobjects(#11163) +py_cobjects(#11164) +py_cobjects(#11165) +py_cobjects(#11166) +py_cobjects(#11167) +py_cobjects(#11168) +py_cobjects(#11169) +py_cobjects(#11170) +py_cobjects(#11171) +py_cobjects(#11172) +py_cobjects(#11899) +py_cobjects(#11173) +py_cobjects(#11174) +py_cobjects(#11175) +py_cobjects(#11176) +py_cobjects(#11177) +py_cobjects(#11178) +py_cobjects(#11179) +py_cobjects(#11180) +py_cobjects(#11181) +py_cobjects(#11182) +py_cobjects(#11183) +py_cobjects(#11184) +py_cobjects(#11185) +py_cobjects(#11186) +py_cobjects(#11187) +py_cobjects(#11188) +py_cobjects(#11189) +py_cobjects(#11190) +py_cobjects(#11900) +py_cobjects(#11191) +py_cobjects(#11192) +py_cobjects(#11193) +py_cobjects(#11901) +py_cobjects(#11194) +py_cobjects(#11195) +py_cobjects(#11196) +py_cobjects(#11197) +py_cobjects(#11198) +py_cobjects(#11199) +py_cobjects(#11200) +py_cobjects(#11201) +py_cobjects(#11202) +py_cobjects(#11203) +py_cobjects(#11204) +py_cobjects(#11205) +py_cobjects(#11206) +py_cobjects(#11207) +py_cobjects(#11208) +py_cobjects(#11209) +py_cobjects(#11210) +py_cobjects(#11211) +py_cobjects(#11212) +py_cobjects(#11213) +py_cobjects(#11214) +py_cobjects(#11215) +py_cobjects(#11216) +py_cobjects(#11217) +py_cobjects(#11218) +py_cobjects(#11219) +py_cobjects(#11220) +py_cobjects(#11221) +py_cobjects(#11902) +py_cobjects(#11222) +py_cobjects(#11223) +py_cobjects(#11224) +py_cobjects(#11225) +py_cobjects(#11226) +py_cobjects(#11227) +py_cobjects(#11228) +py_cobjects(#11229) +py_cobjects(#11230) +py_cobjects(#11231) +py_cobjects(#11232) +py_cobjects(#11233) +py_cobjects(#11234) +py_cobjects(#11235) +py_cobjects(#11236) +py_cobjects(#11237) +py_cobjects(#11238) +py_cobjects(#11239) +py_cobjects(#11240) +py_cobjects(#11241) +py_cobjects(#11242) +py_cobjects(#11243) +py_cobjects(#11244) +py_cobjects(#11245) +py_cobjects(#11246) +py_cobjects(#11247) +py_cobjects(#11248) +py_cobjects(#11249) +py_cobjects(#11908) +py_cobjects(#11909) +py_cobjects(#11250) +py_cobjects(#11251) +py_cobjects(#11252) +py_cobjects(#11253) +py_cobjects(#11254) +py_cobjects(#11255) +py_cobjects(#11256) +py_cobjects(#11257) +py_cobjects(#11258) +py_cobjects(#11913) +py_cobjects(#11259) +py_cobjects(#11914) +py_cobjects(#11915) +py_cobjects(#11916) +py_cobjects(#11260) +py_cobjects(#11917) +py_cobjects(#11918) +py_cobjects(#11919) +py_cobjects(#11261) +py_cobjects(#11920) +py_cobjects(#11262) +py_cobjects(#11263) +py_cobjects(#11264) +py_cobjects(#11265) +py_cobjects(#11266) +py_cobjects(#11267) +py_cobjects(#11268) +py_cobjects(#11269) +py_cobjects(#11270) +py_cobjects(#11271) +py_cobjects(#11272) +py_cobjects(#11273) +py_cobjects(#11274) +py_cobjects(#11275) +py_cobjects(#11277) +py_cobjects(#11278) +py_cobjects(#11279) +py_cobjects(#11280) +py_cobjects(#11924) +py_cobjects(#11281) +py_cobjects(#11282) +py_cobjects(#11283) +py_cobjects(#11284) +py_cobjects(#11285) +py_cobjects(#11286) +py_cobjects(#11287) +py_cobjects(#11288) +py_cobjects(#11289) +py_cobjects(#11290) +py_cobjects(#11291) +py_cobjects(#11292) +py_cobjects(#11293) +py_cobjects(#11294) +py_cobjects(#11295) +py_cobjects(#11296) +py_cobjects(#11297) +py_cobjects(#11298) +py_cobjects(#11299) +py_cobjects(#11300) +py_cobjects(#11301) +py_cobjects(#11302) +py_cobjects(#11303) +py_cobjects(#11304) +py_cobjects(#11305) +py_cobjects(#11306) +py_cobjects(#11307) +py_cobjects(#11308) +py_cobjects(#11309) +py_cobjects(#11310) +py_cobjects(#11311) +py_cobjects(#11312) +py_cobjects(#11313) +py_cobjects(#11314) +py_cobjects(#11315) +py_cobjects(#11316) +py_cobjects(#11317) +py_cobjects(#11318) +py_cobjects(#11319) +py_cobjects(#11320) +py_cobjects(#11321) +py_cobjects(#11322) +py_cobjects(#11323) +py_cobjects(#11324) +py_cobjects(#11325) +py_cobjects(#11326) +py_cobjects(#11327) +py_cobjects(#11328) +py_cobjects(#11330) +py_cobjects(#11331) +py_cobjects(#11332) +py_cobjects(#11333) +py_cobjects(#11334) +py_cobjects(#11335) +py_cobjects(#11926) +py_cobjects(#11336) +py_cobjects(#11337) +py_cobjects(#11338) +py_cobjects(#11339) +py_cobjects(#11340) +py_cobjects(#11341) +py_cobjects(#11342) +py_cobjects(#11343) +py_cobjects(#11344) +py_cobjects(#11345) +py_cobjects(#11346) +py_cobjects(#11347) +py_cobjects(#11348) +py_cobjects(#11349) +py_cobjects(#11927) +py_cobjects(#11350) +py_cobjects(#11928) +py_cobjects(#11930) +py_cobjects(#11931) +py_cobjects(#11932) +py_cobjects(#11933) +py_cobjects(#11934) +py_cobjects(#11936) +py_cobjects(#11937) +py_cobjects(#11938) +py_cobjects(#11940) +py_cobjects(#11351) +py_cobjects(#11352) +py_cobjects(#11353) +py_cobjects(#11354) +py_cobjects(#11355) +py_cobjects(#11356) +py_cobjects(#11357) +py_cobjects(#11358) +py_cobjects(#11359) +py_cobjects(#11360) +py_cobjects(#11944) +py_cobjects(#11361) +py_cobjects(#11362) +py_cobjects(#11363) +py_cobjects(#11364) +py_cobjects(#11365) +py_cobjects(#11946) +py_cobjects(#11947) +py_cobjects(#11366) +py_cobjects(#11367) +py_cobjects(#11948) +py_cobjects(#11368) +py_cobjects(#11949) +py_cobjects(#11369) +py_cobjects(#11370) +py_cobjects(#11371) +py_cobjects(#11372) +py_cobjects(#11373) +py_cobjects(#11374) +py_cobjects(#11375) +py_cobjects(#11951) +py_cobjects(#11376) +py_cobjects(#11377) +py_cobjects(#11378) +py_cobjects(#11952) +py_cobjects(#11379) +py_cobjects(#11380) +py_cobjects(#11381) +py_cobjects(#11382) +py_cobjects(#11383) +py_cobjects(#11384) +py_cobjects(#11385) +py_cobjects(#11386) +py_cobjects(#11387) +py_cobjects(#11388) +py_cobjects(#11389) +py_cobjects(#11390) +py_cobjects(#11391) +py_cobjects(#11392) +py_cobjects(#11393) +py_cobjects(#11394) +py_cobjects(#11395) +py_cobjects(#11396) +py_cobjects(#11397) +py_cobjects(#11398) +py_cobjects(#11399) +py_cobjects(#11400) +py_cobjects(#11401) +py_cobjects(#11402) +py_cobjects(#11403) +py_cobjects(#11404) +py_cobjects(#11405) +py_cobjects(#11406) +py_cobjects(#11407) +py_cobjects(#11408) +py_cobjects(#11409) +py_cobjects(#11410) +py_cobjects(#11411) +py_cobjects(#11412) +py_cobjects(#11413) +py_cobjects(#11414) +py_cobjects(#11415) +py_cobjects(#11416) +py_cobjects(#11417) +py_cobjects(#11418) +py_cobjects(#11419) +py_cobjects(#11420) +py_cobjects(#11421) +py_cobjects(#11422) +py_cobjects(#11423) +py_cobjects(#11424) +py_cobjects(#11425) +py_cobjects(#11426) +py_cobjects(#11427) +py_cobjects(#11428) +py_cobjects(#11429) +py_cobjects(#11430) +py_cobjects(#11431) +py_cobjects(#11432) +py_cobjects(#11433) +py_cobjects(#11434) +py_cobjects(#11954) +py_cobjects(#11435) +py_cobjects(#11436) +py_cobjects(#11437) +py_cobjects(#11438) +py_cobjects(#11439) +py_cobjects(#11440) +py_cobjects(#11441) +py_cobjects(#11442) +py_cobjects(#11443) +py_cobjects(#11444) +py_cobjects(#11445) +py_cobjects(#11446) +py_cobjects(#11447) +py_cobjects(#11448) +py_cobjects(#11449) +py_cobjects(#11450) +py_cobjects(#11451) +py_cobjects(#11452) +py_cobjects(#11453) +py_cobjects(#11454) +py_cobjects(#11455) +py_cobjects(#11456) +py_cobjects(#11457) +py_cobjects(#11957) +py_cobjects(#11458) +py_cobjects(#11459) +py_cobjects(#11958) +py_cobjects(#11959) +py_cobjects(#11960) +py_cobjects(#11961) +py_cobjects(#11962) +py_cobjects(#11460) +py_cobjects(#11963) +py_cobjects(#11461) +py_cobjects(#11462) +py_cobjects(#11463) +py_cobjects(#11964) +py_cobjects(#11965) +py_cobjects(#11966) +py_cobjects(#11464) +py_cobjects(#11465) +py_cobjects(#11967) +py_cobjects(#11968) +py_cobjects(#11466) +py_cobjects(#11467) +py_cobjects(#11969) +py_cobjects(#11970) +py_cobjects(#11971) +py_cobjects(#11972) +py_cobjects(#11468) +py_cobjects(#11469) +py_cobjects(#11470) +py_cobjects(#11471) +py_cobjects(#11472) +py_cobjects(#11473) +py_cobjects(#11474) +py_cobjects(#11475) +py_cobjects(#11476) +py_cobjects(#11477) +py_cobjects(#11478) +py_cobjects(#11479) +py_cobjects(#11480) +py_cobjects(#11973) +py_cobjects(#11974) +py_cobjects(#11975) +py_cobjects(#11976) +py_cobjects(#11481) +py_cobjects(#11482) +py_cobjects(#11483) +py_cobjects(#11484) +py_cobjects(#11485) +py_cobjects(#11486) +py_cobjects(#11487) +py_cobjects(#11978) +py_cobjects(#11488) +py_cobjects(#11489) +py_cobjects(#11490) +py_cobjects(#11493) +py_cobjects(#11494) +py_cobjects(#11495) +py_cobjects(#11496) +py_cobjects(#11497) +py_cobjects(#11980) +py_cobjects(#11981) +py_cobjects(#11498) +py_cobjects(#11499) +py_cobjects(#11500) +py_cobjects(#11501) +py_cobjects(#11983) +py_cobjects(#11502) +py_cobjects(#11503) +py_cobjects(#11504) +py_cobjects(#11505) +py_cobjects(#11506) +py_cobject_sources(#11590, 1) +py_cobject_sources(#11593, 1) +py_cobject_sources(#11597, 1) +py_cobject_sources(#11599, 1) +py_cobject_sources(#10016, 1) +py_cobject_sources(#12116, 1) +py_cobject_sources(#10024, 1) +py_cobject_sources(#10018, 1) +py_cobject_sources(#10020, 1) +py_cobject_sources(#11601, 1) +py_cobject_sources(#10111, 1) +py_cobject_sources(#11602, 1) +py_cobject_sources(#11604, 1) +py_cobject_sources(#11603, 1) +py_cobject_sources(#10713, 1) +py_cobject_sources(#11609, 1) +py_cobject_sources(#10030, 1) +py_cobject_sources(#10647, 1) +py_cobject_sources(#10039, 1) +py_cobject_sources(#10723, 1) +py_cobject_sources(#10001, 1) +py_cobject_sources(#10226, 1) +py_cobject_sources(#10042, 1) +py_cobject_sources(#10037, 1) +py_cobject_sources(#11650, 1) +py_cobject_sources(#11507, 1) +py_cobject_sources(#10517, 1) +py_cobject_sources(#10046, 1) +py_cobject_sources(#11982, 1) +py_cobject_sources(#12117, 1) +py_cobject_sources(#10028, 1) +py_cobject_sources(#11651, 1) +py_cobject_sources(#11655, 1) +py_cobject_sources(#11942, 1) +py_cobject_sources(#11654, 1) +py_cobject_sources(#11276, 1) +py_cobject_sources(#11939, 1) +py_cobject_sources(#10062, 1) +py_cobject_sources(#11659, 1) +py_cobject_sources(#11661, 1) +py_cobject_sources(#11663, 1) +py_cobject_sources(#11665, 1) +py_cobject_sources(#11666, 1) +py_cobject_sources(#10868, 1) +py_cobject_sources(#11667, 1) +py_cobject_sources(#10124, 1) +py_cobject_sources(#11668, 1) +py_cobject_sources(#12118, 1) +py_cobject_sources(#12119, 1) +py_cobject_sources(#10081, 1) +py_cobject_sources(#10010, 1) +py_cobject_sources(#10169, 1) +py_cobject_sources(#10189, 1) +py_cobject_sources(#10191, 1) +py_cobject_sources(#11671, 1) +py_cobject_sources(#10208, 1) +py_cobject_sources(#12120, 1) +py_cobject_sources(#10005, 1) +py_cobject_sources(#12121, 1) +py_cobject_sources(#12122, 1) +py_cobject_sources(#12123, 1) +py_cobject_sources(#12124, 1) +py_cobject_sources(#11672, 1) +py_cobject_sources(#11673, 1) +py_cobject_sources(#11675, 1) +py_cobject_sources(#11677, 1) +py_cobject_sources(#10223, 1) +py_cobject_sources(#10249, 1) +py_cobject_sources(#11680, 1) +py_cobject_sources(#11684, 1) +py_cobject_sources(#11685, 1) +py_cobject_sources(#11697, 1) +py_cobject_sources(#11690, 1) +py_cobject_sources(#11703, 1) +py_cobject_sources(#11692, 1) +py_cobject_sources(#11704, 1) +py_cobject_sources(#11719, 1) +py_cobject_sources(#11731, 1) +py_cobject_sources(#12125, 1) +py_cobject_sources(#11732, 1) +py_cobject_sources(#10411, 1) +py_cobject_sources(#11736, 1) +py_cobject_sources(#11759, 1) +py_cobject_sources(#11768, 1) +py_cobject_sources(#11770, 1) +py_cobject_sources(#11738, 1) +py_cobject_sources(#11815, 1) +py_cobject_sources(#11757, 1) +py_cobject_sources(#11811, 1) +py_cobject_sources(#11775, 1) +py_cobject_sources(#11791, 1) +py_cobject_sources(#11800, 1) +py_cobject_sources(#11783, 1) +py_cobject_sources(#11745, 1) +py_cobject_sources(#11743, 1) +py_cobject_sources(#12126, 1) +py_cobject_sources(#12127, 1) +py_cobject_sources(#12128, 1) +py_cobject_sources(#12129, 1) +py_cobject_sources(#12130, 1) +py_cobject_sources(#12131, 1) +py_cobject_sources(#12132, 1) +py_cobject_sources(#12133, 1) +py_cobject_sources(#12134, 1) +py_cobject_sources(#10526, 1) +py_cobject_sources(#10528, 1) +py_cobject_sources(#11821, 1) +py_cobject_sources(#10531, 1) +py_cobject_sources(#11105, 1) +py_cobject_sources(#11825, 1) +py_cobject_sources(#11827, 1) +py_cobject_sources(#12135, 1) +py_cobject_sources(#12136, 1) +py_cobject_sources(#11855, 1) +py_cobject_sources(#11861, 1) +py_cobject_sources(#12137, 1) +py_cobject_sources(#11829, 1) +py_cobject_sources(#12138, 1) +py_cobject_sources(#11857, 1) +py_cobject_sources(#12139, 1) +py_cobject_sources(#12140, 1) +py_cobject_sources(#11830, 1) +py_cobject_sources(#11831, 1) +py_cobject_sources(#10542, 1) +py_cobject_sources(#11853, 1) +py_cobject_sources(#12141, 1) +py_cobject_sources(#11832, 1) +py_cobject_sources(#12142, 1) +py_cobject_sources(#12143, 1) +py_cobject_sources(#12144, 1) +py_cobject_sources(#11867, 1) +py_cobject_sources(#11870, 1) +py_cobject_sources(#11546, 1) +py_cobject_sources(#11879, 1) +py_cobject_sources(#11880, 1) +py_cobject_sources(#11881, 1) +py_cobject_sources(#11142, 1) +py_cobject_sources(#11882, 1) +py_cobject_sources(#11883, 1) +py_cobject_sources(#11884, 1) +py_cobject_sources(#11885, 1) +py_cobject_sources(#11886, 1) +py_cobject_sources(#11888, 1) +py_cobject_sources(#11889, 1) +py_cobject_sources(#11890, 1) +py_cobject_sources(#11891, 1) +py_cobject_sources(#11892, 1) +py_cobject_sources(#11893, 1) +py_cobject_sources(#11894, 1) +py_cobject_sources(#11895, 1) +py_cobject_sources(#10050, 1) +py_cobject_sources(#11896, 1) +py_cobject_sources(#11897, 1) +py_cobject_sources(#11898, 1) +py_cobject_sources(#10582, 1) +py_cobject_sources(#10584, 1) +py_cobject_sources(#10586, 1) +py_cobject_sources(#10886, 1) +py_cobject_sources(#11903, 1) +py_cobject_sources(#12145, 1) +py_cobject_sources(#11904, 1) +py_cobject_sources(#10626, 1) +py_cobject_sources(#10073, 1) +py_cobject_sources(#10074, 1) +py_cobject_sources(#12146, 1) +py_cobject_sources(#11905, 1) +py_cobject_sources(#11906, 1) +py_cobject_sources(#11907, 1) +py_cobject_sources(#10407, 1) +py_cobject_sources(#12147, 1) +py_cobject_sources(#11984, 1) +py_cobject_sources(#11935, 1) +py_cobject_sources(#11979, 1) +py_cobject_sources(#11985, 1) +py_cobject_sources(#12148, 1) +py_cobject_sources(#12149, 1) +py_cobject_sources(#11955, 1) +py_cobject_sources(#11923, 1) +py_cobject_sources(#11941, 1) +py_cobject_sources(#11910, 1) +py_cobject_sources(#11911, 1) +py_cobject_sources(#11912, 1) +py_cobject_sources(#11922, 1) +py_cobject_sources(#11921, 1) +py_cobject_sources(#12150, 1) +py_cobject_sources(#11956, 1) +py_cobject_sources(#10666, 1) +py_cobject_sources(#10667, 1) +py_cobject_sources(#11950, 1) +py_cobject_sources(#12151, 1) +py_cobject_sources(#12152, 1) +py_cobject_sources(#12153, 1) +py_cobject_sources(#12154, 1) +py_cobject_sources(#12155, 1) +py_cobject_sources(#11929, 1) +py_cobject_sources(#12156, 1) +py_cobject_sources(#12157, 1) +py_cobject_sources(#11925, 1) +py_cobject_sources(#11329, 1) +py_cobject_sources(#11953, 1) +py_cobject_sources(#11491, 1) +py_cobject_sources(#11492, 1) +py_cobject_sources(#12158, 1) +py_cobject_sources(#12159, 1) +py_cobject_sources(#12160, 1) +py_cobject_sources(#12161, 1) +py_cobject_sources(#12162, 1) +py_cobject_sources(#12163, 1) +py_cobject_sources(#11943, 1) +py_cobject_sources(#12164, 1) +py_cobject_sources(#12165, 1) +py_cobject_sources(#12166, 1) +py_cobject_sources(#12167, 1) +py_cobject_sources(#12168, 1) +py_cobject_sources(#12169, 1) +py_cobject_sources(#11945, 1) +py_cobject_sources(#12170, 1) +py_cobject_sources(#12171, 1) +py_cobject_sources(#12172, 1) +py_cobject_sources(#12173, 1) +py_cobject_sources(#12174, 1) +py_cobject_sources(#12175, 1) +py_cobject_sources(#12176, 1) +py_cobject_sources(#12177, 1) +py_cobject_sources(#12178, 1) +py_cobject_sources(#12179, 1) +py_cobject_sources(#12180, 1) +py_cobject_sources(#12181, 1) +py_cobject_sources(#12182, 1) +py_cobject_sources(#12183, 1) +py_cobject_sources(#12184, 1) +py_cobject_sources(#12185, 1) +py_cobject_sources(#12186, 1) +py_cobject_sources(#12187, 1) +py_cobject_sources(#12188, 1) +py_cobject_sources(#12189, 1) +py_cobject_sources(#12190, 1) +py_cobject_sources(#12191, 1) +py_cobject_sources(#12192, 1) +py_cobject_sources(#12193, 1) +py_cobject_sources(#12194, 1) +py_cobject_sources(#12195, 1) +py_cobject_sources(#12196, 1) +py_cobject_sources(#12197, 1) +py_cobject_sources(#12198, 1) +py_cobject_sources(#12199, 1) +py_cobject_sources(#12200, 1) +py_cobject_sources(#12201, 1) +py_cobject_sources(#12202, 1) +py_cobject_sources(#12203, 1) +py_cobject_sources(#12204, 1) +py_cobject_sources(#12205, 1) +py_cobject_sources(#12206, 1) +py_cobject_sources(#12207, 1) +py_cobject_sources(#12208, 1) +py_cobject_sources(#12209, 1) +py_cobject_sources(#12210, 1) +py_cobject_sources(#12211, 1) +py_cobject_sources(#12212, 1) +py_cobject_sources(#12213, 1) +py_cobject_sources(#12214, 1) +py_cobject_sources(#12215, 1) +py_cobject_sources(#12216, 1) +py_cobject_sources(#12217, 1) +py_cobject_sources(#12218, 1) +py_cobject_sources(#12219, 1) +py_cobject_sources(#12220, 1) +py_cobject_sources(#11977, 1) +py_cobject_sources(#12221, 1) +py_cobject_sources(#10678, 1) +py_cobject_sources(#11986, 1) +py_cobject_sources(#11987, 1) +py_cobject_sources(#12222, 1) +py_cobject_sources(#11988, 1) +py_cobject_sources(#11989, 1) +py_cobject_sources(#11990, 1) +py_cobject_sources(#11991, 1) +py_cobject_sources(#11992, 1) +py_cobject_sources(#11993, 1) +py_cobject_sources(#11994, 1) +py_cobject_sources(#12223, 1) +py_cobject_sources(#11995, 1) +py_cobject_sources(#11996, 1) +py_cobject_sources(#12224, 1) +py_cobject_sources(#11997, 1) +py_cobject_sources(#12225, 1) +py_cobject_sources(#11998, 1) +py_cobject_sources(#12226, 1) +py_cobject_sources(#12227, 1) +py_cobject_sources(#12228, 1) +py_cobject_sources(#12229, 1) +py_cobject_sources(#12230, 1) +py_cobject_sources(#11999, 1) +py_cobject_sources(#12000, 1) +py_cobject_sources(#12001, 1) +py_cobject_sources(#12002, 1) +py_cobject_sources(#12003, 1) +py_cobject_sources(#12004, 1) +py_cobject_sources(#12005, 1) +py_cobject_sources(#12006, 1) +py_cobject_sources(#12007, 1) +py_cobject_sources(#12008, 1) +py_cobject_sources(#12009, 1) +py_cobject_sources(#12231, 1) +py_cobject_sources(#12010, 1) +py_cobject_sources(#12232, 1) +py_cobject_sources(#12011, 1) +py_cobject_sources(#12012, 1) +py_cobject_sources(#12013, 1) +py_cobject_sources(#12014, 1) +py_cobject_sources(#12015, 1) +py_cobject_sources(#12016, 1) +py_cobject_sources(#12017, 1) +py_cobject_sources(#12018, 1) +py_cobject_sources(#12019, 1) +py_cobject_sources(#12020, 1) +py_cobject_sources(#12021, 1) +py_cobject_sources(#12022, 1) +py_cobject_sources(#12023, 1) +py_cobject_sources(#12233, 1) +py_cobject_sources(#12024, 1) +py_cobject_sources(#12025, 1) +py_cobject_sources(#12026, 1) +py_cobject_sources(#12027, 1) +py_cobject_sources(#12234, 1) +py_cobject_sources(#12028, 1) +py_cobject_sources(#12029, 1) +py_cobject_sources(#12030, 1) +py_cobject_sources(#12031, 1) +py_cobject_sources(#12032, 1) +py_cobject_sources(#12033, 1) +py_cobject_sources(#12034, 1) +py_cobject_sources(#12035, 1) +py_cobject_sources(#12036, 1) +py_cobject_sources(#12235, 1) +py_cobject_sources(#12037, 1) +py_cobject_sources(#12038, 1) +py_cobject_sources(#12039, 1) +py_cobject_sources(#12040, 1) +py_cobject_sources(#12041, 1) +py_cobject_sources(#12042, 1) +py_cobject_sources(#12043, 1) +py_cobject_sources(#12044, 1) +py_cobject_sources(#12045, 1) +py_cobject_sources(#12046, 1) +py_cobject_sources(#12047, 1) +py_cobject_sources(#12048, 1) +py_cobject_sources(#12049, 1) +py_cobject_sources(#12236, 1) +py_cobject_sources(#12237, 1) +py_cobject_sources(#12050, 1) +py_cobject_sources(#12238, 1) +py_cobject_sources(#12051, 1) +py_cobject_sources(#12052, 1) +py_cobject_sources(#12053, 1) +py_cobject_sources(#12054, 1) +py_cobject_sources(#12239, 1) +py_cobject_sources(#12240, 1) +py_cobject_sources(#12241, 1) +py_cobject_sources(#12242, 1) +py_cobject_sources(#12243, 1) +py_cobject_sources(#12244, 1) +py_cobject_sources(#12245, 1) +py_cobject_sources(#12246, 1) +py_cobject_sources(#12247, 1) +py_cobject_sources(#12248, 1) +py_cobject_sources(#12055, 1) +py_cobject_sources(#12056, 1) +py_cobject_sources(#12057, 1) +py_cobject_sources(#12058, 1) +py_cobject_sources(#12059, 1) +py_cobject_sources(#12249, 1) +py_cobject_sources(#12060, 1) +py_cobject_sources(#12061, 1) +py_cobject_sources(#12062, 1) +py_cobject_sources(#12063, 1) +py_cobject_sources(#12250, 1) +py_cobject_sources(#12064, 1) +py_cobject_sources(#12065, 1) +py_cobject_sources(#12066, 1) +py_cobject_sources(#12251, 1) +py_cobject_sources(#12067, 1) +py_cobject_sources(#12068, 1) +py_cobject_sources(#12069, 1) +py_cobject_sources(#12252, 1) +py_cobject_sources(#12253, 1) +py_cobject_sources(#12254, 1) +py_cobject_sources(#12070, 1) +py_cobject_sources(#12255, 1) +py_cobject_sources(#12071, 1) +py_cobject_sources(#12072, 1) +py_cobject_sources(#12256, 1) +py_cobject_sources(#12257, 1) +py_cobject_sources(#12073, 1) +py_cobject_sources(#12074, 1) +py_cobject_sources(#12075, 1) +py_cobject_sources(#12076, 1) +py_cobject_sources(#12077, 1) +py_cobject_sources(#12078, 1) +py_cobject_sources(#12079, 1) +py_cobject_sources(#12258, 1) +py_cobject_sources(#12259, 1) +py_cobject_sources(#12080, 1) +py_cobject_sources(#12260, 1) +py_cobject_sources(#12261, 1) +py_cobject_sources(#12262, 1) +py_cobject_sources(#12081, 1) +py_cobject_sources(#12082, 1) +py_cobject_sources(#12083, 1) +py_cobject_sources(#12263, 1) +py_cobject_sources(#12264, 1) +py_cobject_sources(#12084, 1) +py_cobject_sources(#12265, 1) +py_cobject_sources(#12085, 1) +py_cobject_sources(#12266, 1) +py_cobject_sources(#12086, 1) +py_cobject_sources(#12267, 1) +py_cobject_sources(#12087, 1) +py_cobject_sources(#12268, 1) +py_cobject_sources(#12088, 1) +py_cobject_sources(#12089, 1) +py_cobject_sources(#12269, 1) +py_cobject_sources(#12090, 1) +py_cobject_sources(#12091, 1) +py_cobject_sources(#12092, 1) +py_cobject_sources(#12093, 1) +py_cobject_sources(#12094, 1) +py_cobject_sources(#12095, 1) +py_cobject_sources(#12096, 1) +py_cobject_sources(#12097, 1) +py_cobject_sources(#12270, 1) +py_cobject_sources(#12271, 1) +py_cobject_sources(#12272, 1) +py_cobject_sources(#12098, 1) +py_cobject_sources(#12099, 1) +py_cobject_sources(#12273, 1) +py_cobject_sources(#12100, 1) +py_cobject_sources(#12274, 1) +py_cobject_sources(#12275, 1) +py_cobject_sources(#12101, 1) +py_cobject_sources(#12102, 1) +py_cobject_sources(#12103, 1) +py_cobject_sources(#12104, 1) +py_cobject_sources(#12276, 1) +py_cobject_sources(#12105, 1) +py_cobject_sources(#12106, 1) +py_cobject_sources(#12107, 1) +py_cobject_sources(#12108, 1) +py_cobject_sources(#12277, 1) +py_cobject_sources(#12109, 1) +py_cobject_sources(#12110, 1) +py_cobject_sources(#12111, 1) +py_cobject_sources(#12112, 1) +py_cobject_sources(#12113, 1) +py_cobject_sources(#12114, 1) +py_cobject_sources(#12115, 1) +py_cobject_sources(#10000, 1) +py_cobject_sources(#10002, 1) +py_cobject_sources(#10003, 1) +py_cobject_sources(#10004, 1) +py_cobject_sources(#10006, 1) +py_cobject_sources(#10007, 1) +py_cobject_sources(#12278, 1) +py_cobject_sources(#12279, 1) +py_cobject_sources(#12280, 1) +py_cobject_sources(#12281, 1) +py_cobject_sources(#10008, 1) +py_cobject_sources(#10009, 1) +py_cobject_sources(#12282, 1) +py_cobject_sources(#10011, 1) +py_cobject_sources(#10012, 1) +py_cobject_sources(#10013, 1) +py_cobject_sources(#10014, 1) +py_cobject_sources(#11508, 1) +py_cobject_sources(#10015, 1) +py_cobject_sources(#10017, 1) +py_cobject_sources(#10019, 1) +py_cobject_sources(#10021, 1) +py_cobject_sources(#10022, 1) +py_cobject_sources(#11509, 1) +py_cobject_sources(#10023, 1) +py_cobject_sources(#10025, 1) +py_cobject_sources(#10026, 1) +py_cobject_sources(#10027, 1) +py_cobject_sources(#10029, 1) +py_cobject_sources(#12283, 1) +py_cobject_sources(#12284, 1) +py_cobject_sources(#10031, 1) +py_cobject_sources(#10032, 1) +py_cobject_sources(#10033, 1) +py_cobject_sources(#10034, 1) +py_cobject_sources(#10035, 1) +py_cobject_sources(#10036, 1) +py_cobject_sources(#10038, 1) +py_cobject_sources(#10040, 1) +py_cobject_sources(#10041, 1) +py_cobject_sources(#10043, 1) +py_cobject_sources(#10044, 1) +py_cobject_sources(#10045, 1) +py_cobject_sources(#12285, 1) +py_cobject_sources(#10047, 1) +py_cobject_sources(#10048, 1) +py_cobject_sources(#10049, 1) +py_cobject_sources(#10051, 1) +py_cobject_sources(#10052, 1) +py_cobject_sources(#10053, 1) +py_cobject_sources(#10054, 1) +py_cobject_sources(#10055, 1) +py_cobject_sources(#10056, 1) +py_cobject_sources(#10057, 1) +py_cobject_sources(#10058, 1) +py_cobject_sources(#10059, 1) +py_cobject_sources(#10060, 1) +py_cobject_sources(#11510, 1) +py_cobject_sources(#11511, 1) +py_cobject_sources(#11512, 1) +py_cobject_sources(#11513, 1) +py_cobject_sources(#11514, 1) +py_cobject_sources(#11515, 1) +py_cobject_sources(#10061, 1) +py_cobject_sources(#10063, 1) +py_cobject_sources(#10064, 1) +py_cobject_sources(#10065, 1) +py_cobject_sources(#10066, 1) +py_cobject_sources(#10067, 1) +py_cobject_sources(#10068, 1) +py_cobject_sources(#10069, 1) +py_cobject_sources(#10070, 1) +py_cobject_sources(#12286, 1) +py_cobject_sources(#10071, 1) +py_cobject_sources(#10072, 1) +py_cobject_sources(#10075, 1) +py_cobject_sources(#10076, 1) +py_cobject_sources(#11516, 1) +py_cobject_sources(#10077, 1) +py_cobject_sources(#10078, 1) +py_cobject_sources(#10079, 1) +py_cobject_sources(#10080, 1) +py_cobject_sources(#10082, 1) +py_cobject_sources(#10083, 1) +py_cobject_sources(#10084, 1) +py_cobject_sources(#10085, 1) +py_cobject_sources(#10086, 1) +py_cobject_sources(#10087, 1) +py_cobject_sources(#10088, 1) +py_cobject_sources(#10089, 1) +py_cobject_sources(#10090, 1) +py_cobject_sources(#10091, 1) +py_cobject_sources(#10092, 1) +py_cobject_sources(#10093, 1) +py_cobject_sources(#10094, 1) +py_cobject_sources(#10095, 1) +py_cobject_sources(#10096, 1) +py_cobject_sources(#10097, 1) +py_cobject_sources(#10098, 1) +py_cobject_sources(#10099, 1) +py_cobject_sources(#10100, 1) +py_cobject_sources(#10101, 1) +py_cobject_sources(#10102, 1) +py_cobject_sources(#10103, 1) +py_cobject_sources(#10104, 1) +py_cobject_sources(#10105, 1) +py_cobject_sources(#10106, 1) +py_cobject_sources(#10107, 1) +py_cobject_sources(#10108, 1) +py_cobject_sources(#10109, 1) +py_cobject_sources(#10110, 1) +py_cobject_sources(#10112, 1) +py_cobject_sources(#10113, 1) +py_cobject_sources(#10114, 1) +py_cobject_sources(#10115, 1) +py_cobject_sources(#10116, 1) +py_cobject_sources(#10117, 1) +py_cobject_sources(#10118, 1) +py_cobject_sources(#10119, 1) +py_cobject_sources(#10120, 1) +py_cobject_sources(#10121, 1) +py_cobject_sources(#10122, 1) +py_cobject_sources(#10123, 1) +py_cobject_sources(#10125, 1) +py_cobject_sources(#12287, 1) +py_cobject_sources(#12288, 1) +py_cobject_sources(#10126, 1) +py_cobject_sources(#10127, 1) +py_cobject_sources(#10128, 1) +py_cobject_sources(#10129, 1) +py_cobject_sources(#10130, 1) +py_cobject_sources(#12289, 1) +py_cobject_sources(#12290, 1) +py_cobject_sources(#12291, 1) +py_cobject_sources(#10131, 1) +py_cobject_sources(#10132, 1) +py_cobject_sources(#10133, 1) +py_cobject_sources(#10134, 1) +py_cobject_sources(#10135, 1) +py_cobject_sources(#10136, 1) +py_cobject_sources(#10137, 1) +py_cobject_sources(#10138, 1) +py_cobject_sources(#10139, 1) +py_cobject_sources(#10140, 1) +py_cobject_sources(#10141, 1) +py_cobject_sources(#10142, 1) +py_cobject_sources(#10143, 1) +py_cobject_sources(#10144, 1) +py_cobject_sources(#10145, 1) +py_cobject_sources(#10146, 1) +py_cobject_sources(#10147, 1) +py_cobject_sources(#10148, 1) +py_cobject_sources(#10149, 1) +py_cobject_sources(#10150, 1) +py_cobject_sources(#10151, 1) +py_cobject_sources(#10152, 1) +py_cobject_sources(#10153, 1) +py_cobject_sources(#10154, 1) +py_cobject_sources(#10155, 1) +py_cobject_sources(#10156, 1) +py_cobject_sources(#10157, 1) +py_cobject_sources(#10158, 1) +py_cobject_sources(#10159, 1) +py_cobject_sources(#10160, 1) +py_cobject_sources(#10161, 1) +py_cobject_sources(#10162, 1) +py_cobject_sources(#10163, 1) +py_cobject_sources(#10164, 1) +py_cobject_sources(#10165, 1) +py_cobject_sources(#12292, 1) +py_cobject_sources(#10166, 1) +py_cobject_sources(#10167, 1) +py_cobject_sources(#12293, 1) +py_cobject_sources(#10168, 1) +py_cobject_sources(#10170, 1) +py_cobject_sources(#10171, 1) +py_cobject_sources(#10172, 1) +py_cobject_sources(#10173, 1) +py_cobject_sources(#10174, 1) +py_cobject_sources(#10175, 1) +py_cobject_sources(#10176, 1) +py_cobject_sources(#10177, 1) +py_cobject_sources(#10178, 1) +py_cobject_sources(#10179, 1) +py_cobject_sources(#10180, 1) +py_cobject_sources(#10181, 1) +py_cobject_sources(#10182, 1) +py_cobject_sources(#10183, 1) +py_cobject_sources(#10184, 1) +py_cobject_sources(#10185, 1) +py_cobject_sources(#10186, 1) +py_cobject_sources(#10187, 1) +py_cobject_sources(#10188, 1) +py_cobject_sources(#10190, 1) +py_cobject_sources(#10192, 1) +py_cobject_sources(#10193, 1) +py_cobject_sources(#10194, 1) +py_cobject_sources(#10195, 1) +py_cobject_sources(#10196, 1) +py_cobject_sources(#10197, 1) +py_cobject_sources(#10198, 1) +py_cobject_sources(#10199, 1) +py_cobject_sources(#10200, 1) +py_cobject_sources(#10201, 1) +py_cobject_sources(#10202, 1) +py_cobject_sources(#10203, 1) +py_cobject_sources(#10204, 1) +py_cobject_sources(#10205, 1) +py_cobject_sources(#10206, 1) +py_cobject_sources(#12294, 1) +py_cobject_sources(#12295, 1) +py_cobject_sources(#10207, 1) +py_cobject_sources(#10209, 1) +py_cobject_sources(#10210, 1) +py_cobject_sources(#10211, 1) +py_cobject_sources(#10212, 1) +py_cobject_sources(#10213, 1) +py_cobject_sources(#10214, 1) +py_cobject_sources(#10215, 1) +py_cobject_sources(#10216, 1) +py_cobject_sources(#10217, 1) +py_cobject_sources(#10218, 1) +py_cobject_sources(#10219, 1) +py_cobject_sources(#11517, 1) +py_cobject_sources(#12296, 1) +py_cobject_sources(#10220, 1) +py_cobject_sources(#10221, 1) +py_cobject_sources(#11518, 1) +py_cobject_sources(#11519, 1) +py_cobject_sources(#11520, 1) +py_cobject_sources(#10222, 1) +py_cobject_sources(#10224, 1) +py_cobject_sources(#10225, 1) +py_cobject_sources(#10227, 1) +py_cobject_sources(#10228, 1) +py_cobject_sources(#10229, 1) +py_cobject_sources(#10230, 1) +py_cobject_sources(#10231, 1) +py_cobject_sources(#10232, 1) +py_cobject_sources(#10233, 1) +py_cobject_sources(#10234, 1) +py_cobject_sources(#10235, 1) +py_cobject_sources(#10236, 1) +py_cobject_sources(#10237, 1) +py_cobject_sources(#10238, 1) +py_cobject_sources(#10239, 1) +py_cobject_sources(#10240, 1) +py_cobject_sources(#10241, 1) +py_cobject_sources(#10242, 1) +py_cobject_sources(#10243, 1) +py_cobject_sources(#10244, 1) +py_cobject_sources(#10245, 1) +py_cobject_sources(#10246, 1) +py_cobject_sources(#10247, 1) +py_cobject_sources(#10248, 1) +py_cobject_sources(#12297, 1) +py_cobject_sources(#10250, 1) +py_cobject_sources(#10251, 1) +py_cobject_sources(#10252, 1) +py_cobject_sources(#10253, 1) +py_cobject_sources(#10254, 1) +py_cobject_sources(#10255, 1) +py_cobject_sources(#10256, 1) +py_cobject_sources(#10257, 1) +py_cobject_sources(#10258, 1) +py_cobject_sources(#12298, 1) +py_cobject_sources(#12299, 1) +py_cobject_sources(#12300, 1) +py_cobject_sources(#10259, 1) +py_cobject_sources(#12301, 1) +py_cobject_sources(#10260, 1) +py_cobject_sources(#10261, 1) +py_cobject_sources(#10262, 1) +py_cobject_sources(#10263, 1) +py_cobject_sources(#12302, 1) +py_cobject_sources(#10264, 1) +py_cobject_sources(#10265, 1) +py_cobject_sources(#10266, 1) +py_cobject_sources(#10267, 1) +py_cobject_sources(#10268, 1) +py_cobject_sources(#10269, 1) +py_cobject_sources(#10270, 1) +py_cobject_sources(#10271, 1) +py_cobject_sources(#10272, 1) +py_cobject_sources(#10273, 1) +py_cobject_sources(#10274, 1) +py_cobject_sources(#10275, 1) +py_cobject_sources(#10276, 1) +py_cobject_sources(#10277, 1) +py_cobject_sources(#10278, 1) +py_cobject_sources(#10279, 1) +py_cobject_sources(#10280, 1) +py_cobject_sources(#10281, 1) +py_cobject_sources(#10282, 1) +py_cobject_sources(#12303, 1) +py_cobject_sources(#10283, 1) +py_cobject_sources(#10284, 1) +py_cobject_sources(#10285, 1) +py_cobject_sources(#10286, 1) +py_cobject_sources(#10287, 1) +py_cobject_sources(#10288, 1) +py_cobject_sources(#10289, 1) +py_cobject_sources(#10290, 1) +py_cobject_sources(#12304, 1) +py_cobject_sources(#10291, 1) +py_cobject_sources(#10292, 1) +py_cobject_sources(#10293, 1) +py_cobject_sources(#10294, 1) +py_cobject_sources(#12305, 1) +py_cobject_sources(#10295, 1) +py_cobject_sources(#10296, 1) +py_cobject_sources(#10297, 1) +py_cobject_sources(#12306, 1) +py_cobject_sources(#12307, 1) +py_cobject_sources(#12308, 1) +py_cobject_sources(#12309, 1) +py_cobject_sources(#10298, 1) +py_cobject_sources(#10299, 1) +py_cobject_sources(#10300, 1) +py_cobject_sources(#12310, 1) +py_cobject_sources(#10301, 1) +py_cobject_sources(#10302, 1) +py_cobject_sources(#10303, 1) +py_cobject_sources(#10304, 1) +py_cobject_sources(#10305, 1) +py_cobject_sources(#10306, 1) +py_cobject_sources(#10307, 1) +py_cobject_sources(#10308, 1) +py_cobject_sources(#10309, 1) +py_cobject_sources(#10310, 1) +py_cobject_sources(#10311, 1) +py_cobject_sources(#10312, 1) +py_cobject_sources(#10313, 1) +py_cobject_sources(#10314, 1) +py_cobject_sources(#10315, 1) +py_cobject_sources(#10316, 1) +py_cobject_sources(#10317, 1) +py_cobject_sources(#10318, 1) +py_cobject_sources(#10319, 1) +py_cobject_sources(#10320, 1) +py_cobject_sources(#10321, 1) +py_cobject_sources(#10322, 1) +py_cobject_sources(#10323, 1) +py_cobject_sources(#10324, 1) +py_cobject_sources(#10325, 1) +py_cobject_sources(#10326, 1) +py_cobject_sources(#10327, 1) +py_cobject_sources(#10328, 1) +py_cobject_sources(#10329, 1) +py_cobject_sources(#10330, 1) +py_cobject_sources(#10331, 1) +py_cobject_sources(#10332, 1) +py_cobject_sources(#10333, 1) +py_cobject_sources(#10334, 1) +py_cobject_sources(#10335, 1) +py_cobject_sources(#10336, 1) +py_cobject_sources(#10337, 1) +py_cobject_sources(#10338, 1) +py_cobject_sources(#10339, 1) +py_cobject_sources(#10340, 1) +py_cobject_sources(#10341, 1) +py_cobject_sources(#10342, 1) +py_cobject_sources(#10343, 1) +py_cobject_sources(#10344, 1) +py_cobject_sources(#10345, 1) +py_cobject_sources(#10346, 1) +py_cobject_sources(#10347, 1) +py_cobject_sources(#10348, 1) +py_cobject_sources(#10349, 1) +py_cobject_sources(#12311, 1) +py_cobject_sources(#10350, 1) +py_cobject_sources(#12312, 1) +py_cobject_sources(#10351, 1) +py_cobject_sources(#10352, 1) +py_cobject_sources(#10353, 1) +py_cobject_sources(#10354, 1) +py_cobject_sources(#12313, 1) +py_cobject_sources(#10355, 1) +py_cobject_sources(#10356, 1) +py_cobject_sources(#10357, 1) +py_cobject_sources(#10358, 1) +py_cobject_sources(#10359, 1) +py_cobject_sources(#10360, 1) +py_cobject_sources(#10361, 1) +py_cobject_sources(#10362, 1) +py_cobject_sources(#10363, 1) +py_cobject_sources(#10364, 1) +py_cobject_sources(#10365, 1) +py_cobject_sources(#10366, 1) +py_cobject_sources(#10367, 1) +py_cobject_sources(#10368, 1) +py_cobject_sources(#10369, 1) +py_cobject_sources(#10370, 1) +py_cobject_sources(#10371, 1) +py_cobject_sources(#10372, 1) +py_cobject_sources(#10373, 1) +py_cobject_sources(#10374, 1) +py_cobject_sources(#10375, 1) +py_cobject_sources(#10376, 1) +py_cobject_sources(#10377, 1) +py_cobject_sources(#10378, 1) +py_cobject_sources(#10379, 1) +py_cobject_sources(#10380, 1) +py_cobject_sources(#10381, 1) +py_cobject_sources(#12314, 1) +py_cobject_sources(#12315, 1) +py_cobject_sources(#10382, 1) +py_cobject_sources(#10383, 1) +py_cobject_sources(#10384, 1) +py_cobject_sources(#10385, 1) +py_cobject_sources(#12316, 1) +py_cobject_sources(#10386, 1) +py_cobject_sources(#10387, 1) +py_cobject_sources(#10388, 1) +py_cobject_sources(#10389, 1) +py_cobject_sources(#10390, 1) +py_cobject_sources(#10391, 1) +py_cobject_sources(#10392, 1) +py_cobject_sources(#12317, 1) +py_cobject_sources(#10393, 1) +py_cobject_sources(#10394, 1) +py_cobject_sources(#12318, 1) +py_cobject_sources(#12319, 1) +py_cobject_sources(#10395, 1) +py_cobject_sources(#10396, 1) +py_cobject_sources(#10397, 1) +py_cobject_sources(#10398, 1) +py_cobject_sources(#10399, 1) +py_cobject_sources(#10400, 1) +py_cobject_sources(#12320, 1) +py_cobject_sources(#11521, 1) +py_cobject_sources(#12321, 1) +py_cobject_sources(#10401, 1) +py_cobject_sources(#10402, 1) +py_cobject_sources(#10403, 1) +py_cobject_sources(#10404, 1) +py_cobject_sources(#12322, 1) +py_cobject_sources(#10405, 1) +py_cobject_sources(#10406, 1) +py_cobject_sources(#10408, 1) +py_cobject_sources(#12323, 1) +py_cobject_sources(#12324, 1) +py_cobject_sources(#10409, 1) +py_cobject_sources(#10410, 1) +py_cobject_sources(#12325, 1) +py_cobject_sources(#10412, 1) +py_cobject_sources(#10413, 1) +py_cobject_sources(#10414, 1) +py_cobject_sources(#10415, 1) +py_cobject_sources(#10416, 1) +py_cobject_sources(#12326, 1) +py_cobject_sources(#12327, 1) +py_cobject_sources(#11522, 1) +py_cobject_sources(#11523, 1) +py_cobject_sources(#12328, 1) +py_cobject_sources(#12329, 1) +py_cobject_sources(#12330, 1) +py_cobject_sources(#12331, 1) +py_cobject_sources(#12332, 1) +py_cobject_sources(#12333, 1) +py_cobject_sources(#12334, 1) +py_cobject_sources(#12335, 1) +py_cobject_sources(#12336, 1) +py_cobject_sources(#12337, 1) +py_cobject_sources(#12338, 1) +py_cobject_sources(#12339, 1) +py_cobject_sources(#11524, 1) +py_cobject_sources(#11525, 1) +py_cobject_sources(#11526, 1) +py_cobject_sources(#11527, 1) +py_cobject_sources(#11528, 1) +py_cobject_sources(#11529, 1) +py_cobject_sources(#11530, 1) +py_cobject_sources(#11531, 1) +py_cobject_sources(#11532, 1) +py_cobject_sources(#11533, 1) +py_cobject_sources(#12340, 1) +py_cobject_sources(#12341, 1) +py_cobject_sources(#12342, 1) +py_cobject_sources(#12343, 1) +py_cobject_sources(#10417, 1) +py_cobject_sources(#10418, 1) +py_cobject_sources(#12344, 1) +py_cobject_sources(#12345, 1) +py_cobject_sources(#12346, 1) +py_cobject_sources(#12347, 1) +py_cobject_sources(#12348, 1) +py_cobject_sources(#12349, 1) +py_cobject_sources(#12350, 1) +py_cobject_sources(#12351, 1) +py_cobject_sources(#12352, 1) +py_cobject_sources(#12353, 1) +py_cobject_sources(#12354, 1) +py_cobject_sources(#12355, 1) +py_cobject_sources(#12356, 1) +py_cobject_sources(#12357, 1) +py_cobject_sources(#12358, 1) +py_cobject_sources(#12359, 1) +py_cobject_sources(#12360, 1) +py_cobject_sources(#12361, 1) +py_cobject_sources(#12362, 1) +py_cobject_sources(#12363, 1) +py_cobject_sources(#12364, 1) +py_cobject_sources(#12365, 1) +py_cobject_sources(#12366, 1) +py_cobject_sources(#12367, 1) +py_cobject_sources(#12368, 1) +py_cobject_sources(#12369, 1) +py_cobject_sources(#12370, 1) +py_cobject_sources(#12371, 1) +py_cobject_sources(#12372, 1) +py_cobject_sources(#12373, 1) +py_cobject_sources(#12374, 1) +py_cobject_sources(#12375, 1) +py_cobject_sources(#12376, 1) +py_cobject_sources(#12377, 1) +py_cobject_sources(#10419, 1) +py_cobject_sources(#10420, 1) +py_cobject_sources(#10421, 1) +py_cobject_sources(#10422, 1) +py_cobject_sources(#12378, 1) +py_cobject_sources(#12379, 1) +py_cobject_sources(#12380, 1) +py_cobject_sources(#12381, 1) +py_cobject_sources(#12382, 1) +py_cobject_sources(#12383, 1) +py_cobject_sources(#12384, 1) +py_cobject_sources(#12385, 1) +py_cobject_sources(#12386, 1) +py_cobject_sources(#12387, 1) +py_cobject_sources(#12388, 1) +py_cobject_sources(#12389, 1) +py_cobject_sources(#12390, 1) +py_cobject_sources(#12391, 1) +py_cobject_sources(#12392, 1) +py_cobject_sources(#12393, 1) +py_cobject_sources(#10423, 1) +py_cobject_sources(#10424, 1) +py_cobject_sources(#10425, 1) +py_cobject_sources(#10426, 1) +py_cobject_sources(#10427, 1) +py_cobject_sources(#10428, 1) +py_cobject_sources(#12394, 1) +py_cobject_sources(#10429, 1) +py_cobject_sources(#10430, 1) +py_cobject_sources(#10431, 1) +py_cobject_sources(#10432, 1) +py_cobject_sources(#10433, 1) +py_cobject_sources(#10434, 1) +py_cobject_sources(#10435, 1) +py_cobject_sources(#10436, 1) +py_cobject_sources(#10437, 1) +py_cobject_sources(#10438, 1) +py_cobject_sources(#10439, 1) +py_cobject_sources(#10440, 1) +py_cobject_sources(#12395, 1) +py_cobject_sources(#12396, 1) +py_cobject_sources(#10441, 1) +py_cobject_sources(#10442, 1) +py_cobject_sources(#10443, 1) +py_cobject_sources(#10444, 1) +py_cobject_sources(#12397, 1) +py_cobject_sources(#10445, 1) +py_cobject_sources(#10446, 1) +py_cobject_sources(#10447, 1) +py_cobject_sources(#10448, 1) +py_cobject_sources(#12398, 1) +py_cobject_sources(#12399, 1) +py_cobject_sources(#10449, 1) +py_cobject_sources(#10450, 1) +py_cobject_sources(#10451, 1) +py_cobject_sources(#10452, 1) +py_cobject_sources(#10453, 1) +py_cobject_sources(#10454, 1) +py_cobject_sources(#10455, 1) +py_cobject_sources(#10456, 1) +py_cobject_sources(#10457, 1) +py_cobject_sources(#10458, 1) +py_cobject_sources(#10459, 1) +py_cobject_sources(#10460, 1) +py_cobject_sources(#10461, 1) +py_cobject_sources(#10462, 1) +py_cobject_sources(#10463, 1) +py_cobject_sources(#10464, 1) +py_cobject_sources(#10465, 1) +py_cobject_sources(#10466, 1) +py_cobject_sources(#10467, 1) +py_cobject_sources(#10468, 1) +py_cobject_sources(#10469, 1) +py_cobject_sources(#10470, 1) +py_cobject_sources(#10471, 1) +py_cobject_sources(#10472, 1) +py_cobject_sources(#10473, 1) +py_cobject_sources(#10474, 1) +py_cobject_sources(#10475, 1) +py_cobject_sources(#10476, 1) +py_cobject_sources(#10477, 1) +py_cobject_sources(#10478, 1) +py_cobject_sources(#10479, 1) +py_cobject_sources(#10480, 1) +py_cobject_sources(#10481, 1) +py_cobject_sources(#10482, 1) +py_cobject_sources(#10483, 1) +py_cobject_sources(#10484, 1) +py_cobject_sources(#10485, 1) +py_cobject_sources(#10486, 1) +py_cobject_sources(#10487, 1) +py_cobject_sources(#10488, 1) +py_cobject_sources(#10489, 1) +py_cobject_sources(#10490, 1) +py_cobject_sources(#10491, 1) +py_cobject_sources(#10492, 1) +py_cobject_sources(#10493, 1) +py_cobject_sources(#10494, 1) +py_cobject_sources(#10495, 1) +py_cobject_sources(#10496, 1) +py_cobject_sources(#10497, 1) +py_cobject_sources(#10498, 1) +py_cobject_sources(#10499, 1) +py_cobject_sources(#10500, 1) +py_cobject_sources(#12400, 1) +py_cobject_sources(#12401, 1) +py_cobject_sources(#10501, 1) +py_cobject_sources(#10502, 1) +py_cobject_sources(#10503, 1) +py_cobject_sources(#10504, 1) +py_cobject_sources(#10505, 1) +py_cobject_sources(#10506, 1) +py_cobject_sources(#12402, 1) +py_cobject_sources(#12403, 1) +py_cobject_sources(#10507, 1) +py_cobject_sources(#10508, 1) +py_cobject_sources(#10509, 1) +py_cobject_sources(#10510, 1) +py_cobject_sources(#10511, 1) +py_cobject_sources(#10512, 1) +py_cobject_sources(#10513, 1) +py_cobject_sources(#10514, 1) +py_cobject_sources(#10515, 1) +py_cobject_sources(#10516, 1) +py_cobject_sources(#10518, 1) +py_cobject_sources(#12404, 1) +py_cobject_sources(#10519, 1) +py_cobject_sources(#10520, 1) +py_cobject_sources(#10521, 1) +py_cobject_sources(#10522, 1) +py_cobject_sources(#10523, 1) +py_cobject_sources(#11534, 1) +py_cobject_sources(#10524, 1) +py_cobject_sources(#10525, 1) +py_cobject_sources(#10527, 1) +py_cobject_sources(#12405, 1) +py_cobject_sources(#10529, 1) +py_cobject_sources(#10530, 1) +py_cobject_sources(#10532, 1) +py_cobject_sources(#10533, 1) +py_cobject_sources(#11535, 1) +py_cobject_sources(#11536, 1) +py_cobject_sources(#11537, 1) +py_cobject_sources(#10534, 1) +py_cobject_sources(#10535, 1) +py_cobject_sources(#10536, 1) +py_cobject_sources(#10537, 1) +py_cobject_sources(#10538, 1) +py_cobject_sources(#10539, 1) +py_cobject_sources(#10540, 1) +py_cobject_sources(#10541, 1) +py_cobject_sources(#10543, 1) +py_cobject_sources(#10544, 1) +py_cobject_sources(#10545, 1) +py_cobject_sources(#11538, 1) +py_cobject_sources(#11539, 1) +py_cobject_sources(#11540, 1) +py_cobject_sources(#10546, 1) +py_cobject_sources(#10547, 1) +py_cobject_sources(#11541, 1) +py_cobject_sources(#12406, 1) +py_cobject_sources(#10548, 1) +py_cobject_sources(#11542, 1) +py_cobject_sources(#10549, 1) +py_cobject_sources(#10550, 1) +py_cobject_sources(#11543, 1) +py_cobject_sources(#10551, 1) +py_cobject_sources(#11544, 1) +py_cobject_sources(#11545, 1) +py_cobject_sources(#10552, 1) +py_cobject_sources(#10553, 1) +py_cobject_sources(#10554, 1) +py_cobject_sources(#11547, 1) +py_cobject_sources(#11548, 1) +py_cobject_sources(#10555, 1) +py_cobject_sources(#10556, 1) +py_cobject_sources(#11549, 1) +py_cobject_sources(#10557, 1) +py_cobject_sources(#11550, 1) +py_cobject_sources(#11551, 1) +py_cobject_sources(#11552, 1) +py_cobject_sources(#10558, 1) +py_cobject_sources(#11553, 1) +py_cobject_sources(#11554, 1) +py_cobject_sources(#11555, 1) +py_cobject_sources(#11556, 1) +py_cobject_sources(#11557, 1) +py_cobject_sources(#10559, 1) +py_cobject_sources(#11558, 1) +py_cobject_sources(#11559, 1) +py_cobject_sources(#10560, 1) +py_cobject_sources(#11560, 1) +py_cobject_sources(#11561, 1) +py_cobject_sources(#10561, 1) +py_cobject_sources(#10562, 1) +py_cobject_sources(#10563, 1) +py_cobject_sources(#11562, 1) +py_cobject_sources(#11563, 1) +py_cobject_sources(#11564, 1) +py_cobject_sources(#10564, 1) +py_cobject_sources(#11565, 1) +py_cobject_sources(#10565, 1) +py_cobject_sources(#10566, 1) +py_cobject_sources(#10567, 1) +py_cobject_sources(#10568, 1) +py_cobject_sources(#10569, 1) +py_cobject_sources(#10570, 1) +py_cobject_sources(#10571, 1) +py_cobject_sources(#10572, 1) +py_cobject_sources(#10573, 1) +py_cobject_sources(#10574, 1) +py_cobject_sources(#10575, 1) +py_cobject_sources(#11566, 1) +py_cobject_sources(#10576, 1) +py_cobject_sources(#10577, 1) +py_cobject_sources(#10578, 1) +py_cobject_sources(#10579, 1) +py_cobject_sources(#10580, 1) +py_cobject_sources(#11567, 1) +py_cobject_sources(#11568, 1) +py_cobject_sources(#11569, 1) +py_cobject_sources(#11570, 1) +py_cobject_sources(#11571, 1) +py_cobject_sources(#11572, 1) +py_cobject_sources(#10581, 1) +py_cobject_sources(#10583, 1) +py_cobject_sources(#10585, 1) +py_cobject_sources(#10587, 1) +py_cobject_sources(#11573, 1) +py_cobject_sources(#10588, 1) +py_cobject_sources(#10589, 1) +py_cobject_sources(#10590, 1) +py_cobject_sources(#10591, 1) +py_cobject_sources(#10592, 1) +py_cobject_sources(#11574, 1) +py_cobject_sources(#10593, 1) +py_cobject_sources(#10594, 1) +py_cobject_sources(#10595, 1) +py_cobject_sources(#10596, 1) +py_cobject_sources(#10597, 1) +py_cobject_sources(#10598, 1) +py_cobject_sources(#10599, 1) +py_cobject_sources(#10600, 1) +py_cobject_sources(#11575, 1) +py_cobject_sources(#10601, 1) +py_cobject_sources(#11576, 1) +py_cobject_sources(#10602, 1) +py_cobject_sources(#10603, 1) +py_cobject_sources(#10604, 1) +py_cobject_sources(#10605, 1) +py_cobject_sources(#10606, 1) +py_cobject_sources(#10607, 1) +py_cobject_sources(#10608, 1) +py_cobject_sources(#10609, 1) +py_cobject_sources(#10610, 1) +py_cobject_sources(#11577, 1) +py_cobject_sources(#10611, 1) +py_cobject_sources(#10612, 1) +py_cobject_sources(#10613, 1) +py_cobject_sources(#10614, 1) +py_cobject_sources(#10615, 1) +py_cobject_sources(#10616, 1) +py_cobject_sources(#10617, 1) +py_cobject_sources(#10618, 1) +py_cobject_sources(#10619, 1) +py_cobject_sources(#10620, 1) +py_cobject_sources(#10621, 1) +py_cobject_sources(#12407, 1) +py_cobject_sources(#12408, 1) +py_cobject_sources(#10622, 1) +py_cobject_sources(#12409, 1) +py_cobject_sources(#10623, 1) +py_cobject_sources(#10624, 1) +py_cobject_sources(#11578, 1) +py_cobject_sources(#10625, 1) +py_cobject_sources(#12410, 1) +py_cobject_sources(#10627, 1) +py_cobject_sources(#10628, 1) +py_cobject_sources(#10629, 1) +py_cobject_sources(#10630, 1) +py_cobject_sources(#10631, 1) +py_cobject_sources(#10632, 1) +py_cobject_sources(#10633, 1) +py_cobject_sources(#10634, 1) +py_cobject_sources(#10635, 1) +py_cobject_sources(#10636, 1) +py_cobject_sources(#11579, 1) +py_cobject_sources(#10637, 1) +py_cobject_sources(#12411, 1) +py_cobject_sources(#10638, 1) +py_cobject_sources(#12412, 1) +py_cobject_sources(#10639, 1) +py_cobject_sources(#10640, 1) +py_cobject_sources(#10641, 1) +py_cobject_sources(#10642, 1) +py_cobject_sources(#10643, 1) +py_cobject_sources(#10644, 1) +py_cobject_sources(#10645, 1) +py_cobject_sources(#10646, 1) +py_cobject_sources(#10648, 1) +py_cobject_sources(#10649, 1) +py_cobject_sources(#10650, 1) +py_cobject_sources(#10651, 1) +py_cobject_sources(#10652, 1) +py_cobject_sources(#12413, 1) +py_cobject_sources(#11580, 1) +py_cobject_sources(#11581, 1) +py_cobject_sources(#10653, 1) +py_cobject_sources(#10654, 1) +py_cobject_sources(#11582, 1) +py_cobject_sources(#11583, 1) +py_cobject_sources(#10655, 1) +py_cobject_sources(#11584, 1) +py_cobject_sources(#10656, 1) +py_cobject_sources(#10657, 1) +py_cobject_sources(#12414, 1) +py_cobject_sources(#12415, 1) +py_cobject_sources(#12416, 1) +py_cobject_sources(#10658, 1) +py_cobject_sources(#11585, 1) +py_cobject_sources(#12417, 1) +py_cobject_sources(#10659, 1) +py_cobject_sources(#10660, 1) +py_cobject_sources(#10661, 1) +py_cobject_sources(#11586, 1) +py_cobject_sources(#10662, 1) +py_cobject_sources(#12418, 1) +py_cobject_sources(#10663, 1) +py_cobject_sources(#10664, 1) +py_cobject_sources(#10665, 1) +py_cobject_sources(#10668, 1) +py_cobject_sources(#10669, 1) +py_cobject_sources(#12419, 1) +py_cobject_sources(#12420, 1) +py_cobject_sources(#12421, 1) +py_cobject_sources(#11587, 1) +py_cobject_sources(#10670, 1) +py_cobject_sources(#12422, 1) +py_cobject_sources(#10671, 1) +py_cobject_sources(#11588, 1) +py_cobject_sources(#11589, 1) +py_cobject_sources(#10672, 1) +py_cobject_sources(#10673, 1) +py_cobject_sources(#10674, 1) +py_cobject_sources(#10675, 1) +py_cobject_sources(#10676, 1) +py_cobject_sources(#10677, 1) +py_cobject_sources(#10679, 1) +py_cobject_sources(#10680, 1) +py_cobject_sources(#10681, 1) +py_cobject_sources(#10682, 1) +py_cobject_sources(#10683, 1) +py_cobject_sources(#10684, 1) +py_cobject_sources(#10685, 1) +py_cobject_sources(#10686, 1) +py_cobject_sources(#11591, 1) +py_cobject_sources(#10687, 1) +py_cobject_sources(#11592, 1) +py_cobject_sources(#11594, 1) +py_cobject_sources(#11595, 1) +py_cobject_sources(#11596, 1) +py_cobject_sources(#11598, 1) +py_cobject_sources(#10688, 1) +py_cobject_sources(#10689, 1) +py_cobject_sources(#10690, 1) +py_cobject_sources(#10691, 1) +py_cobject_sources(#10692, 1) +py_cobject_sources(#11600, 1) +py_cobject_sources(#10693, 1) +py_cobject_sources(#10694, 1) +py_cobject_sources(#10695, 1) +py_cobject_sources(#10696, 1) +py_cobject_sources(#10697, 1) +py_cobject_sources(#10698, 1) +py_cobject_sources(#10699, 1) +py_cobject_sources(#10700, 1) +py_cobject_sources(#10701, 1) +py_cobject_sources(#10702, 1) +py_cobject_sources(#10703, 1) +py_cobject_sources(#10704, 1) +py_cobject_sources(#10705, 1) +py_cobject_sources(#10706, 1) +py_cobject_sources(#11605, 1) +py_cobject_sources(#10707, 1) +py_cobject_sources(#10708, 1) +py_cobject_sources(#10709, 1) +py_cobject_sources(#11606, 1) +py_cobject_sources(#11607, 1) +py_cobject_sources(#10710, 1) +py_cobject_sources(#10711, 1) +py_cobject_sources(#10712, 1) +py_cobject_sources(#10714, 1) +py_cobject_sources(#10715, 1) +py_cobject_sources(#10716, 1) +py_cobject_sources(#11608, 1) +py_cobject_sources(#11610, 1) +py_cobject_sources(#11611, 1) +py_cobject_sources(#10717, 1) +py_cobject_sources(#10718, 1) +py_cobject_sources(#11612, 1) +py_cobject_sources(#11613, 1) +py_cobject_sources(#10719, 1) +py_cobject_sources(#10720, 1) +py_cobject_sources(#10721, 1) +py_cobject_sources(#10722, 1) +py_cobject_sources(#10724, 1) +py_cobject_sources(#10725, 1) +py_cobject_sources(#10726, 1) +py_cobject_sources(#10727, 1) +py_cobject_sources(#10728, 1) +py_cobject_sources(#10729, 1) +py_cobject_sources(#10730, 1) +py_cobject_sources(#10731, 1) +py_cobject_sources(#10732, 1) +py_cobject_sources(#10733, 1) +py_cobject_sources(#10734, 1) +py_cobject_sources(#10735, 1) +py_cobject_sources(#10736, 1) +py_cobject_sources(#10737, 1) +py_cobject_sources(#10738, 1) +py_cobject_sources(#10739, 1) +py_cobject_sources(#10740, 1) +py_cobject_sources(#10741, 1) +py_cobject_sources(#10742, 1) +py_cobject_sources(#10743, 1) +py_cobject_sources(#10744, 1) +py_cobject_sources(#10745, 1) +py_cobject_sources(#10746, 1) +py_cobject_sources(#10747, 1) +py_cobject_sources(#10748, 1) +py_cobject_sources(#10749, 1) +py_cobject_sources(#10750, 1) +py_cobject_sources(#10751, 1) +py_cobject_sources(#10752, 1) +py_cobject_sources(#10753, 1) +py_cobject_sources(#10754, 1) +py_cobject_sources(#10755, 1) +py_cobject_sources(#10756, 1) +py_cobject_sources(#11614, 1) +py_cobject_sources(#11615, 1) +py_cobject_sources(#11616, 1) +py_cobject_sources(#11617, 1) +py_cobject_sources(#11618, 1) +py_cobject_sources(#11619, 1) +py_cobject_sources(#11620, 1) +py_cobject_sources(#11621, 1) +py_cobject_sources(#11622, 1) +py_cobject_sources(#11623, 1) +py_cobject_sources(#10757, 1) +py_cobject_sources(#11624, 1) +py_cobject_sources(#10758, 1) +py_cobject_sources(#11625, 1) +py_cobject_sources(#10759, 1) +py_cobject_sources(#10760, 1) +py_cobject_sources(#10761, 1) +py_cobject_sources(#11626, 1) +py_cobject_sources(#11627, 1) +py_cobject_sources(#11628, 1) +py_cobject_sources(#10762, 1) +py_cobject_sources(#10763, 1) +py_cobject_sources(#10764, 1) +py_cobject_sources(#10765, 1) +py_cobject_sources(#10766, 1) +py_cobject_sources(#10767, 1) +py_cobject_sources(#10768, 1) +py_cobject_sources(#11629, 1) +py_cobject_sources(#10769, 1) +py_cobject_sources(#10770, 1) +py_cobject_sources(#10771, 1) +py_cobject_sources(#10772, 1) +py_cobject_sources(#10773, 1) +py_cobject_sources(#10774, 1) +py_cobject_sources(#10775, 1) +py_cobject_sources(#10776, 1) +py_cobject_sources(#10777, 1) +py_cobject_sources(#10778, 1) +py_cobject_sources(#10779, 1) +py_cobject_sources(#10780, 1) +py_cobject_sources(#10781, 1) +py_cobject_sources(#10782, 1) +py_cobject_sources(#10783, 1) +py_cobject_sources(#10784, 1) +py_cobject_sources(#10785, 1) +py_cobject_sources(#10786, 1) +py_cobject_sources(#10787, 1) +py_cobject_sources(#10788, 1) +py_cobject_sources(#10789, 1) +py_cobject_sources(#10790, 1) +py_cobject_sources(#10791, 1) +py_cobject_sources(#10792, 1) +py_cobject_sources(#10793, 1) +py_cobject_sources(#10794, 1) +py_cobject_sources(#10795, 1) +py_cobject_sources(#10796, 1) +py_cobject_sources(#10797, 1) +py_cobject_sources(#11630, 1) +py_cobject_sources(#11631, 1) +py_cobject_sources(#11632, 1) +py_cobject_sources(#11633, 1) +py_cobject_sources(#11634, 1) +py_cobject_sources(#11635, 1) +py_cobject_sources(#11636, 1) +py_cobject_sources(#11637, 1) +py_cobject_sources(#11638, 1) +py_cobject_sources(#11639, 1) +py_cobject_sources(#10798, 1) +py_cobject_sources(#11640, 1) +py_cobject_sources(#11641, 1) +py_cobject_sources(#10799, 1) +py_cobject_sources(#10800, 1) +py_cobject_sources(#10801, 1) +py_cobject_sources(#10802, 1) +py_cobject_sources(#10803, 1) +py_cobject_sources(#11642, 1) +py_cobject_sources(#11643, 1) +py_cobject_sources(#10804, 1) +py_cobject_sources(#10805, 1) +py_cobject_sources(#10806, 1) +py_cobject_sources(#11644, 1) +py_cobject_sources(#10807, 1) +py_cobject_sources(#10808, 1) +py_cobject_sources(#10809, 1) +py_cobject_sources(#10810, 1) +py_cobject_sources(#10811, 1) +py_cobject_sources(#10812, 1) +py_cobject_sources(#10813, 1) +py_cobject_sources(#11645, 1) +py_cobject_sources(#11646, 1) +py_cobject_sources(#11647, 1) +py_cobject_sources(#11648, 1) +py_cobject_sources(#10814, 1) +py_cobject_sources(#10815, 1) +py_cobject_sources(#10816, 1) +py_cobject_sources(#10817, 1) +py_cobject_sources(#10818, 1) +py_cobject_sources(#10819, 1) +py_cobject_sources(#10820, 1) +py_cobject_sources(#11649, 1) +py_cobject_sources(#10821, 1) +py_cobject_sources(#10822, 1) +py_cobject_sources(#10823, 1) +py_cobject_sources(#10824, 1) +py_cobject_sources(#11652, 1) +py_cobject_sources(#10825, 1) +py_cobject_sources(#10826, 1) +py_cobject_sources(#10827, 1) +py_cobject_sources(#11653, 1) +py_cobject_sources(#10828, 1) +py_cobject_sources(#10829, 1) +py_cobject_sources(#10830, 1) +py_cobject_sources(#10831, 1) +py_cobject_sources(#10832, 1) +py_cobject_sources(#10833, 1) +py_cobject_sources(#11656, 1) +py_cobject_sources(#10834, 1) +py_cobject_sources(#11657, 1) +py_cobject_sources(#10835, 1) +py_cobject_sources(#10836, 1) +py_cobject_sources(#10837, 1) +py_cobject_sources(#10838, 1) +py_cobject_sources(#10839, 1) +py_cobject_sources(#10840, 1) +py_cobject_sources(#10841, 1) +py_cobject_sources(#10842, 1) +py_cobject_sources(#11658, 1) +py_cobject_sources(#10843, 1) +py_cobject_sources(#10844, 1) +py_cobject_sources(#10845, 1) +py_cobject_sources(#10846, 1) +py_cobject_sources(#10847, 1) +py_cobject_sources(#10848, 1) +py_cobject_sources(#10849, 1) +py_cobject_sources(#10850, 1) +py_cobject_sources(#10851, 1) +py_cobject_sources(#10852, 1) +py_cobject_sources(#10853, 1) +py_cobject_sources(#10854, 1) +py_cobject_sources(#10855, 1) +py_cobject_sources(#11660, 1) +py_cobject_sources(#10856, 1) +py_cobject_sources(#11662, 1) +py_cobject_sources(#11664, 1) +py_cobject_sources(#10857, 1) +py_cobject_sources(#10858, 1) +py_cobject_sources(#10859, 1) +py_cobject_sources(#10860, 1) +py_cobject_sources(#10861, 1) +py_cobject_sources(#10862, 1) +py_cobject_sources(#10863, 1) +py_cobject_sources(#10864, 1) +py_cobject_sources(#10865, 1) +py_cobject_sources(#10866, 1) +py_cobject_sources(#10867, 1) +py_cobject_sources(#10869, 1) +py_cobject_sources(#10870, 1) +py_cobject_sources(#10871, 1) +py_cobject_sources(#10872, 1) +py_cobject_sources(#10873, 1) +py_cobject_sources(#10874, 1) +py_cobject_sources(#10875, 1) +py_cobject_sources(#10876, 1) +py_cobject_sources(#10877, 1) +py_cobject_sources(#10878, 1) +py_cobject_sources(#10879, 1) +py_cobject_sources(#10880, 1) +py_cobject_sources(#10881, 1) +py_cobject_sources(#10882, 1) +py_cobject_sources(#10883, 1) +py_cobject_sources(#10884, 1) +py_cobject_sources(#10885, 1) +py_cobject_sources(#10887, 1) +py_cobject_sources(#10888, 1) +py_cobject_sources(#10889, 1) +py_cobject_sources(#10890, 1) +py_cobject_sources(#10891, 1) +py_cobject_sources(#10892, 1) +py_cobject_sources(#10893, 1) +py_cobject_sources(#10894, 1) +py_cobject_sources(#10895, 1) +py_cobject_sources(#10896, 1) +py_cobject_sources(#10897, 1) +py_cobject_sources(#10898, 1) +py_cobject_sources(#10899, 1) +py_cobject_sources(#10900, 1) +py_cobject_sources(#10901, 1) +py_cobject_sources(#10902, 1) +py_cobject_sources(#10903, 1) +py_cobject_sources(#10904, 1) +py_cobject_sources(#10905, 1) +py_cobject_sources(#10906, 1) +py_cobject_sources(#10907, 1) +py_cobject_sources(#10908, 1) +py_cobject_sources(#11669, 1) +py_cobject_sources(#10909, 1) +py_cobject_sources(#10910, 1) +py_cobject_sources(#10911, 1) +py_cobject_sources(#11670, 1) +py_cobject_sources(#10912, 1) +py_cobject_sources(#10913, 1) +py_cobject_sources(#10914, 1) +py_cobject_sources(#10915, 1) +py_cobject_sources(#10916, 1) +py_cobject_sources(#10917, 1) +py_cobject_sources(#10918, 1) +py_cobject_sources(#10919, 1) +py_cobject_sources(#11674, 1) +py_cobject_sources(#11676, 1) +py_cobject_sources(#10920, 1) +py_cobject_sources(#10921, 1) +py_cobject_sources(#10922, 1) +py_cobject_sources(#10923, 1) +py_cobject_sources(#10924, 1) +py_cobject_sources(#11678, 1) +py_cobject_sources(#10925, 1) +py_cobject_sources(#10926, 1) +py_cobject_sources(#10927, 1) +py_cobject_sources(#11679, 1) +py_cobject_sources(#10928, 1) +py_cobject_sources(#10929, 1) +py_cobject_sources(#10930, 1) +py_cobject_sources(#10931, 1) +py_cobject_sources(#10932, 1) +py_cobject_sources(#10933, 1) +py_cobject_sources(#10934, 1) +py_cobject_sources(#11681, 1) +py_cobject_sources(#11682, 1) +py_cobject_sources(#11683, 1) +py_cobject_sources(#10935, 1) +py_cobject_sources(#10936, 1) +py_cobject_sources(#10937, 1) +py_cobject_sources(#10938, 1) +py_cobject_sources(#10939, 1) +py_cobject_sources(#10940, 1) +py_cobject_sources(#10941, 1) +py_cobject_sources(#10942, 1) +py_cobject_sources(#10943, 1) +py_cobject_sources(#11686, 1) +py_cobject_sources(#11687, 1) +py_cobject_sources(#11688, 1) +py_cobject_sources(#11689, 1) +py_cobject_sources(#10944, 1) +py_cobject_sources(#11691, 1) +py_cobject_sources(#11693, 1) +py_cobject_sources(#11694, 1) +py_cobject_sources(#11695, 1) +py_cobject_sources(#10945, 1) +py_cobject_sources(#11696, 1) +py_cobject_sources(#11698, 1) +py_cobject_sources(#11699, 1) +py_cobject_sources(#11700, 1) +py_cobject_sources(#11701, 1) +py_cobject_sources(#11702, 1) +py_cobject_sources(#11705, 1) +py_cobject_sources(#11706, 1) +py_cobject_sources(#11707, 1) +py_cobject_sources(#11708, 1) +py_cobject_sources(#11709, 1) +py_cobject_sources(#10946, 1) +py_cobject_sources(#11710, 1) +py_cobject_sources(#11711, 1) +py_cobject_sources(#10947, 1) +py_cobject_sources(#10948, 1) +py_cobject_sources(#10949, 1) +py_cobject_sources(#11712, 1) +py_cobject_sources(#11713, 1) +py_cobject_sources(#10950, 1) +py_cobject_sources(#11714, 1) +py_cobject_sources(#11715, 1) +py_cobject_sources(#11716, 1) +py_cobject_sources(#10951, 1) +py_cobject_sources(#10952, 1) +py_cobject_sources(#10953, 1) +py_cobject_sources(#11717, 1) +py_cobject_sources(#10954, 1) +py_cobject_sources(#11718, 1) +py_cobject_sources(#11720, 1) +py_cobject_sources(#10955, 1) +py_cobject_sources(#11721, 1) +py_cobject_sources(#10956, 1) +py_cobject_sources(#11722, 1) +py_cobject_sources(#11723, 1) +py_cobject_sources(#11724, 1) +py_cobject_sources(#11725, 1) +py_cobject_sources(#11726, 1) +py_cobject_sources(#11727, 1) +py_cobject_sources(#11728, 1) +py_cobject_sources(#10957, 1) +py_cobject_sources(#11729, 1) +py_cobject_sources(#10958, 1) +py_cobject_sources(#10959, 1) +py_cobject_sources(#10960, 1) +py_cobject_sources(#11730, 1) +py_cobject_sources(#10961, 1) +py_cobject_sources(#10962, 1) +py_cobject_sources(#10963, 1) +py_cobject_sources(#10964, 1) +py_cobject_sources(#10965, 1) +py_cobject_sources(#10966, 1) +py_cobject_sources(#10967, 1) +py_cobject_sources(#10968, 1) +py_cobject_sources(#10969, 1) +py_cobject_sources(#10970, 1) +py_cobject_sources(#10971, 1) +py_cobject_sources(#10972, 1) +py_cobject_sources(#10973, 1) +py_cobject_sources(#10974, 1) +py_cobject_sources(#10975, 1) +py_cobject_sources(#10976, 1) +py_cobject_sources(#10977, 1) +py_cobject_sources(#10978, 1) +py_cobject_sources(#10979, 1) +py_cobject_sources(#10980, 1) +py_cobject_sources(#10981, 1) +py_cobject_sources(#11733, 1) +py_cobject_sources(#11734, 1) +py_cobject_sources(#10982, 1) +py_cobject_sources(#10983, 1) +py_cobject_sources(#10984, 1) +py_cobject_sources(#10985, 1) +py_cobject_sources(#11735, 1) +py_cobject_sources(#10986, 1) +py_cobject_sources(#10987, 1) +py_cobject_sources(#10988, 1) +py_cobject_sources(#10989, 1) +py_cobject_sources(#10990, 1) +py_cobject_sources(#10991, 1) +py_cobject_sources(#11737, 1) +py_cobject_sources(#11739, 1) +py_cobject_sources(#11740, 1) +py_cobject_sources(#11741, 1) +py_cobject_sources(#11742, 1) +py_cobject_sources(#10992, 1) +py_cobject_sources(#10993, 1) +py_cobject_sources(#10994, 1) +py_cobject_sources(#11744, 1) +py_cobject_sources(#10995, 1) +py_cobject_sources(#11746, 1) +py_cobject_sources(#11747, 1) +py_cobject_sources(#11748, 1) +py_cobject_sources(#10996, 1) +py_cobject_sources(#11749, 1) +py_cobject_sources(#11750, 1) +py_cobject_sources(#11751, 1) +py_cobject_sources(#11752, 1) +py_cobject_sources(#11753, 1) +py_cobject_sources(#11754, 1) +py_cobject_sources(#11755, 1) +py_cobject_sources(#10997, 1) +py_cobject_sources(#11756, 1) +py_cobject_sources(#10998, 1) +py_cobject_sources(#10999, 1) +py_cobject_sources(#11000, 1) +py_cobject_sources(#11001, 1) +py_cobject_sources(#11002, 1) +py_cobject_sources(#11003, 1) +py_cobject_sources(#11004, 1) +py_cobject_sources(#11005, 1) +py_cobject_sources(#11006, 1) +py_cobject_sources(#11007, 1) +py_cobject_sources(#11008, 1) +py_cobject_sources(#11009, 1) +py_cobject_sources(#11010, 1) +py_cobject_sources(#11011, 1) +py_cobject_sources(#11012, 1) +py_cobject_sources(#11013, 1) +py_cobject_sources(#11014, 1) +py_cobject_sources(#11015, 1) +py_cobject_sources(#11016, 1) +py_cobject_sources(#11017, 1) +py_cobject_sources(#11018, 1) +py_cobject_sources(#11758, 1) +py_cobject_sources(#11760, 1) +py_cobject_sources(#11761, 1) +py_cobject_sources(#11019, 1) +py_cobject_sources(#11020, 1) +py_cobject_sources(#11021, 1) +py_cobject_sources(#11022, 1) +py_cobject_sources(#11023, 1) +py_cobject_sources(#11024, 1) +py_cobject_sources(#11762, 1) +py_cobject_sources(#11763, 1) +py_cobject_sources(#11764, 1) +py_cobject_sources(#11765, 1) +py_cobject_sources(#11025, 1) +py_cobject_sources(#11766, 1) +py_cobject_sources(#11767, 1) +py_cobject_sources(#11026, 1) +py_cobject_sources(#11027, 1) +py_cobject_sources(#11028, 1) +py_cobject_sources(#11029, 1) +py_cobject_sources(#11030, 1) +py_cobject_sources(#11769, 1) +py_cobject_sources(#11771, 1) +py_cobject_sources(#11772, 1) +py_cobject_sources(#11031, 1) +py_cobject_sources(#11773, 1) +py_cobject_sources(#11774, 1) +py_cobject_sources(#11776, 1) +py_cobject_sources(#11032, 1) +py_cobject_sources(#11777, 1) +py_cobject_sources(#11778, 1) +py_cobject_sources(#11779, 1) +py_cobject_sources(#11780, 1) +py_cobject_sources(#11781, 1) +py_cobject_sources(#11033, 1) +py_cobject_sources(#11782, 1) +py_cobject_sources(#11034, 1) +py_cobject_sources(#11035, 1) +py_cobject_sources(#11036, 1) +py_cobject_sources(#11037, 1) +py_cobject_sources(#11038, 1) +py_cobject_sources(#11039, 1) +py_cobject_sources(#11040, 1) +py_cobject_sources(#11041, 1) +py_cobject_sources(#11042, 1) +py_cobject_sources(#11043, 1) +py_cobject_sources(#11784, 1) +py_cobject_sources(#11785, 1) +py_cobject_sources(#11786, 1) +py_cobject_sources(#11787, 1) +py_cobject_sources(#11788, 1) +py_cobject_sources(#11789, 1) +py_cobject_sources(#11044, 1) +py_cobject_sources(#11790, 1) +py_cobject_sources(#11045, 1) +py_cobject_sources(#11046, 1) +py_cobject_sources(#11047, 1) +py_cobject_sources(#11048, 1) +py_cobject_sources(#11049, 1) +py_cobject_sources(#11050, 1) +py_cobject_sources(#11051, 1) +py_cobject_sources(#11052, 1) +py_cobject_sources(#11053, 1) +py_cobject_sources(#11054, 1) +py_cobject_sources(#11055, 1) +py_cobject_sources(#11056, 1) +py_cobject_sources(#11792, 1) +py_cobject_sources(#11793, 1) +py_cobject_sources(#11794, 1) +py_cobject_sources(#11795, 1) +py_cobject_sources(#11796, 1) +py_cobject_sources(#11797, 1) +py_cobject_sources(#11057, 1) +py_cobject_sources(#11798, 1) +py_cobject_sources(#11058, 1) +py_cobject_sources(#11059, 1) +py_cobject_sources(#11060, 1) +py_cobject_sources(#11061, 1) +py_cobject_sources(#11062, 1) +py_cobject_sources(#11063, 1) +py_cobject_sources(#11799, 1) +py_cobject_sources(#11801, 1) +py_cobject_sources(#11802, 1) +py_cobject_sources(#11803, 1) +py_cobject_sources(#11804, 1) +py_cobject_sources(#11805, 1) +py_cobject_sources(#11806, 1) +py_cobject_sources(#11807, 1) +py_cobject_sources(#11808, 1) +py_cobject_sources(#11809, 1) +py_cobject_sources(#11810, 1) +py_cobject_sources(#11064, 1) +py_cobject_sources(#11812, 1) +py_cobject_sources(#11813, 1) +py_cobject_sources(#11814, 1) +py_cobject_sources(#11065, 1) +py_cobject_sources(#11066, 1) +py_cobject_sources(#11067, 1) +py_cobject_sources(#11068, 1) +py_cobject_sources(#11069, 1) +py_cobject_sources(#11070, 1) +py_cobject_sources(#11071, 1) +py_cobject_sources(#11072, 1) +py_cobject_sources(#11073, 1) +py_cobject_sources(#11074, 1) +py_cobject_sources(#11075, 1) +py_cobject_sources(#11076, 1) +py_cobject_sources(#11077, 1) +py_cobject_sources(#11078, 1) +py_cobject_sources(#11079, 1) +py_cobject_sources(#11816, 1) +py_cobject_sources(#11080, 1) +py_cobject_sources(#11081, 1) +py_cobject_sources(#11082, 1) +py_cobject_sources(#11083, 1) +py_cobject_sources(#11084, 1) +py_cobject_sources(#11085, 1) +py_cobject_sources(#11086, 1) +py_cobject_sources(#11817, 1) +py_cobject_sources(#11087, 1) +py_cobject_sources(#11088, 1) +py_cobject_sources(#11818, 1) +py_cobject_sources(#11089, 1) +py_cobject_sources(#11090, 1) +py_cobject_sources(#11091, 1) +py_cobject_sources(#11819, 1) +py_cobject_sources(#11092, 1) +py_cobject_sources(#11820, 1) +py_cobject_sources(#11093, 1) +py_cobject_sources(#11094, 1) +py_cobject_sources(#11095, 1) +py_cobject_sources(#11096, 1) +py_cobject_sources(#11822, 1) +py_cobject_sources(#11097, 1) +py_cobject_sources(#11098, 1) +py_cobject_sources(#11823, 1) +py_cobject_sources(#11099, 1) +py_cobject_sources(#11100, 1) +py_cobject_sources(#11101, 1) +py_cobject_sources(#11102, 1) +py_cobject_sources(#11103, 1) +py_cobject_sources(#11104, 1) +py_cobject_sources(#11106, 1) +py_cobject_sources(#11824, 1) +py_cobject_sources(#11107, 1) +py_cobject_sources(#11108, 1) +py_cobject_sources(#11109, 1) +py_cobject_sources(#11110, 1) +py_cobject_sources(#11111, 1) +py_cobject_sources(#11112, 1) +py_cobject_sources(#11113, 1) +py_cobject_sources(#11114, 1) +py_cobject_sources(#11115, 1) +py_cobject_sources(#11116, 1) +py_cobject_sources(#11117, 1) +py_cobject_sources(#11118, 1) +py_cobject_sources(#11826, 1) +py_cobject_sources(#11119, 1) +py_cobject_sources(#11120, 1) +py_cobject_sources(#11121, 1) +py_cobject_sources(#11122, 1) +py_cobject_sources(#11123, 1) +py_cobject_sources(#11124, 1) +py_cobject_sources(#11828, 1) +py_cobject_sources(#11833, 1) +py_cobject_sources(#11834, 1) +py_cobject_sources(#11835, 1) +py_cobject_sources(#11836, 1) +py_cobject_sources(#11837, 1) +py_cobject_sources(#11838, 1) +py_cobject_sources(#11839, 1) +py_cobject_sources(#11840, 1) +py_cobject_sources(#11841, 1) +py_cobject_sources(#11842, 1) +py_cobject_sources(#11843, 1) +py_cobject_sources(#11844, 1) +py_cobject_sources(#11845, 1) +py_cobject_sources(#11846, 1) +py_cobject_sources(#11847, 1) +py_cobject_sources(#11848, 1) +py_cobject_sources(#11849, 1) +py_cobject_sources(#11850, 1) +py_cobject_sources(#11851, 1) +py_cobject_sources(#11852, 1) +py_cobject_sources(#11854, 1) +py_cobject_sources(#11125, 1) +py_cobject_sources(#11126, 1) +py_cobject_sources(#11856, 1) +py_cobject_sources(#11858, 1) +py_cobject_sources(#11859, 1) +py_cobject_sources(#11860, 1) +py_cobject_sources(#11127, 1) +py_cobject_sources(#11128, 1) +py_cobject_sources(#11129, 1) +py_cobject_sources(#11862, 1) +py_cobject_sources(#11863, 1) +py_cobject_sources(#11864, 1) +py_cobject_sources(#11865, 1) +py_cobject_sources(#11866, 1) +py_cobject_sources(#11130, 1) +py_cobject_sources(#11868, 1) +py_cobject_sources(#11869, 1) +py_cobject_sources(#11871, 1) +py_cobject_sources(#11872, 1) +py_cobject_sources(#11131, 1) +py_cobject_sources(#11132, 1) +py_cobject_sources(#11133, 1) +py_cobject_sources(#11873, 1) +py_cobject_sources(#11874, 1) +py_cobject_sources(#11134, 1) +py_cobject_sources(#11135, 1) +py_cobject_sources(#11875, 1) +py_cobject_sources(#11136, 1) +py_cobject_sources(#11876, 1) +py_cobject_sources(#11877, 1) +py_cobject_sources(#11878, 1) +py_cobject_sources(#11137, 1) +py_cobject_sources(#11138, 1) +py_cobject_sources(#11139, 1) +py_cobject_sources(#11140, 1) +py_cobject_sources(#11141, 1) +py_cobject_sources(#11143, 1) +py_cobject_sources(#11144, 1) +py_cobject_sources(#11145, 1) +py_cobject_sources(#11146, 1) +py_cobject_sources(#11147, 1) +py_cobject_sources(#11148, 1) +py_cobject_sources(#11149, 1) +py_cobject_sources(#11150, 1) +py_cobject_sources(#11151, 1) +py_cobject_sources(#11152, 1) +py_cobject_sources(#11153, 1) +py_cobject_sources(#11887, 1) +py_cobject_sources(#11154, 1) +py_cobject_sources(#11155, 1) +py_cobject_sources(#11156, 1) +py_cobject_sources(#11157, 1) +py_cobject_sources(#11158, 1) +py_cobject_sources(#11159, 1) +py_cobject_sources(#11160, 1) +py_cobject_sources(#11161, 1) +py_cobject_sources(#11162, 1) +py_cobject_sources(#11163, 1) +py_cobject_sources(#11164, 1) +py_cobject_sources(#11165, 1) +py_cobject_sources(#11166, 1) +py_cobject_sources(#11167, 1) +py_cobject_sources(#11168, 1) +py_cobject_sources(#11169, 1) +py_cobject_sources(#11170, 1) +py_cobject_sources(#11171, 1) +py_cobject_sources(#11172, 1) +py_cobject_sources(#11899, 1) +py_cobject_sources(#11173, 1) +py_cobject_sources(#11174, 1) +py_cobject_sources(#11175, 1) +py_cobject_sources(#11176, 1) +py_cobject_sources(#11177, 1) +py_cobject_sources(#11178, 1) +py_cobject_sources(#11179, 1) +py_cobject_sources(#11180, 1) +py_cobject_sources(#11181, 1) +py_cobject_sources(#11182, 1) +py_cobject_sources(#11183, 1) +py_cobject_sources(#11184, 1) +py_cobject_sources(#11185, 1) +py_cobject_sources(#11186, 1) +py_cobject_sources(#11187, 1) +py_cobject_sources(#11188, 1) +py_cobject_sources(#11189, 1) +py_cobject_sources(#11190, 1) +py_cobject_sources(#11900, 1) +py_cobject_sources(#11191, 1) +py_cobject_sources(#11192, 1) +py_cobject_sources(#11193, 1) +py_cobject_sources(#11901, 1) +py_cobject_sources(#11194, 1) +py_cobject_sources(#11195, 1) +py_cobject_sources(#11196, 1) +py_cobject_sources(#11197, 1) +py_cobject_sources(#11198, 1) +py_cobject_sources(#11199, 1) +py_cobject_sources(#11200, 1) +py_cobject_sources(#11201, 1) +py_cobject_sources(#11202, 1) +py_cobject_sources(#11203, 1) +py_cobject_sources(#11204, 1) +py_cobject_sources(#11205, 1) +py_cobject_sources(#11206, 1) +py_cobject_sources(#11207, 1) +py_cobject_sources(#11208, 1) +py_cobject_sources(#11209, 1) +py_cobject_sources(#11210, 1) +py_cobject_sources(#11211, 1) +py_cobject_sources(#11212, 1) +py_cobject_sources(#11213, 1) +py_cobject_sources(#11214, 1) +py_cobject_sources(#11215, 1) +py_cobject_sources(#11216, 1) +py_cobject_sources(#11217, 1) +py_cobject_sources(#11218, 1) +py_cobject_sources(#11219, 1) +py_cobject_sources(#11220, 1) +py_cobject_sources(#11221, 1) +py_cobject_sources(#11902, 1) +py_cobject_sources(#11222, 1) +py_cobject_sources(#11223, 1) +py_cobject_sources(#11224, 1) +py_cobject_sources(#11225, 1) +py_cobject_sources(#11226, 1) +py_cobject_sources(#11227, 1) +py_cobject_sources(#11228, 1) +py_cobject_sources(#11229, 1) +py_cobject_sources(#11230, 1) +py_cobject_sources(#11231, 1) +py_cobject_sources(#11232, 1) +py_cobject_sources(#11233, 1) +py_cobject_sources(#11234, 1) +py_cobject_sources(#11235, 1) +py_cobject_sources(#11236, 1) +py_cobject_sources(#11237, 1) +py_cobject_sources(#11238, 1) +py_cobject_sources(#11239, 1) +py_cobject_sources(#11240, 1) +py_cobject_sources(#11241, 1) +py_cobject_sources(#11242, 1) +py_cobject_sources(#11243, 1) +py_cobject_sources(#11244, 1) +py_cobject_sources(#11245, 1) +py_cobject_sources(#11246, 1) +py_cobject_sources(#11247, 1) +py_cobject_sources(#11248, 1) +py_cobject_sources(#11249, 1) +py_cobject_sources(#11908, 1) +py_cobject_sources(#11909, 1) +py_cobject_sources(#11250, 1) +py_cobject_sources(#11251, 1) +py_cobject_sources(#11252, 1) +py_cobject_sources(#11253, 1) +py_cobject_sources(#11254, 1) +py_cobject_sources(#11255, 1) +py_cobject_sources(#11256, 1) +py_cobject_sources(#11257, 1) +py_cobject_sources(#11258, 1) +py_cobject_sources(#11913, 1) +py_cobject_sources(#11259, 1) +py_cobject_sources(#11914, 1) +py_cobject_sources(#11915, 1) +py_cobject_sources(#11916, 1) +py_cobject_sources(#11260, 1) +py_cobject_sources(#11917, 1) +py_cobject_sources(#11918, 1) +py_cobject_sources(#11919, 1) +py_cobject_sources(#11261, 1) +py_cobject_sources(#11920, 1) +py_cobject_sources(#11262, 1) +py_cobject_sources(#11263, 1) +py_cobject_sources(#11264, 1) +py_cobject_sources(#11265, 1) +py_cobject_sources(#11266, 1) +py_cobject_sources(#11267, 1) +py_cobject_sources(#11268, 1) +py_cobject_sources(#11269, 1) +py_cobject_sources(#11270, 1) +py_cobject_sources(#11271, 1) +py_cobject_sources(#11272, 1) +py_cobject_sources(#11273, 1) +py_cobject_sources(#11274, 1) +py_cobject_sources(#11275, 1) +py_cobject_sources(#11277, 1) +py_cobject_sources(#11278, 1) +py_cobject_sources(#11279, 1) +py_cobject_sources(#11280, 1) +py_cobject_sources(#11924, 1) +py_cobject_sources(#11281, 1) +py_cobject_sources(#11282, 1) +py_cobject_sources(#11283, 1) +py_cobject_sources(#11284, 1) +py_cobject_sources(#11285, 1) +py_cobject_sources(#11286, 1) +py_cobject_sources(#11287, 1) +py_cobject_sources(#11288, 1) +py_cobject_sources(#11289, 1) +py_cobject_sources(#11290, 1) +py_cobject_sources(#11291, 1) +py_cobject_sources(#11292, 1) +py_cobject_sources(#11293, 1) +py_cobject_sources(#11294, 1) +py_cobject_sources(#11295, 1) +py_cobject_sources(#11296, 1) +py_cobject_sources(#11297, 1) +py_cobject_sources(#11298, 1) +py_cobject_sources(#11299, 1) +py_cobject_sources(#11300, 1) +py_cobject_sources(#11301, 1) +py_cobject_sources(#11302, 1) +py_cobject_sources(#11303, 1) +py_cobject_sources(#11304, 1) +py_cobject_sources(#11305, 1) +py_cobject_sources(#11306, 1) +py_cobject_sources(#11307, 1) +py_cobject_sources(#11308, 1) +py_cobject_sources(#11309, 1) +py_cobject_sources(#11310, 1) +py_cobject_sources(#11311, 1) +py_cobject_sources(#11312, 1) +py_cobject_sources(#11313, 1) +py_cobject_sources(#11314, 1) +py_cobject_sources(#11315, 1) +py_cobject_sources(#11316, 1) +py_cobject_sources(#11317, 1) +py_cobject_sources(#11318, 1) +py_cobject_sources(#11319, 1) +py_cobject_sources(#11320, 1) +py_cobject_sources(#11321, 1) +py_cobject_sources(#11322, 1) +py_cobject_sources(#11323, 1) +py_cobject_sources(#11324, 1) +py_cobject_sources(#11325, 1) +py_cobject_sources(#11326, 1) +py_cobject_sources(#11327, 1) +py_cobject_sources(#11328, 1) +py_cobject_sources(#11330, 1) +py_cobject_sources(#11331, 1) +py_cobject_sources(#11332, 1) +py_cobject_sources(#11333, 1) +py_cobject_sources(#11334, 1) +py_cobject_sources(#11335, 1) +py_cobject_sources(#11926, 1) +py_cobject_sources(#11336, 1) +py_cobject_sources(#11337, 1) +py_cobject_sources(#11338, 1) +py_cobject_sources(#11339, 1) +py_cobject_sources(#11340, 1) +py_cobject_sources(#11341, 1) +py_cobject_sources(#11342, 1) +py_cobject_sources(#11343, 1) +py_cobject_sources(#11344, 1) +py_cobject_sources(#11345, 1) +py_cobject_sources(#11346, 1) +py_cobject_sources(#11347, 1) +py_cobject_sources(#11348, 1) +py_cobject_sources(#11349, 1) +py_cobject_sources(#11927, 1) +py_cobject_sources(#11350, 1) +py_cobject_sources(#11928, 1) +py_cobject_sources(#11930, 1) +py_cobject_sources(#11931, 1) +py_cobject_sources(#11932, 1) +py_cobject_sources(#11933, 1) +py_cobject_sources(#11934, 1) +py_cobject_sources(#11936, 1) +py_cobject_sources(#11937, 1) +py_cobject_sources(#11938, 1) +py_cobject_sources(#11940, 1) +py_cobject_sources(#11351, 1) +py_cobject_sources(#11352, 1) +py_cobject_sources(#11353, 1) +py_cobject_sources(#11354, 1) +py_cobject_sources(#11355, 1) +py_cobject_sources(#11356, 1) +py_cobject_sources(#11357, 1) +py_cobject_sources(#11358, 1) +py_cobject_sources(#11359, 1) +py_cobject_sources(#11360, 1) +py_cobject_sources(#11944, 1) +py_cobject_sources(#11361, 1) +py_cobject_sources(#11362, 1) +py_cobject_sources(#11363, 1) +py_cobject_sources(#11364, 1) +py_cobject_sources(#11365, 1) +py_cobject_sources(#11946, 1) +py_cobject_sources(#11947, 1) +py_cobject_sources(#11366, 1) +py_cobject_sources(#11367, 1) +py_cobject_sources(#11948, 1) +py_cobject_sources(#11368, 1) +py_cobject_sources(#11949, 1) +py_cobject_sources(#11369, 1) +py_cobject_sources(#11370, 1) +py_cobject_sources(#11371, 1) +py_cobject_sources(#11372, 1) +py_cobject_sources(#11373, 1) +py_cobject_sources(#11374, 1) +py_cobject_sources(#11375, 1) +py_cobject_sources(#11951, 1) +py_cobject_sources(#11376, 1) +py_cobject_sources(#11377, 1) +py_cobject_sources(#11378, 1) +py_cobject_sources(#11952, 1) +py_cobject_sources(#11379, 1) +py_cobject_sources(#11380, 1) +py_cobject_sources(#11381, 1) +py_cobject_sources(#11382, 1) +py_cobject_sources(#11383, 1) +py_cobject_sources(#11384, 1) +py_cobject_sources(#11385, 1) +py_cobject_sources(#11386, 1) +py_cobject_sources(#11387, 1) +py_cobject_sources(#11388, 1) +py_cobject_sources(#11389, 1) +py_cobject_sources(#11390, 1) +py_cobject_sources(#11391, 1) +py_cobject_sources(#11392, 1) +py_cobject_sources(#11393, 1) +py_cobject_sources(#11394, 1) +py_cobject_sources(#11395, 1) +py_cobject_sources(#11396, 1) +py_cobject_sources(#11397, 1) +py_cobject_sources(#11398, 1) +py_cobject_sources(#11399, 1) +py_cobject_sources(#11400, 1) +py_cobject_sources(#11401, 1) +py_cobject_sources(#11402, 1) +py_cobject_sources(#11403, 1) +py_cobject_sources(#11404, 1) +py_cobject_sources(#11405, 1) +py_cobject_sources(#11406, 1) +py_cobject_sources(#11407, 1) +py_cobject_sources(#11408, 1) +py_cobject_sources(#11409, 1) +py_cobject_sources(#11410, 1) +py_cobject_sources(#11411, 1) +py_cobject_sources(#11412, 1) +py_cobject_sources(#11413, 1) +py_cobject_sources(#11414, 1) +py_cobject_sources(#11415, 1) +py_cobject_sources(#11416, 1) +py_cobject_sources(#11417, 1) +py_cobject_sources(#11418, 1) +py_cobject_sources(#11419, 1) +py_cobject_sources(#11420, 1) +py_cobject_sources(#11421, 1) +py_cobject_sources(#11422, 1) +py_cobject_sources(#11423, 1) +py_cobject_sources(#11424, 1) +py_cobject_sources(#11425, 1) +py_cobject_sources(#11426, 1) +py_cobject_sources(#11427, 1) +py_cobject_sources(#11428, 1) +py_cobject_sources(#11429, 1) +py_cobject_sources(#11430, 1) +py_cobject_sources(#11431, 1) +py_cobject_sources(#11432, 1) +py_cobject_sources(#11433, 1) +py_cobject_sources(#11434, 1) +py_cobject_sources(#11954, 1) +py_cobject_sources(#11435, 1) +py_cobject_sources(#11436, 1) +py_cobject_sources(#11437, 1) +py_cobject_sources(#11438, 1) +py_cobject_sources(#11439, 1) +py_cobject_sources(#11440, 1) +py_cobject_sources(#11441, 1) +py_cobject_sources(#11442, 1) +py_cobject_sources(#11443, 1) +py_cobject_sources(#11444, 1) +py_cobject_sources(#11445, 1) +py_cobject_sources(#11446, 1) +py_cobject_sources(#11447, 1) +py_cobject_sources(#11448, 1) +py_cobject_sources(#11449, 1) +py_cobject_sources(#11450, 1) +py_cobject_sources(#11451, 1) +py_cobject_sources(#11452, 1) +py_cobject_sources(#11453, 1) +py_cobject_sources(#11454, 1) +py_cobject_sources(#11455, 1) +py_cobject_sources(#11456, 1) +py_cobject_sources(#11457, 1) +py_cobject_sources(#11957, 1) +py_cobject_sources(#11458, 1) +py_cobject_sources(#11459, 1) +py_cobject_sources(#11958, 1) +py_cobject_sources(#11959, 1) +py_cobject_sources(#11960, 1) +py_cobject_sources(#11961, 1) +py_cobject_sources(#11962, 1) +py_cobject_sources(#11460, 1) +py_cobject_sources(#11963, 1) +py_cobject_sources(#11461, 1) +py_cobject_sources(#11462, 1) +py_cobject_sources(#11463, 1) +py_cobject_sources(#11964, 1) +py_cobject_sources(#11965, 1) +py_cobject_sources(#11966, 1) +py_cobject_sources(#11464, 1) +py_cobject_sources(#11465, 1) +py_cobject_sources(#11967, 1) +py_cobject_sources(#11968, 1) +py_cobject_sources(#11466, 1) +py_cobject_sources(#11467, 1) +py_cobject_sources(#11969, 1) +py_cobject_sources(#11970, 1) +py_cobject_sources(#11971, 1) +py_cobject_sources(#11972, 1) +py_cobject_sources(#11468, 1) +py_cobject_sources(#11469, 1) +py_cobject_sources(#11470, 1) +py_cobject_sources(#11471, 1) +py_cobject_sources(#11472, 1) +py_cobject_sources(#11473, 1) +py_cobject_sources(#11474, 1) +py_cobject_sources(#11475, 1) +py_cobject_sources(#11476, 1) +py_cobject_sources(#11477, 1) +py_cobject_sources(#11478, 1) +py_cobject_sources(#11479, 1) +py_cobject_sources(#11480, 1) +py_cobject_sources(#11973, 1) +py_cobject_sources(#11974, 1) +py_cobject_sources(#11975, 1) +py_cobject_sources(#11976, 1) +py_cobject_sources(#11481, 1) +py_cobject_sources(#11482, 1) +py_cobject_sources(#11483, 1) +py_cobject_sources(#11484, 1) +py_cobject_sources(#11485, 1) +py_cobject_sources(#11486, 1) +py_cobject_sources(#11487, 1) +py_cobject_sources(#11978, 1) +py_cobject_sources(#11488, 1) +py_cobject_sources(#11489, 1) +py_cobject_sources(#11490, 1) +py_cobject_sources(#11493, 1) +py_cobject_sources(#11494, 1) +py_cobject_sources(#11495, 1) +py_cobject_sources(#11496, 1) +py_cobject_sources(#11497, 1) +py_cobject_sources(#11980, 1) +py_cobject_sources(#11981, 1) +py_cobject_sources(#11498, 1) +py_cobject_sources(#11499, 1) +py_cobject_sources(#11500, 1) +py_cobject_sources(#11501, 1) +py_cobject_sources(#11983, 1) +py_cobject_sources(#11502, 1) +py_cobject_sources(#11503, 1) +py_cobject_sources(#11504, 1) +py_cobject_sources(#11505, 1) +py_cobject_sources(#11506, 1) + diff --git a/python/extractor/semmle/data/README.md b/python/extractor/semmle/data/README.md new file mode 100644 index 00000000000..3ab81ca1f86 --- /dev/null +++ b/python/extractor/semmle/data/README.md @@ -0,0 +1 @@ +The TRAP files in this directory were automatically generated from the cpython source code, copyright PSF. diff --git a/python/extractor/semmle/data/__init__.py b/python/extractor/semmle/data/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/semmle/data/interpreter2.trap b/python/extractor/semmle/data/interpreter2.trap new file mode 100644 index 00000000000..abf2f7e046a --- /dev/null +++ b/python/extractor/semmle/data/interpreter2.trap @@ -0,0 +1,12078 @@ +#10000 = @"C_type$function" +#10001 = @"C_type$type" +py_cobjects(#10001) +py_cobjecttypes(#10001, #10001) +py_cobject_sources(#10001, 0) +#10002 = @"C_type$type$2__abstractmethods__" +#10003 = @"C_type$getset_descriptor" +py_cobjects(#10003) +py_cobjecttypes(#10003, #10001) +py_cobject_sources(#10003, 0) +#10004 = @"C_type$getset_descriptor$2__delete__" +#10005 = @"C_type$wrapper_descriptor" +py_cobjects(#10005) +py_cobjecttypes(#10005, #10001) +py_cobject_sources(#10005, 0) +#10006 = @"C_type$wrapper_descriptor$2__call__" +py_cobjects(#10006) +py_cobjecttypes(#10006, #10005) +py_cobject_sources(#10006, 0) +py_cobjectnames(#10006, "__call__") +py_cmembers_versioned(#10005, "__call__", #10006, "2") +#10007 = @"C_type$wrapper_descriptor$2__doc__" +py_cobjects(#10007) +py_cobjecttypes(#10007, #10003) +py_cobject_sources(#10007, 0) +#10008 = @"C_type$wrapper_descriptor$2__doc__$2__set__" +#10009 = @"C_type$method-wrapper" +py_cobjects(#10009) +py_cobjecttypes(#10009, #10001) +py_cobject_sources(#10009, 0) +#10010 = @"C_type$method-wrapper$2__call__" +py_cobjects(#10010) +py_cobjecttypes(#10010, #10005) +py_cobject_sources(#10010, 0) +py_cobjectnames(#10010, "__call__") +py_cmembers_versioned(#10009, "__call__", #10010, "2") +#10011 = @"C_type$method-wrapper$2__cmp__" +py_cobjects(#10011) +py_cobjecttypes(#10011, #10005) +py_cobject_sources(#10011, 0) +py_cobjectnames(#10011, "__cmp__") +py_cmembers_versioned(#10009, "__cmp__", #10011, "2") +#10012 = @"C_type$method-wrapper$2__doc__" +py_cobjects(#10012) +py_cobjecttypes(#10012, #10003) +py_cobject_sources(#10012, 0) +#10013 = @"C_type$method-wrapper$2__doc__$2__set__" +py_cobjects(#10013) +py_cobjecttypes(#10013, #10009) +py_cobject_sources(#10013, 0) +py_cobjectnames(#10013, "__set__") +py_cmembers_versioned(#10012, "__set__", #10013, "2") +#10014 = @"C_type$method-wrapper$2__doc__$2__getattribute__" +py_cobjects(#10014) +py_cobjecttypes(#10014, #10009) +py_cobject_sources(#10014, 0) +py_cobjectnames(#10014, "__getattribute__") +py_cmembers_versioned(#10012, "__getattribute__", #10014, "2") +py_cmembers_versioned(#10012, "__objclass__", #10009, "2") +#10015 = @"C_type$method-wrapper$2__doc__$2__repr__" +py_cobjects(#10015) +py_cobjecttypes(#10015, #10009) +py_cobject_sources(#10015, 0) +py_cobjectnames(#10015, "__repr__") +py_cmembers_versioned(#10012, "__repr__", #10015, "2") +#10016 = @"C_type$method-wrapper$2__doc__$2__get__" +py_cobjects(#10016) +py_cobjecttypes(#10016, #10009) +py_cobject_sources(#10016, 0) +py_cobjectnames(#10016, "__get__") +py_cmembers_versioned(#10012, "__get__", #10016, "2") +#10017 = @"C_None" +#10018 = @"C_type$NoneType" +py_cobjects(#10018) +py_cobjecttypes(#10018, #10001) +py_cobject_sources(#10018, 0) +py_cmembers_versioned(#10018, "__doc__", #10017, "2") +#10019 = @"C_type$NoneType$2__hash__" +py_cobjects(#10019) +py_cobjecttypes(#10019, #10005) +py_cobject_sources(#10019, 0) +py_cobjectnames(#10019, "__hash__") +py_cmembers_versioned(#10018, "__hash__", #10019, "2") +#10020 = @"C_type$NoneType$2__repr__" +py_cobjects(#10020) +py_cobjecttypes(#10020, #10005) +py_cobject_sources(#10020, 0) +py_cobjectnames(#10020, "__repr__") +py_cmembers_versioned(#10018, "__repr__", #10020, "2") +#10021 = @"C_type$object" +py_cobjects(#10021) +py_cobjecttypes(#10021, #10001) +py_cobject_sources(#10021, 0) +#10022 = @"C_type$object$2__class__" +py_cobjects(#10022) +py_cobjecttypes(#10022, #10003) +py_cobject_sources(#10022, 0) +#10023 = @"C_type$object$2__class__$2__set__" +py_cobjects(#10023) +py_cobjecttypes(#10023, #10009) +py_cobject_sources(#10023, 0) +py_cobjectnames(#10023, "__set__") +py_cmembers_versioned(#10022, "__set__", #10023, "2") +#10024 = @"C_type$object$2__class__$2__getattribute__" +py_cobjects(#10024) +py_cobjecttypes(#10024, #10009) +py_cobject_sources(#10024, 0) +py_cobjectnames(#10024, "__getattribute__") +py_cmembers_versioned(#10022, "__getattribute__", #10024, "2") +py_cmembers_versioned(#10022, "__objclass__", #10021, "2") +#10025 = @"C_type$object$2__class__$2__repr__" +py_cobjects(#10025) +py_cobjecttypes(#10025, #10009) +py_cobject_sources(#10025, 0) +py_cobjectnames(#10025, "__repr__") +py_cmembers_versioned(#10022, "__repr__", #10025, "2") +#10026 = @"C_type$object$2__class__$2__get__" +py_cobjects(#10026) +py_cobjecttypes(#10026, #10009) +py_cobject_sources(#10026, 0) +py_cobjectnames(#10026, "__get__") +py_cmembers_versioned(#10022, "__get__", #10026, "2") +#10027 = @"C_bytes$43668771b159ce5cf2403f7d85b2e7b2cfa0fa17" +#10028 = @"C_type$bytes" +py_cobjects(#10028) +py_cobjecttypes(#10028, #10001) +py_cobject_sources(#10028, 0) +#10029 = @"C_type$bytes$2__add__" +py_cobjects(#10029) +py_cobjecttypes(#10029, #10005) +py_cobject_sources(#10029, 0) +py_cobjectnames(#10029, "__add__") +py_cmembers_versioned(#10028, "__add__", #10029, "2") +#10030 = @"C_type$bytes$2__contains__" +py_cobjects(#10030) +py_cobjecttypes(#10030, #10005) +py_cobject_sources(#10030, 0) +py_cobjectnames(#10030, "__contains__") +py_cmembers_versioned(#10028, "__contains__", #10030, "2") +#10031 = @"C_bytes$89fa4e8b61f4e344a49c8e380b1f1069d190a01c" +py_cobjects(#10031) +py_cobjecttypes(#10031, #10028) +py_cobject_sources(#10031, 0) +py_cobjectnames(#10031, "b'str(object='') -> string + +Return a nice string representation of the object. +If the argument is a string, the return value is the same object.'") +py_cmembers_versioned(#10028, "__doc__", #10031, "2") +#10032 = @"C_type$bytes$2__eq__" +py_cobjects(#10032) +py_cobjecttypes(#10032, #10005) +py_cobject_sources(#10032, 0) +py_cobjectnames(#10032, "__eq__") +py_cmembers_versioned(#10028, "__eq__", #10032, "2") +#10033 = @"C_type$bytes$2__format__" +#10034 = @"C_type$method_descriptor" +py_cobjects(#10034) +py_cobjecttypes(#10034, #10001) +py_cobject_sources(#10034, 0) +#10035 = @"C_type$method_descriptor$2__call__" +py_cobjects(#10035) +py_cobjecttypes(#10035, #10005) +py_cobject_sources(#10035, 0) +py_cobjectnames(#10035, "__call__") +py_cmembers_versioned(#10034, "__call__", #10035, "2") +#10036 = @"C_type$method_descriptor$2__doc__" +py_cobjects(#10036) +py_cobjecttypes(#10036, #10003) +py_cobject_sources(#10036, 0) +#10037 = @"C_type$method_descriptor$2__doc__$2__set__" +py_cobjects(#10037) +py_cobjecttypes(#10037, #10009) +py_cobject_sources(#10037, 0) +py_cobjectnames(#10037, "__set__") +py_cmembers_versioned(#10036, "__set__", #10037, "2") +#10038 = @"C_type$method_descriptor$2__doc__$2__getattribute__" +py_cobjects(#10038) +py_cobjecttypes(#10038, #10009) +py_cobject_sources(#10038, 0) +py_cobjectnames(#10038, "__getattribute__") +py_cmembers_versioned(#10036, "__getattribute__", #10038, "2") +py_cmembers_versioned(#10036, "__objclass__", #10034, "2") +#10039 = @"C_type$method_descriptor$2__doc__$2__repr__" +py_cobjects(#10039) +py_cobjecttypes(#10039, #10009) +py_cobject_sources(#10039, 0) +py_cobjectnames(#10039, "__repr__") +py_cmembers_versioned(#10036, "__repr__", #10039, "2") +#10040 = @"C_type$method_descriptor$2__doc__$2__get__" +py_cobjects(#10040) +py_cobjecttypes(#10040, #10009) +py_cobject_sources(#10040, 0) +py_cobjectnames(#10040, "__get__") +py_cmembers_versioned(#10036, "__get__", #10040, "2") +py_cmembers_versioned(#10036, "__doc__", #10017, "2") +#10041 = @"C_type$method_descriptor$2__doc__$2__delete__" +py_cobjects(#10041) +py_cobjecttypes(#10041, #10009) +py_cobject_sources(#10041, 0) +py_cobjectnames(#10041, "__delete__") +py_cmembers_versioned(#10036, "__delete__", #10041, "2") +py_cobjectnames(#10036, "__doc__") +py_cmembers_versioned(#10034, "__doc__", #10036, "2") +#10042 = @"C_type$method_descriptor$2__get__" +py_cobjects(#10042) +py_cobjecttypes(#10042, #10005) +py_cobject_sources(#10042, 0) +py_cobjectnames(#10042, "__get__") +py_cmembers_versioned(#10034, "__get__", #10042, "2") +#10043 = @"C_type$method_descriptor$2__getattribute__" +py_cobjects(#10043) +py_cobjecttypes(#10043, #10005) +py_cobject_sources(#10043, 0) +py_cobjectnames(#10043, "__getattribute__") +py_cmembers_versioned(#10034, "__getattribute__", #10043, "2") +#10044 = @"C_type$method_descriptor$2__name__" +#10045 = @"C_type$member_descriptor" +py_cobjects(#10045) +py_cobjecttypes(#10045, #10001) +py_cobject_sources(#10045, 0) +#10046 = @"C_type$member_descriptor$2__delete__" +py_cobjects(#10046) +py_cobjecttypes(#10046, #10005) +py_cobject_sources(#10046, 0) +py_cobjectnames(#10046, "__delete__") +py_cmembers_versioned(#10045, "__delete__", #10046, "2") +#10047 = @"C_type$member_descriptor$2__doc__" +py_cobjects(#10047) +py_cobjecttypes(#10047, #10003) +py_cobject_sources(#10047, 0) +#10048 = @"C_type$member_descriptor$2__doc__$2__set__" +py_cobjects(#10048) +py_cobjecttypes(#10048, #10009) +py_cobject_sources(#10048, 0) +py_cobjectnames(#10048, "__set__") +py_cmembers_versioned(#10047, "__set__", #10048, "2") +#10049 = @"C_type$member_descriptor$2__doc__$2__getattribute__" +py_cobjects(#10049) +py_cobjecttypes(#10049, #10009) +py_cobject_sources(#10049, 0) +py_cobjectnames(#10049, "__getattribute__") +py_cmembers_versioned(#10047, "__getattribute__", #10049, "2") +py_cmembers_versioned(#10047, "__objclass__", #10045, "2") +#10050 = @"C_type$member_descriptor$2__doc__$2__repr__" +py_cobjects(#10050) +py_cobjecttypes(#10050, #10009) +py_cobject_sources(#10050, 0) +py_cobjectnames(#10050, "__repr__") +py_cmembers_versioned(#10047, "__repr__", #10050, "2") +#10051 = @"C_type$member_descriptor$2__doc__$2__get__" +py_cobjects(#10051) +py_cobjecttypes(#10051, #10009) +py_cobject_sources(#10051, 0) +py_cobjectnames(#10051, "__get__") +py_cmembers_versioned(#10047, "__get__", #10051, "2") +py_cmembers_versioned(#10047, "__doc__", #10017, "2") +#10052 = @"C_type$member_descriptor$2__doc__$2__delete__" +py_cobjects(#10052) +py_cobjecttypes(#10052, #10009) +py_cobject_sources(#10052, 0) +py_cobjectnames(#10052, "__delete__") +py_cmembers_versioned(#10047, "__delete__", #10052, "2") +py_cobjectnames(#10047, "__doc__") +py_cmembers_versioned(#10045, "__doc__", #10047, "2") +#10053 = @"C_type$member_descriptor$2__get__" +py_cobjects(#10053) +py_cobjecttypes(#10053, #10005) +py_cobject_sources(#10053, 0) +py_cobjectnames(#10053, "__get__") +py_cmembers_versioned(#10045, "__get__", #10053, "2") +#10054 = @"C_type$member_descriptor$2__getattribute__" +py_cobjects(#10054) +py_cobjecttypes(#10054, #10005) +py_cobject_sources(#10054, 0) +py_cobjectnames(#10054, "__getattribute__") +py_cmembers_versioned(#10045, "__getattribute__", #10054, "2") +#10055 = @"C_type$member_descriptor$2__name__" +py_cobjects(#10055) +py_cobjecttypes(#10055, #10045) +py_cobject_sources(#10055, 0) +py_cobjectnames(#10055, "__name__") +py_cmembers_versioned(#10045, "__name__", #10055, "2") +#10056 = @"C_type$member_descriptor$2__objclass__" +py_cobjects(#10056) +py_cobjecttypes(#10056, #10045) +py_cobject_sources(#10056, 0) +py_cobjectnames(#10056, "__objclass__") +py_cmembers_versioned(#10045, "__objclass__", #10056, "2") +#10057 = @"C_type$member_descriptor$2__repr__" +py_cobjects(#10057) +py_cobjecttypes(#10057, #10005) +py_cobject_sources(#10057, 0) +py_cobjectnames(#10057, "__repr__") +py_cmembers_versioned(#10045, "__repr__", #10057, "2") +#10058 = @"C_type$member_descriptor$2__set__" +py_cobjects(#10058) +py_cobjecttypes(#10058, #10005) +py_cobject_sources(#10058, 0) +py_cobjectnames(#10058, "__set__") +py_cmembers_versioned(#10045, "__set__", #10058, "2") +py_cmembers_versioned(#10045, ".super.", #10021, "2") +py_cobjectnames(#10045, "member_descriptor") +py_cobjects(#10044) +py_cobjecttypes(#10044, #10045) +py_cobject_sources(#10044, 0) +py_cobjectnames(#10044, "__name__") +py_cmembers_versioned(#10034, "__name__", #10044, "2") +#10059 = @"C_type$method_descriptor$2__objclass__" +py_cobjects(#10059) +py_cobjecttypes(#10059, #10045) +py_cobject_sources(#10059, 0) +py_cobjectnames(#10059, "__objclass__") +py_cmembers_versioned(#10034, "__objclass__", #10059, "2") +#10060 = @"C_type$method_descriptor$2__repr__" +py_cobjects(#10060) +py_cobjecttypes(#10060, #10005) +py_cobject_sources(#10060, 0) +py_cobjectnames(#10060, "__repr__") +py_cmembers_versioned(#10034, "__repr__", #10060, "2") +py_cmembers_versioned(#10034, ".super.", #10021, "2") +py_cobjectnames(#10034, "method_descriptor") +py_cobjects(#10033) +py_cobjecttypes(#10033, #10034) +py_cobject_sources(#10033, 0) +py_cobjectnames(#10033, "__format__") +py_cmembers_versioned(#10028, "__format__", #10033, "2") +#10061 = @"C_type$bytes$2__ge__" +py_cobjects(#10061) +py_cobjecttypes(#10061, #10005) +py_cobject_sources(#10061, 0) +py_cobjectnames(#10061, "__ge__") +py_cmembers_versioned(#10028, "__ge__", #10061, "2") +#10062 = @"C_type$bytes$2__getattribute__" +py_cobjects(#10062) +py_cobjecttypes(#10062, #10005) +py_cobject_sources(#10062, 0) +py_cobjectnames(#10062, "__getattribute__") +py_cmembers_versioned(#10028, "__getattribute__", #10062, "2") +#10063 = @"C_type$bytes$2__getitem__" +py_cobjects(#10063) +py_cobjecttypes(#10063, #10005) +py_cobject_sources(#10063, 0) +py_cobjectnames(#10063, "__getitem__") +py_cmembers_versioned(#10028, "__getitem__", #10063, "2") +#10064 = @"C_type$bytes$2__getnewargs__" +py_cobjects(#10064) +py_cobjecttypes(#10064, #10034) +py_cobject_sources(#10064, 0) +py_cobjectnames(#10064, "__getnewargs__") +py_cmembers_versioned(#10028, "__getnewargs__", #10064, "2") +#10065 = @"C_type$bytes$2__getslice__" +py_cobjects(#10065) +py_cobjecttypes(#10065, #10005) +py_cobject_sources(#10065, 0) +py_cobjectnames(#10065, "__getslice__") +py_cmembers_versioned(#10028, "__getslice__", #10065, "2") +#10066 = @"C_type$bytes$2__gt__" +py_cobjects(#10066) +py_cobjecttypes(#10066, #10005) +py_cobject_sources(#10066, 0) +py_cobjectnames(#10066, "__gt__") +py_cmembers_versioned(#10028, "__gt__", #10066, "2") +#10067 = @"C_type$bytes$2__hash__" +py_cobjects(#10067) +py_cobjecttypes(#10067, #10005) +py_cobject_sources(#10067, 0) +py_cobjectnames(#10067, "__hash__") +py_cmembers_versioned(#10028, "__hash__", #10067, "2") +#10068 = @"C_type$bytes$2__le__" +py_cobjects(#10068) +py_cobjecttypes(#10068, #10005) +py_cobject_sources(#10068, 0) +py_cobjectnames(#10068, "__le__") +py_cmembers_versioned(#10028, "__le__", #10068, "2") +#10069 = @"C_type$bytes$2__len__" +py_cobjects(#10069) +py_cobjecttypes(#10069, #10005) +py_cobject_sources(#10069, 0) +py_cobjectnames(#10069, "__len__") +py_cmembers_versioned(#10028, "__len__", #10069, "2") +#10070 = @"C_type$bytes$2__lt__" +py_cobjects(#10070) +py_cobjecttypes(#10070, #10005) +py_cobject_sources(#10070, 0) +py_cobjectnames(#10070, "__lt__") +py_cmembers_versioned(#10028, "__lt__", #10070, "2") +#10071 = @"C_type$bytes$2__mod__" +py_cobjects(#10071) +py_cobjecttypes(#10071, #10005) +py_cobject_sources(#10071, 0) +py_cobjectnames(#10071, "__mod__") +py_cmembers_versioned(#10028, "__mod__", #10071, "2") +#10072 = @"C_type$bytes$2__mul__" +py_cobjects(#10072) +py_cobjecttypes(#10072, #10005) +py_cobject_sources(#10072, 0) +py_cobjectnames(#10072, "__mul__") +py_cmembers_versioned(#10028, "__mul__", #10072, "2") +#10073 = @"C_type$bytes$2__ne__" +py_cobjects(#10073) +py_cobjecttypes(#10073, #10005) +py_cobject_sources(#10073, 0) +py_cobjectnames(#10073, "__ne__") +py_cmembers_versioned(#10028, "__ne__", #10073, "2") +#10074 = @"C_type$bytes$2__new__" +#10075 = @"C_type$builtin_function_or_method" +py_cobjects(#10075) +py_cobjecttypes(#10075, #10001) +py_cobject_sources(#10075, 0) +#10076 = @"C_type$builtin_function_or_method$2__call__" +py_cobjects(#10076) +py_cobjecttypes(#10076, #10005) +py_cobject_sources(#10076, 0) +py_cobjectnames(#10076, "__call__") +py_cmembers_versioned(#10075, "__call__", #10076, "2") +#10077 = @"C_type$builtin_function_or_method$2__cmp__" +py_cobjects(#10077) +py_cobjecttypes(#10077, #10005) +py_cobject_sources(#10077, 0) +py_cobjectnames(#10077, "__cmp__") +py_cmembers_versioned(#10075, "__cmp__", #10077, "2") +#10078 = @"C_type$builtin_function_or_method$2__doc__" +py_cobjects(#10078) +py_cobjecttypes(#10078, #10003) +py_cobject_sources(#10078, 0) +#10079 = @"C_type$builtin_function_or_method$2__doc__$2__set__" +py_cobjects(#10079) +py_cobjecttypes(#10079, #10009) +py_cobject_sources(#10079, 0) +py_cobjectnames(#10079, "__set__") +py_cmembers_versioned(#10078, "__set__", #10079, "2") +#10080 = @"C_type$builtin_function_or_method$2__doc__$2__getattribute__" +py_cobjects(#10080) +py_cobjecttypes(#10080, #10009) +py_cobject_sources(#10080, 0) +py_cobjectnames(#10080, "__getattribute__") +py_cmembers_versioned(#10078, "__getattribute__", #10080, "2") +py_cmembers_versioned(#10078, "__objclass__", #10075, "2") +#10081 = @"C_type$builtin_function_or_method$2__doc__$2__repr__" +py_cobjects(#10081) +py_cobjecttypes(#10081, #10009) +py_cobject_sources(#10081, 0) +py_cobjectnames(#10081, "__repr__") +py_cmembers_versioned(#10078, "__repr__", #10081, "2") +#10082 = @"C_type$builtin_function_or_method$2__doc__$2__get__" +py_cobjects(#10082) +py_cobjecttypes(#10082, #10009) +py_cobject_sources(#10082, 0) +py_cobjectnames(#10082, "__get__") +py_cmembers_versioned(#10078, "__get__", #10082, "2") +py_cmembers_versioned(#10078, "__doc__", #10017, "2") +#10083 = @"C_type$builtin_function_or_method$2__doc__$2__delete__" +py_cobjects(#10083) +py_cobjecttypes(#10083, #10009) +py_cobject_sources(#10083, 0) +py_cobjectnames(#10083, "__delete__") +py_cmembers_versioned(#10078, "__delete__", #10083, "2") +py_cobjectnames(#10078, "__doc__") +py_cmembers_versioned(#10075, "__doc__", #10078, "2") +#10084 = @"C_type$builtin_function_or_method$2__eq__" +py_cobjects(#10084) +py_cobjecttypes(#10084, #10005) +py_cobject_sources(#10084, 0) +py_cobjectnames(#10084, "__eq__") +py_cmembers_versioned(#10075, "__eq__", #10084, "2") +#10085 = @"C_type$builtin_function_or_method$2__ge__" +py_cobjects(#10085) +py_cobjecttypes(#10085, #10005) +py_cobject_sources(#10085, 0) +py_cobjectnames(#10085, "__ge__") +py_cmembers_versioned(#10075, "__ge__", #10085, "2") +#10086 = @"C_type$builtin_function_or_method$2__getattribute__" +py_cobjects(#10086) +py_cobjecttypes(#10086, #10005) +py_cobject_sources(#10086, 0) +py_cobjectnames(#10086, "__getattribute__") +py_cmembers_versioned(#10075, "__getattribute__", #10086, "2") +#10087 = @"C_type$builtin_function_or_method$2__gt__" +py_cobjects(#10087) +py_cobjecttypes(#10087, #10005) +py_cobject_sources(#10087, 0) +py_cobjectnames(#10087, "__gt__") +py_cmembers_versioned(#10075, "__gt__", #10087, "2") +#10088 = @"C_type$builtin_function_or_method$2__hash__" +py_cobjects(#10088) +py_cobjecttypes(#10088, #10005) +py_cobject_sources(#10088, 0) +py_cobjectnames(#10088, "__hash__") +py_cmembers_versioned(#10075, "__hash__", #10088, "2") +#10089 = @"C_type$builtin_function_or_method$2__le__" +py_cobjects(#10089) +py_cobjecttypes(#10089, #10005) +py_cobject_sources(#10089, 0) +py_cobjectnames(#10089, "__le__") +py_cmembers_versioned(#10075, "__le__", #10089, "2") +#10090 = @"C_type$builtin_function_or_method$2__lt__" +py_cobjects(#10090) +py_cobjecttypes(#10090, #10005) +py_cobject_sources(#10090, 0) +py_cobjectnames(#10090, "__lt__") +py_cmembers_versioned(#10075, "__lt__", #10090, "2") +#10091 = @"C_type$builtin_function_or_method$2__module__" +py_cobjects(#10091) +py_cobjecttypes(#10091, #10045) +py_cobject_sources(#10091, 0) +py_cobjectnames(#10091, "__module__") +py_cmembers_versioned(#10075, "__module__", #10091, "2") +#10092 = @"C_type$builtin_function_or_method$2__name__" +py_cobjects(#10092) +py_cobjecttypes(#10092, #10003) +py_cobject_sources(#10092, 0) +#10093 = @"C_type$builtin_function_or_method$2__name__$2__set__" +py_cobjects(#10093) +py_cobjecttypes(#10093, #10009) +py_cobject_sources(#10093, 0) +py_cobjectnames(#10093, "__set__") +py_cmembers_versioned(#10092, "__set__", #10093, "2") +#10094 = @"C_type$builtin_function_or_method$2__name__$2__getattribute__" +py_cobjects(#10094) +py_cobjecttypes(#10094, #10009) +py_cobject_sources(#10094, 0) +py_cobjectnames(#10094, "__getattribute__") +py_cmembers_versioned(#10092, "__getattribute__", #10094, "2") +py_cmembers_versioned(#10092, "__objclass__", #10075, "2") +#10095 = @"C_type$builtin_function_or_method$2__name__$2__repr__" +py_cobjects(#10095) +py_cobjecttypes(#10095, #10009) +py_cobject_sources(#10095, 0) +py_cobjectnames(#10095, "__repr__") +py_cmembers_versioned(#10092, "__repr__", #10095, "2") +#10096 = @"C_type$builtin_function_or_method$2__name__$2__get__" +py_cobjects(#10096) +py_cobjecttypes(#10096, #10009) +py_cobject_sources(#10096, 0) +py_cobjectnames(#10096, "__get__") +py_cmembers_versioned(#10092, "__get__", #10096, "2") +py_cmembers_versioned(#10092, "__doc__", #10017, "2") +#10097 = @"C_type$builtin_function_or_method$2__name__$2__delete__" +py_cobjects(#10097) +py_cobjecttypes(#10097, #10009) +py_cobject_sources(#10097, 0) +py_cobjectnames(#10097, "__delete__") +py_cmembers_versioned(#10092, "__delete__", #10097, "2") +py_cobjectnames(#10092, "__name__") +py_cmembers_versioned(#10075, "__name__", #10092, "2") +#10098 = @"C_type$builtin_function_or_method$2__ne__" +py_cobjects(#10098) +py_cobjecttypes(#10098, #10005) +py_cobject_sources(#10098, 0) +py_cobjectnames(#10098, "__ne__") +py_cmembers_versioned(#10075, "__ne__", #10098, "2") +#10099 = @"C_type$builtin_function_or_method$2__repr__" +py_cobjects(#10099) +py_cobjecttypes(#10099, #10005) +py_cobject_sources(#10099, 0) +py_cobjectnames(#10099, "__repr__") +py_cmembers_versioned(#10075, "__repr__", #10099, "2") +#10100 = @"C_type$builtin_function_or_method$2__self__" +py_cobjects(#10100) +py_cobjecttypes(#10100, #10003) +py_cobject_sources(#10100, 0) +#10101 = @"C_type$builtin_function_or_method$2__self__$2__set__" +py_cobjects(#10101) +py_cobjecttypes(#10101, #10009) +py_cobject_sources(#10101, 0) +py_cobjectnames(#10101, "__set__") +py_cmembers_versioned(#10100, "__set__", #10101, "2") +#10102 = @"C_type$builtin_function_or_method$2__self__$2__getattribute__" +py_cobjects(#10102) +py_cobjecttypes(#10102, #10009) +py_cobject_sources(#10102, 0) +py_cobjectnames(#10102, "__getattribute__") +py_cmembers_versioned(#10100, "__getattribute__", #10102, "2") +py_cmembers_versioned(#10100, "__objclass__", #10075, "2") +#10103 = @"C_type$builtin_function_or_method$2__self__$2__repr__" +py_cobjects(#10103) +py_cobjecttypes(#10103, #10009) +py_cobject_sources(#10103, 0) +py_cobjectnames(#10103, "__repr__") +py_cmembers_versioned(#10100, "__repr__", #10103, "2") +#10104 = @"C_type$builtin_function_or_method$2__self__$2__get__" +py_cobjects(#10104) +py_cobjecttypes(#10104, #10009) +py_cobject_sources(#10104, 0) +py_cobjectnames(#10104, "__get__") +py_cmembers_versioned(#10100, "__get__", #10104, "2") +py_cmembers_versioned(#10100, "__doc__", #10017, "2") +#10105 = @"C_type$builtin_function_or_method$2__self__$2__delete__" +py_cobjects(#10105) +py_cobjecttypes(#10105, #10009) +py_cobject_sources(#10105, 0) +py_cobjectnames(#10105, "__delete__") +py_cmembers_versioned(#10100, "__delete__", #10105, "2") +py_cobjectnames(#10100, "__self__") +py_cmembers_versioned(#10075, "__self__", #10100, "2") +py_cmembers_versioned(#10075, ".super.", #10021, "2") +py_cobjectnames(#10075, "builtin_function_or_method") +py_cobjects(#10074) +py_cobjecttypes(#10074, #10075) +py_cobject_sources(#10074, 0) +py_cobjectnames(#10074, "__new__") +py_cmembers_versioned(#10028, "__new__", #10074, "2") +#10106 = @"C_type$bytes$2__repr__" +py_cobjects(#10106) +py_cobjecttypes(#10106, #10005) +py_cobject_sources(#10106, 0) +py_cobjectnames(#10106, "__repr__") +py_cmembers_versioned(#10028, "__repr__", #10106, "2") +#10107 = @"C_type$bytes$2__rmod__" +py_cobjects(#10107) +py_cobjecttypes(#10107, #10005) +py_cobject_sources(#10107, 0) +py_cobjectnames(#10107, "__rmod__") +py_cmembers_versioned(#10028, "__rmod__", #10107, "2") +#10108 = @"C_type$bytes$2__rmul__" +py_cobjects(#10108) +py_cobjecttypes(#10108, #10005) +py_cobject_sources(#10108, 0) +py_cobjectnames(#10108, "__rmul__") +py_cmembers_versioned(#10028, "__rmul__", #10108, "2") +#10109 = @"C_type$bytes$2__sizeof__" +py_cobjects(#10109) +py_cobjecttypes(#10109, #10034) +py_cobject_sources(#10109, 0) +py_cobjectnames(#10109, "__sizeof__") +py_cmembers_versioned(#10028, "__sizeof__", #10109, "2") +#10110 = @"C_type$bytes$2__str__" +py_cobjects(#10110) +py_cobjecttypes(#10110, #10005) +py_cobject_sources(#10110, 0) +py_cobjectnames(#10110, "__str__") +py_cmembers_versioned(#10028, "__str__", #10110, "2") +#10111 = @"C_type$bytes$2_formatter_field_name_split" +py_cobjects(#10111) +py_cobjecttypes(#10111, #10034) +py_cobject_sources(#10111, 0) +py_cobjectnames(#10111, "_formatter_field_name_split") +py_cmembers_versioned(#10028, "_formatter_field_name_split", #10111, "2") +#10112 = @"C_type$bytes$2_formatter_parser" +py_cobjects(#10112) +py_cobjecttypes(#10112, #10034) +py_cobject_sources(#10112, 0) +py_cobjectnames(#10112, "_formatter_parser") +py_cmembers_versioned(#10028, "_formatter_parser", #10112, "2") +#10113 = @"C_type$bytes$2capitalize" +py_cobjects(#10113) +py_cobjecttypes(#10113, #10034) +py_cobject_sources(#10113, 0) +py_cobjectnames(#10113, "capitalize") +py_cmembers_versioned(#10028, "capitalize", #10113, "2") +#10114 = @"C_type$bytes$2center" +py_cobjects(#10114) +py_cobjecttypes(#10114, #10034) +py_cobject_sources(#10114, 0) +py_cobjectnames(#10114, "center") +py_cmembers_versioned(#10028, "center", #10114, "2") +#10115 = @"C_type$bytes$2count" +py_cobjects(#10115) +py_cobjecttypes(#10115, #10034) +py_cobject_sources(#10115, 0) +py_cobjectnames(#10115, "count") +py_cmembers_versioned(#10028, "count", #10115, "2") +#10116 = @"C_type$bytes$2decode" +py_cobjects(#10116) +py_cobjecttypes(#10116, #10034) +py_cobject_sources(#10116, 0) +py_cobjectnames(#10116, "decode") +py_cmembers_versioned(#10028, "decode", #10116, "2") +#10117 = @"C_type$bytes$2encode" +py_cobjects(#10117) +py_cobjecttypes(#10117, #10034) +py_cobject_sources(#10117, 0) +py_cobjectnames(#10117, "encode") +py_cmembers_versioned(#10028, "encode", #10117, "2") +#10118 = @"C_type$bytes$2endswith" +py_cobjects(#10118) +py_cobjecttypes(#10118, #10034) +py_cobject_sources(#10118, 0) +py_cobjectnames(#10118, "endswith") +py_cmembers_versioned(#10028, "endswith", #10118, "2") +#10119 = @"C_type$bytes$2expandtabs" +py_cobjects(#10119) +py_cobjecttypes(#10119, #10034) +py_cobject_sources(#10119, 0) +py_cobjectnames(#10119, "expandtabs") +py_cmembers_versioned(#10028, "expandtabs", #10119, "2") +#10120 = @"C_type$bytes$2find" +py_cobjects(#10120) +py_cobjecttypes(#10120, #10034) +py_cobject_sources(#10120, 0) +py_cobjectnames(#10120, "find") +py_cmembers_versioned(#10028, "find", #10120, "2") +#10121 = @"C_type$bytes$2format" +py_cobjects(#10121) +py_cobjecttypes(#10121, #10034) +py_cobject_sources(#10121, 0) +py_cobjectnames(#10121, "format") +py_cmembers_versioned(#10028, "format", #10121, "2") +#10122 = @"C_type$bytes$2index" +py_cobjects(#10122) +py_cobjecttypes(#10122, #10034) +py_cobject_sources(#10122, 0) +py_cobjectnames(#10122, "index") +py_cmembers_versioned(#10028, "index", #10122, "2") +#10123 = @"C_type$bytes$2isalnum" +py_cobjects(#10123) +py_cobjecttypes(#10123, #10034) +py_cobject_sources(#10123, 0) +py_cobjectnames(#10123, "isalnum") +py_cmembers_versioned(#10028, "isalnum", #10123, "2") +#10124 = @"C_type$bytes$2isalpha" +py_cobjects(#10124) +py_cobjecttypes(#10124, #10034) +py_cobject_sources(#10124, 0) +py_cobjectnames(#10124, "isalpha") +py_cmembers_versioned(#10028, "isalpha", #10124, "2") +#10125 = @"C_type$bytes$2isdigit" +py_cobjects(#10125) +py_cobjecttypes(#10125, #10034) +py_cobject_sources(#10125, 0) +py_cobjectnames(#10125, "isdigit") +py_cmembers_versioned(#10028, "isdigit", #10125, "2") +#10126 = @"C_type$bytes$2islower" +py_cobjects(#10126) +py_cobjecttypes(#10126, #10034) +py_cobject_sources(#10126, 0) +py_cobjectnames(#10126, "islower") +py_cmembers_versioned(#10028, "islower", #10126, "2") +#10127 = @"C_type$bytes$2isspace" +py_cobjects(#10127) +py_cobjecttypes(#10127, #10034) +py_cobject_sources(#10127, 0) +py_cobjectnames(#10127, "isspace") +py_cmembers_versioned(#10028, "isspace", #10127, "2") +#10128 = @"C_type$bytes$2istitle" +py_cobjects(#10128) +py_cobjecttypes(#10128, #10034) +py_cobject_sources(#10128, 0) +py_cobjectnames(#10128, "istitle") +py_cmembers_versioned(#10028, "istitle", #10128, "2") +#10129 = @"C_type$bytes$2isupper" +py_cobjects(#10129) +py_cobjecttypes(#10129, #10034) +py_cobject_sources(#10129, 0) +py_cobjectnames(#10129, "isupper") +py_cmembers_versioned(#10028, "isupper", #10129, "2") +#10130 = @"C_type$bytes$2join" +py_cobjects(#10130) +py_cobjecttypes(#10130, #10034) +py_cobject_sources(#10130, 0) +py_cobjectnames(#10130, "join") +py_cmembers_versioned(#10028, "join", #10130, "2") +#10131 = @"C_type$bytes$2ljust" +py_cobjects(#10131) +py_cobjecttypes(#10131, #10034) +py_cobject_sources(#10131, 0) +py_cobjectnames(#10131, "ljust") +py_cmembers_versioned(#10028, "ljust", #10131, "2") +#10132 = @"C_type$bytes$2lower" +py_cobjects(#10132) +py_cobjecttypes(#10132, #10034) +py_cobject_sources(#10132, 0) +py_cobjectnames(#10132, "lower") +py_cmembers_versioned(#10028, "lower", #10132, "2") +#10133 = @"C_type$bytes$2lstrip" +py_cobjects(#10133) +py_cobjecttypes(#10133, #10034) +py_cobject_sources(#10133, 0) +py_cobjectnames(#10133, "lstrip") +py_cmembers_versioned(#10028, "lstrip", #10133, "2") +#10134 = @"C_type$bytes$2partition" +py_cobjects(#10134) +py_cobjecttypes(#10134, #10034) +py_cobject_sources(#10134, 0) +py_cobjectnames(#10134, "partition") +py_cmembers_versioned(#10028, "partition", #10134, "2") +#10135 = @"C_type$bytes$2replace" +py_cobjects(#10135) +py_cobjecttypes(#10135, #10034) +py_cobject_sources(#10135, 0) +py_cobjectnames(#10135, "replace") +py_cmembers_versioned(#10028, "replace", #10135, "2") +#10136 = @"C_type$bytes$2rfind" +py_cobjects(#10136) +py_cobjecttypes(#10136, #10034) +py_cobject_sources(#10136, 0) +py_cobjectnames(#10136, "rfind") +py_cmembers_versioned(#10028, "rfind", #10136, "2") +#10137 = @"C_type$bytes$2rindex" +py_cobjects(#10137) +py_cobjecttypes(#10137, #10034) +py_cobject_sources(#10137, 0) +py_cobjectnames(#10137, "rindex") +py_cmembers_versioned(#10028, "rindex", #10137, "2") +#10138 = @"C_type$bytes$2rjust" +py_cobjects(#10138) +py_cobjecttypes(#10138, #10034) +py_cobject_sources(#10138, 0) +py_cobjectnames(#10138, "rjust") +py_cmembers_versioned(#10028, "rjust", #10138, "2") +#10139 = @"C_type$bytes$2rpartition" +py_cobjects(#10139) +py_cobjecttypes(#10139, #10034) +py_cobject_sources(#10139, 0) +py_cobjectnames(#10139, "rpartition") +py_cmembers_versioned(#10028, "rpartition", #10139, "2") +#10140 = @"C_type$bytes$2rsplit" +py_cobjects(#10140) +py_cobjecttypes(#10140, #10034) +py_cobject_sources(#10140, 0) +py_cobjectnames(#10140, "rsplit") +py_cmembers_versioned(#10028, "rsplit", #10140, "2") +#10141 = @"C_type$bytes$2rstrip" +py_cobjects(#10141) +py_cobjecttypes(#10141, #10034) +py_cobject_sources(#10141, 0) +py_cobjectnames(#10141, "rstrip") +py_cmembers_versioned(#10028, "rstrip", #10141, "2") +#10142 = @"C_type$bytes$2split" +py_cobjects(#10142) +py_cobjecttypes(#10142, #10034) +py_cobject_sources(#10142, 0) +py_cobjectnames(#10142, "split") +py_cmembers_versioned(#10028, "split", #10142, "2") +#10143 = @"C_type$bytes$2splitlines" +py_cobjects(#10143) +py_cobjecttypes(#10143, #10034) +py_cobject_sources(#10143, 0) +py_cobjectnames(#10143, "splitlines") +py_cmembers_versioned(#10028, "splitlines", #10143, "2") +#10144 = @"C_type$bytes$2startswith" +py_cobjects(#10144) +py_cobjecttypes(#10144, #10034) +py_cobject_sources(#10144, 0) +py_cobjectnames(#10144, "startswith") +py_cmembers_versioned(#10028, "startswith", #10144, "2") +#10145 = @"C_type$bytes$2strip" +py_cobjects(#10145) +py_cobjecttypes(#10145, #10034) +py_cobject_sources(#10145, 0) +py_cobjectnames(#10145, "strip") +py_cmembers_versioned(#10028, "strip", #10145, "2") +#10146 = @"C_type$bytes$2swapcase" +py_cobjects(#10146) +py_cobjecttypes(#10146, #10034) +py_cobject_sources(#10146, 0) +py_cobjectnames(#10146, "swapcase") +py_cmembers_versioned(#10028, "swapcase", #10146, "2") +#10147 = @"C_type$bytes$2title" +py_cobjects(#10147) +py_cobjecttypes(#10147, #10034) +py_cobject_sources(#10147, 0) +py_cobjectnames(#10147, "title") +py_cmembers_versioned(#10028, "title", #10147, "2") +#10148 = @"C_type$bytes$2translate" +py_cobjects(#10148) +py_cobjecttypes(#10148, #10034) +py_cobject_sources(#10148, 0) +py_cobjectnames(#10148, "translate") +py_cmembers_versioned(#10028, "translate", #10148, "2") +#10149 = @"C_type$bytes$2upper" +py_cobjects(#10149) +py_cobjecttypes(#10149, #10034) +py_cobject_sources(#10149, 0) +py_cobjectnames(#10149, "upper") +py_cmembers_versioned(#10028, "upper", #10149, "2") +#10150 = @"C_type$bytes$2zfill" +py_cobjects(#10150) +py_cobjecttypes(#10150, #10034) +py_cobject_sources(#10150, 0) +py_cobjectnames(#10150, "zfill") +py_cmembers_versioned(#10028, "zfill", #10150, "2") +#10151 = @"C_type$basestring" +py_cobjects(#10151) +py_cobjecttypes(#10151, #10001) +py_cobject_sources(#10151, 0) +#10152 = @"C_bytes$e9d1758b62b29cb40786aaa1678574a2917ac3fb" +py_cobjects(#10152) +py_cobjecttypes(#10152, #10028) +py_cobject_sources(#10152, 0) +py_cobjectnames(#10152, "b'Type basestring cannot be instantiated; it is the base for str and unicode.'") +py_cmembers_versioned(#10151, "__doc__", #10152, "2") +#10153 = @"C_type$basestring$2__new__" +py_cobjects(#10153) +py_cobjecttypes(#10153, #10075) +py_cobject_sources(#10153, 0) +py_cobjectnames(#10153, "__new__") +py_cmembers_versioned(#10151, "__new__", #10153, "2") +py_cmembers_versioned(#10151, ".super.", #10021, "2") +py_cobjectnames(#10151, "basestring") +py_cmembers_versioned(#10028, ".super.", #10151, "2") +py_cobjectnames(#10028, "bytes") +py_cobjects(#10027) +py_cobjecttypes(#10027, #10028) +py_cobject_sources(#10027, 0) +py_cobjectnames(#10027, "b'the object's class'") +py_cmembers_versioned(#10022, "__doc__", #10027, "2") +#10154 = @"C_type$object$2__class__$2__delete__" +py_cobjects(#10154) +py_cobjecttypes(#10154, #10009) +py_cobject_sources(#10154, 0) +py_cobjectnames(#10154, "__delete__") +py_cmembers_versioned(#10022, "__delete__", #10154, "2") +py_cobjectnames(#10022, "__class__") +py_cmembers_versioned(#10021, "__class__", #10022, "2") +#10155 = @"C_type$object$2__delattr__" +py_cobjects(#10155) +py_cobjecttypes(#10155, #10005) +py_cobject_sources(#10155, 0) +py_cobjectnames(#10155, "__delattr__") +py_cmembers_versioned(#10021, "__delattr__", #10155, "2") +#10156 = @"C_bytes$ace39eec53ca8b6a7c9df63c8901df2bf11d4e31" +py_cobjects(#10156) +py_cobjecttypes(#10156, #10028) +py_cobject_sources(#10156, 0) +py_cobjectnames(#10156, "b'The most base type'") +py_cmembers_versioned(#10021, "__doc__", #10156, "2") +#10157 = @"C_type$object$2__format__" +py_cobjects(#10157) +py_cobjecttypes(#10157, #10034) +py_cobject_sources(#10157, 0) +py_cobjectnames(#10157, "__format__") +py_cmembers_versioned(#10021, "__format__", #10157, "2") +#10158 = @"C_type$object$2__getattribute__" +py_cobjects(#10158) +py_cobjecttypes(#10158, #10005) +py_cobject_sources(#10158, 0) +py_cobjectnames(#10158, "__getattribute__") +py_cmembers_versioned(#10021, "__getattribute__", #10158, "2") +#10159 = @"C_type$object$2__hash__" +py_cobjects(#10159) +py_cobjecttypes(#10159, #10005) +py_cobject_sources(#10159, 0) +py_cobjectnames(#10159, "__hash__") +py_cmembers_versioned(#10021, "__hash__", #10159, "2") +#10160 = @"C_type$object$2__init__" +py_cobjects(#10160) +py_cobjecttypes(#10160, #10005) +py_cobject_sources(#10160, 0) +py_cobjectnames(#10160, "__init__") +py_cmembers_versioned(#10021, "__init__", #10160, "2") +#10161 = @"C_type$object$2__new__" +py_cobjects(#10161) +py_cobjecttypes(#10161, #10075) +py_cobject_sources(#10161, 0) +py_cobjectnames(#10161, "__new__") +py_cmembers_versioned(#10021, "__new__", #10161, "2") +#10162 = @"C_type$object$2__reduce__" +py_cobjects(#10162) +py_cobjecttypes(#10162, #10034) +py_cobject_sources(#10162, 0) +py_cobjectnames(#10162, "__reduce__") +py_cmembers_versioned(#10021, "__reduce__", #10162, "2") +#10163 = @"C_type$object$2__reduce_ex__" +py_cobjects(#10163) +py_cobjecttypes(#10163, #10034) +py_cobject_sources(#10163, 0) +py_cobjectnames(#10163, "__reduce_ex__") +py_cmembers_versioned(#10021, "__reduce_ex__", #10163, "2") +#10164 = @"C_type$object$2__repr__" +py_cobjects(#10164) +py_cobjecttypes(#10164, #10005) +py_cobject_sources(#10164, 0) +py_cobjectnames(#10164, "__repr__") +py_cmembers_versioned(#10021, "__repr__", #10164, "2") +#10165 = @"C_type$object$2__setattr__" +py_cobjects(#10165) +py_cobjecttypes(#10165, #10005) +py_cobject_sources(#10165, 0) +py_cobjectnames(#10165, "__setattr__") +py_cmembers_versioned(#10021, "__setattr__", #10165, "2") +#10166 = @"C_type$object$2__sizeof__" +py_cobjects(#10166) +py_cobjecttypes(#10166, #10034) +py_cobject_sources(#10166, 0) +py_cobjectnames(#10166, "__sizeof__") +py_cmembers_versioned(#10021, "__sizeof__", #10166, "2") +#10167 = @"C_type$object$2__str__" +py_cobjects(#10167) +py_cobjecttypes(#10167, #10005) +py_cobject_sources(#10167, 0) +py_cobjectnames(#10167, "__str__") +py_cmembers_versioned(#10021, "__str__", #10167, "2") +#10168 = @"C_type$object$2__subclasshook__" +#10169 = @"C_type$classmethod_descriptor" +py_cobjects(#10169) +py_cobjecttypes(#10169, #10001) +py_cobject_sources(#10169, 0) +#10170 = @"C_type$classmethod_descriptor$2__call__" +py_cobjects(#10170) +py_cobjecttypes(#10170, #10005) +py_cobject_sources(#10170, 0) +py_cobjectnames(#10170, "__call__") +py_cmembers_versioned(#10169, "__call__", #10170, "2") +#10171 = @"C_type$classmethod_descriptor$2__doc__" +py_cobjects(#10171) +py_cobjecttypes(#10171, #10003) +py_cobject_sources(#10171, 0) +#10172 = @"C_type$classmethod_descriptor$2__doc__$2__set__" +py_cobjects(#10172) +py_cobjecttypes(#10172, #10009) +py_cobject_sources(#10172, 0) +py_cobjectnames(#10172, "__set__") +py_cmembers_versioned(#10171, "__set__", #10172, "2") +#10173 = @"C_type$classmethod_descriptor$2__doc__$2__getattribute__" +py_cobjects(#10173) +py_cobjecttypes(#10173, #10009) +py_cobject_sources(#10173, 0) +py_cobjectnames(#10173, "__getattribute__") +py_cmembers_versioned(#10171, "__getattribute__", #10173, "2") +py_cmembers_versioned(#10171, "__objclass__", #10169, "2") +#10174 = @"C_type$classmethod_descriptor$2__doc__$2__repr__" +py_cobjects(#10174) +py_cobjecttypes(#10174, #10009) +py_cobject_sources(#10174, 0) +py_cobjectnames(#10174, "__repr__") +py_cmembers_versioned(#10171, "__repr__", #10174, "2") +#10175 = @"C_type$classmethod_descriptor$2__doc__$2__get__" +py_cobjects(#10175) +py_cobjecttypes(#10175, #10009) +py_cobject_sources(#10175, 0) +py_cobjectnames(#10175, "__get__") +py_cmembers_versioned(#10171, "__get__", #10175, "2") +py_cmembers_versioned(#10171, "__doc__", #10017, "2") +#10176 = @"C_type$classmethod_descriptor$2__doc__$2__delete__" +py_cobjects(#10176) +py_cobjecttypes(#10176, #10009) +py_cobject_sources(#10176, 0) +py_cobjectnames(#10176, "__delete__") +py_cmembers_versioned(#10171, "__delete__", #10176, "2") +py_cobjectnames(#10171, "__doc__") +py_cmembers_versioned(#10169, "__doc__", #10171, "2") +#10177 = @"C_type$classmethod_descriptor$2__get__" +py_cobjects(#10177) +py_cobjecttypes(#10177, #10005) +py_cobject_sources(#10177, 0) +py_cobjectnames(#10177, "__get__") +py_cmembers_versioned(#10169, "__get__", #10177, "2") +#10178 = @"C_type$classmethod_descriptor$2__getattribute__" +py_cobjects(#10178) +py_cobjecttypes(#10178, #10005) +py_cobject_sources(#10178, 0) +py_cobjectnames(#10178, "__getattribute__") +py_cmembers_versioned(#10169, "__getattribute__", #10178, "2") +#10179 = @"C_type$classmethod_descriptor$2__name__" +py_cobjects(#10179) +py_cobjecttypes(#10179, #10045) +py_cobject_sources(#10179, 0) +py_cobjectnames(#10179, "__name__") +py_cmembers_versioned(#10169, "__name__", #10179, "2") +#10180 = @"C_type$classmethod_descriptor$2__objclass__" +py_cobjects(#10180) +py_cobjecttypes(#10180, #10045) +py_cobject_sources(#10180, 0) +py_cobjectnames(#10180, "__objclass__") +py_cmembers_versioned(#10169, "__objclass__", #10180, "2") +#10181 = @"C_type$classmethod_descriptor$2__repr__" +py_cobjects(#10181) +py_cobjecttypes(#10181, #10005) +py_cobject_sources(#10181, 0) +py_cobjectnames(#10181, "__repr__") +py_cmembers_versioned(#10169, "__repr__", #10181, "2") +py_cmembers_versioned(#10169, ".super.", #10021, "2") +py_cobjectnames(#10169, "classmethod_descriptor") +py_cobjects(#10168) +py_cobjecttypes(#10168, #10169) +py_cobject_sources(#10168, 0) +py_cobjectnames(#10168, "__subclasshook__") +py_cmembers_versioned(#10021, "__subclasshook__", #10168, "2") +py_cobjectnames(#10021, "object") +py_cmembers_versioned(#10018, ".super.", #10021, "2") +py_cobjectnames(#10018, "NoneType") +py_cobjects(#10017) +py_cobjecttypes(#10017, #10018) +py_cobject_sources(#10017, 0) +py_cobjectnames(#10017, "None") +py_cmembers_versioned(#10012, "__doc__", #10017, "2") +#10182 = @"C_type$method-wrapper$2__doc__$2__delete__" +py_cobjects(#10182) +py_cobjecttypes(#10182, #10009) +py_cobject_sources(#10182, 0) +py_cobjectnames(#10182, "__delete__") +py_cmembers_versioned(#10012, "__delete__", #10182, "2") +py_cobjectnames(#10012, "__doc__") +py_cmembers_versioned(#10009, "__doc__", #10012, "2") +#10183 = @"C_type$method-wrapper$2__getattribute__" +py_cobjects(#10183) +py_cobjecttypes(#10183, #10005) +py_cobject_sources(#10183, 0) +py_cobjectnames(#10183, "__getattribute__") +py_cmembers_versioned(#10009, "__getattribute__", #10183, "2") +#10184 = @"C_type$method-wrapper$2__hash__" +py_cobjects(#10184) +py_cobjecttypes(#10184, #10005) +py_cobject_sources(#10184, 0) +py_cobjectnames(#10184, "__hash__") +py_cmembers_versioned(#10009, "__hash__", #10184, "2") +#10185 = @"C_type$method-wrapper$2__name__" +py_cobjects(#10185) +py_cobjecttypes(#10185, #10003) +py_cobject_sources(#10185, 0) +#10186 = @"C_type$method-wrapper$2__name__$2__set__" +py_cobjects(#10186) +py_cobjecttypes(#10186, #10009) +py_cobject_sources(#10186, 0) +py_cobjectnames(#10186, "__set__") +py_cmembers_versioned(#10185, "__set__", #10186, "2") +#10187 = @"C_type$method-wrapper$2__name__$2__getattribute__" +py_cobjects(#10187) +py_cobjecttypes(#10187, #10009) +py_cobject_sources(#10187, 0) +py_cobjectnames(#10187, "__getattribute__") +py_cmembers_versioned(#10185, "__getattribute__", #10187, "2") +py_cmembers_versioned(#10185, "__objclass__", #10009, "2") +#10188 = @"C_type$method-wrapper$2__name__$2__repr__" +py_cobjects(#10188) +py_cobjecttypes(#10188, #10009) +py_cobject_sources(#10188, 0) +py_cobjectnames(#10188, "__repr__") +py_cmembers_versioned(#10185, "__repr__", #10188, "2") +#10189 = @"C_type$method-wrapper$2__name__$2__get__" +py_cobjects(#10189) +py_cobjecttypes(#10189, #10009) +py_cobject_sources(#10189, 0) +py_cobjectnames(#10189, "__get__") +py_cmembers_versioned(#10185, "__get__", #10189, "2") +py_cmembers_versioned(#10185, "__doc__", #10017, "2") +#10190 = @"C_type$method-wrapper$2__name__$2__delete__" +py_cobjects(#10190) +py_cobjecttypes(#10190, #10009) +py_cobject_sources(#10190, 0) +py_cobjectnames(#10190, "__delete__") +py_cmembers_versioned(#10185, "__delete__", #10190, "2") +py_cobjectnames(#10185, "__name__") +py_cmembers_versioned(#10009, "__name__", #10185, "2") +#10191 = @"C_type$method-wrapper$2__objclass__" +py_cobjects(#10191) +py_cobjecttypes(#10191, #10003) +py_cobject_sources(#10191, 0) +#10192 = @"C_type$method-wrapper$2__objclass__$2__set__" +py_cobjects(#10192) +py_cobjecttypes(#10192, #10009) +py_cobject_sources(#10192, 0) +py_cobjectnames(#10192, "__set__") +py_cmembers_versioned(#10191, "__set__", #10192, "2") +#10193 = @"C_type$method-wrapper$2__objclass__$2__getattribute__" +py_cobjects(#10193) +py_cobjecttypes(#10193, #10009) +py_cobject_sources(#10193, 0) +py_cobjectnames(#10193, "__getattribute__") +py_cmembers_versioned(#10191, "__getattribute__", #10193, "2") +py_cmembers_versioned(#10191, "__objclass__", #10009, "2") +#10194 = @"C_type$method-wrapper$2__objclass__$2__repr__" +py_cobjects(#10194) +py_cobjecttypes(#10194, #10009) +py_cobject_sources(#10194, 0) +py_cobjectnames(#10194, "__repr__") +py_cmembers_versioned(#10191, "__repr__", #10194, "2") +#10195 = @"C_type$method-wrapper$2__objclass__$2__get__" +py_cobjects(#10195) +py_cobjecttypes(#10195, #10009) +py_cobject_sources(#10195, 0) +py_cobjectnames(#10195, "__get__") +py_cmembers_versioned(#10191, "__get__", #10195, "2") +py_cmembers_versioned(#10191, "__doc__", #10017, "2") +#10196 = @"C_type$method-wrapper$2__objclass__$2__delete__" +py_cobjects(#10196) +py_cobjecttypes(#10196, #10009) +py_cobject_sources(#10196, 0) +py_cobjectnames(#10196, "__delete__") +py_cmembers_versioned(#10191, "__delete__", #10196, "2") +py_cobjectnames(#10191, "__objclass__") +py_cmembers_versioned(#10009, "__objclass__", #10191, "2") +#10197 = @"C_type$method-wrapper$2__repr__" +py_cobjects(#10197) +py_cobjecttypes(#10197, #10005) +py_cobject_sources(#10197, 0) +py_cobjectnames(#10197, "__repr__") +py_cmembers_versioned(#10009, "__repr__", #10197, "2") +#10198 = @"C_type$method-wrapper$2__self__" +py_cobjects(#10198) +py_cobjecttypes(#10198, #10045) +py_cobject_sources(#10198, 0) +py_cobjectnames(#10198, "__self__") +py_cmembers_versioned(#10009, "__self__", #10198, "2") +py_cmembers_versioned(#10009, ".super.", #10021, "2") +py_cobjectnames(#10009, "method-wrapper") +py_cobjects(#10008) +py_cobjecttypes(#10008, #10009) +py_cobject_sources(#10008, 0) +py_cobjectnames(#10008, "__set__") +py_cmembers_versioned(#10007, "__set__", #10008, "2") +#10199 = @"C_type$wrapper_descriptor$2__doc__$2__getattribute__" +py_cobjects(#10199) +py_cobjecttypes(#10199, #10009) +py_cobject_sources(#10199, 0) +py_cobjectnames(#10199, "__getattribute__") +py_cmembers_versioned(#10007, "__getattribute__", #10199, "2") +py_cmembers_versioned(#10007, "__objclass__", #10005, "2") +#10200 = @"C_type$wrapper_descriptor$2__doc__$2__repr__" +py_cobjects(#10200) +py_cobjecttypes(#10200, #10009) +py_cobject_sources(#10200, 0) +py_cobjectnames(#10200, "__repr__") +py_cmembers_versioned(#10007, "__repr__", #10200, "2") +#10201 = @"C_type$wrapper_descriptor$2__doc__$2__get__" +py_cobjects(#10201) +py_cobjecttypes(#10201, #10009) +py_cobject_sources(#10201, 0) +py_cobjectnames(#10201, "__get__") +py_cmembers_versioned(#10007, "__get__", #10201, "2") +py_cmembers_versioned(#10007, "__doc__", #10017, "2") +#10202 = @"C_type$wrapper_descriptor$2__doc__$2__delete__" +py_cobjects(#10202) +py_cobjecttypes(#10202, #10009) +py_cobject_sources(#10202, 0) +py_cobjectnames(#10202, "__delete__") +py_cmembers_versioned(#10007, "__delete__", #10202, "2") +py_cobjectnames(#10007, "__doc__") +py_cmembers_versioned(#10005, "__doc__", #10007, "2") +#10203 = @"C_type$wrapper_descriptor$2__get__" +py_cobjects(#10203) +py_cobjecttypes(#10203, #10005) +py_cobject_sources(#10203, 0) +py_cobjectnames(#10203, "__get__") +py_cmembers_versioned(#10005, "__get__", #10203, "2") +#10204 = @"C_type$wrapper_descriptor$2__getattribute__" +py_cobjects(#10204) +py_cobjecttypes(#10204, #10005) +py_cobject_sources(#10204, 0) +py_cobjectnames(#10204, "__getattribute__") +py_cmembers_versioned(#10005, "__getattribute__", #10204, "2") +#10205 = @"C_type$wrapper_descriptor$2__name__" +py_cobjects(#10205) +py_cobjecttypes(#10205, #10045) +py_cobject_sources(#10205, 0) +py_cobjectnames(#10205, "__name__") +py_cmembers_versioned(#10005, "__name__", #10205, "2") +#10206 = @"C_type$wrapper_descriptor$2__objclass__" +py_cobjects(#10206) +py_cobjecttypes(#10206, #10045) +py_cobject_sources(#10206, 0) +py_cobjectnames(#10206, "__objclass__") +py_cmembers_versioned(#10005, "__objclass__", #10206, "2") +#10207 = @"C_type$wrapper_descriptor$2__repr__" +py_cobjects(#10207) +py_cobjecttypes(#10207, #10005) +py_cobject_sources(#10207, 0) +py_cobjectnames(#10207, "__repr__") +py_cmembers_versioned(#10005, "__repr__", #10207, "2") +py_cmembers_versioned(#10005, ".super.", #10021, "2") +py_cobjectnames(#10005, "wrapper_descriptor") +py_cobjects(#10004) +py_cobjecttypes(#10004, #10005) +py_cobject_sources(#10004, 0) +py_cobjectnames(#10004, "__delete__") +py_cmembers_versioned(#10003, "__delete__", #10004, "2") +#10208 = @"C_type$getset_descriptor$2__doc__" +py_cobjects(#10208) +py_cobjecttypes(#10208, #10003) +py_cobject_sources(#10208, 0) +#10209 = @"C_type$getset_descriptor$2__doc__$2__set__" +py_cobjects(#10209) +py_cobjecttypes(#10209, #10009) +py_cobject_sources(#10209, 0) +py_cobjectnames(#10209, "__set__") +py_cmembers_versioned(#10208, "__set__", #10209, "2") +#10210 = @"C_type$getset_descriptor$2__doc__$2__getattribute__" +py_cobjects(#10210) +py_cobjecttypes(#10210, #10009) +py_cobject_sources(#10210, 0) +py_cobjectnames(#10210, "__getattribute__") +py_cmembers_versioned(#10208, "__getattribute__", #10210, "2") +py_cmembers_versioned(#10208, "__objclass__", #10003, "2") +#10211 = @"C_type$getset_descriptor$2__doc__$2__repr__" +py_cobjects(#10211) +py_cobjecttypes(#10211, #10009) +py_cobject_sources(#10211, 0) +py_cobjectnames(#10211, "__repr__") +py_cmembers_versioned(#10208, "__repr__", #10211, "2") +#10212 = @"C_type$getset_descriptor$2__doc__$2__get__" +py_cobjects(#10212) +py_cobjecttypes(#10212, #10009) +py_cobject_sources(#10212, 0) +py_cobjectnames(#10212, "__get__") +py_cmembers_versioned(#10208, "__get__", #10212, "2") +py_cmembers_versioned(#10208, "__doc__", #10017, "2") +#10213 = @"C_type$getset_descriptor$2__doc__$2__delete__" +py_cobjects(#10213) +py_cobjecttypes(#10213, #10009) +py_cobject_sources(#10213, 0) +py_cobjectnames(#10213, "__delete__") +py_cmembers_versioned(#10208, "__delete__", #10213, "2") +py_cobjectnames(#10208, "__doc__") +py_cmembers_versioned(#10003, "__doc__", #10208, "2") +#10214 = @"C_type$getset_descriptor$2__get__" +py_cobjects(#10214) +py_cobjecttypes(#10214, #10005) +py_cobject_sources(#10214, 0) +py_cobjectnames(#10214, "__get__") +py_cmembers_versioned(#10003, "__get__", #10214, "2") +#10215 = @"C_type$getset_descriptor$2__getattribute__" +py_cobjects(#10215) +py_cobjecttypes(#10215, #10005) +py_cobject_sources(#10215, 0) +py_cobjectnames(#10215, "__getattribute__") +py_cmembers_versioned(#10003, "__getattribute__", #10215, "2") +#10216 = @"C_type$getset_descriptor$2__name__" +py_cobjects(#10216) +py_cobjecttypes(#10216, #10045) +py_cobject_sources(#10216, 0) +py_cobjectnames(#10216, "__name__") +py_cmembers_versioned(#10003, "__name__", #10216, "2") +#10217 = @"C_type$getset_descriptor$2__objclass__" +py_cobjects(#10217) +py_cobjecttypes(#10217, #10045) +py_cobject_sources(#10217, 0) +py_cobjectnames(#10217, "__objclass__") +py_cmembers_versioned(#10003, "__objclass__", #10217, "2") +#10218 = @"C_type$getset_descriptor$2__repr__" +py_cobjects(#10218) +py_cobjecttypes(#10218, #10005) +py_cobject_sources(#10218, 0) +py_cobjectnames(#10218, "__repr__") +py_cmembers_versioned(#10003, "__repr__", #10218, "2") +#10219 = @"C_type$getset_descriptor$2__set__" +py_cobjects(#10219) +py_cobjecttypes(#10219, #10005) +py_cobject_sources(#10219, 0) +py_cobjectnames(#10219, "__set__") +py_cmembers_versioned(#10003, "__set__", #10219, "2") +py_cmembers_versioned(#10003, ".super.", #10021, "2") +py_cobjectnames(#10003, "getset_descriptor") +py_cobjects(#10002) +py_cobjecttypes(#10002, #10003) +py_cobject_sources(#10002, 0) +#10220 = @"C_type$type$2__abstractmethods__$2__set__" +py_cobjects(#10220) +py_cobjecttypes(#10220, #10009) +py_cobject_sources(#10220, 0) +py_cobjectnames(#10220, "__set__") +py_cmembers_versioned(#10002, "__set__", #10220, "2") +#10221 = @"C_type$type$2__abstractmethods__$2__getattribute__" +py_cobjects(#10221) +py_cobjecttypes(#10221, #10009) +py_cobject_sources(#10221, 0) +py_cobjectnames(#10221, "__getattribute__") +py_cmembers_versioned(#10002, "__getattribute__", #10221, "2") +py_cmembers_versioned(#10002, "__objclass__", #10001, "2") +#10222 = @"C_type$type$2__abstractmethods__$2__repr__" +py_cobjects(#10222) +py_cobjecttypes(#10222, #10009) +py_cobject_sources(#10222, 0) +py_cobjectnames(#10222, "__repr__") +py_cmembers_versioned(#10002, "__repr__", #10222, "2") +#10223 = @"C_type$type$2__abstractmethods__$2__get__" +py_cobjects(#10223) +py_cobjecttypes(#10223, #10009) +py_cobject_sources(#10223, 0) +py_cobjectnames(#10223, "__get__") +py_cmembers_versioned(#10002, "__get__", #10223, "2") +py_cmembers_versioned(#10002, "__doc__", #10017, "2") +#10224 = @"C_type$type$2__abstractmethods__$2__delete__" +py_cobjects(#10224) +py_cobjecttypes(#10224, #10009) +py_cobject_sources(#10224, 0) +py_cobjectnames(#10224, "__delete__") +py_cmembers_versioned(#10002, "__delete__", #10224, "2") +py_cobjectnames(#10002, "__abstractmethods__") +py_cmembers_versioned(#10001, "__abstractmethods__", #10002, "2") +#10225 = @"C_type$type$2__base__" +py_cobjects(#10225) +py_cobjecttypes(#10225, #10045) +py_cobject_sources(#10225, 0) +py_cobjectnames(#10225, "__base__") +py_cmembers_versioned(#10001, "__base__", #10225, "2") +#10226 = @"C_type$type$2__bases__" +py_cobjects(#10226) +py_cobjecttypes(#10226, #10003) +py_cobject_sources(#10226, 0) +#10227 = @"C_type$type$2__bases__$2__set__" +py_cobjects(#10227) +py_cobjecttypes(#10227, #10009) +py_cobject_sources(#10227, 0) +py_cobjectnames(#10227, "__set__") +py_cmembers_versioned(#10226, "__set__", #10227, "2") +#10228 = @"C_type$type$2__bases__$2__getattribute__" +py_cobjects(#10228) +py_cobjecttypes(#10228, #10009) +py_cobject_sources(#10228, 0) +py_cobjectnames(#10228, "__getattribute__") +py_cmembers_versioned(#10226, "__getattribute__", #10228, "2") +py_cmembers_versioned(#10226, "__objclass__", #10001, "2") +#10229 = @"C_type$type$2__bases__$2__repr__" +py_cobjects(#10229) +py_cobjecttypes(#10229, #10009) +py_cobject_sources(#10229, 0) +py_cobjectnames(#10229, "__repr__") +py_cmembers_versioned(#10226, "__repr__", #10229, "2") +#10230 = @"C_type$type$2__bases__$2__get__" +py_cobjects(#10230) +py_cobjecttypes(#10230, #10009) +py_cobject_sources(#10230, 0) +py_cobjectnames(#10230, "__get__") +py_cmembers_versioned(#10226, "__get__", #10230, "2") +py_cmembers_versioned(#10226, "__doc__", #10017, "2") +#10231 = @"C_type$type$2__bases__$2__delete__" +py_cobjects(#10231) +py_cobjecttypes(#10231, #10009) +py_cobject_sources(#10231, 0) +py_cobjectnames(#10231, "__delete__") +py_cmembers_versioned(#10226, "__delete__", #10231, "2") +py_cobjectnames(#10226, "__bases__") +py_cmembers_versioned(#10001, "__bases__", #10226, "2") +#10232 = @"C_type$type$2__basicsize__" +py_cobjects(#10232) +py_cobjecttypes(#10232, #10045) +py_cobject_sources(#10232, 0) +py_cobjectnames(#10232, "__basicsize__") +py_cmembers_versioned(#10001, "__basicsize__", #10232, "2") +#10233 = @"C_type$type$2__call__" +py_cobjects(#10233) +py_cobjecttypes(#10233, #10005) +py_cobject_sources(#10233, 0) +py_cobjectnames(#10233, "__call__") +py_cmembers_versioned(#10001, "__call__", #10233, "2") +#10234 = @"C_type$type$2__delattr__" +py_cobjects(#10234) +py_cobjecttypes(#10234, #10005) +py_cobject_sources(#10234, 0) +py_cobjectnames(#10234, "__delattr__") +py_cmembers_versioned(#10001, "__delattr__", #10234, "2") +#10235 = @"C_type$type$2__dict__" +py_cobjects(#10235) +py_cobjecttypes(#10235, #10003) +py_cobject_sources(#10235, 0) +#10236 = @"C_type$type$2__dict__$2__set__" +py_cobjects(#10236) +py_cobjecttypes(#10236, #10009) +py_cobject_sources(#10236, 0) +py_cobjectnames(#10236, "__set__") +py_cmembers_versioned(#10235, "__set__", #10236, "2") +#10237 = @"C_type$type$2__dict__$2__getattribute__" +py_cobjects(#10237) +py_cobjecttypes(#10237, #10009) +py_cobject_sources(#10237, 0) +py_cobjectnames(#10237, "__getattribute__") +py_cmembers_versioned(#10235, "__getattribute__", #10237, "2") +py_cmembers_versioned(#10235, "__objclass__", #10001, "2") +#10238 = @"C_type$type$2__dict__$2__repr__" +py_cobjects(#10238) +py_cobjecttypes(#10238, #10009) +py_cobject_sources(#10238, 0) +py_cobjectnames(#10238, "__repr__") +py_cmembers_versioned(#10235, "__repr__", #10238, "2") +#10239 = @"C_type$type$2__dict__$2__get__" +py_cobjects(#10239) +py_cobjecttypes(#10239, #10009) +py_cobject_sources(#10239, 0) +py_cobjectnames(#10239, "__get__") +py_cmembers_versioned(#10235, "__get__", #10239, "2") +py_cmembers_versioned(#10235, "__doc__", #10017, "2") +#10240 = @"C_type$type$2__dict__$2__delete__" +py_cobjects(#10240) +py_cobjecttypes(#10240, #10009) +py_cobject_sources(#10240, 0) +py_cobjectnames(#10240, "__delete__") +py_cmembers_versioned(#10235, "__delete__", #10240, "2") +py_cobjectnames(#10235, "__dict__") +py_cmembers_versioned(#10001, "__dict__", #10235, "2") +#10241 = @"C_type$type$2__dictoffset__" +py_cobjects(#10241) +py_cobjecttypes(#10241, #10045) +py_cobject_sources(#10241, 0) +py_cobjectnames(#10241, "__dictoffset__") +py_cmembers_versioned(#10001, "__dictoffset__", #10241, "2") +#10242 = @"C_type$type$2__doc__" +py_cobjects(#10242) +py_cobjecttypes(#10242, #10003) +py_cobject_sources(#10242, 0) +#10243 = @"C_type$type$2__doc__$2__set__" +py_cobjects(#10243) +py_cobjecttypes(#10243, #10009) +py_cobject_sources(#10243, 0) +py_cobjectnames(#10243, "__set__") +py_cmembers_versioned(#10242, "__set__", #10243, "2") +#10244 = @"C_type$type$2__doc__$2__getattribute__" +py_cobjects(#10244) +py_cobjecttypes(#10244, #10009) +py_cobject_sources(#10244, 0) +py_cobjectnames(#10244, "__getattribute__") +py_cmembers_versioned(#10242, "__getattribute__", #10244, "2") +py_cmembers_versioned(#10242, "__objclass__", #10001, "2") +#10245 = @"C_type$type$2__doc__$2__repr__" +py_cobjects(#10245) +py_cobjecttypes(#10245, #10009) +py_cobject_sources(#10245, 0) +py_cobjectnames(#10245, "__repr__") +py_cmembers_versioned(#10242, "__repr__", #10245, "2") +#10246 = @"C_type$type$2__doc__$2__get__" +py_cobjects(#10246) +py_cobjecttypes(#10246, #10009) +py_cobject_sources(#10246, 0) +py_cobjectnames(#10246, "__get__") +py_cmembers_versioned(#10242, "__get__", #10246, "2") +py_cmembers_versioned(#10242, "__doc__", #10017, "2") +#10247 = @"C_type$type$2__doc__$2__delete__" +py_cobjects(#10247) +py_cobjecttypes(#10247, #10009) +py_cobject_sources(#10247, 0) +py_cobjectnames(#10247, "__delete__") +py_cmembers_versioned(#10242, "__delete__", #10247, "2") +py_cobjectnames(#10242, "__doc__") +py_cmembers_versioned(#10001, "__doc__", #10242, "2") +#10248 = @"C_type$type$2__eq__" +py_cobjects(#10248) +py_cobjecttypes(#10248, #10005) +py_cobject_sources(#10248, 0) +py_cobjectnames(#10248, "__eq__") +py_cmembers_versioned(#10001, "__eq__", #10248, "2") +#10249 = @"C_type$type$2__flags__" +py_cobjects(#10249) +py_cobjecttypes(#10249, #10045) +py_cobject_sources(#10249, 0) +py_cobjectnames(#10249, "__flags__") +py_cmembers_versioned(#10001, "__flags__", #10249, "2") +#10250 = @"C_type$type$2__ge__" +py_cobjects(#10250) +py_cobjecttypes(#10250, #10005) +py_cobject_sources(#10250, 0) +py_cobjectnames(#10250, "__ge__") +py_cmembers_versioned(#10001, "__ge__", #10250, "2") +#10251 = @"C_type$type$2__getattribute__" +py_cobjects(#10251) +py_cobjecttypes(#10251, #10005) +py_cobject_sources(#10251, 0) +py_cobjectnames(#10251, "__getattribute__") +py_cmembers_versioned(#10001, "__getattribute__", #10251, "2") +#10252 = @"C_type$type$2__gt__" +py_cobjects(#10252) +py_cobjecttypes(#10252, #10005) +py_cobject_sources(#10252, 0) +py_cobjectnames(#10252, "__gt__") +py_cmembers_versioned(#10001, "__gt__", #10252, "2") +#10253 = @"C_type$type$2__hash__" +py_cobjects(#10253) +py_cobjecttypes(#10253, #10005) +py_cobject_sources(#10253, 0) +py_cobjectnames(#10253, "__hash__") +py_cmembers_versioned(#10001, "__hash__", #10253, "2") +#10254 = @"C_type$type$2__init__" +py_cobjects(#10254) +py_cobjecttypes(#10254, #10005) +py_cobject_sources(#10254, 0) +py_cobjectnames(#10254, "__init__") +py_cmembers_versioned(#10001, "__init__", #10254, "2") +#10255 = @"C_type$type$2__instancecheck__" +py_cobjects(#10255) +py_cobjecttypes(#10255, #10034) +py_cobject_sources(#10255, 0) +py_cobjectnames(#10255, "__instancecheck__") +py_cmembers_versioned(#10001, "__instancecheck__", #10255, "2") +#10256 = @"C_type$type$2__itemsize__" +py_cobjects(#10256) +py_cobjecttypes(#10256, #10045) +py_cobject_sources(#10256, 0) +py_cobjectnames(#10256, "__itemsize__") +py_cmembers_versioned(#10001, "__itemsize__", #10256, "2") +#10257 = @"C_type$type$2__le__" +py_cobjects(#10257) +py_cobjecttypes(#10257, #10005) +py_cobject_sources(#10257, 0) +py_cobjectnames(#10257, "__le__") +py_cmembers_versioned(#10001, "__le__", #10257, "2") +#10258 = @"C_type$type$2__lt__" +py_cobjects(#10258) +py_cobjecttypes(#10258, #10005) +py_cobject_sources(#10258, 0) +py_cobjectnames(#10258, "__lt__") +py_cmembers_versioned(#10001, "__lt__", #10258, "2") +#10259 = @"C_type$type$2__module__" +py_cobjects(#10259) +py_cobjecttypes(#10259, #10003) +py_cobject_sources(#10259, 0) +#10260 = @"C_type$type$2__module__$2__set__" +py_cobjects(#10260) +py_cobjecttypes(#10260, #10009) +py_cobject_sources(#10260, 0) +py_cobjectnames(#10260, "__set__") +py_cmembers_versioned(#10259, "__set__", #10260, "2") +#10261 = @"C_type$type$2__module__$2__getattribute__" +py_cobjects(#10261) +py_cobjecttypes(#10261, #10009) +py_cobject_sources(#10261, 0) +py_cobjectnames(#10261, "__getattribute__") +py_cmembers_versioned(#10259, "__getattribute__", #10261, "2") +py_cmembers_versioned(#10259, "__objclass__", #10001, "2") +#10262 = @"C_type$type$2__module__$2__repr__" +py_cobjects(#10262) +py_cobjecttypes(#10262, #10009) +py_cobject_sources(#10262, 0) +py_cobjectnames(#10262, "__repr__") +py_cmembers_versioned(#10259, "__repr__", #10262, "2") +#10263 = @"C_type$type$2__module__$2__get__" +py_cobjects(#10263) +py_cobjecttypes(#10263, #10009) +py_cobject_sources(#10263, 0) +py_cobjectnames(#10263, "__get__") +py_cmembers_versioned(#10259, "__get__", #10263, "2") +py_cmembers_versioned(#10259, "__doc__", #10017, "2") +#10264 = @"C_type$type$2__module__$2__delete__" +py_cobjects(#10264) +py_cobjecttypes(#10264, #10009) +py_cobject_sources(#10264, 0) +py_cobjectnames(#10264, "__delete__") +py_cmembers_versioned(#10259, "__delete__", #10264, "2") +py_cobjectnames(#10259, "__module__") +py_cmembers_versioned(#10001, "__module__", #10259, "2") +#10265 = @"C_type$type$2__mro__" +py_cobjects(#10265) +py_cobjecttypes(#10265, #10045) +py_cobject_sources(#10265, 0) +py_cobjectnames(#10265, "__mro__") +py_cmembers_versioned(#10001, "__mro__", #10265, "2") +#10266 = @"C_type$type$2__name__" +py_cobjects(#10266) +py_cobjecttypes(#10266, #10003) +py_cobject_sources(#10266, 0) +#10267 = @"C_type$type$2__name__$2__set__" +py_cobjects(#10267) +py_cobjecttypes(#10267, #10009) +py_cobject_sources(#10267, 0) +py_cobjectnames(#10267, "__set__") +py_cmembers_versioned(#10266, "__set__", #10267, "2") +#10268 = @"C_type$type$2__name__$2__getattribute__" +py_cobjects(#10268) +py_cobjecttypes(#10268, #10009) +py_cobject_sources(#10268, 0) +py_cobjectnames(#10268, "__getattribute__") +py_cmembers_versioned(#10266, "__getattribute__", #10268, "2") +py_cmembers_versioned(#10266, "__objclass__", #10001, "2") +#10269 = @"C_type$type$2__name__$2__repr__" +py_cobjects(#10269) +py_cobjecttypes(#10269, #10009) +py_cobject_sources(#10269, 0) +py_cobjectnames(#10269, "__repr__") +py_cmembers_versioned(#10266, "__repr__", #10269, "2") +#10270 = @"C_type$type$2__name__$2__get__" +py_cobjects(#10270) +py_cobjecttypes(#10270, #10009) +py_cobject_sources(#10270, 0) +py_cobjectnames(#10270, "__get__") +py_cmembers_versioned(#10266, "__get__", #10270, "2") +py_cmembers_versioned(#10266, "__doc__", #10017, "2") +#10271 = @"C_type$type$2__name__$2__delete__" +py_cobjects(#10271) +py_cobjecttypes(#10271, #10009) +py_cobject_sources(#10271, 0) +py_cobjectnames(#10271, "__delete__") +py_cmembers_versioned(#10266, "__delete__", #10271, "2") +py_cobjectnames(#10266, "__name__") +py_cmembers_versioned(#10001, "__name__", #10266, "2") +#10272 = @"C_type$type$2__ne__" +py_cobjects(#10272) +py_cobjecttypes(#10272, #10005) +py_cobject_sources(#10272, 0) +py_cobjectnames(#10272, "__ne__") +py_cmembers_versioned(#10001, "__ne__", #10272, "2") +#10273 = @"C_type$type$2__new__" +py_cobjects(#10273) +py_cobjecttypes(#10273, #10075) +py_cobject_sources(#10273, 0) +py_cobjectnames(#10273, "__new__") +py_cmembers_versioned(#10001, "__new__", #10273, "2") +#10274 = @"C_type$type$2__repr__" +py_cobjects(#10274) +py_cobjecttypes(#10274, #10005) +py_cobject_sources(#10274, 0) +py_cobjectnames(#10274, "__repr__") +py_cmembers_versioned(#10001, "__repr__", #10274, "2") +#10275 = @"C_type$type$2__setattr__" +py_cobjects(#10275) +py_cobjecttypes(#10275, #10005) +py_cobject_sources(#10275, 0) +py_cobjectnames(#10275, "__setattr__") +py_cmembers_versioned(#10001, "__setattr__", #10275, "2") +#10276 = @"C_type$type$2__subclasscheck__" +py_cobjects(#10276) +py_cobjecttypes(#10276, #10034) +py_cobject_sources(#10276, 0) +py_cobjectnames(#10276, "__subclasscheck__") +py_cmembers_versioned(#10001, "__subclasscheck__", #10276, "2") +#10277 = @"C_type$type$2__subclasses__" +py_cobjects(#10277) +py_cobjecttypes(#10277, #10034) +py_cobject_sources(#10277, 0) +py_cobjectnames(#10277, "__subclasses__") +py_cmembers_versioned(#10001, "__subclasses__", #10277, "2") +#10278 = @"C_type$type$2__weakrefoffset__" +py_cobjects(#10278) +py_cobjecttypes(#10278, #10045) +py_cobject_sources(#10278, 0) +py_cobjectnames(#10278, "__weakrefoffset__") +py_cmembers_versioned(#10001, "__weakrefoffset__", #10278, "2") +#10279 = @"C_type$type$2mro" +py_cobjects(#10279) +py_cobjecttypes(#10279, #10034) +py_cobject_sources(#10279, 0) +py_cobjectnames(#10279, "mro") +py_cmembers_versioned(#10001, "mro", #10279, "2") +py_cmembers_versioned(#10001, ".super.", #10021, "2") +py_cobjectnames(#10001, "type") +py_cobjects(#10000) +py_cobjecttypes(#10000, #10001) +py_cobject_sources(#10000, 0) +#10280 = @"C_type$function$2__call__" +py_cobjects(#10280) +py_cobjecttypes(#10280, #10005) +py_cobject_sources(#10280, 0) +py_cobjectnames(#10280, "__call__") +py_cmembers_versioned(#10000, "__call__", #10280, "2") +#10281 = @"C_type$function$2__closure__" +py_cobjects(#10281) +py_cobjecttypes(#10281, #10045) +py_cobject_sources(#10281, 0) +py_cobjectnames(#10281, "__closure__") +py_cmembers_versioned(#10000, "__closure__", #10281, "2") +#10282 = @"C_type$function$2__code__" +py_cobjects(#10282) +py_cobjecttypes(#10282, #10003) +py_cobject_sources(#10282, 0) +#10283 = @"C_type$function$2__code__$2__set__" +py_cobjects(#10283) +py_cobjecttypes(#10283, #10009) +py_cobject_sources(#10283, 0) +py_cobjectnames(#10283, "__set__") +py_cmembers_versioned(#10282, "__set__", #10283, "2") +#10284 = @"C_type$function$2__code__$2__getattribute__" +py_cobjects(#10284) +py_cobjecttypes(#10284, #10009) +py_cobject_sources(#10284, 0) +py_cobjectnames(#10284, "__getattribute__") +py_cmembers_versioned(#10282, "__getattribute__", #10284, "2") +py_cmembers_versioned(#10282, "__objclass__", #10000, "2") +#10285 = @"C_type$function$2__code__$2__repr__" +py_cobjects(#10285) +py_cobjecttypes(#10285, #10009) +py_cobject_sources(#10285, 0) +py_cobjectnames(#10285, "__repr__") +py_cmembers_versioned(#10282, "__repr__", #10285, "2") +#10286 = @"C_type$function$2__code__$2__get__" +py_cobjects(#10286) +py_cobjecttypes(#10286, #10009) +py_cobject_sources(#10286, 0) +py_cobjectnames(#10286, "__get__") +py_cmembers_versioned(#10282, "__get__", #10286, "2") +py_cmembers_versioned(#10282, "__doc__", #10017, "2") +#10287 = @"C_type$function$2__code__$2__delete__" +py_cobjects(#10287) +py_cobjecttypes(#10287, #10009) +py_cobject_sources(#10287, 0) +py_cobjectnames(#10287, "__delete__") +py_cmembers_versioned(#10282, "__delete__", #10287, "2") +py_cobjectnames(#10282, "__code__") +py_cmembers_versioned(#10000, "__code__", #10282, "2") +#10288 = @"C_type$function$2__defaults__" +py_cobjects(#10288) +py_cobjecttypes(#10288, #10003) +py_cobject_sources(#10288, 0) +#10289 = @"C_type$function$2__defaults__$2__set__" +py_cobjects(#10289) +py_cobjecttypes(#10289, #10009) +py_cobject_sources(#10289, 0) +py_cobjectnames(#10289, "__set__") +py_cmembers_versioned(#10288, "__set__", #10289, "2") +#10290 = @"C_type$function$2__defaults__$2__getattribute__" +py_cobjects(#10290) +py_cobjecttypes(#10290, #10009) +py_cobject_sources(#10290, 0) +py_cobjectnames(#10290, "__getattribute__") +py_cmembers_versioned(#10288, "__getattribute__", #10290, "2") +py_cmembers_versioned(#10288, "__objclass__", #10000, "2") +#10291 = @"C_type$function$2__defaults__$2__repr__" +py_cobjects(#10291) +py_cobjecttypes(#10291, #10009) +py_cobject_sources(#10291, 0) +py_cobjectnames(#10291, "__repr__") +py_cmembers_versioned(#10288, "__repr__", #10291, "2") +#10292 = @"C_type$function$2__defaults__$2__get__" +py_cobjects(#10292) +py_cobjecttypes(#10292, #10009) +py_cobject_sources(#10292, 0) +py_cobjectnames(#10292, "__get__") +py_cmembers_versioned(#10288, "__get__", #10292, "2") +py_cmembers_versioned(#10288, "__doc__", #10017, "2") +#10293 = @"C_type$function$2__defaults__$2__delete__" +py_cobjects(#10293) +py_cobjecttypes(#10293, #10009) +py_cobject_sources(#10293, 0) +py_cobjectnames(#10293, "__delete__") +py_cmembers_versioned(#10288, "__delete__", #10293, "2") +py_cobjectnames(#10288, "__defaults__") +py_cmembers_versioned(#10000, "__defaults__", #10288, "2") +#10294 = @"C_type$function$2__delattr__" +py_cobjects(#10294) +py_cobjecttypes(#10294, #10005) +py_cobject_sources(#10294, 0) +py_cobjectnames(#10294, "__delattr__") +py_cmembers_versioned(#10000, "__delattr__", #10294, "2") +#10295 = @"C_type$function$2__dict__" +py_cobjects(#10295) +py_cobjecttypes(#10295, #10003) +py_cobject_sources(#10295, 0) +#10296 = @"C_type$function$2__dict__$2__set__" +py_cobjects(#10296) +py_cobjecttypes(#10296, #10009) +py_cobject_sources(#10296, 0) +py_cobjectnames(#10296, "__set__") +py_cmembers_versioned(#10295, "__set__", #10296, "2") +#10297 = @"C_type$function$2__dict__$2__getattribute__" +py_cobjects(#10297) +py_cobjecttypes(#10297, #10009) +py_cobject_sources(#10297, 0) +py_cobjectnames(#10297, "__getattribute__") +py_cmembers_versioned(#10295, "__getattribute__", #10297, "2") +py_cmembers_versioned(#10295, "__objclass__", #10000, "2") +#10298 = @"C_type$function$2__dict__$2__repr__" +py_cobjects(#10298) +py_cobjecttypes(#10298, #10009) +py_cobject_sources(#10298, 0) +py_cobjectnames(#10298, "__repr__") +py_cmembers_versioned(#10295, "__repr__", #10298, "2") +#10299 = @"C_type$function$2__dict__$2__get__" +py_cobjects(#10299) +py_cobjecttypes(#10299, #10009) +py_cobject_sources(#10299, 0) +py_cobjectnames(#10299, "__get__") +py_cmembers_versioned(#10295, "__get__", #10299, "2") +py_cmembers_versioned(#10295, "__doc__", #10017, "2") +#10300 = @"C_type$function$2__dict__$2__delete__" +py_cobjects(#10300) +py_cobjecttypes(#10300, #10009) +py_cobject_sources(#10300, 0) +py_cobjectnames(#10300, "__delete__") +py_cmembers_versioned(#10295, "__delete__", #10300, "2") +py_cobjectnames(#10295, "__dict__") +py_cmembers_versioned(#10000, "__dict__", #10295, "2") +#10301 = @"C_type$function$2__doc__" +py_cobjects(#10301) +py_cobjecttypes(#10301, #10045) +py_cobject_sources(#10301, 0) +py_cobjectnames(#10301, "__doc__") +py_cmembers_versioned(#10000, "__doc__", #10301, "2") +#10302 = @"C_type$function$2__get__" +py_cobjects(#10302) +py_cobjecttypes(#10302, #10005) +py_cobject_sources(#10302, 0) +py_cobjectnames(#10302, "__get__") +py_cmembers_versioned(#10000, "__get__", #10302, "2") +#10303 = @"C_type$function$2__getattribute__" +py_cobjects(#10303) +py_cobjecttypes(#10303, #10005) +py_cobject_sources(#10303, 0) +py_cobjectnames(#10303, "__getattribute__") +py_cmembers_versioned(#10000, "__getattribute__", #10303, "2") +#10304 = @"C_type$function$2__globals__" +py_cobjects(#10304) +py_cobjecttypes(#10304, #10045) +py_cobject_sources(#10304, 0) +py_cobjectnames(#10304, "__globals__") +py_cmembers_versioned(#10000, "__globals__", #10304, "2") +#10305 = @"C_type$function$2__module__" +py_cobjects(#10305) +py_cobjecttypes(#10305, #10045) +py_cobject_sources(#10305, 0) +py_cobjectnames(#10305, "__module__") +py_cmembers_versioned(#10000, "__module__", #10305, "2") +#10306 = @"C_type$function$2__name__" +py_cobjects(#10306) +py_cobjecttypes(#10306, #10003) +py_cobject_sources(#10306, 0) +#10307 = @"C_type$function$2__name__$2__set__" +py_cobjects(#10307) +py_cobjecttypes(#10307, #10009) +py_cobject_sources(#10307, 0) +py_cobjectnames(#10307, "__set__") +py_cmembers_versioned(#10306, "__set__", #10307, "2") +#10308 = @"C_type$function$2__name__$2__getattribute__" +py_cobjects(#10308) +py_cobjecttypes(#10308, #10009) +py_cobject_sources(#10308, 0) +py_cobjectnames(#10308, "__getattribute__") +py_cmembers_versioned(#10306, "__getattribute__", #10308, "2") +py_cmembers_versioned(#10306, "__objclass__", #10000, "2") +#10309 = @"C_type$function$2__name__$2__repr__" +py_cobjects(#10309) +py_cobjecttypes(#10309, #10009) +py_cobject_sources(#10309, 0) +py_cobjectnames(#10309, "__repr__") +py_cmembers_versioned(#10306, "__repr__", #10309, "2") +#10310 = @"C_type$function$2__name__$2__get__" +py_cobjects(#10310) +py_cobjecttypes(#10310, #10009) +py_cobject_sources(#10310, 0) +py_cobjectnames(#10310, "__get__") +py_cmembers_versioned(#10306, "__get__", #10310, "2") +py_cmembers_versioned(#10306, "__doc__", #10017, "2") +#10311 = @"C_type$function$2__name__$2__delete__" +py_cobjects(#10311) +py_cobjecttypes(#10311, #10009) +py_cobject_sources(#10311, 0) +py_cobjectnames(#10311, "__delete__") +py_cmembers_versioned(#10306, "__delete__", #10311, "2") +py_cobjectnames(#10306, "__name__") +py_cmembers_versioned(#10000, "__name__", #10306, "2") +#10312 = @"C_type$function$2__new__" +py_cobjects(#10312) +py_cobjecttypes(#10312, #10075) +py_cobject_sources(#10312, 0) +py_cobjectnames(#10312, "__new__") +py_cmembers_versioned(#10000, "__new__", #10312, "2") +#10313 = @"C_type$function$2__repr__" +py_cobjects(#10313) +py_cobjecttypes(#10313, #10005) +py_cobject_sources(#10313, 0) +py_cobjectnames(#10313, "__repr__") +py_cmembers_versioned(#10000, "__repr__", #10313, "2") +#10314 = @"C_type$function$2__setattr__" +py_cobjects(#10314) +py_cobjecttypes(#10314, #10005) +py_cobject_sources(#10314, 0) +py_cobjectnames(#10314, "__setattr__") +py_cmembers_versioned(#10000, "__setattr__", #10314, "2") +#10315 = @"C_type$function$2func_closure" +py_cobjects(#10315) +py_cobjecttypes(#10315, #10045) +py_cobject_sources(#10315, 0) +py_cobjectnames(#10315, "func_closure") +py_cmembers_versioned(#10000, "func_closure", #10315, "2") +#10316 = @"C_type$function$2func_code" +py_cobjects(#10316) +py_cobjecttypes(#10316, #10003) +py_cobject_sources(#10316, 0) +#10317 = @"C_type$function$2func_code$2__set__" +py_cobjects(#10317) +py_cobjecttypes(#10317, #10009) +py_cobject_sources(#10317, 0) +py_cobjectnames(#10317, "__set__") +py_cmembers_versioned(#10316, "__set__", #10317, "2") +#10318 = @"C_type$function$2func_code$2__getattribute__" +py_cobjects(#10318) +py_cobjecttypes(#10318, #10009) +py_cobject_sources(#10318, 0) +py_cobjectnames(#10318, "__getattribute__") +py_cmembers_versioned(#10316, "__getattribute__", #10318, "2") +py_cmembers_versioned(#10316, "__objclass__", #10000, "2") +#10319 = @"C_type$function$2func_code$2__repr__" +py_cobjects(#10319) +py_cobjecttypes(#10319, #10009) +py_cobject_sources(#10319, 0) +py_cobjectnames(#10319, "__repr__") +py_cmembers_versioned(#10316, "__repr__", #10319, "2") +#10320 = @"C_type$function$2func_code$2__get__" +py_cobjects(#10320) +py_cobjecttypes(#10320, #10009) +py_cobject_sources(#10320, 0) +py_cobjectnames(#10320, "__get__") +py_cmembers_versioned(#10316, "__get__", #10320, "2") +py_cmembers_versioned(#10316, "__doc__", #10017, "2") +#10321 = @"C_type$function$2func_code$2__delete__" +py_cobjects(#10321) +py_cobjecttypes(#10321, #10009) +py_cobject_sources(#10321, 0) +py_cobjectnames(#10321, "__delete__") +py_cmembers_versioned(#10316, "__delete__", #10321, "2") +py_cobjectnames(#10316, "func_code") +py_cmembers_versioned(#10000, "func_code", #10316, "2") +#10322 = @"C_type$function$2func_defaults" +py_cobjects(#10322) +py_cobjecttypes(#10322, #10003) +py_cobject_sources(#10322, 0) +#10323 = @"C_type$function$2func_defaults$2__set__" +py_cobjects(#10323) +py_cobjecttypes(#10323, #10009) +py_cobject_sources(#10323, 0) +py_cobjectnames(#10323, "__set__") +py_cmembers_versioned(#10322, "__set__", #10323, "2") +#10324 = @"C_type$function$2func_defaults$2__getattribute__" +py_cobjects(#10324) +py_cobjecttypes(#10324, #10009) +py_cobject_sources(#10324, 0) +py_cobjectnames(#10324, "__getattribute__") +py_cmembers_versioned(#10322, "__getattribute__", #10324, "2") +py_cmembers_versioned(#10322, "__objclass__", #10000, "2") +#10325 = @"C_type$function$2func_defaults$2__repr__" +py_cobjects(#10325) +py_cobjecttypes(#10325, #10009) +py_cobject_sources(#10325, 0) +py_cobjectnames(#10325, "__repr__") +py_cmembers_versioned(#10322, "__repr__", #10325, "2") +#10326 = @"C_type$function$2func_defaults$2__get__" +py_cobjects(#10326) +py_cobjecttypes(#10326, #10009) +py_cobject_sources(#10326, 0) +py_cobjectnames(#10326, "__get__") +py_cmembers_versioned(#10322, "__get__", #10326, "2") +py_cmembers_versioned(#10322, "__doc__", #10017, "2") +#10327 = @"C_type$function$2func_defaults$2__delete__" +py_cobjects(#10327) +py_cobjecttypes(#10327, #10009) +py_cobject_sources(#10327, 0) +py_cobjectnames(#10327, "__delete__") +py_cmembers_versioned(#10322, "__delete__", #10327, "2") +py_cobjectnames(#10322, "func_defaults") +py_cmembers_versioned(#10000, "func_defaults", #10322, "2") +#10328 = @"C_type$function$2func_dict" +py_cobjects(#10328) +py_cobjecttypes(#10328, #10003) +py_cobject_sources(#10328, 0) +#10329 = @"C_type$function$2func_dict$2__set__" +py_cobjects(#10329) +py_cobjecttypes(#10329, #10009) +py_cobject_sources(#10329, 0) +py_cobjectnames(#10329, "__set__") +py_cmembers_versioned(#10328, "__set__", #10329, "2") +#10330 = @"C_type$function$2func_dict$2__getattribute__" +py_cobjects(#10330) +py_cobjecttypes(#10330, #10009) +py_cobject_sources(#10330, 0) +py_cobjectnames(#10330, "__getattribute__") +py_cmembers_versioned(#10328, "__getattribute__", #10330, "2") +py_cmembers_versioned(#10328, "__objclass__", #10000, "2") +#10331 = @"C_type$function$2func_dict$2__repr__" +py_cobjects(#10331) +py_cobjecttypes(#10331, #10009) +py_cobject_sources(#10331, 0) +py_cobjectnames(#10331, "__repr__") +py_cmembers_versioned(#10328, "__repr__", #10331, "2") +#10332 = @"C_type$function$2func_dict$2__get__" +py_cobjects(#10332) +py_cobjecttypes(#10332, #10009) +py_cobject_sources(#10332, 0) +py_cobjectnames(#10332, "__get__") +py_cmembers_versioned(#10328, "__get__", #10332, "2") +py_cmembers_versioned(#10328, "__doc__", #10017, "2") +#10333 = @"C_type$function$2func_dict$2__delete__" +py_cobjects(#10333) +py_cobjecttypes(#10333, #10009) +py_cobject_sources(#10333, 0) +py_cobjectnames(#10333, "__delete__") +py_cmembers_versioned(#10328, "__delete__", #10333, "2") +py_cobjectnames(#10328, "func_dict") +py_cmembers_versioned(#10000, "func_dict", #10328, "2") +#10334 = @"C_type$function$2func_doc" +py_cobjects(#10334) +py_cobjecttypes(#10334, #10045) +py_cobject_sources(#10334, 0) +py_cobjectnames(#10334, "func_doc") +py_cmembers_versioned(#10000, "func_doc", #10334, "2") +#10335 = @"C_type$function$2func_globals" +py_cobjects(#10335) +py_cobjecttypes(#10335, #10045) +py_cobject_sources(#10335, 0) +py_cobjectnames(#10335, "func_globals") +py_cmembers_versioned(#10000, "func_globals", #10335, "2") +#10336 = @"C_type$function$2func_name" +py_cobjects(#10336) +py_cobjecttypes(#10336, #10003) +py_cobject_sources(#10336, 0) +#10337 = @"C_type$function$2func_name$2__set__" +py_cobjects(#10337) +py_cobjecttypes(#10337, #10009) +py_cobject_sources(#10337, 0) +py_cobjectnames(#10337, "__set__") +py_cmembers_versioned(#10336, "__set__", #10337, "2") +#10338 = @"C_type$function$2func_name$2__getattribute__" +py_cobjects(#10338) +py_cobjecttypes(#10338, #10009) +py_cobject_sources(#10338, 0) +py_cobjectnames(#10338, "__getattribute__") +py_cmembers_versioned(#10336, "__getattribute__", #10338, "2") +py_cmembers_versioned(#10336, "__objclass__", #10000, "2") +#10339 = @"C_type$function$2func_name$2__repr__" +py_cobjects(#10339) +py_cobjecttypes(#10339, #10009) +py_cobject_sources(#10339, 0) +py_cobjectnames(#10339, "__repr__") +py_cmembers_versioned(#10336, "__repr__", #10339, "2") +#10340 = @"C_type$function$2func_name$2__get__" +py_cobjects(#10340) +py_cobjecttypes(#10340, #10009) +py_cobject_sources(#10340, 0) +py_cobjectnames(#10340, "__get__") +py_cmembers_versioned(#10336, "__get__", #10340, "2") +py_cmembers_versioned(#10336, "__doc__", #10017, "2") +#10341 = @"C_type$function$2func_name$2__delete__" +py_cobjects(#10341) +py_cobjecttypes(#10341, #10009) +py_cobject_sources(#10341, 0) +py_cobjectnames(#10341, "__delete__") +py_cmembers_versioned(#10336, "__delete__", #10341, "2") +py_cobjectnames(#10336, "func_name") +py_cmembers_versioned(#10000, "func_name", #10336, "2") +py_cmembers_versioned(#10000, ".super.", #10021, "2") +py_cobjectnames(#10000, "function") +py_special_objects(#10000, "FunctionType") +py_special_objects(#10021, "object") +#10342 = @"C_type$TypeError" +py_cobjects(#10342) +py_cobjecttypes(#10342, #10001) +py_cobject_sources(#10342, 0) +#10343 = @"C_bytes$dbe7d2774d1f18894c309533ab3e08721cecdf36" +py_cobjects(#10343) +py_cobjecttypes(#10343, #10028) +py_cobject_sources(#10343, 0) +py_cobjectnames(#10343, "b'Inappropriate argument type.'") +py_cmembers_versioned(#10342, "__doc__", #10343, "2") +#10344 = @"C_type$TypeError$2__init__" +py_cobjects(#10344) +py_cobjecttypes(#10344, #10005) +py_cobject_sources(#10344, 0) +py_cobjectnames(#10344, "__init__") +py_cmembers_versioned(#10342, "__init__", #10344, "2") +#10345 = @"C_type$TypeError$2__new__" +py_cobjects(#10345) +py_cobjecttypes(#10345, #10075) +py_cobject_sources(#10345, 0) +py_cobjectnames(#10345, "__new__") +py_cmembers_versioned(#10342, "__new__", #10345, "2") +#10346 = @"C_type$StandardError" +py_cobjects(#10346) +py_cobjecttypes(#10346, #10001) +py_cobject_sources(#10346, 0) +#10347 = @"C_bytes$2b5cdf8ebbb1126d88b513cae277cfecd98d5976" +py_cobjects(#10347) +py_cobjecttypes(#10347, #10028) +py_cobject_sources(#10347, 0) +py_cobjectnames(#10347, "b'Base class for all standard Python exceptions that do not represent +interpreter exiting.'") +py_cmembers_versioned(#10346, "__doc__", #10347, "2") +#10348 = @"C_type$StandardError$2__init__" +py_cobjects(#10348) +py_cobjecttypes(#10348, #10005) +py_cobject_sources(#10348, 0) +py_cobjectnames(#10348, "__init__") +py_cmembers_versioned(#10346, "__init__", #10348, "2") +#10349 = @"C_type$StandardError$2__new__" +py_cobjects(#10349) +py_cobjecttypes(#10349, #10075) +py_cobject_sources(#10349, 0) +py_cobjectnames(#10349, "__new__") +py_cmembers_versioned(#10346, "__new__", #10349, "2") +#10350 = @"C_type$Exception" +py_cobjects(#10350) +py_cobjecttypes(#10350, #10001) +py_cobject_sources(#10350, 0) +#10351 = @"C_bytes$41e6176e60800b98303aa2213339fcea39d59ac8" +py_cobjects(#10351) +py_cobjecttypes(#10351, #10028) +py_cobject_sources(#10351, 0) +py_cobjectnames(#10351, "b'Common base class for all non-exit exceptions.'") +py_cmembers_versioned(#10350, "__doc__", #10351, "2") +#10352 = @"C_type$Exception$2__init__" +py_cobjects(#10352) +py_cobjecttypes(#10352, #10005) +py_cobject_sources(#10352, 0) +py_cobjectnames(#10352, "__init__") +py_cmembers_versioned(#10350, "__init__", #10352, "2") +#10353 = @"C_type$Exception$2__new__" +py_cobjects(#10353) +py_cobjecttypes(#10353, #10075) +py_cobject_sources(#10353, 0) +py_cobjectnames(#10353, "__new__") +py_cmembers_versioned(#10350, "__new__", #10353, "2") +#10354 = @"C_type$BaseException" +py_cobjects(#10354) +py_cobjecttypes(#10354, #10001) +py_cobject_sources(#10354, 0) +#10355 = @"C_type$BaseException$2__delattr__" +py_cobjects(#10355) +py_cobjecttypes(#10355, #10005) +py_cobject_sources(#10355, 0) +py_cobjectnames(#10355, "__delattr__") +py_cmembers_versioned(#10354, "__delattr__", #10355, "2") +#10356 = @"C_type$BaseException$2__dict__" +py_cobjects(#10356) +py_cobjecttypes(#10356, #10003) +py_cobject_sources(#10356, 0) +#10357 = @"C_type$BaseException$2__dict__$2__set__" +py_cobjects(#10357) +py_cobjecttypes(#10357, #10009) +py_cobject_sources(#10357, 0) +py_cobjectnames(#10357, "__set__") +py_cmembers_versioned(#10356, "__set__", #10357, "2") +#10358 = @"C_type$BaseException$2__dict__$2__getattribute__" +py_cobjects(#10358) +py_cobjecttypes(#10358, #10009) +py_cobject_sources(#10358, 0) +py_cobjectnames(#10358, "__getattribute__") +py_cmembers_versioned(#10356, "__getattribute__", #10358, "2") +py_cmembers_versioned(#10356, "__objclass__", #10354, "2") +#10359 = @"C_type$BaseException$2__dict__$2__repr__" +py_cobjects(#10359) +py_cobjecttypes(#10359, #10009) +py_cobject_sources(#10359, 0) +py_cobjectnames(#10359, "__repr__") +py_cmembers_versioned(#10356, "__repr__", #10359, "2") +#10360 = @"C_type$BaseException$2__dict__$2__get__" +py_cobjects(#10360) +py_cobjecttypes(#10360, #10009) +py_cobject_sources(#10360, 0) +py_cobjectnames(#10360, "__get__") +py_cmembers_versioned(#10356, "__get__", #10360, "2") +py_cmembers_versioned(#10356, "__doc__", #10017, "2") +#10361 = @"C_type$BaseException$2__dict__$2__delete__" +py_cobjects(#10361) +py_cobjecttypes(#10361, #10009) +py_cobject_sources(#10361, 0) +py_cobjectnames(#10361, "__delete__") +py_cmembers_versioned(#10356, "__delete__", #10361, "2") +py_cobjectnames(#10356, "__dict__") +py_cmembers_versioned(#10354, "__dict__", #10356, "2") +#10362 = @"C_bytes$537130403a454779c94f7087773406e13b7f8ecd" +py_cobjects(#10362) +py_cobjecttypes(#10362, #10028) +py_cobject_sources(#10362, 0) +py_cobjectnames(#10362, "b'Common base class for all exceptions'") +py_cmembers_versioned(#10354, "__doc__", #10362, "2") +#10363 = @"C_type$BaseException$2__getattribute__" +py_cobjects(#10363) +py_cobjecttypes(#10363, #10005) +py_cobject_sources(#10363, 0) +py_cobjectnames(#10363, "__getattribute__") +py_cmembers_versioned(#10354, "__getattribute__", #10363, "2") +#10364 = @"C_type$BaseException$2__getitem__" +py_cobjects(#10364) +py_cobjecttypes(#10364, #10005) +py_cobject_sources(#10364, 0) +py_cobjectnames(#10364, "__getitem__") +py_cmembers_versioned(#10354, "__getitem__", #10364, "2") +#10365 = @"C_type$BaseException$2__getslice__" +py_cobjects(#10365) +py_cobjecttypes(#10365, #10005) +py_cobject_sources(#10365, 0) +py_cobjectnames(#10365, "__getslice__") +py_cmembers_versioned(#10354, "__getslice__", #10365, "2") +#10366 = @"C_type$BaseException$2__init__" +py_cobjects(#10366) +py_cobjecttypes(#10366, #10005) +py_cobject_sources(#10366, 0) +py_cobjectnames(#10366, "__init__") +py_cmembers_versioned(#10354, "__init__", #10366, "2") +#10367 = @"C_type$BaseException$2__new__" +py_cobjects(#10367) +py_cobjecttypes(#10367, #10075) +py_cobject_sources(#10367, 0) +py_cobjectnames(#10367, "__new__") +py_cmembers_versioned(#10354, "__new__", #10367, "2") +#10368 = @"C_type$BaseException$2__reduce__" +py_cobjects(#10368) +py_cobjecttypes(#10368, #10034) +py_cobject_sources(#10368, 0) +py_cobjectnames(#10368, "__reduce__") +py_cmembers_versioned(#10354, "__reduce__", #10368, "2") +#10369 = @"C_type$BaseException$2__repr__" +py_cobjects(#10369) +py_cobjecttypes(#10369, #10005) +py_cobject_sources(#10369, 0) +py_cobjectnames(#10369, "__repr__") +py_cmembers_versioned(#10354, "__repr__", #10369, "2") +#10370 = @"C_type$BaseException$2__setattr__" +py_cobjects(#10370) +py_cobjecttypes(#10370, #10005) +py_cobject_sources(#10370, 0) +py_cobjectnames(#10370, "__setattr__") +py_cmembers_versioned(#10354, "__setattr__", #10370, "2") +#10371 = @"C_type$BaseException$2__setstate__" +py_cobjects(#10371) +py_cobjecttypes(#10371, #10034) +py_cobject_sources(#10371, 0) +py_cobjectnames(#10371, "__setstate__") +py_cmembers_versioned(#10354, "__setstate__", #10371, "2") +#10372 = @"C_type$BaseException$2__str__" +py_cobjects(#10372) +py_cobjecttypes(#10372, #10005) +py_cobject_sources(#10372, 0) +py_cobjectnames(#10372, "__str__") +py_cmembers_versioned(#10354, "__str__", #10372, "2") +#10373 = @"C_type$BaseException$2__unicode__" +py_cobjects(#10373) +py_cobjecttypes(#10373, #10034) +py_cobject_sources(#10373, 0) +py_cobjectnames(#10373, "__unicode__") +py_cmembers_versioned(#10354, "__unicode__", #10373, "2") +#10374 = @"C_type$BaseException$2args" +py_cobjects(#10374) +py_cobjecttypes(#10374, #10003) +py_cobject_sources(#10374, 0) +#10375 = @"C_type$BaseException$2args$2__set__" +py_cobjects(#10375) +py_cobjecttypes(#10375, #10009) +py_cobject_sources(#10375, 0) +py_cobjectnames(#10375, "__set__") +py_cmembers_versioned(#10374, "__set__", #10375, "2") +#10376 = @"C_type$BaseException$2args$2__getattribute__" +py_cobjects(#10376) +py_cobjecttypes(#10376, #10009) +py_cobject_sources(#10376, 0) +py_cobjectnames(#10376, "__getattribute__") +py_cmembers_versioned(#10374, "__getattribute__", #10376, "2") +py_cmembers_versioned(#10374, "__objclass__", #10354, "2") +#10377 = @"C_type$BaseException$2args$2__repr__" +py_cobjects(#10377) +py_cobjecttypes(#10377, #10009) +py_cobject_sources(#10377, 0) +py_cobjectnames(#10377, "__repr__") +py_cmembers_versioned(#10374, "__repr__", #10377, "2") +#10378 = @"C_type$BaseException$2args$2__get__" +py_cobjects(#10378) +py_cobjecttypes(#10378, #10009) +py_cobject_sources(#10378, 0) +py_cobjectnames(#10378, "__get__") +py_cmembers_versioned(#10374, "__get__", #10378, "2") +py_cmembers_versioned(#10374, "__doc__", #10017, "2") +#10379 = @"C_type$BaseException$2args$2__delete__" +py_cobjects(#10379) +py_cobjecttypes(#10379, #10009) +py_cobject_sources(#10379, 0) +py_cobjectnames(#10379, "__delete__") +py_cmembers_versioned(#10374, "__delete__", #10379, "2") +py_cobjectnames(#10374, "args") +py_cmembers_versioned(#10354, "args", #10374, "2") +#10380 = @"C_type$BaseException$2message" +py_cobjects(#10380) +py_cobjecttypes(#10380, #10003) +py_cobject_sources(#10380, 0) +#10381 = @"C_type$BaseException$2message$2__set__" +py_cobjects(#10381) +py_cobjecttypes(#10381, #10009) +py_cobject_sources(#10381, 0) +py_cobjectnames(#10381, "__set__") +py_cmembers_versioned(#10380, "__set__", #10381, "2") +#10382 = @"C_type$BaseException$2message$2__getattribute__" +py_cobjects(#10382) +py_cobjecttypes(#10382, #10009) +py_cobject_sources(#10382, 0) +py_cobjectnames(#10382, "__getattribute__") +py_cmembers_versioned(#10380, "__getattribute__", #10382, "2") +py_cmembers_versioned(#10380, "__objclass__", #10354, "2") +#10383 = @"C_type$BaseException$2message$2__repr__" +py_cobjects(#10383) +py_cobjecttypes(#10383, #10009) +py_cobject_sources(#10383, 0) +py_cobjectnames(#10383, "__repr__") +py_cmembers_versioned(#10380, "__repr__", #10383, "2") +#10384 = @"C_type$BaseException$2message$2__get__" +py_cobjects(#10384) +py_cobjecttypes(#10384, #10009) +py_cobject_sources(#10384, 0) +py_cobjectnames(#10384, "__get__") +py_cmembers_versioned(#10380, "__get__", #10384, "2") +py_cmembers_versioned(#10380, "__doc__", #10017, "2") +#10385 = @"C_type$BaseException$2message$2__delete__" +py_cobjects(#10385) +py_cobjecttypes(#10385, #10009) +py_cobject_sources(#10385, 0) +py_cobjectnames(#10385, "__delete__") +py_cmembers_versioned(#10380, "__delete__", #10385, "2") +py_cobjectnames(#10380, "message") +py_cmembers_versioned(#10354, "message", #10380, "2") +py_cmembers_versioned(#10354, ".super.", #10021, "2") +py_cobjectnames(#10354, "BaseException") +py_cmembers_versioned(#10350, ".super.", #10354, "2") +py_cobjectnames(#10350, "Exception") +py_cmembers_versioned(#10346, ".super.", #10350, "2") +py_cobjectnames(#10346, "StandardError") +py_cmembers_versioned(#10342, ".super.", #10346, "2") +py_cobjectnames(#10342, "TypeError") +py_special_objects(#10342, "TypeError") +#10386 = @"C_type$dict" +py_cobjects(#10386) +py_cobjecttypes(#10386, #10001) +py_cobject_sources(#10386, 0) +#10387 = @"C_type$dict$2__cmp__" +py_cobjects(#10387) +py_cobjecttypes(#10387, #10005) +py_cobject_sources(#10387, 0) +py_cobjectnames(#10387, "__cmp__") +py_cmembers_versioned(#10386, "__cmp__", #10387, "2") +#10388 = @"C_type$dict$2__contains__" +py_cobjects(#10388) +py_cobjecttypes(#10388, #10034) +py_cobject_sources(#10388, 0) +py_cobjectnames(#10388, "__contains__") +py_cmembers_versioned(#10386, "__contains__", #10388, "2") +#10389 = @"C_type$dict$2__delitem__" +py_cobjects(#10389) +py_cobjecttypes(#10389, #10005) +py_cobject_sources(#10389, 0) +py_cobjectnames(#10389, "__delitem__") +py_cmembers_versioned(#10386, "__delitem__", #10389, "2") +#10390 = @"C_bytes$e965db2620f245e5a5538ab00a16b80b9a5dce95" +py_cobjects(#10390) +py_cobjecttypes(#10390, #10028) +py_cobject_sources(#10390, 0) +py_cobjectnames(#10390, "b'dict() -> new empty dictionary +dict(mapping) -> new dictionary initialized from a mapping object's + (key, value) pairs +dict(iterable) -> new dictionary initialized as if via: + d = {} + for k, v in iterable: + d[k] = v +dict(**kwargs) -> new dictionary initialized with the name=value pairs + in the keyword argument list. For example: dict(one=1, two=2)'") +py_cmembers_versioned(#10386, "__doc__", #10390, "2") +#10391 = @"C_type$dict$2__eq__" +py_cobjects(#10391) +py_cobjecttypes(#10391, #10005) +py_cobject_sources(#10391, 0) +py_cobjectnames(#10391, "__eq__") +py_cmembers_versioned(#10386, "__eq__", #10391, "2") +#10392 = @"C_type$dict$2__ge__" +py_cobjects(#10392) +py_cobjecttypes(#10392, #10005) +py_cobject_sources(#10392, 0) +py_cobjectnames(#10392, "__ge__") +py_cmembers_versioned(#10386, "__ge__", #10392, "2") +#10393 = @"C_type$dict$2__getattribute__" +py_cobjects(#10393) +py_cobjecttypes(#10393, #10005) +py_cobject_sources(#10393, 0) +py_cobjectnames(#10393, "__getattribute__") +py_cmembers_versioned(#10386, "__getattribute__", #10393, "2") +#10394 = @"C_type$dict$2__getitem__" +py_cobjects(#10394) +py_cobjecttypes(#10394, #10034) +py_cobject_sources(#10394, 0) +py_cobjectnames(#10394, "__getitem__") +py_cmembers_versioned(#10386, "__getitem__", #10394, "2") +#10395 = @"C_type$dict$2__gt__" +py_cobjects(#10395) +py_cobjecttypes(#10395, #10005) +py_cobject_sources(#10395, 0) +py_cobjectnames(#10395, "__gt__") +py_cmembers_versioned(#10386, "__gt__", #10395, "2") +py_cmembers_versioned(#10386, "__hash__", #10017, "2") +#10396 = @"C_type$dict$2__init__" +py_cobjects(#10396) +py_cobjecttypes(#10396, #10005) +py_cobject_sources(#10396, 0) +py_cobjectnames(#10396, "__init__") +py_cmembers_versioned(#10386, "__init__", #10396, "2") +#10397 = @"C_type$dict$2__iter__" +py_cobjects(#10397) +py_cobjecttypes(#10397, #10005) +py_cobject_sources(#10397, 0) +py_cobjectnames(#10397, "__iter__") +py_cmembers_versioned(#10386, "__iter__", #10397, "2") +#10398 = @"C_type$dict$2__le__" +py_cobjects(#10398) +py_cobjecttypes(#10398, #10005) +py_cobject_sources(#10398, 0) +py_cobjectnames(#10398, "__le__") +py_cmembers_versioned(#10386, "__le__", #10398, "2") +#10399 = @"C_type$dict$2__len__" +py_cobjects(#10399) +py_cobjecttypes(#10399, #10005) +py_cobject_sources(#10399, 0) +py_cobjectnames(#10399, "__len__") +py_cmembers_versioned(#10386, "__len__", #10399, "2") +#10400 = @"C_type$dict$2__lt__" +py_cobjects(#10400) +py_cobjecttypes(#10400, #10005) +py_cobject_sources(#10400, 0) +py_cobjectnames(#10400, "__lt__") +py_cmembers_versioned(#10386, "__lt__", #10400, "2") +#10401 = @"C_type$dict$2__ne__" +py_cobjects(#10401) +py_cobjecttypes(#10401, #10005) +py_cobject_sources(#10401, 0) +py_cobjectnames(#10401, "__ne__") +py_cmembers_versioned(#10386, "__ne__", #10401, "2") +#10402 = @"C_type$dict$2__new__" +py_cobjects(#10402) +py_cobjecttypes(#10402, #10075) +py_cobject_sources(#10402, 0) +py_cobjectnames(#10402, "__new__") +py_cmembers_versioned(#10386, "__new__", #10402, "2") +#10403 = @"C_type$dict$2__repr__" +py_cobjects(#10403) +py_cobjecttypes(#10403, #10005) +py_cobject_sources(#10403, 0) +py_cobjectnames(#10403, "__repr__") +py_cmembers_versioned(#10386, "__repr__", #10403, "2") +#10404 = @"C_type$dict$2__setitem__" +py_cobjects(#10404) +py_cobjecttypes(#10404, #10005) +py_cobject_sources(#10404, 0) +py_cobjectnames(#10404, "__setitem__") +py_cmembers_versioned(#10386, "__setitem__", #10404, "2") +#10405 = @"C_type$dict$2__sizeof__" +py_cobjects(#10405) +py_cobjecttypes(#10405, #10034) +py_cobject_sources(#10405, 0) +py_cobjectnames(#10405, "__sizeof__") +py_cmembers_versioned(#10386, "__sizeof__", #10405, "2") +#10406 = @"C_type$dict$2clear" +py_cobjects(#10406) +py_cobjecttypes(#10406, #10034) +py_cobject_sources(#10406, 0) +py_cobjectnames(#10406, "clear") +py_cmembers_versioned(#10386, "clear", #10406, "2") +#10407 = @"C_type$dict$2copy" +py_cobjects(#10407) +py_cobjecttypes(#10407, #10034) +py_cobject_sources(#10407, 0) +py_cobjectnames(#10407, "copy") +py_cmembers_versioned(#10386, "copy", #10407, "2") +#10408 = @"C_type$dict$2fromkeys" +py_cobjects(#10408) +py_cobjecttypes(#10408, #10169) +py_cobject_sources(#10408, 0) +py_cobjectnames(#10408, "fromkeys") +py_cmembers_versioned(#10386, "fromkeys", #10408, "2") +#10409 = @"C_type$dict$2get" +py_cobjects(#10409) +py_cobjecttypes(#10409, #10034) +py_cobject_sources(#10409, 0) +py_cobjectnames(#10409, "get") +py_cmembers_versioned(#10386, "get", #10409, "2") +#10410 = @"C_type$dict$2has_key" +py_cobjects(#10410) +py_cobjecttypes(#10410, #10034) +py_cobject_sources(#10410, 0) +py_cobjectnames(#10410, "has_key") +py_cmembers_versioned(#10386, "has_key", #10410, "2") +#10411 = @"C_type$dict$2items" +py_cobjects(#10411) +py_cobjecttypes(#10411, #10034) +py_cobject_sources(#10411, 0) +py_cobjectnames(#10411, "items") +py_cmembers_versioned(#10386, "items", #10411, "2") +#10412 = @"C_type$dict$2iteritems" +py_cobjects(#10412) +py_cobjecttypes(#10412, #10034) +py_cobject_sources(#10412, 0) +py_cobjectnames(#10412, "iteritems") +py_cmembers_versioned(#10386, "iteritems", #10412, "2") +#10413 = @"C_type$dict$2iterkeys" +py_cobjects(#10413) +py_cobjecttypes(#10413, #10034) +py_cobject_sources(#10413, 0) +py_cobjectnames(#10413, "iterkeys") +py_cmembers_versioned(#10386, "iterkeys", #10413, "2") +#10414 = @"C_type$dict$2itervalues" +py_cobjects(#10414) +py_cobjecttypes(#10414, #10034) +py_cobject_sources(#10414, 0) +py_cobjectnames(#10414, "itervalues") +py_cmembers_versioned(#10386, "itervalues", #10414, "2") +#10415 = @"C_type$dict$2keys" +py_cobjects(#10415) +py_cobjecttypes(#10415, #10034) +py_cobject_sources(#10415, 0) +py_cobjectnames(#10415, "keys") +py_cmembers_versioned(#10386, "keys", #10415, "2") +#10416 = @"C_type$dict$2pop" +py_cobjects(#10416) +py_cobjecttypes(#10416, #10034) +py_cobject_sources(#10416, 0) +py_cobjectnames(#10416, "pop") +py_cmembers_versioned(#10386, "pop", #10416, "2") +#10417 = @"C_type$dict$2popitem" +py_cobjects(#10417) +py_cobjecttypes(#10417, #10034) +py_cobject_sources(#10417, 0) +py_cobjectnames(#10417, "popitem") +py_cmembers_versioned(#10386, "popitem", #10417, "2") +#10418 = @"C_type$dict$2setdefault" +py_cobjects(#10418) +py_cobjecttypes(#10418, #10034) +py_cobject_sources(#10418, 0) +py_cobjectnames(#10418, "setdefault") +py_cmembers_versioned(#10386, "setdefault", #10418, "2") +#10419 = @"C_type$dict$2update" +py_cobjects(#10419) +py_cobjecttypes(#10419, #10034) +py_cobject_sources(#10419, 0) +py_cobjectnames(#10419, "update") +py_cmembers_versioned(#10386, "update", #10419, "2") +#10420 = @"C_type$dict$2values" +py_cobjects(#10420) +py_cobjecttypes(#10420, #10034) +py_cobject_sources(#10420, 0) +py_cobjectnames(#10420, "values") +py_cmembers_versioned(#10386, "values", #10420, "2") +#10421 = @"C_type$dict$2viewitems" +py_cobjects(#10421) +py_cobjecttypes(#10421, #10034) +py_cobject_sources(#10421, 0) +py_cobjectnames(#10421, "viewitems") +py_cmembers_versioned(#10386, "viewitems", #10421, "2") +#10422 = @"C_type$dict$2viewkeys" +py_cobjects(#10422) +py_cobjecttypes(#10422, #10034) +py_cobject_sources(#10422, 0) +py_cobjectnames(#10422, "viewkeys") +py_cmembers_versioned(#10386, "viewkeys", #10422, "2") +#10423 = @"C_type$dict$2viewvalues" +py_cobjects(#10423) +py_cobjecttypes(#10423, #10034) +py_cobject_sources(#10423, 0) +py_cobjectnames(#10423, "viewvalues") +py_cmembers_versioned(#10386, "viewvalues", #10423, "2") +py_cmembers_versioned(#10386, ".super.", #10021, "2") +py_cobjectnames(#10386, "dict") +py_special_objects(#10386, "dict") +#10424 = @"C_type$KeyError" +py_cobjects(#10424) +py_cobjecttypes(#10424, #10001) +py_cobject_sources(#10424, 0) +#10425 = @"C_bytes$1bf40bf04fb389deaff59b33a134bd476cbe9941" +py_cobjects(#10425) +py_cobjecttypes(#10425, #10028) +py_cobject_sources(#10425, 0) +py_cobjectnames(#10425, "b'Mapping key not found.'") +py_cmembers_versioned(#10424, "__doc__", #10425, "2") +#10426 = @"C_type$KeyError$2__init__" +py_cobjects(#10426) +py_cobjecttypes(#10426, #10005) +py_cobject_sources(#10426, 0) +py_cobjectnames(#10426, "__init__") +py_cmembers_versioned(#10424, "__init__", #10426, "2") +#10427 = @"C_type$KeyError$2__new__" +py_cobjects(#10427) +py_cobjecttypes(#10427, #10075) +py_cobject_sources(#10427, 0) +py_cobjectnames(#10427, "__new__") +py_cmembers_versioned(#10424, "__new__", #10427, "2") +#10428 = @"C_type$KeyError$2__str__" +py_cobjects(#10428) +py_cobjecttypes(#10428, #10005) +py_cobject_sources(#10428, 0) +py_cobjectnames(#10428, "__str__") +py_cmembers_versioned(#10424, "__str__", #10428, "2") +#10429 = @"C_type$LookupError" +py_cobjects(#10429) +py_cobjecttypes(#10429, #10001) +py_cobject_sources(#10429, 0) +#10430 = @"C_bytes$9f990a862570cd714fcc0cff7871930d3846fee2" +py_cobjects(#10430) +py_cobjecttypes(#10430, #10028) +py_cobject_sources(#10430, 0) +py_cobjectnames(#10430, "b'Base class for lookup errors.'") +py_cmembers_versioned(#10429, "__doc__", #10430, "2") +#10431 = @"C_type$LookupError$2__init__" +py_cobjects(#10431) +py_cobjecttypes(#10431, #10005) +py_cobject_sources(#10431, 0) +py_cobjectnames(#10431, "__init__") +py_cmembers_versioned(#10429, "__init__", #10431, "2") +#10432 = @"C_type$LookupError$2__new__" +py_cobjects(#10432) +py_cobjecttypes(#10432, #10075) +py_cobject_sources(#10432, 0) +py_cobjectnames(#10432, "__new__") +py_cmembers_versioned(#10429, "__new__", #10432, "2") +py_cmembers_versioned(#10429, ".super.", #10346, "2") +py_cobjectnames(#10429, "LookupError") +py_cmembers_versioned(#10424, ".super.", #10429, "2") +py_cobjectnames(#10424, "KeyError") +py_special_objects(#10424, "KeyError") +#10433 = @"C_type$AttributeError" +py_cobjects(#10433) +py_cobjecttypes(#10433, #10001) +py_cobject_sources(#10433, 0) +#10434 = @"C_bytes$764af14d0af6210240b10ad4ed1a62054153f7b3" +py_cobjects(#10434) +py_cobjecttypes(#10434, #10028) +py_cobject_sources(#10434, 0) +py_cobjectnames(#10434, "b'Attribute not found.'") +py_cmembers_versioned(#10433, "__doc__", #10434, "2") +#10435 = @"C_type$AttributeError$2__init__" +py_cobjects(#10435) +py_cobjecttypes(#10435, #10005) +py_cobject_sources(#10435, 0) +py_cobjectnames(#10435, "__init__") +py_cmembers_versioned(#10433, "__init__", #10435, "2") +#10436 = @"C_type$AttributeError$2__new__" +py_cobjects(#10436) +py_cobjecttypes(#10436, #10075) +py_cobject_sources(#10436, 0) +py_cobjectnames(#10436, "__new__") +py_cmembers_versioned(#10433, "__new__", #10436, "2") +py_cmembers_versioned(#10433, ".super.", #10346, "2") +py_cobjectnames(#10433, "AttributeError") +py_special_objects(#10433, "AttributeError") +py_special_objects(#10034, "MethodDescriptorType") +#10437 = @"C_bool$True" +#10438 = @"C_type$bool" +py_cobjects(#10438) +py_cobjecttypes(#10438, #10001) +py_cobject_sources(#10438, 0) +#10439 = @"C_type$bool$2__and__" +py_cobjects(#10439) +py_cobjecttypes(#10439, #10005) +py_cobject_sources(#10439, 0) +py_cobjectnames(#10439, "__and__") +py_cmembers_versioned(#10438, "__and__", #10439, "2") +#10440 = @"C_bytes$2aa545b06094da6ed43e51b4261838ea756ee783" +py_cobjects(#10440) +py_cobjecttypes(#10440, #10028) +py_cobject_sources(#10440, 0) +py_cobjectnames(#10440, "b'bool(x) -> bool + +Returns True when the argument x is true, False otherwise. +The builtins True and False are the only two instances of the class bool. +The class bool is a subclass of the class int, and cannot be subclassed.'") +py_cmembers_versioned(#10438, "__doc__", #10440, "2") +#10441 = @"C_type$bool$2__new__" +py_cobjects(#10441) +py_cobjecttypes(#10441, #10075) +py_cobject_sources(#10441, 0) +py_cobjectnames(#10441, "__new__") +py_cmembers_versioned(#10438, "__new__", #10441, "2") +#10442 = @"C_type$bool$2__or__" +py_cobjects(#10442) +py_cobjecttypes(#10442, #10005) +py_cobject_sources(#10442, 0) +py_cobjectnames(#10442, "__or__") +py_cmembers_versioned(#10438, "__or__", #10442, "2") +#10443 = @"C_type$bool$2__rand__" +py_cobjects(#10443) +py_cobjecttypes(#10443, #10005) +py_cobject_sources(#10443, 0) +py_cobjectnames(#10443, "__rand__") +py_cmembers_versioned(#10438, "__rand__", #10443, "2") +#10444 = @"C_type$bool$2__repr__" +py_cobjects(#10444) +py_cobjecttypes(#10444, #10005) +py_cobject_sources(#10444, 0) +py_cobjectnames(#10444, "__repr__") +py_cmembers_versioned(#10438, "__repr__", #10444, "2") +#10445 = @"C_type$bool$2__ror__" +py_cobjects(#10445) +py_cobjecttypes(#10445, #10005) +py_cobject_sources(#10445, 0) +py_cobjectnames(#10445, "__ror__") +py_cmembers_versioned(#10438, "__ror__", #10445, "2") +#10446 = @"C_type$bool$2__rxor__" +py_cobjects(#10446) +py_cobjecttypes(#10446, #10005) +py_cobject_sources(#10446, 0) +py_cobjectnames(#10446, "__rxor__") +py_cmembers_versioned(#10438, "__rxor__", #10446, "2") +#10447 = @"C_type$bool$2__str__" +py_cobjects(#10447) +py_cobjecttypes(#10447, #10005) +py_cobject_sources(#10447, 0) +py_cobjectnames(#10447, "__str__") +py_cmembers_versioned(#10438, "__str__", #10447, "2") +#10448 = @"C_type$bool$2__xor__" +py_cobjects(#10448) +py_cobjecttypes(#10448, #10005) +py_cobject_sources(#10448, 0) +py_cobjectnames(#10448, "__xor__") +py_cmembers_versioned(#10438, "__xor__", #10448, "2") +#10449 = @"C_type$int" +py_cobjects(#10449) +py_cobjecttypes(#10449, #10001) +py_cobject_sources(#10449, 0) +#10450 = @"C_type$int$2__abs__" +py_cobjects(#10450) +py_cobjecttypes(#10450, #10005) +py_cobject_sources(#10450, 0) +py_cobjectnames(#10450, "__abs__") +py_cmembers_versioned(#10449, "__abs__", #10450, "2") +#10451 = @"C_type$int$2__add__" +py_cobjects(#10451) +py_cobjecttypes(#10451, #10005) +py_cobject_sources(#10451, 0) +py_cobjectnames(#10451, "__add__") +py_cmembers_versioned(#10449, "__add__", #10451, "2") +#10452 = @"C_type$int$2__and__" +py_cobjects(#10452) +py_cobjecttypes(#10452, #10005) +py_cobject_sources(#10452, 0) +py_cobjectnames(#10452, "__and__") +py_cmembers_versioned(#10449, "__and__", #10452, "2") +#10453 = @"C_type$int$2__cmp__" +py_cobjects(#10453) +py_cobjecttypes(#10453, #10005) +py_cobject_sources(#10453, 0) +py_cobjectnames(#10453, "__cmp__") +py_cmembers_versioned(#10449, "__cmp__", #10453, "2") +#10454 = @"C_type$int$2__coerce__" +py_cobjects(#10454) +py_cobjecttypes(#10454, #10005) +py_cobject_sources(#10454, 0) +py_cobjectnames(#10454, "__coerce__") +py_cmembers_versioned(#10449, "__coerce__", #10454, "2") +#10455 = @"C_type$int$2__div__" +py_cobjects(#10455) +py_cobjecttypes(#10455, #10005) +py_cobject_sources(#10455, 0) +py_cobjectnames(#10455, "__div__") +py_cmembers_versioned(#10449, "__div__", #10455, "2") +#10456 = @"C_type$int$2__divmod__" +py_cobjects(#10456) +py_cobjecttypes(#10456, #10005) +py_cobject_sources(#10456, 0) +py_cobjectnames(#10456, "__divmod__") +py_cmembers_versioned(#10449, "__divmod__", #10456, "2") +#10457 = @"C_bytes$ae429bd9441797e46a500607a0749fd432c18680" +py_cobjects(#10457) +py_cobjecttypes(#10457, #10028) +py_cobject_sources(#10457, 0) +py_cobjectnames(#10457, "b'int(x=0) -> int or long +int(x, base=10) -> int or long + +Convert a number or string to an integer, or return 0 if no arguments +are given. If x is floating point, the conversion truncates towards zero. +If x is outside the integer range, the function returns a long instead. + +If x is not a number or if base is given, then x must be a string or +Unicode object representing an integer literal in the given base. The +literal can be preceded by '+' or '-' and be surrounded by whitespace. +The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to +interpret the base from the string as an integer literal. +>>> int('0b100', base=0) +4'") +py_cmembers_versioned(#10449, "__doc__", #10457, "2") +#10458 = @"C_type$int$2__float__" +py_cobjects(#10458) +py_cobjecttypes(#10458, #10005) +py_cobject_sources(#10458, 0) +py_cobjectnames(#10458, "__float__") +py_cmembers_versioned(#10449, "__float__", #10458, "2") +#10459 = @"C_type$int$2__floordiv__" +py_cobjects(#10459) +py_cobjecttypes(#10459, #10005) +py_cobject_sources(#10459, 0) +py_cobjectnames(#10459, "__floordiv__") +py_cmembers_versioned(#10449, "__floordiv__", #10459, "2") +#10460 = @"C_type$int$2__format__" +py_cobjects(#10460) +py_cobjecttypes(#10460, #10034) +py_cobject_sources(#10460, 0) +py_cobjectnames(#10460, "__format__") +py_cmembers_versioned(#10449, "__format__", #10460, "2") +#10461 = @"C_type$int$2__getattribute__" +py_cobjects(#10461) +py_cobjecttypes(#10461, #10005) +py_cobject_sources(#10461, 0) +py_cobjectnames(#10461, "__getattribute__") +py_cmembers_versioned(#10449, "__getattribute__", #10461, "2") +#10462 = @"C_type$int$2__getnewargs__" +py_cobjects(#10462) +py_cobjecttypes(#10462, #10034) +py_cobject_sources(#10462, 0) +py_cobjectnames(#10462, "__getnewargs__") +py_cmembers_versioned(#10449, "__getnewargs__", #10462, "2") +#10463 = @"C_type$int$2__hash__" +py_cobjects(#10463) +py_cobjecttypes(#10463, #10005) +py_cobject_sources(#10463, 0) +py_cobjectnames(#10463, "__hash__") +py_cmembers_versioned(#10449, "__hash__", #10463, "2") +#10464 = @"C_type$int$2__hex__" +py_cobjects(#10464) +py_cobjecttypes(#10464, #10005) +py_cobject_sources(#10464, 0) +py_cobjectnames(#10464, "__hex__") +py_cmembers_versioned(#10449, "__hex__", #10464, "2") +#10465 = @"C_type$int$2__index__" +py_cobjects(#10465) +py_cobjecttypes(#10465, #10005) +py_cobject_sources(#10465, 0) +py_cobjectnames(#10465, "__index__") +py_cmembers_versioned(#10449, "__index__", #10465, "2") +#10466 = @"C_type$int$2__int__" +py_cobjects(#10466) +py_cobjecttypes(#10466, #10005) +py_cobject_sources(#10466, 0) +py_cobjectnames(#10466, "__int__") +py_cmembers_versioned(#10449, "__int__", #10466, "2") +#10467 = @"C_type$int$2__invert__" +py_cobjects(#10467) +py_cobjecttypes(#10467, #10005) +py_cobject_sources(#10467, 0) +py_cobjectnames(#10467, "__invert__") +py_cmembers_versioned(#10449, "__invert__", #10467, "2") +#10468 = @"C_type$int$2__long__" +py_cobjects(#10468) +py_cobjecttypes(#10468, #10005) +py_cobject_sources(#10468, 0) +py_cobjectnames(#10468, "__long__") +py_cmembers_versioned(#10449, "__long__", #10468, "2") +#10469 = @"C_type$int$2__lshift__" +py_cobjects(#10469) +py_cobjecttypes(#10469, #10005) +py_cobject_sources(#10469, 0) +py_cobjectnames(#10469, "__lshift__") +py_cmembers_versioned(#10449, "__lshift__", #10469, "2") +#10470 = @"C_type$int$2__mod__" +py_cobjects(#10470) +py_cobjecttypes(#10470, #10005) +py_cobject_sources(#10470, 0) +py_cobjectnames(#10470, "__mod__") +py_cmembers_versioned(#10449, "__mod__", #10470, "2") +#10471 = @"C_type$int$2__mul__" +py_cobjects(#10471) +py_cobjecttypes(#10471, #10005) +py_cobject_sources(#10471, 0) +py_cobjectnames(#10471, "__mul__") +py_cmembers_versioned(#10449, "__mul__", #10471, "2") +#10472 = @"C_type$int$2__neg__" +py_cobjects(#10472) +py_cobjecttypes(#10472, #10005) +py_cobject_sources(#10472, 0) +py_cobjectnames(#10472, "__neg__") +py_cmembers_versioned(#10449, "__neg__", #10472, "2") +#10473 = @"C_type$int$2__new__" +py_cobjects(#10473) +py_cobjecttypes(#10473, #10075) +py_cobject_sources(#10473, 0) +py_cobjectnames(#10473, "__new__") +py_cmembers_versioned(#10449, "__new__", #10473, "2") +#10474 = @"C_type$int$2__nonzero__" +py_cobjects(#10474) +py_cobjecttypes(#10474, #10005) +py_cobject_sources(#10474, 0) +py_cobjectnames(#10474, "__nonzero__") +py_cmembers_versioned(#10449, "__nonzero__", #10474, "2") +#10475 = @"C_type$int$2__oct__" +py_cobjects(#10475) +py_cobjecttypes(#10475, #10005) +py_cobject_sources(#10475, 0) +py_cobjectnames(#10475, "__oct__") +py_cmembers_versioned(#10449, "__oct__", #10475, "2") +#10476 = @"C_type$int$2__or__" +py_cobjects(#10476) +py_cobjecttypes(#10476, #10005) +py_cobject_sources(#10476, 0) +py_cobjectnames(#10476, "__or__") +py_cmembers_versioned(#10449, "__or__", #10476, "2") +#10477 = @"C_type$int$2__pos__" +py_cobjects(#10477) +py_cobjecttypes(#10477, #10005) +py_cobject_sources(#10477, 0) +py_cobjectnames(#10477, "__pos__") +py_cmembers_versioned(#10449, "__pos__", #10477, "2") +#10478 = @"C_type$int$2__pow__" +py_cobjects(#10478) +py_cobjecttypes(#10478, #10005) +py_cobject_sources(#10478, 0) +py_cobjectnames(#10478, "__pow__") +py_cmembers_versioned(#10449, "__pow__", #10478, "2") +#10479 = @"C_type$int$2__radd__" +py_cobjects(#10479) +py_cobjecttypes(#10479, #10005) +py_cobject_sources(#10479, 0) +py_cobjectnames(#10479, "__radd__") +py_cmembers_versioned(#10449, "__radd__", #10479, "2") +#10480 = @"C_type$int$2__rand__" +py_cobjects(#10480) +py_cobjecttypes(#10480, #10005) +py_cobject_sources(#10480, 0) +py_cobjectnames(#10480, "__rand__") +py_cmembers_versioned(#10449, "__rand__", #10480, "2") +#10481 = @"C_type$int$2__rdiv__" +py_cobjects(#10481) +py_cobjecttypes(#10481, #10005) +py_cobject_sources(#10481, 0) +py_cobjectnames(#10481, "__rdiv__") +py_cmembers_versioned(#10449, "__rdiv__", #10481, "2") +#10482 = @"C_type$int$2__rdivmod__" +py_cobjects(#10482) +py_cobjecttypes(#10482, #10005) +py_cobject_sources(#10482, 0) +py_cobjectnames(#10482, "__rdivmod__") +py_cmembers_versioned(#10449, "__rdivmod__", #10482, "2") +#10483 = @"C_type$int$2__repr__" +py_cobjects(#10483) +py_cobjecttypes(#10483, #10005) +py_cobject_sources(#10483, 0) +py_cobjectnames(#10483, "__repr__") +py_cmembers_versioned(#10449, "__repr__", #10483, "2") +#10484 = @"C_type$int$2__rfloordiv__" +py_cobjects(#10484) +py_cobjecttypes(#10484, #10005) +py_cobject_sources(#10484, 0) +py_cobjectnames(#10484, "__rfloordiv__") +py_cmembers_versioned(#10449, "__rfloordiv__", #10484, "2") +#10485 = @"C_type$int$2__rlshift__" +py_cobjects(#10485) +py_cobjecttypes(#10485, #10005) +py_cobject_sources(#10485, 0) +py_cobjectnames(#10485, "__rlshift__") +py_cmembers_versioned(#10449, "__rlshift__", #10485, "2") +#10486 = @"C_type$int$2__rmod__" +py_cobjects(#10486) +py_cobjecttypes(#10486, #10005) +py_cobject_sources(#10486, 0) +py_cobjectnames(#10486, "__rmod__") +py_cmembers_versioned(#10449, "__rmod__", #10486, "2") +#10487 = @"C_type$int$2__rmul__" +py_cobjects(#10487) +py_cobjecttypes(#10487, #10005) +py_cobject_sources(#10487, 0) +py_cobjectnames(#10487, "__rmul__") +py_cmembers_versioned(#10449, "__rmul__", #10487, "2") +#10488 = @"C_type$int$2__ror__" +py_cobjects(#10488) +py_cobjecttypes(#10488, #10005) +py_cobject_sources(#10488, 0) +py_cobjectnames(#10488, "__ror__") +py_cmembers_versioned(#10449, "__ror__", #10488, "2") +#10489 = @"C_type$int$2__rpow__" +py_cobjects(#10489) +py_cobjecttypes(#10489, #10005) +py_cobject_sources(#10489, 0) +py_cobjectnames(#10489, "__rpow__") +py_cmembers_versioned(#10449, "__rpow__", #10489, "2") +#10490 = @"C_type$int$2__rrshift__" +py_cobjects(#10490) +py_cobjecttypes(#10490, #10005) +py_cobject_sources(#10490, 0) +py_cobjectnames(#10490, "__rrshift__") +py_cmembers_versioned(#10449, "__rrshift__", #10490, "2") +#10491 = @"C_type$int$2__rshift__" +py_cobjects(#10491) +py_cobjecttypes(#10491, #10005) +py_cobject_sources(#10491, 0) +py_cobjectnames(#10491, "__rshift__") +py_cmembers_versioned(#10449, "__rshift__", #10491, "2") +#10492 = @"C_type$int$2__rsub__" +py_cobjects(#10492) +py_cobjecttypes(#10492, #10005) +py_cobject_sources(#10492, 0) +py_cobjectnames(#10492, "__rsub__") +py_cmembers_versioned(#10449, "__rsub__", #10492, "2") +#10493 = @"C_type$int$2__rtruediv__" +py_cobjects(#10493) +py_cobjecttypes(#10493, #10005) +py_cobject_sources(#10493, 0) +py_cobjectnames(#10493, "__rtruediv__") +py_cmembers_versioned(#10449, "__rtruediv__", #10493, "2") +#10494 = @"C_type$int$2__rxor__" +py_cobjects(#10494) +py_cobjecttypes(#10494, #10005) +py_cobject_sources(#10494, 0) +py_cobjectnames(#10494, "__rxor__") +py_cmembers_versioned(#10449, "__rxor__", #10494, "2") +#10495 = @"C_type$int$2__str__" +py_cobjects(#10495) +py_cobjecttypes(#10495, #10005) +py_cobject_sources(#10495, 0) +py_cobjectnames(#10495, "__str__") +py_cmembers_versioned(#10449, "__str__", #10495, "2") +#10496 = @"C_type$int$2__sub__" +py_cobjects(#10496) +py_cobjecttypes(#10496, #10005) +py_cobject_sources(#10496, 0) +py_cobjectnames(#10496, "__sub__") +py_cmembers_versioned(#10449, "__sub__", #10496, "2") +#10497 = @"C_type$int$2__truediv__" +py_cobjects(#10497) +py_cobjecttypes(#10497, #10005) +py_cobject_sources(#10497, 0) +py_cobjectnames(#10497, "__truediv__") +py_cmembers_versioned(#10449, "__truediv__", #10497, "2") +#10498 = @"C_type$int$2__trunc__" +py_cobjects(#10498) +py_cobjecttypes(#10498, #10034) +py_cobject_sources(#10498, 0) +py_cobjectnames(#10498, "__trunc__") +py_cmembers_versioned(#10449, "__trunc__", #10498, "2") +#10499 = @"C_type$int$2__xor__" +py_cobjects(#10499) +py_cobjecttypes(#10499, #10005) +py_cobject_sources(#10499, 0) +py_cobjectnames(#10499, "__xor__") +py_cmembers_versioned(#10449, "__xor__", #10499, "2") +#10500 = @"C_type$int$2bit_length" +py_cobjects(#10500) +py_cobjecttypes(#10500, #10034) +py_cobject_sources(#10500, 0) +py_cobjectnames(#10500, "bit_length") +py_cmembers_versioned(#10449, "bit_length", #10500, "2") +#10501 = @"C_type$int$2conjugate" +py_cobjects(#10501) +py_cobjecttypes(#10501, #10034) +py_cobject_sources(#10501, 0) +py_cobjectnames(#10501, "conjugate") +py_cmembers_versioned(#10449, "conjugate", #10501, "2") +#10502 = @"C_type$int$2denominator" +py_cobjects(#10502) +py_cobjecttypes(#10502, #10003) +py_cobject_sources(#10502, 0) +#10503 = @"C_type$int$2denominator$2__set__" +py_cobjects(#10503) +py_cobjecttypes(#10503, #10009) +py_cobject_sources(#10503, 0) +py_cobjectnames(#10503, "__set__") +py_cmembers_versioned(#10502, "__set__", #10503, "2") +#10504 = @"C_type$int$2denominator$2__getattribute__" +py_cobjects(#10504) +py_cobjecttypes(#10504, #10009) +py_cobject_sources(#10504, 0) +py_cobjectnames(#10504, "__getattribute__") +py_cmembers_versioned(#10502, "__getattribute__", #10504, "2") +py_cmembers_versioned(#10502, "__objclass__", #10449, "2") +#10505 = @"C_type$int$2denominator$2__repr__" +py_cobjects(#10505) +py_cobjecttypes(#10505, #10009) +py_cobject_sources(#10505, 0) +py_cobjectnames(#10505, "__repr__") +py_cmembers_versioned(#10502, "__repr__", #10505, "2") +#10506 = @"C_type$int$2denominator$2__get__" +py_cobjects(#10506) +py_cobjecttypes(#10506, #10009) +py_cobject_sources(#10506, 0) +py_cobjectnames(#10506, "__get__") +py_cmembers_versioned(#10502, "__get__", #10506, "2") +#10507 = @"C_bytes$d787ec075c36417b3622538483449d06564bf83c" +py_cobjects(#10507) +py_cobjecttypes(#10507, #10028) +py_cobject_sources(#10507, 0) +py_cobjectnames(#10507, "b'the denominator of a rational number in lowest terms'") +py_cmembers_versioned(#10502, "__doc__", #10507, "2") +#10508 = @"C_type$int$2denominator$2__delete__" +py_cobjects(#10508) +py_cobjecttypes(#10508, #10009) +py_cobject_sources(#10508, 0) +py_cobjectnames(#10508, "__delete__") +py_cmembers_versioned(#10502, "__delete__", #10508, "2") +py_cobjectnames(#10502, "denominator") +py_cmembers_versioned(#10449, "denominator", #10502, "2") +#10509 = @"C_type$int$2imag" +py_cobjects(#10509) +py_cobjecttypes(#10509, #10003) +py_cobject_sources(#10509, 0) +#10510 = @"C_type$int$2imag$2__set__" +py_cobjects(#10510) +py_cobjecttypes(#10510, #10009) +py_cobject_sources(#10510, 0) +py_cobjectnames(#10510, "__set__") +py_cmembers_versioned(#10509, "__set__", #10510, "2") +#10511 = @"C_type$int$2imag$2__getattribute__" +py_cobjects(#10511) +py_cobjecttypes(#10511, #10009) +py_cobject_sources(#10511, 0) +py_cobjectnames(#10511, "__getattribute__") +py_cmembers_versioned(#10509, "__getattribute__", #10511, "2") +py_cmembers_versioned(#10509, "__objclass__", #10449, "2") +#10512 = @"C_type$int$2imag$2__repr__" +py_cobjects(#10512) +py_cobjecttypes(#10512, #10009) +py_cobject_sources(#10512, 0) +py_cobjectnames(#10512, "__repr__") +py_cmembers_versioned(#10509, "__repr__", #10512, "2") +#10513 = @"C_type$int$2imag$2__get__" +py_cobjects(#10513) +py_cobjecttypes(#10513, #10009) +py_cobject_sources(#10513, 0) +py_cobjectnames(#10513, "__get__") +py_cmembers_versioned(#10509, "__get__", #10513, "2") +#10514 = @"C_bytes$1697c2b9b4c10d325b12cf3fded2fbfc0e15d5f0" +py_cobjects(#10514) +py_cobjecttypes(#10514, #10028) +py_cobject_sources(#10514, 0) +py_cobjectnames(#10514, "b'the imaginary part of a complex number'") +py_cmembers_versioned(#10509, "__doc__", #10514, "2") +#10515 = @"C_type$int$2imag$2__delete__" +py_cobjects(#10515) +py_cobjecttypes(#10515, #10009) +py_cobject_sources(#10515, 0) +py_cobjectnames(#10515, "__delete__") +py_cmembers_versioned(#10509, "__delete__", #10515, "2") +py_cobjectnames(#10509, "imag") +py_cmembers_versioned(#10449, "imag", #10509, "2") +#10516 = @"C_type$int$2numerator" +py_cobjects(#10516) +py_cobjecttypes(#10516, #10003) +py_cobject_sources(#10516, 0) +#10517 = @"C_type$int$2numerator$2__set__" +py_cobjects(#10517) +py_cobjecttypes(#10517, #10009) +py_cobject_sources(#10517, 0) +py_cobjectnames(#10517, "__set__") +py_cmembers_versioned(#10516, "__set__", #10517, "2") +#10518 = @"C_type$int$2numerator$2__getattribute__" +py_cobjects(#10518) +py_cobjecttypes(#10518, #10009) +py_cobject_sources(#10518, 0) +py_cobjectnames(#10518, "__getattribute__") +py_cmembers_versioned(#10516, "__getattribute__", #10518, "2") +py_cmembers_versioned(#10516, "__objclass__", #10449, "2") +#10519 = @"C_type$int$2numerator$2__repr__" +py_cobjects(#10519) +py_cobjecttypes(#10519, #10009) +py_cobject_sources(#10519, 0) +py_cobjectnames(#10519, "__repr__") +py_cmembers_versioned(#10516, "__repr__", #10519, "2") +#10520 = @"C_type$int$2numerator$2__get__" +py_cobjects(#10520) +py_cobjecttypes(#10520, #10009) +py_cobject_sources(#10520, 0) +py_cobjectnames(#10520, "__get__") +py_cmembers_versioned(#10516, "__get__", #10520, "2") +#10521 = @"C_bytes$b003a2de50c1e2b9c0432a073236cd9864f791cb" +py_cobjects(#10521) +py_cobjecttypes(#10521, #10028) +py_cobject_sources(#10521, 0) +py_cobjectnames(#10521, "b'the numerator of a rational number in lowest terms'") +py_cmembers_versioned(#10516, "__doc__", #10521, "2") +#10522 = @"C_type$int$2numerator$2__delete__" +py_cobjects(#10522) +py_cobjecttypes(#10522, #10009) +py_cobject_sources(#10522, 0) +py_cobjectnames(#10522, "__delete__") +py_cmembers_versioned(#10516, "__delete__", #10522, "2") +py_cobjectnames(#10516, "numerator") +py_cmembers_versioned(#10449, "numerator", #10516, "2") +#10523 = @"C_type$int$2real" +py_cobjects(#10523) +py_cobjecttypes(#10523, #10003) +py_cobject_sources(#10523, 0) +#10524 = @"C_type$int$2real$2__set__" +py_cobjects(#10524) +py_cobjecttypes(#10524, #10009) +py_cobject_sources(#10524, 0) +py_cobjectnames(#10524, "__set__") +py_cmembers_versioned(#10523, "__set__", #10524, "2") +#10525 = @"C_type$int$2real$2__getattribute__" +py_cobjects(#10525) +py_cobjecttypes(#10525, #10009) +py_cobject_sources(#10525, 0) +py_cobjectnames(#10525, "__getattribute__") +py_cmembers_versioned(#10523, "__getattribute__", #10525, "2") +py_cmembers_versioned(#10523, "__objclass__", #10449, "2") +#10526 = @"C_type$int$2real$2__repr__" +py_cobjects(#10526) +py_cobjecttypes(#10526, #10009) +py_cobject_sources(#10526, 0) +py_cobjectnames(#10526, "__repr__") +py_cmembers_versioned(#10523, "__repr__", #10526, "2") +#10527 = @"C_type$int$2real$2__get__" +py_cobjects(#10527) +py_cobjecttypes(#10527, #10009) +py_cobject_sources(#10527, 0) +py_cobjectnames(#10527, "__get__") +py_cmembers_versioned(#10523, "__get__", #10527, "2") +#10528 = @"C_bytes$2cb527e0bacedb07e674d6e9890d3d2ab1a8f487" +py_cobjects(#10528) +py_cobjecttypes(#10528, #10028) +py_cobject_sources(#10528, 0) +py_cobjectnames(#10528, "b'the real part of a complex number'") +py_cmembers_versioned(#10523, "__doc__", #10528, "2") +#10529 = @"C_type$int$2real$2__delete__" +py_cobjects(#10529) +py_cobjecttypes(#10529, #10009) +py_cobject_sources(#10529, 0) +py_cobjectnames(#10529, "__delete__") +py_cmembers_versioned(#10523, "__delete__", #10529, "2") +py_cobjectnames(#10523, "real") +py_cmembers_versioned(#10449, "real", #10523, "2") +py_cmembers_versioned(#10449, ".super.", #10021, "2") +py_cobjectnames(#10449, "int") +py_cmembers_versioned(#10438, ".super.", #10449, "2") +py_cobjectnames(#10438, "bool") +py_cobjects(#10437) +py_cobjecttypes(#10437, #10438) +py_cobject_sources(#10437, 0) +py_cobjectnames(#10437, "True") +py_special_objects(#10437, "True") +#10530 = @"C_builtin_function_or_method$builtins.globals" +py_cobjects(#10530) +py_cobjecttypes(#10530, #10075) +py_cobject_sources(#10530, 0) +py_cobjectnames(#10530, "globals") +py_special_objects(#10530, "globals") +#10531 = * +py_cobjects(#10531) +py_cobjecttypes(#10531, #10021) +py_cobject_sources(#10531, 0) +py_cobjectnames(#10531, "object") +py_special_objects(#10531, "_1") +#10532 = @"C_type$instance" +py_cobjects(#10532) +py_cobjecttypes(#10532, #10001) +py_cobject_sources(#10532, 0) +#10533 = @"C_type$instance$2__abs__" +py_cobjects(#10533) +py_cobjecttypes(#10533, #10005) +py_cobject_sources(#10533, 0) +py_cobjectnames(#10533, "__abs__") +py_cmembers_versioned(#10532, "__abs__", #10533, "2") +#10534 = @"C_type$instance$2__add__" +py_cobjects(#10534) +py_cobjecttypes(#10534, #10005) +py_cobject_sources(#10534, 0) +py_cobjectnames(#10534, "__add__") +py_cmembers_versioned(#10532, "__add__", #10534, "2") +#10535 = @"C_type$instance$2__and__" +py_cobjects(#10535) +py_cobjecttypes(#10535, #10005) +py_cobject_sources(#10535, 0) +py_cobjectnames(#10535, "__and__") +py_cmembers_versioned(#10532, "__and__", #10535, "2") +#10536 = @"C_type$instance$2__call__" +py_cobjects(#10536) +py_cobjecttypes(#10536, #10005) +py_cobject_sources(#10536, 0) +py_cobjectnames(#10536, "__call__") +py_cmembers_versioned(#10532, "__call__", #10536, "2") +#10537 = @"C_type$instance$2__cmp__" +py_cobjects(#10537) +py_cobjecttypes(#10537, #10005) +py_cobject_sources(#10537, 0) +py_cobjectnames(#10537, "__cmp__") +py_cmembers_versioned(#10532, "__cmp__", #10537, "2") +#10538 = @"C_type$instance$2__coerce__" +py_cobjects(#10538) +py_cobjecttypes(#10538, #10005) +py_cobject_sources(#10538, 0) +py_cobjectnames(#10538, "__coerce__") +py_cmembers_versioned(#10532, "__coerce__", #10538, "2") +#10539 = @"C_type$instance$2__contains__" +py_cobjects(#10539) +py_cobjecttypes(#10539, #10005) +py_cobject_sources(#10539, 0) +py_cobjectnames(#10539, "__contains__") +py_cmembers_versioned(#10532, "__contains__", #10539, "2") +#10540 = @"C_type$instance$2__delattr__" +py_cobjects(#10540) +py_cobjecttypes(#10540, #10005) +py_cobject_sources(#10540, 0) +py_cobjectnames(#10540, "__delattr__") +py_cmembers_versioned(#10532, "__delattr__", #10540, "2") +#10541 = @"C_type$instance$2__delitem__" +py_cobjects(#10541) +py_cobjecttypes(#10541, #10005) +py_cobject_sources(#10541, 0) +py_cobjectnames(#10541, "__delitem__") +py_cmembers_versioned(#10532, "__delitem__", #10541, "2") +#10542 = @"C_type$instance$2__delslice__" +py_cobjects(#10542) +py_cobjecttypes(#10542, #10005) +py_cobject_sources(#10542, 0) +py_cobjectnames(#10542, "__delslice__") +py_cmembers_versioned(#10532, "__delslice__", #10542, "2") +#10543 = @"C_type$instance$2__div__" +py_cobjects(#10543) +py_cobjecttypes(#10543, #10005) +py_cobject_sources(#10543, 0) +py_cobjectnames(#10543, "__div__") +py_cmembers_versioned(#10532, "__div__", #10543, "2") +#10544 = @"C_type$instance$2__divmod__" +py_cobjects(#10544) +py_cobjecttypes(#10544, #10005) +py_cobject_sources(#10544, 0) +py_cobjectnames(#10544, "__divmod__") +py_cmembers_versioned(#10532, "__divmod__", #10544, "2") +#10545 = @"C_bytes$9c8127711d14f46b4bc2a45fb22ab796798f3915" +py_cobjects(#10545) +py_cobjecttypes(#10545, #10028) +py_cobject_sources(#10545, 0) +py_cobjectnames(#10545, "b'instance(class[, dict]) + +Create an instance without calling its __init__() method. +The class must be a classic class. +If present, dict must be a dictionary or None.'") +py_cmembers_versioned(#10532, "__doc__", #10545, "2") +#10546 = @"C_type$instance$2__eq__" +py_cobjects(#10546) +py_cobjecttypes(#10546, #10005) +py_cobject_sources(#10546, 0) +py_cobjectnames(#10546, "__eq__") +py_cmembers_versioned(#10532, "__eq__", #10546, "2") +#10547 = @"C_type$instance$2__float__" +py_cobjects(#10547) +py_cobjecttypes(#10547, #10005) +py_cobject_sources(#10547, 0) +py_cobjectnames(#10547, "__float__") +py_cmembers_versioned(#10532, "__float__", #10547, "2") +#10548 = @"C_type$instance$2__floordiv__" +py_cobjects(#10548) +py_cobjecttypes(#10548, #10005) +py_cobject_sources(#10548, 0) +py_cobjectnames(#10548, "__floordiv__") +py_cmembers_versioned(#10532, "__floordiv__", #10548, "2") +#10549 = @"C_type$instance$2__ge__" +py_cobjects(#10549) +py_cobjecttypes(#10549, #10005) +py_cobject_sources(#10549, 0) +py_cobjectnames(#10549, "__ge__") +py_cmembers_versioned(#10532, "__ge__", #10549, "2") +#10550 = @"C_type$instance$2__getattribute__" +py_cobjects(#10550) +py_cobjecttypes(#10550, #10005) +py_cobject_sources(#10550, 0) +py_cobjectnames(#10550, "__getattribute__") +py_cmembers_versioned(#10532, "__getattribute__", #10550, "2") +#10551 = @"C_type$instance$2__getitem__" +py_cobjects(#10551) +py_cobjecttypes(#10551, #10005) +py_cobject_sources(#10551, 0) +py_cobjectnames(#10551, "__getitem__") +py_cmembers_versioned(#10532, "__getitem__", #10551, "2") +#10552 = @"C_type$instance$2__getslice__" +py_cobjects(#10552) +py_cobjecttypes(#10552, #10005) +py_cobject_sources(#10552, 0) +py_cobjectnames(#10552, "__getslice__") +py_cmembers_versioned(#10532, "__getslice__", #10552, "2") +#10553 = @"C_type$instance$2__gt__" +py_cobjects(#10553) +py_cobjecttypes(#10553, #10005) +py_cobject_sources(#10553, 0) +py_cobjectnames(#10553, "__gt__") +py_cmembers_versioned(#10532, "__gt__", #10553, "2") +#10554 = @"C_type$instance$2__hash__" +py_cobjects(#10554) +py_cobjecttypes(#10554, #10005) +py_cobject_sources(#10554, 0) +py_cobjectnames(#10554, "__hash__") +py_cmembers_versioned(#10532, "__hash__", #10554, "2") +#10555 = @"C_type$instance$2__hex__" +py_cobjects(#10555) +py_cobjecttypes(#10555, #10005) +py_cobject_sources(#10555, 0) +py_cobjectnames(#10555, "__hex__") +py_cmembers_versioned(#10532, "__hex__", #10555, "2") +#10556 = @"C_type$instance$2__iadd__" +py_cobjects(#10556) +py_cobjecttypes(#10556, #10005) +py_cobject_sources(#10556, 0) +py_cobjectnames(#10556, "__iadd__") +py_cmembers_versioned(#10532, "__iadd__", #10556, "2") +#10557 = @"C_type$instance$2__iand__" +py_cobjects(#10557) +py_cobjecttypes(#10557, #10005) +py_cobject_sources(#10557, 0) +py_cobjectnames(#10557, "__iand__") +py_cmembers_versioned(#10532, "__iand__", #10557, "2") +#10558 = @"C_type$instance$2__idiv__" +py_cobjects(#10558) +py_cobjecttypes(#10558, #10005) +py_cobject_sources(#10558, 0) +py_cobjectnames(#10558, "__idiv__") +py_cmembers_versioned(#10532, "__idiv__", #10558, "2") +#10559 = @"C_type$instance$2__ifloordiv__" +py_cobjects(#10559) +py_cobjecttypes(#10559, #10005) +py_cobject_sources(#10559, 0) +py_cobjectnames(#10559, "__ifloordiv__") +py_cmembers_versioned(#10532, "__ifloordiv__", #10559, "2") +#10560 = @"C_type$instance$2__ilshift__" +py_cobjects(#10560) +py_cobjecttypes(#10560, #10005) +py_cobject_sources(#10560, 0) +py_cobjectnames(#10560, "__ilshift__") +py_cmembers_versioned(#10532, "__ilshift__", #10560, "2") +#10561 = @"C_type$instance$2__imod__" +py_cobjects(#10561) +py_cobjecttypes(#10561, #10005) +py_cobject_sources(#10561, 0) +py_cobjectnames(#10561, "__imod__") +py_cmembers_versioned(#10532, "__imod__", #10561, "2") +#10562 = @"C_type$instance$2__imul__" +py_cobjects(#10562) +py_cobjecttypes(#10562, #10005) +py_cobject_sources(#10562, 0) +py_cobjectnames(#10562, "__imul__") +py_cmembers_versioned(#10532, "__imul__", #10562, "2") +#10563 = @"C_type$instance$2__index__" +py_cobjects(#10563) +py_cobjecttypes(#10563, #10005) +py_cobject_sources(#10563, 0) +py_cobjectnames(#10563, "__index__") +py_cmembers_versioned(#10532, "__index__", #10563, "2") +#10564 = @"C_type$instance$2__int__" +py_cobjects(#10564) +py_cobjecttypes(#10564, #10005) +py_cobject_sources(#10564, 0) +py_cobjectnames(#10564, "__int__") +py_cmembers_versioned(#10532, "__int__", #10564, "2") +#10565 = @"C_type$instance$2__invert__" +py_cobjects(#10565) +py_cobjecttypes(#10565, #10005) +py_cobject_sources(#10565, 0) +py_cobjectnames(#10565, "__invert__") +py_cmembers_versioned(#10532, "__invert__", #10565, "2") +#10566 = @"C_type$instance$2__ior__" +py_cobjects(#10566) +py_cobjecttypes(#10566, #10005) +py_cobject_sources(#10566, 0) +py_cobjectnames(#10566, "__ior__") +py_cmembers_versioned(#10532, "__ior__", #10566, "2") +#10567 = @"C_type$instance$2__ipow__" +py_cobjects(#10567) +py_cobjecttypes(#10567, #10005) +py_cobject_sources(#10567, 0) +py_cobjectnames(#10567, "__ipow__") +py_cmembers_versioned(#10532, "__ipow__", #10567, "2") +#10568 = @"C_type$instance$2__irshift__" +py_cobjects(#10568) +py_cobjecttypes(#10568, #10005) +py_cobject_sources(#10568, 0) +py_cobjectnames(#10568, "__irshift__") +py_cmembers_versioned(#10532, "__irshift__", #10568, "2") +#10569 = @"C_type$instance$2__isub__" +py_cobjects(#10569) +py_cobjecttypes(#10569, #10005) +py_cobject_sources(#10569, 0) +py_cobjectnames(#10569, "__isub__") +py_cmembers_versioned(#10532, "__isub__", #10569, "2") +#10570 = @"C_type$instance$2__iter__" +py_cobjects(#10570) +py_cobjecttypes(#10570, #10005) +py_cobject_sources(#10570, 0) +py_cobjectnames(#10570, "__iter__") +py_cmembers_versioned(#10532, "__iter__", #10570, "2") +#10571 = @"C_type$instance$2__itruediv__" +py_cobjects(#10571) +py_cobjecttypes(#10571, #10005) +py_cobject_sources(#10571, 0) +py_cobjectnames(#10571, "__itruediv__") +py_cmembers_versioned(#10532, "__itruediv__", #10571, "2") +#10572 = @"C_type$instance$2__ixor__" +py_cobjects(#10572) +py_cobjecttypes(#10572, #10005) +py_cobject_sources(#10572, 0) +py_cobjectnames(#10572, "__ixor__") +py_cmembers_versioned(#10532, "__ixor__", #10572, "2") +#10573 = @"C_type$instance$2__le__" +py_cobjects(#10573) +py_cobjecttypes(#10573, #10005) +py_cobject_sources(#10573, 0) +py_cobjectnames(#10573, "__le__") +py_cmembers_versioned(#10532, "__le__", #10573, "2") +#10574 = @"C_type$instance$2__len__" +py_cobjects(#10574) +py_cobjecttypes(#10574, #10005) +py_cobject_sources(#10574, 0) +py_cobjectnames(#10574, "__len__") +py_cmembers_versioned(#10532, "__len__", #10574, "2") +#10575 = @"C_type$instance$2__long__" +py_cobjects(#10575) +py_cobjecttypes(#10575, #10005) +py_cobject_sources(#10575, 0) +py_cobjectnames(#10575, "__long__") +py_cmembers_versioned(#10532, "__long__", #10575, "2") +#10576 = @"C_type$instance$2__lshift__" +py_cobjects(#10576) +py_cobjecttypes(#10576, #10005) +py_cobject_sources(#10576, 0) +py_cobjectnames(#10576, "__lshift__") +py_cmembers_versioned(#10532, "__lshift__", #10576, "2") +#10577 = @"C_type$instance$2__lt__" +py_cobjects(#10577) +py_cobjecttypes(#10577, #10005) +py_cobject_sources(#10577, 0) +py_cobjectnames(#10577, "__lt__") +py_cmembers_versioned(#10532, "__lt__", #10577, "2") +#10578 = @"C_type$instance$2__mod__" +py_cobjects(#10578) +py_cobjecttypes(#10578, #10005) +py_cobject_sources(#10578, 0) +py_cobjectnames(#10578, "__mod__") +py_cmembers_versioned(#10532, "__mod__", #10578, "2") +#10579 = @"C_type$instance$2__mul__" +py_cobjects(#10579) +py_cobjecttypes(#10579, #10005) +py_cobject_sources(#10579, 0) +py_cobjectnames(#10579, "__mul__") +py_cmembers_versioned(#10532, "__mul__", #10579, "2") +#10580 = @"C_type$instance$2__ne__" +py_cobjects(#10580) +py_cobjecttypes(#10580, #10005) +py_cobject_sources(#10580, 0) +py_cobjectnames(#10580, "__ne__") +py_cmembers_versioned(#10532, "__ne__", #10580, "2") +#10581 = @"C_type$instance$2__neg__" +py_cobjects(#10581) +py_cobjecttypes(#10581, #10005) +py_cobject_sources(#10581, 0) +py_cobjectnames(#10581, "__neg__") +py_cmembers_versioned(#10532, "__neg__", #10581, "2") +#10582 = @"C_type$instance$2__new__" +py_cobjects(#10582) +py_cobjecttypes(#10582, #10075) +py_cobject_sources(#10582, 0) +py_cobjectnames(#10582, "__new__") +py_cmembers_versioned(#10532, "__new__", #10582, "2") +#10583 = @"C_type$instance$2__nonzero__" +py_cobjects(#10583) +py_cobjecttypes(#10583, #10005) +py_cobject_sources(#10583, 0) +py_cobjectnames(#10583, "__nonzero__") +py_cmembers_versioned(#10532, "__nonzero__", #10583, "2") +#10584 = @"C_type$instance$2__oct__" +py_cobjects(#10584) +py_cobjecttypes(#10584, #10005) +py_cobject_sources(#10584, 0) +py_cobjectnames(#10584, "__oct__") +py_cmembers_versioned(#10532, "__oct__", #10584, "2") +#10585 = @"C_type$instance$2__or__" +py_cobjects(#10585) +py_cobjecttypes(#10585, #10005) +py_cobject_sources(#10585, 0) +py_cobjectnames(#10585, "__or__") +py_cmembers_versioned(#10532, "__or__", #10585, "2") +#10586 = @"C_type$instance$2__pos__" +py_cobjects(#10586) +py_cobjecttypes(#10586, #10005) +py_cobject_sources(#10586, 0) +py_cobjectnames(#10586, "__pos__") +py_cmembers_versioned(#10532, "__pos__", #10586, "2") +#10587 = @"C_type$instance$2__pow__" +py_cobjects(#10587) +py_cobjecttypes(#10587, #10005) +py_cobject_sources(#10587, 0) +py_cobjectnames(#10587, "__pow__") +py_cmembers_versioned(#10532, "__pow__", #10587, "2") +#10588 = @"C_type$instance$2__radd__" +py_cobjects(#10588) +py_cobjecttypes(#10588, #10005) +py_cobject_sources(#10588, 0) +py_cobjectnames(#10588, "__radd__") +py_cmembers_versioned(#10532, "__radd__", #10588, "2") +#10589 = @"C_type$instance$2__rand__" +py_cobjects(#10589) +py_cobjecttypes(#10589, #10005) +py_cobject_sources(#10589, 0) +py_cobjectnames(#10589, "__rand__") +py_cmembers_versioned(#10532, "__rand__", #10589, "2") +#10590 = @"C_type$instance$2__rdiv__" +py_cobjects(#10590) +py_cobjecttypes(#10590, #10005) +py_cobject_sources(#10590, 0) +py_cobjectnames(#10590, "__rdiv__") +py_cmembers_versioned(#10532, "__rdiv__", #10590, "2") +#10591 = @"C_type$instance$2__rdivmod__" +py_cobjects(#10591) +py_cobjecttypes(#10591, #10005) +py_cobject_sources(#10591, 0) +py_cobjectnames(#10591, "__rdivmod__") +py_cmembers_versioned(#10532, "__rdivmod__", #10591, "2") +#10592 = @"C_type$instance$2__repr__" +py_cobjects(#10592) +py_cobjecttypes(#10592, #10005) +py_cobject_sources(#10592, 0) +py_cobjectnames(#10592, "__repr__") +py_cmembers_versioned(#10532, "__repr__", #10592, "2") +#10593 = @"C_type$instance$2__rfloordiv__" +py_cobjects(#10593) +py_cobjecttypes(#10593, #10005) +py_cobject_sources(#10593, 0) +py_cobjectnames(#10593, "__rfloordiv__") +py_cmembers_versioned(#10532, "__rfloordiv__", #10593, "2") +#10594 = @"C_type$instance$2__rlshift__" +py_cobjects(#10594) +py_cobjecttypes(#10594, #10005) +py_cobject_sources(#10594, 0) +py_cobjectnames(#10594, "__rlshift__") +py_cmembers_versioned(#10532, "__rlshift__", #10594, "2") +#10595 = @"C_type$instance$2__rmod__" +py_cobjects(#10595) +py_cobjecttypes(#10595, #10005) +py_cobject_sources(#10595, 0) +py_cobjectnames(#10595, "__rmod__") +py_cmembers_versioned(#10532, "__rmod__", #10595, "2") +#10596 = @"C_type$instance$2__rmul__" +py_cobjects(#10596) +py_cobjecttypes(#10596, #10005) +py_cobject_sources(#10596, 0) +py_cobjectnames(#10596, "__rmul__") +py_cmembers_versioned(#10532, "__rmul__", #10596, "2") +#10597 = @"C_type$instance$2__ror__" +py_cobjects(#10597) +py_cobjecttypes(#10597, #10005) +py_cobject_sources(#10597, 0) +py_cobjectnames(#10597, "__ror__") +py_cmembers_versioned(#10532, "__ror__", #10597, "2") +#10598 = @"C_type$instance$2__rpow__" +py_cobjects(#10598) +py_cobjecttypes(#10598, #10005) +py_cobject_sources(#10598, 0) +py_cobjectnames(#10598, "__rpow__") +py_cmembers_versioned(#10532, "__rpow__", #10598, "2") +#10599 = @"C_type$instance$2__rrshift__" +py_cobjects(#10599) +py_cobjecttypes(#10599, #10005) +py_cobject_sources(#10599, 0) +py_cobjectnames(#10599, "__rrshift__") +py_cmembers_versioned(#10532, "__rrshift__", #10599, "2") +#10600 = @"C_type$instance$2__rshift__" +py_cobjects(#10600) +py_cobjecttypes(#10600, #10005) +py_cobject_sources(#10600, 0) +py_cobjectnames(#10600, "__rshift__") +py_cmembers_versioned(#10532, "__rshift__", #10600, "2") +#10601 = @"C_type$instance$2__rsub__" +py_cobjects(#10601) +py_cobjecttypes(#10601, #10005) +py_cobject_sources(#10601, 0) +py_cobjectnames(#10601, "__rsub__") +py_cmembers_versioned(#10532, "__rsub__", #10601, "2") +#10602 = @"C_type$instance$2__rtruediv__" +py_cobjects(#10602) +py_cobjecttypes(#10602, #10005) +py_cobject_sources(#10602, 0) +py_cobjectnames(#10602, "__rtruediv__") +py_cmembers_versioned(#10532, "__rtruediv__", #10602, "2") +#10603 = @"C_type$instance$2__rxor__" +py_cobjects(#10603) +py_cobjecttypes(#10603, #10005) +py_cobject_sources(#10603, 0) +py_cobjectnames(#10603, "__rxor__") +py_cmembers_versioned(#10532, "__rxor__", #10603, "2") +#10604 = @"C_type$instance$2__setattr__" +py_cobjects(#10604) +py_cobjecttypes(#10604, #10005) +py_cobject_sources(#10604, 0) +py_cobjectnames(#10604, "__setattr__") +py_cmembers_versioned(#10532, "__setattr__", #10604, "2") +#10605 = @"C_type$instance$2__setitem__" +py_cobjects(#10605) +py_cobjecttypes(#10605, #10005) +py_cobject_sources(#10605, 0) +py_cobjectnames(#10605, "__setitem__") +py_cmembers_versioned(#10532, "__setitem__", #10605, "2") +#10606 = @"C_type$instance$2__setslice__" +py_cobjects(#10606) +py_cobjecttypes(#10606, #10005) +py_cobject_sources(#10606, 0) +py_cobjectnames(#10606, "__setslice__") +py_cmembers_versioned(#10532, "__setslice__", #10606, "2") +#10607 = @"C_type$instance$2__str__" +py_cobjects(#10607) +py_cobjecttypes(#10607, #10005) +py_cobject_sources(#10607, 0) +py_cobjectnames(#10607, "__str__") +py_cmembers_versioned(#10532, "__str__", #10607, "2") +#10608 = @"C_type$instance$2__sub__" +py_cobjects(#10608) +py_cobjecttypes(#10608, #10005) +py_cobject_sources(#10608, 0) +py_cobjectnames(#10608, "__sub__") +py_cmembers_versioned(#10532, "__sub__", #10608, "2") +#10609 = @"C_type$instance$2__truediv__" +py_cobjects(#10609) +py_cobjecttypes(#10609, #10005) +py_cobject_sources(#10609, 0) +py_cobjectnames(#10609, "__truediv__") +py_cmembers_versioned(#10532, "__truediv__", #10609, "2") +#10610 = @"C_type$instance$2__xor__" +py_cobjects(#10610) +py_cobjecttypes(#10610, #10005) +py_cobject_sources(#10610, 0) +py_cobjectnames(#10610, "__xor__") +py_cmembers_versioned(#10532, "__xor__", #10610, "2") +#10611 = @"C_type$instance$2next" +py_cobjects(#10611) +py_cobjecttypes(#10611, #10005) +py_cobject_sources(#10611, 0) +py_cobjectnames(#10611, "next") +py_cmembers_versioned(#10532, "next", #10611, "2") +py_cmembers_versioned(#10532, ".super.", #10021, "2") +py_cobjectnames(#10532, "instance") +py_special_objects(#10532, "InstanceType") +#10612 = @"C_type$classobj" +py_cobjects(#10612) +py_cobjecttypes(#10612, #10001) +py_cobject_sources(#10612, 0) +#10613 = @"C_type$classobj$2__call__" +py_cobjects(#10613) +py_cobjecttypes(#10613, #10005) +py_cobject_sources(#10613, 0) +py_cobjectnames(#10613, "__call__") +py_cmembers_versioned(#10612, "__call__", #10613, "2") +#10614 = @"C_type$classobj$2__delattr__" +py_cobjects(#10614) +py_cobjecttypes(#10614, #10005) +py_cobject_sources(#10614, 0) +py_cobjectnames(#10614, "__delattr__") +py_cmembers_versioned(#10612, "__delattr__", #10614, "2") +#10615 = @"C_bytes$a7256df604b335f986bdeaa2ec3b1c4af8804e05" +py_cobjects(#10615) +py_cobjecttypes(#10615, #10028) +py_cobject_sources(#10615, 0) +py_cobjectnames(#10615, "b'classobj(name, bases, dict) + +Create a class object. The name must be a string; the second argument +a tuple of classes, and the third a dictionary.'") +py_cmembers_versioned(#10612, "__doc__", #10615, "2") +#10616 = @"C_type$classobj$2__getattribute__" +py_cobjects(#10616) +py_cobjecttypes(#10616, #10005) +py_cobject_sources(#10616, 0) +py_cobjectnames(#10616, "__getattribute__") +py_cmembers_versioned(#10612, "__getattribute__", #10616, "2") +#10617 = @"C_type$classobj$2__new__" +py_cobjects(#10617) +py_cobjecttypes(#10617, #10075) +py_cobject_sources(#10617, 0) +py_cobjectnames(#10617, "__new__") +py_cmembers_versioned(#10612, "__new__", #10617, "2") +#10618 = @"C_type$classobj$2__repr__" +py_cobjects(#10618) +py_cobjecttypes(#10618, #10005) +py_cobject_sources(#10618, 0) +py_cobjectnames(#10618, "__repr__") +py_cmembers_versioned(#10612, "__repr__", #10618, "2") +#10619 = @"C_type$classobj$2__setattr__" +py_cobjects(#10619) +py_cobjecttypes(#10619, #10005) +py_cobject_sources(#10619, 0) +py_cobjectnames(#10619, "__setattr__") +py_cmembers_versioned(#10612, "__setattr__", #10619, "2") +#10620 = @"C_type$classobj$2__str__" +py_cobjects(#10620) +py_cobjecttypes(#10620, #10005) +py_cobject_sources(#10620, 0) +py_cobjectnames(#10620, "__str__") +py_cmembers_versioned(#10612, "__str__", #10620, "2") +py_cmembers_versioned(#10612, ".super.", #10021, "2") +py_cobjectnames(#10612, "classobj") +py_special_objects(#10612, "ClassType") +py_special_objects(#10018, "NoneType") +#10621 = @"C_type$instancemethod" +py_cobjects(#10621) +py_cobjecttypes(#10621, #10001) +py_cobject_sources(#10621, 0) +#10622 = @"C_type$instancemethod$2__call__" +py_cobjects(#10622) +py_cobjecttypes(#10622, #10005) +py_cobject_sources(#10622, 0) +py_cobjectnames(#10622, "__call__") +py_cmembers_versioned(#10621, "__call__", #10622, "2") +#10623 = @"C_type$instancemethod$2__cmp__" +py_cobjects(#10623) +py_cobjecttypes(#10623, #10005) +py_cobject_sources(#10623, 0) +py_cobjectnames(#10623, "__cmp__") +py_cmembers_versioned(#10621, "__cmp__", #10623, "2") +#10624 = @"C_type$instancemethod$2__delattr__" +py_cobjects(#10624) +py_cobjecttypes(#10624, #10005) +py_cobject_sources(#10624, 0) +py_cobjectnames(#10624, "__delattr__") +py_cmembers_versioned(#10621, "__delattr__", #10624, "2") +#10625 = @"C_type$instancemethod$2__doc__" +py_cobjects(#10625) +py_cobjecttypes(#10625, #10003) +py_cobject_sources(#10625, 0) +#10626 = @"C_type$instancemethod$2__doc__$2__set__" +py_cobjects(#10626) +py_cobjecttypes(#10626, #10009) +py_cobject_sources(#10626, 0) +py_cobjectnames(#10626, "__set__") +py_cmembers_versioned(#10625, "__set__", #10626, "2") +#10627 = @"C_type$instancemethod$2__doc__$2__getattribute__" +py_cobjects(#10627) +py_cobjecttypes(#10627, #10009) +py_cobject_sources(#10627, 0) +py_cobjectnames(#10627, "__getattribute__") +py_cmembers_versioned(#10625, "__getattribute__", #10627, "2") +py_cmembers_versioned(#10625, "__objclass__", #10621, "2") +#10628 = @"C_type$instancemethod$2__doc__$2__repr__" +py_cobjects(#10628) +py_cobjecttypes(#10628, #10009) +py_cobject_sources(#10628, 0) +py_cobjectnames(#10628, "__repr__") +py_cmembers_versioned(#10625, "__repr__", #10628, "2") +#10629 = @"C_type$instancemethod$2__doc__$2__get__" +py_cobjects(#10629) +py_cobjecttypes(#10629, #10009) +py_cobject_sources(#10629, 0) +py_cobjectnames(#10629, "__get__") +py_cmembers_versioned(#10625, "__get__", #10629, "2") +py_cmembers_versioned(#10625, "__doc__", #10017, "2") +#10630 = @"C_type$instancemethod$2__doc__$2__delete__" +py_cobjects(#10630) +py_cobjecttypes(#10630, #10009) +py_cobject_sources(#10630, 0) +py_cobjectnames(#10630, "__delete__") +py_cmembers_versioned(#10625, "__delete__", #10630, "2") +py_cobjectnames(#10625, "__doc__") +py_cmembers_versioned(#10621, "__doc__", #10625, "2") +#10631 = @"C_type$instancemethod$2__func__" +py_cobjects(#10631) +py_cobjecttypes(#10631, #10045) +py_cobject_sources(#10631, 0) +py_cobjectnames(#10631, "__func__") +py_cmembers_versioned(#10621, "__func__", #10631, "2") +#10632 = @"C_type$instancemethod$2__get__" +py_cobjects(#10632) +py_cobjecttypes(#10632, #10005) +py_cobject_sources(#10632, 0) +py_cobjectnames(#10632, "__get__") +py_cmembers_versioned(#10621, "__get__", #10632, "2") +#10633 = @"C_type$instancemethod$2__getattribute__" +py_cobjects(#10633) +py_cobjecttypes(#10633, #10005) +py_cobject_sources(#10633, 0) +py_cobjectnames(#10633, "__getattribute__") +py_cmembers_versioned(#10621, "__getattribute__", #10633, "2") +#10634 = @"C_type$instancemethod$2__hash__" +py_cobjects(#10634) +py_cobjecttypes(#10634, #10005) +py_cobject_sources(#10634, 0) +py_cobjectnames(#10634, "__hash__") +py_cmembers_versioned(#10621, "__hash__", #10634, "2") +#10635 = @"C_type$instancemethod$2__new__" +py_cobjects(#10635) +py_cobjecttypes(#10635, #10075) +py_cobject_sources(#10635, 0) +py_cobjectnames(#10635, "__new__") +py_cmembers_versioned(#10621, "__new__", #10635, "2") +#10636 = @"C_type$instancemethod$2__repr__" +py_cobjects(#10636) +py_cobjecttypes(#10636, #10005) +py_cobject_sources(#10636, 0) +py_cobjectnames(#10636, "__repr__") +py_cmembers_versioned(#10621, "__repr__", #10636, "2") +#10637 = @"C_type$instancemethod$2__self__" +py_cobjects(#10637) +py_cobjecttypes(#10637, #10045) +py_cobject_sources(#10637, 0) +py_cobjectnames(#10637, "__self__") +py_cmembers_versioned(#10621, "__self__", #10637, "2") +#10638 = @"C_type$instancemethod$2__setattr__" +py_cobjects(#10638) +py_cobjecttypes(#10638, #10005) +py_cobject_sources(#10638, 0) +py_cobjectnames(#10638, "__setattr__") +py_cmembers_versioned(#10621, "__setattr__", #10638, "2") +#10639 = @"C_type$instancemethod$2im_class" +py_cobjects(#10639) +py_cobjecttypes(#10639, #10045) +py_cobject_sources(#10639, 0) +py_cobjectnames(#10639, "im_class") +py_cmembers_versioned(#10621, "im_class", #10639, "2") +#10640 = @"C_type$instancemethod$2im_func" +py_cobjects(#10640) +py_cobjecttypes(#10640, #10045) +py_cobject_sources(#10640, 0) +py_cobjectnames(#10640, "im_func") +py_cmembers_versioned(#10621, "im_func", #10640, "2") +#10641 = @"C_type$instancemethod$2im_self" +py_cobjects(#10641) +py_cobjecttypes(#10641, #10045) +py_cobject_sources(#10641, 0) +py_cobjectnames(#10641, "im_self") +py_cmembers_versioned(#10621, "im_self", #10641, "2") +py_cmembers_versioned(#10621, ".super.", #10021, "2") +py_cobjectnames(#10621, "instancemethod") +py_special_objects(#10621, "MethodType") +#10642 = @"C_bytes$77de68daecd823babbb58edb1c8e14d7106e83bb" +py_cobjects(#10642) +py_cobjecttypes(#10642, #10028) +py_cobject_sources(#10642, 0) +py_cobjectnames(#10642, "b'3'") +py_special_objects(#10642, "u3") +#10643 = @"C_bytes$da4b9237bacccdf19c0760cab7aec4a8359010b0" +py_cobjects(#10643) +py_cobjecttypes(#10643, #10028) +py_cobject_sources(#10643, 0) +py_cobjectnames(#10643, "b'2'") +py_special_objects(#10643, "u2") +#10644 = @"C_bool$False" +py_cobjects(#10644) +py_cobjecttypes(#10644, #10438) +py_cobject_sources(#10644, 0) +py_cobjectnames(#10644, "False") +py_special_objects(#10644, "False") +#10645 = @"C_type$long" +py_cobjects(#10645) +py_cobjecttypes(#10645, #10001) +py_cobject_sources(#10645, 0) +#10646 = @"C_type$long$2__abs__" +py_cobjects(#10646) +py_cobjecttypes(#10646, #10005) +py_cobject_sources(#10646, 0) +py_cobjectnames(#10646, "__abs__") +py_cmembers_versioned(#10645, "__abs__", #10646, "2") +#10647 = @"C_type$long$2__add__" +py_cobjects(#10647) +py_cobjecttypes(#10647, #10005) +py_cobject_sources(#10647, 0) +py_cobjectnames(#10647, "__add__") +py_cmembers_versioned(#10645, "__add__", #10647, "2") +#10648 = @"C_type$long$2__and__" +py_cobjects(#10648) +py_cobjecttypes(#10648, #10005) +py_cobject_sources(#10648, 0) +py_cobjectnames(#10648, "__and__") +py_cmembers_versioned(#10645, "__and__", #10648, "2") +#10649 = @"C_type$long$2__cmp__" +py_cobjects(#10649) +py_cobjecttypes(#10649, #10005) +py_cobject_sources(#10649, 0) +py_cobjectnames(#10649, "__cmp__") +py_cmembers_versioned(#10645, "__cmp__", #10649, "2") +#10650 = @"C_type$long$2__coerce__" +py_cobjects(#10650) +py_cobjecttypes(#10650, #10005) +py_cobject_sources(#10650, 0) +py_cobjectnames(#10650, "__coerce__") +py_cmembers_versioned(#10645, "__coerce__", #10650, "2") +#10651 = @"C_type$long$2__div__" +py_cobjects(#10651) +py_cobjecttypes(#10651, #10005) +py_cobject_sources(#10651, 0) +py_cobjectnames(#10651, "__div__") +py_cmembers_versioned(#10645, "__div__", #10651, "2") +#10652 = @"C_type$long$2__divmod__" +py_cobjects(#10652) +py_cobjecttypes(#10652, #10005) +py_cobject_sources(#10652, 0) +py_cobjectnames(#10652, "__divmod__") +py_cmembers_versioned(#10645, "__divmod__", #10652, "2") +#10653 = @"C_bytes$5bbbbe7e043697c834e9470611c2c45a408c6b4a" +py_cobjects(#10653) +py_cobjecttypes(#10653, #10028) +py_cobject_sources(#10653, 0) +py_cobjectnames(#10653, "b'long(x=0) -> long +long(x, base=10) -> long + +Convert a number or string to a long integer, or return 0L if no arguments +are given. If x is floating point, the conversion truncates towards zero. + +If x is not a number or if base is given, then x must be a string or +Unicode object representing an integer literal in the given base. The +literal can be preceded by '+' or '-' and be surrounded by whitespace. +The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to +interpret the base from the string as an integer literal. +>>> int('0b100', base=0) +4L'") +py_cmembers_versioned(#10645, "__doc__", #10653, "2") +#10654 = @"C_type$long$2__float__" +py_cobjects(#10654) +py_cobjecttypes(#10654, #10005) +py_cobject_sources(#10654, 0) +py_cobjectnames(#10654, "__float__") +py_cmembers_versioned(#10645, "__float__", #10654, "2") +#10655 = @"C_type$long$2__floordiv__" +py_cobjects(#10655) +py_cobjecttypes(#10655, #10005) +py_cobject_sources(#10655, 0) +py_cobjectnames(#10655, "__floordiv__") +py_cmembers_versioned(#10645, "__floordiv__", #10655, "2") +#10656 = @"C_type$long$2__format__" +py_cobjects(#10656) +py_cobjecttypes(#10656, #10034) +py_cobject_sources(#10656, 0) +py_cobjectnames(#10656, "__format__") +py_cmembers_versioned(#10645, "__format__", #10656, "2") +#10657 = @"C_type$long$2__getattribute__" +py_cobjects(#10657) +py_cobjecttypes(#10657, #10005) +py_cobject_sources(#10657, 0) +py_cobjectnames(#10657, "__getattribute__") +py_cmembers_versioned(#10645, "__getattribute__", #10657, "2") +#10658 = @"C_type$long$2__getnewargs__" +py_cobjects(#10658) +py_cobjecttypes(#10658, #10034) +py_cobject_sources(#10658, 0) +py_cobjectnames(#10658, "__getnewargs__") +py_cmembers_versioned(#10645, "__getnewargs__", #10658, "2") +#10659 = @"C_type$long$2__hash__" +py_cobjects(#10659) +py_cobjecttypes(#10659, #10005) +py_cobject_sources(#10659, 0) +py_cobjectnames(#10659, "__hash__") +py_cmembers_versioned(#10645, "__hash__", #10659, "2") +#10660 = @"C_type$long$2__hex__" +py_cobjects(#10660) +py_cobjecttypes(#10660, #10005) +py_cobject_sources(#10660, 0) +py_cobjectnames(#10660, "__hex__") +py_cmembers_versioned(#10645, "__hex__", #10660, "2") +#10661 = @"C_type$long$2__index__" +py_cobjects(#10661) +py_cobjecttypes(#10661, #10005) +py_cobject_sources(#10661, 0) +py_cobjectnames(#10661, "__index__") +py_cmembers_versioned(#10645, "__index__", #10661, "2") +#10662 = @"C_type$long$2__int__" +py_cobjects(#10662) +py_cobjecttypes(#10662, #10005) +py_cobject_sources(#10662, 0) +py_cobjectnames(#10662, "__int__") +py_cmembers_versioned(#10645, "__int__", #10662, "2") +#10663 = @"C_type$long$2__invert__" +py_cobjects(#10663) +py_cobjecttypes(#10663, #10005) +py_cobject_sources(#10663, 0) +py_cobjectnames(#10663, "__invert__") +py_cmembers_versioned(#10645, "__invert__", #10663, "2") +#10664 = @"C_type$long$2__long__" +py_cobjects(#10664) +py_cobjecttypes(#10664, #10005) +py_cobject_sources(#10664, 0) +py_cobjectnames(#10664, "__long__") +py_cmembers_versioned(#10645, "__long__", #10664, "2") +#10665 = @"C_type$long$2__lshift__" +py_cobjects(#10665) +py_cobjecttypes(#10665, #10005) +py_cobject_sources(#10665, 0) +py_cobjectnames(#10665, "__lshift__") +py_cmembers_versioned(#10645, "__lshift__", #10665, "2") +#10666 = @"C_type$long$2__mod__" +py_cobjects(#10666) +py_cobjecttypes(#10666, #10005) +py_cobject_sources(#10666, 0) +py_cobjectnames(#10666, "__mod__") +py_cmembers_versioned(#10645, "__mod__", #10666, "2") +#10667 = @"C_type$long$2__mul__" +py_cobjects(#10667) +py_cobjecttypes(#10667, #10005) +py_cobject_sources(#10667, 0) +py_cobjectnames(#10667, "__mul__") +py_cmembers_versioned(#10645, "__mul__", #10667, "2") +#10668 = @"C_type$long$2__neg__" +py_cobjects(#10668) +py_cobjecttypes(#10668, #10005) +py_cobject_sources(#10668, 0) +py_cobjectnames(#10668, "__neg__") +py_cmembers_versioned(#10645, "__neg__", #10668, "2") +#10669 = @"C_type$long$2__new__" +py_cobjects(#10669) +py_cobjecttypes(#10669, #10075) +py_cobject_sources(#10669, 0) +py_cobjectnames(#10669, "__new__") +py_cmembers_versioned(#10645, "__new__", #10669, "2") +#10670 = @"C_type$long$2__nonzero__" +py_cobjects(#10670) +py_cobjecttypes(#10670, #10005) +py_cobject_sources(#10670, 0) +py_cobjectnames(#10670, "__nonzero__") +py_cmembers_versioned(#10645, "__nonzero__", #10670, "2") +#10671 = @"C_type$long$2__oct__" +py_cobjects(#10671) +py_cobjecttypes(#10671, #10005) +py_cobject_sources(#10671, 0) +py_cobjectnames(#10671, "__oct__") +py_cmembers_versioned(#10645, "__oct__", #10671, "2") +#10672 = @"C_type$long$2__or__" +py_cobjects(#10672) +py_cobjecttypes(#10672, #10005) +py_cobject_sources(#10672, 0) +py_cobjectnames(#10672, "__or__") +py_cmembers_versioned(#10645, "__or__", #10672, "2") +#10673 = @"C_type$long$2__pos__" +py_cobjects(#10673) +py_cobjecttypes(#10673, #10005) +py_cobject_sources(#10673, 0) +py_cobjectnames(#10673, "__pos__") +py_cmembers_versioned(#10645, "__pos__", #10673, "2") +#10674 = @"C_type$long$2__pow__" +py_cobjects(#10674) +py_cobjecttypes(#10674, #10005) +py_cobject_sources(#10674, 0) +py_cobjectnames(#10674, "__pow__") +py_cmembers_versioned(#10645, "__pow__", #10674, "2") +#10675 = @"C_type$long$2__radd__" +py_cobjects(#10675) +py_cobjecttypes(#10675, #10005) +py_cobject_sources(#10675, 0) +py_cobjectnames(#10675, "__radd__") +py_cmembers_versioned(#10645, "__radd__", #10675, "2") +#10676 = @"C_type$long$2__rand__" +py_cobjects(#10676) +py_cobjecttypes(#10676, #10005) +py_cobject_sources(#10676, 0) +py_cobjectnames(#10676, "__rand__") +py_cmembers_versioned(#10645, "__rand__", #10676, "2") +#10677 = @"C_type$long$2__rdiv__" +py_cobjects(#10677) +py_cobjecttypes(#10677, #10005) +py_cobject_sources(#10677, 0) +py_cobjectnames(#10677, "__rdiv__") +py_cmembers_versioned(#10645, "__rdiv__", #10677, "2") +#10678 = @"C_type$long$2__rdivmod__" +py_cobjects(#10678) +py_cobjecttypes(#10678, #10005) +py_cobject_sources(#10678, 0) +py_cobjectnames(#10678, "__rdivmod__") +py_cmembers_versioned(#10645, "__rdivmod__", #10678, "2") +#10679 = @"C_type$long$2__repr__" +py_cobjects(#10679) +py_cobjecttypes(#10679, #10005) +py_cobject_sources(#10679, 0) +py_cobjectnames(#10679, "__repr__") +py_cmembers_versioned(#10645, "__repr__", #10679, "2") +#10680 = @"C_type$long$2__rfloordiv__" +py_cobjects(#10680) +py_cobjecttypes(#10680, #10005) +py_cobject_sources(#10680, 0) +py_cobjectnames(#10680, "__rfloordiv__") +py_cmembers_versioned(#10645, "__rfloordiv__", #10680, "2") +#10681 = @"C_type$long$2__rlshift__" +py_cobjects(#10681) +py_cobjecttypes(#10681, #10005) +py_cobject_sources(#10681, 0) +py_cobjectnames(#10681, "__rlshift__") +py_cmembers_versioned(#10645, "__rlshift__", #10681, "2") +#10682 = @"C_type$long$2__rmod__" +py_cobjects(#10682) +py_cobjecttypes(#10682, #10005) +py_cobject_sources(#10682, 0) +py_cobjectnames(#10682, "__rmod__") +py_cmembers_versioned(#10645, "__rmod__", #10682, "2") +#10683 = @"C_type$long$2__rmul__" +py_cobjects(#10683) +py_cobjecttypes(#10683, #10005) +py_cobject_sources(#10683, 0) +py_cobjectnames(#10683, "__rmul__") +py_cmembers_versioned(#10645, "__rmul__", #10683, "2") +#10684 = @"C_type$long$2__ror__" +py_cobjects(#10684) +py_cobjecttypes(#10684, #10005) +py_cobject_sources(#10684, 0) +py_cobjectnames(#10684, "__ror__") +py_cmembers_versioned(#10645, "__ror__", #10684, "2") +#10685 = @"C_type$long$2__rpow__" +py_cobjects(#10685) +py_cobjecttypes(#10685, #10005) +py_cobject_sources(#10685, 0) +py_cobjectnames(#10685, "__rpow__") +py_cmembers_versioned(#10645, "__rpow__", #10685, "2") +#10686 = @"C_type$long$2__rrshift__" +py_cobjects(#10686) +py_cobjecttypes(#10686, #10005) +py_cobject_sources(#10686, 0) +py_cobjectnames(#10686, "__rrshift__") +py_cmembers_versioned(#10645, "__rrshift__", #10686, "2") +#10687 = @"C_type$long$2__rshift__" +py_cobjects(#10687) +py_cobjecttypes(#10687, #10005) +py_cobject_sources(#10687, 0) +py_cobjectnames(#10687, "__rshift__") +py_cmembers_versioned(#10645, "__rshift__", #10687, "2") +#10688 = @"C_type$long$2__rsub__" +py_cobjects(#10688) +py_cobjecttypes(#10688, #10005) +py_cobject_sources(#10688, 0) +py_cobjectnames(#10688, "__rsub__") +py_cmembers_versioned(#10645, "__rsub__", #10688, "2") +#10689 = @"C_type$long$2__rtruediv__" +py_cobjects(#10689) +py_cobjecttypes(#10689, #10005) +py_cobject_sources(#10689, 0) +py_cobjectnames(#10689, "__rtruediv__") +py_cmembers_versioned(#10645, "__rtruediv__", #10689, "2") +#10690 = @"C_type$long$2__rxor__" +py_cobjects(#10690) +py_cobjecttypes(#10690, #10005) +py_cobject_sources(#10690, 0) +py_cobjectnames(#10690, "__rxor__") +py_cmembers_versioned(#10645, "__rxor__", #10690, "2") +#10691 = @"C_type$long$2__sizeof__" +py_cobjects(#10691) +py_cobjecttypes(#10691, #10034) +py_cobject_sources(#10691, 0) +py_cobjectnames(#10691, "__sizeof__") +py_cmembers_versioned(#10645, "__sizeof__", #10691, "2") +#10692 = @"C_type$long$2__str__" +py_cobjects(#10692) +py_cobjecttypes(#10692, #10005) +py_cobject_sources(#10692, 0) +py_cobjectnames(#10692, "__str__") +py_cmembers_versioned(#10645, "__str__", #10692, "2") +#10693 = @"C_type$long$2__sub__" +py_cobjects(#10693) +py_cobjecttypes(#10693, #10005) +py_cobject_sources(#10693, 0) +py_cobjectnames(#10693, "__sub__") +py_cmembers_versioned(#10645, "__sub__", #10693, "2") +#10694 = @"C_type$long$2__truediv__" +py_cobjects(#10694) +py_cobjecttypes(#10694, #10005) +py_cobject_sources(#10694, 0) +py_cobjectnames(#10694, "__truediv__") +py_cmembers_versioned(#10645, "__truediv__", #10694, "2") +#10695 = @"C_type$long$2__trunc__" +py_cobjects(#10695) +py_cobjecttypes(#10695, #10034) +py_cobject_sources(#10695, 0) +py_cobjectnames(#10695, "__trunc__") +py_cmembers_versioned(#10645, "__trunc__", #10695, "2") +#10696 = @"C_type$long$2__xor__" +py_cobjects(#10696) +py_cobjecttypes(#10696, #10005) +py_cobject_sources(#10696, 0) +py_cobjectnames(#10696, "__xor__") +py_cmembers_versioned(#10645, "__xor__", #10696, "2") +#10697 = @"C_type$long$2bit_length" +py_cobjects(#10697) +py_cobjecttypes(#10697, #10034) +py_cobject_sources(#10697, 0) +py_cobjectnames(#10697, "bit_length") +py_cmembers_versioned(#10645, "bit_length", #10697, "2") +#10698 = @"C_type$long$2conjugate" +py_cobjects(#10698) +py_cobjecttypes(#10698, #10034) +py_cobject_sources(#10698, 0) +py_cobjectnames(#10698, "conjugate") +py_cmembers_versioned(#10645, "conjugate", #10698, "2") +#10699 = @"C_type$long$2denominator" +py_cobjects(#10699) +py_cobjecttypes(#10699, #10003) +py_cobject_sources(#10699, 0) +#10700 = @"C_type$long$2denominator$2__set__" +py_cobjects(#10700) +py_cobjecttypes(#10700, #10009) +py_cobject_sources(#10700, 0) +py_cobjectnames(#10700, "__set__") +py_cmembers_versioned(#10699, "__set__", #10700, "2") +#10701 = @"C_type$long$2denominator$2__getattribute__" +py_cobjects(#10701) +py_cobjecttypes(#10701, #10009) +py_cobject_sources(#10701, 0) +py_cobjectnames(#10701, "__getattribute__") +py_cmembers_versioned(#10699, "__getattribute__", #10701, "2") +py_cmembers_versioned(#10699, "__objclass__", #10645, "2") +#10702 = @"C_type$long$2denominator$2__repr__" +py_cobjects(#10702) +py_cobjecttypes(#10702, #10009) +py_cobject_sources(#10702, 0) +py_cobjectnames(#10702, "__repr__") +py_cmembers_versioned(#10699, "__repr__", #10702, "2") +#10703 = @"C_type$long$2denominator$2__get__" +py_cobjects(#10703) +py_cobjecttypes(#10703, #10009) +py_cobject_sources(#10703, 0) +py_cobjectnames(#10703, "__get__") +py_cmembers_versioned(#10699, "__get__", #10703, "2") +#10704 = @"C_bytes$d787ec075c36417b3622538483449d06564bf83c" +py_cobjects(#10704) +py_cobjecttypes(#10704, #10028) +py_cobject_sources(#10704, 0) +py_cobjectnames(#10704, "b'the denominator of a rational number in lowest terms'") +py_cmembers_versioned(#10699, "__doc__", #10704, "2") +#10705 = @"C_type$long$2denominator$2__delete__" +py_cobjects(#10705) +py_cobjecttypes(#10705, #10009) +py_cobject_sources(#10705, 0) +py_cobjectnames(#10705, "__delete__") +py_cmembers_versioned(#10699, "__delete__", #10705, "2") +py_cobjectnames(#10699, "denominator") +py_cmembers_versioned(#10645, "denominator", #10699, "2") +#10706 = @"C_type$long$2imag" +py_cobjects(#10706) +py_cobjecttypes(#10706, #10003) +py_cobject_sources(#10706, 0) +#10707 = @"C_type$long$2imag$2__set__" +py_cobjects(#10707) +py_cobjecttypes(#10707, #10009) +py_cobject_sources(#10707, 0) +py_cobjectnames(#10707, "__set__") +py_cmembers_versioned(#10706, "__set__", #10707, "2") +#10708 = @"C_type$long$2imag$2__getattribute__" +py_cobjects(#10708) +py_cobjecttypes(#10708, #10009) +py_cobject_sources(#10708, 0) +py_cobjectnames(#10708, "__getattribute__") +py_cmembers_versioned(#10706, "__getattribute__", #10708, "2") +py_cmembers_versioned(#10706, "__objclass__", #10645, "2") +#10709 = @"C_type$long$2imag$2__repr__" +py_cobjects(#10709) +py_cobjecttypes(#10709, #10009) +py_cobject_sources(#10709, 0) +py_cobjectnames(#10709, "__repr__") +py_cmembers_versioned(#10706, "__repr__", #10709, "2") +#10710 = @"C_type$long$2imag$2__get__" +py_cobjects(#10710) +py_cobjecttypes(#10710, #10009) +py_cobject_sources(#10710, 0) +py_cobjectnames(#10710, "__get__") +py_cmembers_versioned(#10706, "__get__", #10710, "2") +#10711 = @"C_bytes$1697c2b9b4c10d325b12cf3fded2fbfc0e15d5f0" +py_cobjects(#10711) +py_cobjecttypes(#10711, #10028) +py_cobject_sources(#10711, 0) +py_cobjectnames(#10711, "b'the imaginary part of a complex number'") +py_cmembers_versioned(#10706, "__doc__", #10711, "2") +#10712 = @"C_type$long$2imag$2__delete__" +py_cobjects(#10712) +py_cobjecttypes(#10712, #10009) +py_cobject_sources(#10712, 0) +py_cobjectnames(#10712, "__delete__") +py_cmembers_versioned(#10706, "__delete__", #10712, "2") +py_cobjectnames(#10706, "imag") +py_cmembers_versioned(#10645, "imag", #10706, "2") +#10713 = @"C_type$long$2numerator" +py_cobjects(#10713) +py_cobjecttypes(#10713, #10003) +py_cobject_sources(#10713, 0) +#10714 = @"C_type$long$2numerator$2__set__" +py_cobjects(#10714) +py_cobjecttypes(#10714, #10009) +py_cobject_sources(#10714, 0) +py_cobjectnames(#10714, "__set__") +py_cmembers_versioned(#10713, "__set__", #10714, "2") +#10715 = @"C_type$long$2numerator$2__getattribute__" +py_cobjects(#10715) +py_cobjecttypes(#10715, #10009) +py_cobject_sources(#10715, 0) +py_cobjectnames(#10715, "__getattribute__") +py_cmembers_versioned(#10713, "__getattribute__", #10715, "2") +py_cmembers_versioned(#10713, "__objclass__", #10645, "2") +#10716 = @"C_type$long$2numerator$2__repr__" +py_cobjects(#10716) +py_cobjecttypes(#10716, #10009) +py_cobject_sources(#10716, 0) +py_cobjectnames(#10716, "__repr__") +py_cmembers_versioned(#10713, "__repr__", #10716, "2") +#10717 = @"C_type$long$2numerator$2__get__" +py_cobjects(#10717) +py_cobjecttypes(#10717, #10009) +py_cobject_sources(#10717, 0) +py_cobjectnames(#10717, "__get__") +py_cmembers_versioned(#10713, "__get__", #10717, "2") +#10718 = @"C_bytes$b003a2de50c1e2b9c0432a073236cd9864f791cb" +py_cobjects(#10718) +py_cobjecttypes(#10718, #10028) +py_cobject_sources(#10718, 0) +py_cobjectnames(#10718, "b'the numerator of a rational number in lowest terms'") +py_cmembers_versioned(#10713, "__doc__", #10718, "2") +#10719 = @"C_type$long$2numerator$2__delete__" +py_cobjects(#10719) +py_cobjecttypes(#10719, #10009) +py_cobject_sources(#10719, 0) +py_cobjectnames(#10719, "__delete__") +py_cmembers_versioned(#10713, "__delete__", #10719, "2") +py_cobjectnames(#10713, "numerator") +py_cmembers_versioned(#10645, "numerator", #10713, "2") +#10720 = @"C_type$long$2real" +py_cobjects(#10720) +py_cobjecttypes(#10720, #10003) +py_cobject_sources(#10720, 0) +#10721 = @"C_type$long$2real$2__set__" +py_cobjects(#10721) +py_cobjecttypes(#10721, #10009) +py_cobject_sources(#10721, 0) +py_cobjectnames(#10721, "__set__") +py_cmembers_versioned(#10720, "__set__", #10721, "2") +#10722 = @"C_type$long$2real$2__getattribute__" +py_cobjects(#10722) +py_cobjecttypes(#10722, #10009) +py_cobject_sources(#10722, 0) +py_cobjectnames(#10722, "__getattribute__") +py_cmembers_versioned(#10720, "__getattribute__", #10722, "2") +py_cmembers_versioned(#10720, "__objclass__", #10645, "2") +#10723 = @"C_type$long$2real$2__repr__" +py_cobjects(#10723) +py_cobjecttypes(#10723, #10009) +py_cobject_sources(#10723, 0) +py_cobjectnames(#10723, "__repr__") +py_cmembers_versioned(#10720, "__repr__", #10723, "2") +#10724 = @"C_type$long$2real$2__get__" +py_cobjects(#10724) +py_cobjecttypes(#10724, #10009) +py_cobject_sources(#10724, 0) +py_cobjectnames(#10724, "__get__") +py_cmembers_versioned(#10720, "__get__", #10724, "2") +#10725 = @"C_bytes$2cb527e0bacedb07e674d6e9890d3d2ab1a8f487" +py_cobjects(#10725) +py_cobjecttypes(#10725, #10028) +py_cobject_sources(#10725, 0) +py_cobjectnames(#10725, "b'the real part of a complex number'") +py_cmembers_versioned(#10720, "__doc__", #10725, "2") +#10726 = @"C_type$long$2real$2__delete__" +py_cobjects(#10726) +py_cobjecttypes(#10726, #10009) +py_cobject_sources(#10726, 0) +py_cobjectnames(#10726, "__delete__") +py_cmembers_versioned(#10720, "__delete__", #10726, "2") +py_cobjectnames(#10720, "real") +py_cmembers_versioned(#10645, "real", #10720, "2") +py_cmembers_versioned(#10645, ".super.", #10021, "2") +py_cobjectnames(#10645, "long") +py_special_objects(#10645, "long") +#10727 = @"C_type$super" +py_cobjects(#10727) +py_cobjecttypes(#10727, #10001) +py_cobject_sources(#10727, 0) +#10728 = @"C_bytes$e8e0c2295a1aa9900ff8db357497a4d4d056ea58" +py_cobjects(#10728) +py_cobjecttypes(#10728, #10028) +py_cobject_sources(#10728, 0) +py_cobjectnames(#10728, "b'super(type, obj) -> bound super object; requires isinstance(obj, type) +super(type) -> unbound super object +super(type, type2) -> bound super object; requires issubclass(type2, type) +Typical use to call a cooperative superclass method: +class C(B): + def meth(self, arg): + super(C, self).meth(arg)'") +py_cmembers_versioned(#10727, "__doc__", #10728, "2") +#10729 = @"C_type$super$2__get__" +py_cobjects(#10729) +py_cobjecttypes(#10729, #10005) +py_cobject_sources(#10729, 0) +py_cobjectnames(#10729, "__get__") +py_cmembers_versioned(#10727, "__get__", #10729, "2") +#10730 = @"C_type$super$2__getattribute__" +py_cobjects(#10730) +py_cobjecttypes(#10730, #10005) +py_cobject_sources(#10730, 0) +py_cobjectnames(#10730, "__getattribute__") +py_cmembers_versioned(#10727, "__getattribute__", #10730, "2") +#10731 = @"C_type$super$2__init__" +py_cobjects(#10731) +py_cobjecttypes(#10731, #10005) +py_cobject_sources(#10731, 0) +py_cobjectnames(#10731, "__init__") +py_cmembers_versioned(#10727, "__init__", #10731, "2") +#10732 = @"C_type$super$2__new__" +py_cobjects(#10732) +py_cobjecttypes(#10732, #10075) +py_cobject_sources(#10732, 0) +py_cobjectnames(#10732, "__new__") +py_cmembers_versioned(#10727, "__new__", #10732, "2") +#10733 = @"C_type$super$2__repr__" +py_cobjects(#10733) +py_cobjecttypes(#10733, #10005) +py_cobject_sources(#10733, 0) +py_cobjectnames(#10733, "__repr__") +py_cmembers_versioned(#10727, "__repr__", #10733, "2") +#10734 = @"C_type$super$2__self__" +py_cobjects(#10734) +py_cobjecttypes(#10734, #10045) +py_cobject_sources(#10734, 0) +py_cobjectnames(#10734, "__self__") +py_cmembers_versioned(#10727, "__self__", #10734, "2") +#10735 = @"C_type$super$2__self_class__" +py_cobjects(#10735) +py_cobjecttypes(#10735, #10045) +py_cobject_sources(#10735, 0) +py_cobjectnames(#10735, "__self_class__") +py_cmembers_versioned(#10727, "__self_class__", #10735, "2") +#10736 = @"C_type$super$2__thisclass__" +py_cobjects(#10736) +py_cobjecttypes(#10736, #10045) +py_cobject_sources(#10736, 0) +py_cobjectnames(#10736, "__thisclass__") +py_cmembers_versioned(#10727, "__thisclass__", #10736, "2") +py_cmembers_versioned(#10727, ".super.", #10021, "2") +py_cobjectnames(#10727, "super") +py_special_objects(#10727, "super") +py_special_objects(#10438, "bool") +#10737 = @"C_type$tuple" +py_cobjects(#10737) +py_cobjecttypes(#10737, #10001) +py_cobject_sources(#10737, 0) +#10738 = @"C_type$tuple$2__add__" +py_cobjects(#10738) +py_cobjecttypes(#10738, #10005) +py_cobject_sources(#10738, 0) +py_cobjectnames(#10738, "__add__") +py_cmembers_versioned(#10737, "__add__", #10738, "2") +#10739 = @"C_type$tuple$2__contains__" +py_cobjects(#10739) +py_cobjecttypes(#10739, #10005) +py_cobject_sources(#10739, 0) +py_cobjectnames(#10739, "__contains__") +py_cmembers_versioned(#10737, "__contains__", #10739, "2") +#10740 = @"C_bytes$0331c2bdf85dc14e29da951fdf1bc3f96a52ce2b" +py_cobjects(#10740) +py_cobjecttypes(#10740, #10028) +py_cobject_sources(#10740, 0) +py_cobjectnames(#10740, "b'tuple() -> empty tuple +tuple(iterable) -> tuple initialized from iterable's items + +If the argument is a tuple, the return value is the same object.'") +py_cmembers_versioned(#10737, "__doc__", #10740, "2") +#10741 = @"C_type$tuple$2__eq__" +py_cobjects(#10741) +py_cobjecttypes(#10741, #10005) +py_cobject_sources(#10741, 0) +py_cobjectnames(#10741, "__eq__") +py_cmembers_versioned(#10737, "__eq__", #10741, "2") +#10742 = @"C_type$tuple$2__ge__" +py_cobjects(#10742) +py_cobjecttypes(#10742, #10005) +py_cobject_sources(#10742, 0) +py_cobjectnames(#10742, "__ge__") +py_cmembers_versioned(#10737, "__ge__", #10742, "2") +#10743 = @"C_type$tuple$2__getattribute__" +py_cobjects(#10743) +py_cobjecttypes(#10743, #10005) +py_cobject_sources(#10743, 0) +py_cobjectnames(#10743, "__getattribute__") +py_cmembers_versioned(#10737, "__getattribute__", #10743, "2") +#10744 = @"C_type$tuple$2__getitem__" +py_cobjects(#10744) +py_cobjecttypes(#10744, #10005) +py_cobject_sources(#10744, 0) +py_cobjectnames(#10744, "__getitem__") +py_cmembers_versioned(#10737, "__getitem__", #10744, "2") +#10745 = @"C_type$tuple$2__getnewargs__" +py_cobjects(#10745) +py_cobjecttypes(#10745, #10034) +py_cobject_sources(#10745, 0) +py_cobjectnames(#10745, "__getnewargs__") +py_cmembers_versioned(#10737, "__getnewargs__", #10745, "2") +#10746 = @"C_type$tuple$2__getslice__" +py_cobjects(#10746) +py_cobjecttypes(#10746, #10005) +py_cobject_sources(#10746, 0) +py_cobjectnames(#10746, "__getslice__") +py_cmembers_versioned(#10737, "__getslice__", #10746, "2") +#10747 = @"C_type$tuple$2__gt__" +py_cobjects(#10747) +py_cobjecttypes(#10747, #10005) +py_cobject_sources(#10747, 0) +py_cobjectnames(#10747, "__gt__") +py_cmembers_versioned(#10737, "__gt__", #10747, "2") +#10748 = @"C_type$tuple$2__hash__" +py_cobjects(#10748) +py_cobjecttypes(#10748, #10005) +py_cobject_sources(#10748, 0) +py_cobjectnames(#10748, "__hash__") +py_cmembers_versioned(#10737, "__hash__", #10748, "2") +#10749 = @"C_type$tuple$2__iter__" +py_cobjects(#10749) +py_cobjecttypes(#10749, #10005) +py_cobject_sources(#10749, 0) +py_cobjectnames(#10749, "__iter__") +py_cmembers_versioned(#10737, "__iter__", #10749, "2") +#10750 = @"C_type$tuple$2__le__" +py_cobjects(#10750) +py_cobjecttypes(#10750, #10005) +py_cobject_sources(#10750, 0) +py_cobjectnames(#10750, "__le__") +py_cmembers_versioned(#10737, "__le__", #10750, "2") +#10751 = @"C_type$tuple$2__len__" +py_cobjects(#10751) +py_cobjecttypes(#10751, #10005) +py_cobject_sources(#10751, 0) +py_cobjectnames(#10751, "__len__") +py_cmembers_versioned(#10737, "__len__", #10751, "2") +#10752 = @"C_type$tuple$2__lt__" +py_cobjects(#10752) +py_cobjecttypes(#10752, #10005) +py_cobject_sources(#10752, 0) +py_cobjectnames(#10752, "__lt__") +py_cmembers_versioned(#10737, "__lt__", #10752, "2") +#10753 = @"C_type$tuple$2__mul__" +py_cobjects(#10753) +py_cobjecttypes(#10753, #10005) +py_cobject_sources(#10753, 0) +py_cobjectnames(#10753, "__mul__") +py_cmembers_versioned(#10737, "__mul__", #10753, "2") +#10754 = @"C_type$tuple$2__ne__" +py_cobjects(#10754) +py_cobjecttypes(#10754, #10005) +py_cobject_sources(#10754, 0) +py_cobjectnames(#10754, "__ne__") +py_cmembers_versioned(#10737, "__ne__", #10754, "2") +#10755 = @"C_type$tuple$2__new__" +py_cobjects(#10755) +py_cobjecttypes(#10755, #10075) +py_cobject_sources(#10755, 0) +py_cobjectnames(#10755, "__new__") +py_cmembers_versioned(#10737, "__new__", #10755, "2") +#10756 = @"C_type$tuple$2__repr__" +py_cobjects(#10756) +py_cobjecttypes(#10756, #10005) +py_cobject_sources(#10756, 0) +py_cobjectnames(#10756, "__repr__") +py_cmembers_versioned(#10737, "__repr__", #10756, "2") +#10757 = @"C_type$tuple$2__rmul__" +py_cobjects(#10757) +py_cobjecttypes(#10757, #10005) +py_cobject_sources(#10757, 0) +py_cobjectnames(#10757, "__rmul__") +py_cmembers_versioned(#10737, "__rmul__", #10757, "2") +#10758 = @"C_type$tuple$2count" +py_cobjects(#10758) +py_cobjecttypes(#10758, #10034) +py_cobject_sources(#10758, 0) +py_cobjectnames(#10758, "count") +py_cmembers_versioned(#10737, "count", #10758, "2") +#10759 = @"C_type$tuple$2index" +py_cobjects(#10759) +py_cobjecttypes(#10759, #10034) +py_cobject_sources(#10759, 0) +py_cobjectnames(#10759, "index") +py_cmembers_versioned(#10737, "index", #10759, "2") +py_cmembers_versioned(#10737, ".super.", #10021, "2") +py_cobjectnames(#10737, "tuple") +py_special_objects(#10737, "tuple") +#10760 = @"C_module$__builtin__" +#10761 = @"C_type$module" +py_cobjects(#10761) +py_cobjecttypes(#10761, #10001) +py_cobject_sources(#10761, 0) +#10762 = @"C_type$module$2__delattr__" +py_cobjects(#10762) +py_cobjecttypes(#10762, #10005) +py_cobject_sources(#10762, 0) +py_cobjectnames(#10762, "__delattr__") +py_cmembers_versioned(#10761, "__delattr__", #10762, "2") +#10763 = @"C_type$module$2__dict__" +py_cobjects(#10763) +py_cobjecttypes(#10763, #10045) +py_cobject_sources(#10763, 0) +py_cobjectnames(#10763, "__dict__") +py_cmembers_versioned(#10761, "__dict__", #10763, "2") +#10764 = @"C_bytes$22b943eaf3d5849337b6f59fba0ae00efc5e0139" +py_cobjects(#10764) +py_cobjecttypes(#10764, #10028) +py_cobject_sources(#10764, 0) +py_cobjectnames(#10764, "b'module(name[, doc]) + +Create a module object. +The name must be a string; the optional doc argument can have any type.'") +py_cmembers_versioned(#10761, "__doc__", #10764, "2") +#10765 = @"C_type$module$2__getattribute__" +py_cobjects(#10765) +py_cobjecttypes(#10765, #10005) +py_cobject_sources(#10765, 0) +py_cobjectnames(#10765, "__getattribute__") +py_cmembers_versioned(#10761, "__getattribute__", #10765, "2") +#10766 = @"C_type$module$2__init__" +py_cobjects(#10766) +py_cobjecttypes(#10766, #10005) +py_cobject_sources(#10766, 0) +py_cobjectnames(#10766, "__init__") +py_cmembers_versioned(#10761, "__init__", #10766, "2") +#10767 = @"C_type$module$2__new__" +py_cobjects(#10767) +py_cobjecttypes(#10767, #10075) +py_cobject_sources(#10767, 0) +py_cobjectnames(#10767, "__new__") +py_cmembers_versioned(#10761, "__new__", #10767, "2") +#10768 = @"C_type$module$2__repr__" +py_cobjects(#10768) +py_cobjecttypes(#10768, #10005) +py_cobject_sources(#10768, 0) +py_cobjectnames(#10768, "__repr__") +py_cmembers_versioned(#10761, "__repr__", #10768, "2") +#10769 = @"C_type$module$2__setattr__" +py_cobjects(#10769) +py_cobjecttypes(#10769, #10005) +py_cobject_sources(#10769, 0) +py_cobjectnames(#10769, "__setattr__") +py_cmembers_versioned(#10761, "__setattr__", #10769, "2") +py_cmembers_versioned(#10761, ".super.", #10021, "2") +py_cobjectnames(#10761, "module") +py_cobjects(#10760) +py_cobjecttypes(#10760, #10761) +py_cobject_sources(#10760, 0) +#10770 = @"C_type$ArithmeticError" +py_cobjects(#10770) +py_cobjecttypes(#10770, #10001) +py_cobject_sources(#10770, 0) +#10771 = @"C_bytes$61a47d6144643be8111a5d6cd38c70451edd75e0" +py_cobjects(#10771) +py_cobjecttypes(#10771, #10028) +py_cobject_sources(#10771, 0) +py_cobjectnames(#10771, "b'Base class for arithmetic errors.'") +py_cmembers_versioned(#10770, "__doc__", #10771, "2") +#10772 = @"C_type$ArithmeticError$2__init__" +py_cobjects(#10772) +py_cobjecttypes(#10772, #10005) +py_cobject_sources(#10772, 0) +py_cobjectnames(#10772, "__init__") +py_cmembers_versioned(#10770, "__init__", #10772, "2") +#10773 = @"C_type$ArithmeticError$2__new__" +py_cobjects(#10773) +py_cobjecttypes(#10773, #10075) +py_cobject_sources(#10773, 0) +py_cobjectnames(#10773, "__new__") +py_cmembers_versioned(#10770, "__new__", #10773, "2") +py_cmembers_versioned(#10770, ".super.", #10346, "2") +py_cobjectnames(#10770, "ArithmeticError") +py_cmembers_versioned(#10760, "ArithmeticError", #10770, "2") +#10774 = @"C_type$AssertionError" +py_cobjects(#10774) +py_cobjecttypes(#10774, #10001) +py_cobject_sources(#10774, 0) +#10775 = @"C_bytes$a42441c349b7bd38d1695189fc7bc6bf3aa17236" +py_cobjects(#10775) +py_cobjecttypes(#10775, #10028) +py_cobject_sources(#10775, 0) +py_cobjectnames(#10775, "b'Assertion failed.'") +py_cmembers_versioned(#10774, "__doc__", #10775, "2") +#10776 = @"C_type$AssertionError$2__init__" +py_cobjects(#10776) +py_cobjecttypes(#10776, #10005) +py_cobject_sources(#10776, 0) +py_cobjectnames(#10776, "__init__") +py_cmembers_versioned(#10774, "__init__", #10776, "2") +#10777 = @"C_type$AssertionError$2__new__" +py_cobjects(#10777) +py_cobjecttypes(#10777, #10075) +py_cobject_sources(#10777, 0) +py_cobjectnames(#10777, "__new__") +py_cmembers_versioned(#10774, "__new__", #10777, "2") +py_cmembers_versioned(#10774, ".super.", #10346, "2") +py_cobjectnames(#10774, "AssertionError") +py_cmembers_versioned(#10760, "AssertionError", #10774, "2") +py_cmembers_versioned(#10760, "AttributeError", #10433, "2") +py_cmembers_versioned(#10760, "BaseException", #10354, "2") +#10778 = @"C_type$BufferError" +py_cobjects(#10778) +py_cobjecttypes(#10778, #10001) +py_cobject_sources(#10778, 0) +#10779 = @"C_bytes$1f79f01081ea50a98f292e69ea9db957594bfa0b" +py_cobjects(#10779) +py_cobjecttypes(#10779, #10028) +py_cobject_sources(#10779, 0) +py_cobjectnames(#10779, "b'Buffer error.'") +py_cmembers_versioned(#10778, "__doc__", #10779, "2") +#10780 = @"C_type$BufferError$2__init__" +py_cobjects(#10780) +py_cobjecttypes(#10780, #10005) +py_cobject_sources(#10780, 0) +py_cobjectnames(#10780, "__init__") +py_cmembers_versioned(#10778, "__init__", #10780, "2") +#10781 = @"C_type$BufferError$2__new__" +py_cobjects(#10781) +py_cobjecttypes(#10781, #10075) +py_cobject_sources(#10781, 0) +py_cobjectnames(#10781, "__new__") +py_cmembers_versioned(#10778, "__new__", #10781, "2") +py_cmembers_versioned(#10778, ".super.", #10346, "2") +py_cobjectnames(#10778, "BufferError") +py_cmembers_versioned(#10760, "BufferError", #10778, "2") +#10782 = @"C_type$BytesWarning" +py_cobjects(#10782) +py_cobjecttypes(#10782, #10001) +py_cobject_sources(#10782, 0) +#10783 = @"C_bytes$9113ec3acba7d6fa8effaddd2e6c74ac46ae6b51" +py_cobjects(#10783) +py_cobjecttypes(#10783, #10028) +py_cobject_sources(#10783, 0) +py_cobjectnames(#10783, "b'Base class for warnings about bytes and bytearray related problems, +mostly related to comparing to str.'") +py_cmembers_versioned(#10782, "__doc__", #10783, "2") +#10784 = @"C_type$BytesWarning$2__init__" +py_cobjects(#10784) +py_cobjecttypes(#10784, #10005) +py_cobject_sources(#10784, 0) +py_cobjectnames(#10784, "__init__") +py_cmembers_versioned(#10782, "__init__", #10784, "2") +#10785 = @"C_type$BytesWarning$2__new__" +py_cobjects(#10785) +py_cobjecttypes(#10785, #10075) +py_cobject_sources(#10785, 0) +py_cobjectnames(#10785, "__new__") +py_cmembers_versioned(#10782, "__new__", #10785, "2") +#10786 = @"C_type$Warning" +py_cobjects(#10786) +py_cobjecttypes(#10786, #10001) +py_cobject_sources(#10786, 0) +#10787 = @"C_bytes$1a767590a449f53c349f02ce7bd8efd407590883" +py_cobjects(#10787) +py_cobjecttypes(#10787, #10028) +py_cobject_sources(#10787, 0) +py_cobjectnames(#10787, "b'Base class for warning categories.'") +py_cmembers_versioned(#10786, "__doc__", #10787, "2") +#10788 = @"C_type$Warning$2__init__" +py_cobjects(#10788) +py_cobjecttypes(#10788, #10005) +py_cobject_sources(#10788, 0) +py_cobjectnames(#10788, "__init__") +py_cmembers_versioned(#10786, "__init__", #10788, "2") +#10789 = @"C_type$Warning$2__new__" +py_cobjects(#10789) +py_cobjecttypes(#10789, #10075) +py_cobject_sources(#10789, 0) +py_cobjectnames(#10789, "__new__") +py_cmembers_versioned(#10786, "__new__", #10789, "2") +py_cmembers_versioned(#10786, ".super.", #10350, "2") +py_cobjectnames(#10786, "Warning") +py_cmembers_versioned(#10782, ".super.", #10786, "2") +py_cobjectnames(#10782, "BytesWarning") +py_cmembers_versioned(#10760, "BytesWarning", #10782, "2") +#10790 = @"C_type$DeprecationWarning" +py_cobjects(#10790) +py_cobjecttypes(#10790, #10001) +py_cobject_sources(#10790, 0) +#10791 = @"C_bytes$c3d3385fbf26988036950ac0c8772d37e0843a0c" +py_cobjects(#10791) +py_cobjecttypes(#10791, #10028) +py_cobject_sources(#10791, 0) +py_cobjectnames(#10791, "b'Base class for warnings about deprecated features.'") +py_cmembers_versioned(#10790, "__doc__", #10791, "2") +#10792 = @"C_type$DeprecationWarning$2__init__" +py_cobjects(#10792) +py_cobjecttypes(#10792, #10005) +py_cobject_sources(#10792, 0) +py_cobjectnames(#10792, "__init__") +py_cmembers_versioned(#10790, "__init__", #10792, "2") +#10793 = @"C_type$DeprecationWarning$2__new__" +py_cobjects(#10793) +py_cobjecttypes(#10793, #10075) +py_cobject_sources(#10793, 0) +py_cobjectnames(#10793, "__new__") +py_cmembers_versioned(#10790, "__new__", #10793, "2") +py_cmembers_versioned(#10790, ".super.", #10786, "2") +py_cobjectnames(#10790, "DeprecationWarning") +py_cmembers_versioned(#10760, "DeprecationWarning", #10790, "2") +#10794 = @"C_type$EOFError" +py_cobjects(#10794) +py_cobjecttypes(#10794, #10001) +py_cobject_sources(#10794, 0) +#10795 = @"C_bytes$bece27985c9f03cabf4c8b7c427263d5276b3f86" +py_cobjects(#10795) +py_cobjecttypes(#10795, #10028) +py_cobject_sources(#10795, 0) +py_cobjectnames(#10795, "b'Read beyond end of file.'") +py_cmembers_versioned(#10794, "__doc__", #10795, "2") +#10796 = @"C_type$EOFError$2__init__" +py_cobjects(#10796) +py_cobjecttypes(#10796, #10005) +py_cobject_sources(#10796, 0) +py_cobjectnames(#10796, "__init__") +py_cmembers_versioned(#10794, "__init__", #10796, "2") +#10797 = @"C_type$EOFError$2__new__" +py_cobjects(#10797) +py_cobjecttypes(#10797, #10075) +py_cobject_sources(#10797, 0) +py_cobjectnames(#10797, "__new__") +py_cmembers_versioned(#10794, "__new__", #10797, "2") +py_cmembers_versioned(#10794, ".super.", #10346, "2") +py_cobjectnames(#10794, "EOFError") +py_cmembers_versioned(#10760, "EOFError", #10794, "2") +#10798 = @"C_module$__builtin__$2Ellipsis" +#10799 = @"C_type$ellipsis" +py_cobjects(#10799) +py_cobjecttypes(#10799, #10001) +py_cobject_sources(#10799, 0) +py_cmembers_versioned(#10799, "__doc__", #10017, "2") +#10800 = @"C_type$ellipsis$2__getattribute__" +py_cobjects(#10800) +py_cobjecttypes(#10800, #10005) +py_cobject_sources(#10800, 0) +py_cobjectnames(#10800, "__getattribute__") +py_cmembers_versioned(#10799, "__getattribute__", #10800, "2") +#10801 = @"C_type$ellipsis$2__repr__" +py_cobjects(#10801) +py_cobjecttypes(#10801, #10005) +py_cobject_sources(#10801, 0) +py_cobjectnames(#10801, "__repr__") +py_cmembers_versioned(#10799, "__repr__", #10801, "2") +py_cmembers_versioned(#10799, ".super.", #10021, "2") +py_cobjectnames(#10799, "ellipsis") +py_cobjects(#10798) +py_cobjecttypes(#10798, #10799) +py_cobject_sources(#10798, 0) +py_cobjectnames(#10798, "object") +py_cmembers_versioned(#10760, "Ellipsis", #10798, "2") +#10802 = @"C_type$EnvironmentError" +py_cobjects(#10802) +py_cobjecttypes(#10802, #10001) +py_cobject_sources(#10802, 0) +#10803 = @"C_bytes$39224d5733534fbf85512214b0f2f0e10441ca46" +py_cobjects(#10803) +py_cobjecttypes(#10803, #10028) +py_cobject_sources(#10803, 0) +py_cobjectnames(#10803, "b'Base class for I/O related errors.'") +py_cmembers_versioned(#10802, "__doc__", #10803, "2") +#10804 = @"C_type$EnvironmentError$2__init__" +py_cobjects(#10804) +py_cobjecttypes(#10804, #10005) +py_cobject_sources(#10804, 0) +py_cobjectnames(#10804, "__init__") +py_cmembers_versioned(#10802, "__init__", #10804, "2") +#10805 = @"C_type$EnvironmentError$2__new__" +py_cobjects(#10805) +py_cobjecttypes(#10805, #10075) +py_cobject_sources(#10805, 0) +py_cobjectnames(#10805, "__new__") +py_cmembers_versioned(#10802, "__new__", #10805, "2") +#10806 = @"C_type$EnvironmentError$2__reduce__" +py_cobjects(#10806) +py_cobjecttypes(#10806, #10034) +py_cobject_sources(#10806, 0) +py_cobjectnames(#10806, "__reduce__") +py_cmembers_versioned(#10802, "__reduce__", #10806, "2") +#10807 = @"C_type$EnvironmentError$2__str__" +py_cobjects(#10807) +py_cobjecttypes(#10807, #10005) +py_cobject_sources(#10807, 0) +py_cobjectnames(#10807, "__str__") +py_cmembers_versioned(#10802, "__str__", #10807, "2") +#10808 = @"C_type$EnvironmentError$2errno" +py_cobjects(#10808) +py_cobjecttypes(#10808, #10045) +py_cobject_sources(#10808, 0) +py_cobjectnames(#10808, "errno") +py_cmembers_versioned(#10802, "errno", #10808, "2") +#10809 = @"C_type$EnvironmentError$2filename" +py_cobjects(#10809) +py_cobjecttypes(#10809, #10045) +py_cobject_sources(#10809, 0) +py_cobjectnames(#10809, "filename") +py_cmembers_versioned(#10802, "filename", #10809, "2") +#10810 = @"C_type$EnvironmentError$2strerror" +py_cobjects(#10810) +py_cobjecttypes(#10810, #10045) +py_cobject_sources(#10810, 0) +py_cobjectnames(#10810, "strerror") +py_cmembers_versioned(#10802, "strerror", #10810, "2") +py_cmembers_versioned(#10802, ".super.", #10346, "2") +py_cobjectnames(#10802, "EnvironmentError") +py_cmembers_versioned(#10760, "EnvironmentError", #10802, "2") +py_cmembers_versioned(#10760, "Exception", #10350, "2") +py_cmembers_versioned(#10760, "False", #10644, "2") +#10811 = @"C_type$FloatingPointError" +py_cobjects(#10811) +py_cobjecttypes(#10811, #10001) +py_cobject_sources(#10811, 0) +#10812 = @"C_bytes$c5dcd934c52b3fc4976bc52155c9333ecc39411b" +py_cobjects(#10812) +py_cobjecttypes(#10812, #10028) +py_cobject_sources(#10812, 0) +py_cobjectnames(#10812, "b'Floating point operation failed.'") +py_cmembers_versioned(#10811, "__doc__", #10812, "2") +#10813 = @"C_type$FloatingPointError$2__init__" +py_cobjects(#10813) +py_cobjecttypes(#10813, #10005) +py_cobject_sources(#10813, 0) +py_cobjectnames(#10813, "__init__") +py_cmembers_versioned(#10811, "__init__", #10813, "2") +#10814 = @"C_type$FloatingPointError$2__new__" +py_cobjects(#10814) +py_cobjecttypes(#10814, #10075) +py_cobject_sources(#10814, 0) +py_cobjectnames(#10814, "__new__") +py_cmembers_versioned(#10811, "__new__", #10814, "2") +py_cmembers_versioned(#10811, ".super.", #10770, "2") +py_cobjectnames(#10811, "FloatingPointError") +py_cmembers_versioned(#10760, "FloatingPointError", #10811, "2") +#10815 = @"C_type$FutureWarning" +py_cobjects(#10815) +py_cobjecttypes(#10815, #10001) +py_cobject_sources(#10815, 0) +#10816 = @"C_bytes$253310a83b68871dc4ca8c07585e813c414089b3" +py_cobjects(#10816) +py_cobjecttypes(#10816, #10028) +py_cobject_sources(#10816, 0) +py_cobjectnames(#10816, "b'Base class for warnings about constructs that will change semantically +in the future.'") +py_cmembers_versioned(#10815, "__doc__", #10816, "2") +#10817 = @"C_type$FutureWarning$2__init__" +py_cobjects(#10817) +py_cobjecttypes(#10817, #10005) +py_cobject_sources(#10817, 0) +py_cobjectnames(#10817, "__init__") +py_cmembers_versioned(#10815, "__init__", #10817, "2") +#10818 = @"C_type$FutureWarning$2__new__" +py_cobjects(#10818) +py_cobjecttypes(#10818, #10075) +py_cobject_sources(#10818, 0) +py_cobjectnames(#10818, "__new__") +py_cmembers_versioned(#10815, "__new__", #10818, "2") +py_cmembers_versioned(#10815, ".super.", #10786, "2") +py_cobjectnames(#10815, "FutureWarning") +py_cmembers_versioned(#10760, "FutureWarning", #10815, "2") +#10819 = @"C_type$GeneratorExit" +py_cobjects(#10819) +py_cobjecttypes(#10819, #10001) +py_cobject_sources(#10819, 0) +#10820 = @"C_bytes$8977819b8e1d63a633bd58892263b5b4b1ce904a" +py_cobjects(#10820) +py_cobjecttypes(#10820, #10028) +py_cobject_sources(#10820, 0) +py_cobjectnames(#10820, "b'Request that a generator exit.'") +py_cmembers_versioned(#10819, "__doc__", #10820, "2") +#10821 = @"C_type$GeneratorExit$2__init__" +py_cobjects(#10821) +py_cobjecttypes(#10821, #10005) +py_cobject_sources(#10821, 0) +py_cobjectnames(#10821, "__init__") +py_cmembers_versioned(#10819, "__init__", #10821, "2") +#10822 = @"C_type$GeneratorExit$2__new__" +py_cobjects(#10822) +py_cobjecttypes(#10822, #10075) +py_cobject_sources(#10822, 0) +py_cobjectnames(#10822, "__new__") +py_cmembers_versioned(#10819, "__new__", #10822, "2") +py_cmembers_versioned(#10819, ".super.", #10354, "2") +py_cobjectnames(#10819, "GeneratorExit") +py_cmembers_versioned(#10760, "GeneratorExit", #10819, "2") +#10823 = @"C_type$IOError" +py_cobjects(#10823) +py_cobjecttypes(#10823, #10001) +py_cobject_sources(#10823, 0) +#10824 = @"C_bytes$d67c8995c9017675bca359c35a060fffc1d2e752" +py_cobjects(#10824) +py_cobjecttypes(#10824, #10028) +py_cobject_sources(#10824, 0) +py_cobjectnames(#10824, "b'I/O operation failed.'") +py_cmembers_versioned(#10823, "__doc__", #10824, "2") +#10825 = @"C_type$IOError$2__init__" +py_cobjects(#10825) +py_cobjecttypes(#10825, #10005) +py_cobject_sources(#10825, 0) +py_cobjectnames(#10825, "__init__") +py_cmembers_versioned(#10823, "__init__", #10825, "2") +#10826 = @"C_type$IOError$2__new__" +py_cobjects(#10826) +py_cobjecttypes(#10826, #10075) +py_cobject_sources(#10826, 0) +py_cobjectnames(#10826, "__new__") +py_cmembers_versioned(#10823, "__new__", #10826, "2") +py_cmembers_versioned(#10823, ".super.", #10802, "2") +py_cobjectnames(#10823, "IOError") +py_cmembers_versioned(#10760, "IOError", #10823, "2") +#10827 = @"C_type$ImportError" +py_cobjects(#10827) +py_cobjecttypes(#10827, #10001) +py_cobject_sources(#10827, 0) +#10828 = @"C_bytes$21c1facbb75e3e004959ce7dac3a8ffa72d14efa" +py_cobjects(#10828) +py_cobjecttypes(#10828, #10028) +py_cobject_sources(#10828, 0) +py_cobjectnames(#10828, "b'Import can't find module, or can't find name in module.'") +py_cmembers_versioned(#10827, "__doc__", #10828, "2") +#10829 = @"C_type$ImportError$2__init__" +py_cobjects(#10829) +py_cobjecttypes(#10829, #10005) +py_cobject_sources(#10829, 0) +py_cobjectnames(#10829, "__init__") +py_cmembers_versioned(#10827, "__init__", #10829, "2") +#10830 = @"C_type$ImportError$2__new__" +py_cobjects(#10830) +py_cobjecttypes(#10830, #10075) +py_cobject_sources(#10830, 0) +py_cobjectnames(#10830, "__new__") +py_cmembers_versioned(#10827, "__new__", #10830, "2") +py_cmembers_versioned(#10827, ".super.", #10346, "2") +py_cobjectnames(#10827, "ImportError") +py_cmembers_versioned(#10760, "ImportError", #10827, "2") +#10831 = @"C_type$ImportWarning" +py_cobjects(#10831) +py_cobjecttypes(#10831, #10001) +py_cobject_sources(#10831, 0) +#10832 = @"C_bytes$72eeb2dd35c8136512635d8b99d694eacacdef0a" +py_cobjects(#10832) +py_cobjecttypes(#10832, #10028) +py_cobject_sources(#10832, 0) +py_cobjectnames(#10832, "b'Base class for warnings about probable mistakes in module imports'") +py_cmembers_versioned(#10831, "__doc__", #10832, "2") +#10833 = @"C_type$ImportWarning$2__init__" +py_cobjects(#10833) +py_cobjecttypes(#10833, #10005) +py_cobject_sources(#10833, 0) +py_cobjectnames(#10833, "__init__") +py_cmembers_versioned(#10831, "__init__", #10833, "2") +#10834 = @"C_type$ImportWarning$2__new__" +py_cobjects(#10834) +py_cobjecttypes(#10834, #10075) +py_cobject_sources(#10834, 0) +py_cobjectnames(#10834, "__new__") +py_cmembers_versioned(#10831, "__new__", #10834, "2") +py_cmembers_versioned(#10831, ".super.", #10786, "2") +py_cobjectnames(#10831, "ImportWarning") +py_cmembers_versioned(#10760, "ImportWarning", #10831, "2") +#10835 = @"C_type$IndentationError" +py_cobjects(#10835) +py_cobjecttypes(#10835, #10001) +py_cobject_sources(#10835, 0) +#10836 = @"C_bytes$d2993333f1c442637c5dd452ecfef78eb9055666" +py_cobjects(#10836) +py_cobjecttypes(#10836, #10028) +py_cobject_sources(#10836, 0) +py_cobjectnames(#10836, "b'Improper indentation.'") +py_cmembers_versioned(#10835, "__doc__", #10836, "2") +#10837 = @"C_type$IndentationError$2__init__" +py_cobjects(#10837) +py_cobjecttypes(#10837, #10005) +py_cobject_sources(#10837, 0) +py_cobjectnames(#10837, "__init__") +py_cmembers_versioned(#10835, "__init__", #10837, "2") +#10838 = @"C_type$IndentationError$2__new__" +py_cobjects(#10838) +py_cobjecttypes(#10838, #10075) +py_cobject_sources(#10838, 0) +py_cobjectnames(#10838, "__new__") +py_cmembers_versioned(#10835, "__new__", #10838, "2") +#10839 = @"C_type$SyntaxError" +py_cobjects(#10839) +py_cobjecttypes(#10839, #10001) +py_cobject_sources(#10839, 0) +#10840 = @"C_bytes$28213b9a5d59b61c3581f42fd6bd800017566bbe" +py_cobjects(#10840) +py_cobjecttypes(#10840, #10028) +py_cobject_sources(#10840, 0) +py_cobjectnames(#10840, "b'Invalid syntax.'") +py_cmembers_versioned(#10839, "__doc__", #10840, "2") +#10841 = @"C_type$SyntaxError$2__init__" +py_cobjects(#10841) +py_cobjecttypes(#10841, #10005) +py_cobject_sources(#10841, 0) +py_cobjectnames(#10841, "__init__") +py_cmembers_versioned(#10839, "__init__", #10841, "2") +#10842 = @"C_type$SyntaxError$2__new__" +py_cobjects(#10842) +py_cobjecttypes(#10842, #10075) +py_cobject_sources(#10842, 0) +py_cobjectnames(#10842, "__new__") +py_cmembers_versioned(#10839, "__new__", #10842, "2") +#10843 = @"C_type$SyntaxError$2__str__" +py_cobjects(#10843) +py_cobjecttypes(#10843, #10005) +py_cobject_sources(#10843, 0) +py_cobjectnames(#10843, "__str__") +py_cmembers_versioned(#10839, "__str__", #10843, "2") +#10844 = @"C_type$SyntaxError$2filename" +py_cobjects(#10844) +py_cobjecttypes(#10844, #10045) +py_cobject_sources(#10844, 0) +py_cobjectnames(#10844, "filename") +py_cmembers_versioned(#10839, "filename", #10844, "2") +#10845 = @"C_type$SyntaxError$2lineno" +py_cobjects(#10845) +py_cobjecttypes(#10845, #10045) +py_cobject_sources(#10845, 0) +py_cobjectnames(#10845, "lineno") +py_cmembers_versioned(#10839, "lineno", #10845, "2") +#10846 = @"C_type$SyntaxError$2msg" +py_cobjects(#10846) +py_cobjecttypes(#10846, #10045) +py_cobject_sources(#10846, 0) +py_cobjectnames(#10846, "msg") +py_cmembers_versioned(#10839, "msg", #10846, "2") +#10847 = @"C_type$SyntaxError$2offset" +py_cobjects(#10847) +py_cobjecttypes(#10847, #10045) +py_cobject_sources(#10847, 0) +py_cobjectnames(#10847, "offset") +py_cmembers_versioned(#10839, "offset", #10847, "2") +#10848 = @"C_type$SyntaxError$2print_file_and_line" +py_cobjects(#10848) +py_cobjecttypes(#10848, #10045) +py_cobject_sources(#10848, 0) +py_cobjectnames(#10848, "print_file_and_line") +py_cmembers_versioned(#10839, "print_file_and_line", #10848, "2") +#10849 = @"C_type$SyntaxError$2text" +py_cobjects(#10849) +py_cobjecttypes(#10849, #10045) +py_cobject_sources(#10849, 0) +py_cobjectnames(#10849, "text") +py_cmembers_versioned(#10839, "text", #10849, "2") +py_cmembers_versioned(#10839, ".super.", #10346, "2") +py_cobjectnames(#10839, "SyntaxError") +py_cmembers_versioned(#10835, ".super.", #10839, "2") +py_cobjectnames(#10835, "IndentationError") +py_cmembers_versioned(#10760, "IndentationError", #10835, "2") +#10850 = @"C_type$IndexError" +py_cobjects(#10850) +py_cobjecttypes(#10850, #10001) +py_cobject_sources(#10850, 0) +#10851 = @"C_bytes$e2bf5d749a504a9653f5e22f9f28b81478510e75" +py_cobjects(#10851) +py_cobjecttypes(#10851, #10028) +py_cobject_sources(#10851, 0) +py_cobjectnames(#10851, "b'Sequence index out of range.'") +py_cmembers_versioned(#10850, "__doc__", #10851, "2") +#10852 = @"C_type$IndexError$2__init__" +py_cobjects(#10852) +py_cobjecttypes(#10852, #10005) +py_cobject_sources(#10852, 0) +py_cobjectnames(#10852, "__init__") +py_cmembers_versioned(#10850, "__init__", #10852, "2") +#10853 = @"C_type$IndexError$2__new__" +py_cobjects(#10853) +py_cobjecttypes(#10853, #10075) +py_cobject_sources(#10853, 0) +py_cobjectnames(#10853, "__new__") +py_cmembers_versioned(#10850, "__new__", #10853, "2") +py_cmembers_versioned(#10850, ".super.", #10429, "2") +py_cobjectnames(#10850, "IndexError") +py_cmembers_versioned(#10760, "IndexError", #10850, "2") +py_cmembers_versioned(#10760, "KeyError", #10424, "2") +#10854 = @"C_type$KeyboardInterrupt" +py_cobjects(#10854) +py_cobjecttypes(#10854, #10001) +py_cobject_sources(#10854, 0) +#10855 = @"C_bytes$3027c1639d9aaf29dbb40c14d49e49b73fcddc02" +py_cobjects(#10855) +py_cobjecttypes(#10855, #10028) +py_cobject_sources(#10855, 0) +py_cobjectnames(#10855, "b'Program interrupted by user.'") +py_cmembers_versioned(#10854, "__doc__", #10855, "2") +#10856 = @"C_type$KeyboardInterrupt$2__init__" +py_cobjects(#10856) +py_cobjecttypes(#10856, #10005) +py_cobject_sources(#10856, 0) +py_cobjectnames(#10856, "__init__") +py_cmembers_versioned(#10854, "__init__", #10856, "2") +#10857 = @"C_type$KeyboardInterrupt$2__new__" +py_cobjects(#10857) +py_cobjecttypes(#10857, #10075) +py_cobject_sources(#10857, 0) +py_cobjectnames(#10857, "__new__") +py_cmembers_versioned(#10854, "__new__", #10857, "2") +py_cmembers_versioned(#10854, ".super.", #10354, "2") +py_cobjectnames(#10854, "KeyboardInterrupt") +py_cmembers_versioned(#10760, "KeyboardInterrupt", #10854, "2") +py_cmembers_versioned(#10760, "LookupError", #10429, "2") +#10858 = @"C_type$MemoryError" +py_cobjects(#10858) +py_cobjecttypes(#10858, #10001) +py_cobject_sources(#10858, 0) +#10859 = @"C_bytes$8287615f2ac89aad252242dec878907206c5210b" +py_cobjects(#10859) +py_cobjecttypes(#10859, #10028) +py_cobject_sources(#10859, 0) +py_cobjectnames(#10859, "b'Out of memory.'") +py_cmembers_versioned(#10858, "__doc__", #10859, "2") +#10860 = @"C_type$MemoryError$2__init__" +py_cobjects(#10860) +py_cobjecttypes(#10860, #10005) +py_cobject_sources(#10860, 0) +py_cobjectnames(#10860, "__init__") +py_cmembers_versioned(#10858, "__init__", #10860, "2") +#10861 = @"C_type$MemoryError$2__new__" +py_cobjects(#10861) +py_cobjecttypes(#10861, #10075) +py_cobject_sources(#10861, 0) +py_cobjectnames(#10861, "__new__") +py_cmembers_versioned(#10858, "__new__", #10861, "2") +py_cmembers_versioned(#10858, ".super.", #10346, "2") +py_cobjectnames(#10858, "MemoryError") +py_cmembers_versioned(#10760, "MemoryError", #10858, "2") +#10862 = @"C_type$NameError" +py_cobjects(#10862) +py_cobjecttypes(#10862, #10001) +py_cobject_sources(#10862, 0) +#10863 = @"C_bytes$3ee40dae3c3262da06ab3dd1f71e2e35167fc2c9" +py_cobjects(#10863) +py_cobjecttypes(#10863, #10028) +py_cobject_sources(#10863, 0) +py_cobjectnames(#10863, "b'Name not found globally.'") +py_cmembers_versioned(#10862, "__doc__", #10863, "2") +#10864 = @"C_type$NameError$2__init__" +py_cobjects(#10864) +py_cobjecttypes(#10864, #10005) +py_cobject_sources(#10864, 0) +py_cobjectnames(#10864, "__init__") +py_cmembers_versioned(#10862, "__init__", #10864, "2") +#10865 = @"C_type$NameError$2__new__" +py_cobjects(#10865) +py_cobjecttypes(#10865, #10075) +py_cobject_sources(#10865, 0) +py_cobjectnames(#10865, "__new__") +py_cmembers_versioned(#10862, "__new__", #10865, "2") +py_cmembers_versioned(#10862, ".super.", #10346, "2") +py_cobjectnames(#10862, "NameError") +py_cmembers_versioned(#10760, "NameError", #10862, "2") +py_cmembers_versioned(#10760, "None", #10017, "2") +#10866 = @"C_module$__builtin__$2NotImplemented" +#10867 = @"C_type$NotImplementedType" +py_cobjects(#10867) +py_cobjecttypes(#10867, #10001) +py_cobject_sources(#10867, 0) +py_cmembers_versioned(#10867, "__doc__", #10017, "2") +#10868 = @"C_type$NotImplementedType$2__repr__" +py_cobjects(#10868) +py_cobjecttypes(#10868, #10005) +py_cobject_sources(#10868, 0) +py_cobjectnames(#10868, "__repr__") +py_cmembers_versioned(#10867, "__repr__", #10868, "2") +py_cmembers_versioned(#10867, ".super.", #10021, "2") +py_cobjectnames(#10867, "NotImplementedType") +py_cobjects(#10866) +py_cobjecttypes(#10866, #10867) +py_cobject_sources(#10866, 0) +py_cobjectnames(#10866, "object") +py_cmembers_versioned(#10760, "NotImplemented", #10866, "2") +#10869 = @"C_type$NotImplementedError" +py_cobjects(#10869) +py_cobjecttypes(#10869, #10001) +py_cobject_sources(#10869, 0) +#10870 = @"C_bytes$e964a68e9c66aee1b350d0f97ba35e25939ba6c5" +py_cobjects(#10870) +py_cobjecttypes(#10870, #10028) +py_cobject_sources(#10870, 0) +py_cobjectnames(#10870, "b'Method or function hasn't been implemented yet.'") +py_cmembers_versioned(#10869, "__doc__", #10870, "2") +#10871 = @"C_type$NotImplementedError$2__init__" +py_cobjects(#10871) +py_cobjecttypes(#10871, #10005) +py_cobject_sources(#10871, 0) +py_cobjectnames(#10871, "__init__") +py_cmembers_versioned(#10869, "__init__", #10871, "2") +#10872 = @"C_type$NotImplementedError$2__new__" +py_cobjects(#10872) +py_cobjecttypes(#10872, #10075) +py_cobject_sources(#10872, 0) +py_cobjectnames(#10872, "__new__") +py_cmembers_versioned(#10869, "__new__", #10872, "2") +#10873 = @"C_type$RuntimeError" +py_cobjects(#10873) +py_cobjecttypes(#10873, #10001) +py_cobject_sources(#10873, 0) +#10874 = @"C_bytes$c32922004f1cab6d2b368005f373dc639dc0003a" +py_cobjects(#10874) +py_cobjecttypes(#10874, #10028) +py_cobject_sources(#10874, 0) +py_cobjectnames(#10874, "b'Unspecified run-time error.'") +py_cmembers_versioned(#10873, "__doc__", #10874, "2") +#10875 = @"C_type$RuntimeError$2__init__" +py_cobjects(#10875) +py_cobjecttypes(#10875, #10005) +py_cobject_sources(#10875, 0) +py_cobjectnames(#10875, "__init__") +py_cmembers_versioned(#10873, "__init__", #10875, "2") +#10876 = @"C_type$RuntimeError$2__new__" +py_cobjects(#10876) +py_cobjecttypes(#10876, #10075) +py_cobject_sources(#10876, 0) +py_cobjectnames(#10876, "__new__") +py_cmembers_versioned(#10873, "__new__", #10876, "2") +py_cmembers_versioned(#10873, ".super.", #10346, "2") +py_cobjectnames(#10873, "RuntimeError") +py_cmembers_versioned(#10869, ".super.", #10873, "2") +py_cobjectnames(#10869, "NotImplementedError") +py_cmembers_versioned(#10760, "NotImplementedError", #10869, "2") +#10877 = @"C_type$OSError" +py_cobjects(#10877) +py_cobjecttypes(#10877, #10001) +py_cobject_sources(#10877, 0) +#10878 = @"C_bytes$7c5e876e4f80392a70ac8970ce5b0afb23116479" +py_cobjects(#10878) +py_cobjecttypes(#10878, #10028) +py_cobject_sources(#10878, 0) +py_cobjectnames(#10878, "b'OS system call failed.'") +py_cmembers_versioned(#10877, "__doc__", #10878, "2") +#10879 = @"C_type$OSError$2__init__" +py_cobjects(#10879) +py_cobjecttypes(#10879, #10005) +py_cobject_sources(#10879, 0) +py_cobjectnames(#10879, "__init__") +py_cmembers_versioned(#10877, "__init__", #10879, "2") +#10880 = @"C_type$OSError$2__new__" +py_cobjects(#10880) +py_cobjecttypes(#10880, #10075) +py_cobject_sources(#10880, 0) +py_cobjectnames(#10880, "__new__") +py_cmembers_versioned(#10877, "__new__", #10880, "2") +py_cmembers_versioned(#10877, ".super.", #10802, "2") +py_cobjectnames(#10877, "OSError") +py_cmembers_versioned(#10760, "OSError", #10877, "2") +#10881 = @"C_type$OverflowError" +py_cobjects(#10881) +py_cobjecttypes(#10881, #10001) +py_cobject_sources(#10881, 0) +#10882 = @"C_bytes$81fc8eb0f559594e6743ac282bd13b3850623c63" +py_cobjects(#10882) +py_cobjecttypes(#10882, #10028) +py_cobject_sources(#10882, 0) +py_cobjectnames(#10882, "b'Result too large to be represented.'") +py_cmembers_versioned(#10881, "__doc__", #10882, "2") +#10883 = @"C_type$OverflowError$2__init__" +py_cobjects(#10883) +py_cobjecttypes(#10883, #10005) +py_cobject_sources(#10883, 0) +py_cobjectnames(#10883, "__init__") +py_cmembers_versioned(#10881, "__init__", #10883, "2") +#10884 = @"C_type$OverflowError$2__new__" +py_cobjects(#10884) +py_cobjecttypes(#10884, #10075) +py_cobject_sources(#10884, 0) +py_cobjectnames(#10884, "__new__") +py_cmembers_versioned(#10881, "__new__", #10884, "2") +py_cmembers_versioned(#10881, ".super.", #10770, "2") +py_cobjectnames(#10881, "OverflowError") +py_cmembers_versioned(#10760, "OverflowError", #10881, "2") +#10885 = @"C_type$PendingDeprecationWarning" +py_cobjects(#10885) +py_cobjecttypes(#10885, #10001) +py_cobject_sources(#10885, 0) +#10886 = @"C_bytes$6ede2da8b6b07148b234b6899810b8c42567c0df" +py_cobjects(#10886) +py_cobjecttypes(#10886, #10028) +py_cobject_sources(#10886, 0) +py_cobjectnames(#10886, "b'Base class for warnings about features which will be deprecated +in the future.'") +py_cmembers_versioned(#10885, "__doc__", #10886, "2") +#10887 = @"C_type$PendingDeprecationWarning$2__init__" +py_cobjects(#10887) +py_cobjecttypes(#10887, #10005) +py_cobject_sources(#10887, 0) +py_cobjectnames(#10887, "__init__") +py_cmembers_versioned(#10885, "__init__", #10887, "2") +#10888 = @"C_type$PendingDeprecationWarning$2__new__" +py_cobjects(#10888) +py_cobjecttypes(#10888, #10075) +py_cobject_sources(#10888, 0) +py_cobjectnames(#10888, "__new__") +py_cmembers_versioned(#10885, "__new__", #10888, "2") +py_cmembers_versioned(#10885, ".super.", #10786, "2") +py_cobjectnames(#10885, "PendingDeprecationWarning") +py_cmembers_versioned(#10760, "PendingDeprecationWarning", #10885, "2") +#10889 = @"C_type$ReferenceError" +py_cobjects(#10889) +py_cobjecttypes(#10889, #10001) +py_cobject_sources(#10889, 0) +#10890 = @"C_bytes$74d9e10154774d897708037af3911e85f791d151" +py_cobjects(#10890) +py_cobjecttypes(#10890, #10028) +py_cobject_sources(#10890, 0) +py_cobjectnames(#10890, "b'Weak ref proxy used after referent went away.'") +py_cmembers_versioned(#10889, "__doc__", #10890, "2") +#10891 = @"C_type$ReferenceError$2__init__" +py_cobjects(#10891) +py_cobjecttypes(#10891, #10005) +py_cobject_sources(#10891, 0) +py_cobjectnames(#10891, "__init__") +py_cmembers_versioned(#10889, "__init__", #10891, "2") +#10892 = @"C_type$ReferenceError$2__new__" +py_cobjects(#10892) +py_cobjecttypes(#10892, #10075) +py_cobject_sources(#10892, 0) +py_cobjectnames(#10892, "__new__") +py_cmembers_versioned(#10889, "__new__", #10892, "2") +py_cmembers_versioned(#10889, ".super.", #10346, "2") +py_cobjectnames(#10889, "ReferenceError") +py_cmembers_versioned(#10760, "ReferenceError", #10889, "2") +py_cmembers_versioned(#10760, "RuntimeError", #10873, "2") +#10893 = @"C_type$RuntimeWarning" +py_cobjects(#10893) +py_cobjecttypes(#10893, #10001) +py_cobject_sources(#10893, 0) +#10894 = @"C_bytes$1d911ad966f332393c3708556614e73ed1cbd284" +py_cobjects(#10894) +py_cobjecttypes(#10894, #10028) +py_cobject_sources(#10894, 0) +py_cobjectnames(#10894, "b'Base class for warnings about dubious runtime behavior.'") +py_cmembers_versioned(#10893, "__doc__", #10894, "2") +#10895 = @"C_type$RuntimeWarning$2__init__" +py_cobjects(#10895) +py_cobjecttypes(#10895, #10005) +py_cobject_sources(#10895, 0) +py_cobjectnames(#10895, "__init__") +py_cmembers_versioned(#10893, "__init__", #10895, "2") +#10896 = @"C_type$RuntimeWarning$2__new__" +py_cobjects(#10896) +py_cobjecttypes(#10896, #10075) +py_cobject_sources(#10896, 0) +py_cobjectnames(#10896, "__new__") +py_cmembers_versioned(#10893, "__new__", #10896, "2") +py_cmembers_versioned(#10893, ".super.", #10786, "2") +py_cobjectnames(#10893, "RuntimeWarning") +py_cmembers_versioned(#10760, "RuntimeWarning", #10893, "2") +py_cmembers_versioned(#10760, "StandardError", #10346, "2") +#10897 = @"C_type$StopIteration" +py_cobjects(#10897) +py_cobjecttypes(#10897, #10001) +py_cobject_sources(#10897, 0) +#10898 = @"C_bytes$54ddb31db0c09a5a734a28d48c4c9b5e24827897" +py_cobjects(#10898) +py_cobjecttypes(#10898, #10028) +py_cobject_sources(#10898, 0) +py_cobjectnames(#10898, "b'Signal the end from iterator.next().'") +py_cmembers_versioned(#10897, "__doc__", #10898, "2") +#10899 = @"C_type$StopIteration$2__init__" +py_cobjects(#10899) +py_cobjecttypes(#10899, #10005) +py_cobject_sources(#10899, 0) +py_cobjectnames(#10899, "__init__") +py_cmembers_versioned(#10897, "__init__", #10899, "2") +#10900 = @"C_type$StopIteration$2__new__" +py_cobjects(#10900) +py_cobjecttypes(#10900, #10075) +py_cobject_sources(#10900, 0) +py_cobjectnames(#10900, "__new__") +py_cmembers_versioned(#10897, "__new__", #10900, "2") +py_cmembers_versioned(#10897, ".super.", #10350, "2") +py_cobjectnames(#10897, "StopIteration") +py_cmembers_versioned(#10760, "StopIteration", #10897, "2") +py_cmembers_versioned(#10760, "SyntaxError", #10839, "2") +#10901 = @"C_type$SyntaxWarning" +py_cobjects(#10901) +py_cobjecttypes(#10901, #10001) +py_cobject_sources(#10901, 0) +#10902 = @"C_bytes$ed11da738626db6bc66dc76605890a35049a6b1f" +py_cobjects(#10902) +py_cobjecttypes(#10902, #10028) +py_cobject_sources(#10902, 0) +py_cobjectnames(#10902, "b'Base class for warnings about dubious syntax.'") +py_cmembers_versioned(#10901, "__doc__", #10902, "2") +#10903 = @"C_type$SyntaxWarning$2__init__" +py_cobjects(#10903) +py_cobjecttypes(#10903, #10005) +py_cobject_sources(#10903, 0) +py_cobjectnames(#10903, "__init__") +py_cmembers_versioned(#10901, "__init__", #10903, "2") +#10904 = @"C_type$SyntaxWarning$2__new__" +py_cobjects(#10904) +py_cobjecttypes(#10904, #10075) +py_cobject_sources(#10904, 0) +py_cobjectnames(#10904, "__new__") +py_cmembers_versioned(#10901, "__new__", #10904, "2") +py_cmembers_versioned(#10901, ".super.", #10786, "2") +py_cobjectnames(#10901, "SyntaxWarning") +py_cmembers_versioned(#10760, "SyntaxWarning", #10901, "2") +#10905 = @"C_type$SystemError" +py_cobjects(#10905) +py_cobjecttypes(#10905, #10001) +py_cobject_sources(#10905, 0) +#10906 = @"C_bytes$c1cf6790d4b65381912240b56b1abfccd1180511" +py_cobjects(#10906) +py_cobjecttypes(#10906, #10028) +py_cobject_sources(#10906, 0) +py_cobjectnames(#10906, "b'Internal error in the Python interpreter. + +Please report this to the Python maintainer, along with the traceback, +the Python version, and the hardware/OS platform and version.'") +py_cmembers_versioned(#10905, "__doc__", #10906, "2") +#10907 = @"C_type$SystemError$2__init__" +py_cobjects(#10907) +py_cobjecttypes(#10907, #10005) +py_cobject_sources(#10907, 0) +py_cobjectnames(#10907, "__init__") +py_cmembers_versioned(#10905, "__init__", #10907, "2") +#10908 = @"C_type$SystemError$2__new__" +py_cobjects(#10908) +py_cobjecttypes(#10908, #10075) +py_cobject_sources(#10908, 0) +py_cobjectnames(#10908, "__new__") +py_cmembers_versioned(#10905, "__new__", #10908, "2") +py_cmembers_versioned(#10905, ".super.", #10346, "2") +py_cobjectnames(#10905, "SystemError") +py_cmembers_versioned(#10760, "SystemError", #10905, "2") +#10909 = @"C_type$SystemExit" +py_cobjects(#10909) +py_cobjecttypes(#10909, #10001) +py_cobject_sources(#10909, 0) +#10910 = @"C_bytes$0f79405337feb97687ba9164ec3f11c719c6781d" +py_cobjects(#10910) +py_cobjecttypes(#10910, #10028) +py_cobject_sources(#10910, 0) +py_cobjectnames(#10910, "b'Request to exit from the interpreter.'") +py_cmembers_versioned(#10909, "__doc__", #10910, "2") +#10911 = @"C_type$SystemExit$2__init__" +py_cobjects(#10911) +py_cobjecttypes(#10911, #10005) +py_cobject_sources(#10911, 0) +py_cobjectnames(#10911, "__init__") +py_cmembers_versioned(#10909, "__init__", #10911, "2") +#10912 = @"C_type$SystemExit$2__new__" +py_cobjects(#10912) +py_cobjecttypes(#10912, #10075) +py_cobject_sources(#10912, 0) +py_cobjectnames(#10912, "__new__") +py_cmembers_versioned(#10909, "__new__", #10912, "2") +#10913 = @"C_type$SystemExit$2code" +py_cobjects(#10913) +py_cobjecttypes(#10913, #10045) +py_cobject_sources(#10913, 0) +py_cobjectnames(#10913, "code") +py_cmembers_versioned(#10909, "code", #10913, "2") +py_cmembers_versioned(#10909, ".super.", #10354, "2") +py_cobjectnames(#10909, "SystemExit") +py_cmembers_versioned(#10760, "SystemExit", #10909, "2") +#10914 = @"C_type$TabError" +py_cobjects(#10914) +py_cobjecttypes(#10914, #10001) +py_cobject_sources(#10914, 0) +#10915 = @"C_bytes$1f00990056c2ec84fb4412b2042ae8b7fa911445" +py_cobjects(#10915) +py_cobjecttypes(#10915, #10028) +py_cobject_sources(#10915, 0) +py_cobjectnames(#10915, "b'Improper mixture of spaces and tabs.'") +py_cmembers_versioned(#10914, "__doc__", #10915, "2") +#10916 = @"C_type$TabError$2__init__" +py_cobjects(#10916) +py_cobjecttypes(#10916, #10005) +py_cobject_sources(#10916, 0) +py_cobjectnames(#10916, "__init__") +py_cmembers_versioned(#10914, "__init__", #10916, "2") +#10917 = @"C_type$TabError$2__new__" +py_cobjects(#10917) +py_cobjecttypes(#10917, #10075) +py_cobject_sources(#10917, 0) +py_cobjectnames(#10917, "__new__") +py_cmembers_versioned(#10914, "__new__", #10917, "2") +py_cmembers_versioned(#10914, ".super.", #10835, "2") +py_cobjectnames(#10914, "TabError") +py_cmembers_versioned(#10760, "TabError", #10914, "2") +py_cmembers_versioned(#10760, "True", #10437, "2") +py_cmembers_versioned(#10760, "TypeError", #10342, "2") +#10918 = @"C_type$UnboundLocalError" +py_cobjects(#10918) +py_cobjecttypes(#10918, #10001) +py_cobject_sources(#10918, 0) +#10919 = @"C_bytes$71efb90adabbeacc59d1e4c9d90d3013f6b44b8d" +py_cobjects(#10919) +py_cobjecttypes(#10919, #10028) +py_cobject_sources(#10919, 0) +py_cobjectnames(#10919, "b'Local name referenced but not bound to a value.'") +py_cmembers_versioned(#10918, "__doc__", #10919, "2") +#10920 = @"C_type$UnboundLocalError$2__init__" +py_cobjects(#10920) +py_cobjecttypes(#10920, #10005) +py_cobject_sources(#10920, 0) +py_cobjectnames(#10920, "__init__") +py_cmembers_versioned(#10918, "__init__", #10920, "2") +#10921 = @"C_type$UnboundLocalError$2__new__" +py_cobjects(#10921) +py_cobjecttypes(#10921, #10075) +py_cobject_sources(#10921, 0) +py_cobjectnames(#10921, "__new__") +py_cmembers_versioned(#10918, "__new__", #10921, "2") +py_cmembers_versioned(#10918, ".super.", #10862, "2") +py_cobjectnames(#10918, "UnboundLocalError") +py_cmembers_versioned(#10760, "UnboundLocalError", #10918, "2") +#10922 = @"C_type$UnicodeDecodeError" +py_cobjects(#10922) +py_cobjecttypes(#10922, #10001) +py_cobject_sources(#10922, 0) +#10923 = @"C_bytes$098d73af685a30da73d6dff0e94c51a62adfb3df" +py_cobjects(#10923) +py_cobjecttypes(#10923, #10028) +py_cobject_sources(#10923, 0) +py_cobjectnames(#10923, "b'Unicode decoding error.'") +py_cmembers_versioned(#10922, "__doc__", #10923, "2") +#10924 = @"C_type$UnicodeDecodeError$2__init__" +py_cobjects(#10924) +py_cobjecttypes(#10924, #10005) +py_cobject_sources(#10924, 0) +py_cobjectnames(#10924, "__init__") +py_cmembers_versioned(#10922, "__init__", #10924, "2") +#10925 = @"C_type$UnicodeDecodeError$2__new__" +py_cobjects(#10925) +py_cobjecttypes(#10925, #10075) +py_cobject_sources(#10925, 0) +py_cobjectnames(#10925, "__new__") +py_cmembers_versioned(#10922, "__new__", #10925, "2") +#10926 = @"C_type$UnicodeDecodeError$2__str__" +py_cobjects(#10926) +py_cobjecttypes(#10926, #10005) +py_cobject_sources(#10926, 0) +py_cobjectnames(#10926, "__str__") +py_cmembers_versioned(#10922, "__str__", #10926, "2") +#10927 = @"C_type$UnicodeDecodeError$2encoding" +py_cobjects(#10927) +py_cobjecttypes(#10927, #10045) +py_cobject_sources(#10927, 0) +py_cobjectnames(#10927, "encoding") +py_cmembers_versioned(#10922, "encoding", #10927, "2") +#10928 = @"C_type$UnicodeDecodeError$2end" +py_cobjects(#10928) +py_cobjecttypes(#10928, #10045) +py_cobject_sources(#10928, 0) +py_cobjectnames(#10928, "end") +py_cmembers_versioned(#10922, "end", #10928, "2") +#10929 = @"C_type$UnicodeDecodeError$2object" +py_cobjects(#10929) +py_cobjecttypes(#10929, #10045) +py_cobject_sources(#10929, 0) +py_cobjectnames(#10929, "object") +py_cmembers_versioned(#10922, "object", #10929, "2") +#10930 = @"C_type$UnicodeDecodeError$2reason" +py_cobjects(#10930) +py_cobjecttypes(#10930, #10045) +py_cobject_sources(#10930, 0) +py_cobjectnames(#10930, "reason") +py_cmembers_versioned(#10922, "reason", #10930, "2") +#10931 = @"C_type$UnicodeDecodeError$2start" +py_cobjects(#10931) +py_cobjecttypes(#10931, #10045) +py_cobject_sources(#10931, 0) +py_cobjectnames(#10931, "start") +py_cmembers_versioned(#10922, "start", #10931, "2") +#10932 = @"C_type$UnicodeError" +py_cobjects(#10932) +py_cobjecttypes(#10932, #10001) +py_cobject_sources(#10932, 0) +#10933 = @"C_bytes$3a19c41c9f0652da65b386921d70709b4c6fa67d" +py_cobjects(#10933) +py_cobjecttypes(#10933, #10028) +py_cobject_sources(#10933, 0) +py_cobjectnames(#10933, "b'Unicode related error.'") +py_cmembers_versioned(#10932, "__doc__", #10933, "2") +#10934 = @"C_type$UnicodeError$2__init__" +py_cobjects(#10934) +py_cobjecttypes(#10934, #10005) +py_cobject_sources(#10934, 0) +py_cobjectnames(#10934, "__init__") +py_cmembers_versioned(#10932, "__init__", #10934, "2") +#10935 = @"C_type$UnicodeError$2__new__" +py_cobjects(#10935) +py_cobjecttypes(#10935, #10075) +py_cobject_sources(#10935, 0) +py_cobjectnames(#10935, "__new__") +py_cmembers_versioned(#10932, "__new__", #10935, "2") +#10936 = @"C_type$ValueError" +py_cobjects(#10936) +py_cobjecttypes(#10936, #10001) +py_cobject_sources(#10936, 0) +#10937 = @"C_bytes$1e87860add337182f95f7a558dc68165585485f7" +py_cobjects(#10937) +py_cobjecttypes(#10937, #10028) +py_cobject_sources(#10937, 0) +py_cobjectnames(#10937, "b'Inappropriate argument value (of correct type).'") +py_cmembers_versioned(#10936, "__doc__", #10937, "2") +#10938 = @"C_type$ValueError$2__init__" +py_cobjects(#10938) +py_cobjecttypes(#10938, #10005) +py_cobject_sources(#10938, 0) +py_cobjectnames(#10938, "__init__") +py_cmembers_versioned(#10936, "__init__", #10938, "2") +#10939 = @"C_type$ValueError$2__new__" +py_cobjects(#10939) +py_cobjecttypes(#10939, #10075) +py_cobject_sources(#10939, 0) +py_cobjectnames(#10939, "__new__") +py_cmembers_versioned(#10936, "__new__", #10939, "2") +py_cmembers_versioned(#10936, ".super.", #10346, "2") +py_cobjectnames(#10936, "ValueError") +py_cmembers_versioned(#10932, ".super.", #10936, "2") +py_cobjectnames(#10932, "UnicodeError") +py_cmembers_versioned(#10922, ".super.", #10932, "2") +py_cobjectnames(#10922, "UnicodeDecodeError") +py_cmembers_versioned(#10760, "UnicodeDecodeError", #10922, "2") +#10940 = @"C_type$UnicodeEncodeError" +py_cobjects(#10940) +py_cobjecttypes(#10940, #10001) +py_cobject_sources(#10940, 0) +#10941 = @"C_bytes$d7f716fab2cf715e5b3c0dc3336bbbdb18e1b03a" +py_cobjects(#10941) +py_cobjecttypes(#10941, #10028) +py_cobject_sources(#10941, 0) +py_cobjectnames(#10941, "b'Unicode encoding error.'") +py_cmembers_versioned(#10940, "__doc__", #10941, "2") +#10942 = @"C_type$UnicodeEncodeError$2__init__" +py_cobjects(#10942) +py_cobjecttypes(#10942, #10005) +py_cobject_sources(#10942, 0) +py_cobjectnames(#10942, "__init__") +py_cmembers_versioned(#10940, "__init__", #10942, "2") +#10943 = @"C_type$UnicodeEncodeError$2__new__" +py_cobjects(#10943) +py_cobjecttypes(#10943, #10075) +py_cobject_sources(#10943, 0) +py_cobjectnames(#10943, "__new__") +py_cmembers_versioned(#10940, "__new__", #10943, "2") +#10944 = @"C_type$UnicodeEncodeError$2__str__" +py_cobjects(#10944) +py_cobjecttypes(#10944, #10005) +py_cobject_sources(#10944, 0) +py_cobjectnames(#10944, "__str__") +py_cmembers_versioned(#10940, "__str__", #10944, "2") +#10945 = @"C_type$UnicodeEncodeError$2encoding" +py_cobjects(#10945) +py_cobjecttypes(#10945, #10045) +py_cobject_sources(#10945, 0) +py_cobjectnames(#10945, "encoding") +py_cmembers_versioned(#10940, "encoding", #10945, "2") +#10946 = @"C_type$UnicodeEncodeError$2end" +py_cobjects(#10946) +py_cobjecttypes(#10946, #10045) +py_cobject_sources(#10946, 0) +py_cobjectnames(#10946, "end") +py_cmembers_versioned(#10940, "end", #10946, "2") +#10947 = @"C_type$UnicodeEncodeError$2object" +py_cobjects(#10947) +py_cobjecttypes(#10947, #10045) +py_cobject_sources(#10947, 0) +py_cobjectnames(#10947, "object") +py_cmembers_versioned(#10940, "object", #10947, "2") +#10948 = @"C_type$UnicodeEncodeError$2reason" +py_cobjects(#10948) +py_cobjecttypes(#10948, #10045) +py_cobject_sources(#10948, 0) +py_cobjectnames(#10948, "reason") +py_cmembers_versioned(#10940, "reason", #10948, "2") +#10949 = @"C_type$UnicodeEncodeError$2start" +py_cobjects(#10949) +py_cobjecttypes(#10949, #10045) +py_cobject_sources(#10949, 0) +py_cobjectnames(#10949, "start") +py_cmembers_versioned(#10940, "start", #10949, "2") +py_cmembers_versioned(#10940, ".super.", #10932, "2") +py_cobjectnames(#10940, "UnicodeEncodeError") +py_cmembers_versioned(#10760, "UnicodeEncodeError", #10940, "2") +py_cmembers_versioned(#10760, "UnicodeError", #10932, "2") +#10950 = @"C_type$UnicodeTranslateError" +py_cobjects(#10950) +py_cobjecttypes(#10950, #10001) +py_cobject_sources(#10950, 0) +#10951 = @"C_bytes$cee41dba9177b2a51dac7bada4e5d4506e08c9ba" +py_cobjects(#10951) +py_cobjecttypes(#10951, #10028) +py_cobject_sources(#10951, 0) +py_cobjectnames(#10951, "b'Unicode translation error.'") +py_cmembers_versioned(#10950, "__doc__", #10951, "2") +#10952 = @"C_type$UnicodeTranslateError$2__init__" +py_cobjects(#10952) +py_cobjecttypes(#10952, #10005) +py_cobject_sources(#10952, 0) +py_cobjectnames(#10952, "__init__") +py_cmembers_versioned(#10950, "__init__", #10952, "2") +#10953 = @"C_type$UnicodeTranslateError$2__new__" +py_cobjects(#10953) +py_cobjecttypes(#10953, #10075) +py_cobject_sources(#10953, 0) +py_cobjectnames(#10953, "__new__") +py_cmembers_versioned(#10950, "__new__", #10953, "2") +#10954 = @"C_type$UnicodeTranslateError$2__str__" +py_cobjects(#10954) +py_cobjecttypes(#10954, #10005) +py_cobject_sources(#10954, 0) +py_cobjectnames(#10954, "__str__") +py_cmembers_versioned(#10950, "__str__", #10954, "2") +#10955 = @"C_type$UnicodeTranslateError$2encoding" +py_cobjects(#10955) +py_cobjecttypes(#10955, #10045) +py_cobject_sources(#10955, 0) +py_cobjectnames(#10955, "encoding") +py_cmembers_versioned(#10950, "encoding", #10955, "2") +#10956 = @"C_type$UnicodeTranslateError$2end" +py_cobjects(#10956) +py_cobjecttypes(#10956, #10045) +py_cobject_sources(#10956, 0) +py_cobjectnames(#10956, "end") +py_cmembers_versioned(#10950, "end", #10956, "2") +#10957 = @"C_type$UnicodeTranslateError$2object" +py_cobjects(#10957) +py_cobjecttypes(#10957, #10045) +py_cobject_sources(#10957, 0) +py_cobjectnames(#10957, "object") +py_cmembers_versioned(#10950, "object", #10957, "2") +#10958 = @"C_type$UnicodeTranslateError$2reason" +py_cobjects(#10958) +py_cobjecttypes(#10958, #10045) +py_cobject_sources(#10958, 0) +py_cobjectnames(#10958, "reason") +py_cmembers_versioned(#10950, "reason", #10958, "2") +#10959 = @"C_type$UnicodeTranslateError$2start" +py_cobjects(#10959) +py_cobjecttypes(#10959, #10045) +py_cobject_sources(#10959, 0) +py_cobjectnames(#10959, "start") +py_cmembers_versioned(#10950, "start", #10959, "2") +py_cmembers_versioned(#10950, ".super.", #10932, "2") +py_cobjectnames(#10950, "UnicodeTranslateError") +py_cmembers_versioned(#10760, "UnicodeTranslateError", #10950, "2") +#10960 = @"C_type$UnicodeWarning" +py_cobjects(#10960) +py_cobjecttypes(#10960, #10001) +py_cobject_sources(#10960, 0) +#10961 = @"C_bytes$267b90f523a75b12513886062a42ff88d744c729" +py_cobjects(#10961) +py_cobjecttypes(#10961, #10028) +py_cobject_sources(#10961, 0) +py_cobjectnames(#10961, "b'Base class for warnings about Unicode related problems, mostly +related to conversion problems.'") +py_cmembers_versioned(#10960, "__doc__", #10961, "2") +#10962 = @"C_type$UnicodeWarning$2__init__" +py_cobjects(#10962) +py_cobjecttypes(#10962, #10005) +py_cobject_sources(#10962, 0) +py_cobjectnames(#10962, "__init__") +py_cmembers_versioned(#10960, "__init__", #10962, "2") +#10963 = @"C_type$UnicodeWarning$2__new__" +py_cobjects(#10963) +py_cobjecttypes(#10963, #10075) +py_cobject_sources(#10963, 0) +py_cobjectnames(#10963, "__new__") +py_cmembers_versioned(#10960, "__new__", #10963, "2") +py_cmembers_versioned(#10960, ".super.", #10786, "2") +py_cobjectnames(#10960, "UnicodeWarning") +py_cmembers_versioned(#10760, "UnicodeWarning", #10960, "2") +#10964 = @"C_type$UserWarning" +py_cobjects(#10964) +py_cobjecttypes(#10964, #10001) +py_cobject_sources(#10964, 0) +#10965 = @"C_bytes$a020b0a894b4052b6ee113d3143b9d2aef84bb79" +py_cobjects(#10965) +py_cobjecttypes(#10965, #10028) +py_cobject_sources(#10965, 0) +py_cobjectnames(#10965, "b'Base class for warnings generated by user code.'") +py_cmembers_versioned(#10964, "__doc__", #10965, "2") +#10966 = @"C_type$UserWarning$2__init__" +py_cobjects(#10966) +py_cobjecttypes(#10966, #10005) +py_cobject_sources(#10966, 0) +py_cobjectnames(#10966, "__init__") +py_cmembers_versioned(#10964, "__init__", #10966, "2") +#10967 = @"C_type$UserWarning$2__new__" +py_cobjects(#10967) +py_cobjecttypes(#10967, #10075) +py_cobject_sources(#10967, 0) +py_cobjectnames(#10967, "__new__") +py_cmembers_versioned(#10964, "__new__", #10967, "2") +py_cmembers_versioned(#10964, ".super.", #10786, "2") +py_cobjectnames(#10964, "UserWarning") +py_cmembers_versioned(#10760, "UserWarning", #10964, "2") +py_cmembers_versioned(#10760, "ValueError", #10936, "2") +py_cmembers_versioned(#10760, "Warning", #10786, "2") +#10968 = @"C_type$ZeroDivisionError" +py_cobjects(#10968) +py_cobjecttypes(#10968, #10001) +py_cobject_sources(#10968, 0) +#10969 = @"C_bytes$ac840e5e9ea92a5fee400dc28afbc156de91a254" +py_cobjects(#10969) +py_cobjecttypes(#10969, #10028) +py_cobject_sources(#10969, 0) +py_cobjectnames(#10969, "b'Second argument to a division or modulo operation was zero.'") +py_cmembers_versioned(#10968, "__doc__", #10969, "2") +#10970 = @"C_type$ZeroDivisionError$2__init__" +py_cobjects(#10970) +py_cobjecttypes(#10970, #10005) +py_cobject_sources(#10970, 0) +py_cobjectnames(#10970, "__init__") +py_cmembers_versioned(#10968, "__init__", #10970, "2") +#10971 = @"C_type$ZeroDivisionError$2__new__" +py_cobjects(#10971) +py_cobjecttypes(#10971, #10075) +py_cobject_sources(#10971, 0) +py_cobjectnames(#10971, "__new__") +py_cmembers_versioned(#10968, "__new__", #10971, "2") +py_cmembers_versioned(#10968, ".super.", #10770, "2") +py_cobjectnames(#10968, "ZeroDivisionError") +py_cmembers_versioned(#10760, "ZeroDivisionError", #10968, "2") +py_cmembers_versioned(#10760, "__debug__", #10437, "2") +#10972 = @"C_bytes$f54dca68bb1cb438b5052c4a03ef13626ccf985f" +py_cobjects(#10972) +py_cobjecttypes(#10972, #10028) +py_cobject_sources(#10972, 0) +py_cobjectnames(#10972, "b'Built-in functions, exceptions, and other objects. + +Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.'") +py_cmembers_versioned(#10760, "__doc__", #10972, "2") +#10973 = @"C_builtin_function_or_method$builtins.__import__" +py_cobjects(#10973) +py_cobjecttypes(#10973, #10075) +py_cobject_sources(#10973, 0) +py_cobjectnames(#10973, "__import__") +py_cmembers_versioned(#10760, "__import__", #10973, "2") +#10974 = @"C_bytes$3f91ef9b413ce508f0382fd3b182901dfb6bb0ce" +py_cobjects(#10974) +py_cobjecttypes(#10974, #10028) +py_cobject_sources(#10974, 0) +py_cobjectnames(#10974, "b'__builtin__'") +py_cmembers_versioned(#10760, "__name__", #10974, "2") +py_cmembers_versioned(#10760, "__package__", #10017, "2") +#10975 = @"C_builtin_function_or_method$builtins.abs" +py_cobjects(#10975) +py_cobjecttypes(#10975, #10075) +py_cobject_sources(#10975, 0) +py_cobjectnames(#10975, "abs") +py_cmembers_versioned(#10760, "abs", #10975, "2") +#10976 = @"C_builtin_function_or_method$builtins.all" +py_cobjects(#10976) +py_cobjecttypes(#10976, #10075) +py_cobject_sources(#10976, 0) +py_cobjectnames(#10976, "all") +py_cmembers_versioned(#10760, "all", #10976, "2") +#10977 = @"C_builtin_function_or_method$builtins.any" +py_cobjects(#10977) +py_cobjecttypes(#10977, #10075) +py_cobject_sources(#10977, 0) +py_cobjectnames(#10977, "any") +py_cmembers_versioned(#10760, "any", #10977, "2") +#10978 = @"C_builtin_function_or_method$builtins.apply" +py_cobjects(#10978) +py_cobjecttypes(#10978, #10075) +py_cobject_sources(#10978, 0) +py_cobjectnames(#10978, "apply") +py_cmembers_versioned(#10760, "apply", #10978, "2") +py_cmembers_versioned(#10760, "basestring", #10151, "2") +#10979 = @"C_builtin_function_or_method$builtins.bin" +py_cobjects(#10979) +py_cobjecttypes(#10979, #10075) +py_cobject_sources(#10979, 0) +py_cobjectnames(#10979, "bin") +py_cmembers_versioned(#10760, "bin", #10979, "2") +py_cmembers_versioned(#10760, "bool", #10438, "2") +#10980 = @"C_type$buffer" +py_cobjects(#10980) +py_cobjecttypes(#10980, #10001) +py_cobject_sources(#10980, 0) +#10981 = @"C_type$buffer$2__add__" +py_cobjects(#10981) +py_cobjecttypes(#10981, #10005) +py_cobject_sources(#10981, 0) +py_cobjectnames(#10981, "__add__") +py_cmembers_versioned(#10980, "__add__", #10981, "2") +#10982 = @"C_type$buffer$2__cmp__" +py_cobjects(#10982) +py_cobjecttypes(#10982, #10005) +py_cobject_sources(#10982, 0) +py_cobjectnames(#10982, "__cmp__") +py_cmembers_versioned(#10980, "__cmp__", #10982, "2") +#10983 = @"C_type$buffer$2__delitem__" +py_cobjects(#10983) +py_cobjecttypes(#10983, #10005) +py_cobject_sources(#10983, 0) +py_cobjectnames(#10983, "__delitem__") +py_cmembers_versioned(#10980, "__delitem__", #10983, "2") +#10984 = @"C_type$buffer$2__delslice__" +py_cobjects(#10984) +py_cobjecttypes(#10984, #10005) +py_cobject_sources(#10984, 0) +py_cobjectnames(#10984, "__delslice__") +py_cmembers_versioned(#10980, "__delslice__", #10984, "2") +#10985 = @"C_bytes$3e544df634e6e37fcef65d071bf3d36d7bca6069" +py_cobjects(#10985) +py_cobjecttypes(#10985, #10028) +py_cobject_sources(#10985, 0) +py_cobjectnames(#10985, "b'buffer(object [, offset[, size]]) + +Create a new buffer object which references the given object. +The buffer will reference a slice of the target object from the +start of the object (or at the specified offset). The slice will +extend to the end of the target object (or with the specified size).'") +py_cmembers_versioned(#10980, "__doc__", #10985, "2") +#10986 = @"C_type$buffer$2__getattribute__" +py_cobjects(#10986) +py_cobjecttypes(#10986, #10005) +py_cobject_sources(#10986, 0) +py_cobjectnames(#10986, "__getattribute__") +py_cmembers_versioned(#10980, "__getattribute__", #10986, "2") +#10987 = @"C_type$buffer$2__getitem__" +py_cobjects(#10987) +py_cobjecttypes(#10987, #10005) +py_cobject_sources(#10987, 0) +py_cobjectnames(#10987, "__getitem__") +py_cmembers_versioned(#10980, "__getitem__", #10987, "2") +#10988 = @"C_type$buffer$2__getslice__" +py_cobjects(#10988) +py_cobjecttypes(#10988, #10005) +py_cobject_sources(#10988, 0) +py_cobjectnames(#10988, "__getslice__") +py_cmembers_versioned(#10980, "__getslice__", #10988, "2") +#10989 = @"C_type$buffer$2__hash__" +py_cobjects(#10989) +py_cobjecttypes(#10989, #10005) +py_cobject_sources(#10989, 0) +py_cobjectnames(#10989, "__hash__") +py_cmembers_versioned(#10980, "__hash__", #10989, "2") +#10990 = @"C_type$buffer$2__len__" +py_cobjects(#10990) +py_cobjecttypes(#10990, #10005) +py_cobject_sources(#10990, 0) +py_cobjectnames(#10990, "__len__") +py_cmembers_versioned(#10980, "__len__", #10990, "2") +#10991 = @"C_type$buffer$2__mul__" +py_cobjects(#10991) +py_cobjecttypes(#10991, #10005) +py_cobject_sources(#10991, 0) +py_cobjectnames(#10991, "__mul__") +py_cmembers_versioned(#10980, "__mul__", #10991, "2") +#10992 = @"C_type$buffer$2__new__" +py_cobjects(#10992) +py_cobjecttypes(#10992, #10075) +py_cobject_sources(#10992, 0) +py_cobjectnames(#10992, "__new__") +py_cmembers_versioned(#10980, "__new__", #10992, "2") +#10993 = @"C_type$buffer$2__repr__" +py_cobjects(#10993) +py_cobjecttypes(#10993, #10005) +py_cobject_sources(#10993, 0) +py_cobjectnames(#10993, "__repr__") +py_cmembers_versioned(#10980, "__repr__", #10993, "2") +#10994 = @"C_type$buffer$2__rmul__" +py_cobjects(#10994) +py_cobjecttypes(#10994, #10005) +py_cobject_sources(#10994, 0) +py_cobjectnames(#10994, "__rmul__") +py_cmembers_versioned(#10980, "__rmul__", #10994, "2") +#10995 = @"C_type$buffer$2__setitem__" +py_cobjects(#10995) +py_cobjecttypes(#10995, #10005) +py_cobject_sources(#10995, 0) +py_cobjectnames(#10995, "__setitem__") +py_cmembers_versioned(#10980, "__setitem__", #10995, "2") +#10996 = @"C_type$buffer$2__setslice__" +py_cobjects(#10996) +py_cobjecttypes(#10996, #10005) +py_cobject_sources(#10996, 0) +py_cobjectnames(#10996, "__setslice__") +py_cmembers_versioned(#10980, "__setslice__", #10996, "2") +#10997 = @"C_type$buffer$2__str__" +py_cobjects(#10997) +py_cobjecttypes(#10997, #10005) +py_cobject_sources(#10997, 0) +py_cobjectnames(#10997, "__str__") +py_cmembers_versioned(#10980, "__str__", #10997, "2") +py_cmembers_versioned(#10980, ".super.", #10021, "2") +py_cobjectnames(#10980, "buffer") +py_cmembers_versioned(#10760, "buffer", #10980, "2") +#10998 = @"C_type$bytearray" +py_cobjects(#10998) +py_cobjecttypes(#10998, #10001) +py_cobject_sources(#10998, 0) +#10999 = @"C_type$bytearray$2__add__" +py_cobjects(#10999) +py_cobjecttypes(#10999, #10005) +py_cobject_sources(#10999, 0) +py_cobjectnames(#10999, "__add__") +py_cmembers_versioned(#10998, "__add__", #10999, "2") +#11000 = @"C_type$bytearray$2__alloc__" +py_cobjects(#11000) +py_cobjecttypes(#11000, #10034) +py_cobject_sources(#11000, 0) +py_cobjectnames(#11000, "__alloc__") +py_cmembers_versioned(#10998, "__alloc__", #11000, "2") +#11001 = @"C_type$bytearray$2__contains__" +py_cobjects(#11001) +py_cobjecttypes(#11001, #10005) +py_cobject_sources(#11001, 0) +py_cobjectnames(#11001, "__contains__") +py_cmembers_versioned(#10998, "__contains__", #11001, "2") +#11002 = @"C_type$bytearray$2__delitem__" +py_cobjects(#11002) +py_cobjecttypes(#11002, #10005) +py_cobject_sources(#11002, 0) +py_cobjectnames(#11002, "__delitem__") +py_cmembers_versioned(#10998, "__delitem__", #11002, "2") +#11003 = @"C_bytes$a16af28a6e31a275c76a7782f231d141e5b94cc0" +py_cobjects(#11003) +py_cobjecttypes(#11003, #10028) +py_cobject_sources(#11003, 0) +py_cobjectnames(#11003, "b'bytearray(iterable_of_ints) -> bytearray. +bytearray(string, encoding[, errors]) -> bytearray. +bytearray(bytes_or_bytearray) -> mutable copy of bytes_or_bytearray. +bytearray(memory_view) -> bytearray. + +Construct a mutable bytearray object from: + - an iterable yielding integers in range(256) + - a text string encoded using the specified encoding + - a bytes or a bytearray object + - any object implementing the buffer API. + +bytearray(int) -> bytearray. + +Construct a zero-initialized bytearray of the given length.'") +py_cmembers_versioned(#10998, "__doc__", #11003, "2") +#11004 = @"C_type$bytearray$2__eq__" +py_cobjects(#11004) +py_cobjecttypes(#11004, #10005) +py_cobject_sources(#11004, 0) +py_cobjectnames(#11004, "__eq__") +py_cmembers_versioned(#10998, "__eq__", #11004, "2") +#11005 = @"C_type$bytearray$2__ge__" +py_cobjects(#11005) +py_cobjecttypes(#11005, #10005) +py_cobject_sources(#11005, 0) +py_cobjectnames(#11005, "__ge__") +py_cmembers_versioned(#10998, "__ge__", #11005, "2") +#11006 = @"C_type$bytearray$2__getattribute__" +py_cobjects(#11006) +py_cobjecttypes(#11006, #10005) +py_cobject_sources(#11006, 0) +py_cobjectnames(#11006, "__getattribute__") +py_cmembers_versioned(#10998, "__getattribute__", #11006, "2") +#11007 = @"C_type$bytearray$2__getitem__" +py_cobjects(#11007) +py_cobjecttypes(#11007, #10005) +py_cobject_sources(#11007, 0) +py_cobjectnames(#11007, "__getitem__") +py_cmembers_versioned(#10998, "__getitem__", #11007, "2") +#11008 = @"C_type$bytearray$2__gt__" +py_cobjects(#11008) +py_cobjecttypes(#11008, #10005) +py_cobject_sources(#11008, 0) +py_cobjectnames(#11008, "__gt__") +py_cmembers_versioned(#10998, "__gt__", #11008, "2") +#11009 = @"C_type$bytearray$2__iadd__" +py_cobjects(#11009) +py_cobjecttypes(#11009, #10005) +py_cobject_sources(#11009, 0) +py_cobjectnames(#11009, "__iadd__") +py_cmembers_versioned(#10998, "__iadd__", #11009, "2") +#11010 = @"C_type$bytearray$2__imul__" +py_cobjects(#11010) +py_cobjecttypes(#11010, #10005) +py_cobject_sources(#11010, 0) +py_cobjectnames(#11010, "__imul__") +py_cmembers_versioned(#10998, "__imul__", #11010, "2") +#11011 = @"C_type$bytearray$2__init__" +py_cobjects(#11011) +py_cobjecttypes(#11011, #10005) +py_cobject_sources(#11011, 0) +py_cobjectnames(#11011, "__init__") +py_cmembers_versioned(#10998, "__init__", #11011, "2") +#11012 = @"C_type$bytearray$2__iter__" +py_cobjects(#11012) +py_cobjecttypes(#11012, #10005) +py_cobject_sources(#11012, 0) +py_cobjectnames(#11012, "__iter__") +py_cmembers_versioned(#10998, "__iter__", #11012, "2") +#11013 = @"C_type$bytearray$2__le__" +py_cobjects(#11013) +py_cobjecttypes(#11013, #10005) +py_cobject_sources(#11013, 0) +py_cobjectnames(#11013, "__le__") +py_cmembers_versioned(#10998, "__le__", #11013, "2") +#11014 = @"C_type$bytearray$2__len__" +py_cobjects(#11014) +py_cobjecttypes(#11014, #10005) +py_cobject_sources(#11014, 0) +py_cobjectnames(#11014, "__len__") +py_cmembers_versioned(#10998, "__len__", #11014, "2") +#11015 = @"C_type$bytearray$2__lt__" +py_cobjects(#11015) +py_cobjecttypes(#11015, #10005) +py_cobject_sources(#11015, 0) +py_cobjectnames(#11015, "__lt__") +py_cmembers_versioned(#10998, "__lt__", #11015, "2") +#11016 = @"C_type$bytearray$2__mul__" +py_cobjects(#11016) +py_cobjecttypes(#11016, #10005) +py_cobject_sources(#11016, 0) +py_cobjectnames(#11016, "__mul__") +py_cmembers_versioned(#10998, "__mul__", #11016, "2") +#11017 = @"C_type$bytearray$2__ne__" +py_cobjects(#11017) +py_cobjecttypes(#11017, #10005) +py_cobject_sources(#11017, 0) +py_cobjectnames(#11017, "__ne__") +py_cmembers_versioned(#10998, "__ne__", #11017, "2") +#11018 = @"C_type$bytearray$2__new__" +py_cobjects(#11018) +py_cobjecttypes(#11018, #10075) +py_cobject_sources(#11018, 0) +py_cobjectnames(#11018, "__new__") +py_cmembers_versioned(#10998, "__new__", #11018, "2") +#11019 = @"C_type$bytearray$2__reduce__" +py_cobjects(#11019) +py_cobjecttypes(#11019, #10034) +py_cobject_sources(#11019, 0) +py_cobjectnames(#11019, "__reduce__") +py_cmembers_versioned(#10998, "__reduce__", #11019, "2") +#11020 = @"C_type$bytearray$2__repr__" +py_cobjects(#11020) +py_cobjecttypes(#11020, #10005) +py_cobject_sources(#11020, 0) +py_cobjectnames(#11020, "__repr__") +py_cmembers_versioned(#10998, "__repr__", #11020, "2") +#11021 = @"C_type$bytearray$2__rmul__" +py_cobjects(#11021) +py_cobjecttypes(#11021, #10005) +py_cobject_sources(#11021, 0) +py_cobjectnames(#11021, "__rmul__") +py_cmembers_versioned(#10998, "__rmul__", #11021, "2") +#11022 = @"C_type$bytearray$2__setitem__" +py_cobjects(#11022) +py_cobjecttypes(#11022, #10005) +py_cobject_sources(#11022, 0) +py_cobjectnames(#11022, "__setitem__") +py_cmembers_versioned(#10998, "__setitem__", #11022, "2") +#11023 = @"C_type$bytearray$2__sizeof__" +py_cobjects(#11023) +py_cobjecttypes(#11023, #10034) +py_cobject_sources(#11023, 0) +py_cobjectnames(#11023, "__sizeof__") +py_cmembers_versioned(#10998, "__sizeof__", #11023, "2") +#11024 = @"C_type$bytearray$2__str__" +py_cobjects(#11024) +py_cobjecttypes(#11024, #10005) +py_cobject_sources(#11024, 0) +py_cobjectnames(#11024, "__str__") +py_cmembers_versioned(#10998, "__str__", #11024, "2") +#11025 = @"C_type$bytearray$2append" +py_cobjects(#11025) +py_cobjecttypes(#11025, #10034) +py_cobject_sources(#11025, 0) +py_cobjectnames(#11025, "append") +py_cmembers_versioned(#10998, "append", #11025, "2") +#11026 = @"C_type$bytearray$2capitalize" +py_cobjects(#11026) +py_cobjecttypes(#11026, #10034) +py_cobject_sources(#11026, 0) +py_cobjectnames(#11026, "capitalize") +py_cmembers_versioned(#10998, "capitalize", #11026, "2") +#11027 = @"C_type$bytearray$2center" +py_cobjects(#11027) +py_cobjecttypes(#11027, #10034) +py_cobject_sources(#11027, 0) +py_cobjectnames(#11027, "center") +py_cmembers_versioned(#10998, "center", #11027, "2") +#11028 = @"C_type$bytearray$2count" +py_cobjects(#11028) +py_cobjecttypes(#11028, #10034) +py_cobject_sources(#11028, 0) +py_cobjectnames(#11028, "count") +py_cmembers_versioned(#10998, "count", #11028, "2") +#11029 = @"C_type$bytearray$2decode" +py_cobjects(#11029) +py_cobjecttypes(#11029, #10034) +py_cobject_sources(#11029, 0) +py_cobjectnames(#11029, "decode") +py_cmembers_versioned(#10998, "decode", #11029, "2") +#11030 = @"C_type$bytearray$2endswith" +py_cobjects(#11030) +py_cobjecttypes(#11030, #10034) +py_cobject_sources(#11030, 0) +py_cobjectnames(#11030, "endswith") +py_cmembers_versioned(#10998, "endswith", #11030, "2") +#11031 = @"C_type$bytearray$2expandtabs" +py_cobjects(#11031) +py_cobjecttypes(#11031, #10034) +py_cobject_sources(#11031, 0) +py_cobjectnames(#11031, "expandtabs") +py_cmembers_versioned(#10998, "expandtabs", #11031, "2") +#11032 = @"C_type$bytearray$2extend" +py_cobjects(#11032) +py_cobjecttypes(#11032, #10034) +py_cobject_sources(#11032, 0) +py_cobjectnames(#11032, "extend") +py_cmembers_versioned(#10998, "extend", #11032, "2") +#11033 = @"C_type$bytearray$2find" +py_cobjects(#11033) +py_cobjecttypes(#11033, #10034) +py_cobject_sources(#11033, 0) +py_cobjectnames(#11033, "find") +py_cmembers_versioned(#10998, "find", #11033, "2") +#11034 = @"C_type$bytearray$2fromhex" +py_cobjects(#11034) +py_cobjecttypes(#11034, #10169) +py_cobject_sources(#11034, 0) +py_cobjectnames(#11034, "fromhex") +py_cmembers_versioned(#10998, "fromhex", #11034, "2") +#11035 = @"C_type$bytearray$2index" +py_cobjects(#11035) +py_cobjecttypes(#11035, #10034) +py_cobject_sources(#11035, 0) +py_cobjectnames(#11035, "index") +py_cmembers_versioned(#10998, "index", #11035, "2") +#11036 = @"C_type$bytearray$2insert" +py_cobjects(#11036) +py_cobjecttypes(#11036, #10034) +py_cobject_sources(#11036, 0) +py_cobjectnames(#11036, "insert") +py_cmembers_versioned(#10998, "insert", #11036, "2") +#11037 = @"C_type$bytearray$2isalnum" +py_cobjects(#11037) +py_cobjecttypes(#11037, #10034) +py_cobject_sources(#11037, 0) +py_cobjectnames(#11037, "isalnum") +py_cmembers_versioned(#10998, "isalnum", #11037, "2") +#11038 = @"C_type$bytearray$2isalpha" +py_cobjects(#11038) +py_cobjecttypes(#11038, #10034) +py_cobject_sources(#11038, 0) +py_cobjectnames(#11038, "isalpha") +py_cmembers_versioned(#10998, "isalpha", #11038, "2") +#11039 = @"C_type$bytearray$2isdigit" +py_cobjects(#11039) +py_cobjecttypes(#11039, #10034) +py_cobject_sources(#11039, 0) +py_cobjectnames(#11039, "isdigit") +py_cmembers_versioned(#10998, "isdigit", #11039, "2") +#11040 = @"C_type$bytearray$2islower" +py_cobjects(#11040) +py_cobjecttypes(#11040, #10034) +py_cobject_sources(#11040, 0) +py_cobjectnames(#11040, "islower") +py_cmembers_versioned(#10998, "islower", #11040, "2") +#11041 = @"C_type$bytearray$2isspace" +py_cobjects(#11041) +py_cobjecttypes(#11041, #10034) +py_cobject_sources(#11041, 0) +py_cobjectnames(#11041, "isspace") +py_cmembers_versioned(#10998, "isspace", #11041, "2") +#11042 = @"C_type$bytearray$2istitle" +py_cobjects(#11042) +py_cobjecttypes(#11042, #10034) +py_cobject_sources(#11042, 0) +py_cobjectnames(#11042, "istitle") +py_cmembers_versioned(#10998, "istitle", #11042, "2") +#11043 = @"C_type$bytearray$2isupper" +py_cobjects(#11043) +py_cobjecttypes(#11043, #10034) +py_cobject_sources(#11043, 0) +py_cobjectnames(#11043, "isupper") +py_cmembers_versioned(#10998, "isupper", #11043, "2") +#11044 = @"C_type$bytearray$2join" +py_cobjects(#11044) +py_cobjecttypes(#11044, #10034) +py_cobject_sources(#11044, 0) +py_cobjectnames(#11044, "join") +py_cmembers_versioned(#10998, "join", #11044, "2") +#11045 = @"C_type$bytearray$2ljust" +py_cobjects(#11045) +py_cobjecttypes(#11045, #10034) +py_cobject_sources(#11045, 0) +py_cobjectnames(#11045, "ljust") +py_cmembers_versioned(#10998, "ljust", #11045, "2") +#11046 = @"C_type$bytearray$2lower" +py_cobjects(#11046) +py_cobjecttypes(#11046, #10034) +py_cobject_sources(#11046, 0) +py_cobjectnames(#11046, "lower") +py_cmembers_versioned(#10998, "lower", #11046, "2") +#11047 = @"C_type$bytearray$2lstrip" +py_cobjects(#11047) +py_cobjecttypes(#11047, #10034) +py_cobject_sources(#11047, 0) +py_cobjectnames(#11047, "lstrip") +py_cmembers_versioned(#10998, "lstrip", #11047, "2") +#11048 = @"C_type$bytearray$2partition" +py_cobjects(#11048) +py_cobjecttypes(#11048, #10034) +py_cobject_sources(#11048, 0) +py_cobjectnames(#11048, "partition") +py_cmembers_versioned(#10998, "partition", #11048, "2") +#11049 = @"C_type$bytearray$2pop" +py_cobjects(#11049) +py_cobjecttypes(#11049, #10034) +py_cobject_sources(#11049, 0) +py_cobjectnames(#11049, "pop") +py_cmembers_versioned(#10998, "pop", #11049, "2") +#11050 = @"C_type$bytearray$2remove" +py_cobjects(#11050) +py_cobjecttypes(#11050, #10034) +py_cobject_sources(#11050, 0) +py_cobjectnames(#11050, "remove") +py_cmembers_versioned(#10998, "remove", #11050, "2") +#11051 = @"C_type$bytearray$2replace" +py_cobjects(#11051) +py_cobjecttypes(#11051, #10034) +py_cobject_sources(#11051, 0) +py_cobjectnames(#11051, "replace") +py_cmembers_versioned(#10998, "replace", #11051, "2") +#11052 = @"C_type$bytearray$2reverse" +py_cobjects(#11052) +py_cobjecttypes(#11052, #10034) +py_cobject_sources(#11052, 0) +py_cobjectnames(#11052, "reverse") +py_cmembers_versioned(#10998, "reverse", #11052, "2") +#11053 = @"C_type$bytearray$2rfind" +py_cobjects(#11053) +py_cobjecttypes(#11053, #10034) +py_cobject_sources(#11053, 0) +py_cobjectnames(#11053, "rfind") +py_cmembers_versioned(#10998, "rfind", #11053, "2") +#11054 = @"C_type$bytearray$2rindex" +py_cobjects(#11054) +py_cobjecttypes(#11054, #10034) +py_cobject_sources(#11054, 0) +py_cobjectnames(#11054, "rindex") +py_cmembers_versioned(#10998, "rindex", #11054, "2") +#11055 = @"C_type$bytearray$2rjust" +py_cobjects(#11055) +py_cobjecttypes(#11055, #10034) +py_cobject_sources(#11055, 0) +py_cobjectnames(#11055, "rjust") +py_cmembers_versioned(#10998, "rjust", #11055, "2") +#11056 = @"C_type$bytearray$2rpartition" +py_cobjects(#11056) +py_cobjecttypes(#11056, #10034) +py_cobject_sources(#11056, 0) +py_cobjectnames(#11056, "rpartition") +py_cmembers_versioned(#10998, "rpartition", #11056, "2") +#11057 = @"C_type$bytearray$2rsplit" +py_cobjects(#11057) +py_cobjecttypes(#11057, #10034) +py_cobject_sources(#11057, 0) +py_cobjectnames(#11057, "rsplit") +py_cmembers_versioned(#10998, "rsplit", #11057, "2") +#11058 = @"C_type$bytearray$2rstrip" +py_cobjects(#11058) +py_cobjecttypes(#11058, #10034) +py_cobject_sources(#11058, 0) +py_cobjectnames(#11058, "rstrip") +py_cmembers_versioned(#10998, "rstrip", #11058, "2") +#11059 = @"C_type$bytearray$2split" +py_cobjects(#11059) +py_cobjecttypes(#11059, #10034) +py_cobject_sources(#11059, 0) +py_cobjectnames(#11059, "split") +py_cmembers_versioned(#10998, "split", #11059, "2") +#11060 = @"C_type$bytearray$2splitlines" +py_cobjects(#11060) +py_cobjecttypes(#11060, #10034) +py_cobject_sources(#11060, 0) +py_cobjectnames(#11060, "splitlines") +py_cmembers_versioned(#10998, "splitlines", #11060, "2") +#11061 = @"C_type$bytearray$2startswith" +py_cobjects(#11061) +py_cobjecttypes(#11061, #10034) +py_cobject_sources(#11061, 0) +py_cobjectnames(#11061, "startswith") +py_cmembers_versioned(#10998, "startswith", #11061, "2") +#11062 = @"C_type$bytearray$2strip" +py_cobjects(#11062) +py_cobjecttypes(#11062, #10034) +py_cobject_sources(#11062, 0) +py_cobjectnames(#11062, "strip") +py_cmembers_versioned(#10998, "strip", #11062, "2") +#11063 = @"C_type$bytearray$2swapcase" +py_cobjects(#11063) +py_cobjecttypes(#11063, #10034) +py_cobject_sources(#11063, 0) +py_cobjectnames(#11063, "swapcase") +py_cmembers_versioned(#10998, "swapcase", #11063, "2") +#11064 = @"C_type$bytearray$2title" +py_cobjects(#11064) +py_cobjecttypes(#11064, #10034) +py_cobject_sources(#11064, 0) +py_cobjectnames(#11064, "title") +py_cmembers_versioned(#10998, "title", #11064, "2") +#11065 = @"C_type$bytearray$2translate" +py_cobjects(#11065) +py_cobjecttypes(#11065, #10034) +py_cobject_sources(#11065, 0) +py_cobjectnames(#11065, "translate") +py_cmembers_versioned(#10998, "translate", #11065, "2") +#11066 = @"C_type$bytearray$2upper" +py_cobjects(#11066) +py_cobjecttypes(#11066, #10034) +py_cobject_sources(#11066, 0) +py_cobjectnames(#11066, "upper") +py_cmembers_versioned(#10998, "upper", #11066, "2") +#11067 = @"C_type$bytearray$2zfill" +py_cobjects(#11067) +py_cobjecttypes(#11067, #10034) +py_cobject_sources(#11067, 0) +py_cobjectnames(#11067, "zfill") +py_cmembers_versioned(#10998, "zfill", #11067, "2") +py_cmembers_versioned(#10998, ".super.", #10021, "2") +py_cobjectnames(#10998, "bytearray") +py_cmembers_versioned(#10760, "bytearray", #10998, "2") +py_cmembers_versioned(#10760, "bytes", #10028, "2") +#11068 = @"C_builtin_function_or_method$builtins.callable" +py_cobjects(#11068) +py_cobjecttypes(#11068, #10075) +py_cobject_sources(#11068, 0) +py_cobjectnames(#11068, "callable") +py_cmembers_versioned(#10760, "callable", #11068, "2") +#11069 = @"C_builtin_function_or_method$builtins.chr" +py_cobjects(#11069) +py_cobjecttypes(#11069, #10075) +py_cobject_sources(#11069, 0) +py_cobjectnames(#11069, "chr") +py_cmembers_versioned(#10760, "chr", #11069, "2") +#11070 = @"C_type$classmethod" +py_cobjects(#11070) +py_cobjecttypes(#11070, #10001) +py_cobject_sources(#11070, 0) +#11071 = @"C_bytes$130f63dbc708a2d4f999a418ea2ea63a247b3168" +py_cobjects(#11071) +py_cobjecttypes(#11071, #10028) +py_cobject_sources(#11071, 0) +py_cobjectnames(#11071, "b'classmethod(function) -> method + +Convert a function to be a class method. + +A class method receives the class as implicit first argument, +just like an instance method receives the instance. +To declare a class method, use this idiom: + + class C: + @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. +If a class method is called for a derived class, the derived class +object is passed as the implied first argument. + +Class methods are different than C++ or Java static methods. +If you want those, see the staticmethod builtin.'") +py_cmembers_versioned(#11070, "__doc__", #11071, "2") +#11072 = @"C_type$classmethod$2__func__" +py_cobjects(#11072) +py_cobjecttypes(#11072, #10045) +py_cobject_sources(#11072, 0) +py_cobjectnames(#11072, "__func__") +py_cmembers_versioned(#11070, "__func__", #11072, "2") +#11073 = @"C_type$classmethod$2__get__" +py_cobjects(#11073) +py_cobjecttypes(#11073, #10005) +py_cobject_sources(#11073, 0) +py_cobjectnames(#11073, "__get__") +py_cmembers_versioned(#11070, "__get__", #11073, "2") +#11074 = @"C_type$classmethod$2__getattribute__" +py_cobjects(#11074) +py_cobjecttypes(#11074, #10005) +py_cobject_sources(#11074, 0) +py_cobjectnames(#11074, "__getattribute__") +py_cmembers_versioned(#11070, "__getattribute__", #11074, "2") +#11075 = @"C_type$classmethod$2__init__" +py_cobjects(#11075) +py_cobjecttypes(#11075, #10005) +py_cobject_sources(#11075, 0) +py_cobjectnames(#11075, "__init__") +py_cmembers_versioned(#11070, "__init__", #11075, "2") +#11076 = @"C_type$classmethod$2__new__" +py_cobjects(#11076) +py_cobjecttypes(#11076, #10075) +py_cobject_sources(#11076, 0) +py_cobjectnames(#11076, "__new__") +py_cmembers_versioned(#11070, "__new__", #11076, "2") +py_cmembers_versioned(#11070, ".super.", #10021, "2") +py_cobjectnames(#11070, "classmethod") +py_cmembers_versioned(#10760, "classmethod", #11070, "2") +#11077 = @"C_builtin_function_or_method$builtins.cmp" +py_cobjects(#11077) +py_cobjecttypes(#11077, #10075) +py_cobject_sources(#11077, 0) +py_cobjectnames(#11077, "cmp") +py_cmembers_versioned(#10760, "cmp", #11077, "2") +#11078 = @"C_builtin_function_or_method$builtins.coerce" +py_cobjects(#11078) +py_cobjecttypes(#11078, #10075) +py_cobject_sources(#11078, 0) +py_cobjectnames(#11078, "coerce") +py_cmembers_versioned(#10760, "coerce", #11078, "2") +#11079 = @"C_builtin_function_or_method$builtins.compile" +py_cobjects(#11079) +py_cobjecttypes(#11079, #10075) +py_cobject_sources(#11079, 0) +py_cobjectnames(#11079, "compile") +py_cmembers_versioned(#10760, "compile", #11079, "2") +#11080 = @"C_type$complex" +py_cobjects(#11080) +py_cobjecttypes(#11080, #10001) +py_cobject_sources(#11080, 0) +#11081 = @"C_type$complex$2__abs__" +py_cobjects(#11081) +py_cobjecttypes(#11081, #10005) +py_cobject_sources(#11081, 0) +py_cobjectnames(#11081, "__abs__") +py_cmembers_versioned(#11080, "__abs__", #11081, "2") +#11082 = @"C_type$complex$2__add__" +py_cobjects(#11082) +py_cobjecttypes(#11082, #10005) +py_cobject_sources(#11082, 0) +py_cobjectnames(#11082, "__add__") +py_cmembers_versioned(#11080, "__add__", #11082, "2") +#11083 = @"C_type$complex$2__coerce__" +py_cobjects(#11083) +py_cobjecttypes(#11083, #10005) +py_cobject_sources(#11083, 0) +py_cobjectnames(#11083, "__coerce__") +py_cmembers_versioned(#11080, "__coerce__", #11083, "2") +#11084 = @"C_type$complex$2__div__" +py_cobjects(#11084) +py_cobjecttypes(#11084, #10005) +py_cobject_sources(#11084, 0) +py_cobjectnames(#11084, "__div__") +py_cmembers_versioned(#11080, "__div__", #11084, "2") +#11085 = @"C_type$complex$2__divmod__" +py_cobjects(#11085) +py_cobjecttypes(#11085, #10005) +py_cobject_sources(#11085, 0) +py_cobjectnames(#11085, "__divmod__") +py_cmembers_versioned(#11080, "__divmod__", #11085, "2") +#11086 = @"C_bytes$cc8fe749bc4fe2677c3c5d821e7a3a812ccd31fa" +py_cobjects(#11086) +py_cobjecttypes(#11086, #10028) +py_cobject_sources(#11086, 0) +py_cobjectnames(#11086, "b'complex(real[, imag]) -> complex number + +Create a complex number from a real part and an optional imaginary part. +This is equivalent to (real + imag*1j) where imag defaults to 0.'") +py_cmembers_versioned(#11080, "__doc__", #11086, "2") +#11087 = @"C_type$complex$2__eq__" +py_cobjects(#11087) +py_cobjecttypes(#11087, #10005) +py_cobject_sources(#11087, 0) +py_cobjectnames(#11087, "__eq__") +py_cmembers_versioned(#11080, "__eq__", #11087, "2") +#11088 = @"C_type$complex$2__float__" +py_cobjects(#11088) +py_cobjecttypes(#11088, #10005) +py_cobject_sources(#11088, 0) +py_cobjectnames(#11088, "__float__") +py_cmembers_versioned(#11080, "__float__", #11088, "2") +#11089 = @"C_type$complex$2__floordiv__" +py_cobjects(#11089) +py_cobjecttypes(#11089, #10005) +py_cobject_sources(#11089, 0) +py_cobjectnames(#11089, "__floordiv__") +py_cmembers_versioned(#11080, "__floordiv__", #11089, "2") +#11090 = @"C_type$complex$2__format__" +py_cobjects(#11090) +py_cobjecttypes(#11090, #10034) +py_cobject_sources(#11090, 0) +py_cobjectnames(#11090, "__format__") +py_cmembers_versioned(#11080, "__format__", #11090, "2") +#11091 = @"C_type$complex$2__ge__" +py_cobjects(#11091) +py_cobjecttypes(#11091, #10005) +py_cobject_sources(#11091, 0) +py_cobjectnames(#11091, "__ge__") +py_cmembers_versioned(#11080, "__ge__", #11091, "2") +#11092 = @"C_type$complex$2__getattribute__" +py_cobjects(#11092) +py_cobjecttypes(#11092, #10005) +py_cobject_sources(#11092, 0) +py_cobjectnames(#11092, "__getattribute__") +py_cmembers_versioned(#11080, "__getattribute__", #11092, "2") +#11093 = @"C_type$complex$2__getnewargs__" +py_cobjects(#11093) +py_cobjecttypes(#11093, #10034) +py_cobject_sources(#11093, 0) +py_cobjectnames(#11093, "__getnewargs__") +py_cmembers_versioned(#11080, "__getnewargs__", #11093, "2") +#11094 = @"C_type$complex$2__gt__" +py_cobjects(#11094) +py_cobjecttypes(#11094, #10005) +py_cobject_sources(#11094, 0) +py_cobjectnames(#11094, "__gt__") +py_cmembers_versioned(#11080, "__gt__", #11094, "2") +#11095 = @"C_type$complex$2__hash__" +py_cobjects(#11095) +py_cobjecttypes(#11095, #10005) +py_cobject_sources(#11095, 0) +py_cobjectnames(#11095, "__hash__") +py_cmembers_versioned(#11080, "__hash__", #11095, "2") +#11096 = @"C_type$complex$2__int__" +py_cobjects(#11096) +py_cobjecttypes(#11096, #10005) +py_cobject_sources(#11096, 0) +py_cobjectnames(#11096, "__int__") +py_cmembers_versioned(#11080, "__int__", #11096, "2") +#11097 = @"C_type$complex$2__le__" +py_cobjects(#11097) +py_cobjecttypes(#11097, #10005) +py_cobject_sources(#11097, 0) +py_cobjectnames(#11097, "__le__") +py_cmembers_versioned(#11080, "__le__", #11097, "2") +#11098 = @"C_type$complex$2__long__" +py_cobjects(#11098) +py_cobjecttypes(#11098, #10005) +py_cobject_sources(#11098, 0) +py_cobjectnames(#11098, "__long__") +py_cmembers_versioned(#11080, "__long__", #11098, "2") +#11099 = @"C_type$complex$2__lt__" +py_cobjects(#11099) +py_cobjecttypes(#11099, #10005) +py_cobject_sources(#11099, 0) +py_cobjectnames(#11099, "__lt__") +py_cmembers_versioned(#11080, "__lt__", #11099, "2") +#11100 = @"C_type$complex$2__mod__" +py_cobjects(#11100) +py_cobjecttypes(#11100, #10005) +py_cobject_sources(#11100, 0) +py_cobjectnames(#11100, "__mod__") +py_cmembers_versioned(#11080, "__mod__", #11100, "2") +#11101 = @"C_type$complex$2__mul__" +py_cobjects(#11101) +py_cobjecttypes(#11101, #10005) +py_cobject_sources(#11101, 0) +py_cobjectnames(#11101, "__mul__") +py_cmembers_versioned(#11080, "__mul__", #11101, "2") +#11102 = @"C_type$complex$2__ne__" +py_cobjects(#11102) +py_cobjecttypes(#11102, #10005) +py_cobject_sources(#11102, 0) +py_cobjectnames(#11102, "__ne__") +py_cmembers_versioned(#11080, "__ne__", #11102, "2") +#11103 = @"C_type$complex$2__neg__" +py_cobjects(#11103) +py_cobjecttypes(#11103, #10005) +py_cobject_sources(#11103, 0) +py_cobjectnames(#11103, "__neg__") +py_cmembers_versioned(#11080, "__neg__", #11103, "2") +#11104 = @"C_type$complex$2__new__" +py_cobjects(#11104) +py_cobjecttypes(#11104, #10075) +py_cobject_sources(#11104, 0) +py_cobjectnames(#11104, "__new__") +py_cmembers_versioned(#11080, "__new__", #11104, "2") +#11105 = @"C_type$complex$2__nonzero__" +py_cobjects(#11105) +py_cobjecttypes(#11105, #10005) +py_cobject_sources(#11105, 0) +py_cobjectnames(#11105, "__nonzero__") +py_cmembers_versioned(#11080, "__nonzero__", #11105, "2") +#11106 = @"C_type$complex$2__pos__" +py_cobjects(#11106) +py_cobjecttypes(#11106, #10005) +py_cobject_sources(#11106, 0) +py_cobjectnames(#11106, "__pos__") +py_cmembers_versioned(#11080, "__pos__", #11106, "2") +#11107 = @"C_type$complex$2__pow__" +py_cobjects(#11107) +py_cobjecttypes(#11107, #10005) +py_cobject_sources(#11107, 0) +py_cobjectnames(#11107, "__pow__") +py_cmembers_versioned(#11080, "__pow__", #11107, "2") +#11108 = @"C_type$complex$2__radd__" +py_cobjects(#11108) +py_cobjecttypes(#11108, #10005) +py_cobject_sources(#11108, 0) +py_cobjectnames(#11108, "__radd__") +py_cmembers_versioned(#11080, "__radd__", #11108, "2") +#11109 = @"C_type$complex$2__rdiv__" +py_cobjects(#11109) +py_cobjecttypes(#11109, #10005) +py_cobject_sources(#11109, 0) +py_cobjectnames(#11109, "__rdiv__") +py_cmembers_versioned(#11080, "__rdiv__", #11109, "2") +#11110 = @"C_type$complex$2__rdivmod__" +py_cobjects(#11110) +py_cobjecttypes(#11110, #10005) +py_cobject_sources(#11110, 0) +py_cobjectnames(#11110, "__rdivmod__") +py_cmembers_versioned(#11080, "__rdivmod__", #11110, "2") +#11111 = @"C_type$complex$2__repr__" +py_cobjects(#11111) +py_cobjecttypes(#11111, #10005) +py_cobject_sources(#11111, 0) +py_cobjectnames(#11111, "__repr__") +py_cmembers_versioned(#11080, "__repr__", #11111, "2") +#11112 = @"C_type$complex$2__rfloordiv__" +py_cobjects(#11112) +py_cobjecttypes(#11112, #10005) +py_cobject_sources(#11112, 0) +py_cobjectnames(#11112, "__rfloordiv__") +py_cmembers_versioned(#11080, "__rfloordiv__", #11112, "2") +#11113 = @"C_type$complex$2__rmod__" +py_cobjects(#11113) +py_cobjecttypes(#11113, #10005) +py_cobject_sources(#11113, 0) +py_cobjectnames(#11113, "__rmod__") +py_cmembers_versioned(#11080, "__rmod__", #11113, "2") +#11114 = @"C_type$complex$2__rmul__" +py_cobjects(#11114) +py_cobjecttypes(#11114, #10005) +py_cobject_sources(#11114, 0) +py_cobjectnames(#11114, "__rmul__") +py_cmembers_versioned(#11080, "__rmul__", #11114, "2") +#11115 = @"C_type$complex$2__rpow__" +py_cobjects(#11115) +py_cobjecttypes(#11115, #10005) +py_cobject_sources(#11115, 0) +py_cobjectnames(#11115, "__rpow__") +py_cmembers_versioned(#11080, "__rpow__", #11115, "2") +#11116 = @"C_type$complex$2__rsub__" +py_cobjects(#11116) +py_cobjecttypes(#11116, #10005) +py_cobject_sources(#11116, 0) +py_cobjectnames(#11116, "__rsub__") +py_cmembers_versioned(#11080, "__rsub__", #11116, "2") +#11117 = @"C_type$complex$2__rtruediv__" +py_cobjects(#11117) +py_cobjecttypes(#11117, #10005) +py_cobject_sources(#11117, 0) +py_cobjectnames(#11117, "__rtruediv__") +py_cmembers_versioned(#11080, "__rtruediv__", #11117, "2") +#11118 = @"C_type$complex$2__str__" +py_cobjects(#11118) +py_cobjecttypes(#11118, #10005) +py_cobject_sources(#11118, 0) +py_cobjectnames(#11118, "__str__") +py_cmembers_versioned(#11080, "__str__", #11118, "2") +#11119 = @"C_type$complex$2__sub__" +py_cobjects(#11119) +py_cobjecttypes(#11119, #10005) +py_cobject_sources(#11119, 0) +py_cobjectnames(#11119, "__sub__") +py_cmembers_versioned(#11080, "__sub__", #11119, "2") +#11120 = @"C_type$complex$2__truediv__" +py_cobjects(#11120) +py_cobjecttypes(#11120, #10005) +py_cobject_sources(#11120, 0) +py_cobjectnames(#11120, "__truediv__") +py_cmembers_versioned(#11080, "__truediv__", #11120, "2") +#11121 = @"C_type$complex$2conjugate" +py_cobjects(#11121) +py_cobjecttypes(#11121, #10034) +py_cobject_sources(#11121, 0) +py_cobjectnames(#11121, "conjugate") +py_cmembers_versioned(#11080, "conjugate", #11121, "2") +#11122 = @"C_type$complex$2imag" +py_cobjects(#11122) +py_cobjecttypes(#11122, #10045) +py_cobject_sources(#11122, 0) +py_cobjectnames(#11122, "imag") +py_cmembers_versioned(#11080, "imag", #11122, "2") +#11123 = @"C_type$complex$2real" +py_cobjects(#11123) +py_cobjecttypes(#11123, #10045) +py_cobject_sources(#11123, 0) +py_cobjectnames(#11123, "real") +py_cmembers_versioned(#11080, "real", #11123, "2") +py_cmembers_versioned(#11080, ".super.", #10021, "2") +py_cobjectnames(#11080, "complex") +py_cmembers_versioned(#10760, "complex", #11080, "2") +#11124 = @"C_module$__builtin__$2copyright" +#11125 = @"C_type$site._Printer" +py_cobjects(#11125) +py_cobjecttypes(#11125, #10001) +py_cobject_sources(#11125, 0) +#11126 = @"C_int$23" +py_cobjects(#11126) +py_cobjecttypes(#11126, #10449) +py_cobject_sources(#11126, 0) +py_cobjectnames(#11126, "23") +py_cmembers_versioned(#11125, "MAXLINES", #11126, "2") +#11127 = @"C_type$site._Printer$2_Printer__setup" +py_cobjects(#11127) +py_cobjecttypes(#11127, #10000) +py_cobject_sources(#11127, 0) +py_cobjectnames(#11127, "__setup") +py_cmembers_versioned(#11125, "_Printer__setup", #11127, "2") +#11128 = @"C_type$site._Printer$2__call__" +py_cobjects(#11128) +py_cobjecttypes(#11128, #10000) +py_cobject_sources(#11128, 0) +py_cobjectnames(#11128, "__call__") +py_cmembers_versioned(#11125, "__call__", #11128, "2") +#11129 = @"C_type$site._Printer$2__dict__" +py_cobjects(#11129) +py_cobjecttypes(#11129, #10003) +py_cobject_sources(#11129, 0) +#11130 = @"C_type$site._Printer$2__dict__$2__set__" +py_cobjects(#11130) +py_cobjecttypes(#11130, #10009) +py_cobject_sources(#11130, 0) +py_cobjectnames(#11130, "__set__") +py_cmembers_versioned(#11129, "__set__", #11130, "2") +#11131 = @"C_type$site._Printer$2__dict__$2__getattribute__" +py_cobjects(#11131) +py_cobjecttypes(#11131, #10009) +py_cobject_sources(#11131, 0) +py_cobjectnames(#11131, "__getattribute__") +py_cmembers_versioned(#11129, "__getattribute__", #11131, "2") +py_cmembers_versioned(#11129, "__objclass__", #11125, "2") +#11132 = @"C_type$site._Printer$2__dict__$2__repr__" +py_cobjects(#11132) +py_cobjecttypes(#11132, #10009) +py_cobject_sources(#11132, 0) +py_cobjectnames(#11132, "__repr__") +py_cmembers_versioned(#11129, "__repr__", #11132, "2") +#11133 = @"C_type$site._Printer$2__dict__$2__get__" +py_cobjects(#11133) +py_cobjecttypes(#11133, #10009) +py_cobject_sources(#11133, 0) +py_cobjectnames(#11133, "__get__") +py_cmembers_versioned(#11129, "__get__", #11133, "2") +#11134 = @"C_bytes$1caffae7c2cd65c04c7d894ccd85fd466c39c173" +py_cobjects(#11134) +py_cobjecttypes(#11134, #10028) +py_cobject_sources(#11134, 0) +py_cobjectnames(#11134, "b'dictionary for instance variables (if defined)'") +py_cmembers_versioned(#11129, "__doc__", #11134, "2") +#11135 = @"C_type$site._Printer$2__dict__$2__delete__" +py_cobjects(#11135) +py_cobjecttypes(#11135, #10009) +py_cobject_sources(#11135, 0) +py_cobjectnames(#11135, "__delete__") +py_cmembers_versioned(#11129, "__delete__", #11135, "2") +py_cobjectnames(#11129, "__dict__") +py_cmembers_versioned(#11125, "__dict__", #11129, "2") +#11136 = @"C_bytes$8fb02d5dbf98d031459d7bd7dcfcd6f7d0a6501e" +py_cobjects(#11136) +py_cobjecttypes(#11136, #10028) +py_cobject_sources(#11136, 0) +py_cobjectnames(#11136, "b'interactive prompt objects for printing the license text, a list of + contributors and the copyright notice.'") +py_cmembers_versioned(#11125, "__doc__", #11136, "2") +#11137 = @"C_type$site._Printer$2__init__" +py_cobjects(#11137) +py_cobjecttypes(#11137, #10000) +py_cobject_sources(#11137, 0) +py_cobjectnames(#11137, "__init__") +py_cmembers_versioned(#11125, "__init__", #11137, "2") +#11138 = @"C_bytes$c099a42a5555825cdb50df0c04932bcd29613457" +py_cobjects(#11138) +py_cobjecttypes(#11138, #10028) +py_cobject_sources(#11138, 0) +py_cobjectnames(#11138, "b'site'") +py_cmembers_versioned(#11125, "__module__", #11138, "2") +#11139 = @"C_type$site._Printer$2__repr__" +py_cobjects(#11139) +py_cobjecttypes(#11139, #10000) +py_cobject_sources(#11139, 0) +py_cobjectnames(#11139, "__repr__") +py_cmembers_versioned(#11125, "__repr__", #11139, "2") +#11140 = @"C_type$site._Printer$2__weakref__" +py_cobjects(#11140) +py_cobjecttypes(#11140, #10003) +py_cobject_sources(#11140, 0) +#11141 = @"C_type$site._Printer$2__weakref__$2__set__" +py_cobjects(#11141) +py_cobjecttypes(#11141, #10009) +py_cobject_sources(#11141, 0) +py_cobjectnames(#11141, "__set__") +py_cmembers_versioned(#11140, "__set__", #11141, "2") +#11142 = @"C_type$site._Printer$2__weakref__$2__getattribute__" +py_cobjects(#11142) +py_cobjecttypes(#11142, #10009) +py_cobject_sources(#11142, 0) +py_cobjectnames(#11142, "__getattribute__") +py_cmembers_versioned(#11140, "__getattribute__", #11142, "2") +py_cmembers_versioned(#11140, "__objclass__", #11125, "2") +#11143 = @"C_type$site._Printer$2__weakref__$2__repr__" +py_cobjects(#11143) +py_cobjecttypes(#11143, #10009) +py_cobject_sources(#11143, 0) +py_cobjectnames(#11143, "__repr__") +py_cmembers_versioned(#11140, "__repr__", #11143, "2") +#11144 = @"C_type$site._Printer$2__weakref__$2__get__" +py_cobjects(#11144) +py_cobjecttypes(#11144, #10009) +py_cobject_sources(#11144, 0) +py_cobjectnames(#11144, "__get__") +py_cmembers_versioned(#11140, "__get__", #11144, "2") +#11145 = @"C_bytes$288bf61a8280860bb3d2b542aa2ec112948d35b5" +py_cobjects(#11145) +py_cobjecttypes(#11145, #10028) +py_cobject_sources(#11145, 0) +py_cobjectnames(#11145, "b'list of weak references to the object (if defined)'") +py_cmembers_versioned(#11140, "__doc__", #11145, "2") +#11146 = @"C_type$site._Printer$2__weakref__$2__delete__" +py_cobjects(#11146) +py_cobjecttypes(#11146, #10009) +py_cobject_sources(#11146, 0) +py_cobjectnames(#11146, "__delete__") +py_cmembers_versioned(#11140, "__delete__", #11146, "2") +py_cobjectnames(#11140, "__weakref__") +py_cmembers_versioned(#11125, "__weakref__", #11140, "2") +py_cmembers_versioned(#11125, ".super.", #10021, "2") +py_cobjectnames(#11125, "site._Printer") +py_cobjects(#11124) +py_cobjecttypes(#11124, #11125) +py_cobject_sources(#11124, 0) +py_cobjectnames(#11124, "object") +py_cmembers_versioned(#10760, "copyright", #11124, "2") +#11147 = @"C_module$__builtin__$2credits" +py_cobjects(#11147) +py_cobjecttypes(#11147, #11125) +py_cobject_sources(#11147, 0) +py_cobjectnames(#11147, "object") +py_cmembers_versioned(#10760, "credits", #11147, "2") +#11148 = @"C_builtin_function_or_method$builtins.delattr" +py_cobjects(#11148) +py_cobjecttypes(#11148, #10075) +py_cobject_sources(#11148, 0) +py_cobjectnames(#11148, "delattr") +py_cmembers_versioned(#10760, "delattr", #11148, "2") +py_cmembers_versioned(#10760, "dict", #10386, "2") +#11149 = @"C_builtin_function_or_method$builtins.dir" +py_cobjects(#11149) +py_cobjecttypes(#11149, #10075) +py_cobject_sources(#11149, 0) +py_cobjectnames(#11149, "dir") +py_cmembers_versioned(#10760, "dir", #11149, "2") +#11150 = @"C_builtin_function_or_method$builtins.divmod" +py_cobjects(#11150) +py_cobjecttypes(#11150, #10075) +py_cobject_sources(#11150, 0) +py_cobjectnames(#11150, "divmod") +py_cmembers_versioned(#10760, "divmod", #11150, "2") +#11151 = @"C_type$enumerate" +py_cobjects(#11151) +py_cobjecttypes(#11151, #10001) +py_cobject_sources(#11151, 0) +#11152 = @"C_bytes$bc46bf57a82047977c76afa6b32299957b9ed9b9" +py_cobjects(#11152) +py_cobjecttypes(#11152, #10028) +py_cobject_sources(#11152, 0) +py_cobjectnames(#11152, "b'enumerate(iterable[, start]) -> iterator for index, value of iterable + +Return an enumerate object. iterable must be another object that supports +iteration. The enumerate object yields pairs containing a count (from +start, which defaults to zero) and a value yielded by the iterable argument. +enumerate is useful for obtaining an indexed list: + (0, seq[0]), (1, seq[1]), (2, seq[2]), ...'") +py_cmembers_versioned(#11151, "__doc__", #11152, "2") +#11153 = @"C_type$enumerate$2__getattribute__" +py_cobjects(#11153) +py_cobjecttypes(#11153, #10005) +py_cobject_sources(#11153, 0) +py_cobjectnames(#11153, "__getattribute__") +py_cmembers_versioned(#11151, "__getattribute__", #11153, "2") +#11154 = @"C_type$enumerate$2__iter__" +py_cobjects(#11154) +py_cobjecttypes(#11154, #10005) +py_cobject_sources(#11154, 0) +py_cobjectnames(#11154, "__iter__") +py_cmembers_versioned(#11151, "__iter__", #11154, "2") +#11155 = @"C_type$enumerate$2__new__" +py_cobjects(#11155) +py_cobjecttypes(#11155, #10075) +py_cobject_sources(#11155, 0) +py_cobjectnames(#11155, "__new__") +py_cmembers_versioned(#11151, "__new__", #11155, "2") +#11156 = @"C_type$enumerate$2next" +py_cobjects(#11156) +py_cobjecttypes(#11156, #10005) +py_cobject_sources(#11156, 0) +py_cobjectnames(#11156, "next") +py_cmembers_versioned(#11151, "next", #11156, "2") +py_cmembers_versioned(#11151, ".super.", #10021, "2") +py_cobjectnames(#11151, "enumerate") +py_cmembers_versioned(#10760, "enumerate", #11151, "2") +#11157 = @"C_builtin_function_or_method$builtins.eval" +py_cobjects(#11157) +py_cobjecttypes(#11157, #10075) +py_cobject_sources(#11157, 0) +py_cobjectnames(#11157, "eval") +py_cmembers_versioned(#10760, "eval", #11157, "2") +#11158 = @"C_module$__builtin__$2exec" +py_cobjects(#11158) +py_cobjecttypes(#11158, #10075) +py_cobject_sources(#11158, 0) +py_cobjectnames(#11158, "exec") +py_cmembers_versioned(#10760, "exec", #11158, "2") +#11159 = @"C_builtin_function_or_method$builtins.execfile" +py_cobjects(#11159) +py_cobjecttypes(#11159, #10075) +py_cobject_sources(#11159, 0) +py_cobjectnames(#11159, "execfile") +py_cmembers_versioned(#10760, "execfile", #11159, "2") +#11160 = @"C_module$__builtin__$2exit" +#11161 = @"C_type$site.Quitter" +py_cobjects(#11161) +py_cobjecttypes(#11161, #10001) +py_cobject_sources(#11161, 0) +#11162 = @"C_type$site.Quitter$2__call__" +py_cobjects(#11162) +py_cobjecttypes(#11162, #10000) +py_cobject_sources(#11162, 0) +py_cobjectnames(#11162, "__call__") +py_cmembers_versioned(#11161, "__call__", #11162, "2") +#11163 = @"C_type$site.Quitter$2__dict__" +py_cobjects(#11163) +py_cobjecttypes(#11163, #10003) +py_cobject_sources(#11163, 0) +#11164 = @"C_type$site.Quitter$2__dict__$2__set__" +py_cobjects(#11164) +py_cobjecttypes(#11164, #10009) +py_cobject_sources(#11164, 0) +py_cobjectnames(#11164, "__set__") +py_cmembers_versioned(#11163, "__set__", #11164, "2") +#11165 = @"C_type$site.Quitter$2__dict__$2__getattribute__" +py_cobjects(#11165) +py_cobjecttypes(#11165, #10009) +py_cobject_sources(#11165, 0) +py_cobjectnames(#11165, "__getattribute__") +py_cmembers_versioned(#11163, "__getattribute__", #11165, "2") +py_cmembers_versioned(#11163, "__objclass__", #11161, "2") +#11166 = @"C_type$site.Quitter$2__dict__$2__repr__" +py_cobjects(#11166) +py_cobjecttypes(#11166, #10009) +py_cobject_sources(#11166, 0) +py_cobjectnames(#11166, "__repr__") +py_cmembers_versioned(#11163, "__repr__", #11166, "2") +#11167 = @"C_type$site.Quitter$2__dict__$2__get__" +py_cobjects(#11167) +py_cobjecttypes(#11167, #10009) +py_cobject_sources(#11167, 0) +py_cobjectnames(#11167, "__get__") +py_cmembers_versioned(#11163, "__get__", #11167, "2") +#11168 = @"C_bytes$1caffae7c2cd65c04c7d894ccd85fd466c39c173" +py_cobjects(#11168) +py_cobjecttypes(#11168, #10028) +py_cobject_sources(#11168, 0) +py_cobjectnames(#11168, "b'dictionary for instance variables (if defined)'") +py_cmembers_versioned(#11163, "__doc__", #11168, "2") +#11169 = @"C_type$site.Quitter$2__dict__$2__delete__" +py_cobjects(#11169) +py_cobjecttypes(#11169, #10009) +py_cobject_sources(#11169, 0) +py_cobjectnames(#11169, "__delete__") +py_cmembers_versioned(#11163, "__delete__", #11169, "2") +py_cobjectnames(#11163, "__dict__") +py_cmembers_versioned(#11161, "__dict__", #11163, "2") +py_cmembers_versioned(#11161, "__doc__", #10017, "2") +#11170 = @"C_type$site.Quitter$2__init__" +py_cobjects(#11170) +py_cobjecttypes(#11170, #10000) +py_cobject_sources(#11170, 0) +py_cobjectnames(#11170, "__init__") +py_cmembers_versioned(#11161, "__init__", #11170, "2") +py_cmembers_versioned(#11161, "__module__", #11138, "2") +#11171 = @"C_type$site.Quitter$2__repr__" +py_cobjects(#11171) +py_cobjecttypes(#11171, #10000) +py_cobject_sources(#11171, 0) +py_cobjectnames(#11171, "__repr__") +py_cmembers_versioned(#11161, "__repr__", #11171, "2") +#11172 = @"C_type$site.Quitter$2__weakref__" +py_cobjects(#11172) +py_cobjecttypes(#11172, #10003) +py_cobject_sources(#11172, 0) +#11173 = @"C_type$site.Quitter$2__weakref__$2__set__" +py_cobjects(#11173) +py_cobjecttypes(#11173, #10009) +py_cobject_sources(#11173, 0) +py_cobjectnames(#11173, "__set__") +py_cmembers_versioned(#11172, "__set__", #11173, "2") +#11174 = @"C_type$site.Quitter$2__weakref__$2__getattribute__" +py_cobjects(#11174) +py_cobjecttypes(#11174, #10009) +py_cobject_sources(#11174, 0) +py_cobjectnames(#11174, "__getattribute__") +py_cmembers_versioned(#11172, "__getattribute__", #11174, "2") +py_cmembers_versioned(#11172, "__objclass__", #11161, "2") +#11175 = @"C_type$site.Quitter$2__weakref__$2__repr__" +py_cobjects(#11175) +py_cobjecttypes(#11175, #10009) +py_cobject_sources(#11175, 0) +py_cobjectnames(#11175, "__repr__") +py_cmembers_versioned(#11172, "__repr__", #11175, "2") +#11176 = @"C_type$site.Quitter$2__weakref__$2__get__" +py_cobjects(#11176) +py_cobjecttypes(#11176, #10009) +py_cobject_sources(#11176, 0) +py_cobjectnames(#11176, "__get__") +py_cmembers_versioned(#11172, "__get__", #11176, "2") +#11177 = @"C_bytes$288bf61a8280860bb3d2b542aa2ec112948d35b5" +py_cobjects(#11177) +py_cobjecttypes(#11177, #10028) +py_cobject_sources(#11177, 0) +py_cobjectnames(#11177, "b'list of weak references to the object (if defined)'") +py_cmembers_versioned(#11172, "__doc__", #11177, "2") +#11178 = @"C_type$site.Quitter$2__weakref__$2__delete__" +py_cobjects(#11178) +py_cobjecttypes(#11178, #10009) +py_cobject_sources(#11178, 0) +py_cobjectnames(#11178, "__delete__") +py_cmembers_versioned(#11172, "__delete__", #11178, "2") +py_cobjectnames(#11172, "__weakref__") +py_cmembers_versioned(#11161, "__weakref__", #11172, "2") +py_cmembers_versioned(#11161, ".super.", #10021, "2") +py_cobjectnames(#11161, "site.Quitter") +py_cobjects(#11160) +py_cobjecttypes(#11160, #11161) +py_cobject_sources(#11160, 0) +py_cobjectnames(#11160, "object") +py_cmembers_versioned(#10760, "exit", #11160, "2") +#11179 = @"C_type$file" +py_cobjects(#11179) +py_cobjecttypes(#11179, #10001) +py_cobject_sources(#11179, 0) +#11180 = @"C_type$file$2__delattr__" +py_cobjects(#11180) +py_cobjecttypes(#11180, #10005) +py_cobject_sources(#11180, 0) +py_cobjectnames(#11180, "__delattr__") +py_cmembers_versioned(#11179, "__delattr__", #11180, "2") +#11181 = @"C_bytes$6cea74c971d3f1ead7e6ee9948113b38a1b6f069" +py_cobjects(#11181) +py_cobjecttypes(#11181, #10028) +py_cobject_sources(#11181, 0) +py_cobjectnames(#11181, "b'file(name[, mode[, buffering]]) -> file object + +Open a file. The mode can be 'r', 'w' or 'a' for reading (default), +writing or appending. The file will be created if it doesn't exist +when opened for writing or appending; it will be truncated when +opened for writing. Add a 'b' to the mode for binary files. +Add a '+' to the mode to allow simultaneous reading and writing. +If the buffering argument is given, 0 means unbuffered, 1 means line +buffered, and larger numbers specify the buffer size. The preferred way +to open a file is with the builtin open() function. +Add a 'U' to mode to open the file for input with universal newline +support. Any line ending in the input file will be seen as a '\n' +in Python. Also, a file so opened gains the attribute 'newlines'; +the value for this attribute is one of None (no newline read yet), +'\r', '\n', '\r\n' or a tuple containing all the newline types seen. + +'U' cannot be combined with 'w' or '+' mode. +'") +py_cmembers_versioned(#11179, "__doc__", #11181, "2") +#11182 = @"C_type$file$2__enter__" +py_cobjects(#11182) +py_cobjecttypes(#11182, #10034) +py_cobject_sources(#11182, 0) +py_cobjectnames(#11182, "__enter__") +py_cmembers_versioned(#11179, "__enter__", #11182, "2") +#11183 = @"C_type$file$2__exit__" +py_cobjects(#11183) +py_cobjecttypes(#11183, #10034) +py_cobject_sources(#11183, 0) +py_cobjectnames(#11183, "__exit__") +py_cmembers_versioned(#11179, "__exit__", #11183, "2") +#11184 = @"C_type$file$2__getattribute__" +py_cobjects(#11184) +py_cobjecttypes(#11184, #10005) +py_cobject_sources(#11184, 0) +py_cobjectnames(#11184, "__getattribute__") +py_cmembers_versioned(#11179, "__getattribute__", #11184, "2") +#11185 = @"C_type$file$2__init__" +py_cobjects(#11185) +py_cobjecttypes(#11185, #10005) +py_cobject_sources(#11185, 0) +py_cobjectnames(#11185, "__init__") +py_cmembers_versioned(#11179, "__init__", #11185, "2") +#11186 = @"C_type$file$2__iter__" +py_cobjects(#11186) +py_cobjecttypes(#11186, #10005) +py_cobject_sources(#11186, 0) +py_cobjectnames(#11186, "__iter__") +py_cmembers_versioned(#11179, "__iter__", #11186, "2") +#11187 = @"C_type$file$2__new__" +py_cobjects(#11187) +py_cobjecttypes(#11187, #10075) +py_cobject_sources(#11187, 0) +py_cobjectnames(#11187, "__new__") +py_cmembers_versioned(#11179, "__new__", #11187, "2") +#11188 = @"C_type$file$2__repr__" +py_cobjects(#11188) +py_cobjecttypes(#11188, #10005) +py_cobject_sources(#11188, 0) +py_cobjectnames(#11188, "__repr__") +py_cmembers_versioned(#11179, "__repr__", #11188, "2") +#11189 = @"C_type$file$2__setattr__" +py_cobjects(#11189) +py_cobjecttypes(#11189, #10005) +py_cobject_sources(#11189, 0) +py_cobjectnames(#11189, "__setattr__") +py_cmembers_versioned(#11179, "__setattr__", #11189, "2") +#11190 = @"C_type$file$2close" +py_cobjects(#11190) +py_cobjecttypes(#11190, #10034) +py_cobject_sources(#11190, 0) +py_cobjectnames(#11190, "close") +py_cmembers_versioned(#11179, "close", #11190, "2") +#11191 = @"C_type$file$2closed" +py_cobjects(#11191) +py_cobjecttypes(#11191, #10003) +py_cobject_sources(#11191, 0) +#11192 = @"C_type$file$2closed$2__set__" +py_cobjects(#11192) +py_cobjecttypes(#11192, #10009) +py_cobject_sources(#11192, 0) +py_cobjectnames(#11192, "__set__") +py_cmembers_versioned(#11191, "__set__", #11192, "2") +#11193 = @"C_type$file$2closed$2__getattribute__" +py_cobjects(#11193) +py_cobjecttypes(#11193, #10009) +py_cobject_sources(#11193, 0) +py_cobjectnames(#11193, "__getattribute__") +py_cmembers_versioned(#11191, "__getattribute__", #11193, "2") +py_cmembers_versioned(#11191, "__objclass__", #11179, "2") +#11194 = @"C_type$file$2closed$2__repr__" +py_cobjects(#11194) +py_cobjecttypes(#11194, #10009) +py_cobject_sources(#11194, 0) +py_cobjectnames(#11194, "__repr__") +py_cmembers_versioned(#11191, "__repr__", #11194, "2") +#11195 = @"C_type$file$2closed$2__get__" +py_cobjects(#11195) +py_cobjecttypes(#11195, #10009) +py_cobject_sources(#11195, 0) +py_cobjectnames(#11195, "__get__") +py_cmembers_versioned(#11191, "__get__", #11195, "2") +#11196 = @"C_bytes$4cd5ab8a4e71869ab7f338711b6c851a495d5dc0" +py_cobjects(#11196) +py_cobjecttypes(#11196, #10028) +py_cobject_sources(#11196, 0) +py_cobjectnames(#11196, "b'True if the file is closed'") +py_cmembers_versioned(#11191, "__doc__", #11196, "2") +#11197 = @"C_type$file$2closed$2__delete__" +py_cobjects(#11197) +py_cobjecttypes(#11197, #10009) +py_cobject_sources(#11197, 0) +py_cobjectnames(#11197, "__delete__") +py_cmembers_versioned(#11191, "__delete__", #11197, "2") +py_cobjectnames(#11191, "closed") +py_cmembers_versioned(#11179, "closed", #11191, "2") +#11198 = @"C_type$file$2encoding" +py_cobjects(#11198) +py_cobjecttypes(#11198, #10045) +py_cobject_sources(#11198, 0) +py_cobjectnames(#11198, "encoding") +py_cmembers_versioned(#11179, "encoding", #11198, "2") +#11199 = @"C_type$file$2errors" +py_cobjects(#11199) +py_cobjecttypes(#11199, #10045) +py_cobject_sources(#11199, 0) +py_cobjectnames(#11199, "errors") +py_cmembers_versioned(#11179, "errors", #11199, "2") +#11200 = @"C_type$file$2fileno" +py_cobjects(#11200) +py_cobjecttypes(#11200, #10034) +py_cobject_sources(#11200, 0) +py_cobjectnames(#11200, "fileno") +py_cmembers_versioned(#11179, "fileno", #11200, "2") +#11201 = @"C_type$file$2flush" +py_cobjects(#11201) +py_cobjecttypes(#11201, #10034) +py_cobject_sources(#11201, 0) +py_cobjectnames(#11201, "flush") +py_cmembers_versioned(#11179, "flush", #11201, "2") +#11202 = @"C_type$file$2isatty" +py_cobjects(#11202) +py_cobjecttypes(#11202, #10034) +py_cobject_sources(#11202, 0) +py_cobjectnames(#11202, "isatty") +py_cmembers_versioned(#11179, "isatty", #11202, "2") +#11203 = @"C_type$file$2mode" +py_cobjects(#11203) +py_cobjecttypes(#11203, #10045) +py_cobject_sources(#11203, 0) +py_cobjectnames(#11203, "mode") +py_cmembers_versioned(#11179, "mode", #11203, "2") +#11204 = @"C_type$file$2name" +py_cobjects(#11204) +py_cobjecttypes(#11204, #10045) +py_cobject_sources(#11204, 0) +py_cobjectnames(#11204, "name") +py_cmembers_versioned(#11179, "name", #11204, "2") +#11205 = @"C_type$file$2newlines" +py_cobjects(#11205) +py_cobjecttypes(#11205, #10003) +py_cobject_sources(#11205, 0) +#11206 = @"C_type$file$2newlines$2__set__" +py_cobjects(#11206) +py_cobjecttypes(#11206, #10009) +py_cobject_sources(#11206, 0) +py_cobjectnames(#11206, "__set__") +py_cmembers_versioned(#11205, "__set__", #11206, "2") +#11207 = @"C_type$file$2newlines$2__getattribute__" +py_cobjects(#11207) +py_cobjecttypes(#11207, #10009) +py_cobject_sources(#11207, 0) +py_cobjectnames(#11207, "__getattribute__") +py_cmembers_versioned(#11205, "__getattribute__", #11207, "2") +py_cmembers_versioned(#11205, "__objclass__", #11179, "2") +#11208 = @"C_type$file$2newlines$2__repr__" +py_cobjects(#11208) +py_cobjecttypes(#11208, #10009) +py_cobject_sources(#11208, 0) +py_cobjectnames(#11208, "__repr__") +py_cmembers_versioned(#11205, "__repr__", #11208, "2") +#11209 = @"C_type$file$2newlines$2__get__" +py_cobjects(#11209) +py_cobjecttypes(#11209, #10009) +py_cobject_sources(#11209, 0) +py_cobjectnames(#11209, "__get__") +py_cmembers_versioned(#11205, "__get__", #11209, "2") +#11210 = @"C_bytes$c0d8ab59effeef9fd438a7cca51589a1d26a9bea" +py_cobjects(#11210) +py_cobjecttypes(#11210, #10028) +py_cobject_sources(#11210, 0) +py_cobjectnames(#11210, "b'end-of-line convention used in this file'") +py_cmembers_versioned(#11205, "__doc__", #11210, "2") +#11211 = @"C_type$file$2newlines$2__delete__" +py_cobjects(#11211) +py_cobjecttypes(#11211, #10009) +py_cobject_sources(#11211, 0) +py_cobjectnames(#11211, "__delete__") +py_cmembers_versioned(#11205, "__delete__", #11211, "2") +py_cobjectnames(#11205, "newlines") +py_cmembers_versioned(#11179, "newlines", #11205, "2") +#11212 = @"C_type$file$2next" +py_cobjects(#11212) +py_cobjecttypes(#11212, #10005) +py_cobject_sources(#11212, 0) +py_cobjectnames(#11212, "next") +py_cmembers_versioned(#11179, "next", #11212, "2") +#11213 = @"C_type$file$2read" +py_cobjects(#11213) +py_cobjecttypes(#11213, #10034) +py_cobject_sources(#11213, 0) +py_cobjectnames(#11213, "read") +py_cmembers_versioned(#11179, "read", #11213, "2") +#11214 = @"C_type$file$2readinto" +py_cobjects(#11214) +py_cobjecttypes(#11214, #10034) +py_cobject_sources(#11214, 0) +py_cobjectnames(#11214, "readinto") +py_cmembers_versioned(#11179, "readinto", #11214, "2") +#11215 = @"C_type$file$2readline" +py_cobjects(#11215) +py_cobjecttypes(#11215, #10034) +py_cobject_sources(#11215, 0) +py_cobjectnames(#11215, "readline") +py_cmembers_versioned(#11179, "readline", #11215, "2") +#11216 = @"C_type$file$2readlines" +py_cobjects(#11216) +py_cobjecttypes(#11216, #10034) +py_cobject_sources(#11216, 0) +py_cobjectnames(#11216, "readlines") +py_cmembers_versioned(#11179, "readlines", #11216, "2") +#11217 = @"C_type$file$2seek" +py_cobjects(#11217) +py_cobjecttypes(#11217, #10034) +py_cobject_sources(#11217, 0) +py_cobjectnames(#11217, "seek") +py_cmembers_versioned(#11179, "seek", #11217, "2") +#11218 = @"C_type$file$2softspace" +py_cobjects(#11218) +py_cobjecttypes(#11218, #10003) +py_cobject_sources(#11218, 0) +#11219 = @"C_type$file$2softspace$2__set__" +py_cobjects(#11219) +py_cobjecttypes(#11219, #10009) +py_cobject_sources(#11219, 0) +py_cobjectnames(#11219, "__set__") +py_cmembers_versioned(#11218, "__set__", #11219, "2") +#11220 = @"C_type$file$2softspace$2__getattribute__" +py_cobjects(#11220) +py_cobjecttypes(#11220, #10009) +py_cobject_sources(#11220, 0) +py_cobjectnames(#11220, "__getattribute__") +py_cmembers_versioned(#11218, "__getattribute__", #11220, "2") +py_cmembers_versioned(#11218, "__objclass__", #11179, "2") +#11221 = @"C_type$file$2softspace$2__repr__" +py_cobjects(#11221) +py_cobjecttypes(#11221, #10009) +py_cobject_sources(#11221, 0) +py_cobjectnames(#11221, "__repr__") +py_cmembers_versioned(#11218, "__repr__", #11221, "2") +#11222 = @"C_type$file$2softspace$2__get__" +py_cobjects(#11222) +py_cobjecttypes(#11222, #10009) +py_cobject_sources(#11222, 0) +py_cobjectnames(#11222, "__get__") +py_cmembers_versioned(#11218, "__get__", #11222, "2") +#11223 = @"C_bytes$be4f12d9d1611c73ef9e7410a5d10ffc7bcce51a" +py_cobjects(#11223) +py_cobjecttypes(#11223, #10028) +py_cobject_sources(#11223, 0) +py_cobjectnames(#11223, "b'flag indicating that a space needs to be printed; used by print'") +py_cmembers_versioned(#11218, "__doc__", #11223, "2") +#11224 = @"C_type$file$2softspace$2__delete__" +py_cobjects(#11224) +py_cobjecttypes(#11224, #10009) +py_cobject_sources(#11224, 0) +py_cobjectnames(#11224, "__delete__") +py_cmembers_versioned(#11218, "__delete__", #11224, "2") +py_cobjectnames(#11218, "softspace") +py_cmembers_versioned(#11179, "softspace", #11218, "2") +#11225 = @"C_type$file$2tell" +py_cobjects(#11225) +py_cobjecttypes(#11225, #10034) +py_cobject_sources(#11225, 0) +py_cobjectnames(#11225, "tell") +py_cmembers_versioned(#11179, "tell", #11225, "2") +#11226 = @"C_type$file$2truncate" +py_cobjects(#11226) +py_cobjecttypes(#11226, #10034) +py_cobject_sources(#11226, 0) +py_cobjectnames(#11226, "truncate") +py_cmembers_versioned(#11179, "truncate", #11226, "2") +#11227 = @"C_type$file$2write" +py_cobjects(#11227) +py_cobjecttypes(#11227, #10034) +py_cobject_sources(#11227, 0) +py_cobjectnames(#11227, "write") +py_cmembers_versioned(#11179, "write", #11227, "2") +#11228 = @"C_type$file$2writelines" +py_cobjects(#11228) +py_cobjecttypes(#11228, #10034) +py_cobject_sources(#11228, 0) +py_cobjectnames(#11228, "writelines") +py_cmembers_versioned(#11179, "writelines", #11228, "2") +#11229 = @"C_type$file$2xreadlines" +py_cobjects(#11229) +py_cobjecttypes(#11229, #10034) +py_cobject_sources(#11229, 0) +py_cobjectnames(#11229, "xreadlines") +py_cmembers_versioned(#11179, "xreadlines", #11229, "2") +py_cmembers_versioned(#11179, ".super.", #10021, "2") +py_cobjectnames(#11179, "file") +py_cmembers_versioned(#10760, "file", #11179, "2") +#11230 = @"C_builtin_function_or_method$builtins.filter" +py_cobjects(#11230) +py_cobjecttypes(#11230, #10075) +py_cobject_sources(#11230, 0) +py_cobjectnames(#11230, "filter") +py_cmembers_versioned(#10760, "filter", #11230, "2") +#11231 = @"C_type$float" +py_cobjects(#11231) +py_cobjecttypes(#11231, #10001) +py_cobject_sources(#11231, 0) +#11232 = @"C_type$float$2__abs__" +py_cobjects(#11232) +py_cobjecttypes(#11232, #10005) +py_cobject_sources(#11232, 0) +py_cobjectnames(#11232, "__abs__") +py_cmembers_versioned(#11231, "__abs__", #11232, "2") +#11233 = @"C_type$float$2__add__" +py_cobjects(#11233) +py_cobjecttypes(#11233, #10005) +py_cobject_sources(#11233, 0) +py_cobjectnames(#11233, "__add__") +py_cmembers_versioned(#11231, "__add__", #11233, "2") +#11234 = @"C_type$float$2__coerce__" +py_cobjects(#11234) +py_cobjecttypes(#11234, #10005) +py_cobject_sources(#11234, 0) +py_cobjectnames(#11234, "__coerce__") +py_cmembers_versioned(#11231, "__coerce__", #11234, "2") +#11235 = @"C_type$float$2__div__" +py_cobjects(#11235) +py_cobjecttypes(#11235, #10005) +py_cobject_sources(#11235, 0) +py_cobjectnames(#11235, "__div__") +py_cmembers_versioned(#11231, "__div__", #11235, "2") +#11236 = @"C_type$float$2__divmod__" +py_cobjects(#11236) +py_cobjecttypes(#11236, #10005) +py_cobject_sources(#11236, 0) +py_cobjectnames(#11236, "__divmod__") +py_cmembers_versioned(#11231, "__divmod__", #11236, "2") +#11237 = @"C_bytes$8365cc677c8272c38289c9bfa732faf18370a91b" +py_cobjects(#11237) +py_cobjecttypes(#11237, #10028) +py_cobject_sources(#11237, 0) +py_cobjectnames(#11237, "b'float(x) -> floating point number + +Convert a string or number to a floating point number, if possible.'") +py_cmembers_versioned(#11231, "__doc__", #11237, "2") +#11238 = @"C_type$float$2__eq__" +py_cobjects(#11238) +py_cobjecttypes(#11238, #10005) +py_cobject_sources(#11238, 0) +py_cobjectnames(#11238, "__eq__") +py_cmembers_versioned(#11231, "__eq__", #11238, "2") +#11239 = @"C_type$float$2__float__" +py_cobjects(#11239) +py_cobjecttypes(#11239, #10005) +py_cobject_sources(#11239, 0) +py_cobjectnames(#11239, "__float__") +py_cmembers_versioned(#11231, "__float__", #11239, "2") +#11240 = @"C_type$float$2__floordiv__" +py_cobjects(#11240) +py_cobjecttypes(#11240, #10005) +py_cobject_sources(#11240, 0) +py_cobjectnames(#11240, "__floordiv__") +py_cmembers_versioned(#11231, "__floordiv__", #11240, "2") +#11241 = @"C_type$float$2__format__" +py_cobjects(#11241) +py_cobjecttypes(#11241, #10034) +py_cobject_sources(#11241, 0) +py_cobjectnames(#11241, "__format__") +py_cmembers_versioned(#11231, "__format__", #11241, "2") +#11242 = @"C_type$float$2__ge__" +py_cobjects(#11242) +py_cobjecttypes(#11242, #10005) +py_cobject_sources(#11242, 0) +py_cobjectnames(#11242, "__ge__") +py_cmembers_versioned(#11231, "__ge__", #11242, "2") +#11243 = @"C_type$float$2__getattribute__" +py_cobjects(#11243) +py_cobjecttypes(#11243, #10005) +py_cobject_sources(#11243, 0) +py_cobjectnames(#11243, "__getattribute__") +py_cmembers_versioned(#11231, "__getattribute__", #11243, "2") +#11244 = @"C_type$float$2__getformat__" +py_cobjects(#11244) +py_cobjecttypes(#11244, #10169) +py_cobject_sources(#11244, 0) +py_cobjectnames(#11244, "__getformat__") +py_cmembers_versioned(#11231, "__getformat__", #11244, "2") +#11245 = @"C_type$float$2__getnewargs__" +py_cobjects(#11245) +py_cobjecttypes(#11245, #10034) +py_cobject_sources(#11245, 0) +py_cobjectnames(#11245, "__getnewargs__") +py_cmembers_versioned(#11231, "__getnewargs__", #11245, "2") +#11246 = @"C_type$float$2__gt__" +py_cobjects(#11246) +py_cobjecttypes(#11246, #10005) +py_cobject_sources(#11246, 0) +py_cobjectnames(#11246, "__gt__") +py_cmembers_versioned(#11231, "__gt__", #11246, "2") +#11247 = @"C_type$float$2__hash__" +py_cobjects(#11247) +py_cobjecttypes(#11247, #10005) +py_cobject_sources(#11247, 0) +py_cobjectnames(#11247, "__hash__") +py_cmembers_versioned(#11231, "__hash__", #11247, "2") +#11248 = @"C_type$float$2__int__" +py_cobjects(#11248) +py_cobjecttypes(#11248, #10005) +py_cobject_sources(#11248, 0) +py_cobjectnames(#11248, "__int__") +py_cmembers_versioned(#11231, "__int__", #11248, "2") +#11249 = @"C_type$float$2__le__" +py_cobjects(#11249) +py_cobjecttypes(#11249, #10005) +py_cobject_sources(#11249, 0) +py_cobjectnames(#11249, "__le__") +py_cmembers_versioned(#11231, "__le__", #11249, "2") +#11250 = @"C_type$float$2__long__" +py_cobjects(#11250) +py_cobjecttypes(#11250, #10005) +py_cobject_sources(#11250, 0) +py_cobjectnames(#11250, "__long__") +py_cmembers_versioned(#11231, "__long__", #11250, "2") +#11251 = @"C_type$float$2__lt__" +py_cobjects(#11251) +py_cobjecttypes(#11251, #10005) +py_cobject_sources(#11251, 0) +py_cobjectnames(#11251, "__lt__") +py_cmembers_versioned(#11231, "__lt__", #11251, "2") +#11252 = @"C_type$float$2__mod__" +py_cobjects(#11252) +py_cobjecttypes(#11252, #10005) +py_cobject_sources(#11252, 0) +py_cobjectnames(#11252, "__mod__") +py_cmembers_versioned(#11231, "__mod__", #11252, "2") +#11253 = @"C_type$float$2__mul__" +py_cobjects(#11253) +py_cobjecttypes(#11253, #10005) +py_cobject_sources(#11253, 0) +py_cobjectnames(#11253, "__mul__") +py_cmembers_versioned(#11231, "__mul__", #11253, "2") +#11254 = @"C_type$float$2__ne__" +py_cobjects(#11254) +py_cobjecttypes(#11254, #10005) +py_cobject_sources(#11254, 0) +py_cobjectnames(#11254, "__ne__") +py_cmembers_versioned(#11231, "__ne__", #11254, "2") +#11255 = @"C_type$float$2__neg__" +py_cobjects(#11255) +py_cobjecttypes(#11255, #10005) +py_cobject_sources(#11255, 0) +py_cobjectnames(#11255, "__neg__") +py_cmembers_versioned(#11231, "__neg__", #11255, "2") +#11256 = @"C_type$float$2__new__" +py_cobjects(#11256) +py_cobjecttypes(#11256, #10075) +py_cobject_sources(#11256, 0) +py_cobjectnames(#11256, "__new__") +py_cmembers_versioned(#11231, "__new__", #11256, "2") +#11257 = @"C_type$float$2__nonzero__" +py_cobjects(#11257) +py_cobjecttypes(#11257, #10005) +py_cobject_sources(#11257, 0) +py_cobjectnames(#11257, "__nonzero__") +py_cmembers_versioned(#11231, "__nonzero__", #11257, "2") +#11258 = @"C_type$float$2__pos__" +py_cobjects(#11258) +py_cobjecttypes(#11258, #10005) +py_cobject_sources(#11258, 0) +py_cobjectnames(#11258, "__pos__") +py_cmembers_versioned(#11231, "__pos__", #11258, "2") +#11259 = @"C_type$float$2__pow__" +py_cobjects(#11259) +py_cobjecttypes(#11259, #10005) +py_cobject_sources(#11259, 0) +py_cobjectnames(#11259, "__pow__") +py_cmembers_versioned(#11231, "__pow__", #11259, "2") +#11260 = @"C_type$float$2__radd__" +py_cobjects(#11260) +py_cobjecttypes(#11260, #10005) +py_cobject_sources(#11260, 0) +py_cobjectnames(#11260, "__radd__") +py_cmembers_versioned(#11231, "__radd__", #11260, "2") +#11261 = @"C_type$float$2__rdiv__" +py_cobjects(#11261) +py_cobjecttypes(#11261, #10005) +py_cobject_sources(#11261, 0) +py_cobjectnames(#11261, "__rdiv__") +py_cmembers_versioned(#11231, "__rdiv__", #11261, "2") +#11262 = @"C_type$float$2__rdivmod__" +py_cobjects(#11262) +py_cobjecttypes(#11262, #10005) +py_cobject_sources(#11262, 0) +py_cobjectnames(#11262, "__rdivmod__") +py_cmembers_versioned(#11231, "__rdivmod__", #11262, "2") +#11263 = @"C_type$float$2__repr__" +py_cobjects(#11263) +py_cobjecttypes(#11263, #10005) +py_cobject_sources(#11263, 0) +py_cobjectnames(#11263, "__repr__") +py_cmembers_versioned(#11231, "__repr__", #11263, "2") +#11264 = @"C_type$float$2__rfloordiv__" +py_cobjects(#11264) +py_cobjecttypes(#11264, #10005) +py_cobject_sources(#11264, 0) +py_cobjectnames(#11264, "__rfloordiv__") +py_cmembers_versioned(#11231, "__rfloordiv__", #11264, "2") +#11265 = @"C_type$float$2__rmod__" +py_cobjects(#11265) +py_cobjecttypes(#11265, #10005) +py_cobject_sources(#11265, 0) +py_cobjectnames(#11265, "__rmod__") +py_cmembers_versioned(#11231, "__rmod__", #11265, "2") +#11266 = @"C_type$float$2__rmul__" +py_cobjects(#11266) +py_cobjecttypes(#11266, #10005) +py_cobject_sources(#11266, 0) +py_cobjectnames(#11266, "__rmul__") +py_cmembers_versioned(#11231, "__rmul__", #11266, "2") +#11267 = @"C_type$float$2__rpow__" +py_cobjects(#11267) +py_cobjecttypes(#11267, #10005) +py_cobject_sources(#11267, 0) +py_cobjectnames(#11267, "__rpow__") +py_cmembers_versioned(#11231, "__rpow__", #11267, "2") +#11268 = @"C_type$float$2__rsub__" +py_cobjects(#11268) +py_cobjecttypes(#11268, #10005) +py_cobject_sources(#11268, 0) +py_cobjectnames(#11268, "__rsub__") +py_cmembers_versioned(#11231, "__rsub__", #11268, "2") +#11269 = @"C_type$float$2__rtruediv__" +py_cobjects(#11269) +py_cobjecttypes(#11269, #10005) +py_cobject_sources(#11269, 0) +py_cobjectnames(#11269, "__rtruediv__") +py_cmembers_versioned(#11231, "__rtruediv__", #11269, "2") +#11270 = @"C_type$float$2__setformat__" +py_cobjects(#11270) +py_cobjecttypes(#11270, #10169) +py_cobject_sources(#11270, 0) +py_cobjectnames(#11270, "__setformat__") +py_cmembers_versioned(#11231, "__setformat__", #11270, "2") +#11271 = @"C_type$float$2__str__" +py_cobjects(#11271) +py_cobjecttypes(#11271, #10005) +py_cobject_sources(#11271, 0) +py_cobjectnames(#11271, "__str__") +py_cmembers_versioned(#11231, "__str__", #11271, "2") +#11272 = @"C_type$float$2__sub__" +py_cobjects(#11272) +py_cobjecttypes(#11272, #10005) +py_cobject_sources(#11272, 0) +py_cobjectnames(#11272, "__sub__") +py_cmembers_versioned(#11231, "__sub__", #11272, "2") +#11273 = @"C_type$float$2__truediv__" +py_cobjects(#11273) +py_cobjecttypes(#11273, #10005) +py_cobject_sources(#11273, 0) +py_cobjectnames(#11273, "__truediv__") +py_cmembers_versioned(#11231, "__truediv__", #11273, "2") +#11274 = @"C_type$float$2__trunc__" +py_cobjects(#11274) +py_cobjecttypes(#11274, #10034) +py_cobject_sources(#11274, 0) +py_cobjectnames(#11274, "__trunc__") +py_cmembers_versioned(#11231, "__trunc__", #11274, "2") +#11275 = @"C_type$float$2as_integer_ratio" +py_cobjects(#11275) +py_cobjecttypes(#11275, #10034) +py_cobject_sources(#11275, 0) +py_cobjectnames(#11275, "as_integer_ratio") +py_cmembers_versioned(#11231, "as_integer_ratio", #11275, "2") +#11276 = @"C_type$float$2conjugate" +py_cobjects(#11276) +py_cobjecttypes(#11276, #10034) +py_cobject_sources(#11276, 0) +py_cobjectnames(#11276, "conjugate") +py_cmembers_versioned(#11231, "conjugate", #11276, "2") +#11277 = @"C_type$float$2fromhex" +py_cobjects(#11277) +py_cobjecttypes(#11277, #10169) +py_cobject_sources(#11277, 0) +py_cobjectnames(#11277, "fromhex") +py_cmembers_versioned(#11231, "fromhex", #11277, "2") +#11278 = @"C_type$float$2hex" +py_cobjects(#11278) +py_cobjecttypes(#11278, #10034) +py_cobject_sources(#11278, 0) +py_cobjectnames(#11278, "hex") +py_cmembers_versioned(#11231, "hex", #11278, "2") +#11279 = @"C_type$float$2imag" +py_cobjects(#11279) +py_cobjecttypes(#11279, #10003) +py_cobject_sources(#11279, 0) +#11280 = @"C_type$float$2imag$2__set__" +py_cobjects(#11280) +py_cobjecttypes(#11280, #10009) +py_cobject_sources(#11280, 0) +py_cobjectnames(#11280, "__set__") +py_cmembers_versioned(#11279, "__set__", #11280, "2") +#11281 = @"C_type$float$2imag$2__getattribute__" +py_cobjects(#11281) +py_cobjecttypes(#11281, #10009) +py_cobject_sources(#11281, 0) +py_cobjectnames(#11281, "__getattribute__") +py_cmembers_versioned(#11279, "__getattribute__", #11281, "2") +py_cmembers_versioned(#11279, "__objclass__", #11231, "2") +#11282 = @"C_type$float$2imag$2__repr__" +py_cobjects(#11282) +py_cobjecttypes(#11282, #10009) +py_cobject_sources(#11282, 0) +py_cobjectnames(#11282, "__repr__") +py_cmembers_versioned(#11279, "__repr__", #11282, "2") +#11283 = @"C_type$float$2imag$2__get__" +py_cobjects(#11283) +py_cobjecttypes(#11283, #10009) +py_cobject_sources(#11283, 0) +py_cobjectnames(#11283, "__get__") +py_cmembers_versioned(#11279, "__get__", #11283, "2") +#11284 = @"C_bytes$1697c2b9b4c10d325b12cf3fded2fbfc0e15d5f0" +py_cobjects(#11284) +py_cobjecttypes(#11284, #10028) +py_cobject_sources(#11284, 0) +py_cobjectnames(#11284, "b'the imaginary part of a complex number'") +py_cmembers_versioned(#11279, "__doc__", #11284, "2") +#11285 = @"C_type$float$2imag$2__delete__" +py_cobjects(#11285) +py_cobjecttypes(#11285, #10009) +py_cobject_sources(#11285, 0) +py_cobjectnames(#11285, "__delete__") +py_cmembers_versioned(#11279, "__delete__", #11285, "2") +py_cobjectnames(#11279, "imag") +py_cmembers_versioned(#11231, "imag", #11279, "2") +#11286 = @"C_type$float$2is_integer" +py_cobjects(#11286) +py_cobjecttypes(#11286, #10034) +py_cobject_sources(#11286, 0) +py_cobjectnames(#11286, "is_integer") +py_cmembers_versioned(#11231, "is_integer", #11286, "2") +#11287 = @"C_type$float$2real" +py_cobjects(#11287) +py_cobjecttypes(#11287, #10003) +py_cobject_sources(#11287, 0) +#11288 = @"C_type$float$2real$2__set__" +py_cobjects(#11288) +py_cobjecttypes(#11288, #10009) +py_cobject_sources(#11288, 0) +py_cobjectnames(#11288, "__set__") +py_cmembers_versioned(#11287, "__set__", #11288, "2") +#11289 = @"C_type$float$2real$2__getattribute__" +py_cobjects(#11289) +py_cobjecttypes(#11289, #10009) +py_cobject_sources(#11289, 0) +py_cobjectnames(#11289, "__getattribute__") +py_cmembers_versioned(#11287, "__getattribute__", #11289, "2") +py_cmembers_versioned(#11287, "__objclass__", #11231, "2") +#11290 = @"C_type$float$2real$2__repr__" +py_cobjects(#11290) +py_cobjecttypes(#11290, #10009) +py_cobject_sources(#11290, 0) +py_cobjectnames(#11290, "__repr__") +py_cmembers_versioned(#11287, "__repr__", #11290, "2") +#11291 = @"C_type$float$2real$2__get__" +py_cobjects(#11291) +py_cobjecttypes(#11291, #10009) +py_cobject_sources(#11291, 0) +py_cobjectnames(#11291, "__get__") +py_cmembers_versioned(#11287, "__get__", #11291, "2") +#11292 = @"C_bytes$2cb527e0bacedb07e674d6e9890d3d2ab1a8f487" +py_cobjects(#11292) +py_cobjecttypes(#11292, #10028) +py_cobject_sources(#11292, 0) +py_cobjectnames(#11292, "b'the real part of a complex number'") +py_cmembers_versioned(#11287, "__doc__", #11292, "2") +#11293 = @"C_type$float$2real$2__delete__" +py_cobjects(#11293) +py_cobjecttypes(#11293, #10009) +py_cobject_sources(#11293, 0) +py_cobjectnames(#11293, "__delete__") +py_cmembers_versioned(#11287, "__delete__", #11293, "2") +py_cobjectnames(#11287, "real") +py_cmembers_versioned(#11231, "real", #11287, "2") +py_cmembers_versioned(#11231, ".super.", #10021, "2") +py_cobjectnames(#11231, "float") +py_cmembers_versioned(#10760, "float", #11231, "2") +#11294 = @"C_builtin_function_or_method$builtins.format" +py_cobjects(#11294) +py_cobjecttypes(#11294, #10075) +py_cobject_sources(#11294, 0) +py_cobjectnames(#11294, "format") +py_cmembers_versioned(#10760, "format", #11294, "2") +#11295 = @"C_type$frozenset" +py_cobjects(#11295) +py_cobjecttypes(#11295, #10001) +py_cobject_sources(#11295, 0) +#11296 = @"C_type$frozenset$2__and__" +py_cobjects(#11296) +py_cobjecttypes(#11296, #10005) +py_cobject_sources(#11296, 0) +py_cobjectnames(#11296, "__and__") +py_cmembers_versioned(#11295, "__and__", #11296, "2") +#11297 = @"C_type$frozenset$2__cmp__" +py_cobjects(#11297) +py_cobjecttypes(#11297, #10005) +py_cobject_sources(#11297, 0) +py_cobjectnames(#11297, "__cmp__") +py_cmembers_versioned(#11295, "__cmp__", #11297, "2") +#11298 = @"C_type$frozenset$2__contains__" +py_cobjects(#11298) +py_cobjecttypes(#11298, #10034) +py_cobject_sources(#11298, 0) +py_cobjectnames(#11298, "__contains__") +py_cmembers_versioned(#11295, "__contains__", #11298, "2") +#11299 = @"C_bytes$dd2991949f142904935210689ba50c9ae0a87b00" +py_cobjects(#11299) +py_cobjecttypes(#11299, #10028) +py_cobject_sources(#11299, 0) +py_cobjectnames(#11299, "b'frozenset() -> empty frozenset object +frozenset(iterable) -> frozenset object + +Build an immutable unordered collection of unique elements.'") +py_cmembers_versioned(#11295, "__doc__", #11299, "2") +#11300 = @"C_type$frozenset$2__eq__" +py_cobjects(#11300) +py_cobjecttypes(#11300, #10005) +py_cobject_sources(#11300, 0) +py_cobjectnames(#11300, "__eq__") +py_cmembers_versioned(#11295, "__eq__", #11300, "2") +#11301 = @"C_type$frozenset$2__ge__" +py_cobjects(#11301) +py_cobjecttypes(#11301, #10005) +py_cobject_sources(#11301, 0) +py_cobjectnames(#11301, "__ge__") +py_cmembers_versioned(#11295, "__ge__", #11301, "2") +#11302 = @"C_type$frozenset$2__getattribute__" +py_cobjects(#11302) +py_cobjecttypes(#11302, #10005) +py_cobject_sources(#11302, 0) +py_cobjectnames(#11302, "__getattribute__") +py_cmembers_versioned(#11295, "__getattribute__", #11302, "2") +#11303 = @"C_type$frozenset$2__gt__" +py_cobjects(#11303) +py_cobjecttypes(#11303, #10005) +py_cobject_sources(#11303, 0) +py_cobjectnames(#11303, "__gt__") +py_cmembers_versioned(#11295, "__gt__", #11303, "2") +#11304 = @"C_type$frozenset$2__hash__" +py_cobjects(#11304) +py_cobjecttypes(#11304, #10005) +py_cobject_sources(#11304, 0) +py_cobjectnames(#11304, "__hash__") +py_cmembers_versioned(#11295, "__hash__", #11304, "2") +#11305 = @"C_type$frozenset$2__iter__" +py_cobjects(#11305) +py_cobjecttypes(#11305, #10005) +py_cobject_sources(#11305, 0) +py_cobjectnames(#11305, "__iter__") +py_cmembers_versioned(#11295, "__iter__", #11305, "2") +#11306 = @"C_type$frozenset$2__le__" +py_cobjects(#11306) +py_cobjecttypes(#11306, #10005) +py_cobject_sources(#11306, 0) +py_cobjectnames(#11306, "__le__") +py_cmembers_versioned(#11295, "__le__", #11306, "2") +#11307 = @"C_type$frozenset$2__len__" +py_cobjects(#11307) +py_cobjecttypes(#11307, #10005) +py_cobject_sources(#11307, 0) +py_cobjectnames(#11307, "__len__") +py_cmembers_versioned(#11295, "__len__", #11307, "2") +#11308 = @"C_type$frozenset$2__lt__" +py_cobjects(#11308) +py_cobjecttypes(#11308, #10005) +py_cobject_sources(#11308, 0) +py_cobjectnames(#11308, "__lt__") +py_cmembers_versioned(#11295, "__lt__", #11308, "2") +#11309 = @"C_type$frozenset$2__ne__" +py_cobjects(#11309) +py_cobjecttypes(#11309, #10005) +py_cobject_sources(#11309, 0) +py_cobjectnames(#11309, "__ne__") +py_cmembers_versioned(#11295, "__ne__", #11309, "2") +#11310 = @"C_type$frozenset$2__new__" +py_cobjects(#11310) +py_cobjecttypes(#11310, #10075) +py_cobject_sources(#11310, 0) +py_cobjectnames(#11310, "__new__") +py_cmembers_versioned(#11295, "__new__", #11310, "2") +#11311 = @"C_type$frozenset$2__or__" +py_cobjects(#11311) +py_cobjecttypes(#11311, #10005) +py_cobject_sources(#11311, 0) +py_cobjectnames(#11311, "__or__") +py_cmembers_versioned(#11295, "__or__", #11311, "2") +#11312 = @"C_type$frozenset$2__rand__" +py_cobjects(#11312) +py_cobjecttypes(#11312, #10005) +py_cobject_sources(#11312, 0) +py_cobjectnames(#11312, "__rand__") +py_cmembers_versioned(#11295, "__rand__", #11312, "2") +#11313 = @"C_type$frozenset$2__reduce__" +py_cobjects(#11313) +py_cobjecttypes(#11313, #10034) +py_cobject_sources(#11313, 0) +py_cobjectnames(#11313, "__reduce__") +py_cmembers_versioned(#11295, "__reduce__", #11313, "2") +#11314 = @"C_type$frozenset$2__repr__" +py_cobjects(#11314) +py_cobjecttypes(#11314, #10005) +py_cobject_sources(#11314, 0) +py_cobjectnames(#11314, "__repr__") +py_cmembers_versioned(#11295, "__repr__", #11314, "2") +#11315 = @"C_type$frozenset$2__ror__" +py_cobjects(#11315) +py_cobjecttypes(#11315, #10005) +py_cobject_sources(#11315, 0) +py_cobjectnames(#11315, "__ror__") +py_cmembers_versioned(#11295, "__ror__", #11315, "2") +#11316 = @"C_type$frozenset$2__rsub__" +py_cobjects(#11316) +py_cobjecttypes(#11316, #10005) +py_cobject_sources(#11316, 0) +py_cobjectnames(#11316, "__rsub__") +py_cmembers_versioned(#11295, "__rsub__", #11316, "2") +#11317 = @"C_type$frozenset$2__rxor__" +py_cobjects(#11317) +py_cobjecttypes(#11317, #10005) +py_cobject_sources(#11317, 0) +py_cobjectnames(#11317, "__rxor__") +py_cmembers_versioned(#11295, "__rxor__", #11317, "2") +#11318 = @"C_type$frozenset$2__sizeof__" +py_cobjects(#11318) +py_cobjecttypes(#11318, #10034) +py_cobject_sources(#11318, 0) +py_cobjectnames(#11318, "__sizeof__") +py_cmembers_versioned(#11295, "__sizeof__", #11318, "2") +#11319 = @"C_type$frozenset$2__sub__" +py_cobjects(#11319) +py_cobjecttypes(#11319, #10005) +py_cobject_sources(#11319, 0) +py_cobjectnames(#11319, "__sub__") +py_cmembers_versioned(#11295, "__sub__", #11319, "2") +#11320 = @"C_type$frozenset$2__xor__" +py_cobjects(#11320) +py_cobjecttypes(#11320, #10005) +py_cobject_sources(#11320, 0) +py_cobjectnames(#11320, "__xor__") +py_cmembers_versioned(#11295, "__xor__", #11320, "2") +#11321 = @"C_type$frozenset$2copy" +py_cobjects(#11321) +py_cobjecttypes(#11321, #10034) +py_cobject_sources(#11321, 0) +py_cobjectnames(#11321, "copy") +py_cmembers_versioned(#11295, "copy", #11321, "2") +#11322 = @"C_type$frozenset$2difference" +py_cobjects(#11322) +py_cobjecttypes(#11322, #10034) +py_cobject_sources(#11322, 0) +py_cobjectnames(#11322, "difference") +py_cmembers_versioned(#11295, "difference", #11322, "2") +#11323 = @"C_type$frozenset$2intersection" +py_cobjects(#11323) +py_cobjecttypes(#11323, #10034) +py_cobject_sources(#11323, 0) +py_cobjectnames(#11323, "intersection") +py_cmembers_versioned(#11295, "intersection", #11323, "2") +#11324 = @"C_type$frozenset$2isdisjoint" +py_cobjects(#11324) +py_cobjecttypes(#11324, #10034) +py_cobject_sources(#11324, 0) +py_cobjectnames(#11324, "isdisjoint") +py_cmembers_versioned(#11295, "isdisjoint", #11324, "2") +#11325 = @"C_type$frozenset$2issubset" +py_cobjects(#11325) +py_cobjecttypes(#11325, #10034) +py_cobject_sources(#11325, 0) +py_cobjectnames(#11325, "issubset") +py_cmembers_versioned(#11295, "issubset", #11325, "2") +#11326 = @"C_type$frozenset$2issuperset" +py_cobjects(#11326) +py_cobjecttypes(#11326, #10034) +py_cobject_sources(#11326, 0) +py_cobjectnames(#11326, "issuperset") +py_cmembers_versioned(#11295, "issuperset", #11326, "2") +#11327 = @"C_type$frozenset$2symmetric_difference" +py_cobjects(#11327) +py_cobjecttypes(#11327, #10034) +py_cobject_sources(#11327, 0) +py_cobjectnames(#11327, "symmetric_difference") +py_cmembers_versioned(#11295, "symmetric_difference", #11327, "2") +#11328 = @"C_type$frozenset$2union" +py_cobjects(#11328) +py_cobjecttypes(#11328, #10034) +py_cobject_sources(#11328, 0) +py_cobjectnames(#11328, "union") +py_cmembers_versioned(#11295, "union", #11328, "2") +py_cmembers_versioned(#11295, ".super.", #10021, "2") +py_cobjectnames(#11295, "frozenset") +py_cmembers_versioned(#10760, "frozenset", #11295, "2") +#11329 = @"C_builtin_function_or_method$builtins.getattr" +py_cobjects(#11329) +py_cobjecttypes(#11329, #10075) +py_cobject_sources(#11329, 0) +py_cobjectnames(#11329, "getattr") +py_cmembers_versioned(#10760, "getattr", #11329, "2") +py_cmembers_versioned(#10760, "globals", #10530, "2") +#11330 = @"C_builtin_function_or_method$builtins.hasattr" +py_cobjects(#11330) +py_cobjecttypes(#11330, #10075) +py_cobject_sources(#11330, 0) +py_cobjectnames(#11330, "hasattr") +py_cmembers_versioned(#10760, "hasattr", #11330, "2") +#11331 = @"C_builtin_function_or_method$builtins.hash" +py_cobjects(#11331) +py_cobjecttypes(#11331, #10075) +py_cobject_sources(#11331, 0) +py_cobjectnames(#11331, "hash") +py_cmembers_versioned(#10760, "hash", #11331, "2") +#11332 = @"C_module$__builtin__$2help" +#11333 = @"C_type$site._Helper" +py_cobjects(#11333) +py_cobjecttypes(#11333, #10001) +py_cobject_sources(#11333, 0) +#11334 = @"C_type$site._Helper$2__call__" +py_cobjects(#11334) +py_cobjecttypes(#11334, #10000) +py_cobject_sources(#11334, 0) +py_cobjectnames(#11334, "__call__") +py_cmembers_versioned(#11333, "__call__", #11334, "2") +#11335 = @"C_type$site._Helper$2__dict__" +py_cobjects(#11335) +py_cobjecttypes(#11335, #10003) +py_cobject_sources(#11335, 0) +#11336 = @"C_type$site._Helper$2__dict__$2__set__" +py_cobjects(#11336) +py_cobjecttypes(#11336, #10009) +py_cobject_sources(#11336, 0) +py_cobjectnames(#11336, "__set__") +py_cmembers_versioned(#11335, "__set__", #11336, "2") +#11337 = @"C_type$site._Helper$2__dict__$2__getattribute__" +py_cobjects(#11337) +py_cobjecttypes(#11337, #10009) +py_cobject_sources(#11337, 0) +py_cobjectnames(#11337, "__getattribute__") +py_cmembers_versioned(#11335, "__getattribute__", #11337, "2") +py_cmembers_versioned(#11335, "__objclass__", #11333, "2") +#11338 = @"C_type$site._Helper$2__dict__$2__repr__" +py_cobjects(#11338) +py_cobjecttypes(#11338, #10009) +py_cobject_sources(#11338, 0) +py_cobjectnames(#11338, "__repr__") +py_cmembers_versioned(#11335, "__repr__", #11338, "2") +#11339 = @"C_type$site._Helper$2__dict__$2__get__" +py_cobjects(#11339) +py_cobjecttypes(#11339, #10009) +py_cobject_sources(#11339, 0) +py_cobjectnames(#11339, "__get__") +py_cmembers_versioned(#11335, "__get__", #11339, "2") +#11340 = @"C_bytes$1caffae7c2cd65c04c7d894ccd85fd466c39c173" +py_cobjects(#11340) +py_cobjecttypes(#11340, #10028) +py_cobject_sources(#11340, 0) +py_cobjectnames(#11340, "b'dictionary for instance variables (if defined)'") +py_cmembers_versioned(#11335, "__doc__", #11340, "2") +#11341 = @"C_type$site._Helper$2__dict__$2__delete__" +py_cobjects(#11341) +py_cobjecttypes(#11341, #10009) +py_cobject_sources(#11341, 0) +py_cobjectnames(#11341, "__delete__") +py_cmembers_versioned(#11335, "__delete__", #11341, "2") +py_cobjectnames(#11335, "__dict__") +py_cmembers_versioned(#11333, "__dict__", #11335, "2") +#11342 = @"C_bytes$c78bbc1f1f8c49e5dde8a64e59e2614c395b4d56" +py_cobjects(#11342) +py_cobjecttypes(#11342, #10028) +py_cobject_sources(#11342, 0) +py_cobjectnames(#11342, "b'Define the builtin 'help'. + This is a wrapper around pydoc.help (with a twist). + + '") +py_cmembers_versioned(#11333, "__doc__", #11342, "2") +py_cmembers_versioned(#11333, "__module__", #11138, "2") +#11343 = @"C_type$site._Helper$2__repr__" +py_cobjects(#11343) +py_cobjecttypes(#11343, #10000) +py_cobject_sources(#11343, 0) +py_cobjectnames(#11343, "__repr__") +py_cmembers_versioned(#11333, "__repr__", #11343, "2") +#11344 = @"C_type$site._Helper$2__weakref__" +py_cobjects(#11344) +py_cobjecttypes(#11344, #10003) +py_cobject_sources(#11344, 0) +#11345 = @"C_type$site._Helper$2__weakref__$2__set__" +py_cobjects(#11345) +py_cobjecttypes(#11345, #10009) +py_cobject_sources(#11345, 0) +py_cobjectnames(#11345, "__set__") +py_cmembers_versioned(#11344, "__set__", #11345, "2") +#11346 = @"C_type$site._Helper$2__weakref__$2__getattribute__" +py_cobjects(#11346) +py_cobjecttypes(#11346, #10009) +py_cobject_sources(#11346, 0) +py_cobjectnames(#11346, "__getattribute__") +py_cmembers_versioned(#11344, "__getattribute__", #11346, "2") +py_cmembers_versioned(#11344, "__objclass__", #11333, "2") +#11347 = @"C_type$site._Helper$2__weakref__$2__repr__" +py_cobjects(#11347) +py_cobjecttypes(#11347, #10009) +py_cobject_sources(#11347, 0) +py_cobjectnames(#11347, "__repr__") +py_cmembers_versioned(#11344, "__repr__", #11347, "2") +#11348 = @"C_type$site._Helper$2__weakref__$2__get__" +py_cobjects(#11348) +py_cobjecttypes(#11348, #10009) +py_cobject_sources(#11348, 0) +py_cobjectnames(#11348, "__get__") +py_cmembers_versioned(#11344, "__get__", #11348, "2") +#11349 = @"C_bytes$288bf61a8280860bb3d2b542aa2ec112948d35b5" +py_cobjects(#11349) +py_cobjecttypes(#11349, #10028) +py_cobject_sources(#11349, 0) +py_cobjectnames(#11349, "b'list of weak references to the object (if defined)'") +py_cmembers_versioned(#11344, "__doc__", #11349, "2") +#11350 = @"C_type$site._Helper$2__weakref__$2__delete__" +py_cobjects(#11350) +py_cobjecttypes(#11350, #10009) +py_cobject_sources(#11350, 0) +py_cobjectnames(#11350, "__delete__") +py_cmembers_versioned(#11344, "__delete__", #11350, "2") +py_cobjectnames(#11344, "__weakref__") +py_cmembers_versioned(#11333, "__weakref__", #11344, "2") +py_cmembers_versioned(#11333, ".super.", #10021, "2") +py_cobjectnames(#11333, "site._Helper") +py_cobjects(#11332) +py_cobjecttypes(#11332, #11333) +py_cobject_sources(#11332, 0) +py_cobjectnames(#11332, "object") +py_cmembers_versioned(#10760, "help", #11332, "2") +#11351 = @"C_builtin_function_or_method$builtins.hex" +py_cobjects(#11351) +py_cobjecttypes(#11351, #10075) +py_cobject_sources(#11351, 0) +py_cobjectnames(#11351, "hex") +py_cmembers_versioned(#10760, "hex", #11351, "2") +#11352 = @"C_builtin_function_or_method$builtins.id" +py_cobjects(#11352) +py_cobjecttypes(#11352, #10075) +py_cobject_sources(#11352, 0) +py_cobjectnames(#11352, "id") +py_cmembers_versioned(#10760, "id", #11352, "2") +#11353 = @"C_builtin_function_or_method$builtins.input" +py_cobjects(#11353) +py_cobjecttypes(#11353, #10075) +py_cobject_sources(#11353, 0) +py_cobjectnames(#11353, "input") +py_cmembers_versioned(#10760, "input", #11353, "2") +py_cmembers_versioned(#10760, "int", #10449, "2") +#11354 = @"C_builtin_function_or_method$builtins.intern" +py_cobjects(#11354) +py_cobjecttypes(#11354, #10075) +py_cobject_sources(#11354, 0) +py_cobjectnames(#11354, "intern") +py_cmembers_versioned(#10760, "intern", #11354, "2") +#11355 = @"C_builtin_function_or_method$builtins.isinstance" +py_cobjects(#11355) +py_cobjecttypes(#11355, #10075) +py_cobject_sources(#11355, 0) +py_cobjectnames(#11355, "isinstance") +py_cmembers_versioned(#10760, "isinstance", #11355, "2") +#11356 = @"C_builtin_function_or_method$builtins.issubclass" +py_cobjects(#11356) +py_cobjecttypes(#11356, #10075) +py_cobject_sources(#11356, 0) +py_cobjectnames(#11356, "issubclass") +py_cmembers_versioned(#10760, "issubclass", #11356, "2") +#11357 = @"C_builtin_function_or_method$builtins.iter" +py_cobjects(#11357) +py_cobjecttypes(#11357, #10075) +py_cobject_sources(#11357, 0) +py_cobjectnames(#11357, "iter") +py_cmembers_versioned(#10760, "iter", #11357, "2") +#11358 = @"C_builtin_function_or_method$builtins.len" +py_cobjects(#11358) +py_cobjecttypes(#11358, #10075) +py_cobject_sources(#11358, 0) +py_cobjectnames(#11358, "len") +py_cmembers_versioned(#10760, "len", #11358, "2") +#11359 = @"C_module$__builtin__$2license" +py_cobjects(#11359) +py_cobjecttypes(#11359, #11125) +py_cobject_sources(#11359, 0) +py_cobjectnames(#11359, "object") +py_cmembers_versioned(#10760, "license", #11359, "2") +#11360 = @"C_type$list" +py_cobjects(#11360) +py_cobjecttypes(#11360, #10001) +py_cobject_sources(#11360, 0) +#11361 = @"C_type$list$2__add__" +py_cobjects(#11361) +py_cobjecttypes(#11361, #10005) +py_cobject_sources(#11361, 0) +py_cobjectnames(#11361, "__add__") +py_cmembers_versioned(#11360, "__add__", #11361, "2") +#11362 = @"C_type$list$2__contains__" +py_cobjects(#11362) +py_cobjecttypes(#11362, #10005) +py_cobject_sources(#11362, 0) +py_cobjectnames(#11362, "__contains__") +py_cmembers_versioned(#11360, "__contains__", #11362, "2") +#11363 = @"C_type$list$2__delitem__" +py_cobjects(#11363) +py_cobjecttypes(#11363, #10005) +py_cobject_sources(#11363, 0) +py_cobjectnames(#11363, "__delitem__") +py_cmembers_versioned(#11360, "__delitem__", #11363, "2") +#11364 = @"C_type$list$2__delslice__" +py_cobjects(#11364) +py_cobjecttypes(#11364, #10005) +py_cobject_sources(#11364, 0) +py_cobjectnames(#11364, "__delslice__") +py_cmembers_versioned(#11360, "__delslice__", #11364, "2") +#11365 = @"C_bytes$e11af338beeb141135c0e1af1300e77bd0820043" +py_cobjects(#11365) +py_cobjecttypes(#11365, #10028) +py_cobject_sources(#11365, 0) +py_cobjectnames(#11365, "b'list() -> new empty list +list(iterable) -> new list initialized from iterable's items'") +py_cmembers_versioned(#11360, "__doc__", #11365, "2") +#11366 = @"C_type$list$2__eq__" +py_cobjects(#11366) +py_cobjecttypes(#11366, #10005) +py_cobject_sources(#11366, 0) +py_cobjectnames(#11366, "__eq__") +py_cmembers_versioned(#11360, "__eq__", #11366, "2") +#11367 = @"C_type$list$2__ge__" +py_cobjects(#11367) +py_cobjecttypes(#11367, #10005) +py_cobject_sources(#11367, 0) +py_cobjectnames(#11367, "__ge__") +py_cmembers_versioned(#11360, "__ge__", #11367, "2") +#11368 = @"C_type$list$2__getattribute__" +py_cobjects(#11368) +py_cobjecttypes(#11368, #10005) +py_cobject_sources(#11368, 0) +py_cobjectnames(#11368, "__getattribute__") +py_cmembers_versioned(#11360, "__getattribute__", #11368, "2") +#11369 = @"C_type$list$2__getitem__" +py_cobjects(#11369) +py_cobjecttypes(#11369, #10034) +py_cobject_sources(#11369, 0) +py_cobjectnames(#11369, "__getitem__") +py_cmembers_versioned(#11360, "__getitem__", #11369, "2") +#11370 = @"C_type$list$2__getslice__" +py_cobjects(#11370) +py_cobjecttypes(#11370, #10005) +py_cobject_sources(#11370, 0) +py_cobjectnames(#11370, "__getslice__") +py_cmembers_versioned(#11360, "__getslice__", #11370, "2") +#11371 = @"C_type$list$2__gt__" +py_cobjects(#11371) +py_cobjecttypes(#11371, #10005) +py_cobject_sources(#11371, 0) +py_cobjectnames(#11371, "__gt__") +py_cmembers_versioned(#11360, "__gt__", #11371, "2") +py_cmembers_versioned(#11360, "__hash__", #10017, "2") +#11372 = @"C_type$list$2__iadd__" +py_cobjects(#11372) +py_cobjecttypes(#11372, #10005) +py_cobject_sources(#11372, 0) +py_cobjectnames(#11372, "__iadd__") +py_cmembers_versioned(#11360, "__iadd__", #11372, "2") +#11373 = @"C_type$list$2__imul__" +py_cobjects(#11373) +py_cobjecttypes(#11373, #10005) +py_cobject_sources(#11373, 0) +py_cobjectnames(#11373, "__imul__") +py_cmembers_versioned(#11360, "__imul__", #11373, "2") +#11374 = @"C_type$list$2__init__" +py_cobjects(#11374) +py_cobjecttypes(#11374, #10005) +py_cobject_sources(#11374, 0) +py_cobjectnames(#11374, "__init__") +py_cmembers_versioned(#11360, "__init__", #11374, "2") +#11375 = @"C_type$list$2__iter__" +py_cobjects(#11375) +py_cobjecttypes(#11375, #10005) +py_cobject_sources(#11375, 0) +py_cobjectnames(#11375, "__iter__") +py_cmembers_versioned(#11360, "__iter__", #11375, "2") +#11376 = @"C_type$list$2__le__" +py_cobjects(#11376) +py_cobjecttypes(#11376, #10005) +py_cobject_sources(#11376, 0) +py_cobjectnames(#11376, "__le__") +py_cmembers_versioned(#11360, "__le__", #11376, "2") +#11377 = @"C_type$list$2__len__" +py_cobjects(#11377) +py_cobjecttypes(#11377, #10005) +py_cobject_sources(#11377, 0) +py_cobjectnames(#11377, "__len__") +py_cmembers_versioned(#11360, "__len__", #11377, "2") +#11378 = @"C_type$list$2__lt__" +py_cobjects(#11378) +py_cobjecttypes(#11378, #10005) +py_cobject_sources(#11378, 0) +py_cobjectnames(#11378, "__lt__") +py_cmembers_versioned(#11360, "__lt__", #11378, "2") +#11379 = @"C_type$list$2__mul__" +py_cobjects(#11379) +py_cobjecttypes(#11379, #10005) +py_cobject_sources(#11379, 0) +py_cobjectnames(#11379, "__mul__") +py_cmembers_versioned(#11360, "__mul__", #11379, "2") +#11380 = @"C_type$list$2__ne__" +py_cobjects(#11380) +py_cobjecttypes(#11380, #10005) +py_cobject_sources(#11380, 0) +py_cobjectnames(#11380, "__ne__") +py_cmembers_versioned(#11360, "__ne__", #11380, "2") +#11381 = @"C_type$list$2__new__" +py_cobjects(#11381) +py_cobjecttypes(#11381, #10075) +py_cobject_sources(#11381, 0) +py_cobjectnames(#11381, "__new__") +py_cmembers_versioned(#11360, "__new__", #11381, "2") +#11382 = @"C_type$list$2__repr__" +py_cobjects(#11382) +py_cobjecttypes(#11382, #10005) +py_cobject_sources(#11382, 0) +py_cobjectnames(#11382, "__repr__") +py_cmembers_versioned(#11360, "__repr__", #11382, "2") +#11383 = @"C_type$list$2__reversed__" +py_cobjects(#11383) +py_cobjecttypes(#11383, #10034) +py_cobject_sources(#11383, 0) +py_cobjectnames(#11383, "__reversed__") +py_cmembers_versioned(#11360, "__reversed__", #11383, "2") +#11384 = @"C_type$list$2__rmul__" +py_cobjects(#11384) +py_cobjecttypes(#11384, #10005) +py_cobject_sources(#11384, 0) +py_cobjectnames(#11384, "__rmul__") +py_cmembers_versioned(#11360, "__rmul__", #11384, "2") +#11385 = @"C_type$list$2__setitem__" +py_cobjects(#11385) +py_cobjecttypes(#11385, #10005) +py_cobject_sources(#11385, 0) +py_cobjectnames(#11385, "__setitem__") +py_cmembers_versioned(#11360, "__setitem__", #11385, "2") +#11386 = @"C_type$list$2__setslice__" +py_cobjects(#11386) +py_cobjecttypes(#11386, #10005) +py_cobject_sources(#11386, 0) +py_cobjectnames(#11386, "__setslice__") +py_cmembers_versioned(#11360, "__setslice__", #11386, "2") +#11387 = @"C_type$list$2__sizeof__" +py_cobjects(#11387) +py_cobjecttypes(#11387, #10034) +py_cobject_sources(#11387, 0) +py_cobjectnames(#11387, "__sizeof__") +py_cmembers_versioned(#11360, "__sizeof__", #11387, "2") +#11388 = @"C_type$list$2append" +py_cobjects(#11388) +py_cobjecttypes(#11388, #10034) +py_cobject_sources(#11388, 0) +py_cobjectnames(#11388, "append") +py_cmembers_versioned(#11360, "append", #11388, "2") +#11389 = @"C_type$list$2count" +py_cobjects(#11389) +py_cobjecttypes(#11389, #10034) +py_cobject_sources(#11389, 0) +py_cobjectnames(#11389, "count") +py_cmembers_versioned(#11360, "count", #11389, "2") +#11390 = @"C_type$list$2extend" +py_cobjects(#11390) +py_cobjecttypes(#11390, #10034) +py_cobject_sources(#11390, 0) +py_cobjectnames(#11390, "extend") +py_cmembers_versioned(#11360, "extend", #11390, "2") +#11391 = @"C_type$list$2index" +py_cobjects(#11391) +py_cobjecttypes(#11391, #10034) +py_cobject_sources(#11391, 0) +py_cobjectnames(#11391, "index") +py_cmembers_versioned(#11360, "index", #11391, "2") +#11392 = @"C_type$list$2insert" +py_cobjects(#11392) +py_cobjecttypes(#11392, #10034) +py_cobject_sources(#11392, 0) +py_cobjectnames(#11392, "insert") +py_cmembers_versioned(#11360, "insert", #11392, "2") +#11393 = @"C_type$list$2pop" +py_cobjects(#11393) +py_cobjecttypes(#11393, #10034) +py_cobject_sources(#11393, 0) +py_cobjectnames(#11393, "pop") +py_cmembers_versioned(#11360, "pop", #11393, "2") +#11394 = @"C_type$list$2remove" +py_cobjects(#11394) +py_cobjecttypes(#11394, #10034) +py_cobject_sources(#11394, 0) +py_cobjectnames(#11394, "remove") +py_cmembers_versioned(#11360, "remove", #11394, "2") +#11395 = @"C_type$list$2reverse" +py_cobjects(#11395) +py_cobjecttypes(#11395, #10034) +py_cobject_sources(#11395, 0) +py_cobjectnames(#11395, "reverse") +py_cmembers_versioned(#11360, "reverse", #11395, "2") +#11396 = @"C_type$list$2sort" +py_cobjects(#11396) +py_cobjecttypes(#11396, #10034) +py_cobject_sources(#11396, 0) +py_cobjectnames(#11396, "sort") +py_cmembers_versioned(#11360, "sort", #11396, "2") +py_cmembers_versioned(#11360, ".super.", #10021, "2") +py_cobjectnames(#11360, "list") +py_cmembers_versioned(#10760, "list", #11360, "2") +#11397 = @"C_builtin_function_or_method$builtins.locals" +py_cobjects(#11397) +py_cobjecttypes(#11397, #10075) +py_cobject_sources(#11397, 0) +py_cobjectnames(#11397, "locals") +py_cmembers_versioned(#10760, "locals", #11397, "2") +py_cmembers_versioned(#10760, "long", #10645, "2") +#11398 = @"C_builtin_function_or_method$builtins.map" +py_cobjects(#11398) +py_cobjecttypes(#11398, #10075) +py_cobject_sources(#11398, 0) +py_cobjectnames(#11398, "map") +py_cmembers_versioned(#10760, "map", #11398, "2") +#11399 = @"C_builtin_function_or_method$builtins.max" +py_cobjects(#11399) +py_cobjecttypes(#11399, #10075) +py_cobject_sources(#11399, 0) +py_cobjectnames(#11399, "max") +py_cmembers_versioned(#10760, "max", #11399, "2") +#11400 = @"C_type$memoryview" +py_cobjects(#11400) +py_cobjecttypes(#11400, #10001) +py_cobject_sources(#11400, 0) +#11401 = @"C_type$memoryview$2__delitem__" +py_cobjects(#11401) +py_cobjecttypes(#11401, #10005) +py_cobject_sources(#11401, 0) +py_cobjectnames(#11401, "__delitem__") +py_cmembers_versioned(#11400, "__delitem__", #11401, "2") +#11402 = @"C_bytes$b3ac8d0c2d7a0879057bd5af570219c76d846a9b" +py_cobjects(#11402) +py_cobjecttypes(#11402, #10028) +py_cobject_sources(#11402, 0) +py_cobjectnames(#11402, "b'memoryview(object) + +Create a new memoryview object which references the given object.'") +py_cmembers_versioned(#11400, "__doc__", #11402, "2") +#11403 = @"C_type$memoryview$2__eq__" +py_cobjects(#11403) +py_cobjecttypes(#11403, #10005) +py_cobject_sources(#11403, 0) +py_cobjectnames(#11403, "__eq__") +py_cmembers_versioned(#11400, "__eq__", #11403, "2") +#11404 = @"C_type$memoryview$2__ge__" +py_cobjects(#11404) +py_cobjecttypes(#11404, #10005) +py_cobject_sources(#11404, 0) +py_cobjectnames(#11404, "__ge__") +py_cmembers_versioned(#11400, "__ge__", #11404, "2") +#11405 = @"C_type$memoryview$2__getattribute__" +py_cobjects(#11405) +py_cobjecttypes(#11405, #10005) +py_cobject_sources(#11405, 0) +py_cobjectnames(#11405, "__getattribute__") +py_cmembers_versioned(#11400, "__getattribute__", #11405, "2") +#11406 = @"C_type$memoryview$2__getitem__" +py_cobjects(#11406) +py_cobjecttypes(#11406, #10005) +py_cobject_sources(#11406, 0) +py_cobjectnames(#11406, "__getitem__") +py_cmembers_versioned(#11400, "__getitem__", #11406, "2") +#11407 = @"C_type$memoryview$2__gt__" +py_cobjects(#11407) +py_cobjecttypes(#11407, #10005) +py_cobject_sources(#11407, 0) +py_cobjectnames(#11407, "__gt__") +py_cmembers_versioned(#11400, "__gt__", #11407, "2") +#11408 = @"C_type$memoryview$2__le__" +py_cobjects(#11408) +py_cobjecttypes(#11408, #10005) +py_cobject_sources(#11408, 0) +py_cobjectnames(#11408, "__le__") +py_cmembers_versioned(#11400, "__le__", #11408, "2") +#11409 = @"C_type$memoryview$2__len__" +py_cobjects(#11409) +py_cobjecttypes(#11409, #10005) +py_cobject_sources(#11409, 0) +py_cobjectnames(#11409, "__len__") +py_cmembers_versioned(#11400, "__len__", #11409, "2") +#11410 = @"C_type$memoryview$2__lt__" +py_cobjects(#11410) +py_cobjecttypes(#11410, #10005) +py_cobject_sources(#11410, 0) +py_cobjectnames(#11410, "__lt__") +py_cmembers_versioned(#11400, "__lt__", #11410, "2") +#11411 = @"C_type$memoryview$2__ne__" +py_cobjects(#11411) +py_cobjecttypes(#11411, #10005) +py_cobject_sources(#11411, 0) +py_cobjectnames(#11411, "__ne__") +py_cmembers_versioned(#11400, "__ne__", #11411, "2") +#11412 = @"C_type$memoryview$2__new__" +py_cobjects(#11412) +py_cobjecttypes(#11412, #10075) +py_cobject_sources(#11412, 0) +py_cobjectnames(#11412, "__new__") +py_cmembers_versioned(#11400, "__new__", #11412, "2") +#11413 = @"C_type$memoryview$2__repr__" +py_cobjects(#11413) +py_cobjecttypes(#11413, #10005) +py_cobject_sources(#11413, 0) +py_cobjectnames(#11413, "__repr__") +py_cmembers_versioned(#11400, "__repr__", #11413, "2") +#11414 = @"C_type$memoryview$2__setitem__" +py_cobjects(#11414) +py_cobjecttypes(#11414, #10005) +py_cobject_sources(#11414, 0) +py_cobjectnames(#11414, "__setitem__") +py_cmembers_versioned(#11400, "__setitem__", #11414, "2") +#11415 = @"C_type$memoryview$2format" +py_cobjects(#11415) +py_cobjecttypes(#11415, #10003) +py_cobject_sources(#11415, 0) +#11416 = @"C_type$memoryview$2format$2__set__" +py_cobjects(#11416) +py_cobjecttypes(#11416, #10009) +py_cobject_sources(#11416, 0) +py_cobjectnames(#11416, "__set__") +py_cmembers_versioned(#11415, "__set__", #11416, "2") +#11417 = @"C_type$memoryview$2format$2__getattribute__" +py_cobjects(#11417) +py_cobjecttypes(#11417, #10009) +py_cobject_sources(#11417, 0) +py_cobjectnames(#11417, "__getattribute__") +py_cmembers_versioned(#11415, "__getattribute__", #11417, "2") +py_cmembers_versioned(#11415, "__objclass__", #11400, "2") +#11418 = @"C_type$memoryview$2format$2__repr__" +py_cobjects(#11418) +py_cobjecttypes(#11418, #10009) +py_cobject_sources(#11418, 0) +py_cobjectnames(#11418, "__repr__") +py_cmembers_versioned(#11415, "__repr__", #11418, "2") +#11419 = @"C_type$memoryview$2format$2__get__" +py_cobjects(#11419) +py_cobjecttypes(#11419, #10009) +py_cobject_sources(#11419, 0) +py_cobjectnames(#11419, "__get__") +py_cmembers_versioned(#11415, "__get__", #11419, "2") +py_cmembers_versioned(#11415, "__doc__", #10017, "2") +#11420 = @"C_type$memoryview$2format$2__delete__" +py_cobjects(#11420) +py_cobjecttypes(#11420, #10009) +py_cobject_sources(#11420, 0) +py_cobjectnames(#11420, "__delete__") +py_cmembers_versioned(#11415, "__delete__", #11420, "2") +py_cobjectnames(#11415, "format") +py_cmembers_versioned(#11400, "format", #11415, "2") +#11421 = @"C_type$memoryview$2itemsize" +py_cobjects(#11421) +py_cobjecttypes(#11421, #10003) +py_cobject_sources(#11421, 0) +#11422 = @"C_type$memoryview$2itemsize$2__set__" +py_cobjects(#11422) +py_cobjecttypes(#11422, #10009) +py_cobject_sources(#11422, 0) +py_cobjectnames(#11422, "__set__") +py_cmembers_versioned(#11421, "__set__", #11422, "2") +#11423 = @"C_type$memoryview$2itemsize$2__getattribute__" +py_cobjects(#11423) +py_cobjecttypes(#11423, #10009) +py_cobject_sources(#11423, 0) +py_cobjectnames(#11423, "__getattribute__") +py_cmembers_versioned(#11421, "__getattribute__", #11423, "2") +py_cmembers_versioned(#11421, "__objclass__", #11400, "2") +#11424 = @"C_type$memoryview$2itemsize$2__repr__" +py_cobjects(#11424) +py_cobjecttypes(#11424, #10009) +py_cobject_sources(#11424, 0) +py_cobjectnames(#11424, "__repr__") +py_cmembers_versioned(#11421, "__repr__", #11424, "2") +#11425 = @"C_type$memoryview$2itemsize$2__get__" +py_cobjects(#11425) +py_cobjecttypes(#11425, #10009) +py_cobject_sources(#11425, 0) +py_cobjectnames(#11425, "__get__") +py_cmembers_versioned(#11421, "__get__", #11425, "2") +py_cmembers_versioned(#11421, "__doc__", #10017, "2") +#11426 = @"C_type$memoryview$2itemsize$2__delete__" +py_cobjects(#11426) +py_cobjecttypes(#11426, #10009) +py_cobject_sources(#11426, 0) +py_cobjectnames(#11426, "__delete__") +py_cmembers_versioned(#11421, "__delete__", #11426, "2") +py_cobjectnames(#11421, "itemsize") +py_cmembers_versioned(#11400, "itemsize", #11421, "2") +#11427 = @"C_type$memoryview$2ndim" +py_cobjects(#11427) +py_cobjecttypes(#11427, #10003) +py_cobject_sources(#11427, 0) +#11428 = @"C_type$memoryview$2ndim$2__set__" +py_cobjects(#11428) +py_cobjecttypes(#11428, #10009) +py_cobject_sources(#11428, 0) +py_cobjectnames(#11428, "__set__") +py_cmembers_versioned(#11427, "__set__", #11428, "2") +#11429 = @"C_type$memoryview$2ndim$2__getattribute__" +py_cobjects(#11429) +py_cobjecttypes(#11429, #10009) +py_cobject_sources(#11429, 0) +py_cobjectnames(#11429, "__getattribute__") +py_cmembers_versioned(#11427, "__getattribute__", #11429, "2") +py_cmembers_versioned(#11427, "__objclass__", #11400, "2") +#11430 = @"C_type$memoryview$2ndim$2__repr__" +py_cobjects(#11430) +py_cobjecttypes(#11430, #10009) +py_cobject_sources(#11430, 0) +py_cobjectnames(#11430, "__repr__") +py_cmembers_versioned(#11427, "__repr__", #11430, "2") +#11431 = @"C_type$memoryview$2ndim$2__get__" +py_cobjects(#11431) +py_cobjecttypes(#11431, #10009) +py_cobject_sources(#11431, 0) +py_cobjectnames(#11431, "__get__") +py_cmembers_versioned(#11427, "__get__", #11431, "2") +py_cmembers_versioned(#11427, "__doc__", #10017, "2") +#11432 = @"C_type$memoryview$2ndim$2__delete__" +py_cobjects(#11432) +py_cobjecttypes(#11432, #10009) +py_cobject_sources(#11432, 0) +py_cobjectnames(#11432, "__delete__") +py_cmembers_versioned(#11427, "__delete__", #11432, "2") +py_cobjectnames(#11427, "ndim") +py_cmembers_versioned(#11400, "ndim", #11427, "2") +#11433 = @"C_type$memoryview$2readonly" +py_cobjects(#11433) +py_cobjecttypes(#11433, #10003) +py_cobject_sources(#11433, 0) +#11434 = @"C_type$memoryview$2readonly$2__set__" +py_cobjects(#11434) +py_cobjecttypes(#11434, #10009) +py_cobject_sources(#11434, 0) +py_cobjectnames(#11434, "__set__") +py_cmembers_versioned(#11433, "__set__", #11434, "2") +#11435 = @"C_type$memoryview$2readonly$2__getattribute__" +py_cobjects(#11435) +py_cobjecttypes(#11435, #10009) +py_cobject_sources(#11435, 0) +py_cobjectnames(#11435, "__getattribute__") +py_cmembers_versioned(#11433, "__getattribute__", #11435, "2") +py_cmembers_versioned(#11433, "__objclass__", #11400, "2") +#11436 = @"C_type$memoryview$2readonly$2__repr__" +py_cobjects(#11436) +py_cobjecttypes(#11436, #10009) +py_cobject_sources(#11436, 0) +py_cobjectnames(#11436, "__repr__") +py_cmembers_versioned(#11433, "__repr__", #11436, "2") +#11437 = @"C_type$memoryview$2readonly$2__get__" +py_cobjects(#11437) +py_cobjecttypes(#11437, #10009) +py_cobject_sources(#11437, 0) +py_cobjectnames(#11437, "__get__") +py_cmembers_versioned(#11433, "__get__", #11437, "2") +py_cmembers_versioned(#11433, "__doc__", #10017, "2") +#11438 = @"C_type$memoryview$2readonly$2__delete__" +py_cobjects(#11438) +py_cobjecttypes(#11438, #10009) +py_cobject_sources(#11438, 0) +py_cobjectnames(#11438, "__delete__") +py_cmembers_versioned(#11433, "__delete__", #11438, "2") +py_cobjectnames(#11433, "readonly") +py_cmembers_versioned(#11400, "readonly", #11433, "2") +#11439 = @"C_type$memoryview$2shape" +py_cobjects(#11439) +py_cobjecttypes(#11439, #10003) +py_cobject_sources(#11439, 0) +#11440 = @"C_type$memoryview$2shape$2__set__" +py_cobjects(#11440) +py_cobjecttypes(#11440, #10009) +py_cobject_sources(#11440, 0) +py_cobjectnames(#11440, "__set__") +py_cmembers_versioned(#11439, "__set__", #11440, "2") +#11441 = @"C_type$memoryview$2shape$2__getattribute__" +py_cobjects(#11441) +py_cobjecttypes(#11441, #10009) +py_cobject_sources(#11441, 0) +py_cobjectnames(#11441, "__getattribute__") +py_cmembers_versioned(#11439, "__getattribute__", #11441, "2") +py_cmembers_versioned(#11439, "__objclass__", #11400, "2") +#11442 = @"C_type$memoryview$2shape$2__repr__" +py_cobjects(#11442) +py_cobjecttypes(#11442, #10009) +py_cobject_sources(#11442, 0) +py_cobjectnames(#11442, "__repr__") +py_cmembers_versioned(#11439, "__repr__", #11442, "2") +#11443 = @"C_type$memoryview$2shape$2__get__" +py_cobjects(#11443) +py_cobjecttypes(#11443, #10009) +py_cobject_sources(#11443, 0) +py_cobjectnames(#11443, "__get__") +py_cmembers_versioned(#11439, "__get__", #11443, "2") +py_cmembers_versioned(#11439, "__doc__", #10017, "2") +#11444 = @"C_type$memoryview$2shape$2__delete__" +py_cobjects(#11444) +py_cobjecttypes(#11444, #10009) +py_cobject_sources(#11444, 0) +py_cobjectnames(#11444, "__delete__") +py_cmembers_versioned(#11439, "__delete__", #11444, "2") +py_cobjectnames(#11439, "shape") +py_cmembers_versioned(#11400, "shape", #11439, "2") +#11445 = @"C_type$memoryview$2strides" +py_cobjects(#11445) +py_cobjecttypes(#11445, #10003) +py_cobject_sources(#11445, 0) +#11446 = @"C_type$memoryview$2strides$2__set__" +py_cobjects(#11446) +py_cobjecttypes(#11446, #10009) +py_cobject_sources(#11446, 0) +py_cobjectnames(#11446, "__set__") +py_cmembers_versioned(#11445, "__set__", #11446, "2") +#11447 = @"C_type$memoryview$2strides$2__getattribute__" +py_cobjects(#11447) +py_cobjecttypes(#11447, #10009) +py_cobject_sources(#11447, 0) +py_cobjectnames(#11447, "__getattribute__") +py_cmembers_versioned(#11445, "__getattribute__", #11447, "2") +py_cmembers_versioned(#11445, "__objclass__", #11400, "2") +#11448 = @"C_type$memoryview$2strides$2__repr__" +py_cobjects(#11448) +py_cobjecttypes(#11448, #10009) +py_cobject_sources(#11448, 0) +py_cobjectnames(#11448, "__repr__") +py_cmembers_versioned(#11445, "__repr__", #11448, "2") +#11449 = @"C_type$memoryview$2strides$2__get__" +py_cobjects(#11449) +py_cobjecttypes(#11449, #10009) +py_cobject_sources(#11449, 0) +py_cobjectnames(#11449, "__get__") +py_cmembers_versioned(#11445, "__get__", #11449, "2") +py_cmembers_versioned(#11445, "__doc__", #10017, "2") +#11450 = @"C_type$memoryview$2strides$2__delete__" +py_cobjects(#11450) +py_cobjecttypes(#11450, #10009) +py_cobject_sources(#11450, 0) +py_cobjectnames(#11450, "__delete__") +py_cmembers_versioned(#11445, "__delete__", #11450, "2") +py_cobjectnames(#11445, "strides") +py_cmembers_versioned(#11400, "strides", #11445, "2") +#11451 = @"C_type$memoryview$2suboffsets" +py_cobjects(#11451) +py_cobjecttypes(#11451, #10003) +py_cobject_sources(#11451, 0) +#11452 = @"C_type$memoryview$2suboffsets$2__set__" +py_cobjects(#11452) +py_cobjecttypes(#11452, #10009) +py_cobject_sources(#11452, 0) +py_cobjectnames(#11452, "__set__") +py_cmembers_versioned(#11451, "__set__", #11452, "2") +#11453 = @"C_type$memoryview$2suboffsets$2__getattribute__" +py_cobjects(#11453) +py_cobjecttypes(#11453, #10009) +py_cobject_sources(#11453, 0) +py_cobjectnames(#11453, "__getattribute__") +py_cmembers_versioned(#11451, "__getattribute__", #11453, "2") +py_cmembers_versioned(#11451, "__objclass__", #11400, "2") +#11454 = @"C_type$memoryview$2suboffsets$2__repr__" +py_cobjects(#11454) +py_cobjecttypes(#11454, #10009) +py_cobject_sources(#11454, 0) +py_cobjectnames(#11454, "__repr__") +py_cmembers_versioned(#11451, "__repr__", #11454, "2") +#11455 = @"C_type$memoryview$2suboffsets$2__get__" +py_cobjects(#11455) +py_cobjecttypes(#11455, #10009) +py_cobject_sources(#11455, 0) +py_cobjectnames(#11455, "__get__") +py_cmembers_versioned(#11451, "__get__", #11455, "2") +py_cmembers_versioned(#11451, "__doc__", #10017, "2") +#11456 = @"C_type$memoryview$2suboffsets$2__delete__" +py_cobjects(#11456) +py_cobjecttypes(#11456, #10009) +py_cobject_sources(#11456, 0) +py_cobjectnames(#11456, "__delete__") +py_cmembers_versioned(#11451, "__delete__", #11456, "2") +py_cobjectnames(#11451, "suboffsets") +py_cmembers_versioned(#11400, "suboffsets", #11451, "2") +#11457 = @"C_type$memoryview$2tobytes" +py_cobjects(#11457) +py_cobjecttypes(#11457, #10034) +py_cobject_sources(#11457, 0) +py_cobjectnames(#11457, "tobytes") +py_cmembers_versioned(#11400, "tobytes", #11457, "2") +#11458 = @"C_type$memoryview$2tolist" +py_cobjects(#11458) +py_cobjecttypes(#11458, #10034) +py_cobject_sources(#11458, 0) +py_cobjectnames(#11458, "tolist") +py_cmembers_versioned(#11400, "tolist", #11458, "2") +py_cmembers_versioned(#11400, ".super.", #10021, "2") +py_cobjectnames(#11400, "memoryview") +py_cmembers_versioned(#10760, "memoryview", #11400, "2") +#11459 = @"C_builtin_function_or_method$builtins.min" +py_cobjects(#11459) +py_cobjecttypes(#11459, #10075) +py_cobject_sources(#11459, 0) +py_cobjectnames(#11459, "min") +py_cmembers_versioned(#10760, "min", #11459, "2") +#11460 = @"C_builtin_function_or_method$builtins.next" +py_cobjects(#11460) +py_cobjecttypes(#11460, #10075) +py_cobject_sources(#11460, 0) +py_cobjectnames(#11460, "next") +py_cmembers_versioned(#10760, "next", #11460, "2") +py_cmembers_versioned(#10760, "object", #10021, "2") +#11461 = @"C_builtin_function_or_method$builtins.oct" +py_cobjects(#11461) +py_cobjecttypes(#11461, #10075) +py_cobject_sources(#11461, 0) +py_cobjectnames(#11461, "oct") +py_cmembers_versioned(#10760, "oct", #11461, "2") +#11462 = @"C_builtin_function_or_method$builtins.open" +py_cobjects(#11462) +py_cobjecttypes(#11462, #10075) +py_cobject_sources(#11462, 0) +py_cobjectnames(#11462, "open") +py_cmembers_versioned(#10760, "open", #11462, "2") +#11463 = @"C_builtin_function_or_method$builtins.ord" +py_cobjects(#11463) +py_cobjecttypes(#11463, #10075) +py_cobject_sources(#11463, 0) +py_cobjectnames(#11463, "ord") +py_cmembers_versioned(#10760, "ord", #11463, "2") +#11464 = @"C_builtin_function_or_method$builtins.pow" +py_cobjects(#11464) +py_cobjecttypes(#11464, #10075) +py_cobject_sources(#11464, 0) +py_cobjectnames(#11464, "pow") +py_cmembers_versioned(#10760, "pow", #11464, "2") +#11465 = @"C_builtin_function_or_method$builtins.print" +py_cobjects(#11465) +py_cobjecttypes(#11465, #10075) +py_cobject_sources(#11465, 0) +py_cobjectnames(#11465, "print") +py_cmembers_versioned(#10760, "print", #11465, "2") +#11466 = @"C_type$property" +py_cobjects(#11466) +py_cobjecttypes(#11466, #10001) +py_cobject_sources(#11466, 0) +#11467 = @"C_type$property$2__delete__" +py_cobjects(#11467) +py_cobjecttypes(#11467, #10005) +py_cobject_sources(#11467, 0) +py_cobjectnames(#11467, "__delete__") +py_cmembers_versioned(#11466, "__delete__", #11467, "2") +#11468 = @"C_type$property$2__doc__" +py_cobjects(#11468) +py_cobjecttypes(#11468, #10045) +py_cobject_sources(#11468, 0) +py_cobjectnames(#11468, "__doc__") +py_cmembers_versioned(#11466, "__doc__", #11468, "2") +#11469 = @"C_type$property$2__get__" +py_cobjects(#11469) +py_cobjecttypes(#11469, #10005) +py_cobject_sources(#11469, 0) +py_cobjectnames(#11469, "__get__") +py_cmembers_versioned(#11466, "__get__", #11469, "2") +#11470 = @"C_type$property$2__getattribute__" +py_cobjects(#11470) +py_cobjecttypes(#11470, #10005) +py_cobject_sources(#11470, 0) +py_cobjectnames(#11470, "__getattribute__") +py_cmembers_versioned(#11466, "__getattribute__", #11470, "2") +#11471 = @"C_type$property$2__init__" +py_cobjects(#11471) +py_cobjecttypes(#11471, #10005) +py_cobject_sources(#11471, 0) +py_cobjectnames(#11471, "__init__") +py_cmembers_versioned(#11466, "__init__", #11471, "2") +#11472 = @"C_type$property$2__new__" +py_cobjects(#11472) +py_cobjecttypes(#11472, #10075) +py_cobject_sources(#11472, 0) +py_cobjectnames(#11472, "__new__") +py_cmembers_versioned(#11466, "__new__", #11472, "2") +#11473 = @"C_type$property$2__set__" +py_cobjects(#11473) +py_cobjecttypes(#11473, #10005) +py_cobject_sources(#11473, 0) +py_cobjectnames(#11473, "__set__") +py_cmembers_versioned(#11466, "__set__", #11473, "2") +#11474 = @"C_type$property$2deleter" +py_cobjects(#11474) +py_cobjecttypes(#11474, #10034) +py_cobject_sources(#11474, 0) +py_cobjectnames(#11474, "deleter") +py_cmembers_versioned(#11466, "deleter", #11474, "2") +#11475 = @"C_type$property$2fdel" +py_cobjects(#11475) +py_cobjecttypes(#11475, #10045) +py_cobject_sources(#11475, 0) +py_cobjectnames(#11475, "fdel") +py_cmembers_versioned(#11466, "fdel", #11475, "2") +#11476 = @"C_type$property$2fget" +py_cobjects(#11476) +py_cobjecttypes(#11476, #10045) +py_cobject_sources(#11476, 0) +py_cobjectnames(#11476, "fget") +py_cmembers_versioned(#11466, "fget", #11476, "2") +#11477 = @"C_type$property$2fset" +py_cobjects(#11477) +py_cobjecttypes(#11477, #10045) +py_cobject_sources(#11477, 0) +py_cobjectnames(#11477, "fset") +py_cmembers_versioned(#11466, "fset", #11477, "2") +#11478 = @"C_type$property$2getter" +py_cobjects(#11478) +py_cobjecttypes(#11478, #10034) +py_cobject_sources(#11478, 0) +py_cobjectnames(#11478, "getter") +py_cmembers_versioned(#11466, "getter", #11478, "2") +#11479 = @"C_type$property$2setter" +py_cobjects(#11479) +py_cobjecttypes(#11479, #10034) +py_cobject_sources(#11479, 0) +py_cobjectnames(#11479, "setter") +py_cmembers_versioned(#11466, "setter", #11479, "2") +py_cmembers_versioned(#11466, ".super.", #10021, "2") +py_cobjectnames(#11466, "property") +py_cmembers_versioned(#10760, "property", #11466, "2") +#11480 = @"C_module$__builtin__$2quit" +py_cobjects(#11480) +py_cobjecttypes(#11480, #11161) +py_cobject_sources(#11480, 0) +py_cobjectnames(#11480, "object") +py_cmembers_versioned(#10760, "quit", #11480, "2") +#11481 = @"C_builtin_function_or_method$builtins.range" +py_cobjects(#11481) +py_cobjecttypes(#11481, #10075) +py_cobject_sources(#11481, 0) +py_cobjectnames(#11481, "range") +py_cmembers_versioned(#10760, "range", #11481, "2") +#11482 = @"C_builtin_function_or_method$builtins.raw_input" +py_cobjects(#11482) +py_cobjecttypes(#11482, #10075) +py_cobject_sources(#11482, 0) +py_cobjectnames(#11482, "raw_input") +py_cmembers_versioned(#10760, "raw_input", #11482, "2") +#11483 = @"C_builtin_function_or_method$builtins.reduce" +py_cobjects(#11483) +py_cobjecttypes(#11483, #10075) +py_cobject_sources(#11483, 0) +py_cobjectnames(#11483, "reduce") +py_cmembers_versioned(#10760, "reduce", #11483, "2") +#11484 = @"C_builtin_function_or_method$builtins.reload" +py_cobjects(#11484) +py_cobjecttypes(#11484, #10075) +py_cobject_sources(#11484, 0) +py_cobjectnames(#11484, "reload") +py_cmembers_versioned(#10760, "reload", #11484, "2") +#11485 = @"C_builtin_function_or_method$builtins.repr" +py_cobjects(#11485) +py_cobjecttypes(#11485, #10075) +py_cobject_sources(#11485, 0) +py_cobjectnames(#11485, "repr") +py_cmembers_versioned(#10760, "repr", #11485, "2") +#11486 = @"C_type$reversed" +py_cobjects(#11486) +py_cobjecttypes(#11486, #10001) +py_cobject_sources(#11486, 0) +#11487 = @"C_bytes$6da37b9b1c31af888f1f9f59964dfc588ba6792d" +py_cobjects(#11487) +py_cobjecttypes(#11487, #10028) +py_cobject_sources(#11487, 0) +py_cobjectnames(#11487, "b'reversed(sequence) -> reverse iterator over values of the sequence + +Return a reverse iterator'") +py_cmembers_versioned(#11486, "__doc__", #11487, "2") +#11488 = @"C_type$reversed$2__getattribute__" +py_cobjects(#11488) +py_cobjecttypes(#11488, #10005) +py_cobject_sources(#11488, 0) +py_cobjectnames(#11488, "__getattribute__") +py_cmembers_versioned(#11486, "__getattribute__", #11488, "2") +#11489 = @"C_type$reversed$2__iter__" +py_cobjects(#11489) +py_cobjecttypes(#11489, #10005) +py_cobject_sources(#11489, 0) +py_cobjectnames(#11489, "__iter__") +py_cmembers_versioned(#11486, "__iter__", #11489, "2") +#11490 = @"C_type$reversed$2__length_hint__" +py_cobjects(#11490) +py_cobjecttypes(#11490, #10034) +py_cobject_sources(#11490, 0) +py_cobjectnames(#11490, "__length_hint__") +py_cmembers_versioned(#11486, "__length_hint__", #11490, "2") +#11491 = @"C_type$reversed$2__new__" +py_cobjects(#11491) +py_cobjecttypes(#11491, #10075) +py_cobject_sources(#11491, 0) +py_cobjectnames(#11491, "__new__") +py_cmembers_versioned(#11486, "__new__", #11491, "2") +#11492 = @"C_type$reversed$2next" +py_cobjects(#11492) +py_cobjecttypes(#11492, #10005) +py_cobject_sources(#11492, 0) +py_cobjectnames(#11492, "next") +py_cmembers_versioned(#11486, "next", #11492, "2") +py_cmembers_versioned(#11486, ".super.", #10021, "2") +py_cobjectnames(#11486, "reversed") +py_cmembers_versioned(#10760, "reversed", #11486, "2") +#11493 = @"C_builtin_function_or_method$builtins.round" +py_cobjects(#11493) +py_cobjecttypes(#11493, #10075) +py_cobject_sources(#11493, 0) +py_cobjectnames(#11493, "round") +py_cmembers_versioned(#10760, "round", #11493, "2") +#11494 = @"C_type$set" +py_cobjects(#11494) +py_cobjecttypes(#11494, #10001) +py_cobject_sources(#11494, 0) +#11495 = @"C_type$set$2__and__" +py_cobjects(#11495) +py_cobjecttypes(#11495, #10005) +py_cobject_sources(#11495, 0) +py_cobjectnames(#11495, "__and__") +py_cmembers_versioned(#11494, "__and__", #11495, "2") +#11496 = @"C_type$set$2__cmp__" +py_cobjects(#11496) +py_cobjecttypes(#11496, #10005) +py_cobject_sources(#11496, 0) +py_cobjectnames(#11496, "__cmp__") +py_cmembers_versioned(#11494, "__cmp__", #11496, "2") +#11497 = @"C_type$set$2__contains__" +py_cobjects(#11497) +py_cobjecttypes(#11497, #10034) +py_cobject_sources(#11497, 0) +py_cobjectnames(#11497, "__contains__") +py_cmembers_versioned(#11494, "__contains__", #11497, "2") +#11498 = @"C_bytes$a7ef6bafd940a4f5b51773728e9aeb96cfb181c2" +py_cobjects(#11498) +py_cobjecttypes(#11498, #10028) +py_cobject_sources(#11498, 0) +py_cobjectnames(#11498, "b'set() -> new empty set object +set(iterable) -> new set object + +Build an unordered collection of unique elements.'") +py_cmembers_versioned(#11494, "__doc__", #11498, "2") +#11499 = @"C_type$set$2__eq__" +py_cobjects(#11499) +py_cobjecttypes(#11499, #10005) +py_cobject_sources(#11499, 0) +py_cobjectnames(#11499, "__eq__") +py_cmembers_versioned(#11494, "__eq__", #11499, "2") +#11500 = @"C_type$set$2__ge__" +py_cobjects(#11500) +py_cobjecttypes(#11500, #10005) +py_cobject_sources(#11500, 0) +py_cobjectnames(#11500, "__ge__") +py_cmembers_versioned(#11494, "__ge__", #11500, "2") +#11501 = @"C_type$set$2__getattribute__" +py_cobjects(#11501) +py_cobjecttypes(#11501, #10005) +py_cobject_sources(#11501, 0) +py_cobjectnames(#11501, "__getattribute__") +py_cmembers_versioned(#11494, "__getattribute__", #11501, "2") +#11502 = @"C_type$set$2__gt__" +py_cobjects(#11502) +py_cobjecttypes(#11502, #10005) +py_cobject_sources(#11502, 0) +py_cobjectnames(#11502, "__gt__") +py_cmembers_versioned(#11494, "__gt__", #11502, "2") +py_cmembers_versioned(#11494, "__hash__", #10017, "2") +#11503 = @"C_type$set$2__iand__" +py_cobjects(#11503) +py_cobjecttypes(#11503, #10005) +py_cobject_sources(#11503, 0) +py_cobjectnames(#11503, "__iand__") +py_cmembers_versioned(#11494, "__iand__", #11503, "2") +#11504 = @"C_type$set$2__init__" +py_cobjects(#11504) +py_cobjecttypes(#11504, #10005) +py_cobject_sources(#11504, 0) +py_cobjectnames(#11504, "__init__") +py_cmembers_versioned(#11494, "__init__", #11504, "2") +#11505 = @"C_type$set$2__ior__" +py_cobjects(#11505) +py_cobjecttypes(#11505, #10005) +py_cobject_sources(#11505, 0) +py_cobjectnames(#11505, "__ior__") +py_cmembers_versioned(#11494, "__ior__", #11505, "2") +#11506 = @"C_type$set$2__isub__" +py_cobjects(#11506) +py_cobjecttypes(#11506, #10005) +py_cobject_sources(#11506, 0) +py_cobjectnames(#11506, "__isub__") +py_cmembers_versioned(#11494, "__isub__", #11506, "2") +#11507 = @"C_type$set$2__iter__" +py_cobjects(#11507) +py_cobjecttypes(#11507, #10005) +py_cobject_sources(#11507, 0) +py_cobjectnames(#11507, "__iter__") +py_cmembers_versioned(#11494, "__iter__", #11507, "2") +#11508 = @"C_type$set$2__ixor__" +py_cobjects(#11508) +py_cobjecttypes(#11508, #10005) +py_cobject_sources(#11508, 0) +py_cobjectnames(#11508, "__ixor__") +py_cmembers_versioned(#11494, "__ixor__", #11508, "2") +#11509 = @"C_type$set$2__le__" +py_cobjects(#11509) +py_cobjecttypes(#11509, #10005) +py_cobject_sources(#11509, 0) +py_cobjectnames(#11509, "__le__") +py_cmembers_versioned(#11494, "__le__", #11509, "2") +#11510 = @"C_type$set$2__len__" +py_cobjects(#11510) +py_cobjecttypes(#11510, #10005) +py_cobject_sources(#11510, 0) +py_cobjectnames(#11510, "__len__") +py_cmembers_versioned(#11494, "__len__", #11510, "2") +#11511 = @"C_type$set$2__lt__" +py_cobjects(#11511) +py_cobjecttypes(#11511, #10005) +py_cobject_sources(#11511, 0) +py_cobjectnames(#11511, "__lt__") +py_cmembers_versioned(#11494, "__lt__", #11511, "2") +#11512 = @"C_type$set$2__ne__" +py_cobjects(#11512) +py_cobjecttypes(#11512, #10005) +py_cobject_sources(#11512, 0) +py_cobjectnames(#11512, "__ne__") +py_cmembers_versioned(#11494, "__ne__", #11512, "2") +#11513 = @"C_type$set$2__new__" +py_cobjects(#11513) +py_cobjecttypes(#11513, #10075) +py_cobject_sources(#11513, 0) +py_cobjectnames(#11513, "__new__") +py_cmembers_versioned(#11494, "__new__", #11513, "2") +#11514 = @"C_type$set$2__or__" +py_cobjects(#11514) +py_cobjecttypes(#11514, #10005) +py_cobject_sources(#11514, 0) +py_cobjectnames(#11514, "__or__") +py_cmembers_versioned(#11494, "__or__", #11514, "2") +#11515 = @"C_type$set$2__rand__" +py_cobjects(#11515) +py_cobjecttypes(#11515, #10005) +py_cobject_sources(#11515, 0) +py_cobjectnames(#11515, "__rand__") +py_cmembers_versioned(#11494, "__rand__", #11515, "2") +#11516 = @"C_type$set$2__reduce__" +py_cobjects(#11516) +py_cobjecttypes(#11516, #10034) +py_cobject_sources(#11516, 0) +py_cobjectnames(#11516, "__reduce__") +py_cmembers_versioned(#11494, "__reduce__", #11516, "2") +#11517 = @"C_type$set$2__repr__" +py_cobjects(#11517) +py_cobjecttypes(#11517, #10005) +py_cobject_sources(#11517, 0) +py_cobjectnames(#11517, "__repr__") +py_cmembers_versioned(#11494, "__repr__", #11517, "2") +#11518 = @"C_type$set$2__ror__" +py_cobjects(#11518) +py_cobjecttypes(#11518, #10005) +py_cobject_sources(#11518, 0) +py_cobjectnames(#11518, "__ror__") +py_cmembers_versioned(#11494, "__ror__", #11518, "2") +#11519 = @"C_type$set$2__rsub__" +py_cobjects(#11519) +py_cobjecttypes(#11519, #10005) +py_cobject_sources(#11519, 0) +py_cobjectnames(#11519, "__rsub__") +py_cmembers_versioned(#11494, "__rsub__", #11519, "2") +#11520 = @"C_type$set$2__rxor__" +py_cobjects(#11520) +py_cobjecttypes(#11520, #10005) +py_cobject_sources(#11520, 0) +py_cobjectnames(#11520, "__rxor__") +py_cmembers_versioned(#11494, "__rxor__", #11520, "2") +#11521 = @"C_type$set$2__sizeof__" +py_cobjects(#11521) +py_cobjecttypes(#11521, #10034) +py_cobject_sources(#11521, 0) +py_cobjectnames(#11521, "__sizeof__") +py_cmembers_versioned(#11494, "__sizeof__", #11521, "2") +#11522 = @"C_type$set$2__sub__" +py_cobjects(#11522) +py_cobjecttypes(#11522, #10005) +py_cobject_sources(#11522, 0) +py_cobjectnames(#11522, "__sub__") +py_cmembers_versioned(#11494, "__sub__", #11522, "2") +#11523 = @"C_type$set$2__xor__" +py_cobjects(#11523) +py_cobjecttypes(#11523, #10005) +py_cobject_sources(#11523, 0) +py_cobjectnames(#11523, "__xor__") +py_cmembers_versioned(#11494, "__xor__", #11523, "2") +#11524 = @"C_type$set$2add" +py_cobjects(#11524) +py_cobjecttypes(#11524, #10034) +py_cobject_sources(#11524, 0) +py_cobjectnames(#11524, "add") +py_cmembers_versioned(#11494, "add", #11524, "2") +#11525 = @"C_type$set$2clear" +py_cobjects(#11525) +py_cobjecttypes(#11525, #10034) +py_cobject_sources(#11525, 0) +py_cobjectnames(#11525, "clear") +py_cmembers_versioned(#11494, "clear", #11525, "2") +#11526 = @"C_type$set$2copy" +py_cobjects(#11526) +py_cobjecttypes(#11526, #10034) +py_cobject_sources(#11526, 0) +py_cobjectnames(#11526, "copy") +py_cmembers_versioned(#11494, "copy", #11526, "2") +#11527 = @"C_type$set$2difference" +py_cobjects(#11527) +py_cobjecttypes(#11527, #10034) +py_cobject_sources(#11527, 0) +py_cobjectnames(#11527, "difference") +py_cmembers_versioned(#11494, "difference", #11527, "2") +#11528 = @"C_type$set$2difference_update" +py_cobjects(#11528) +py_cobjecttypes(#11528, #10034) +py_cobject_sources(#11528, 0) +py_cobjectnames(#11528, "difference_update") +py_cmembers_versioned(#11494, "difference_update", #11528, "2") +#11529 = @"C_type$set$2discard" +py_cobjects(#11529) +py_cobjecttypes(#11529, #10034) +py_cobject_sources(#11529, 0) +py_cobjectnames(#11529, "discard") +py_cmembers_versioned(#11494, "discard", #11529, "2") +#11530 = @"C_type$set$2intersection" +py_cobjects(#11530) +py_cobjecttypes(#11530, #10034) +py_cobject_sources(#11530, 0) +py_cobjectnames(#11530, "intersection") +py_cmembers_versioned(#11494, "intersection", #11530, "2") +#11531 = @"C_type$set$2intersection_update" +py_cobjects(#11531) +py_cobjecttypes(#11531, #10034) +py_cobject_sources(#11531, 0) +py_cobjectnames(#11531, "intersection_update") +py_cmembers_versioned(#11494, "intersection_update", #11531, "2") +#11532 = @"C_type$set$2isdisjoint" +py_cobjects(#11532) +py_cobjecttypes(#11532, #10034) +py_cobject_sources(#11532, 0) +py_cobjectnames(#11532, "isdisjoint") +py_cmembers_versioned(#11494, "isdisjoint", #11532, "2") +#11533 = @"C_type$set$2issubset" +py_cobjects(#11533) +py_cobjecttypes(#11533, #10034) +py_cobject_sources(#11533, 0) +py_cobjectnames(#11533, "issubset") +py_cmembers_versioned(#11494, "issubset", #11533, "2") +#11534 = @"C_type$set$2issuperset" +py_cobjects(#11534) +py_cobjecttypes(#11534, #10034) +py_cobject_sources(#11534, 0) +py_cobjectnames(#11534, "issuperset") +py_cmembers_versioned(#11494, "issuperset", #11534, "2") +#11535 = @"C_type$set$2pop" +py_cobjects(#11535) +py_cobjecttypes(#11535, #10034) +py_cobject_sources(#11535, 0) +py_cobjectnames(#11535, "pop") +py_cmembers_versioned(#11494, "pop", #11535, "2") +#11536 = @"C_type$set$2remove" +py_cobjects(#11536) +py_cobjecttypes(#11536, #10034) +py_cobject_sources(#11536, 0) +py_cobjectnames(#11536, "remove") +py_cmembers_versioned(#11494, "remove", #11536, "2") +#11537 = @"C_type$set$2symmetric_difference" +py_cobjects(#11537) +py_cobjecttypes(#11537, #10034) +py_cobject_sources(#11537, 0) +py_cobjectnames(#11537, "symmetric_difference") +py_cmembers_versioned(#11494, "symmetric_difference", #11537, "2") +#11538 = @"C_type$set$2symmetric_difference_update" +py_cobjects(#11538) +py_cobjecttypes(#11538, #10034) +py_cobject_sources(#11538, 0) +py_cobjectnames(#11538, "symmetric_difference_update") +py_cmembers_versioned(#11494, "symmetric_difference_update", #11538, "2") +#11539 = @"C_type$set$2union" +py_cobjects(#11539) +py_cobjecttypes(#11539, #10034) +py_cobject_sources(#11539, 0) +py_cobjectnames(#11539, "union") +py_cmembers_versioned(#11494, "union", #11539, "2") +#11540 = @"C_type$set$2update" +py_cobjects(#11540) +py_cobjecttypes(#11540, #10034) +py_cobject_sources(#11540, 0) +py_cobjectnames(#11540, "update") +py_cmembers_versioned(#11494, "update", #11540, "2") +py_cmembers_versioned(#11494, ".super.", #10021, "2") +py_cobjectnames(#11494, "set") +py_cmembers_versioned(#10760, "set", #11494, "2") +#11541 = @"C_builtin_function_or_method$builtins.setattr" +py_cobjects(#11541) +py_cobjecttypes(#11541, #10075) +py_cobject_sources(#11541, 0) +py_cobjectnames(#11541, "setattr") +py_cmembers_versioned(#10760, "setattr", #11541, "2") +#11542 = @"C_type$slice" +py_cobjects(#11542) +py_cobjecttypes(#11542, #10001) +py_cobject_sources(#11542, 0) +#11543 = @"C_type$slice$2__cmp__" +py_cobjects(#11543) +py_cobjecttypes(#11543, #10005) +py_cobject_sources(#11543, 0) +py_cobjectnames(#11543, "__cmp__") +py_cmembers_versioned(#11542, "__cmp__", #11543, "2") +#11544 = @"C_bytes$db6464eb4169e8521ac23a1e7dab248186db2769" +py_cobjects(#11544) +py_cobjecttypes(#11544, #10028) +py_cobject_sources(#11544, 0) +py_cobjectnames(#11544, "b'slice(stop) +slice(start, stop[, step]) + +Create a slice object. This is used for extended slicing (e.g. a[0:10:2]).'") +py_cmembers_versioned(#11542, "__doc__", #11544, "2") +#11545 = @"C_type$slice$2__getattribute__" +py_cobjects(#11545) +py_cobjecttypes(#11545, #10005) +py_cobject_sources(#11545, 0) +py_cobjectnames(#11545, "__getattribute__") +py_cmembers_versioned(#11542, "__getattribute__", #11545, "2") +#11546 = @"C_type$slice$2__hash__" +py_cobjects(#11546) +py_cobjecttypes(#11546, #10005) +py_cobject_sources(#11546, 0) +py_cobjectnames(#11546, "__hash__") +py_cmembers_versioned(#11542, "__hash__", #11546, "2") +#11547 = @"C_type$slice$2__new__" +py_cobjects(#11547) +py_cobjecttypes(#11547, #10075) +py_cobject_sources(#11547, 0) +py_cobjectnames(#11547, "__new__") +py_cmembers_versioned(#11542, "__new__", #11547, "2") +#11548 = @"C_type$slice$2__reduce__" +py_cobjects(#11548) +py_cobjecttypes(#11548, #10034) +py_cobject_sources(#11548, 0) +py_cobjectnames(#11548, "__reduce__") +py_cmembers_versioned(#11542, "__reduce__", #11548, "2") +#11549 = @"C_type$slice$2__repr__" +py_cobjects(#11549) +py_cobjecttypes(#11549, #10005) +py_cobject_sources(#11549, 0) +py_cobjectnames(#11549, "__repr__") +py_cmembers_versioned(#11542, "__repr__", #11549, "2") +#11550 = @"C_type$slice$2indices" +py_cobjects(#11550) +py_cobjecttypes(#11550, #10034) +py_cobject_sources(#11550, 0) +py_cobjectnames(#11550, "indices") +py_cmembers_versioned(#11542, "indices", #11550, "2") +#11551 = @"C_type$slice$2start" +py_cobjects(#11551) +py_cobjecttypes(#11551, #10045) +py_cobject_sources(#11551, 0) +py_cobjectnames(#11551, "start") +py_cmembers_versioned(#11542, "start", #11551, "2") +#11552 = @"C_type$slice$2step" +py_cobjects(#11552) +py_cobjecttypes(#11552, #10045) +py_cobject_sources(#11552, 0) +py_cobjectnames(#11552, "step") +py_cmembers_versioned(#11542, "step", #11552, "2") +#11553 = @"C_type$slice$2stop" +py_cobjects(#11553) +py_cobjecttypes(#11553, #10045) +py_cobject_sources(#11553, 0) +py_cobjectnames(#11553, "stop") +py_cmembers_versioned(#11542, "stop", #11553, "2") +py_cmembers_versioned(#11542, ".super.", #10021, "2") +py_cobjectnames(#11542, "slice") +py_cmembers_versioned(#10760, "slice", #11542, "2") +#11554 = @"C_builtin_function_or_method$builtins.sorted" +py_cobjects(#11554) +py_cobjecttypes(#11554, #10075) +py_cobject_sources(#11554, 0) +py_cobjectnames(#11554, "sorted") +py_cmembers_versioned(#10760, "sorted", #11554, "2") +#11555 = @"C_type$staticmethod" +py_cobjects(#11555) +py_cobjecttypes(#11555, #10001) +py_cobject_sources(#11555, 0) +#11556 = @"C_bytes$47a8ab94971b2e5e792ad5a9765d65e14fe8d0d5" +py_cobjects(#11556) +py_cobjecttypes(#11556, #10028) +py_cobject_sources(#11556, 0) +py_cobjectnames(#11556, "b'staticmethod(function) -> method + +Convert a function to be a static method. + +A static method does not receive an implicit first argument. +To declare a static method, use this idiom: + + class C: + @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. + +Static methods in Python are similar to those found in Java or C++. +For a more advanced concept, see the classmethod builtin.'") +py_cmembers_versioned(#11555, "__doc__", #11556, "2") +#11557 = @"C_type$staticmethod$2__func__" +py_cobjects(#11557) +py_cobjecttypes(#11557, #10045) +py_cobject_sources(#11557, 0) +py_cobjectnames(#11557, "__func__") +py_cmembers_versioned(#11555, "__func__", #11557, "2") +#11558 = @"C_type$staticmethod$2__get__" +py_cobjects(#11558) +py_cobjecttypes(#11558, #10005) +py_cobject_sources(#11558, 0) +py_cobjectnames(#11558, "__get__") +py_cmembers_versioned(#11555, "__get__", #11558, "2") +#11559 = @"C_type$staticmethod$2__getattribute__" +py_cobjects(#11559) +py_cobjecttypes(#11559, #10005) +py_cobject_sources(#11559, 0) +py_cobjectnames(#11559, "__getattribute__") +py_cmembers_versioned(#11555, "__getattribute__", #11559, "2") +#11560 = @"C_type$staticmethod$2__init__" +py_cobjects(#11560) +py_cobjecttypes(#11560, #10005) +py_cobject_sources(#11560, 0) +py_cobjectnames(#11560, "__init__") +py_cmembers_versioned(#11555, "__init__", #11560, "2") +#11561 = @"C_type$staticmethod$2__new__" +py_cobjects(#11561) +py_cobjecttypes(#11561, #10075) +py_cobject_sources(#11561, 0) +py_cobjectnames(#11561, "__new__") +py_cmembers_versioned(#11555, "__new__", #11561, "2") +py_cmembers_versioned(#11555, ".super.", #10021, "2") +py_cobjectnames(#11555, "staticmethod") +py_cmembers_versioned(#10760, "staticmethod", #11555, "2") +py_cmembers_versioned(#10760, "str", #10028, "2") +#11562 = @"C_builtin_function_or_method$builtins.sum" +py_cobjects(#11562) +py_cobjecttypes(#11562, #10075) +py_cobject_sources(#11562, 0) +py_cobjectnames(#11562, "sum") +py_cmembers_versioned(#10760, "sum", #11562, "2") +py_cmembers_versioned(#10760, "super", #10727, "2") +py_cmembers_versioned(#10760, "tuple", #10737, "2") +py_cmembers_versioned(#10760, "type", #10001, "2") +#11563 = @"C_builtin_function_or_method$builtins.unichr" +py_cobjects(#11563) +py_cobjecttypes(#11563, #10075) +py_cobject_sources(#11563, 0) +py_cobjectnames(#11563, "unichr") +py_cmembers_versioned(#10760, "unichr", #11563, "2") +#11564 = @"C_type$unicode" +py_cobjects(#11564) +py_cobjecttypes(#11564, #10001) +py_cobject_sources(#11564, 0) +#11565 = @"C_type$unicode$2__add__" +py_cobjects(#11565) +py_cobjecttypes(#11565, #10005) +py_cobject_sources(#11565, 0) +py_cobjectnames(#11565, "__add__") +py_cmembers_versioned(#11564, "__add__", #11565, "2") +#11566 = @"C_type$unicode$2__contains__" +py_cobjects(#11566) +py_cobjecttypes(#11566, #10005) +py_cobject_sources(#11566, 0) +py_cobjectnames(#11566, "__contains__") +py_cmembers_versioned(#11564, "__contains__", #11566, "2") +#11567 = @"C_bytes$255b372fb10fef3a09539a5d31c8a8abafd67366" +py_cobjects(#11567) +py_cobjecttypes(#11567, #10028) +py_cobject_sources(#11567, 0) +py_cobjectnames(#11567, "b'unicode(object='') -> unicode object +unicode(string[, encoding[, errors]]) -> unicode object + +Create a new Unicode object from the given encoded string. +encoding defaults to the current default string encoding. +errors can be 'strict', 'replace' or 'ignore' and defaults to 'strict'.'") +py_cmembers_versioned(#11564, "__doc__", #11567, "2") +#11568 = @"C_type$unicode$2__eq__" +py_cobjects(#11568) +py_cobjecttypes(#11568, #10005) +py_cobject_sources(#11568, 0) +py_cobjectnames(#11568, "__eq__") +py_cmembers_versioned(#11564, "__eq__", #11568, "2") +#11569 = @"C_type$unicode$2__format__" +py_cobjects(#11569) +py_cobjecttypes(#11569, #10034) +py_cobject_sources(#11569, 0) +py_cobjectnames(#11569, "__format__") +py_cmembers_versioned(#11564, "__format__", #11569, "2") +#11570 = @"C_type$unicode$2__ge__" +py_cobjects(#11570) +py_cobjecttypes(#11570, #10005) +py_cobject_sources(#11570, 0) +py_cobjectnames(#11570, "__ge__") +py_cmembers_versioned(#11564, "__ge__", #11570, "2") +#11571 = @"C_type$unicode$2__getattribute__" +py_cobjects(#11571) +py_cobjecttypes(#11571, #10005) +py_cobject_sources(#11571, 0) +py_cobjectnames(#11571, "__getattribute__") +py_cmembers_versioned(#11564, "__getattribute__", #11571, "2") +#11572 = @"C_type$unicode$2__getitem__" +py_cobjects(#11572) +py_cobjecttypes(#11572, #10005) +py_cobject_sources(#11572, 0) +py_cobjectnames(#11572, "__getitem__") +py_cmembers_versioned(#11564, "__getitem__", #11572, "2") +#11573 = @"C_type$unicode$2__getnewargs__" +py_cobjects(#11573) +py_cobjecttypes(#11573, #10034) +py_cobject_sources(#11573, 0) +py_cobjectnames(#11573, "__getnewargs__") +py_cmembers_versioned(#11564, "__getnewargs__", #11573, "2") +#11574 = @"C_type$unicode$2__getslice__" +py_cobjects(#11574) +py_cobjecttypes(#11574, #10005) +py_cobject_sources(#11574, 0) +py_cobjectnames(#11574, "__getslice__") +py_cmembers_versioned(#11564, "__getslice__", #11574, "2") +#11575 = @"C_type$unicode$2__gt__" +py_cobjects(#11575) +py_cobjecttypes(#11575, #10005) +py_cobject_sources(#11575, 0) +py_cobjectnames(#11575, "__gt__") +py_cmembers_versioned(#11564, "__gt__", #11575, "2") +#11576 = @"C_type$unicode$2__hash__" +py_cobjects(#11576) +py_cobjecttypes(#11576, #10005) +py_cobject_sources(#11576, 0) +py_cobjectnames(#11576, "__hash__") +py_cmembers_versioned(#11564, "__hash__", #11576, "2") +#11577 = @"C_type$unicode$2__le__" +py_cobjects(#11577) +py_cobjecttypes(#11577, #10005) +py_cobject_sources(#11577, 0) +py_cobjectnames(#11577, "__le__") +py_cmembers_versioned(#11564, "__le__", #11577, "2") +#11578 = @"C_type$unicode$2__len__" +py_cobjects(#11578) +py_cobjecttypes(#11578, #10005) +py_cobject_sources(#11578, 0) +py_cobjectnames(#11578, "__len__") +py_cmembers_versioned(#11564, "__len__", #11578, "2") +#11579 = @"C_type$unicode$2__lt__" +py_cobjects(#11579) +py_cobjecttypes(#11579, #10005) +py_cobject_sources(#11579, 0) +py_cobjectnames(#11579, "__lt__") +py_cmembers_versioned(#11564, "__lt__", #11579, "2") +#11580 = @"C_type$unicode$2__mod__" +py_cobjects(#11580) +py_cobjecttypes(#11580, #10005) +py_cobject_sources(#11580, 0) +py_cobjectnames(#11580, "__mod__") +py_cmembers_versioned(#11564, "__mod__", #11580, "2") +#11581 = @"C_type$unicode$2__mul__" +py_cobjects(#11581) +py_cobjecttypes(#11581, #10005) +py_cobject_sources(#11581, 0) +py_cobjectnames(#11581, "__mul__") +py_cmembers_versioned(#11564, "__mul__", #11581, "2") +#11582 = @"C_type$unicode$2__ne__" +py_cobjects(#11582) +py_cobjecttypes(#11582, #10005) +py_cobject_sources(#11582, 0) +py_cobjectnames(#11582, "__ne__") +py_cmembers_versioned(#11564, "__ne__", #11582, "2") +#11583 = @"C_type$unicode$2__new__" +py_cobjects(#11583) +py_cobjecttypes(#11583, #10075) +py_cobject_sources(#11583, 0) +py_cobjectnames(#11583, "__new__") +py_cmembers_versioned(#11564, "__new__", #11583, "2") +#11584 = @"C_type$unicode$2__repr__" +py_cobjects(#11584) +py_cobjecttypes(#11584, #10005) +py_cobject_sources(#11584, 0) +py_cobjectnames(#11584, "__repr__") +py_cmembers_versioned(#11564, "__repr__", #11584, "2") +#11585 = @"C_type$unicode$2__rmod__" +py_cobjects(#11585) +py_cobjecttypes(#11585, #10005) +py_cobject_sources(#11585, 0) +py_cobjectnames(#11585, "__rmod__") +py_cmembers_versioned(#11564, "__rmod__", #11585, "2") +#11586 = @"C_type$unicode$2__rmul__" +py_cobjects(#11586) +py_cobjecttypes(#11586, #10005) +py_cobject_sources(#11586, 0) +py_cobjectnames(#11586, "__rmul__") +py_cmembers_versioned(#11564, "__rmul__", #11586, "2") +#11587 = @"C_type$unicode$2__sizeof__" +py_cobjects(#11587) +py_cobjecttypes(#11587, #10034) +py_cobject_sources(#11587, 0) +py_cobjectnames(#11587, "__sizeof__") +py_cmembers_versioned(#11564, "__sizeof__", #11587, "2") +#11588 = @"C_type$unicode$2__str__" +py_cobjects(#11588) +py_cobjecttypes(#11588, #10005) +py_cobject_sources(#11588, 0) +py_cobjectnames(#11588, "__str__") +py_cmembers_versioned(#11564, "__str__", #11588, "2") +#11589 = @"C_type$unicode$2_formatter_field_name_split" +py_cobjects(#11589) +py_cobjecttypes(#11589, #10034) +py_cobject_sources(#11589, 0) +py_cobjectnames(#11589, "_formatter_field_name_split") +py_cmembers_versioned(#11564, "_formatter_field_name_split", #11589, "2") +#11590 = @"C_type$unicode$2_formatter_parser" +py_cobjects(#11590) +py_cobjecttypes(#11590, #10034) +py_cobject_sources(#11590, 0) +py_cobjectnames(#11590, "_formatter_parser") +py_cmembers_versioned(#11564, "_formatter_parser", #11590, "2") +#11591 = @"C_type$unicode$2capitalize" +py_cobjects(#11591) +py_cobjecttypes(#11591, #10034) +py_cobject_sources(#11591, 0) +py_cobjectnames(#11591, "capitalize") +py_cmembers_versioned(#11564, "capitalize", #11591, "2") +#11592 = @"C_type$unicode$2center" +py_cobjects(#11592) +py_cobjecttypes(#11592, #10034) +py_cobject_sources(#11592, 0) +py_cobjectnames(#11592, "center") +py_cmembers_versioned(#11564, "center", #11592, "2") +#11593 = @"C_type$unicode$2count" +py_cobjects(#11593) +py_cobjecttypes(#11593, #10034) +py_cobject_sources(#11593, 0) +py_cobjectnames(#11593, "count") +py_cmembers_versioned(#11564, "count", #11593, "2") +#11594 = @"C_type$unicode$2decode" +py_cobjects(#11594) +py_cobjecttypes(#11594, #10034) +py_cobject_sources(#11594, 0) +py_cobjectnames(#11594, "decode") +py_cmembers_versioned(#11564, "decode", #11594, "2") +#11595 = @"C_type$unicode$2encode" +py_cobjects(#11595) +py_cobjecttypes(#11595, #10034) +py_cobject_sources(#11595, 0) +py_cobjectnames(#11595, "encode") +py_cmembers_versioned(#11564, "encode", #11595, "2") +#11596 = @"C_type$unicode$2endswith" +py_cobjects(#11596) +py_cobjecttypes(#11596, #10034) +py_cobject_sources(#11596, 0) +py_cobjectnames(#11596, "endswith") +py_cmembers_versioned(#11564, "endswith", #11596, "2") +#11597 = @"C_type$unicode$2expandtabs" +py_cobjects(#11597) +py_cobjecttypes(#11597, #10034) +py_cobject_sources(#11597, 0) +py_cobjectnames(#11597, "expandtabs") +py_cmembers_versioned(#11564, "expandtabs", #11597, "2") +#11598 = @"C_type$unicode$2find" +py_cobjects(#11598) +py_cobjecttypes(#11598, #10034) +py_cobject_sources(#11598, 0) +py_cobjectnames(#11598, "find") +py_cmembers_versioned(#11564, "find", #11598, "2") +#11599 = @"C_type$unicode$2format" +py_cobjects(#11599) +py_cobjecttypes(#11599, #10034) +py_cobject_sources(#11599, 0) +py_cobjectnames(#11599, "format") +py_cmembers_versioned(#11564, "format", #11599, "2") +#11600 = @"C_type$unicode$2index" +py_cobjects(#11600) +py_cobjecttypes(#11600, #10034) +py_cobject_sources(#11600, 0) +py_cobjectnames(#11600, "index") +py_cmembers_versioned(#11564, "index", #11600, "2") +#11601 = @"C_type$unicode$2isalnum" +py_cobjects(#11601) +py_cobjecttypes(#11601, #10034) +py_cobject_sources(#11601, 0) +py_cobjectnames(#11601, "isalnum") +py_cmembers_versioned(#11564, "isalnum", #11601, "2") +#11602 = @"C_type$unicode$2isalpha" +py_cobjects(#11602) +py_cobjecttypes(#11602, #10034) +py_cobject_sources(#11602, 0) +py_cobjectnames(#11602, "isalpha") +py_cmembers_versioned(#11564, "isalpha", #11602, "2") +#11603 = @"C_type$unicode$2isdecimal" +py_cobjects(#11603) +py_cobjecttypes(#11603, #10034) +py_cobject_sources(#11603, 0) +py_cobjectnames(#11603, "isdecimal") +py_cmembers_versioned(#11564, "isdecimal", #11603, "2") +#11604 = @"C_type$unicode$2isdigit" +py_cobjects(#11604) +py_cobjecttypes(#11604, #10034) +py_cobject_sources(#11604, 0) +py_cobjectnames(#11604, "isdigit") +py_cmembers_versioned(#11564, "isdigit", #11604, "2") +#11605 = @"C_type$unicode$2islower" +py_cobjects(#11605) +py_cobjecttypes(#11605, #10034) +py_cobject_sources(#11605, 0) +py_cobjectnames(#11605, "islower") +py_cmembers_versioned(#11564, "islower", #11605, "2") +#11606 = @"C_type$unicode$2isnumeric" +py_cobjects(#11606) +py_cobjecttypes(#11606, #10034) +py_cobject_sources(#11606, 0) +py_cobjectnames(#11606, "isnumeric") +py_cmembers_versioned(#11564, "isnumeric", #11606, "2") +#11607 = @"C_type$unicode$2isspace" +py_cobjects(#11607) +py_cobjecttypes(#11607, #10034) +py_cobject_sources(#11607, 0) +py_cobjectnames(#11607, "isspace") +py_cmembers_versioned(#11564, "isspace", #11607, "2") +#11608 = @"C_type$unicode$2istitle" +py_cobjects(#11608) +py_cobjecttypes(#11608, #10034) +py_cobject_sources(#11608, 0) +py_cobjectnames(#11608, "istitle") +py_cmembers_versioned(#11564, "istitle", #11608, "2") +#11609 = @"C_type$unicode$2isupper" +py_cobjects(#11609) +py_cobjecttypes(#11609, #10034) +py_cobject_sources(#11609, 0) +py_cobjectnames(#11609, "isupper") +py_cmembers_versioned(#11564, "isupper", #11609, "2") +#11610 = @"C_type$unicode$2join" +py_cobjects(#11610) +py_cobjecttypes(#11610, #10034) +py_cobject_sources(#11610, 0) +py_cobjectnames(#11610, "join") +py_cmembers_versioned(#11564, "join", #11610, "2") +#11611 = @"C_type$unicode$2ljust" +py_cobjects(#11611) +py_cobjecttypes(#11611, #10034) +py_cobject_sources(#11611, 0) +py_cobjectnames(#11611, "ljust") +py_cmembers_versioned(#11564, "ljust", #11611, "2") +#11612 = @"C_type$unicode$2lower" +py_cobjects(#11612) +py_cobjecttypes(#11612, #10034) +py_cobject_sources(#11612, 0) +py_cobjectnames(#11612, "lower") +py_cmembers_versioned(#11564, "lower", #11612, "2") +#11613 = @"C_type$unicode$2lstrip" +py_cobjects(#11613) +py_cobjecttypes(#11613, #10034) +py_cobject_sources(#11613, 0) +py_cobjectnames(#11613, "lstrip") +py_cmembers_versioned(#11564, "lstrip", #11613, "2") +#11614 = @"C_type$unicode$2partition" +py_cobjects(#11614) +py_cobjecttypes(#11614, #10034) +py_cobject_sources(#11614, 0) +py_cobjectnames(#11614, "partition") +py_cmembers_versioned(#11564, "partition", #11614, "2") +#11615 = @"C_type$unicode$2replace" +py_cobjects(#11615) +py_cobjecttypes(#11615, #10034) +py_cobject_sources(#11615, 0) +py_cobjectnames(#11615, "replace") +py_cmembers_versioned(#11564, "replace", #11615, "2") +#11616 = @"C_type$unicode$2rfind" +py_cobjects(#11616) +py_cobjecttypes(#11616, #10034) +py_cobject_sources(#11616, 0) +py_cobjectnames(#11616, "rfind") +py_cmembers_versioned(#11564, "rfind", #11616, "2") +#11617 = @"C_type$unicode$2rindex" +py_cobjects(#11617) +py_cobjecttypes(#11617, #10034) +py_cobject_sources(#11617, 0) +py_cobjectnames(#11617, "rindex") +py_cmembers_versioned(#11564, "rindex", #11617, "2") +#11618 = @"C_type$unicode$2rjust" +py_cobjects(#11618) +py_cobjecttypes(#11618, #10034) +py_cobject_sources(#11618, 0) +py_cobjectnames(#11618, "rjust") +py_cmembers_versioned(#11564, "rjust", #11618, "2") +#11619 = @"C_type$unicode$2rpartition" +py_cobjects(#11619) +py_cobjecttypes(#11619, #10034) +py_cobject_sources(#11619, 0) +py_cobjectnames(#11619, "rpartition") +py_cmembers_versioned(#11564, "rpartition", #11619, "2") +#11620 = @"C_type$unicode$2rsplit" +py_cobjects(#11620) +py_cobjecttypes(#11620, #10034) +py_cobject_sources(#11620, 0) +py_cobjectnames(#11620, "rsplit") +py_cmembers_versioned(#11564, "rsplit", #11620, "2") +#11621 = @"C_type$unicode$2rstrip" +py_cobjects(#11621) +py_cobjecttypes(#11621, #10034) +py_cobject_sources(#11621, 0) +py_cobjectnames(#11621, "rstrip") +py_cmembers_versioned(#11564, "rstrip", #11621, "2") +#11622 = @"C_type$unicode$2split" +py_cobjects(#11622) +py_cobjecttypes(#11622, #10034) +py_cobject_sources(#11622, 0) +py_cobjectnames(#11622, "split") +py_cmembers_versioned(#11564, "split", #11622, "2") +#11623 = @"C_type$unicode$2splitlines" +py_cobjects(#11623) +py_cobjecttypes(#11623, #10034) +py_cobject_sources(#11623, 0) +py_cobjectnames(#11623, "splitlines") +py_cmembers_versioned(#11564, "splitlines", #11623, "2") +#11624 = @"C_type$unicode$2startswith" +py_cobjects(#11624) +py_cobjecttypes(#11624, #10034) +py_cobject_sources(#11624, 0) +py_cobjectnames(#11624, "startswith") +py_cmembers_versioned(#11564, "startswith", #11624, "2") +#11625 = @"C_type$unicode$2strip" +py_cobjects(#11625) +py_cobjecttypes(#11625, #10034) +py_cobject_sources(#11625, 0) +py_cobjectnames(#11625, "strip") +py_cmembers_versioned(#11564, "strip", #11625, "2") +#11626 = @"C_type$unicode$2swapcase" +py_cobjects(#11626) +py_cobjecttypes(#11626, #10034) +py_cobject_sources(#11626, 0) +py_cobjectnames(#11626, "swapcase") +py_cmembers_versioned(#11564, "swapcase", #11626, "2") +#11627 = @"C_type$unicode$2title" +py_cobjects(#11627) +py_cobjecttypes(#11627, #10034) +py_cobject_sources(#11627, 0) +py_cobjectnames(#11627, "title") +py_cmembers_versioned(#11564, "title", #11627, "2") +#11628 = @"C_type$unicode$2translate" +py_cobjects(#11628) +py_cobjecttypes(#11628, #10034) +py_cobject_sources(#11628, 0) +py_cobjectnames(#11628, "translate") +py_cmembers_versioned(#11564, "translate", #11628, "2") +#11629 = @"C_type$unicode$2upper" +py_cobjects(#11629) +py_cobjecttypes(#11629, #10034) +py_cobject_sources(#11629, 0) +py_cobjectnames(#11629, "upper") +py_cmembers_versioned(#11564, "upper", #11629, "2") +#11630 = @"C_type$unicode$2zfill" +py_cobjects(#11630) +py_cobjecttypes(#11630, #10034) +py_cobject_sources(#11630, 0) +py_cobjectnames(#11630, "zfill") +py_cmembers_versioned(#11564, "zfill", #11630, "2") +py_cmembers_versioned(#11564, ".super.", #10151, "2") +py_cobjectnames(#11564, "unicode") +py_cmembers_versioned(#10760, "unicode", #11564, "2") +#11631 = @"C_builtin_function_or_method$builtins.vars" +py_cobjects(#11631) +py_cobjecttypes(#11631, #10075) +py_cobject_sources(#11631, 0) +py_cobjectnames(#11631, "vars") +py_cmembers_versioned(#10760, "vars", #11631, "2") +#11632 = @"C_type$xrange" +py_cobjects(#11632) +py_cobjecttypes(#11632, #10001) +py_cobject_sources(#11632, 0) +#11633 = @"C_bytes$d297279d6128eac5ba64bea2d4201509cec3ec6b" +py_cobjects(#11633) +py_cobjecttypes(#11633, #10028) +py_cobject_sources(#11633, 0) +py_cobjectnames(#11633, "b'xrange(stop) -> xrange object +xrange(start, stop[, step]) -> xrange object + +Like range(), but instead of returning a list, returns an object that +generates the numbers in the range on demand. For looping, this is +slightly faster than range() and more memory efficient.'") +py_cmembers_versioned(#11632, "__doc__", #11633, "2") +#11634 = @"C_type$xrange$2__getattribute__" +py_cobjects(#11634) +py_cobjecttypes(#11634, #10005) +py_cobject_sources(#11634, 0) +py_cobjectnames(#11634, "__getattribute__") +py_cmembers_versioned(#11632, "__getattribute__", #11634, "2") +#11635 = @"C_type$xrange$2__getitem__" +py_cobjects(#11635) +py_cobjecttypes(#11635, #10005) +py_cobject_sources(#11635, 0) +py_cobjectnames(#11635, "__getitem__") +py_cmembers_versioned(#11632, "__getitem__", #11635, "2") +#11636 = @"C_type$xrange$2__iter__" +py_cobjects(#11636) +py_cobjecttypes(#11636, #10005) +py_cobject_sources(#11636, 0) +py_cobjectnames(#11636, "__iter__") +py_cmembers_versioned(#11632, "__iter__", #11636, "2") +#11637 = @"C_type$xrange$2__len__" +py_cobjects(#11637) +py_cobjecttypes(#11637, #10005) +py_cobject_sources(#11637, 0) +py_cobjectnames(#11637, "__len__") +py_cmembers_versioned(#11632, "__len__", #11637, "2") +#11638 = @"C_type$xrange$2__new__" +py_cobjects(#11638) +py_cobjecttypes(#11638, #10075) +py_cobject_sources(#11638, 0) +py_cobjectnames(#11638, "__new__") +py_cmembers_versioned(#11632, "__new__", #11638, "2") +#11639 = @"C_type$xrange$2__reduce__" +py_cobjects(#11639) +py_cobjecttypes(#11639, #10034) +py_cobject_sources(#11639, 0) +py_cobjectnames(#11639, "__reduce__") +py_cmembers_versioned(#11632, "__reduce__", #11639, "2") +#11640 = @"C_type$xrange$2__repr__" +py_cobjects(#11640) +py_cobjecttypes(#11640, #10005) +py_cobject_sources(#11640, 0) +py_cobjectnames(#11640, "__repr__") +py_cmembers_versioned(#11632, "__repr__", #11640, "2") +#11641 = @"C_type$xrange$2__reversed__" +py_cobjects(#11641) +py_cobjecttypes(#11641, #10034) +py_cobject_sources(#11641, 0) +py_cobjectnames(#11641, "__reversed__") +py_cmembers_versioned(#11632, "__reversed__", #11641, "2") +py_cmembers_versioned(#11632, ".super.", #10021, "2") +py_cobjectnames(#11632, "xrange") +py_cmembers_versioned(#10760, "xrange", #11632, "2") +#11642 = @"C_builtin_function_or_method$builtins.zip" +py_cobjects(#11642) +py_cobjecttypes(#11642, #10075) +py_cobject_sources(#11642, 0) +py_cobjectnames(#11642, "zip") +py_cmembers_versioned(#10760, "zip", #11642, "2") +py_cobjectnames(#10760, "__builtin__") +py_special_objects(#10760, "builtin_module") +py_special_objects(#11494, "set") +py_special_objects(#11564, "unicode") +#11643 = @"C_module$sys" +py_cobjects(#11643) +py_cobjecttypes(#11643, #10761) +py_cobject_sources(#11643, 0) +#11644 = @"C_module$sys$2__displayhook__" +py_cobjects(#11644) +py_cobjecttypes(#11644, #10075) +py_cobject_sources(#11644, 0) +py_cobjectnames(#11644, "displayhook") +py_cmembers_versioned(#11643, "__displayhook__", #11644, "2") +#11645 = @"C_bytes$2382b15d634ee6ef231da5102b7a4db3f8d9fa8d" +py_cobjects(#11645) +py_cobjecttypes(#11645, #10028) +py_cobject_sources(#11645, 0) +py_cobjectnames(#11645, "b'This module provides access to some objects used or maintained by the +interpreter and to functions that interact strongly with the interpreter. + +Dynamic objects: + +argv -- command line arguments; argv[0] is the script pathname if known +path -- module search path; path[0] is the script directory, else '' +modules -- dictionary of loaded modules + +displayhook -- called to show results in an interactive session +excepthook -- called to handle any uncaught exception other than SystemExit + To customize printing in an interactive session or to install a custom + top-level exception handler, assign other functions to replace these. + +exitfunc -- if sys.exitfunc exists, this routine is called when Python exits + Assigning to sys.exitfunc is deprecated; use the atexit module instead. + +stdin -- standard input file object; used by raw_input() and input() +stdout -- standard output file object; used by the print statement +stderr -- standard error object; used for error messages + By assigning other file objects (or objects that behave like files) + to these, it is possible to redirect all of the interpreter's I/O. + +last_type -- type of last uncaught exception +last_value -- value of last uncaught exception +last_traceback -- traceback of last uncaught exception + These three are only available in an interactive session after a + traceback has been printed. + +exc_type -- type of exception currently being handled +exc_value -- value of exception currently being handled +exc_traceback -- traceback of exception currently being handled + The function exc_info() should be used instead of these three, + because it is thread-safe. + +Static objects: + +float_info -- a dict with information about the float inplementation. +long_info -- a struct sequence with information about the long implementation. +maxint -- the largest supported integer (the smallest is -maxint-1) +maxsize -- the largest supported length of containers. +maxunicode -- the largest supported character +builtin_module_names -- tuple of module names built into this interpreter +version -- the version of this interpreter as a string +version_info -- version information as a named tuple +hexversion -- version information encoded as a single integer +copyright -- copyright notice pertaining to this interpreter +platform -- platform identifier +executable -- absolute path of the executable binary of the Python interpreter +prefix -- prefix used to find the Python library +exec_prefix -- prefix used to find the machine-specific Python library +float_repr_style -- string indicating the style of repr() output for floats +__stdin__ -- the original stdin; don't touch! +__stdout__ -- the original stdout; don't touch! +__stderr__ -- the original stderr; don't touch! +__displayhook__ -- the original displayhook; don't touch! +__excepthook__ -- the original excepthook; don't touch! + +Functions: + +displayhook() -- print an object to the screen, and save it in __builtin__._ +excepthook() -- print an exception and its traceback to sys.stderr +exc_info() -- return thread-safe information about the current exception +exc_clear() -- clear the exception state for the current thread +exit() -- exit the interpreter by raising SystemExit +getdlopenflags() -- returns flags to be used for dlopen() calls +getprofile() -- get the global profiling function +getrefcount() -- return the reference count for an object (plus one :-) +getrecursionlimit() -- return the max recursion depth for the interpreter +getsizeof() -- return the size of an object in bytes +gettrace() -- get the global debug tracing function +setcheckinterval() -- control how often the interpreter checks for events +setdlopenflags() -- set the flags to be used for dlopen() calls +setprofile() -- set the global profiling function +setrecursionlimit() -- set the max recursion depth for the interpreter +settrace() -- set the global debug tracing function +'") +py_cmembers_versioned(#11643, "__doc__", #11645, "2") +#11646 = @"C_module$sys$2__excepthook__" +py_cobjects(#11646) +py_cobjecttypes(#11646, #10075) +py_cobject_sources(#11646, 0) +py_cobjectnames(#11646, "excepthook") +py_cmembers_versioned(#11643, "__excepthook__", #11646, "2") +#11647 = @"C_bytes$b4c56ee8d2854166dec66644f541b85247105b2c" +py_cobjects(#11647) +py_cobjecttypes(#11647, #10028) +py_cobject_sources(#11647, 0) +py_cobjectnames(#11647, "b'sys'") +py_cmembers_versioned(#11643, "__name__", #11647, "2") +py_cmembers_versioned(#11643, "__package__", #10017, "2") +#11648 = @"C_module$sys$2__stderr__" +py_cobjects(#11648) +py_cobjecttypes(#11648, #11179) +py_cobject_sources(#11648, 0) +py_cobjectnames(#11648, "object") +py_cmembers_versioned(#11643, "__stderr__", #11648, "2") +#11649 = @"C_module$sys$2__stdin__" +py_cobjects(#11649) +py_cobjecttypes(#11649, #11179) +py_cobject_sources(#11649, 0) +py_cobjectnames(#11649, "object") +py_cmembers_versioned(#11643, "__stdin__", #11649, "2") +#11650 = @"C_module$sys$2__stdout__" +py_cobjects(#11650) +py_cobjecttypes(#11650, #11179) +py_cobject_sources(#11650, 0) +py_cobjectnames(#11650, "object") +py_cmembers_versioned(#11643, "__stdout__", #11650, "2") +#11651 = @"C_module$sys$2_clear_type_cache" +py_cobjects(#11651) +py_cobjecttypes(#11651, #10075) +py_cobject_sources(#11651, 0) +py_cobjectnames(#11651, "_clear_type_cache") +py_cmembers_versioned(#11643, "_clear_type_cache", #11651, "2") +#11652 = @"C_module$sys$2_current_frames" +py_cobjects(#11652) +py_cobjecttypes(#11652, #10075) +py_cobject_sources(#11652, 0) +py_cobjectnames(#11652, "_current_frames") +py_cmembers_versioned(#11643, "_current_frames", #11652, "2") +#11653 = @"C_module$sys$2_getframe" +py_cobjects(#11653) +py_cobjecttypes(#11653, #10075) +py_cobject_sources(#11653, 0) +py_cobjectnames(#11653, "_getframe") +py_cmembers_versioned(#11643, "_getframe", #11653, "2") +#11654 = @"C_module$sys$2_git" +py_cobjects(#11654) +py_cobjecttypes(#11654, #10737) +py_cobject_sources(#11654, 0) +#11655 = @"C_bytes$3348cc07058a464ebb973af5bfdb70ca7968c2db" +py_cobjects(#11655) +py_cobjecttypes(#11655, #10028) +py_cobject_sources(#11655, 0) +py_cobjectnames(#11655, "b'CPython'") +py_citems(#11654, 0, #11655) +#11656 = @"C_bytes$da39a3ee5e6b4b0d3255bfef95601890afd80709" +py_cobjects(#11656) +py_cobjecttypes(#11656, #10028) +py_cobject_sources(#11656, 0) +py_cobjectnames(#11656, "b''") +py_citems(#11654, 1, #11656) +py_citems(#11654, 2, #11656) +py_cobjectnames(#11654, "object") +py_cmembers_versioned(#11643, "_git", #11654, "2") +#11657 = @"C_bytes$606cb74201e7d8dbdf8268c2eaaf1339a46e918f" +py_cobjects(#11657) +py_cobjecttypes(#11657, #10028) +py_cobject_sources(#11657, 0) +py_cobjectnames(#11657, "b'x86_64-linux-gnu'") +py_cmembers_versioned(#11643, "_multiarch", #11657, "2") +#11658 = @"C_int$1013" +py_cobjects(#11658) +py_cobjecttypes(#11658, #10449) +py_cobject_sources(#11658, 0) +py_cobjectnames(#11658, "1013") +py_cmembers_versioned(#11643, "api_version", #11658, "2") +#11659 = @"C_module$sys$2argv" +py_cobjects(#11659) +py_cobjecttypes(#11659, #11360) +py_cobject_sources(#11659, 0) +#11660 = @"C_bytes$3525e833c783a558fedf8363ced06fbd55ba3fde" +py_cobjects(#11660) +py_cobjecttypes(#11660, #10028) +py_cobject_sources(#11660, 0) +py_cobjectnames(#11660, "b'/workspaces/semmle-code/target/intree/codeql-python/python/tools/python_tracer.py'") +py_citems(#11659, 0, #11660) +#11661 = @"C_bytes$4d784a907a3cc0f3fd96b4e3f625477b38bee0be" +py_cobjects(#11661) +py_cobjecttypes(#11661, #10028) +py_cobject_sources(#11661, 0) +py_cobjectnames(#11661, "b'--lang=2'") +py_citems(#11659, 1, #11661) +#11662 = @"C_bytes$1d553e9f135045e774e0da5c3598818711d8b00e" +py_cobjects(#11662) +py_cobjecttypes(#11662, #10028) +py_cobject_sources(#11662, 0) +py_cobjectnames(#11662, "b'--filter=exclude:**/*.testproj/**'") +py_citems(#11659, 2, #11662) +#11663 = @"C_bytes$a94a8fe5ccb19ba61c4c0873d391e987982fbbd3" +py_cobjects(#11663) +py_cobjecttypes(#11663, #10028) +py_cobject_sources(#11663, 0) +py_cobjectnames(#11663, "b'test'") +py_citems(#11659, 3, #11663) +#11664 = @"C_bytes$61adf419d11f4120dca81c8a4723b29f991057ae" +py_cobjects(#11664) +py_cobjecttypes(#11664, #10028) +py_cobject_sources(#11664, 0) +py_cobjectnames(#11664, "b'--path'") +py_citems(#11659, 4, #11664) +#11665 = @"C_bytes$f2389c259ec2ef77490e6ddf8541bcf8aac70ec5" +py_cobjects(#11665) +py_cobjecttypes(#11665, #10028) +py_cobject_sources(#11665, 0) +py_cobjectnames(#11665, "b'/workspaces/semmle-code/semmlecode-python-tests/2/extractor-tests/old_style_disequality'") +py_citems(#11659, 5, #11665) +#11666 = @"C_bytes$ae835d85f6fdd7ac1cd47d7547e266fd5322d1fd" +py_cobjects(#11666) +py_cobjecttypes(#11666, #10028) +py_cobject_sources(#11666, 0) +py_cobjectnames(#11666, "b'--verbosity'") +py_citems(#11659, 6, #11666) +py_citems(#11659, 7, #10642) +#11667 = @"C_bytes$b31f41bd9ba68328bfcf0fa41365ff5b3f60be99" +py_cobjects(#11667) +py_cobjecttypes(#11667, #10028) +py_cobject_sources(#11667, 0) +py_cobjectnames(#11667, "b'--colorize'") +py_citems(#11659, 8, #11667) +py_cobjectnames(#11659, "object") +py_cmembers_versioned(#11643, "argv", #11659, "2") +#11668 = @"C_module$sys$2builtin_module_names" +py_cobjects(#11668) +py_cobjecttypes(#11668, #10737) +py_cobject_sources(#11668, 0) +#11669 = @"C_bytes$3f91ef9b413ce508f0382fd3b182901dfb6bb0ce" +py_cobjects(#11669) +py_cobjecttypes(#11669, #10028) +py_cobject_sources(#11669, 0) +py_cobjectnames(#11669, "b'__builtin__'") +py_citems(#11668, 0, #11669) +#11670 = @"C_bytes$3a64a9fca18e24c6cc560c53c3603d38f21d45e1" +py_cobjects(#11670) +py_cobjecttypes(#11670, #10028) +py_cobject_sources(#11670, 0) +py_cobjectnames(#11670, "b'__main__'") +py_citems(#11668, 1, #11670) +#11671 = @"C_bytes$7f2b7c5a60c2644f250e9dc7ff7fa02592aea266" +py_cobjects(#11671) +py_cobjecttypes(#11671, #10028) +py_cobject_sources(#11671, 0) +py_cobjectnames(#11671, "b'_ast'") +py_citems(#11668, 2, #11671) +#11672 = @"C_bytes$579c90c0e572bc4bbbd532c809cc7f3f9556e817" +py_cobjects(#11672) +py_cobjecttypes(#11672, #10028) +py_cobject_sources(#11672, 0) +py_cobjectnames(#11672, "b'_bisect'") +py_citems(#11668, 3, #11672) +#11673 = @"C_bytes$a5513e85db2649ca88ef79d90f9b5ec947daa37a" +py_cobjects(#11673) +py_cobjecttypes(#11673, #10028) +py_cobject_sources(#11673, 0) +py_cobjectnames(#11673, "b'_codecs'") +py_citems(#11668, 4, #11673) +#11674 = @"C_bytes$2746b94ac2170388acf8ef9c5235281512a0b70b" +py_cobjects(#11674) +py_cobjecttypes(#11674, #10028) +py_cobject_sources(#11674, 0) +py_cobjectnames(#11674, "b'_collections'") +py_citems(#11668, 5, #11674) +#11675 = @"C_bytes$373d3cb70f3711a68632cf0ac8abac03b9be62c0" +py_cobjects(#11675) +py_cobjecttypes(#11675, #10028) +py_cobject_sources(#11675, 0) +py_cobjectnames(#11675, "b'_functools'") +py_citems(#11668, 6, #11675) +#11676 = @"C_bytes$4884118d98d0aede7dbe8a7716c62711f537c647" +py_cobjects(#11676) +py_cobjecttypes(#11676, #10028) +py_cobject_sources(#11676, 0) +py_cobjectnames(#11676, "b'_heapq'") +py_citems(#11668, 7, #11676) +#11677 = @"C_bytes$49e43a67a5b4471f57ac2bd55af13ff7ecec742c" +py_cobjects(#11677) +py_cobjecttypes(#11677, #10028) +py_cobject_sources(#11677, 0) +py_cobjectnames(#11677, "b'_io'") +py_citems(#11668, 8, #11677) +#11678 = @"C_bytes$bb60618a3277db614bb1bf9d31e93549d8a807e6" +py_cobjects(#11678) +py_cobjecttypes(#11678, #10028) +py_cobject_sources(#11678, 0) +py_cobjectnames(#11678, "b'_locale'") +py_citems(#11668, 9, #11678) +#11679 = @"C_bytes$d1a7b4357d59cd4c4148040383196bab2ccf8555" +py_cobjects(#11679) +py_cobjecttypes(#11679, #10028) +py_cobject_sources(#11679, 0) +py_cobjectnames(#11679, "b'_md5'") +py_citems(#11668, 10, #11679) +#11680 = @"C_bytes$24052cebfe42e91a49777122be7c3f21c156a0ab" +py_cobjects(#11680) +py_cobjecttypes(#11680, #10028) +py_cobject_sources(#11680, 0) +py_cobjectnames(#11680, "b'_random'") +py_citems(#11668, 11, #11680) +#11681 = @"C_bytes$0762689429334731c7dac22f446b8c834bae8f7f" +py_cobjects(#11681) +py_cobjecttypes(#11681, #10028) +py_cobject_sources(#11681, 0) +py_cobjectnames(#11681, "b'_sha'") +py_citems(#11668, 12, #11681) +#11682 = @"C_bytes$d75584fc276a600d1be0adf40497ceb4424302e3" +py_cobjects(#11682) +py_cobjecttypes(#11682, #10028) +py_cobject_sources(#11682, 0) +py_cobjectnames(#11682, "b'_sha256'") +py_citems(#11668, 13, #11682) +#11683 = @"C_bytes$b3c56529fe2d273d138f9dab908f168f0ab71f90" +py_cobjects(#11683) +py_cobjecttypes(#11683, #10028) +py_cobject_sources(#11683, 0) +py_cobjectnames(#11683, "b'_sha512'") +py_citems(#11668, 14, #11683) +#11684 = @"C_bytes$fb6e6f2753b5318a7c94409f2d24464dc2a501e6" +py_cobjects(#11684) +py_cobjecttypes(#11684, #10028) +py_cobject_sources(#11684, 0) +py_cobjectnames(#11684, "b'_socket'") +py_citems(#11668, 15, #11684) +#11685 = @"C_bytes$c85d64f512bebf46e4b005eac3b2a4d793990c41" +py_cobjects(#11685) +py_cobjecttypes(#11685, #10028) +py_cobject_sources(#11685, 0) +py_cobjectnames(#11685, "b'_sre'") +py_citems(#11668, 16, #11685) +#11686 = @"C_bytes$20c7ae9aa8121530a5f9beadc347387ffc7c5047" +py_cobjects(#11686) +py_cobjecttypes(#11686, #10028) +py_cobject_sources(#11686, 0) +py_cobjectnames(#11686, "b'_struct'") +py_citems(#11668, 17, #11686) +#11687 = @"C_bytes$25d3812809eac256ba6e983daf04ba4514944b98" +py_cobjects(#11687) +py_cobjecttypes(#11687, #10028) +py_cobject_sources(#11687, 0) +py_cobjectnames(#11687, "b'_symtable'") +py_citems(#11668, 18, #11687) +#11688 = @"C_bytes$cad00083c035d5c5a9920f1d6ab0aa725d6b2a62" +py_cobjects(#11688) +py_cobjecttypes(#11688, #10028) +py_cobject_sources(#11688, 0) +py_cobjectnames(#11688, "b'_warnings'") +py_citems(#11668, 19, #11688) +#11689 = @"C_bytes$5b3590706710d2ebcfefaee3bcd9cb5d86d57638" +py_cobjects(#11689) +py_cobjecttypes(#11689, #10028) +py_cobject_sources(#11689, 0) +py_cobjectnames(#11689, "b'_weakref'") +py_citems(#11668, 20, #11689) +#11690 = @"C_bytes$19edc1210777ba4d45049c29280d9cc5e1064c25" +py_cobjects(#11690) +py_cobjecttypes(#11690, #10028) +py_cobject_sources(#11690, 0) +py_cobjectnames(#11690, "b'array'") +py_citems(#11668, 21, #11690) +#11691 = @"C_bytes$e18849f6ba6a1716be9658bf2e81dabf5cc87e08" +py_cobjects(#11691) +py_cobjecttypes(#11691, #10028) +py_cobject_sources(#11691, 0) +py_cobjectnames(#11691, "b'binascii'") +py_citems(#11668, 22, #11691) +#11692 = @"C_bytes$c23743518188a296469ec72037c11849dd828f2e" +py_cobjects(#11692) +py_cobjecttypes(#11692, #10028) +py_cobject_sources(#11692, 0) +py_cobjectnames(#11692, "b'cPickle'") +py_citems(#11668, 23, #11692) +#11693 = @"C_bytes$238fb40c01b6c32b54e6cf6c6535669b4bfe3fd6" +py_cobjects(#11693) +py_cobjecttypes(#11693, #10028) +py_cobject_sources(#11693, 0) +py_cobjectnames(#11693, "b'cStringIO'") +py_citems(#11668, 24, #11693) +#11694 = @"C_bytes$db9c549ff758cb4652abd88be911451e1d14b690" +py_cobjects(#11694) +py_cobjecttypes(#11694, #10028) +py_cobject_sources(#11694, 0) +py_cobjectnames(#11694, "b'cmath'") +py_citems(#11668, 25, #11694) +#11695 = @"C_bytes$89ffad089c042f31dcc81269da38bef3ca44ab1f" +py_cobjects(#11695) +py_cobjecttypes(#11695, #10028) +py_cobject_sources(#11695, 0) +py_cobjectnames(#11695, "b'datetime'") +py_citems(#11668, 26, #11695) +#11696 = @"C_bytes$2798a19580337f0834e0b47679f7519778234ff2" +py_cobjects(#11696) +py_cobjecttypes(#11696, #10028) +py_cobject_sources(#11696, 0) +py_cobjectnames(#11696, "b'errno'") +py_citems(#11668, 27, #11696) +#11697 = @"C_bytes$be51ea0d2df953559db847ba84b885b258389873" +py_cobjects(#11697) +py_cobjecttypes(#11697, #10028) +py_cobject_sources(#11697, 0) +py_cobjectnames(#11697, "b'exceptions'") +py_citems(#11668, 28, #11697) +#11698 = @"C_bytes$6937c060e9afe977761075e2fefb163b45e0f03f" +py_cobjects(#11698) +py_cobjecttypes(#11698, #10028) +py_cobject_sources(#11698, 0) +py_cobjectnames(#11698, "b'fcntl'") +py_citems(#11668, 29, #11698) +#11699 = @"C_bytes$ec6d9083d77b970950e8340ff01d89108b346e38" +py_cobjects(#11699) +py_cobjecttypes(#11699, #10028) +py_cobject_sources(#11699, 0) +py_cobjectnames(#11699, "b'gc'") +py_citems(#11668, 30, #11699) +#11700 = @"C_bytes$6567df49fab5b0928c13f561b7181fed734b915d" +py_cobjects(#11700) +py_cobjecttypes(#11700, #10028) +py_cobject_sources(#11700, 0) +py_cobjectnames(#11700, "b'grp'") +py_citems(#11668, 31, #11700) +#11701 = @"C_bytes$7ebbccbf2a9ebaa9338648798afddf195f6f1b63" +py_cobjects(#11701) +py_cobjecttypes(#11701, #10028) +py_cobject_sources(#11701, 0) +py_cobjectnames(#11701, "b'imp'") +py_citems(#11668, 32, #11701) +#11702 = @"C_bytes$9e9cf1097fbb8c0af843641c0e32781c81ce4931" +py_cobjects(#11702) +py_cobjecttypes(#11702, #10028) +py_cobject_sources(#11702, 0) +py_cobjectnames(#11702, "b'itertools'") +py_citems(#11668, 33, #11702) +#11703 = @"C_bytes$4ab93184b1744659f5162beef22b666b5411ac26" +py_cobjects(#11703) +py_cobjecttypes(#11703, #10028) +py_cobject_sources(#11703, 0) +py_cobjectnames(#11703, "b'marshal'") +py_citems(#11668, 34, #11703) +#11704 = @"C_bytes$7a488390a939c4795cc1a801e51751d5f25d800d" +py_cobjects(#11704) +py_cobjecttypes(#11704, #10028) +py_cobject_sources(#11704, 0) +py_cobjectnames(#11704, "b'math'") +py_citems(#11668, 35, #11704) +#11705 = @"C_bytes$fe96dd39756ac41b74283a9292652d366d73931f" +py_cobjects(#11705) +py_cobjecttypes(#11705, #10028) +py_cobject_sources(#11705, 0) +py_cobjectnames(#11705, "b'operator'") +py_citems(#11668, 36, #11705) +#11706 = @"C_bytes$bfdba57c2ea525d68cd766e6ddc87ae634e2c0ff" +py_cobjects(#11706) +py_cobjecttypes(#11706, #10028) +py_cobject_sources(#11706, 0) +py_cobjectnames(#11706, "b'posix'") +py_citems(#11668, 37, #11706) +#11707 = @"C_bytes$37fa265330ad83eaa879efb1e2db6380896cf639" +py_cobjects(#11707) +py_cobjecttypes(#11707, #10028) +py_cobject_sources(#11707, 0) +py_cobjectnames(#11707, "b'pwd'") +py_citems(#11668, 38, #11707) +#11708 = @"C_bytes$81448fe273247b533b9f018e96c158cab7901247" +py_cobjects(#11708) +py_cobjecttypes(#11708, #10028) +py_cobject_sources(#11708, 0) +py_cobjectnames(#11708, "b'select'") +py_citems(#11668, 39, #11708) +#11709 = @"C_bytes$36ab4aaa56c8fea2a7afdfa5b5fcd28c9e178754" +py_cobjects(#11709) +py_cobjecttypes(#11709, #10028) +py_cobject_sources(#11709, 0) +py_cobjectnames(#11709, "b'signal'") +py_citems(#11668, 40, #11709) +#11710 = @"C_bytes$1c4930bf21779b36a222bcf4a7b2ef9f901c7ea5" +py_cobjects(#11710) +py_cobjecttypes(#11710, #10028) +py_cobject_sources(#11710, 0) +py_cobjectnames(#11710, "b'spwd'") +py_citems(#11668, 41, #11710) +#11711 = @"C_bytes$3eb8d4a57d237be3b4f016fc859f173c6358a3a9" +py_cobjects(#11711) +py_cobjecttypes(#11711, #10028) +py_cobject_sources(#11711, 0) +py_cobjectnames(#11711, "b'strop'") +py_citems(#11668, 42, #11711) +#11712 = @"C_bytes$b4c56ee8d2854166dec66644f541b85247105b2c" +py_cobjects(#11712) +py_cobjecttypes(#11712, #10028) +py_cobject_sources(#11712, 0) +py_cobjectnames(#11712, "b'sys'") +py_citems(#11668, 43, #11712) +#11713 = @"C_bytes$e0543ba22ccc80a5d2365241ee2adb754f80be19" +py_cobjects(#11713) +py_cobjecttypes(#11713, #10028) +py_cobject_sources(#11713, 0) +py_cobjectnames(#11713, "b'syslog'") +py_citems(#11668, 44, #11713) +#11714 = @"C_bytes$c283e375ed8cebf3b8d1b5101fd51bb522961656" +py_cobjects(#11714) +py_cobjecttypes(#11714, #10028) +py_cobject_sources(#11714, 0) +py_cobjectnames(#11714, "b'thread'") +py_citems(#11668, 45, #11714) +#11715 = @"C_bytes$714eea0f4c980736bde0065fe73f573487f08e3a" +py_cobjects(#11715) +py_cobjecttypes(#11715, #10028) +py_cobject_sources(#11715, 0) +py_cobjectnames(#11715, "b'time'") +py_citems(#11668, 46, #11715) +#11716 = @"C_bytes$61e641afa9068a62e8107e67e70787c7e3dadd3f" +py_cobjects(#11716) +py_cobjecttypes(#11716, #10028) +py_cobject_sources(#11716, 0) +py_cobjectnames(#11716, "b'unicodedata'") +py_citems(#11668, 47, #11716) +#11717 = @"C_bytes$176b85ad73d71f4fd2df7eb79cf4950d1b4516b4" +py_cobjects(#11717) +py_cobjecttypes(#11717, #10028) +py_cobject_sources(#11717, 0) +py_cobjectnames(#11717, "b'xxsubtype'") +py_citems(#11668, 48, #11717) +#11718 = @"C_bytes$458148110bacc19758d7f559121f6768feb64dd0" +py_cobjects(#11718) +py_cobjecttypes(#11718, #10028) +py_cobject_sources(#11718, 0) +py_cobjectnames(#11718, "b'zipimport'") +py_citems(#11668, 49, #11718) +#11719 = @"C_bytes$57968f12798767ae5da8b15a0c383ad79d0f338b" +py_cobjects(#11719) +py_cobjecttypes(#11719, #10028) +py_cobject_sources(#11719, 0) +py_cobjectnames(#11719, "b'zlib'") +py_citems(#11668, 50, #11719) +py_cobjectnames(#11668, "object") +py_cmembers_versioned(#11643, "builtin_module_names", #11668, "2") +#11720 = @"C_bytes$4502229742dda5345d35a1c216dfadb1a96b3c68" +py_cobjects(#11720) +py_cobjecttypes(#11720, #10028) +py_cobject_sources(#11720, 0) +py_cobjectnames(#11720, "b'little'") +py_cmembers_versioned(#11643, "byteorder", #11720, "2") +#11721 = @"C_module$sys$2call_tracing" +py_cobjects(#11721) +py_cobjecttypes(#11721, #10075) +py_cobject_sources(#11721, 0) +py_cobjectnames(#11721, "call_tracing") +py_cmembers_versioned(#11643, "call_tracing", #11721, "2") +#11722 = @"C_module$sys$2callstats" +py_cobjects(#11722) +py_cobjecttypes(#11722, #10075) +py_cobject_sources(#11722, 0) +py_cobjectnames(#11722, "callstats") +py_cmembers_versioned(#11643, "callstats", #11722, "2") +#11723 = @"C_bytes$3729d369b12aaead877cfb632b4f72b7fa82ec27" +py_cobjects(#11723) +py_cobjecttypes(#11723, #10028) +py_cobject_sources(#11723, 0) +py_cobjectnames(#11723, "b'Copyright (c) 2001-2020 Python Software Foundation. +All Rights Reserved. + +Copyright (c) 2000 BeOpen.com. +All Rights Reserved. + +Copyright (c) 1995-2001 Corporation for National Research Initiatives. +All Rights Reserved. + +Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. +All Rights Reserved.'") +py_cmembers_versioned(#11643, "copyright", #11723, "2") +py_cmembers_versioned(#11643, "displayhook", #11644, "2") +py_cmembers_versioned(#11643, "dont_write_bytecode", #10644, "2") +#11724 = @"C_module$sys$2exc_clear" +py_cobjects(#11724) +py_cobjecttypes(#11724, #10075) +py_cobject_sources(#11724, 0) +py_cobjectnames(#11724, "exc_clear") +py_cmembers_versioned(#11643, "exc_clear", #11724, "2") +#11725 = @"C_module$sys$2exc_info" +py_cobjects(#11725) +py_cobjecttypes(#11725, #10075) +py_cobject_sources(#11725, 0) +py_cobjectnames(#11725, "exc_info") +py_cmembers_versioned(#11643, "exc_info", #11725, "2") +py_cmembers_versioned(#11643, "excepthook", #11646, "2") +#11726 = @"C_bytes$5c0e77c46be77719bc1c0a5ec9c64b94d2a2e50c" +py_cobjects(#11726) +py_cobjecttypes(#11726, #10028) +py_cobject_sources(#11726, 0) +py_cobjectnames(#11726, "b'/usr'") +py_cmembers_versioned(#11643, "exec_prefix", #11726, "2") +#11727 = @"C_bytes$ff88ec09d47f04c9e62b5e5731d143c909d2b88f" +py_cobjects(#11727) +py_cobjecttypes(#11727, #10028) +py_cobject_sources(#11727, 0) +py_cobjectnames(#11727, "b'/usr/bin/python2'") +py_cmembers_versioned(#11643, "executable", #11727, "2") +#11728 = @"C_module$sys$2exit" +py_cobjects(#11728) +py_cobjecttypes(#11728, #10075) +py_cobject_sources(#11728, 0) +py_cobjectnames(#11728, "exit") +py_cmembers_versioned(#11643, "exit", #11728, "2") +#11729 = @"C_module$sys$2exitfunc" +py_cobjects(#11729) +py_cobjecttypes(#11729, #10000) +py_cobject_sources(#11729, 0) +py_cobjectnames(#11729, "_run_exitfuncs") +py_cmembers_versioned(#11643, "exitfunc", #11729, "2") +#11730 = @"C_module$sys$2flags" +#11731 = @"C_type$sys.flags" +py_cobjects(#11731) +py_cobjecttypes(#11731, #10001) +py_cobject_sources(#11731, 0) +#11732 = @"C_type$sys.flags$2__add__" +py_cobjects(#11732) +py_cobjecttypes(#11732, #10005) +py_cobject_sources(#11732, 0) +py_cobjectnames(#11732, "__add__") +py_cmembers_versioned(#11731, "__add__", #11732, "2") +#11733 = @"C_type$sys.flags$2__contains__" +py_cobjects(#11733) +py_cobjecttypes(#11733, #10005) +py_cobject_sources(#11733, 0) +py_cobjectnames(#11733, "__contains__") +py_cmembers_versioned(#11731, "__contains__", #11733, "2") +#11734 = @"C_bytes$c5f0683e524addae0a4a9017696f4f973c26b979" +py_cobjects(#11734) +py_cobjecttypes(#11734, #10028) +py_cobject_sources(#11734, 0) +py_cobjectnames(#11734, "b'sys.flags + +Flags provided through command line arguments or environment vars.'") +py_cmembers_versioned(#11731, "__doc__", #11734, "2") +#11735 = @"C_type$sys.flags$2__eq__" +py_cobjects(#11735) +py_cobjecttypes(#11735, #10005) +py_cobject_sources(#11735, 0) +py_cobjectnames(#11735, "__eq__") +py_cmembers_versioned(#11731, "__eq__", #11735, "2") +#11736 = @"C_type$sys.flags$2__ge__" +py_cobjects(#11736) +py_cobjecttypes(#11736, #10005) +py_cobject_sources(#11736, 0) +py_cobjectnames(#11736, "__ge__") +py_cmembers_versioned(#11731, "__ge__", #11736, "2") +#11737 = @"C_type$sys.flags$2__getitem__" +py_cobjects(#11737) +py_cobjecttypes(#11737, #10005) +py_cobject_sources(#11737, 0) +py_cobjectnames(#11737, "__getitem__") +py_cmembers_versioned(#11731, "__getitem__", #11737, "2") +#11738 = @"C_type$sys.flags$2__getslice__" +py_cobjects(#11738) +py_cobjecttypes(#11738, #10005) +py_cobject_sources(#11738, 0) +py_cobjectnames(#11738, "__getslice__") +py_cmembers_versioned(#11731, "__getslice__", #11738, "2") +#11739 = @"C_type$sys.flags$2__gt__" +py_cobjects(#11739) +py_cobjecttypes(#11739, #10005) +py_cobject_sources(#11739, 0) +py_cobjectnames(#11739, "__gt__") +py_cmembers_versioned(#11731, "__gt__", #11739, "2") +#11740 = @"C_type$sys.flags$2__hash__" +py_cobjects(#11740) +py_cobjecttypes(#11740, #10005) +py_cobject_sources(#11740, 0) +py_cobjectnames(#11740, "__hash__") +py_cmembers_versioned(#11731, "__hash__", #11740, "2") +#11741 = @"C_type$sys.flags$2__le__" +py_cobjects(#11741) +py_cobjecttypes(#11741, #10005) +py_cobject_sources(#11741, 0) +py_cobjectnames(#11741, "__le__") +py_cmembers_versioned(#11731, "__le__", #11741, "2") +#11742 = @"C_type$sys.flags$2__len__" +py_cobjects(#11742) +py_cobjecttypes(#11742, #10005) +py_cobject_sources(#11742, 0) +py_cobjectnames(#11742, "__len__") +py_cmembers_versioned(#11731, "__len__", #11742, "2") +#11743 = @"C_type$sys.flags$2__lt__" +py_cobjects(#11743) +py_cobjecttypes(#11743, #10005) +py_cobject_sources(#11743, 0) +py_cobjectnames(#11743, "__lt__") +py_cmembers_versioned(#11731, "__lt__", #11743, "2") +#11744 = @"C_type$sys.flags$2__mul__" +py_cobjects(#11744) +py_cobjecttypes(#11744, #10005) +py_cobject_sources(#11744, 0) +py_cobjectnames(#11744, "__mul__") +py_cmembers_versioned(#11731, "__mul__", #11744, "2") +#11745 = @"C_type$sys.flags$2__ne__" +py_cobjects(#11745) +py_cobjecttypes(#11745, #10005) +py_cobject_sources(#11745, 0) +py_cobjectnames(#11745, "__ne__") +py_cmembers_versioned(#11731, "__ne__", #11745, "2") +#11746 = @"C_type$sys.flags$2__new__" +py_cobjects(#11746) +py_cobjecttypes(#11746, #10075) +py_cobject_sources(#11746, 0) +py_cobjectnames(#11746, "__new__") +py_cmembers_versioned(#11731, "__new__", #11746, "2") +#11747 = @"C_type$sys.flags$2__reduce__" +py_cobjects(#11747) +py_cobjecttypes(#11747, #10034) +py_cobject_sources(#11747, 0) +py_cobjectnames(#11747, "__reduce__") +py_cmembers_versioned(#11731, "__reduce__", #11747, "2") +#11748 = @"C_type$sys.flags$2__repr__" +py_cobjects(#11748) +py_cobjecttypes(#11748, #10005) +py_cobject_sources(#11748, 0) +py_cobjectnames(#11748, "__repr__") +py_cmembers_versioned(#11731, "__repr__", #11748, "2") +#11749 = @"C_type$sys.flags$2__rmul__" +py_cobjects(#11749) +py_cobjecttypes(#11749, #10005) +py_cobject_sources(#11749, 0) +py_cobjectnames(#11749, "__rmul__") +py_cmembers_versioned(#11731, "__rmul__", #11749, "2") +#11750 = @"C_type$sys.flags$2bytes_warning" +py_cobjects(#11750) +py_cobjecttypes(#11750, #10045) +py_cobject_sources(#11750, 0) +py_cobjectnames(#11750, "bytes_warning") +py_cmembers_versioned(#11731, "bytes_warning", #11750, "2") +#11751 = @"C_type$sys.flags$2debug" +py_cobjects(#11751) +py_cobjecttypes(#11751, #10045) +py_cobject_sources(#11751, 0) +py_cobjectnames(#11751, "debug") +py_cmembers_versioned(#11731, "debug", #11751, "2") +#11752 = @"C_type$sys.flags$2division_new" +py_cobjects(#11752) +py_cobjecttypes(#11752, #10045) +py_cobject_sources(#11752, 0) +py_cobjectnames(#11752, "division_new") +py_cmembers_versioned(#11731, "division_new", #11752, "2") +#11753 = @"C_type$sys.flags$2division_warning" +py_cobjects(#11753) +py_cobjecttypes(#11753, #10045) +py_cobject_sources(#11753, 0) +py_cobjectnames(#11753, "division_warning") +py_cmembers_versioned(#11731, "division_warning", #11753, "2") +#11754 = @"C_type$sys.flags$2dont_write_bytecode" +py_cobjects(#11754) +py_cobjecttypes(#11754, #10045) +py_cobject_sources(#11754, 0) +py_cobjectnames(#11754, "dont_write_bytecode") +py_cmembers_versioned(#11731, "dont_write_bytecode", #11754, "2") +#11755 = @"C_type$sys.flags$2hash_randomization" +py_cobjects(#11755) +py_cobjecttypes(#11755, #10045) +py_cobject_sources(#11755, 0) +py_cobjectnames(#11755, "hash_randomization") +py_cmembers_versioned(#11731, "hash_randomization", #11755, "2") +#11756 = @"C_type$sys.flags$2ignore_environment" +py_cobjects(#11756) +py_cobjecttypes(#11756, #10045) +py_cobject_sources(#11756, 0) +py_cobjectnames(#11756, "ignore_environment") +py_cmembers_versioned(#11731, "ignore_environment", #11756, "2") +#11757 = @"C_type$sys.flags$2inspect" +py_cobjects(#11757) +py_cobjecttypes(#11757, #10045) +py_cobject_sources(#11757, 0) +py_cobjectnames(#11757, "inspect") +py_cmembers_versioned(#11731, "inspect", #11757, "2") +#11758 = @"C_type$sys.flags$2interactive" +py_cobjects(#11758) +py_cobjecttypes(#11758, #10045) +py_cobject_sources(#11758, 0) +py_cobjectnames(#11758, "interactive") +py_cmembers_versioned(#11731, "interactive", #11758, "2") +#11759 = @"C_int$16" +py_cobjects(#11759) +py_cobjecttypes(#11759, #10449) +py_cobject_sources(#11759, 0) +py_cobjectnames(#11759, "16") +py_cmembers_versioned(#11731, "n_fields", #11759, "2") +py_cmembers_versioned(#11731, "n_sequence_fields", #11759, "2") +#11760 = @"C_int$0" +py_cobjects(#11760) +py_cobjecttypes(#11760, #10449) +py_cobject_sources(#11760, 0) +py_cobjectnames(#11760, "0") +py_cmembers_versioned(#11731, "n_unnamed_fields", #11760, "2") +#11761 = @"C_type$sys.flags$2no_site" +py_cobjects(#11761) +py_cobjecttypes(#11761, #10045) +py_cobject_sources(#11761, 0) +py_cobjectnames(#11761, "no_site") +py_cmembers_versioned(#11731, "no_site", #11761, "2") +#11762 = @"C_type$sys.flags$2no_user_site" +py_cobjects(#11762) +py_cobjecttypes(#11762, #10045) +py_cobject_sources(#11762, 0) +py_cobjectnames(#11762, "no_user_site") +py_cmembers_versioned(#11731, "no_user_site", #11762, "2") +#11763 = @"C_type$sys.flags$2optimize" +py_cobjects(#11763) +py_cobjecttypes(#11763, #10045) +py_cobject_sources(#11763, 0) +py_cobjectnames(#11763, "optimize") +py_cmembers_versioned(#11731, "optimize", #11763, "2") +#11764 = @"C_type$sys.flags$2py3k_warning" +py_cobjects(#11764) +py_cobjecttypes(#11764, #10045) +py_cobject_sources(#11764, 0) +py_cobjectnames(#11764, "py3k_warning") +py_cmembers_versioned(#11731, "py3k_warning", #11764, "2") +#11765 = @"C_type$sys.flags$2tabcheck" +py_cobjects(#11765) +py_cobjecttypes(#11765, #10045) +py_cobject_sources(#11765, 0) +py_cobjectnames(#11765, "tabcheck") +py_cmembers_versioned(#11731, "tabcheck", #11765, "2") +#11766 = @"C_type$sys.flags$2unicode" +py_cobjects(#11766) +py_cobjecttypes(#11766, #10045) +py_cobject_sources(#11766, 0) +py_cobjectnames(#11766, "unicode") +py_cmembers_versioned(#11731, "unicode", #11766, "2") +#11767 = @"C_type$sys.flags$2verbose" +py_cobjects(#11767) +py_cobjecttypes(#11767, #10045) +py_cobject_sources(#11767, 0) +py_cobjectnames(#11767, "verbose") +py_cmembers_versioned(#11731, "verbose", #11767, "2") +py_cmembers_versioned(#11731, ".super.", #10021, "2") +py_cobjectnames(#11731, "sys.flags") +py_cobjects(#11730) +py_cobjecttypes(#11730, #11731) +py_cobject_sources(#11730, 0) +py_cobjectnames(#11730, "object") +py_cmembers_versioned(#11643, "flags", #11730, "2") +#11768 = @"C_module$sys$2float_info" +#11769 = @"C_type$sys.float_info" +py_cobjects(#11769) +py_cobjecttypes(#11769, #10001) +py_cobject_sources(#11769, 0) +#11770 = @"C_type$sys.float_info$2__add__" +py_cobjects(#11770) +py_cobjecttypes(#11770, #10005) +py_cobject_sources(#11770, 0) +py_cobjectnames(#11770, "__add__") +py_cmembers_versioned(#11769, "__add__", #11770, "2") +#11771 = @"C_type$sys.float_info$2__contains__" +py_cobjects(#11771) +py_cobjecttypes(#11771, #10005) +py_cobject_sources(#11771, 0) +py_cobjectnames(#11771, "__contains__") +py_cmembers_versioned(#11769, "__contains__", #11771, "2") +#11772 = @"C_bytes$935b023aceb2b524c5055152b512bae674cf28fd" +py_cobjects(#11772) +py_cobjecttypes(#11772, #10028) +py_cobject_sources(#11772, 0) +py_cobjectnames(#11772, "b'sys.float_info + +A structseq holding information about the float type. It contains low level +information about the precision and internal representation. Please study +your system's :file:`float.h` for more information.'") +py_cmembers_versioned(#11769, "__doc__", #11772, "2") +#11773 = @"C_type$sys.float_info$2__eq__" +py_cobjects(#11773) +py_cobjecttypes(#11773, #10005) +py_cobject_sources(#11773, 0) +py_cobjectnames(#11773, "__eq__") +py_cmembers_versioned(#11769, "__eq__", #11773, "2") +#11774 = @"C_type$sys.float_info$2__ge__" +py_cobjects(#11774) +py_cobjecttypes(#11774, #10005) +py_cobject_sources(#11774, 0) +py_cobjectnames(#11774, "__ge__") +py_cmembers_versioned(#11769, "__ge__", #11774, "2") +#11775 = @"C_type$sys.float_info$2__getitem__" +py_cobjects(#11775) +py_cobjecttypes(#11775, #10005) +py_cobject_sources(#11775, 0) +py_cobjectnames(#11775, "__getitem__") +py_cmembers_versioned(#11769, "__getitem__", #11775, "2") +#11776 = @"C_type$sys.float_info$2__getslice__" +py_cobjects(#11776) +py_cobjecttypes(#11776, #10005) +py_cobject_sources(#11776, 0) +py_cobjectnames(#11776, "__getslice__") +py_cmembers_versioned(#11769, "__getslice__", #11776, "2") +#11777 = @"C_type$sys.float_info$2__gt__" +py_cobjects(#11777) +py_cobjecttypes(#11777, #10005) +py_cobject_sources(#11777, 0) +py_cobjectnames(#11777, "__gt__") +py_cmembers_versioned(#11769, "__gt__", #11777, "2") +#11778 = @"C_type$sys.float_info$2__hash__" +py_cobjects(#11778) +py_cobjecttypes(#11778, #10005) +py_cobject_sources(#11778, 0) +py_cobjectnames(#11778, "__hash__") +py_cmembers_versioned(#11769, "__hash__", #11778, "2") +#11779 = @"C_type$sys.float_info$2__le__" +py_cobjects(#11779) +py_cobjecttypes(#11779, #10005) +py_cobject_sources(#11779, 0) +py_cobjectnames(#11779, "__le__") +py_cmembers_versioned(#11769, "__le__", #11779, "2") +#11780 = @"C_type$sys.float_info$2__len__" +py_cobjects(#11780) +py_cobjecttypes(#11780, #10005) +py_cobject_sources(#11780, 0) +py_cobjectnames(#11780, "__len__") +py_cmembers_versioned(#11769, "__len__", #11780, "2") +#11781 = @"C_type$sys.float_info$2__lt__" +py_cobjects(#11781) +py_cobjecttypes(#11781, #10005) +py_cobject_sources(#11781, 0) +py_cobjectnames(#11781, "__lt__") +py_cmembers_versioned(#11769, "__lt__", #11781, "2") +#11782 = @"C_type$sys.float_info$2__mul__" +py_cobjects(#11782) +py_cobjecttypes(#11782, #10005) +py_cobject_sources(#11782, 0) +py_cobjectnames(#11782, "__mul__") +py_cmembers_versioned(#11769, "__mul__", #11782, "2") +#11783 = @"C_type$sys.float_info$2__ne__" +py_cobjects(#11783) +py_cobjecttypes(#11783, #10005) +py_cobject_sources(#11783, 0) +py_cobjectnames(#11783, "__ne__") +py_cmembers_versioned(#11769, "__ne__", #11783, "2") +#11784 = @"C_type$sys.float_info$2__new__" +py_cobjects(#11784) +py_cobjecttypes(#11784, #10075) +py_cobject_sources(#11784, 0) +py_cobjectnames(#11784, "__new__") +py_cmembers_versioned(#11769, "__new__", #11784, "2") +#11785 = @"C_type$sys.float_info$2__reduce__" +py_cobjects(#11785) +py_cobjecttypes(#11785, #10034) +py_cobject_sources(#11785, 0) +py_cobjectnames(#11785, "__reduce__") +py_cmembers_versioned(#11769, "__reduce__", #11785, "2") +#11786 = @"C_type$sys.float_info$2__repr__" +py_cobjects(#11786) +py_cobjecttypes(#11786, #10005) +py_cobject_sources(#11786, 0) +py_cobjectnames(#11786, "__repr__") +py_cmembers_versioned(#11769, "__repr__", #11786, "2") +#11787 = @"C_type$sys.float_info$2__rmul__" +py_cobjects(#11787) +py_cobjecttypes(#11787, #10005) +py_cobject_sources(#11787, 0) +py_cobjectnames(#11787, "__rmul__") +py_cmembers_versioned(#11769, "__rmul__", #11787, "2") +#11788 = @"C_type$sys.float_info$2dig" +py_cobjects(#11788) +py_cobjecttypes(#11788, #10045) +py_cobject_sources(#11788, 0) +py_cobjectnames(#11788, "dig") +py_cmembers_versioned(#11769, "dig", #11788, "2") +#11789 = @"C_type$sys.float_info$2epsilon" +py_cobjects(#11789) +py_cobjecttypes(#11789, #10045) +py_cobject_sources(#11789, 0) +py_cobjectnames(#11789, "epsilon") +py_cmembers_versioned(#11769, "epsilon", #11789, "2") +#11790 = @"C_type$sys.float_info$2mant_dig" +py_cobjects(#11790) +py_cobjecttypes(#11790, #10045) +py_cobject_sources(#11790, 0) +py_cobjectnames(#11790, "mant_dig") +py_cmembers_versioned(#11769, "mant_dig", #11790, "2") +#11791 = @"C_type$sys.float_info$2max" +py_cobjects(#11791) +py_cobjecttypes(#11791, #10045) +py_cobject_sources(#11791, 0) +py_cobjectnames(#11791, "max") +py_cmembers_versioned(#11769, "max", #11791, "2") +#11792 = @"C_type$sys.float_info$2max_10_exp" +py_cobjects(#11792) +py_cobjecttypes(#11792, #10045) +py_cobject_sources(#11792, 0) +py_cobjectnames(#11792, "max_10_exp") +py_cmembers_versioned(#11769, "max_10_exp", #11792, "2") +#11793 = @"C_type$sys.float_info$2max_exp" +py_cobjects(#11793) +py_cobjecttypes(#11793, #10045) +py_cobject_sources(#11793, 0) +py_cobjectnames(#11793, "max_exp") +py_cmembers_versioned(#11769, "max_exp", #11793, "2") +#11794 = @"C_type$sys.float_info$2min" +py_cobjects(#11794) +py_cobjecttypes(#11794, #10045) +py_cobject_sources(#11794, 0) +py_cobjectnames(#11794, "min") +py_cmembers_versioned(#11769, "min", #11794, "2") +#11795 = @"C_type$sys.float_info$2min_10_exp" +py_cobjects(#11795) +py_cobjecttypes(#11795, #10045) +py_cobject_sources(#11795, 0) +py_cobjectnames(#11795, "min_10_exp") +py_cmembers_versioned(#11769, "min_10_exp", #11795, "2") +#11796 = @"C_type$sys.float_info$2min_exp" +py_cobjects(#11796) +py_cobjecttypes(#11796, #10045) +py_cobject_sources(#11796, 0) +py_cobjectnames(#11796, "min_exp") +py_cmembers_versioned(#11769, "min_exp", #11796, "2") +#11797 = @"C_int$11" +py_cobjects(#11797) +py_cobjecttypes(#11797, #10449) +py_cobject_sources(#11797, 0) +py_cobjectnames(#11797, "11") +py_cmembers_versioned(#11769, "n_fields", #11797, "2") +py_cmembers_versioned(#11769, "n_sequence_fields", #11797, "2") +py_cmembers_versioned(#11769, "n_unnamed_fields", #11760, "2") +#11798 = @"C_type$sys.float_info$2radix" +py_cobjects(#11798) +py_cobjecttypes(#11798, #10045) +py_cobject_sources(#11798, 0) +py_cobjectnames(#11798, "radix") +py_cmembers_versioned(#11769, "radix", #11798, "2") +#11799 = @"C_type$sys.float_info$2rounds" +py_cobjects(#11799) +py_cobjecttypes(#11799, #10045) +py_cobject_sources(#11799, 0) +py_cobjectnames(#11799, "rounds") +py_cmembers_versioned(#11769, "rounds", #11799, "2") +py_cmembers_versioned(#11769, ".super.", #10021, "2") +py_cobjectnames(#11769, "sys.float_info") +py_cobjects(#11768) +py_cobjecttypes(#11768, #11769) +py_cobject_sources(#11768, 0) +py_cobjectnames(#11768, "object") +py_cmembers_versioned(#11643, "float_info", #11768, "2") +#11800 = @"C_bytes$a0f4ea7d91495df92bbac2e2149dfb850fe81396" +py_cobjects(#11800) +py_cobjecttypes(#11800, #10028) +py_cobject_sources(#11800, 0) +py_cobjectnames(#11800, "b'short'") +py_cmembers_versioned(#11643, "float_repr_style", #11800, "2") +#11801 = @"C_module$sys$2getcheckinterval" +py_cobjects(#11801) +py_cobjecttypes(#11801, #10075) +py_cobject_sources(#11801, 0) +py_cobjectnames(#11801, "getcheckinterval") +py_cmembers_versioned(#11643, "getcheckinterval", #11801, "2") +#11802 = @"C_module$sys$2getdefaultencoding" +py_cobjects(#11802) +py_cobjecttypes(#11802, #10075) +py_cobject_sources(#11802, 0) +py_cobjectnames(#11802, "getdefaultencoding") +py_cmembers_versioned(#11643, "getdefaultencoding", #11802, "2") +#11803 = @"C_module$sys$2getdlopenflags" +py_cobjects(#11803) +py_cobjecttypes(#11803, #10075) +py_cobject_sources(#11803, 0) +py_cobjectnames(#11803, "getdlopenflags") +py_cmembers_versioned(#11643, "getdlopenflags", #11803, "2") +#11804 = @"C_module$sys$2getfilesystemencoding" +py_cobjects(#11804) +py_cobjecttypes(#11804, #10075) +py_cobject_sources(#11804, 0) +py_cobjectnames(#11804, "getfilesystemencoding") +py_cmembers_versioned(#11643, "getfilesystemencoding", #11804, "2") +#11805 = @"C_module$sys$2getprofile" +py_cobjects(#11805) +py_cobjecttypes(#11805, #10075) +py_cobject_sources(#11805, 0) +py_cobjectnames(#11805, "getprofile") +py_cmembers_versioned(#11643, "getprofile", #11805, "2") +#11806 = @"C_module$sys$2getrecursionlimit" +py_cobjects(#11806) +py_cobjecttypes(#11806, #10075) +py_cobject_sources(#11806, 0) +py_cobjectnames(#11806, "getrecursionlimit") +py_cmembers_versioned(#11643, "getrecursionlimit", #11806, "2") +#11807 = @"C_module$sys$2getrefcount" +py_cobjects(#11807) +py_cobjecttypes(#11807, #10075) +py_cobject_sources(#11807, 0) +py_cobjectnames(#11807, "getrefcount") +py_cmembers_versioned(#11643, "getrefcount", #11807, "2") +#11808 = @"C_module$sys$2getsizeof" +py_cobjects(#11808) +py_cobjecttypes(#11808, #10075) +py_cobject_sources(#11808, 0) +py_cobjectnames(#11808, "getsizeof") +py_cmembers_versioned(#11643, "getsizeof", #11808, "2") +#11809 = @"C_module$sys$2gettrace" +py_cobjects(#11809) +py_cobjecttypes(#11809, #10075) +py_cobject_sources(#11809, 0) +py_cobjectnames(#11809, "gettrace") +py_cmembers_versioned(#11643, "gettrace", #11809, "2") +#11810 = @"C_int$34018032" +py_cobjects(#11810) +py_cobjecttypes(#11810, #10449) +py_cobject_sources(#11810, 0) +py_cobjectnames(#11810, "34018032") +py_cmembers_versioned(#11643, "hexversion", #11810, "2") +#11811 = @"C_module$sys$2long_info" +#11812 = @"C_type$sys.long_info" +py_cobjects(#11812) +py_cobjecttypes(#11812, #10001) +py_cobject_sources(#11812, 0) +#11813 = @"C_type$sys.long_info$2__add__" +py_cobjects(#11813) +py_cobjecttypes(#11813, #10005) +py_cobject_sources(#11813, 0) +py_cobjectnames(#11813, "__add__") +py_cmembers_versioned(#11812, "__add__", #11813, "2") +#11814 = @"C_type$sys.long_info$2__contains__" +py_cobjects(#11814) +py_cobjecttypes(#11814, #10005) +py_cobject_sources(#11814, 0) +py_cobjectnames(#11814, "__contains__") +py_cmembers_versioned(#11812, "__contains__", #11814, "2") +#11815 = @"C_bytes$3079de10197f97ccf4003107de0dcbfaa45945d0" +py_cobjects(#11815) +py_cobjecttypes(#11815, #10028) +py_cobject_sources(#11815, 0) +py_cobjectnames(#11815, "b'sys.long_info + +A struct sequence that holds information about Python's +internal representation of integers. The attributes are read only.'") +py_cmembers_versioned(#11812, "__doc__", #11815, "2") +#11816 = @"C_type$sys.long_info$2__eq__" +py_cobjects(#11816) +py_cobjecttypes(#11816, #10005) +py_cobject_sources(#11816, 0) +py_cobjectnames(#11816, "__eq__") +py_cmembers_versioned(#11812, "__eq__", #11816, "2") +#11817 = @"C_type$sys.long_info$2__ge__" +py_cobjects(#11817) +py_cobjecttypes(#11817, #10005) +py_cobject_sources(#11817, 0) +py_cobjectnames(#11817, "__ge__") +py_cmembers_versioned(#11812, "__ge__", #11817, "2") +#11818 = @"C_type$sys.long_info$2__getitem__" +py_cobjects(#11818) +py_cobjecttypes(#11818, #10005) +py_cobject_sources(#11818, 0) +py_cobjectnames(#11818, "__getitem__") +py_cmembers_versioned(#11812, "__getitem__", #11818, "2") +#11819 = @"C_type$sys.long_info$2__getslice__" +py_cobjects(#11819) +py_cobjecttypes(#11819, #10005) +py_cobject_sources(#11819, 0) +py_cobjectnames(#11819, "__getslice__") +py_cmembers_versioned(#11812, "__getslice__", #11819, "2") +#11820 = @"C_type$sys.long_info$2__gt__" +py_cobjects(#11820) +py_cobjecttypes(#11820, #10005) +py_cobject_sources(#11820, 0) +py_cobjectnames(#11820, "__gt__") +py_cmembers_versioned(#11812, "__gt__", #11820, "2") +#11821 = @"C_type$sys.long_info$2__hash__" +py_cobjects(#11821) +py_cobjecttypes(#11821, #10005) +py_cobject_sources(#11821, 0) +py_cobjectnames(#11821, "__hash__") +py_cmembers_versioned(#11812, "__hash__", #11821, "2") +#11822 = @"C_type$sys.long_info$2__le__" +py_cobjects(#11822) +py_cobjecttypes(#11822, #10005) +py_cobject_sources(#11822, 0) +py_cobjectnames(#11822, "__le__") +py_cmembers_versioned(#11812, "__le__", #11822, "2") +#11823 = @"C_type$sys.long_info$2__len__" +py_cobjects(#11823) +py_cobjecttypes(#11823, #10005) +py_cobject_sources(#11823, 0) +py_cobjectnames(#11823, "__len__") +py_cmembers_versioned(#11812, "__len__", #11823, "2") +#11824 = @"C_type$sys.long_info$2__lt__" +py_cobjects(#11824) +py_cobjecttypes(#11824, #10005) +py_cobject_sources(#11824, 0) +py_cobjectnames(#11824, "__lt__") +py_cmembers_versioned(#11812, "__lt__", #11824, "2") +#11825 = @"C_type$sys.long_info$2__mul__" +py_cobjects(#11825) +py_cobjecttypes(#11825, #10005) +py_cobject_sources(#11825, 0) +py_cobjectnames(#11825, "__mul__") +py_cmembers_versioned(#11812, "__mul__", #11825, "2") +#11826 = @"C_type$sys.long_info$2__ne__" +py_cobjects(#11826) +py_cobjecttypes(#11826, #10005) +py_cobject_sources(#11826, 0) +py_cobjectnames(#11826, "__ne__") +py_cmembers_versioned(#11812, "__ne__", #11826, "2") +#11827 = @"C_type$sys.long_info$2__new__" +py_cobjects(#11827) +py_cobjecttypes(#11827, #10075) +py_cobject_sources(#11827, 0) +py_cobjectnames(#11827, "__new__") +py_cmembers_versioned(#11812, "__new__", #11827, "2") +#11828 = @"C_type$sys.long_info$2__reduce__" +py_cobjects(#11828) +py_cobjecttypes(#11828, #10034) +py_cobject_sources(#11828, 0) +py_cobjectnames(#11828, "__reduce__") +py_cmembers_versioned(#11812, "__reduce__", #11828, "2") +#11829 = @"C_type$sys.long_info$2__repr__" +py_cobjects(#11829) +py_cobjecttypes(#11829, #10005) +py_cobject_sources(#11829, 0) +py_cobjectnames(#11829, "__repr__") +py_cmembers_versioned(#11812, "__repr__", #11829, "2") +#11830 = @"C_type$sys.long_info$2__rmul__" +py_cobjects(#11830) +py_cobjecttypes(#11830, #10005) +py_cobject_sources(#11830, 0) +py_cobjectnames(#11830, "__rmul__") +py_cmembers_versioned(#11812, "__rmul__", #11830, "2") +#11831 = @"C_type$sys.long_info$2bits_per_digit" +py_cobjects(#11831) +py_cobjecttypes(#11831, #10045) +py_cobject_sources(#11831, 0) +py_cobjectnames(#11831, "bits_per_digit") +py_cmembers_versioned(#11812, "bits_per_digit", #11831, "2") +#11832 = @"C_int$2" +py_cobjects(#11832) +py_cobjecttypes(#11832, #10449) +py_cobject_sources(#11832, 0) +py_cobjectnames(#11832, "2") +py_cmembers_versioned(#11812, "n_fields", #11832, "2") +py_cmembers_versioned(#11812, "n_sequence_fields", #11832, "2") +py_cmembers_versioned(#11812, "n_unnamed_fields", #11760, "2") +#11833 = @"C_type$sys.long_info$2sizeof_digit" +py_cobjects(#11833) +py_cobjecttypes(#11833, #10045) +py_cobject_sources(#11833, 0) +py_cobjectnames(#11833, "sizeof_digit") +py_cmembers_versioned(#11812, "sizeof_digit", #11833, "2") +py_cmembers_versioned(#11812, ".super.", #10021, "2") +py_cobjectnames(#11812, "sys.long_info") +py_cobjects(#11811) +py_cobjecttypes(#11811, #11812) +py_cobject_sources(#11811, 0) +py_cobjectnames(#11811, "object") +py_cmembers_versioned(#11643, "long_info", #11811, "2") +#11834 = @"C_int$9223372036854775807" +py_cobjects(#11834) +py_cobjecttypes(#11834, #10449) +py_cobject_sources(#11834, 0) +py_cobjectnames(#11834, "9223372036854775807") +py_cmembers_versioned(#11643, "maxint", #11834, "2") +#11835 = @"C_int$9223372036854775807" +py_cobjects(#11835) +py_cobjecttypes(#11835, #10449) +py_cobject_sources(#11835, 0) +py_cobjectnames(#11835, "9223372036854775807") +py_cmembers_versioned(#11643, "maxsize", #11835, "2") +#11836 = @"C_int$1114111" +py_cobjects(#11836) +py_cobjecttypes(#11836, #10449) +py_cobject_sources(#11836, 0) +py_cobjectnames(#11836, "1114111") +py_cmembers_versioned(#11643, "maxunicode", #11836, "2") +#11837 = @"C_module$sys$2meta_path" +py_cobjects(#11837) +py_cobjecttypes(#11837, #11360) +py_cobject_sources(#11837, 0) +py_cobjectnames(#11837, "object") +py_cmembers_versioned(#11643, "meta_path", #11837, "2") +#11838 = @"C_module$sys$2modules" +py_cobjects(#11838) +py_cobjecttypes(#11838, #10386) +py_cobject_sources(#11838, 0) +py_cobjectnames(#11838, "object") +py_cmembers_versioned(#11643, "modules", #11838, "2") +#11839 = @"C_module$sys$2path" +py_cobjects(#11839) +py_cobjecttypes(#11839, #11360) +py_cobject_sources(#11839, 0) +#11840 = @"C_bytes$efb8145a2b5da8ef405c09c84a18c90edccd541a" +py_cobjects(#11840) +py_cobjecttypes(#11840, #10028) +py_cobject_sources(#11840, 0) +py_cobjectnames(#11840, "b'/workspaces/semmle-code/target/intree/codeql-python/python/tools/python2.7.zip'") +py_citems(#11839, 0, #11840) +#11841 = @"C_bytes$fa65de5b131ee4329913b3ead2895c3c234fc758" +py_cobjects(#11841) +py_cobjecttypes(#11841, #10028) +py_cobject_sources(#11841, 0) +py_cobjectnames(#11841, "b'/workspaces/semmle-code/target/intree/codeql-python/python/tools'") +py_citems(#11839, 1, #11841) +#11842 = @"C_bytes$c7224070988605c1ddb329e10b116de47fe6bf5c" +py_cobjects(#11842) +py_cobjecttypes(#11842, #10028) +py_cobject_sources(#11842, 0) +py_cobjectnames(#11842, "b'/usr/lib/python2.7'") +py_citems(#11839, 2, #11842) +#11843 = @"C_bytes$349ca952d5a923bbfb29607f56493c4920f938f6" +py_cobjects(#11843) +py_cobjecttypes(#11843, #10028) +py_cobject_sources(#11843, 0) +py_cobjectnames(#11843, "b'/usr/lib/python2.7/plat-x86_64-linux-gnu'") +py_citems(#11839, 3, #11843) +#11844 = @"C_bytes$caace35464f93ae3361f69382760e1b558fcf7aa" +py_cobjects(#11844) +py_cobjecttypes(#11844, #10028) +py_cobject_sources(#11844, 0) +py_cobjectnames(#11844, "b'/usr/lib/python2.7/lib-tk'") +py_citems(#11839, 4, #11844) +#11845 = @"C_bytes$ea726fcf860a32500651bb90e9b83b758b87353a" +py_cobjects(#11845) +py_cobjecttypes(#11845, #10028) +py_cobject_sources(#11845, 0) +py_cobjectnames(#11845, "b'/usr/lib/python2.7/lib-old'") +py_citems(#11839, 5, #11845) +#11846 = @"C_bytes$dcfdcdb573f2f25fc4b0324cab8e960c840fa208" +py_cobjects(#11846) +py_cobjecttypes(#11846, #10028) +py_cobject_sources(#11846, 0) +py_cobjectnames(#11846, "b'/usr/lib/python2.7/lib-dynload'") +py_citems(#11839, 6, #11846) +#11847 = @"C_bytes$d97021114fe7afd96e842fe6937049e0459d35d3" +py_cobjects(#11847) +py_cobjecttypes(#11847, #10028) +py_cobject_sources(#11847, 0) +py_cobjectnames(#11847, "b'/usr/local/lib/python2.7/dist-packages'") +py_citems(#11839, 7, #11847) +#11848 = @"C_bytes$fd8e1150b06a91ba24459b1b1fdc6a38c2b363f4" +py_cobjects(#11848) +py_cobjecttypes(#11848, #10028) +py_cobject_sources(#11848, 0) +py_cobjectnames(#11848, "b'/usr/lib/python2.7/dist-packages'") +py_citems(#11839, 8, #11848) +py_cobjectnames(#11839, "object") +py_cmembers_versioned(#11643, "path", #11839, "2") +#11849 = @"C_module$sys$2path_hooks" +py_cobjects(#11849) +py_cobjecttypes(#11849, #11360) +py_cobject_sources(#11849, 0) +#11850 = @"C_type$zipimport.zipimporter" +py_cobjects(#11850) +py_cobjecttypes(#11850, #10001) +py_cobject_sources(#11850, 0) +#11851 = @"C_bytes$d5f944c873ea5f089da3fdcb81a1f1d5f7c52748" +py_cobjects(#11851) +py_cobjecttypes(#11851, #10028) +py_cobject_sources(#11851, 0) +py_cobjectnames(#11851, "b'zipimporter(archivepath) -> zipimporter object + +Create a new zipimporter instance. 'archivepath' must be a path to +a zipfile, or to a specific path inside a zipfile. For example, it can be +'/tmp/myimport.zip', or '/tmp/myimport.zip/mydirectory', if mydirectory is a +valid directory inside the archive. + +'ZipImportError is raised if 'archivepath' doesn't point to a valid Zip +archive. + +The 'archive' attribute of zipimporter objects contains the name of the +zipfile targeted.'") +py_cmembers_versioned(#11850, "__doc__", #11851, "2") +#11852 = @"C_type$zipimport.zipimporter$2__getattribute__" +py_cobjects(#11852) +py_cobjecttypes(#11852, #10005) +py_cobject_sources(#11852, 0) +py_cobjectnames(#11852, "__getattribute__") +py_cmembers_versioned(#11850, "__getattribute__", #11852, "2") +#11853 = @"C_type$zipimport.zipimporter$2__init__" +py_cobjects(#11853) +py_cobjecttypes(#11853, #10005) +py_cobject_sources(#11853, 0) +py_cobjectnames(#11853, "__init__") +py_cmembers_versioned(#11850, "__init__", #11853, "2") +#11854 = @"C_type$zipimport.zipimporter$2__new__" +py_cobjects(#11854) +py_cobjecttypes(#11854, #10075) +py_cobject_sources(#11854, 0) +py_cobjectnames(#11854, "__new__") +py_cmembers_versioned(#11850, "__new__", #11854, "2") +#11855 = @"C_type$zipimport.zipimporter$2__repr__" +py_cobjects(#11855) +py_cobjecttypes(#11855, #10005) +py_cobject_sources(#11855, 0) +py_cobjectnames(#11855, "__repr__") +py_cmembers_versioned(#11850, "__repr__", #11855, "2") +#11856 = @"C_type$zipimport.zipimporter$2_files" +py_cobjects(#11856) +py_cobjecttypes(#11856, #10045) +py_cobject_sources(#11856, 0) +py_cobjectnames(#11856, "_files") +py_cmembers_versioned(#11850, "_files", #11856, "2") +#11857 = @"C_type$zipimport.zipimporter$2archive" +py_cobjects(#11857) +py_cobjecttypes(#11857, #10045) +py_cobject_sources(#11857, 0) +py_cobjectnames(#11857, "archive") +py_cmembers_versioned(#11850, "archive", #11857, "2") +#11858 = @"C_type$zipimport.zipimporter$2find_module" +py_cobjects(#11858) +py_cobjecttypes(#11858, #10034) +py_cobject_sources(#11858, 0) +py_cobjectnames(#11858, "find_module") +py_cmembers_versioned(#11850, "find_module", #11858, "2") +#11859 = @"C_type$zipimport.zipimporter$2get_code" +py_cobjects(#11859) +py_cobjecttypes(#11859, #10034) +py_cobject_sources(#11859, 0) +py_cobjectnames(#11859, "get_code") +py_cmembers_versioned(#11850, "get_code", #11859, "2") +#11860 = @"C_type$zipimport.zipimporter$2get_data" +py_cobjects(#11860) +py_cobjecttypes(#11860, #10034) +py_cobject_sources(#11860, 0) +py_cobjectnames(#11860, "get_data") +py_cmembers_versioned(#11850, "get_data", #11860, "2") +#11861 = @"C_type$zipimport.zipimporter$2get_filename" +py_cobjects(#11861) +py_cobjecttypes(#11861, #10034) +py_cobject_sources(#11861, 0) +py_cobjectnames(#11861, "get_filename") +py_cmembers_versioned(#11850, "get_filename", #11861, "2") +#11862 = @"C_type$zipimport.zipimporter$2get_source" +py_cobjects(#11862) +py_cobjecttypes(#11862, #10034) +py_cobject_sources(#11862, 0) +py_cobjectnames(#11862, "get_source") +py_cmembers_versioned(#11850, "get_source", #11862, "2") +#11863 = @"C_type$zipimport.zipimporter$2is_package" +py_cobjects(#11863) +py_cobjecttypes(#11863, #10034) +py_cobject_sources(#11863, 0) +py_cobjectnames(#11863, "is_package") +py_cmembers_versioned(#11850, "is_package", #11863, "2") +#11864 = @"C_type$zipimport.zipimporter$2load_module" +py_cobjects(#11864) +py_cobjecttypes(#11864, #10034) +py_cobject_sources(#11864, 0) +py_cobjectnames(#11864, "load_module") +py_cmembers_versioned(#11850, "load_module", #11864, "2") +#11865 = @"C_type$zipimport.zipimporter$2prefix" +py_cobjects(#11865) +py_cobjecttypes(#11865, #10045) +py_cobject_sources(#11865, 0) +py_cobjectnames(#11865, "prefix") +py_cmembers_versioned(#11850, "prefix", #11865, "2") +py_cmembers_versioned(#11850, ".super.", #10021, "2") +py_cobjectnames(#11850, "zipimport.zipimporter") +py_citems(#11849, 0, #11850) +py_cobjectnames(#11849, "object") +py_cmembers_versioned(#11643, "path_hooks", #11849, "2") +#11866 = @"C_module$sys$2path_importer_cache" +py_cobjects(#11866) +py_cobjecttypes(#11866, #10386) +py_cobject_sources(#11866, 0) +py_cobjectnames(#11866, "object") +py_cmembers_versioned(#11643, "path_importer_cache", #11866, "2") +#11867 = @"C_bytes$29f466375b3518f6e00d7cd0afc4ba3d2ad38671" +py_cobjects(#11867) +py_cobjecttypes(#11867, #10028) +py_cobject_sources(#11867, 0) +py_cobjectnames(#11867, "b'linux2'") +py_cmembers_versioned(#11643, "platform", #11867, "2") +#11868 = @"C_bytes$5c0e77c46be77719bc1c0a5ec9c64b94d2a2e50c" +py_cobjects(#11868) +py_cobjecttypes(#11868, #10028) +py_cobject_sources(#11868, 0) +py_cobjectnames(#11868, "b'/usr'") +py_cmembers_versioned(#11643, "prefix", #11868, "2") +py_cmembers_versioned(#11643, "py3kwarning", #10644, "2") +py_cmembers_versioned(#11643, "pydebug", #10644, "2") +#11869 = @"C_module$sys$2setcheckinterval" +py_cobjects(#11869) +py_cobjecttypes(#11869, #10075) +py_cobject_sources(#11869, 0) +py_cobjectnames(#11869, "setcheckinterval") +py_cmembers_versioned(#11643, "setcheckinterval", #11869, "2") +#11870 = @"C_module$sys$2setdlopenflags" +py_cobjects(#11870) +py_cobjecttypes(#11870, #10075) +py_cobject_sources(#11870, 0) +py_cobjectnames(#11870, "setdlopenflags") +py_cmembers_versioned(#11643, "setdlopenflags", #11870, "2") +#11871 = @"C_module$sys$2setprofile" +py_cobjects(#11871) +py_cobjecttypes(#11871, #10075) +py_cobject_sources(#11871, 0) +py_cobjectnames(#11871, "setprofile") +py_cmembers_versioned(#11643, "setprofile", #11871, "2") +#11872 = @"C_module$sys$2setrecursionlimit" +py_cobjects(#11872) +py_cobjecttypes(#11872, #10075) +py_cobject_sources(#11872, 0) +py_cobjectnames(#11872, "setrecursionlimit") +py_cmembers_versioned(#11643, "setrecursionlimit", #11872, "2") +#11873 = @"C_module$sys$2settrace" +py_cobjects(#11873) +py_cobjecttypes(#11873, #10075) +py_cobject_sources(#11873, 0) +py_cobjectnames(#11873, "settrace") +py_cmembers_versioned(#11643, "settrace", #11873, "2") +py_cmembers_versioned(#11643, "stderr", #11648, "2") +#11874 = @"C_module$sys$2stdin" +py_cobjects(#11874) +py_cobjecttypes(#11874, #11179) +py_cobject_sources(#11874, 0) +py_cobjectnames(#11874, "object") +py_cmembers_versioned(#11643, "stdin", #11874, "2") +py_cmembers_versioned(#11643, "stdout", #11650, "2") +#11875 = @"C_module$sys$2subversion" +py_cobjects(#11875) +py_cobjecttypes(#11875, #10737) +py_cobject_sources(#11875, 0) +#11876 = @"C_bytes$3348cc07058a464ebb973af5bfdb70ca7968c2db" +py_cobjects(#11876) +py_cobjecttypes(#11876, #10028) +py_cobject_sources(#11876, 0) +py_cobjectnames(#11876, "b'CPython'") +py_citems(#11875, 0, #11876) +py_citems(#11875, 1, #11656) +py_citems(#11875, 2, #11656) +py_cobjectnames(#11875, "object") +py_cmembers_versioned(#11643, "subversion", #11875, "2") +#11877 = @"C_bytes$2c6c60b105f32b49a3571c1bb365905989630d2e" +py_cobjects(#11877) +py_cobjecttypes(#11877, #10028) +py_cobject_sources(#11877, 0) +py_cobjectnames(#11877, "b'2.7.18 (default, Jul 1 2022, 12:27:04) +[GCC 9.4.0]'") +py_cmembers_versioned(#11643, "version", #11877, "2") +#11878 = @"C_module$sys$2version_info" +#11879 = @"C_type$sys.version_info" +py_cobjects(#11879) +py_cobjecttypes(#11879, #10001) +py_cobject_sources(#11879, 0) +#11880 = @"C_type$sys.version_info$2__add__" +py_cobjects(#11880) +py_cobjecttypes(#11880, #10005) +py_cobject_sources(#11880, 0) +py_cobjectnames(#11880, "__add__") +py_cmembers_versioned(#11879, "__add__", #11880, "2") +#11881 = @"C_type$sys.version_info$2__contains__" +py_cobjects(#11881) +py_cobjecttypes(#11881, #10005) +py_cobject_sources(#11881, 0) +py_cobjectnames(#11881, "__contains__") +py_cmembers_versioned(#11879, "__contains__", #11881, "2") +#11882 = @"C_bytes$bb652b3ae5c81a17bbc0ee6a92a78ac720655a87" +py_cobjects(#11882) +py_cobjecttypes(#11882, #10028) +py_cobject_sources(#11882, 0) +py_cobjectnames(#11882, "b'sys.version_info + +Version information as a named tuple.'") +py_cmembers_versioned(#11879, "__doc__", #11882, "2") +#11883 = @"C_type$sys.version_info$2__eq__" +py_cobjects(#11883) +py_cobjecttypes(#11883, #10005) +py_cobject_sources(#11883, 0) +py_cobjectnames(#11883, "__eq__") +py_cmembers_versioned(#11879, "__eq__", #11883, "2") +#11884 = @"C_type$sys.version_info$2__ge__" +py_cobjects(#11884) +py_cobjecttypes(#11884, #10005) +py_cobject_sources(#11884, 0) +py_cobjectnames(#11884, "__ge__") +py_cmembers_versioned(#11879, "__ge__", #11884, "2") +#11885 = @"C_type$sys.version_info$2__getitem__" +py_cobjects(#11885) +py_cobjecttypes(#11885, #10005) +py_cobject_sources(#11885, 0) +py_cobjectnames(#11885, "__getitem__") +py_cmembers_versioned(#11879, "__getitem__", #11885, "2") +#11886 = @"C_type$sys.version_info$2__getslice__" +py_cobjects(#11886) +py_cobjecttypes(#11886, #10005) +py_cobject_sources(#11886, 0) +py_cobjectnames(#11886, "__getslice__") +py_cmembers_versioned(#11879, "__getslice__", #11886, "2") +#11887 = @"C_type$sys.version_info$2__gt__" +py_cobjects(#11887) +py_cobjecttypes(#11887, #10005) +py_cobject_sources(#11887, 0) +py_cobjectnames(#11887, "__gt__") +py_cmembers_versioned(#11879, "__gt__", #11887, "2") +#11888 = @"C_type$sys.version_info$2__hash__" +py_cobjects(#11888) +py_cobjecttypes(#11888, #10005) +py_cobject_sources(#11888, 0) +py_cobjectnames(#11888, "__hash__") +py_cmembers_versioned(#11879, "__hash__", #11888, "2") +#11889 = @"C_type$sys.version_info$2__le__" +py_cobjects(#11889) +py_cobjecttypes(#11889, #10005) +py_cobject_sources(#11889, 0) +py_cobjectnames(#11889, "__le__") +py_cmembers_versioned(#11879, "__le__", #11889, "2") +#11890 = @"C_type$sys.version_info$2__len__" +py_cobjects(#11890) +py_cobjecttypes(#11890, #10005) +py_cobject_sources(#11890, 0) +py_cobjectnames(#11890, "__len__") +py_cmembers_versioned(#11879, "__len__", #11890, "2") +#11891 = @"C_type$sys.version_info$2__lt__" +py_cobjects(#11891) +py_cobjecttypes(#11891, #10005) +py_cobject_sources(#11891, 0) +py_cobjectnames(#11891, "__lt__") +py_cmembers_versioned(#11879, "__lt__", #11891, "2") +#11892 = @"C_type$sys.version_info$2__mul__" +py_cobjects(#11892) +py_cobjecttypes(#11892, #10005) +py_cobject_sources(#11892, 0) +py_cobjectnames(#11892, "__mul__") +py_cmembers_versioned(#11879, "__mul__", #11892, "2") +#11893 = @"C_type$sys.version_info$2__ne__" +py_cobjects(#11893) +py_cobjecttypes(#11893, #10005) +py_cobject_sources(#11893, 0) +py_cobjectnames(#11893, "__ne__") +py_cmembers_versioned(#11879, "__ne__", #11893, "2") +#11894 = @"C_type$sys.version_info$2__new__" +py_cobjects(#11894) +py_cobjecttypes(#11894, #10075) +py_cobject_sources(#11894, 0) +py_cobjectnames(#11894, "__new__") +py_cmembers_versioned(#11879, "__new__", #11894, "2") +#11895 = @"C_type$sys.version_info$2__reduce__" +py_cobjects(#11895) +py_cobjecttypes(#11895, #10034) +py_cobject_sources(#11895, 0) +py_cobjectnames(#11895, "__reduce__") +py_cmembers_versioned(#11879, "__reduce__", #11895, "2") +#11896 = @"C_type$sys.version_info$2__repr__" +py_cobjects(#11896) +py_cobjecttypes(#11896, #10005) +py_cobject_sources(#11896, 0) +py_cobjectnames(#11896, "__repr__") +py_cmembers_versioned(#11879, "__repr__", #11896, "2") +#11897 = @"C_type$sys.version_info$2__rmul__" +py_cobjects(#11897) +py_cobjecttypes(#11897, #10005) +py_cobject_sources(#11897, 0) +py_cobjectnames(#11897, "__rmul__") +py_cmembers_versioned(#11879, "__rmul__", #11897, "2") +#11898 = @"C_type$sys.version_info$2major" +py_cobjects(#11898) +py_cobjecttypes(#11898, #10045) +py_cobject_sources(#11898, 0) +py_cobjectnames(#11898, "major") +py_cmembers_versioned(#11879, "major", #11898, "2") +#11899 = @"C_type$sys.version_info$2micro" +py_cobjects(#11899) +py_cobjecttypes(#11899, #10045) +py_cobject_sources(#11899, 0) +py_cobjectnames(#11899, "micro") +py_cmembers_versioned(#11879, "micro", #11899, "2") +#11900 = @"C_type$sys.version_info$2minor" +py_cobjects(#11900) +py_cobjecttypes(#11900, #10045) +py_cobject_sources(#11900, 0) +py_cobjectnames(#11900, "minor") +py_cmembers_versioned(#11879, "minor", #11900, "2") +#11901 = @"C_int$5" +py_cobjects(#11901) +py_cobjecttypes(#11901, #10449) +py_cobject_sources(#11901, 0) +py_cobjectnames(#11901, "5") +py_cmembers_versioned(#11879, "n_fields", #11901, "2") +py_cmembers_versioned(#11879, "n_sequence_fields", #11901, "2") +py_cmembers_versioned(#11879, "n_unnamed_fields", #11760, "2") +#11902 = @"C_type$sys.version_info$2releaselevel" +py_cobjects(#11902) +py_cobjecttypes(#11902, #10045) +py_cobject_sources(#11902, 0) +py_cobjectnames(#11902, "releaselevel") +py_cmembers_versioned(#11879, "releaselevel", #11902, "2") +#11903 = @"C_type$sys.version_info$2serial" +py_cobjects(#11903) +py_cobjecttypes(#11903, #10045) +py_cobject_sources(#11903, 0) +py_cobjectnames(#11903, "serial") +py_cmembers_versioned(#11879, "serial", #11903, "2") +py_cmembers_versioned(#11879, ".super.", #10021, "2") +py_cobjectnames(#11879, "sys.version_info") +py_cobjects(#11878) +py_cobjecttypes(#11878, #11879) +py_cobject_sources(#11878, 0) +py_cobjectnames(#11878, "object") +py_cmembers_versioned(#11643, "version_info", #11878, "2") +#11904 = @"C_module$sys$2warnoptions" +py_cobjects(#11904) +py_cobjecttypes(#11904, #11360) +py_cobject_sources(#11904, 0) +py_cobjectnames(#11904, "object") +py_cmembers_versioned(#11643, "warnoptions", #11904, "2") +py_cobjectnames(#11643, "sys") +py_special_objects(#11643, "sys") +py_special_objects(#11466, "property") +py_special_objects(#11231, "float") +py_special_objects(#11397, "locals") +py_special_objects(#10350, "Exception") +py_special_objects(#10028, "bytes") +py_special_objects(#11070, "ClassMethod") +py_special_objects(#11555, "StaticMethod") +#11905 = * +py_cobjects(#11905) +py_cobjecttypes(#11905, #10021) +py_cobject_sources(#11905, 0) +py_cobjectnames(#11905, "object") +py_special_objects(#11905, "_2") +py_special_objects(#10761, "ModuleType") +py_special_objects(#10449, "int") +py_special_objects(#10001, "type") +py_special_objects(#11360, "list") +py_special_objects(#10017, "None") +py_special_objects(#10354, "BaseException") +py_special_objects(#10075, "BuiltinFunctionType") +#11906 = @"C_type$generator" +py_cobjects(#11906) +py_cobjecttypes(#11906, #10001) +py_cobject_sources(#11906, 0) +py_cmembers_versioned(#11906, "__doc__", #10017, "2") +#11907 = @"C_type$generator$2__getattribute__" +py_cobjects(#11907) +py_cobjecttypes(#11907, #10005) +py_cobject_sources(#11907, 0) +py_cobjectnames(#11907, "__getattribute__") +py_cmembers_versioned(#11906, "__getattribute__", #11907, "2") +#11908 = @"C_type$generator$2__iter__" +py_cobjects(#11908) +py_cobjecttypes(#11908, #10005) +py_cobject_sources(#11908, 0) +py_cobjectnames(#11908, "__iter__") +py_cmembers_versioned(#11906, "__iter__", #11908, "2") +#11909 = @"C_type$generator$2__name__" +py_cobjects(#11909) +py_cobjecttypes(#11909, #10003) +py_cobject_sources(#11909, 0) +#11910 = @"C_type$generator$2__name__$2__set__" +py_cobjects(#11910) +py_cobjecttypes(#11910, #10009) +py_cobject_sources(#11910, 0) +py_cobjectnames(#11910, "__set__") +py_cmembers_versioned(#11909, "__set__", #11910, "2") +#11911 = @"C_type$generator$2__name__$2__getattribute__" +py_cobjects(#11911) +py_cobjecttypes(#11911, #10009) +py_cobject_sources(#11911, 0) +py_cobjectnames(#11911, "__getattribute__") +py_cmembers_versioned(#11909, "__getattribute__", #11911, "2") +py_cmembers_versioned(#11909, "__objclass__", #11906, "2") +#11912 = @"C_type$generator$2__name__$2__repr__" +py_cobjects(#11912) +py_cobjecttypes(#11912, #10009) +py_cobject_sources(#11912, 0) +py_cobjectnames(#11912, "__repr__") +py_cmembers_versioned(#11909, "__repr__", #11912, "2") +#11913 = @"C_type$generator$2__name__$2__get__" +py_cobjects(#11913) +py_cobjecttypes(#11913, #10009) +py_cobject_sources(#11913, 0) +py_cobjectnames(#11913, "__get__") +py_cmembers_versioned(#11909, "__get__", #11913, "2") +#11914 = @"C_bytes$23069b0900e4d3bd2800b9a2e39b6ebbae74db26" +py_cobjects(#11914) +py_cobjecttypes(#11914, #10028) +py_cobject_sources(#11914, 0) +py_cobjectnames(#11914, "b'Return the name of the generator's associated code object.'") +py_cmembers_versioned(#11909, "__doc__", #11914, "2") +#11915 = @"C_type$generator$2__name__$2__delete__" +py_cobjects(#11915) +py_cobjecttypes(#11915, #10009) +py_cobject_sources(#11915, 0) +py_cobjectnames(#11915, "__delete__") +py_cmembers_versioned(#11909, "__delete__", #11915, "2") +py_cobjectnames(#11909, "__name__") +py_cmembers_versioned(#11906, "__name__", #11909, "2") +#11916 = @"C_type$generator$2__repr__" +py_cobjects(#11916) +py_cobjecttypes(#11916, #10005) +py_cobject_sources(#11916, 0) +py_cobjectnames(#11916, "__repr__") +py_cmembers_versioned(#11906, "__repr__", #11916, "2") +#11917 = @"C_type$generator$2close" +py_cobjects(#11917) +py_cobjecttypes(#11917, #10034) +py_cobject_sources(#11917, 0) +py_cobjectnames(#11917, "close") +py_cmembers_versioned(#11906, "close", #11917, "2") +#11918 = @"C_type$generator$2gi_code" +py_cobjects(#11918) +py_cobjecttypes(#11918, #10045) +py_cobject_sources(#11918, 0) +py_cobjectnames(#11918, "gi_code") +py_cmembers_versioned(#11906, "gi_code", #11918, "2") +#11919 = @"C_type$generator$2gi_frame" +py_cobjects(#11919) +py_cobjecttypes(#11919, #10045) +py_cobject_sources(#11919, 0) +py_cobjectnames(#11919, "gi_frame") +py_cmembers_versioned(#11906, "gi_frame", #11919, "2") +#11920 = @"C_type$generator$2gi_running" +py_cobjects(#11920) +py_cobjecttypes(#11920, #10045) +py_cobject_sources(#11920, 0) +py_cobjectnames(#11920, "gi_running") +py_cmembers_versioned(#11906, "gi_running", #11920, "2") +#11921 = @"C_type$generator$2next" +py_cobjects(#11921) +py_cobjecttypes(#11921, #10005) +py_cobject_sources(#11921, 0) +py_cobjectnames(#11921, "next") +py_cmembers_versioned(#11906, "next", #11921, "2") +#11922 = @"C_type$generator$2send" +py_cobjects(#11922) +py_cobjecttypes(#11922, #10034) +py_cobject_sources(#11922, 0) +py_cobjectnames(#11922, "send") +py_cmembers_versioned(#11906, "send", #11922, "2") +#11923 = @"C_type$generator$2throw" +py_cobjects(#11923) +py_cobjecttypes(#11923, #10034) +py_cobject_sources(#11923, 0) +py_cobjectnames(#11923, "throw") +py_cmembers_versioned(#11906, "throw", #11923, "2") +py_cmembers_versioned(#11906, ".super.", #10021, "2") +py_cobjectnames(#11906, "generator") +py_special_objects(#11906, "generator") +#11924 = @"$_semmle_unknown_type" +py_cobjects(#11924) +py_cobjecttypes(#11924, #10021) +py_cobject_sources(#11924, 0) +py_cobjectnames(#11924, "object") +py_special_objects(#11924, "_semmle_unknown_type") +#11925 = @"$_semmle_undefined_value" +py_cobjects(#11925) +py_cobjecttypes(#11925, #10021) +py_cobject_sources(#11925, 0) +py_cobjectnames(#11925, "object") +py_special_objects(#11925, "_semmle_undefined_value") diff --git a/python/extractor/semmle/dbscheme.template b/python/extractor/semmle/dbscheme.template new file mode 100644 index 00000000000..07b65434bbd --- /dev/null +++ b/python/extractor/semmle/dbscheme.template @@ -0,0 +1,422 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2020-07-02 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/*- DEPRECATED: External defects and metrics -*/ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- DEPRECATED: Snapshot date -*/ + +snapshotDate(unique date snapshotDate : date ref); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- DEPRECATED: Duplicate code -*/ + +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/*- DEPRECATED: Version control data -*/ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Python dbscheme -*/ + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/**************************** + Python dbscheme +****************************/ + +@sourceline = @file | @py_Module | @xmllocatable; + +@location = @location_ast | @location_default ; + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +$AST_SCHEME$ + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; diff --git a/python/extractor/semmle/dbscheme_gen.py b/python/extractor/semmle/dbscheme_gen.py new file mode 100644 index 00000000000..7c3a79fc371 --- /dev/null +++ b/python/extractor/semmle/dbscheme_gen.py @@ -0,0 +1,104 @@ +'''Tool for generating the dbscheme from the relation tree described in +'master.py' and the part scheme in dbscheme.template''' + + + +from semmle.util import fprintf +from semmle import util +from semmle.python import master + +import sys +import os.path + + +def write(nodes, out): + nodes = set(nodes) + #Emit in sorted order to reduce diffs. + sorted_nodes = sorted(nodes, key = lambda n: n.__name__) + fprintf(out, '\n') + for n in sorted_nodes: + if n.layout: + fprintf(out, '\n') + for name, f_t, offset, _, _, _ in n.layout: + fprintf(out, '/* %s.%s = %s, %s */\n', + n.ql_name(), name, offset, f_t.__name__) + if n.parents: + fprintf(out, '/* %s = %s */\n', + n.ql_name(), n.parents.ql_name()) + parents = set() + for n in sorted_nodes: + if n.is_sub_type() or n.is_union_type(): + continue + fprintf(out, u'%s(', n.relation_name()) + if n.__name__ == "bool": + fields = [] + else: + fields = [ n.db_key('id') ] + if n.is_case_type(): + fields.append('int kind: int ref') + if n.parents: + parents.add(n.parents) + if n.unique_parent: + fields.append('unique int parent : %s ref' % n.parents.db_name()) + else: + fields.append('int parent : %s ref' % n.parents.db_name()) + fields.append('int idx : int ref') + fprintf(out, ',\n '.join(fields)) + fprintf(out, ');\n\n') + nodes = nodes | parents + sorted_nodes = sorted(nodes, key = lambda n: n.__name__) + for n in sorted_nodes: + if n.is_case_type(): + fprintf(out, 'case %s.kind of\n ', n.db_name()) + subtypes = sorted(n.subclasses, key = lambda x : x.index) + body = '\n| '.join(['%s = %s' % (s.index, s.db_name()) + for s in subtypes]) + fprintf(out, '%s;\n\n' % body) + for n in sorted_nodes: + if n.is_union_type(): + fprintf(out, '%s = ', n.db_name()) + body = ' | '.join(sorted([item.db_name() for item in n.types])) + fprintf(out, '%s;\n\n' % body) + +HEADER = '''/* + * This dbscheme is auto-generated by '%s'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +''' + +AUTO_GEN_END = ''' +/* + * End of auto-generated part + */ + +''' + +def main(): + run(master) + +def run(nodes_module): + use_file = len(sys.argv) > 1 + if use_file: + out = open(sys.argv[1], 'w', encoding='utf-8') + else: + out = sys.stdout + try: + nodes = nodes_module.all_nodes() + this_dir, _ = os.path.split(sys.argv[0]) + with open(os.path.join(this_dir, 'dbscheme.template')) as template_file: + t0, t1 = template_file.read().split('$AST_SCHEME$') + out.write(HEADER % '/'.join(__file__.split(os.path.sep)[-2:])) + out.write(t0) + out.write(util.AUTO_GEN_STRING) + write(nodes.values(), out) + out.write(AUTO_GEN_END) + out.write(t1) + finally: + if use_file: + out.close() + +if __name__ == '__main__': + main() diff --git a/python/extractor/semmle/extractors/__init__.py b/python/extractor/semmle/extractors/__init__.py new file mode 100644 index 00000000000..2cb4c9d454f --- /dev/null +++ b/python/extractor/semmle/extractors/__init__.py @@ -0,0 +1,5 @@ + +from .super_extractor import SuperExtractor +from .py_extractor import PythonExtractor +from .builtin_extractor import BuiltinExtractor, SkippedBuiltin +from .module_printer import ModulePrinter diff --git a/python/extractor/semmle/extractors/base.py b/python/extractor/semmle/extractors/base.py new file mode 100644 index 00000000000..5d4afbd45c8 --- /dev/null +++ b/python/extractor/semmle/extractors/base.py @@ -0,0 +1,14 @@ +from semmle.logging import Logger + + +class BaseExtractor(object): + '''Base class for extractors.''' + + def __init__(self, options, trap_folder, src_archive, logger: Logger): + self.options = options + self.trap_folder = trap_folder + self.src_archive = src_archive + self.logger = logger + + def process(self, unit): + raise NotImplementedError() diff --git a/python/extractor/semmle/extractors/builtin_extractor.py b/python/extractor/semmle/extractors/builtin_extractor.py new file mode 100644 index 00000000000..f1493b50a3d --- /dev/null +++ b/python/extractor/semmle/extractors/builtin_extractor.py @@ -0,0 +1,41 @@ +import sys +from semmle import util +from semmle.python.passes.objects import ObjectPass +from semmle.extractors.base import BaseExtractor + +# A sentinel object representing a built-in that should be skipped. +# Unlike returning `NotImplemented`, this prevents other extractors from +# attempting to extract the same file/module and/or reporting an extraction error. +SkippedBuiltin = object() + +class BuiltinExtractor(BaseExtractor): + '''Extractor that can extract built-in Python modules, such as the `sys` module.''' + + name = "built-in extractor" + + def process(self, unit): + # Modules in the standard library (e.g. `os`) + if not self.options.extract_stdlib and \ + isinstance(unit, util.FileExtractable) and \ + unit.path.startswith(util.STDLIB_PATH): + return SkippedBuiltin + if not isinstance(unit, util.BuiltinModuleExtractable): + return NotImplemented + name = unit.name + # If a Shared Object file fails to import, we want to prevent the `ImportError` from + # propagating further up. Instead, we simply behave as if the module is not extractable. + try: + module = __import__(name) + except ImportError as e: + if e.path.endswith(".so"): + return NotImplemented + else: + raise e + writer = util.TrapWriter() + ObjectPass().extract_builtin(module, writer) + output = writer.get_compressed() + self.trap_folder.write_trap("builtin", name, output) + return () + + def close(self): + pass diff --git a/python/extractor/semmle/extractors/file_extractor.py b/python/extractor/semmle/extractors/file_extractor.py new file mode 100644 index 00000000000..17e6dbb8757 --- /dev/null +++ b/python/extractor/semmle/extractors/file_extractor.py @@ -0,0 +1,33 @@ + +from semmle import util +from semmle.extractors.base import BaseExtractor + +HALF_MB = 1 << 19 + +class FileExtractor(BaseExtractor): + '''Extractor for extracting arbitrary 'text' files.''' + + name = "file extractor" + + def process(self, unit): + if not isinstance(unit, util.FileExtractable): + return NotImplemented + if util.isdir(unit.path): + return NotImplemented + with open(unit.path, "rb") as fd: + data = fd.read() + source = data.decode("latin-1") + if len(source) > HALF_MB: + self.logger.info("Skipping overly large file: '%s'", unit.path) + return () + file_tag = util.get_source_file_tag(unit.path) + writer = util.TrapWriter() + writer.write_tuple("file_contents", "gS", file_tag, source) + writer.write_file(unit.path) + output = writer.get_compressed() + self.trap_folder.write_trap("file", unit.path, output) + self.src_archive.write(unit.path, data) + return () + + def close(self): + pass diff --git a/python/extractor/semmle/extractors/module_printer.py b/python/extractor/semmle/extractors/module_printer.py new file mode 100644 index 00000000000..d2f4a6cc92b --- /dev/null +++ b/python/extractor/semmle/extractors/module_printer.py @@ -0,0 +1,31 @@ +import sys +from semmle import util +from .py_extractor import PythonExtractor + +class ModulePrinter(object): + + name = "module printer" + + def __init__(self, options, trap_folder, src_archive, renamer, logger): + self.logger = logger + self.py_extractor = PythonExtractor(options, trap_folder, src_archive, logger) + + def process(self, unit): + imports = () + if isinstance(unit, util.BuiltinModuleExtractable): + name = unit.name + self.logger.info("Found builtin module '%s'", name) + elif isinstance(unit, util.FileExtractable): + self.logger.info("Found file '%s'", unit.path) + _, imports = self.py_extractor._get_module_and_imports(unit) + elif isinstance(unit, util.FolderExtractable): + self.logger.info("Found folder '%s'", unit.path) + else: + self.logger.error("Unexpected object: %s", unit) + return imports + + def close(self): + pass + + def write_global_data(self): + pass diff --git a/python/extractor/semmle/extractors/py_extractor.py b/python/extractor/semmle/extractors/py_extractor.py new file mode 100644 index 00000000000..8014063b3cb --- /dev/null +++ b/python/extractor/semmle/extractors/py_extractor.py @@ -0,0 +1,102 @@ +import os.path + +from semmle import util +from semmle.python import extractor, finder, imports +import re +from semmle.extractors.base import BaseExtractor +from semmle.logging import Logger + +class PythonExtractor(BaseExtractor): + '''Extractor that can extract Python source code.''' + + name = "Python extractor" + + def __init__(self, options, trap_folder, src_archive, logger: Logger, diagnostics_writer): + super(PythonExtractor, self).__init__(options, trap_folder, src_archive, logger) + self.module_extractor = extractor.Extractor.from_options(options, trap_folder, src_archive, logger, diagnostics_writer) + self.finder = finder.Finder.from_options_and_env(options, logger) + self.importer = imports.importer_from_options(options, self.finder, logger) + + def _get_module_and_imports(self, unit): + if not isinstance(unit, util.FileExtractable): + return None, () + #Convert unit to module. + module = self.finder.from_extractable(unit) + if module is None: + return None, () + py_module = module.load(self.logger) + if py_module is None: + return None, () + imports = set(mod.get_extractable() for mod in self.importer.get_imports(module, py_module)) + for imp in imports: + self.logger.trace("%s imports %s", module, imp) + package = module.package + while package: + ex = package.get_extractable() + if ex is None: + break + self.logger.debug("Requiring package %s", ex) + imports.add(ex) + package = package.package + return py_module, imports + + def process(self, unit): + py_module, imports = self._get_module_and_imports(unit) + if py_module is None: + return NotImplemented + self.module_extractor.process_source_module(py_module) + return imports + + def close(self): + self.module_extractor.close() + + def write_interpreter_data(self, options): + self.module_extractor.write_interpreter_data(options) + +LEGAL_NAME = re.compile(r"[^\W0-9]\w+$") + +class PackageExtractor(object): + '''Extractor that can extract folders as Python packages.''' + + name = "package extractor" + + def __init__(self, options, trap_folder, src_archive, logger): + self.trap_folder = trap_folder + self.src_archive = src_archive + self.logger = logger + self.respect_init = options.respect_init + + def process(self, unit): + if not isinstance(unit, util.FolderExtractable): + return NotImplemented + _, name = os.path.split(unit.path) + init_path = os.path.join(unit.path, "__init__.py") + if (self.respect_init and not os.path.exists(init_path)) or not LEGAL_NAME.match(name): + self.logger.debug("Ignoring non-package folder %s", unit.path) + return () + writer = util.TrapWriter() + trap_name = u'py-package:' + unit.path + vpath = self.src_archive.get_virtual_path(unit.path) + folder_tag = writer.write_folder(vpath) + writer.write_tuple(u'py_Modules', 'g', trap_name) + writer.write_tuple(u'py_module_path', 'gg', trap_name, folder_tag) + #Add fake CFG entry node to represent the PackageObject. + entry_node = object() + entry_id = trap_name + ":entry-point" + entry_tag = writer.get_labelled_id(entry_node, entry_id) + writer.write_tuple(u'py_flow_bb_node', 'rgrd', entry_tag, trap_name, entry_tag, 0) + writer.write_tuple(u'py_scope_flow', 'rgd', entry_tag, trap_name, -1) + #Add dummy location + loc = object() + loc_id = trap_name + ":location" + loc_tag = writer.get_labelled_id(loc, loc_id) + writer.write_tuple(u'locations_ast', 'rgdddd', loc_tag, trap_name, 0, 0, 0, 0) + output = writer.get_compressed() + self.trap_folder.write_trap('$package', unit.path, output) + if os.path.exists(init_path): + return util.FileExtractable(init_path), + else: + return () + + def close(self): + pass diff --git a/python/extractor/semmle/extractors/super_extractor.py b/python/extractor/semmle/extractors/super_extractor.py new file mode 100644 index 00000000000..24edff70e0a --- /dev/null +++ b/python/extractor/semmle/extractors/super_extractor.py @@ -0,0 +1,69 @@ +from .builtin_extractor import BuiltinExtractor +from .py_extractor import PythonExtractor +from .py_extractor import PackageExtractor +from .file_extractor import FileExtractor +from .thrift_extractor import ThriftExtractor +from semmle.files import TrapFolder, SourceArchive, NullArchive +from semmle.profiling import MillisecondTimer +from semmle.logging import DEBUG, Logger + +class SuperExtractor(object): + '''Extractor that can extract any 'extractable'. + Delegates to the relevant extractor.''' + + def __init__(self, options, trap_dir, archive, renamer, logger: Logger, diagnostics_writer): + trap_folder = TrapFolder(trap_dir, renamer, logger) + if archive is None: + src_archive = NullArchive(renamer) + else: + src_archive = SourceArchive(archive, renamer, logger) + bltn_extractor = BuiltinExtractor(options, trap_folder, src_archive, logger) + package_extractor = PackageExtractor(options, trap_folder, src_archive, logger) + gen_extractor = FileExtractor(options, trap_folder, src_archive, logger) + thrift_extractor = ThriftExtractor(options, trap_folder, src_archive, logger) + self.py_extractor = PythonExtractor(options, trap_folder, src_archive, logger, diagnostics_writer) + self.extractors = [ bltn_extractor, thrift_extractor, self.py_extractor, package_extractor, gen_extractor] + if logger.level >= DEBUG: + self.extractors = [ TimingExtractor(extractor, logger) for extractor in self.extractors ] + self.logger = logger + self.options = options + + def process(self, unit): + for extractor in self.extractors: + self.logger.debug("Trying %s on %s",extractor.name, unit) + res = extractor.process(unit) + if res is not NotImplemented: + self.logger.debug("%s extracted by the %s.", unit, extractor.name) + break + else: + self.logger.error("Could not extract %s", unit) + res = () + return res + + def add_extractor(self, extractor): + #Insert after built-in extractor + self.extractors.insert(1, extractor) + + def close(self): + for ex in self.extractors: + ex.close() + + def write_global_data(self): + self.py_extractor.write_interpreter_data(self.options) + + +class TimingExtractor(object): + + def __init__(self, extractor, logger): + self.timer = MillisecondTimer() + self.extractor = extractor + self.logger = logger + self.name = self.extractor.name + + def process(self, unit): + with self.timer: + return self.extractor.process(unit) + + def close(self): + self.logger.debug(self.name + " time %0.1fs", self.timer.elapsed/1000) + self.extractor.close() diff --git a/python/extractor/semmle/extractors/thrift_extractor.py b/python/extractor/semmle/extractors/thrift_extractor.py new file mode 100644 index 00000000000..62c9b25dba5 --- /dev/null +++ b/python/extractor/semmle/extractors/thrift_extractor.py @@ -0,0 +1,28 @@ + + +import os.path +import semmle.thrift +import semmle.util +from semmle.extractors.base import BaseExtractor + +class ThriftExtractor(BaseExtractor): + '''Extractor that can extract Apache thrift IDL files.''' + + name = "thrift extractor" + + def __init__(self, options, trap_folder, src_archive, logger): + super(ThriftExtractor, self).__init__(options, trap_folder, src_archive, logger) + self.thrift_extractor = semmle.thrift.Extractor(trap_folder, src_archive) + + def process(self, unit): + if not isinstance(unit, semmle.util.FileExtractable): + return NotImplemented + if semmle.util.isdir(unit.path): + return NotImplemented + if not unit.path.endswith(".thrift"): + return NotImplemented + self.thrift_extractor.extract_file(unit.path) + return () + + def close(self): + pass diff --git a/python/extractor/semmle/files.py b/python/extractor/semmle/files.py new file mode 100644 index 00000000000..49eeb63199c --- /dev/null +++ b/python/extractor/semmle/files.py @@ -0,0 +1,97 @@ +import os.path +import sys + +from semmle.util import base64digest, makedirs + +_WINDOWS = os.name == "nt" + +LONG_PATH_PREFIX = "\\\\?\\" + +def make_renamer(renamer): + if os.name == "nt": + if renamer is None: + return lambda path : path.replace('\\', '/') + else: + return lambda path : renamer(path).replace('\\', '/') + else: + if renamer is None: + return lambda path : path + else: + return renamer + + +class NullArchive(object): + '''A fake source archive object for use when there is no + source archive folder. For example, by qltest.''' + + def __init__(self, renamer=None): + self.renamer = make_renamer(renamer) + + def write(self, path, source, encoding=None): + pass + + def get_virtual_path(self, real_path): + '''Gets the virtual (potentially renamed) path for the given real path''' + return self.renamer(real_path) + +class RenamingFolder(object): + '''A folder that can rename its contents according to the given renamer + (usually derived from a project layout file).''' + + def __init__(self, folder, renamer, logger): + assert folder is not None + self.folder = folder + self.renamer = make_renamer(renamer) + self.logger = logger + + def get_virtual_path(self, real_path): + '''Gets the virtual (potentially renamed) path for the given real path''' + return self.renamer(real_path) + + def get_storage_path(self, *subpath): + '''Gets the path for storing an item at. + Creates the necessary sub folders and + handles long paths on Windows.''' + #Remove empty path elements + subpath = [ p for p in subpath if p ] + suffix = os.sep.join(subpath) + suffix = suffix.replace(':', '_') + if suffix[0] in '/\\': + result = self.folder + suffix + else: + result = self.folder + os.sep + suffix + if _WINDOWS and len(result) > 240: + result = LONG_PATH_PREFIX + result + folder = os.path.dirname(result) + if not os.path.exists(folder): + makedirs(folder) + return result + +class TrapFolder(RenamingFolder): + + def _trap_path(self, namespace, path, extension='.trap.gz'): + vpath = self.get_virtual_path(path) + parts = vpath.split('/') + basename = parts[-1] + hashcode = base64digest(vpath + namespace) + filename = basename + '.' + hashcode + extension + return self.get_storage_path(filename) + + def write_trap(self, namespace, path, data, extension='.trap.gz'): + '''Write the trap file for `path` in `namespace` using the given file extension (defaults to .trap.gz)''' + outpath = self._trap_path(namespace, path, extension) + with open(outpath, "wb") as out: + out.write(data) + +class SourceArchive(RenamingFolder): + + def write(self, path, bytes_source): + '''Write the `source` to `path` in this source archive folder.''' + vpath = self.get_virtual_path(path) + if vpath != path: + self.logger.debug("Renaming '%s' to '%s'", path, vpath) + self.logger.debug("Writing source to '%s'", vpath) + subpath = vpath.split('/') + outpath = self.get_storage_path(*subpath) + with open(outpath, "wb") as out: + out.write(bytes_source) diff --git a/python/extractor/semmle/graph.py b/python/extractor/semmle/graph.py new file mode 100755 index 00000000000..8f93768767f --- /dev/null +++ b/python/extractor/semmle/graph.py @@ -0,0 +1,837 @@ + +class SmallSet(list): + + __slots__ = [] + + def update(self, other): + filtered = [x for x in other if x not in self] + self.extend(filtered) + + def add(self, item): + if item not in self: + self.append(item) + +class DiGraph(object): + '''A simple directed graph class (not necessarily a DAG). + Nodes must be hashable''' + + def __init__(self, name = ""): + self.name = name + self.pred = {} + self.succ = {} + self.all_nodes = [] + self.node_annotations = {} + self.edge_annotations = {} + + def add_node(self, n): + 'Add a node to the graph' + if n not in self.succ: + self.pred[n] = SmallSet() + self.succ[n] = SmallSet() + self.all_nodes.append(n) + + def add_edge(self, x, y): + '''Add an edge (x -> y) to the graph. Return true if x, y was + previously in graph''' + if x in self.succ: + if y in self.succ[x]: + return True + else: + self.add_node(x) + self.add_node(y) + self.pred[y].add(x) + self.succ[x].add(y) + return False + + def remove_node(self, x): + if x not in self.succ: + raise ValueError("Node %s does not exist." % x) + preds = self.pred[x] + succs = self.succ[x] + for p in preds: + self.succ[p].remove(x) + for s in succs: + self.pred[s].remove(x) + del self.succ[x] + del self.pred[x] + + def remove_edge(self, x, y): + self.pred[y].remove(x) + self.succ[x].remove(y) + + def annotate_edge(self, x, y, note): + '''Set the annotation on the edge (x -> y) to note. + ''' + if x not in self.succ or y not in self.succ[x]: + raise ValueError("Edge %s -> %s does not exist." % (x, y)) + self.edge_annotations[(x,y)] = note + + def annotate_node(self, x, note): + '''Set the annotation on the node x to note. + ''' + if x not in self.succ: + raise ValueError("Node %s does not exist." % x) + self.node_annotations[x] = note + + def nodes(self): + '''Return an iterator for all nodes, in the form (node, note) pairs. + Do not modify the graph while using this iterator''' + for node in self.all_nodes: + yield node, self.node_annotations.get(node) + + def edges(self): + '''Return an iterator for all edges, in the form of (pred, succ, note) triple. + Do not modify the graph while using this iterator''' + index = dict((n, i) for i, n in enumerate(self.all_nodes)) + for n in self.all_nodes: + n_succs = self.succ[n] + for succ in sorted(n_succs, key = lambda n : index[n]): + yield n, succ, self.edge_annotations.get((n,succ)) + + def sources(self): + '''Return an iterator for all nodes with no predecessors. + Do not modify the graph while using this iterator''' + for n, p in self.pred.items(): + if not p: + yield n + + def __contains__(self, node): + return node in self.succ + + +class FlowGraph(DiGraph): + '''A DiGraph that supports the concept of definitions and variables. + Used to compute dominance and SSA form. + For more explanation of the algorithms used see + 'Modern Compiler Implementation by Andrew W. Appel. + ''' + + def __init__(self, root, name = ""): + DiGraph.__init__(self, name) + self.definitions = {} + self.deletions = {} + self.uses = {} + self.use_all_nodes = set() + self.root = root + + def clear_computed(self): + to_be_deleted = [attr for attr in self.__dict__ if attr[0] == '_'] + for attr in to_be_deleted: + delattr(self, attr) + + def _require(self, what): + '''Ensures that 'what' has been computed (computing if needed).''' + if hasattr(self, "_" + what): + return + setattr(self, "_" + what, getattr(self, "_compute_" + what)()) + + def add_deletion(self, node, var): + assert node in self.succ + self.deletions[node] = var + + def add_definition(self, node, var): + assert node in self.succ + self.definitions[node] = var + + def add_use(self, node, var): + assert node in self.succ, node + self.uses[node] = var + + def use_all_defined_variables(self, node): + assert node in self.succ + self.use_all_nodes.add(node) + + def _compute_depth_first_pre_order(self): + self._require("depth_first_pre_order_labels") + reachable = [ f for f in self.all_nodes if f in self._depth_first_pre_order_labels ] + return sorted(reachable, key = lambda f : -self._depth_first_pre_order_labels[f]) + + def _compute_reachable(self): + self._require("depth_first_pre_order") + return frozenset(self._depth_first_pre_order) + + def reachable_nodes(self): + self._require("reachable") + return self._reachable + + def _compute_reversed_depth_first_pre_order(self): + self._require("depth_first_pre_order") + return reversed(self._depth_first_pre_order) + + def _compute_bb_depth_first_pre_order(self): + self._require('depth_first_pre_order') + self._require('bb_heads') + bbs = [] + for n in self._depth_first_pre_order: + if n in self._bb_heads: + bbs.append(n) + return bbs + + def _compute_bb_reversed_depth_first_pre_order(self): + self._require("bb_depth_first_pre_order") + return reversed(self._bb_depth_first_pre_order) + + def _compute_depth_first_pre_order_labels(self): + 'Compute order with depth first search.' + orders = {} + order = 0 + nodes_to_visit = [ self.root ] + while nodes_to_visit: + node = nodes_to_visit[-1] + orders[node] = 0 + if node in self.succ: + for succ in self.succ[node]: + if succ not in orders: + nodes_to_visit.append(succ) + else: + order += 1 + orders[node] = order + if node is nodes_to_visit[-1]: + nodes_to_visit.pop() + order += 1 + orders[node] = order + return orders + + def _compute_idoms(self): + self._require("depth_first_pre_order") + idoms = {} + + def idom_intersection(n1, n2): + 'Determine the last common idom of n1, n2' + orders = self._depth_first_pre_order_labels + while n1 is not n2: + while orders[n1] < orders[n2]: + n1 = idoms[n1] + while orders[n2] < orders[n1]: + n2 = idoms[n2] + return n1 + + for node in self._depth_first_pre_order: + if len(self.pred[node]) == 1: + idoms[node] = next(iter(self.pred[node])) + else: + idom = None + for p in self.pred[node]: + if p == self.root: + idom = p + elif p in idoms: + if idom is None: + idom = p + else: + idom = idom_intersection(idom, p) + if idom is not None: + idoms[node] = idom + return idoms + + def idoms(self): + '''Returns an iterable of node pairs: node, idom(node)''' + self._require('idoms') + idoms = self._idoms + for n in self.all_nodes: + if n in idoms: + yield n, idoms[n] + + + def _compute_dominance_frontier(self): + '''Compute the dominance frontier: + DF[n] = DF_local[n] Union over C in children DF_up[c]''' + + def dominates(dom, node): + while node in idoms: + next_node = idoms[node] + if dom == next_node: + return True + node = next_node + return False + + self._require('idoms') + idoms = self._idoms + dominance_frontier = {} + df_up = {} + dom_tree = _reverse_map(idoms) + self._require('reversed_depth_first_pre_order') + for node in self._reversed_depth_first_pre_order: + df_local_n = set(n for n in self.succ[node] if node != idoms[n]) + dfn = df_local_n + if node in dom_tree: + for child in dom_tree[node]: + dfn.update(df_up[child]) + dominance_frontier[node] = dfn + if node in idoms: + imm_dom = idoms[node] + df_up[node] = set(n for n in dfn if not dominates(imm_dom, n)) + else: + df_up[node] = dfn + return dominance_frontier + + def _compute_phi_nodes(self): + '''Compute the phi nodes for this graph. + A minimal set of phi-nodes are computed; + No phi-nodes are added unless the variable is live. + ''' + self._require('dominance_frontier') + self._require('liveness') + dominance_frontier = self._dominance_frontier + definitions = dict(self.definitions) + # We must count deletions as definitions here. Otherwise, we can have + # uses of a deleted variable whose SSA definition is an actual definition, + # rather than a deletion. + definitions.update(self.deletions) + phi_nodes = {} + defsites = {} + for a in definitions.values(): + defsites[a] = set() + for n in definitions: + a = definitions[n] + defsites[a].add(n) + for a in defsites: + W = set(defsites[a]) + while W: + n = W.pop() + if n not in dominance_frontier: + continue + for y in dominance_frontier[n]: + if y not in phi_nodes: + phi_nodes[y] = set() + if a not in phi_nodes[y]: + phi_nodes[y].add(a) + if y not in definitions or a != definitions[y]: + W.add(y) + trimmed = {} + for node in phi_nodes: + assert node in self._bb_heads + if node not in self._liveness: + continue + new_phi_vars = set() + phi_vars = phi_nodes[node] + for v in phi_vars: + if v in self._liveness[node]: + new_phi_vars.add(v) + if new_phi_vars: + trimmed[node] = new_phi_vars + return trimmed + + def _compute_ssa_data(self): + ''' Compute the SSA variables, definitions, uses and phi-inputs. + ''' + self._require('basic_blocks') + self._require('phi_nodes') + self._require('bb_depth_first_pre_order') + self._require('use_all') + phi_nodes = self._phi_nodes + reaching_ssa_vars = {} + work_set = set() + work_set.add(self.root) + ssa_defns = {} + ssa_uses = {} + ssa_phis = {} + ssa_vars = set() + ssa_var_cache = {} + + def make_ssa_var(variable, node): + '''Ensure that there is no more than one SSA variable for each (variable, node) pair.''' + uid = (variable, node) + if uid in ssa_var_cache: + return ssa_var_cache[uid] + var = SSA_Var(variable, node) + ssa_var_cache[uid] = var + return var + + for bb in self._bb_depth_first_pre_order: + #Track SSA variables in each BB. + reaching_ssa_vars[bb] = {} + for bb in self._bb_depth_first_pre_order: + live_vars = reaching_ssa_vars[bb].copy() + #Add an SSA definition for each phi-node. + if bb in phi_nodes: + variables = phi_nodes[bb] + for v in variables: + var = make_ssa_var(v, bb) + ssa_defns[var] = bb + live_vars[v] = var + for node in self.nodes_in_bb(bb): + #Add an SSA use for each use. + if node in self.uses: + a = self.uses[node] + if a not in live_vars: + #Treat a use as adding a reaching variable, + #since a second use, if it can be reached, + #will always find the variable defined. + var = make_ssa_var(a, node) + live_vars[a] = var + else: + var = live_vars[a] + ssa_vars.add(var) + ssa_uses[node] = [ var ] + #Add an SSA use for all live SSA variables for + #each use_all (end of module/class scope). + if node in self._use_all: + all_live = [ var for var in live_vars.values() if var.variable in self._use_all[node]] + ssa_uses[node] = all_live + ssa_vars.update(all_live) + #Add an SSA definition for each definition. + if node in self.definitions: + a = self.definitions[node] + var = make_ssa_var(a, node) + ssa_defns[var] = node + live_vars[a] = var + #Although deletions are not definitions, we treat them as such. + #SSA form has no concept of deletion, so we have to treat `del x` + #as `x = Undefined`. + if node in self.deletions: + a = self.deletions[node] + if a in live_vars: + var = live_vars[a] + ssa_vars.add(var) + ssa_uses[node] = [ var ] + else: + #If no var is defined here we don't need to create one + #as a new one will be immediately be defined by the deletion. + pass + var = make_ssa_var(a, node) + ssa_defns[var] = node + live_vars[a] = var + #Propagate set of reaching variables to + #successor blocks. + for n in self.succ[node]: + reaching_ssa_vars[n].update(live_vars) + if n in phi_nodes: + for v in phi_nodes[n]: + if v in live_vars: + var = make_ssa_var(v, n) + if var not in ssa_phis: + ssa_phis[var] = set() + ssa_vars.add(live_vars[v]) + ssa_phis[var].add(live_vars[v]) + #Prune unused definitions. + used_ssa_defns = {} + for var in ssa_defns: + if var in ssa_vars: + used_ssa_defns[var] = ssa_defns[var] + ssa_defns = used_ssa_defns + sorted_vars = list(self._sort_ssa_variables(ssa_vars)) + assert set(sorted_vars) == ssa_vars + assert len(sorted_vars) == len(ssa_vars) + ssa_vars = sorted_vars + return ssa_vars, ssa_defns, ssa_uses, ssa_phis + + + def ssa_variables(self): + '''Returns all the SSA variables for this graph''' + self._require('ssa_data') + return self._ssa_data[0] + + def _sort_ssa_variables(self, ssa_vars): + node_to_var = {} + for v in ssa_vars: + node = v.node + if node in node_to_var: + vset = node_to_var[node] + else: + vset = set() + node_to_var[node] = vset + vset.add(v) + for n in self.all_nodes: + if n in node_to_var: + variables = node_to_var[n] + for v in sorted(variables, key=lambda v:v.variable.id): + yield v + + def ssa_definitions(self): + '''Returns all the SSA definition as an iterator of (node, variable) pairs.''' + self._require('ssa_data') + ssa_defns = self._ssa_data[1] + reversed_defns = _reverse_map(ssa_defns) + for n in self.all_nodes: + if n in reversed_defns: + variables = reversed_defns[n] + for v in sorted(variables, key=lambda v:v.variable.id): + yield n, v + + def get_ssa_definition(self, var): + '''Returns the definition node of var. Returns None if there is no definition.''' + self._require('ssa_data') + ssa_defns = self._ssa_data[1] + return ssa_defns.get(var) + + def ssa_uses(self): + '''Returns all the SSA uses as an iterator of (node, variable) pairs.''' + self._require('ssa_data') + ssa_uses = self._ssa_data[2] + for n in self.all_nodes: + if n in ssa_uses: + variables = ssa_uses[n] + for v in sorted(variables, key=lambda v:v.variable.id): + yield n, v + + def get_ssa_variables_used(self, node): + '''Returns all the SSA variables used at this node''' + self._require('ssa_data') + ssa_uses = self._ssa_data[2] + return ssa_uses.get(node, ()) + + def ssa_phis(self): + '''Return all SSA phi inputs as an iterator of (variable, input-variable) pairs.''' + self._require('ssa_data') + ssa_phis = self._ssa_data[3] + ssa_vars = self._ssa_data[0] + indexed = dict((v, index) for index, v in enumerate(ssa_vars)) + for v in ssa_vars: + if v not in ssa_phis: + continue + phis = ssa_phis[v] + for phi in sorted(phis, key=lambda v:indexed[v]): + yield v, phi + + def _compute_bb_heads(self): + '''Compute all flow nodes that are the first node in a basic block.''' + bb_heads = set() + for node in self.all_nodes: + preds = self.pred[node] + if len(preds) != 1 or len(self.succ[preds[0]]) != 1: + bb_heads.add(node) + return bb_heads + + def _compute_basic_blocks(self): + '''Compute Basic blocks membership''' + self._require('bb_heads') + basic_blocks = {} + bb_tails = {} + for bb in self._bb_heads: + for index, node in enumerate(self.nodes_in_bb(bb)): + basic_blocks[node] = bb, index + bb_tails[bb] = node + self._bb_tails = bb_tails + return basic_blocks + + def get_basic_blocks(self): + self._require('basic_blocks') + return self._basic_blocks + + def _compute_bb_succ(self): + self._require('basic_blocks') + bb_succs = {} + for bb in self._bb_heads: + bb_succs[bb] = self.succ[self._bb_tails[bb]] + return bb_succs + + def _compute_bb_pred(self): + self._require('basic_blocks') + bb_preds = {} + for bb in self._bb_heads: + preds_of_bb = self.pred[bb] + bb_preds[bb] = SmallSet(self._basic_blocks[p][0] for p in preds_of_bb) + return bb_preds + + def nodes_in_bb(self, bb): + '''Return an iterator over all node in basic block 'bb.''' + node = bb + while True: + yield node + succs = self.succ[node] + if not succs: + return + node = succs[0] + if node in self._bb_heads: + return + + + def _compute_use_all(self): + '''Compute which variables have been defined. + A variable is defined at node n, if there is a path to n which + passes through a definition, but not through a subsequent deletion. + ''' + + self._require('bb_heads') + self._require('bb_succ') + self._require('bb_pred') + use_all = {} + + def defined_in_block(bb): + defined = defined_at_start[bb].copy() + for node in self.nodes_in_bb(bb): + if node in self.definitions: + var = self.definitions[node] + defined.add(var) + if node in self.deletions: + var = self.deletions[node] + defined.discard(var) + if node in self.use_all_nodes: + use_all[node] = frozenset(defined) + return defined + + defined_at_start = {} + work_set = set() + for bb in self._bb_heads: + if not self._bb_pred[bb]: + work_set.add(bb) + defined_at_start[bb] = set() + work_list = list(work_set) + while work_list: + bb = work_list.pop() + work_set.remove(bb) + defined_at_bb_end = defined_in_block(bb) + for succ in self._bb_succ[bb]: + if succ not in defined_at_start: + defined_at_start[succ] = set() + elif defined_at_start[succ] >= defined_at_bb_end: + continue + defined_at_start[succ].update(defined_at_bb_end) + if succ not in work_set: + work_list.append(succ) + work_set.add(succ) + return use_all + + def _compute_liveness(self): + '''Compute liveness of all variables in this flow-graph. + Return a mapping of basic blocks to the set of variables + that are live at the start of that basic block. + See http://en.wikipedia.org/wiki/Live_variable_analysis.''' + + self._require('bb_pred') + self._require('use_all') + + def gen_and_kill_for_block(bb): + gen = set() + kill = set() + for node in reversed(list(self.nodes_in_bb(bb))): + if node in self.uses: + var = self.uses[node] + gen.add(var) + kill.discard(var) + if node in self.deletions: + var = self.deletions[node] + gen.add(var) + kill.discard(var) + if node in self.definitions: + var = self.definitions[node] + gen.discard(var) + kill.add(var) + if node in self._use_all: + for var in self._use_all[node]: + gen.add(var) + kill.discard(var) + return gen, kill + + def liveness_for_block(bb, live_out): + return gens[bb].union(live_out.difference(kills[bb])) + + live_at_end = {} + live_at_start = {} + gens = {} + kills = {} + work_set = set() + #Initialise + for bb in self._bb_heads: + gens[bb], kills[bb] = gen_and_kill_for_block(bb) + live_at_end[bb] = set() + live_at_start[bb] = set() + work_set.add(bb) + #Find fixed point + while work_set: + bb = work_set.pop() + live_in = liveness_for_block(bb, live_at_end[bb]) + if live_in != live_at_start[bb]: + assert len(live_in) > len(live_at_start[bb]) + live_at_start[bb] = live_in + for pred in self._bb_pred[bb]: + work_set.add(pred) + live_at_end[pred] = live_at_end[pred].union(live_in) + return live_at_start + + + def delete_unreachable_nodes(self): + self._require("reachable") + unreachable = [u for u in self.all_nodes if u not in self._reachable] + if not unreachable: + return + for mapping in (self.definitions, self.deletions, self.uses): + for u in unreachable: + if u in mapping: + del mapping[u] + for u in unreachable: + self.use_all_nodes.discard(u) + self.remove_node(u) + #Make sure we retain the order of all_nodes. + self.all_nodes = [r for r in self.all_nodes if r in self._reachable] + self.clear_computed() + + def dominated_by(self, node): + self._require('idoms') + assert node in self, str(node) + " is not in graph" + dominated = set([node]) + todo = set(self.succ[node]) + while todo: + n = todo.pop() + if n in dominated: + continue + #Unreachable nodes will not be in self._idoms + if n in self._idoms and self._idoms[n] in dominated: + dominated.add(n) + todo.update(self.succ[n]) + return dominated + + def strictly_dominates(self, pre, post): + self._require('idoms') + while post in self._idoms: + post = self._idoms[post] + if pre == post: + return True + return False + + def reaches_while_dominated(self, pre, post, control): + ''' Holds if `pre` reaches `post` while remaining in the + region dominated by `control`.''' + self._require('dominance_frontier') + dominance_frontier = self._dominance_frontier[control] + todo = { pre } + reached = set() + while todo: + node = todo.pop() + if node in dominance_frontier: + continue + if node == post: + return True + if node in reached: + continue + reached.add(node) + todo.update(self.succ[node]) + return False + + def split(self, splits): + #We expect the following to be true (we assert it later): + #top dominates heads for all splits. + # Key class for (partially) ordering node by inverse dominance + class DominanceKey(object): + def __init__(this, node): + this.node = node + def __lt__(this, other): + return self.strictly_dominates(other.node, this.node) + splits.sort(key=lambda arg: DominanceKey(arg[0])) + for top, heads in splits: + self.single_split(top, heads) + + def single_split(self, top, heads): + '''Splits the flow-graph from the branches. All code that succeeds each head + becomes unique to that head, limited to those nodes that are strictly dominated by top, + excluding exit nodes. + ''' + assert top in self, "top " + str(top) + " is not in graph" + strictly_dominated_by_top = self.dominated_by(top) + strictly_dominated_by_top.remove(top) + for head in heads: + assert head in self, "head " + str(head) + " is not in graph" + assert head in strictly_dominated_by_top, str(head) + " is not dominated by " + str(top) + + def successors_within_region(start, region): + #Find all nodes in region, that are reached from start (without leaving region) + nodes = set([start]) + todo = set(self.succ[start]) + while todo: + s = todo.pop() + if s not in nodes and s in region: + nodes.add(s) + todo.update(self.succ[s]) + return nodes + + subgraphs = [ (head, successors_within_region(head, strictly_dominated_by_top)) for head in heads ] + + #Copy the two subgraphs + head_copies = [] + branch_copies = [] + for head, branch in subgraphs: + head_copy, branch_copy = self._copy_subgraph(head, branch, True) + head_copies.append(head_copy) + branch_copies.append(branch_copy) + #The original will be deleted by `delete_unreachable_nodes()` + + #Make sure we retain the order of all_nodes. + self.all_nodes = [n for n in self.all_nodes if n in self.succ] + #All computed values are now invalid. + self.clear_computed() + self.delete_unreachable_nodes() + return head_copies, branch_copies + + def _copy_subgraph(self, entry, to_copy, remove_links): + copies = {} + assert entry in to_copy, repr(entry) + " is not in sub-graph " + str(to_copy) + for node in to_copy: + copy = node.copy() + copies[node] = copy + self.add_node(copy) + ann = self.node_annotations.get(node) + self.annotate_node(copy, ann) + if node == entry: + res = copy + for mapping in (self.definitions, self.deletions, self.uses): + if node in mapping: + mapping[copy] = mapping[node] + if node in self.use_all_nodes: + self.use_all_nodes.add(copy) + + for node in to_copy: + for s in self.succ[node]: + ann = self.edge_annotations.get((node,s)) + if s in to_copy: + self.add_edge(copies[node], copies[s]) + self.annotate_edge(copies[node], copies[s], ann) + else: + self.add_edge(copies[node], s) + self.annotate_edge(copies[node], s, ann) + if remove_links: + predecessors_to_remove = set() + for p in self.pred[entry]: + ann = self.edge_annotations.get((p, entry)) + if p not in to_copy: + self.add_edge(p, copies[entry]) + self.annotate_edge(p, copies[entry], ann) + predecessors_to_remove.add(p) + for p in predecessors_to_remove: + self.remove_edge(p, entry) + return res, set(copies.values()) + + def unroll(self, head, bodystart): + body = self.dominated_by(bodystart) + entries = [p for p in self.pred[head] if p not in body] + bodystart2, _ = self._copy_subgraph(bodystart, body, False) + prehead = head.copy() + self.add_node(prehead) + ann = self.node_annotations.get(head) + self.annotate_node(prehead, ann) + for s in self.succ[head]: + if s is not bodystart: + self.add_edge(prehead, s) + ann = self.edge_annotations.get((head, s)) + self.annotate_edge(prehead, s, ann) + self.add_edge(prehead, bodystart2) + ann = self.edge_annotations.get((head, bodystart)) + self.annotate_edge(prehead, bodystart2, ann) + for p in entries: + ann = self.edge_annotations.get((p, head)) + self.remove_edge(p, head) + self.add_edge(p, prehead) + self.annotate_edge(p, prehead, ann) + self.clear_computed() + self.delete_unreachable_nodes() + +class SSA_Var(object): + 'A single static assignment variable' + + __slots__ = [ 'variable', 'node' ] + + def __init__(self, variable, node): + self.variable = variable + self.node = node + + def __repr__(self): + return 'SSA_Var(%r, %r)' % (self.variable.id, self.node) + + +def _reverse_map(mapping): + 'Reverse a mapping of keys -> values to value->set(keys)' + inv_map = {} + for k, v in mapping.items(): + if v not in inv_map: + inv_map[v] = SmallSet() + inv_map[v].add(k) + return inv_map diff --git a/python/extractor/semmle/logging.py b/python/extractor/semmle/logging.py new file mode 100644 index 00000000000..fd2dc6a1916 --- /dev/null +++ b/python/extractor/semmle/logging.py @@ -0,0 +1,393 @@ +''' +Support for multi-process safe logging with colorized output. +''' + +import os +import sys +import traceback +import multiprocessing +import enum +import datetime + + +#Use standard Semmle logging levels + +OFF = 0 +ERROR = 1 +WARN = 2 +INFO = 3 +DEBUG = 4 +TRACE = 5 +TRACEBACK = 6 + +COLOR = 8 + +if os.name == "nt": + MAGENTA = "" + GREY = "" + BLUE = "" + YELLOW = "" + RED = "" + RESET = "" +else: + MAGENTA = "\x1b[35m" + GREY = "\x1b[2m\x1b[37m" + BLUE = "\x1b[34m" + YELLOW = "\x1b[33m" + RED = "\x1b[31m" + RESET = '\x1b[0m' + +LOG_PREFIX = { + TRACE: "[TRACE] ", + DEBUG: "[DEBUG] ", + INFO: "[INFO] ", + WARN: "[WARN] ", + ERROR: "[ERROR] ", + TRACEBACK: "[TRACEBACK] ", + COLOR | TRACE: GREY + "[TRACE] ", + COLOR | DEBUG: "[DEBUG] ", + COLOR | INFO: BLUE + "[INFO] ", + COLOR | WARN: YELLOW + "[WARN] ", + COLOR | ERROR: RED + "[ERROR] ", + COLOR | TRACEBACK: MAGENTA + "[TRACEBACK] ", +} + +def write_message(level, text): + '''Write a message direct to stdout without queueing.''' + reset = RESET if level & COLOR == COLOR else '' + print(LOG_PREFIX[level] + text + reset) + sys.stdout.flush() + +def write_message_with_proc(level, proc_id, text): + reset = RESET if level & COLOR == COLOR else '' + print(LOG_PREFIX[level] + proc_id + text + reset) + sys.stdout.flush() + +_logging_process = None + +def stop(): + _logging_process.join() + +class Logger(object): + '''Multi-process safe logger''' + + def __init__(self, level=WARN, color=False): + global _logging_process + self.proc_id = "" + self.level = level + # macOS does not support `fork` properly, so we must use `spawn` instead. + method = 'spawn' if sys.platform == "darwin" else None + try: + ctx = multiprocessing.get_context(method) + except AttributeError: + # `get_context` doesn't exist -- we must be running an old version of Python. + ctx = multiprocessing + self.queue = ctx.Queue() + _logging_process = ctx.Process(target=_message_loop, args=(self.queue,)) + _logging_process.start() + self.color = COLOR if color else 0 + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.close() + return False + + def set_process_id(self, proc_id): + '''Set the process id to be included in log messages.''' + self.proc_id = "[%d] " % proc_id + + def setLevel(self, level): + self.level = level + + def log(self, level, fmt, *args): + '''Log a message in a process safe fashion. + Message will be of the form [level] fmt%args.''' + if level <= self.level: + txt = fmt % args + try: + self.queue.put((self.color | level, self.proc_id, txt), False) + except Exception: + self.write_message(self.color | level, txt) + + def debug(self, fmt, *args): + self.log(DEBUG, fmt, *args) + + def info(self, fmt, *args): + self.log(INFO, fmt, *args) + + def warning(self, fmt, *args): + self.log(WARN, fmt, *args) + + def error(self, fmt, *args): + self.log(ERROR, fmt, *args) + + def trace(self, fmt, *args): + self.log(TRACE, fmt, *args) + + def traceback(self, level=INFO): + if level > self.level: + return + lines = trim_traceback(traceback.format_exc()) + for line in lines: + try: + self.queue.put((self.color | TRACEBACK, self.proc_id, line), False) + except Exception: + self.write_message(TRACEBACK, line) + + def close(self): + self.queue.put(None) + + def write_message(self, level, text): + '''Write a message direct to stdout without queueing. + Safe to use even after logger is closed. + Calling this concurrently from different processes or before calling logger.close() + may cause messages to become interleaved.''' + if level <= self.level: + write_message_with_proc(self.color | level, self.proc_id, text) + +#Function run by logger output process +def _message_loop(log_queue): + # use utf-8 as the character encoding for stdout/stderr to be able to properly + # log/print things on systems that use bad default encodings (windows). + sys.stdout.reconfigure(encoding='utf-8') + sys.stderr.reconfigure(encoding='utf-8') + + common = set() + while True: + try: + msg = log_queue.get() + if msg is None: + return + level, proc_id, text = msg + if proc_id: + write_message_with_proc(level, proc_id, text) + elif (level, text) not in common: + write_message(level, text) + common.add((level, text)) + except KeyboardInterrupt: + #Will be handled in other processes. + pass + +def select_traceback_lines(lines, limit_start=30, limit_end=12): + '''Select a subset of traceback lines to be displayed, cutting out the middle part of the + traceback if the length exceeds `limit_start + limit_end`. + This is intended to avoid displaying too many lines of tracebacks + that are not relevant to the user.''' + lines = lines.splitlines() + num_lines = len(lines) + limit = limit_start + limit_end + if num_lines <= limit: + yield from lines + else: + yield from lines[:limit_start] + yield "... {} lines skipped".format(num_lines - limit) + yield from lines[-limit_end:] + + +def trim_traceback(lines): + trimmed = [] + for line in select_traceback_lines(lines): + shortline = line.strip() + try: + if shortline.startswith("File"): + shortline = '"semmle' + shortline.split("semmle")[-1] + elif shortline.startswith("..."): + pass + else: + continue + except Exception: + #Formatting error, just emit line as-is. + pass + trimmed.append(shortline) + return trimmed + +class StructuredLogObject(object): + """ + Base class for CodeQL diagnostic message format + + see https://github.com/github/code-scanning/blob/main/docs/adrs/0035-diagnostics.md#codeql-diagnostic-message-format + """ + def to_dict(self): + # Discard any entries with a value of `None` + def f(v): + if isinstance(v, StructuredLogObject): + return v.to_dict() + return v + return {k: f(v) for k, v in self.__dict__.items() if v is not None} + +class Severity(StructuredLogObject, enum.Enum): + ERROR = "error" + WARNING = "warning" + NOTE = "note" + + def to_dict(self): + return self.value + +class Source(StructuredLogObject): + def __init__(self, id, name, extractorName="python"): + self.id = id + self.name = name + self.extractorName = extractorName + + def extractorName(self, extractorName): + self.extractorName = extractorName + return self + +class Visibility(StructuredLogObject): + def __init__(self, statusPage=False, cliSummaryTable=False, telemetry=False): + self.statusPage = statusPage + self.cliSummaryTable = cliSummaryTable + self.telemetry = telemetry + + def statusPage(self, statusPage): + self.statusPage = statusPage + return self + + def cliSummaryTable(self, cliSummaryTable): + self.cliSummaryTable = cliSummaryTable + return self + + def telemetry(self, telemetry): + self.telemetry = telemetry + return self + +class Location(StructuredLogObject): + def __init__(self, file=None, startLine=None, startColumn=None, endLine=None, endColumn=None): + self.file = file + self.startLine = startLine + self.startColumn = startColumn + + # If you set startline/startColumn you MUST also set endLine/endColumn, so we + # ensure they are also set. + self.endLine = endLine + if endLine is None and startLine is not None: + self.endLine = startLine + + self.endColumn = endColumn + if endColumn is None and startColumn is not None: + self.endColumn = startColumn + + def file(self, file): + self.file = file + return self + + def startLine(self, startLine): + self.startLine = startLine + return self + + def startColumn(self, startColumn): + self.startColumn = startColumn + return self + + def endLine(self, endLine): + self.endLine = endLine + return self + + def endColumn(self, endColumn): + self.endColumn = endColumn + return self + +class DiagnosticMessage(StructuredLogObject): + def __init__(self, source, severity=Severity.WARNING, location=None, markdownMessage=None, plaintextMessage=None, helpLinks=None, visibility=None, attributes=None, timestamp=None): + self.timestamp = timestamp or datetime.datetime.now().isoformat() + self.source = source + self.severity = severity + self.location = location + self.markdownMessage = markdownMessage + self.plaintextMessage = plaintextMessage + self.helpLinks = helpLinks + if visibility is None: + visibility = Visibility() + self.visibility = visibility + self.attributes = attributes + + def with_severity(self, severity): + self.severity = severity + return self + + def with_location(self, location): + self.location = location + return self + + def markdown(self, message): + self.markdownMessage = message + return self + + def text(self, message): + self.plaintextMessage = message + return self + + def help_link(self, link): + if self.helpLinks is None: + self.helpLinks = [] + self.helpLinks.append(link) + return self + + def cli_summary_table(self): + self.visibility.cliSummaryTable = True + return self + + def status_page(self): + self.visibility.statusPage = True + return self + + def telemetry(self): + self.visibility.telemetry = True + return self + + def attribute(self, key, value): + if self.attributes is None: + self.attributes = {} + self.attributes[key] = value + return self + + def with_timestamp(self, timestamp): + self.timestamp = timestamp + return self + +def get_stack_trace_lines(): + """Creates a stack trace for inclusion into the `attributes` part of a diagnostic message. + Limits the size of the stack trace to 5000 characters, so as to not make the SARIF file overly big. + """ + lines = trim_traceback(traceback.format_exc()) + trace_length = 0 + for i, line in enumerate(lines): + trace_length += len(line) + if trace_length > 5000: + return lines[:i] + return lines + +def syntax_error_message(exception, unit): + l = Location(file=unit.path, startLine=exception.lineno, startColumn=exception.offset) + error = (DiagnosticMessage(Source("py/diagnostics/syntax-error", "Could not process some files due to syntax errors"), Severity.WARNING) + .with_location(l) + .markdown("A parse error occurred while processing `{}`, and as a result this file could not be analyzed. Check the syntax of the file using the `python -m py_compile` command and correct any invalid syntax.".format(unit.path)) + .attribute("traceback", get_stack_trace_lines()) + .attribute("args", exception.args) + .status_page() + .cli_summary_table() + .telemetry() + ) + return error + +def recursion_error_message(exception, unit): + l = Location(file=unit.path) + return (DiagnosticMessage(Source("py/diagnostics/recursion-error", "Recursion error in Python extractor"), Severity.ERROR) + .with_location(l) + .text(exception.args[0]) + .attribute("traceback", get_stack_trace_lines()) + .attribute("args", exception.args) + .telemetry() + ) + +def internal_error_message(exception, unit): + l = Location(file=unit.path) + return (DiagnosticMessage(Source("py/diagnostics/internal-error", "Internal error in Python extractor"), Severity.ERROR) + .with_location(l) + .text("Internal error") + .attribute("traceback", get_stack_trace_lines()) + .attribute("args", exception.args) + .telemetry() + ) diff --git a/python/extractor/semmle/path_filters.py b/python/extractor/semmle/path_filters.py new file mode 100644 index 00000000000..cb1a4d9b8bc --- /dev/null +++ b/python/extractor/semmle/path_filters.py @@ -0,0 +1,71 @@ +import os +import re + +def escape(pattern): + '''Escape special characters''' + ESCAPE = "(){}[].^$+\\?|" + def escape_char(char): + if char in ESCAPE: + return "\\" + char + else: + return char + return ''.join(escape_char(c) for c in pattern) + +SEP = escape(os.sep) + +STAR_STAR_REGEX = "([^%s]*%s)*" % (SEP, SEP) +STAR_REGEX = "[^%s]*" % SEP + +def validate_pattern(pattern): + '''Validate that an include/exclude pattern is of the correct syntax.''' + kind, glob = pattern.split(":") + if not kind in ("include", "exclude"): + raise SyntaxError("Illegal type: '%s'" % kind) + parts = glob.split("/") + for p in parts: + if "**" in p and p != "**": + raise SyntaxError("Illegal path element: '%s'" % p) + +def glob_part_to_regex(glob, add_sep): + '''Convert glob part to regex pattern''' + if glob == "**": + return STAR_STAR_REGEX + if '*' in glob: + pattern = glob.replace('*', STAR_REGEX) + else: + pattern = glob + if add_sep: + return pattern + SEP + else: + return pattern + +def glob_to_regex(glob, prefix=""): + '''Convert entire glob to a compiled regex''' + glob = glob.strip().strip("/") + parts = glob.split("/") + #Trailing '**' is redundant, so strip it off. + if parts[-1] == "**": + parts = parts[:-1] + if not parts: + return ".*" + parts = [ glob_part_to_regex(escape(p), True) for p in parts[:-1] ] + [ glob_part_to_regex(escape(parts[-1]), False) ] + # we need to escape the prefix, specifically because on windows the prefix will be + # something like `C:\\folder\\subfolder\\` and without escaping the + # backslash-path-separators will get interpreted as regex escapes (which might be + # invalid sequences, causing the extractor to crash) + full_pattern = escape(prefix) + ''.join(parts) + "(?:" + SEP + ".*|$)" + return re.compile(full_pattern) + +def filter_from_pattern(pattern, prev_filter, prefix): + '''Create a filter function from a pattern and the previous filter. + The pattern takes precedence over the previous filter + ''' + validate_pattern(pattern) + kind, glob = pattern.strip().split(":") + result = kind == "include" + regex = glob_to_regex(glob, prefix) + def filter(path): + if regex.match(path): + return result + return prev_filter(path) + return filter diff --git a/python/extractor/semmle/path_rename.py b/python/extractor/semmle/path_rename.py new file mode 100644 index 00000000000..3a72d41e971 --- /dev/null +++ b/python/extractor/semmle/path_rename.py @@ -0,0 +1,44 @@ +import os +import semmle.projectlayout as projectlayout +from semmle.util import SemmleError + +__all__ = "renamer_from_options_and_env" + +def _realpath(path): + try: + return os.path.realpath(path) + except IOError: + return os.path.abspath(path) + +def renamer_from_options_and_env(options, logger): + 'Returns a renamer function which takes a path and returns the nominal path' + preserve_symlinks = os.environ.get('SEMMLE_PRESERVE_SYMLINKS', "") + if options.no_symlinks or preserve_symlinks.lower() == "true": + pre_rename = os.path.abspath + else: + pre_rename = _realpath + + if options.renamer: + try: + module = __import__(options.renamer, fromlist=['get_renamer']) + rename = module.get_renamer() + except (AttributeError, ImportError): + raise SemmleError("Cannot get renamer from module " + options.renamer) + else: + path_transformer = os.environ.get("SEMMLE_PATH_TRANSFORMER", None) + if path_transformer: + logger.info("Using path transformer '%s'", path_transformer) + rename = projectlayout.get_renamer(path_transformer) + else: + rename = lambda path : path + + if os.name == "nt": + def post_rename(path): + if path[1] == ':': + path = path[0].upper() + path[1:] + return path + else: + post_rename = lambda path : path + + renamer = lambda path : post_rename(rename(pre_rename(path))) + return renamer diff --git a/python/extractor/semmle/populator.py b/python/extractor/semmle/populator.py new file mode 100644 index 00000000000..c2d6b6277c9 --- /dev/null +++ b/python/extractor/semmle/populator.py @@ -0,0 +1,148 @@ +import sys +import os +import subprocess +from ast import literal_eval + +from semmle import logging +from semmle import traverser +from semmle import cmdline +from semmle import worker +from semmle.util import VERSION, update_analysis_version, get_analysis_major_version +from buildtools.version import executable + +'''The populator generates trap files from a Python project. +The populator consists of two parts: a traverser front end which traverses the file +system and multiple worker back ends which extract information from the modules. +''' + +#NOTE: The front-end is simply an iterable of "extractables" and it should be easy to +#plug-in new front-ends if needed. + +def cleanup_sys_path(path): + '''Clean up sys.path removing duplicates and + current working directory, making it safe for analysis. + ''' + #Remove duplicates + path = [ p for i, p in enumerate(path) if i == 0 or p != path[i-1] ] + #Remove curent working directory + cwd = os.getcwd() + if cwd in path: + path.remove(cwd) + return path + +def get_py2_sys_path(logger, py3_sys_path): + '''Get the sys.path for Python 2, if it is available. If no Python 2 is available, + simply return the Python 3 sys.path. Returns a tuple of the sys.path and a boolean indicating + whether Python 2 is available.''' + try: + command = " ".join(executable(2) + ['-c "import sys; print(sys.path)"']) + # We need `shell=True` here in order for the test framework to function correctly. For + # whatever reason, the `PATH` variable is ignored if `shell=False`. + # Also, this in turn forces us to give the whole command as a string, rather than a list. + # Otherwise, the effect is that the Python interpreter is invoked _as a REPL_, rather than + # with the given piece of code. + output = subprocess.check_output(command, shell=True).decode(sys.getfilesystemencoding()) + py2_sys_path = literal_eval(output) + # Ensure that the first element of the sys.path is the same as the Python 3 sys.path -- + # specifically a reference to our local `tools` directory. This ensures that the `six` stubs + # are picked up from there. The item we're overwriting here is '', which would be cleaned up + # later anyway. + py2_sys_path[0] = py3_sys_path[0] + return py2_sys_path, True + except (subprocess.CalledProcessError, ValueError, SyntaxError) as e: + logger.error("Error while getting Python 2 sys.path:") + logger.error(e) + logger.info("No Python 2 found. Using Python 3 sys.path.") + return py3_sys_path, False + +def main(sys_path = sys.path[:]): + options, args = cmdline.parse(sys.argv[1:]) + logger = logging.Logger(options.verbosity, options.colorize) + # This is not the prettiest way to do it, but when running tests we want to ensure that the + # `--lang` flag influences the analysis version (e.g. so that we include the correct stdlib TRAP + # file). So, we change the values of the appropriate variables (which would otherwise be based + # on `CODEQL_EXTRACTOR_PYTHON_ANALYSIS_VERSION`), overwriting the previous values. + if options.language_version: + last_version = options.language_version[-1] + update_analysis_version(last_version) + + found_py2 = False + if get_analysis_major_version() == 2: + # Setup `sys_path` to use the Python 2 standard library + sys_path, found_py2 = get_py2_sys_path(logger, sys_path) + + # use utf-8 as the character encoding for stdout/stderr to be able to properly + # log/print things on systems that use bad default encodings (windows). + sys.stdout.reconfigure(encoding='utf-8') + sys.stderr.reconfigure(encoding='utf-8') + + sys.setrecursionlimit(2000) + sys_path = cleanup_sys_path(sys_path) + options.sys_path = sys_path[1:] + + if sys.version_info.major == 2: + logger.error("Extraction using Python 2 is not supported.") + logger.warning("To use the Python extractor, please ensure that Python 3 is available on your system.") + logger.warning("For more information, see https://codeql.github.com/docs/codeql-overview/system-requirements/#additional-software-requirements") + logger.warning("and https://codeql.github.com/docs/codeql-overview/supported-languages-and-frameworks/#languages-and-compilers") + logger.close() + logging.stop() + sys.exit(1) + elif found_py2: + logger.info("Extraction will use the Python 2 standard library.") + else: + logger.info("Extraction will use the Python 3 standard library.") + logger.info("sys_path is: %s", sys_path) + try: + the_traverser = traverser.Traverser(options, args, logger) + except Exception as ex: + logger.error("%s", ex) + logger.close() + logging.stop() + sys.exit(1) + run(options, args, the_traverser, logger) + + +def run(options, args, the_traverser, logger: logging.Logger): + logger.info("Python version %s", sys.version.split()[0]) + logger.info("Python extractor version %s", VERSION) + if 'CODEQL_EXTRACTOR_PYTHON_SOURCE_ARCHIVE_DIR' in os.environ: + archive = os.environ['CODEQL_EXTRACTOR_PYTHON_SOURCE_ARCHIVE_DIR'] + elif 'SOURCE_ARCHIVE' in os.environ: + archive = os.environ['SOURCE_ARCHIVE'] + else: + archive = None + trap_dir = cmdline.output_dir_from_options_and_env(options) + try: + pool = worker.ExtractorPool.from_options(options, trap_dir, archive, logger) + except ValueError as ve: + logger.error("%s", ve) + logger.close() + sys.exit(1) + try: + exitcode = 0 + pool.extract(the_traverser) + except worker.ExtractorFailure: + exitcode = 1 + except KeyboardInterrupt: + exitcode = 2 + logger.info("Keyboard interrupt") + except BaseException as ex: + exitcode = 3 + logger.error("Unexpected exception: %s ", ex) + logger.traceback(logging.WARN) + finally: + if exitcode: + logger.debug("Stopping...") + pool.stop() + else: + logger.debug("Writing interpreter trap") + pool.close() + logger.close() + logging.stop() + logger.write_message(logging.DEBUG, "Stopped." if exitcode else "Done.") + if exitcode: + sys.exit(exitcode) + +if __name__ == "__main__": + main() diff --git a/python/extractor/semmle/profiling.py b/python/extractor/semmle/profiling.py new file mode 100644 index 00000000000..02308434096 --- /dev/null +++ b/python/extractor/semmle/profiling.py @@ -0,0 +1,70 @@ +from . import util +import os.path +import sys +from time import time +import collections + +__all__ = [ 'get_profiler' ] + +class NoProfiler(object): + '''Dummy profiler''' + + def __init__(self): + pass + + def __enter__(self): + return self + + def __exit__(self, *args): + pass + +class StatProfiler(object): + ''' statprof based statistical profiler''' + + def __init__(self, outpath): + self.outpath = outpath + + def __enter__(self): + statprof.start() + return self + + def __exit__(self, *args): + statprof.stop() + with open(self.outpath, "w") as fd: + statprof.display(fd) + + +def get_profiler(options, id, logger): + '''Returns a profile based on options and version. `id` is used to + label the output file.''' + global statprof + if options.profile_out: + if sys.version_info >= (3,0): + logger.warning("Cannot create profiler: statprof is Python2 only.") + else: + try: + import statprof + util.makedirs(options.profile_out) + outpath = os.path.join(options.profile_out, "profile-%s.txt" % id) + logger.info("Writing profile information to %s", outpath) + return StatProfiler(outpath) + except ImportError: + logger.warning("Cannot create profiler: no statprof module.") + except Exception as ex: + logger.warning("Cannot create profiler: %s", ex) + return NoProfiler() + +class MillisecondTimer(object): + + def __init__(self): + self.elapsed = 0.0 + + def __enter__(self): + self.start = time() + return self + + def __exit__(self, *_): + self.elapsed += (time() - self.start)*1000 + + +timers = collections.defaultdict(MillisecondTimer) diff --git a/python/extractor/semmle/projectlayout.py b/python/extractor/semmle/projectlayout.py new file mode 100644 index 00000000000..ec657d2ae24 --- /dev/null +++ b/python/extractor/semmle/projectlayout.py @@ -0,0 +1,364 @@ +# +# This is a port of com.semmle.extractor.projectstructure.ProjectLayout +# and must be kept in sync +# + +"""Project-layout files are used to transform or exclude paths. The format +is described at https://semmle.com/wiki/display/SD/project-layout+format""" + +__ALL__ = [ 'load', 'ProjectLayout' ] + +import collections +import re +from functools import total_ordering +import sys + +def get_renamer(filename): + layout = load(filename) + def rename(path): + renamed = layout.artificial_path(path) + return path if renamed is None else renamed + return rename + +def load(filename): + """Load a project-layout file from 'filename'.""" + with open(filename, 'rb') as f: + content = f.read().decode('utf-8') + lines = [ line.strip() for line in content.split('\n') ] + return ProjectLayout(lines) + +def _escape_string_literal_for_regexp(literal, preserve): + ESCAPE = u"(){}[].^$+\\*?" + def escape(char): + if char in ESCAPE and not char in preserve: + return u"\\" + char + else: + return char + return u"".join(escape(c) for c in literal) + + +class ProjectLayout(object): + """ A project-layout file optionally begins with an '@' + followed by the name the project should be renamed to. + Optionally, it can then be followed by a list of + include/exclude patterns (see below) which are kept + as untransformed paths. This is followed by one or + more clauses. Each clause has the following form: + + #virtual-path + path/to/include + another/path/to/include + -/path/to/include/except/this + + i.e. one or more paths (to include) and zero or more paths + prefixed by minus-signs (to exclude).""" + + def __init__(self, lines): + """Construct a project-layout object from an array of strings, each + corresponding to one line of the project-layout. This constructor is + for testing. Usually, use the 'load' function.""" + + self._project = None + # Map from virtual path prefixes (following the '#' in the + # project-layout) to the sequence of patterns that fall into that + # section. Declared as an OrderedDict since iteration order matters -- + # the blocks are processed in the same order as they occur in the + # project-layout. + self._rewrites = collections.OrderedDict() + virtual = u"" + section = _Section() + self._rewrites[virtual] = section + num = 0 + for line in lines: + num += 1 + if not line: + continue + if line[0] == u'@': + if self._project is not None: + raise _error(u"Multiple project names in project-layout", num) + self._project = self._tail(line) + elif line[0] == u'#': + virtual = self._tail(line) + if virtual in self._rewrites: + raise _error(u"Duplicate virtual path prefix " + virtual, num) + section = _Section(virtual) + self._rewrites[virtual] = section + elif line[0] == u'-': + section.add(_Rewrite(self._tail(line), num)) + else: + section.add(_Rewrite(line, num, virtual)) + + @classmethod + def _tail(cls, line): + return line[1:].strip() + + def project_name(self, default=None): + """ Get the project name, if specified by the project-layout. + If default is specified, it will be returned if no project name + is specified. Otherwise, an exception is thrown.""" + + if self._project is not None: + return self._project + if default is not None: + return default + raise Exception(u"Project specificatino does not define a project name.") + + def sections(self): + """return the section headings (aka virtual paths)""" + return self._rewrites.keys() + + def section_is_empty(self, section): + """Determine whether or not a particular section in this + project-layout is empty (has no include/exclude patterns).""" + + if section in self._rewrites: + return self._rewrites[section].is_empty() + raise Exception(u"Section does not exist: " + section) + + def rename_section(self, old, new): + """Reaname a section in this project-layout.""" + + if not old in self._rewrites: + raise Exception(u"Section does not exist: " + old) + section = self._rewrites.pop(old) + section.rename(new) + self._rewrites[new] = section + + def sub_layout(self, section_name): + """Return a project-layout file for just one of the sections in this + project-layout. This is done by copying all the rules from the + section, and changing the section heading (beginning with '#') + to a project name (beginning with '@').""" + + section = self._rewrites.get(section_name, None) + if section is None: + raise Exception(u"Section does not exist: " + section) + return section.to_layout() + + def artificial_path(self, path): + """Maps a path to its corresponding artificial path according to the + rules in this project-layout. If the path is excluded (either + explicitly, or because it is not mentioned in the project-layout) + then None is returned. + + Paths should start with a leading forward-slash.""" + + prefixes = _Section.prefixes(path) + for section in self._rewrites.values(): + rewrite = section.match(prefixes); + rewritten = None; + if rewrite is not None: + rewritten = rewrite.rewrite(path); + if rewritten is not None: + return rewritten + return None + + def include_file(self, path): + """Checks whether a path should be included in the project specified by + this file. A file is included if it is mapped to some location. + + Paths should start with a leading forward-slash.""" + + return self.artificial_path(path) is not None + + +class _Section(object): + """Each section corresponds to a block beginning with '#some/path'. There + is also an initial section for any include/exclude patterns before the + first '#'.""" + + def __init__(self, virtual=u""): + self._virtual = virtual + self._simple_rewrites = collections.OrderedDict() + self._complex_rewrites = [] + + def to_layout(self): + result = [] + rewrites = [] + rewrites.extend(self._simple_rewrites.values()) + rewrites.extend(self._complex_rewrites) + rewrites.sort() + + result.append(u'@' + self._virtual) + for rewrite in rewrites: + result.append(str(rewrite)) + result.append(u'') + return u'\n'.join(result) + + def rename(self, new): + self._virtual = new + for rewrite in self._simple_rewrites.values(): + rewrite.virtual = new + for rewrite in self._complex_rewrites: + rewrite.virtual = new + + def add(self, rewrite): + if rewrite.is_simple(): + self._simple_rewrites[rewrite.simple_prefix()] = rewrite + else: + self._complex_rewrites.append(rewrite) + + def is_empty(self): + return not self._simple_rewrites and not self._complex_rewrites + + @classmethod + def prefixes(cls, path): + result = [path] + i = len(path) + while (i > 1): + i = path.rfind(u'/', 0, i) + result.append(path[:i]) + result.append(u"/") + return result; + + def match(self, prefixes): + best = None + for prefix in prefixes: + match = self._simple_rewrites.get(prefix, None) + if match is not None: + if best is None or best._line < match._line: + best = match; + # Last matching rewrite 'wins' + for rewrite in reversed(self._complex_rewrites): + if rewrite.matches(prefixes[0]): + if best is None or best._line < rewrite._line: + best = rewrite; + # no point continuing + break; + return best; + +@total_ordering +class _Rewrite(object): + """Each Rewrite corresponds to a single include or exclude line in the + project-layout. For example, for following clause there would be three + Rewrite objects: + + #Source + /src + /lib + -/src/tests + + For includes use the two-argument constructor; for excludes the + one-argument constructor.""" + + # The intention is to allow the ** wildcard when followed by a slash only. The + # following should be invalid: + # - a / *** / b (too many stars) + # - a / ** (** at the end should be omitted) + # - a / **b (illegal) + # - a / b** (illegal) + # - ** (the same as a singleton '/') + # This regular expression matches ** when followed by a non-/ character, + # or the end of string. + _verify_stars = re.compile(u".*(?:\\*\\*[^/].*|\\*\\*$|[^/]\\*\\*.*)") + + def __init__(self, path, line, virtual=None): + if virtual is None: + exclude = path + self._line = line; + self._original = u'-' + exclude; + if not exclude.startswith(u"/"): + exclude = u'/' + exclude + if exclude.find(u"//") != -1: + raise _error(u"Illegal '//' in exclude path", line) + if self._verify_stars.match(exclude): + raise _error(u"Illegal use of '**' in exclude path", line) + if exclude.endswith(u"/"): + exclude = exclude[0 : -1] + self._pattern = self._compile_prefix(exclude); + exclude = exclude.replace(u"//", u"/") + if len(exclude) > 1 and exclude.endswith(u"/"): + exclude = exclude[0 : -1] + self._simple = None if exclude.find(u"*") != -1 else exclude + else: + include = path + self._line = line; + self._original = include; + if not include.startswith(u"/"): + include = u'/' + include + doubleslash = include.find(u"//") + if doubleslash != include.find(u"//"): + raise _error(u"More than one '//' in include path (project-layout)", line) + if self._verify_stars.match(include): + raise _error(u"Illegal use of '**' in include path (project-layout)", line) + if not virtual.startswith(u"/"): + virtual = u"/" + virtual + if virtual.endswith(u"/"): + virtual = virtual[0 : -1] + self._pattern = self._compile_prefix(include); + include = include.replace(u"//", u"/"); + if len(include) > 1 and include.endswith(u"/"): + include = include[0 : -1] + self._simple = None if include.find(u"*") != -1 else include + self._virtual = virtual; + + @classmethod + def _compile_prefix(cls, pattern): + """ + Patterns are matched by translation to regex. The following invariants + are assumed to hold: + + - The pattern starts with a '/'. + - There are no occurrences of '**' that is not surrounded by slashes + (unless it is at the start of a pattern). + - There is at most one double slash. + + The result of the translation has precisely one capture group, which + (after successful matching) will contain the part of the path that + should be glued to the virtual prefix. + + It proceeds by starting the capture group either after the double + slash or at the start of the pattern, and then replacing '*' with + '[^/]*' (meaning any number of non-slash characters) and '/**' with + '(?:|/.*)' (meaning empty string or a slash followed by any number of + characters including '/'). + + The pattern is terminated by the term '(?:/.*|$)', saying 'either the + next character is a '/' or the string ends' -- this avoids accidental + matching of partial directory/file names. + + IMPORTANT: Run the ProjectLayoutTests when changing this! + """ + + pattern = _escape_string_literal_for_regexp(pattern, u"*") + if pattern.find(u"//") != -1: + pattern = pattern.replace(u"//", u"(/") + else: + pattern = u"(" + pattern + if pattern.endswith(u"/"): + pattern = pattern[0 : -1] + pattern = pattern.replace(u"/**", u"-///-") + pattern = pattern.replace(u"*", u"[^/]*") + pattern = pattern.replace(u"-///-", u"(?:|/.*)") + return re.compile(pattern + u"(?:/.*|$))") + + def is_simple(self): + return self._simple is not None + + def simple_prefix(self): + """Returns the path included/excluded by this rewrite, if it is + simple, or null if it is not.""" + + return self._simple + + def matches(self, path): + return bool(self._pattern.match(path)) + + def rewrite(self, path): + if self._virtual is None: + return None + matcher = self._pattern.match(path) + if not matcher: + return None + return self._virtual + matcher.group(1); + + def __unicode__(self): + return self._original + + def __lt__(self, other): + return self._line < other._line + + __hash__ = None + +def _error(message, line): + raise Exception(u"%s (line %d)" % (message, line)) diff --git a/python/extractor/semmle/python/AstMeta.py b/python/extractor/semmle/python/AstMeta.py new file mode 100644 index 00000000000..db0e7560fe2 --- /dev/null +++ b/python/extractor/semmle/python/AstMeta.py @@ -0,0 +1,560 @@ +'''Meta nodes for defining database relations''' + +from abc import abstractmethod + +from semmle.util import fprintf + +PREFIX = 'py_' + +__all__ = [ 'order' ] + + +parent_nodes = {} + +class Node(object): + 'Node in the attribute tree, describing relations' + + next_id = 0 + + def __init__(self): + Node.next_id += 1 + self._index = Node.next_id + self._unique_parent = None + + @property + def parents(self): + return parent_of(self) + + def add_child(self, child): + child.add_parent(self) + + def db_key(self, name): + return 'unique int ' + name + ' : ' + self.db_name() + + def is_sub_type(self): + return False + + @staticmethod + def is_union_type(): + return False + + def is_case_type(self): + return False + + @staticmethod + def is_list(): + return False + + @staticmethod + def is_primitive(): + return False + + def prune(self, node_set): + return self + + @abstractmethod + def child_offsets(self, n): + pass + + @abstractmethod + def write_fields(self, out): + pass + + @abstractmethod + def ql_name(self): + pass + + @property + def unique_parent(self): + if self._unique_parent is None: + parents = self.parents + if len(parents.child_offsets(self)) < 2: + self._unique_parent = True + elif parents.is_union_type(): + self._unique_parent = False + for t in parents.types: + if len(t.child_offsets(self)) > 1: + break + else: + self._unique_parent = True + return self._unique_parent + + +class PrimitiveNode(Node): + 'A primitive node: int, str, etc' + + def __init__(self, name, db_name, key, descriptive_name = None): + Node.__init__(self) + assert isinstance(name, str) + self.name = name + self.super_type = None + self.layout = [] + self.fields = [] + self.subclasses = set() + self._key = key + self._db_name = db_name + if descriptive_name is None: + self.descriptive_name = self.name + else: + self.descriptive_name = descriptive_name + + def db_key(self, name): + return self._key + ' ' + name + ' : ' + self._db_name + ' ref' + + @property + def __name__(self): + return self.name + + def ql_name(self): + 'Return Java style name if a schema type, otherwise the specified name' + if self._db_name[0] == '@': + return capitalize(self.name) + else: + return self._db_name + + def relation_name(self): + return pluralize(PREFIX + self.name) + + def db_name(self): + return self._db_name + + def add_parent(self, p): + parent_nodes[self] = UnionNode.join(parent_of(self), p) + + def fixup(self): + pass + + @staticmethod + def is_primitive(): + return True + + def child_offsets(self, n): + return set() + + def write_init(self, out): + fprintf(out, "%s = PrimitiveNode(%s, %s, %s)\n", self.name, + self.name, self._db_name, self._key) + + def write_fields(self, out): + pass + + +def parent_of(node): + if node in parent_nodes: + return parent_nodes[node] + else: + return None + +class ClassNode(Node): + 'A node corresponding to a single AST type' + + def __init__(self, name, super_type = None, descriptive_name = None): + Node.__init__(self) + assert isinstance(name, str) + self.name = name + self._db_name = name + self.super_type = super_type + self.layout = [] + if super_type: + self.fields = list(super_type.fields) + else: + self.fields = [] + self.subclasses = set() + if super_type: + super_type.subclasses.add(self) + if descriptive_name is None: + self.descriptive_name = self.name.lower() + else: + self.descriptive_name = descriptive_name + if self.descriptive_name[0] == '$': + self.descriptive_name = self.descriptive_name[1:] + elif super_type and ' ' not in self.descriptive_name: + self.descriptive_name += ' ' + super_type.descriptive_name + + def field(self, name, field_type, descriptive_name = None, artificial=False, parser_type = None): + if descriptive_name is None: + self.fields.append((name, field_type, name, artificial, parser_type)) + else: + self.fields.append((name, field_type, descriptive_name, artificial, parser_type)) + + def is_stmt_or_expr_subclass(self): + if self.super_type is None: + return False + return self.super_type.name in ('expr', 'stmt') + + def is_sub_type(self): + if self.super_type is None: + return False + return self.super_type.is_case_type() + + def is_case_type(self): + return (self.subclasses + and parent_of(self)) + + def fixup(self): + self.add_children() + self.compute_layout() + + def add_parent(self, p): + parent_nodes[self] = UnionNode.join(parent_of(self), p) + if self.super_type: + self.super_type.add_parent(p) + + def add_children(self): + for f, f_node, _, _, _ in self.fields: + self.add_child(f_node) + + def compute_layout(self): + fields = self.fields + lists = 0 + for f, f_node, _, _, _ in fields: + if (isinstance(f_node, ListNode) and + f_node.item_type.__name__ != 'stmt'): + lists += 1 + index = 0 + inc = 1 + for f, f_node, docname, artificial, pt in fields: + self.layout.append((f, f_node, index, docname, artificial, pt)) + index += inc + + def relation_name(self): + return pluralize(PREFIX + self._db_name) + + def set_name(self, name): + self._db_name = name + + @property + def __name__(self): + return self.name + + def ql_name(self): + if self._db_name == 'str': + return 'string' + elif self._db_name in ('int', 'float'): + return self.db_name + name = self._db_name + return ''.join(capitalize(part) for part in name.split('_')) + + def db_name(self): + return '@' + PREFIX + self._db_name + + def dump(self, out): + def yes_no(b): + return "yes" if b else "no" + fprintf(out, "'%s' :\n", self.name) + fprintf(out, " QL name: %s\n", self.ql_name()) + fprintf(out, " Relation name: %s\n", self.relation_name()) + fprintf(out, " Is case_type %s\n", yes_no(self.is_case_type())) + fprintf(out, " Super type: %s\n", self.super_type) + fprintf(out, " Layout:\n") + for l in self.layout: + fprintf(out, " %s, %s, %s, '%s, %s'\n" % l) + fprintf(out, " Parents: %s\n\n", parent_of(self)) + + def write_init(self, out): + if self.super_type: + fprintf(out, "%s = ClassNode('%s', %s)\n", self.name, + self.name, self.super_type.name) + else: + fprintf(out, "%s = ClassNode('%s')\n", self.name, self.name) + + def write_fields(self, out): + for name, field_type, docname, _, _ in self.fields: + fprintf(out, "%s.field('%s', %s, '%s')\n", self.name, + name, field_type.__name__, docname) + if self.layout: + fprintf(out, "\n") + + def __repr__(self): + return "Node('%s')" % self.name + + def child_offsets(self, n): + #Only used by db-scheme generator, so can be slow + found = set() + for name, node, offset, _, artificial, _ in self.layout: + if node is n: + found.add(offset) + if self.subclasses: + for s in self.subclasses: + found.update(s.child_offsets(n)) + return found + +class ListNode(Node): + "Node corresponding to a list, parameterized by its member's type" + + def __init__(self, item_node, name=None): + Node.__init__(self) + self.list_type = None + self.layout = () + self.super_type = None + self.item_type = item_node + self.subclasses = () + self.add_child(item_node) + self.name = name + + def relation_name(self): + return pluralize(PREFIX + self.__name__) + + def dump(self, out): + fprintf(out, "List of %s\n", self.name) + fprintf(out, " Parents: %s\n\n", parent_of(self)) + + def write_init(self, out): + fprintf(out, "%s = ListNode(%s)\n", + self.__name__, self.item_type.__name__) + + def write_fields(self, out): + pass + + @staticmethod + def is_list(): + return True + + @property + def __name__(self): + if self.name is None: + assert isinstance(self.item_type.__name__, str) + return self.item_type.__name__ + '_list' + else: + return self.name + + @property + def descriptive_name(self): + return self.item_type.descriptive_name + ' list' + + def db_name(self): + return '@' + PREFIX + self.__name__ + + def ql_name(self): + if self.name is not None: + return capitalize(self.name) + if self.item_type is str: + return 'StringList' + elif self.item_type is int: + return 'IntList' + elif self.item_type is float: + return 'FloatList' + return capitalize(self.item_type.ql_name()) + 'List' + + def __repr__(self): + return "ListNode(%s)" % self.__name__ + + def fixup(self): + pass + + def add_parent(self, p): + parent_nodes[self] = UnionNode.join(parent_of(self), p) + + def child_offsets(self, n): + return set((0,1,2,3)) + +_all_unions = {} + +class UnionNode(Node): + 'Node representing a set of AST types' + + def __init__(self, *types): + Node.__init__(self) + assert len(types) > 1 + self.types = frozenset(types) + self.name = None + self.super_type = None + self.layout = [] + self.subclasses = () + #Whether this node should be visited in auto-generated extractor. + self.visit = False + + @staticmethod + def join(t1, t2): + if t1 is None: + return t2 + if t2 is None: + return t1 + if isinstance(t1, UnionNode): + all_types = set(t1.types) + else: + all_types = set([t1]) + if isinstance(t2, UnionNode): + all_types = all_types.union(t2.types) + else: + all_types.add(t2) + done = False + while not done: + for n in all_types: + if n.super_type in all_types: + all_types.remove(n) + break + else: + done = True + return UnionNode._make_union(all_types) + + @staticmethod + def _make_union(all_types): + if len(all_types) == 1: + return next(iter(all_types)) + else: + key = frozenset(all_types) + if key in _all_unions: + u = _all_unions[key] + else: + u = UnionNode(*all_types) + _all_unions[key] = u + return u + + def set_name(self, name): + self.name = name + + @staticmethod + def is_union_type(): + return True + + def write_init(self, out): + fprintf(out, "%s = UnionNode(%s)\n", self.__name__, + ', '.join(t.__name__ for t in self.types)) + if self.name: + fprintf(out, "%s.setname('%s')\n", self.name, self.name) + + def write_fields(self, out): + pass + + def fixup(self): + pass + + def __hash__(self): + return hash(self.types) + + def __eq__(self, other): + assert len(self.types) > 1 + if isinstance(other, UnionNode): + return self.types == other.types + else: + return False + + def __ne__(self, other): + return not self.__eq__(other) + + @property + def __name__(self): + if self.name is None: + names = [ n.__name__ for n in self.types ] + return '_or_'.join(sorted(names)) + else: + return self.name + + @property + def descriptive_name(self): + if self.name is None: + names = [ n.descriptive_name for n in self.types ] + return '_or_'.join(sorted(names)) + else: + return self.name + + def db_name(self): + return '@' + PREFIX + self.__name__ + + def relation_name(self): + return pluralize(PREFIX + self.__name__) + + def ql_name(self): + if self.name is None: + assert len(self.types) > 1 + names = [ n.ql_name() for n in self.types ] + return 'Or'.join(sorted(names)) + else: + + return ''.join(capitalize(part) for part in self.name.split('_')) + + def add_parent(self, p): + for n in self.types: + n.add_parent(p) + + def child_offsets(self, n): + res = set() + for t in self.types: + res = res.union(t.child_offsets(n)) + return res + + def prune(self, node_set): + new_set = self.types.intersection(node_set) + if len(new_set) == len(self.types): + return self + if not new_set: + return None + return UnionNode._make_union(new_set) + +def shorten_name(node): + p = parent_of(node) + if (isinstance(p, UnionNode) and len(p.__name__) > 16 + and len(p.__name__) > len(node.__name__) + 4): + p.set_name(node.__name__ + '_parent') + + +def build_node_relations(nodes): + nodes = set(nodes) + for node in nodes: + node.fixup() + for node in sorted(nodes, key=lambda n : n.__name__): + shorten_name(node) + node_set = set(nodes) + for node in (str, int, float, bytes): + p = parent_of(node) + if p is not None: + node_set.add(p) + for node in nodes: + p = parent_of(node) + if p is not None: + node_set.add(p) + for n in nodes: + sub_types = sorted(n.subclasses, key = lambda x : x._index) + if n.is_case_type(): + for index, item in enumerate(sub_types): + item.index = index + for n in list(nodes): + if not n.parents and n.is_list() and n.name is None: + #Discard lists with no parents and no name as unreachable + node_set.remove(n) + #Prune unused nodes from unions. + node_set = set(node.prune(node_set) for node in node_set) + for node in node_set: + if node in parent_nodes: + parent_nodes[node] = parent_nodes[node].prune(node_set) + for node in node_set: + shorten_name(node) + result_nodes = {} + for n in node_set: + if n: + result_nodes[n.__name__] = n + return result_nodes + +def pluralize(name): + if name[-1] == 's': + if name[-2] in 'aiuos': + return name + 'es' + else: + #Already plural + return name + elif name.endswith('ex'): + return name[:-2] + 'ices' + elif name.endswith('y'): + return name[:-1] + 'ies' + else: + return name + 's' + +def capitalize(name): + 'Unlike the str method capitalize(), leave upper case letters alone' + return name[0].upper() + name[1:] + +def order(node): + if node.is_primitive(): + return 0 + if isinstance(node, ClassNode): + res = 1 + while node.super_type: + node = node.super_type + res += 1 + return res + if isinstance(node, ListNode): + return order(node.item_type) + 1 + else: + assert isinstance(node, UnionNode) + return max(order(t) for t in node.types)+1 diff --git a/python/extractor/semmle/python/__init__.py b/python/extractor/semmle/python/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/semmle/python/ast.py b/python/extractor/semmle/python/ast.py new file mode 100644 index 00000000000..25b93cae72a --- /dev/null +++ b/python/extractor/semmle/python/ast.py @@ -0,0 +1,949 @@ +''' +Abstract syntax tree classes. +This is designed to replace the stdlib ast module. +Unlike the stdlib module, it is version independent. + +The classes in this file are based on the corresponding types in the cpython interpreter, copyright PSF. +''' + + +class AstBase(object): + __slots__ = "lineno", "col_offset", "_end", + + def __repr__(self): + args = ",".join(repr(getattr(self, field, None)) for field in self.__slots__) + return "%s(%s)" % (self.__class__.__name__, args) + +class Class(AstBase): + 'AST node representing a class definition' + + __slots__ = "name", "body", + + def __init__(self, name, body): + self.name = name + self.body = body + + +class Function(AstBase): + 'AST node representing a function definition' + + __slots__ = "is_async", "name", "type_parameters", "args", "vararg", "kwonlyargs", "kwarg", "body", + + def __init__(self, name, type_parameters, args, vararg, kwonlyargs, kwarg, body, is_async=False): + self.name = name + self.type_parameters = type_parameters + self.args = args + self.vararg = vararg + self.kwonlyargs = kwonlyargs + self.kwarg = kwarg + self.body = body + self.is_async = is_async + + +class Module(AstBase): + + def __init__(self, body): + self.body = body + + +class StringPart(AstBase): + '''Implicitly concatenated part of string literal''' + + __slots__ = "prefix", "text", "s", + + def __init__(self, prefix, text, s): + self.prefix = prefix + self.text = text + self.s = s + +class alias(AstBase): + __slots__ = "value", "asname", + + def __init__(self, value, asname): + self.value = value + self.asname = asname + + +class arguments(AstBase): + __slots__ = "defaults", "kw_defaults", "annotations", "varargannotation", "kwargannotation", "kw_annotations", + + def __init__(self, defaults, kw_defaults, annotations, varargannotation, kwargannotation, kw_annotations): + if len(defaults) != len(annotations): + raise AssertionError('len(defaults) != len(annotations)') + if len(kw_defaults) != len(kw_annotations): + raise AssertionError('len(kw_defaults) != len(kw_annotations)') + self.kw_defaults = kw_defaults + self.defaults = defaults + self.annotations = annotations + self.varargannotation = varargannotation + self.kwargannotation = kwargannotation + self.kw_annotations = kw_annotations + + +class boolop(AstBase): + pass + +class cmpop(AstBase): + pass + +class comprehension(AstBase): + __slots__ = "is_async", "target", "iter", "ifs", + + def __init__(self, target, iter, ifs, is_async=False): + self.target = target + self.iter = iter + self.ifs = ifs + self.is_async = is_async + +class dict_item(AstBase): + pass + +class type_parameter(AstBase): + pass + +class expr(AstBase): + __slots__ = "parenthesised", + +class expr_context(AstBase): + pass + +class operator(AstBase): + pass + +class stmt(AstBase): + pass + +class unaryop(AstBase): + pass + +class pattern(AstBase): + __slots__ = "parenthesised", + +class And(boolop): + pass + +class Or(boolop): + pass + +class Eq(cmpop): + pass + +class Gt(cmpop): + pass + +class GtE(cmpop): + pass + +class In(cmpop): + pass + +class Is(cmpop): + pass + +class IsNot(cmpop): + pass + +class Lt(cmpop): + pass + +class LtE(cmpop): + pass + +class NotEq(cmpop): + pass + +class NotIn(cmpop): + pass + +class DictUnpacking(dict_item): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class KeyValuePair(dict_item): + __slots__ = "key", "value", + + def __init__(self, key, value): + self.key = key + self.value = value + + +class keyword(dict_item): + __slots__ = "arg", "value", + + def __init__(self, arg, value): + self.arg = arg + self.value = value + + +class AssignExpr(expr): + __slots__ = "target", "value", + + def __init__(self, value, target): + self.value = value + self.target = target + + +class Attribute(expr): + __slots__ = "value", "attr", "ctx", + + def __init__(self, value, attr, ctx): + self.value = value + self.attr = attr + self.ctx = ctx + + +class Await(expr): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class BinOp(expr): + __slots__ = "left", "op", "right", + + def __init__(self, left, op, right): + self.left = left + self.op = op + self.right = right + + +class BoolOp(expr): + __slots__ = "op", "values", + + def __init__(self, op, values): + self.op = op + self.values = values + + +class Bytes(expr): + __slots__ = "s", "prefix", "implicitly_concatenated_parts", + + def __init__(self, s, prefix, implicitly_concatenated_parts): + self.s = s + self.prefix = prefix + self.implicitly_concatenated_parts = implicitly_concatenated_parts + + +class Call(expr): + __slots__ = "func", "positional_args", "named_args", + + def __init__(self, func, positional_args, named_args): + self.func = func + self.positional_args = positional_args + self.named_args = named_args + + +class ClassExpr(expr): + 'AST node representing class creation' + + __slots__ = "name", "type_parameters", "bases", "keywords", "inner_scope", + + def __init__(self, name, type_parameters, bases, keywords, inner_scope): + self.name = name + self.type_parameters = type_parameters + self.bases = bases + self.keywords = keywords + self.inner_scope = inner_scope + + +class Compare(expr): + __slots__ = "left", "ops", "comparators", + + def __init__(self, left, ops, comparators): + self.left = left + self.ops = ops + self.comparators = comparators + + +class Dict(expr): + __slots__ = "items", + + def __init__(self, items): + self.items = items + + +class DictComp(expr): + __slots__ = "key", "value", "generators", "function", "iterable", + + def __init__(self, key, value, generators): + self.key = key + self.value = value + self.generators = generators + + +class Ellipsis(expr): + pass + +class Filter(expr): + '''Filtered expression in a template''' + + __slots__ = "value", "filter", + + def __init__(self, value, filter): + self.value = value + self.filter = filter + + +class FormattedValue(expr): + __slots__ = "value", "conversion", "format_spec", + + def __init__(self, value, conversion, format_spec): + self.value = value + self.conversion = conversion + self.format_spec = format_spec + + +class FunctionExpr(expr): + + 'AST node representing function creation' + + __slots__ = "name", "args", "returns", "inner_scope", + + def __init__(self, name, args, returns, inner_scope): + self.name = name + self.args = args + self.returns = returns + self.inner_scope = inner_scope + + +class GeneratorExp(expr): + __slots__ = "elt", "generators", "function", "iterable", + + def __init__(self, elt, generators): + self.elt = elt + self.generators = generators + + +class IfExp(expr): + __slots__ = "test", "body", "orelse", + + def __init__(self, test, body, orelse): + self.test = test + self.body = body + self.orelse = orelse + + +class ImportExpr(expr): + '''AST node representing module import + (roughly equivalent to the runtime call to __import__)''' + + __slots__ = "level", "name", "top", + + def __init__(self, level, name, top): + self.level = level + self.name = name + self.top = top + + +class ImportMember(expr): + '''AST node representing 'from import'. Similar to Attribute access, + but during import''' + + __slots__ = "module", "name", + + def __init__(self, module, name): + self.module = module + self.name = name + + +class JoinedStr(expr): + __slots__ = "values", + + def __init__(self, values): + self.values = values + + +class Lambda(expr): + __slots__ = "args", "inner_scope", + + def __init__(self, args, inner_scope): + self.args = args + self.inner_scope = inner_scope + + +class List(expr): + __slots__ = "elts", "ctx", + + def __init__(self, elts, ctx): + self.elts = elts + self.ctx = ctx + + +class ListComp(expr): + __slots__ = "elt", "generators", "function", "iterable", + + def __init__(self, elt, generators): + self.elt = elt + self.generators = generators + +class Match(stmt): + __slots__ = "subject", "cases", + + def __init__(self, subject, cases): + self.subject = subject + self.cases = cases + +class Case(stmt): + __slots__ = "pattern", "guard", "body", + + def __init__(self, pattern, guard, body): + self.pattern = pattern + self.guard = guard + self.body = body + +class Guard(expr): + __slots__ = "test", + + def __init__(self, test): + self.test = test + +class MatchAsPattern(pattern): + __slots__ = "pattern", "alias", + + def __init__(self, pattern, alias): + self.pattern = pattern + self.alias = alias + +class MatchOrPattern(pattern): + __slots__ = "patterns", + + def __init__(self, patterns): + self.patterns = patterns + +class MatchLiteralPattern(pattern): + __slots__ = "literal", + + def __init__(self, literal): + self.literal = literal + +class MatchCapturePattern(pattern): + __slots__ = "variable", + + def __init__(self, variable): + self.variable = variable + +class MatchWildcardPattern(pattern): + __slots__ = [] + +class MatchValuePattern(pattern): + __slots__ = "value", + + def __init__(self, value): + self.value = value + +class MatchSequencePattern(pattern): + __slots__ = "patterns", + + def __init__(self, patterns): + self.patterns = patterns + +class MatchStarPattern(pattern): + __slots__ = "target", + + def __init__(self, target): + self.target = target + +class MatchMappingPattern(pattern): + __slots__ = "mappings", + + def __init__(self, mappings): + self.mappings = mappings + +class MatchDoubleStarPattern(pattern): + __slots__ = "target", + + def __init__(self, target): + self.target = target + +class MatchKeyValuePattern(pattern): + __slots__ = "key", "value", + + def __init__(self, key, value): + self.key = key + self.value = value + +class MatchClassPattern(pattern): + __slots__ = "class_name", "positional", "keyword", + + def __init__(self, class_name, positional, keyword): + self.class_name = class_name + self.positional = positional + self.keyword = keyword + +class MatchKeywordPattern(pattern): + __slots__ = "attribute", "value", + + def __init__(self, attribute, value): + self.attribute = attribute + self.value = value + +class Name(expr): + __slots__ = "variable", "ctx", + + def __init__(self, variable, ctx): + self.variable = variable + self.ctx = ctx + + @property + def id(self): + return self.variable.id + +class Num(expr): + __slots__ = "n", "text", + + def __init__(self, n, text): + self.n = n + self.text = text + +class ParamSpec(type_parameter): + __slots__ = "name", + + def __init__(self, name): + self.name = name + + + +class PlaceHolder(expr): + '''PlaceHolder variable in template ($name)''' + + __slots__ = "variable", "ctx", + + def __init__(self, variable, ctx): + self.variable = variable + self.ctx = ctx + + @property + def id(self): + return self.variable.id + +class Repr(expr): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class Set(expr): + __slots__ = "elts", + + def __init__(self, elts): + self.elts = elts + + +class SetComp(expr): + __slots__ = "elt", "generators", "function", "iterable", + + def __init__(self, elt, generators): + self.elt = elt + self.generators = generators + + +class Slice(expr): + '''AST node for a slice as a subclass of expr to simplify Subscripts''' + + __slots__ = "start", "stop", "step", + + def __init__(self, start, stop, step): + self.start = start + self.stop = stop + self.step = step + + +class Starred(expr): + __slots__ = "value", "ctx", + + def __init__(self, value, ctx): + self.value = value + self.ctx = ctx + + +class Str(expr): + __slots__ = "s", "prefix", "implicitly_concatenated_parts", + + def __init__(self, s, prefix, implicitly_concatenated_parts): + self.s = s + self.prefix = prefix + self.implicitly_concatenated_parts = implicitly_concatenated_parts + + +class Subscript(expr): + __slots__ = "value", "index", "ctx", + + def __init__(self, value, index, ctx): + self.value = value + self.index = index + self.ctx = ctx + + +class TemplateDottedNotation(expr): + '''Unified dot notation expression in a template''' + + __slots__ = "value", "attr", "ctx", + + def __init__(self, value, attr, ctx): + self.value = value + self.attr = attr + self.ctx = ctx + + +class Tuple(expr): + __slots__ = "elts", "ctx", + + def __init__(self, elts, ctx): + self.elts = elts + self.ctx = ctx + + +class TypeAlias(stmt): + __slots__ = "name", "type_parameters", "value", + + def __init__(self, name, type_parameters, value): + self.name = name + self.type_parameters = type_parameters + self.value = value + +class TypeVar(type_parameter): + __slots__ = "name", "bound", + + def __init__(self, name, bound): + self.name = name + self.bound = bound + +class TypeVarTuple(type_parameter): + __slots__ = "name", + + def __init__(self, name): + self.name = name + +class UnaryOp(expr): + __slots__ = "op", "operand", + + def __init__(self, op, operand): + self.op = op + self.operand = operand + + +class Yield(expr): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class YieldFrom(expr): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class SpecialOperation(expr): + __slots__ = "name", "arguments" + + def __init__(self, name, arguments): + self.name = name + self.arguments = arguments + + +class AugLoad(expr_context): + pass + +class AugStore(expr_context): + pass + +class Del(expr_context): + pass + +class Load(expr_context): + pass + +class Param(expr_context): + pass + +class Store(expr_context): + pass + +class Add(operator): + pass + +class BitAnd(operator): + pass + +class BitOr(operator): + pass + +class BitXor(operator): + pass + +class Div(operator): + pass + +class FloorDiv(operator): + pass + +class LShift(operator): + pass + +class MatMult(operator): + pass + +class Mod(operator): + pass + +class Mult(operator): + pass + +class Pow(operator): + pass + +class RShift(operator): + pass + +class Sub(operator): + pass + +class AnnAssign(stmt): + __slots__ = "value", "annotation", "target", + + def __init__(self, value, annotation, target): + self.value = value + self.annotation = annotation + self.target = target + + +class Assert(stmt): + __slots__ = "test", "msg", + + def __init__(self, test, msg): + self.test = test + self.msg = msg + + +class Assign(stmt): + __slots__ = "targets", "value", + + def __init__(self, value, targets): + self.value = value + assert isinstance(targets, list) + self.targets = targets + + +class AugAssign(stmt): + __slots__ = "operation", + + def __init__(self, operation): + self.operation = operation + + +class Break(stmt): + pass + +class Continue(stmt): + pass + +class Delete(stmt): + __slots__ = "targets", + + def __init__(self, targets): + self.targets = targets + + +class ExceptStmt(stmt): + '''AST node for except handler, as a subclass of stmt in order + to better support location and flow control''' + + __slots__ = "type", "name", "body", + + def __init__(self, type, name, body): + self.type = type + self.name = name + self.body = body + + +class ExceptGroupStmt(stmt): + '''AST node for except* handler, as a subclass of stmt in order + to better support location and flow control''' + + __slots__ = "type", "name", "body", + + def __init__(self, type, name, body): + self.type = type + self.name = name + self.body = body + + +class Exec(stmt): + __slots__ = "body", "globals", "locals", + + def __init__(self, body, globals, locals): + self.body = body + self.globals = globals + self.locals = locals + + +class Expr(stmt): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class For(stmt): + __slots__ = "is_async", "target", "iter", "body", "orelse", + + def __init__(self, target, iter, body, orelse, is_async=False): + self.target = target + self.iter = iter + self.body = body + self.orelse = orelse + self.is_async = is_async + + +class Global(stmt): + __slots__ = "names", + + def __init__(self, names): + self.names = names + + +class If(stmt): + __slots__ = "test", "body", "orelse", + + def __init__(self, test, body, orelse): + self.test = test + self.body = body + self.orelse = orelse + + +class Import(stmt): + __slots__ = "names", + + def __init__(self, names): + self.names = names + + +class ImportFrom(stmt): + __slots__ = "module", + + def __init__(self, module): + self.module = module + + +class Nonlocal(stmt): + __slots__ = "names", + + def __init__(self, names): + self.names = names + + +class Pass(stmt): + pass + +class Print(stmt): + __slots__ = "dest", "values", "nl", + + def __init__(self, dest, values, nl): + self.dest = dest + self.values = values + self.nl = nl + + +class Raise(stmt): + __slots__ = "exc", "cause", "type", "inst", "tback", + + +class Return(stmt): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class TemplateWrite(stmt): + '''Template text''' + + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class Try(stmt): + __slots__ = "body", "orelse", "handlers", "finalbody", + + def __init__(self, body, orelse, handlers, finalbody): + self.body = body + self.orelse = orelse + self.handlers = handlers + self.finalbody = finalbody + + +class While(stmt): + __slots__ = "test", "body", "orelse", + + def __init__(self, test, body, orelse): + self.test = test + self.body = body + self.orelse = orelse + + +class With(stmt): + __slots__ = "is_async", "context_expr", "optional_vars", "body", + + def __init__(self, context_expr, optional_vars, body, is_async=False): + self.context_expr = context_expr + self.optional_vars = optional_vars + self.body = body + self.is_async = is_async + + +class Invert(unaryop): + pass + +class Not(unaryop): + pass + +class UAdd(unaryop): + pass + +class USub(unaryop): + pass + + +class Variable(object): + 'A variable' + + def __init__(self, var_id, scope = None): + assert isinstance(var_id, str), type(var_id) + self.id = var_id + self.scope = scope + + def __repr__(self): + return 'Variable(%r, %r)' % (self.id, self.scope) + + def __eq__(self, other): + if type(other) is not Variable: + return False + if self.scope is None or other.scope is None: + raise TypeError("Scope not set") + return self.scope == other.scope and self.id == other.id + + def __ne__(self, other): + return not self == other + + def __hash__(self): + if self.scope is None: + raise TypeError("Scope not set") + return 391246 ^ hash(self.id) ^ hash(self.scope) + + def is_global(self): + return isinstance(self.scope, Module) + +def iter_fields(node): + for name in node.__slots__: + if hasattr(node, name): + yield name, getattr(node, name) diff --git a/python/extractor/semmle/python/extractor.py b/python/extractor/semmle/python/extractor.py new file mode 100644 index 00000000000..cafb7ff4ec0 --- /dev/null +++ b/python/extractor/semmle/python/extractor.py @@ -0,0 +1,284 @@ +import sys +import os +import inspect +import pkgutil +from semmle.python import ast + +from semmle.python.passes.exports import ExportsPass +from semmle.python.passes.lexical import LexicalPass +from semmle.python.passes.flow import FlowPass +from semmle.python.passes.ast_pass import ASTPass +from semmle.python.passes.objects import ObjectPass +from semmle.util import VERSION, uuid, get_analysis_version, get_analysis_major_version +from semmle.util import makedirs, get_source_file_tag, TrapWriter, base64digest +from semmle.cache import Cache +from semmle.logging import WARN, syntax_error_message, Logger +from semmle.profiling import timers + +UTRAP_KEY = 'utrap%s' % VERSION + +__all__ = [ 'Extractor', 'CachingExtractor' ] + +FLAG_SAVE_TYPES = float, complex, bool, int, bytes, str + +class Extractor(object): + '''The extractor controls the execution of the all the + specialised passes''' + + def __init__(self, trap_folder, src_archive, options, logger: Logger, diagnostics_writer): + assert trap_folder + self.trap_folder = trap_folder + self.src_archive = src_archive + self.object_pass = ObjectPass() + self.passes = [ + ASTPass(), + ExportsPass(), + FlowPass(options.split, options.prune, options.unroll, logger) + ] + self.lexical = LexicalPass() + self.files = {} + self.options = options + self.handle_syntax_errors = not options.no_syntax_errors + self.logger = logger + self.diagnostics_writer = diagnostics_writer + + def _handle_syntax_error(self, module, ex): + # Write out diagnostics for the syntax error. + error = syntax_error_message(ex, module) + self.diagnostics_writer.write(error) + + # Emit trap for the syntax error + self.logger.debug("Emitting trap for syntax error in %s", module.path) + writer = TrapWriter() + module_id = writer.get_node_id(module) + # Report syntax error as an alert. + # Ensure line and col are ints (not None). + line = ex.lineno if ex.lineno else 0 + if line > len(module.lines): + line = len(module.lines) + col = len(module.lines[-1])-1 + else: + col = ex.offset if ex.offset else 0 + loc_id = writer.get_unique_id() + writer.write_tuple(u'locations_ast', 'rrdddd', + loc_id, module_id, 0, 0, 0, 0) + syntax_id = u'syntax%d:%d' % (line, col) + writer.write_tuple(u'locations_ast', 'nrdddd', + syntax_id, module_id, line, col+1, line, col+1) + writer.write_tuple(u'py_syntax_error_versioned', 'nss', syntax_id, ex.msg, get_analysis_major_version()) + trap = writer.get_compressed() + self.trap_folder.write_trap("syntax-error", module.path, trap) + #Create an AST equivalent to an empty file, so that the other passes produce consistent output. + return ast.Module([]) + + def _extract_trap_file(self, ast, comments, path): + writer = TrapWriter() + file_tag = get_source_file_tag(self.src_archive.get_virtual_path(path)) + writer.write_tuple(u'py_Modules', 'g', ast.trap_name) + writer.write_tuple(u'py_module_path', 'gg', ast.trap_name, file_tag) + try: + for ex in self.passes: + with timers[ex.name]: + if isinstance(ex, FlowPass): + ex.set_filename(path) + ex.extract(ast, writer) + with timers['lexical']: + self.lexical.extract(ast, comments, writer) + with timers['object']: + self.object_pass.extract(ast, path, writer) + except Exception as ex: + self.logger.error("Exception extracting module %s: %s", path, ex) + self.logger.traceback(WARN) + return None + return writer.get_compressed() + + def process_source_module(self, module): + '''Process a Python source module. Checks that module has valid syntax, + then passes passes ast, source, etc to `process_module` + ''' + try: + #Ensure that module does not have invalid syntax before extracting it. + ast = module.ast + except SyntaxError as ex: + self.logger.debug("handle syntax errors is %s", self.handle_syntax_errors) + if self.handle_syntax_errors: + ast = self._handle_syntax_error(module, ex) + else: + return None + ast.name = module.name + ast.kind = module.kind + ast.trap_name = module.trap_name + return self.process_module(ast, module.trap_name, module.bytes_source, + module.path, module.comments) + + def process_module(self, ast, module_tag, bytes_source, path, comments): + 'Process a module, generating the trap file for that module' + self.logger.debug(u"Populating trap file for %s", path) + ast.trap_name = module_tag + trap = self._extract_trap_file(ast, comments, path) + if trap is None: + return None + with timers['trap']: + self.trap_folder.write_trap("python", path, trap) + try: + with timers['archive']: + self.copy_source(bytes_source, module_tag, path) + except Exception: + import traceback + traceback.print_exc() + return trap + + def copy_source(self, bytes_source, module_tag, path): + if bytes_source is None: + return + self.files[module_tag] = self.src_archive.get_virtual_path(path) + self.src_archive.write(path, bytes_source) + + def write_interpreter_data(self, options): + '''Write interpreter data, such as version numbers and flags.''' + + def write_flag(name, value): + writer.write_tuple(u'py_flags_versioned', 'uus', name, value, get_analysis_major_version()) + + def write_flags(obj, prefix): + pre = prefix + u"." + for name, value in inspect.getmembers(obj): + if name[0] == "_": + continue + if type(value) in FLAG_SAVE_TYPES: + write_flag(pre + name, str(value)) + + writer = TrapWriter() + for index, name in enumerate((u'major', u'minor', u'micro', u'releaselevel', u'serial')): + writer.write_tuple(u'py_flags_versioned', 'sss', u'extractor_python_version.' + name, str(sys.version_info[index]), get_analysis_major_version()) + write_flags(sys.flags, u'flags') + write_flags(sys.float_info, u'float') + write_flags(self.options, u'options') + write_flag(u'sys.prefix', sys.prefix) + path = os.pathsep.join(os.path.abspath(p) for p in options.sys_path) + write_flag(u'sys.path', path) + if options.path is None: + path = '' + else: + path = os.pathsep.join(self.src_archive.get_virtual_path(p) for p in options.path) + if options.language_version: + write_flag(u'language.version', options.language_version[-1]) + else: + write_flag(u'language.version', get_analysis_version()) + write_flag(u'extractor.path', path) + write_flag(u'sys.platform', sys.platform) + write_flag(u'os.sep', os.sep) + write_flag(u'os.pathsep', os.pathsep) + write_flag(u'extractor.version', VERSION) + if options.context_cost is not None: + write_flag(u'context.cost', options.context_cost) + self.trap_folder.write_trap("flags", "$flags", writer.get_compressed()) + if get_analysis_major_version() == 2: + # Copy the pre-extracted builtins trap + builtins_trap_data = pkgutil.get_data('semmle.data', 'interpreter2.trap') + self.trap_folder.write_trap("interpreter", '$interpreter2', builtins_trap_data, extension=".trap") + else: + writer = TrapWriter() + self.object_pass.write_special_objects(writer) + self.trap_folder.write_trap("interpreter", '$interpreter3', writer.get_compressed()) + # Copy stdlib trap + if get_analysis_major_version() == 2: + stdlib_trap_name = '$stdlib_27.trap' + else: + stdlib_trap_name = '$stdlib_33.trap' + stdlib_trap_data = pkgutil.get_data('semmle.data', stdlib_trap_name) + self.trap_folder.write_trap("stdlib", stdlib_trap_name[:-5], stdlib_trap_data, extension=".trap") + + @staticmethod + def from_options(options, trap_dir, archive, logger: Logger, diagnostics_writer): + '''Convenience method to create extractor from options''' + try: + trap_copy_dir = options.trap_cache + caching_extractor = CachingExtractor(trap_copy_dir, options, logger) + except Exception as ex: + if options.verbose and trap_copy_dir is not None: + print ("Failed to create caching extractor: " + str(ex)) + caching_extractor = None + worker = Extractor(trap_dir, archive, options, logger, diagnostics_writer) + if caching_extractor: + caching_extractor.set_worker(worker) + return caching_extractor + else: + return worker + + def stop(self): + pass + + def close(self): + 'close() must be called, or some information will be not be written' + #Add name tag to file name, so that multiple extractors do not overwrite each other + if self.files: + trapwriter = TrapWriter() + for _, filepath in self.files.items(): + trapwriter.write_file(filepath) + self.trap_folder.write_trap('folders', uuid('python') + '/$files', trapwriter.get_compressed()) + self.files = set() + for name, timer in sorted(timers.items()): + self.logger.debug("Total time for pass '%s': %0.0fms", name, timer.elapsed) + + +def hash_combine(x, y): + return base64digest(x + u":" + y) + + +class CachingExtractor(object): + '''The caching extractor has a two stage initialization process. + After creating the extractor (which will check that the cachedir is valid) + set_worker(worker) must be called before the CachingExtractor is valid''' + + def __init__(self, cachedir, options, logger: Logger): + if cachedir is None: + raise IOError("No cache directory") + makedirs(cachedir) + self.worker = None + self.cache = Cache.for_directory(cachedir, options.verbose) + self.logger = logger + self.split = options.split + + def set_worker(self, worker): + self.worker = worker + + def get_cache_key(self, module): + key = hash_combine(module.path, module.source) + if not self.split: + #Use different key, as not splitting will modify the trap file. + key = hash_combine(UTRAP_KEY, key) + return hash_combine(key, module.source) + + def process_source_module(self, module): + '''Process a Python source module. First look up trap file in cache. + In no cached trap file is found, then delegate to normal extractor. + ''' + if self.worker is None: + raise Exception("worker is not set") + key = self.get_cache_key(module) + trap = self.cache.get(key) + if trap is None: + trap = self.worker.process_source_module(module) + if trap is not None: + self.cache.set(key, trap) + else: + self.logger.debug(u"Found cached trap file for %s", module.path) + self.worker.trap_folder.write_trap("python", module.path, trap) + try: + self.worker.copy_source(module.bytes_source, module.trap_name, module.path) + except Exception: + self.logger.traceback(WARN) + return trap + + def process_module(self, ast, module_tag, source_code, path, comments): + self.worker.process_module(ast, module_tag, source_code, path, comments) + + def close(self): + self.worker.close() + + def write_interpreter_data(self, sys_path): + self.worker.write_interpreter_data(sys_path) + + def stop(self): + self.worker.stop() diff --git a/python/extractor/semmle/python/finder.py b/python/extractor/semmle/python/finder.py new file mode 100644 index 00000000000..632ef920d05 --- /dev/null +++ b/python/extractor/semmle/python/finder.py @@ -0,0 +1,377 @@ +''' +Classes and functions for converting module names into paths and Extractables. +Implements standard Python import semantics, and is designed to be extensible +to handle additional features like stub and template files. +''' + +import sys +import imp +import os.path +from semmle.util import FileExtractable, FolderExtractable, BuiltinModuleExtractable, PY_EXTENSIONS, get_analysis_major_version +from semmle.python.modules import PythonSourceModule, is_script + +class Module(object): + '''A module. Modules are approximations + to Python module objects and are used for + analyzing imports.''' + + IS_PACKAGE = False + path = None + respect_init = True + + def __init__(self, name, package): + self.name = name + self.package = package + + def get_sub_module(self, name): + '''gets the (immediate) sub-module with the given name''' + raise NotImplementedError() + + def all_sub_modules(self): + '''returns an iterable of all the sub-modules of this module''' + raise NotImplementedError() + + def get_extractable(self): + '''gets the Extractable for this module''' + raise NotImplementedError() + + def find(self, name): + '''Returns the named sub-module of this module if this module + is a package, otherwise returns `None`''' + if '.' in name: + top, rest = name.split(".", 1) + pkg = self.get_sub_module(top) + return pkg.find(rest) if pkg else None + else: + return self.get_sub_module(name) + + def is_package(self): + return self.IS_PACKAGE + +class PyModule(Module): + ' A Python source code module' + + def __init__(self, name, package, path): + Module.__init__(self, name, package) + assert isinstance(path, str) + self.path = path + + def get_sub_module(self, name): + return None + + def all_sub_modules(self): + return () + + def get_extractable(self): + return FileExtractable(self.path) + + def load(self, logger=None): + return PythonSourceModule(self.name, self.path, logger=logger) + + def __str__(self): + return "Python module at %s" % self.path + +class BuiltinModule(Module): + ' A built-in module' + + def __init__(self, name, package): + Module.__init__(self, name, package) + + def get_sub_module(self, name): + return None + + def all_sub_modules(self): + return () + + def get_extractable(self): + return BuiltinModuleExtractable(self.name) + + def __str__(self): + return "Builtin module %s" % self.name + +class FilePackage(Module): + ' A normal package. That is a folder with an __init__.py' + + IS_PACKAGE = True + + def __init__(self, name, package, path, respect_init=True): + Module.__init__(self, name, package) + assert isinstance(path, str), type(path) + self.path = path + self.respect_init = respect_init + + def get_sub_module(self, name): + modname = self.name + "." + name if self.name else None + basepath = os.path.join(self.path, name) + return _from_base(modname, basepath, self, self.respect_init) + + def all_sub_modules(self): + return _from_folder(self.name, self.path, self, self.respect_init) + + def load(self): + return None + + def get_extractable(self): + return FolderExtractable(self.path) + + def __str__(self): + return "Package at %s" % self.path + +class PthPackage(Module): + "A built-in package object generated from a '.pth' file" + + IS_PACKAGE = True + + def __init__(self, name, package, search_path): + Module.__init__(self, name, package) + self.search_path = search_path + + def get_sub_module(self, name): + mname = self.name + "." + name + for path in self.search_path: + mod = _from_base(mname, os.path.join(path, name), self) + if mod is not None: + return mod + return None + + def all_sub_modules(self): + for path in self.search_path: + for mod in _from_folder(self.name, path, self): + yield mod + + def load(self): + return None + + def __str__(self): + return "Builtin package (.pth) %s %s" % (self.name, self.search_path) + + def get_extractable(self): + return None + +#Helper functions + +def _from_base(name, basepath, pkg, respect_init=True): + if os.path.isdir(basepath): + if os.path.exists(os.path.join(basepath, "__init__.py")) or not respect_init: + return FilePackage(name, pkg, basepath, respect_init) + else: + return None + for ext in PY_EXTENSIONS: + filepath = basepath + ext + if os.path.isfile(filepath): + return PyModule(name, pkg, filepath) + return None + +def _from_folder(name, path, pkg, respect_init=True): + for file in os.listdir(path): + fullpath = os.path.join(path, file) + if os.path.isdir(fullpath): + if os.path.exists(os.path.join(fullpath, "__init__.py")) or not respect_init: + yield FilePackage(name + "." + file if name else None, pkg, fullpath, respect_init) + base, ext = os.path.splitext(file) + if ext not in PY_EXTENSIONS: + continue + if os.path.isfile(fullpath): + yield PyModule(name + "." + base if name else None, pkg, fullpath) + +class AbstractFinder(object): + + def find(self, mod_name): + '''Find an extractable object given a module name''' + if '.' in mod_name: + top, rest = mod_name.split(".", 1) + pkg = self.find_top(top) + return pkg.find(rest) if pkg else None + else: + return self.find_top(mod_name) + + def find_top(self, name): + '''Find module or package object given a simple (dot-less) name''' + raise NotImplementedError() + + def name_from_path(self, path, extensions): + '''Find module or package object given a path''' + raise NotImplementedError() + +class PyFinder(AbstractFinder): + + __slots__ = [ 'path', 'respect_init', 'logger' ] + + def __init__(self, path, respect_init, logger): + assert isinstance(path, str), path + self.path = os.path.abspath(path) + self.respect_init = respect_init + self.logger = logger + + def find_top(self, mod_name): + basepath = os.path.join(self.path, mod_name) + return _from_base(mod_name, basepath, None, self.respect_init) + + def name_from_path(self, path, extensions): + rel_path = _relative_subpath(path, self.path) + if rel_path is None: + return None + base, ext = os.path.splitext(rel_path) + if ext and ext not in extensions: + return None + return ".".join(base.split(os.path.sep)) + +def _relative_subpath(subpath, root): + 'Returns the relative path if `subpath` is within `root` or `None` otherwise' + try: + relpath = os.path.relpath(subpath, root) + except ValueError: + #No relative path possible + return None + if relpath.startswith(os.pardir): + #Not in root: + return None + return relpath + +class BuiltinFinder(AbstractFinder): + '''Finder for builtin modules that are already present in the VM + or can be guaranteed to load successfully''' + + def __init__(self, logger): + self.modules = {} + for name, module in sys.modules.items(): + self.modules[name] = module + try: + self.dynload_path = os.path.dirname(imp.find_module("_json")[1]) + except Exception: + if os.name != "nt": + logger.warning("Failed to find dynload path") + self.dynload_path = None + + def builtin_module(self, name): + if "." in name: + pname, name = name.rsplit(".", 1) + return BuiltinModule(name, self.builtin_module(pname)) + return BuiltinModule(name, None) + + def find(self, mod_name): + mod = super(BuiltinFinder, self).find(mod_name) + if mod is not None: + return mod + #Use `imp` module to find module + try: + _, filepath, mod_t = imp.find_module(mod_name) + except ImportError: + return None + #Accept builtin dynamically loaded modules like _ctypes or _json + if filepath and os.path.dirname(filepath) == self.dynload_path: + return BuiltinModule(mod_name, None) + return None + + def find_top(self, mod_name): + if mod_name in self.modules: + mod = self.modules[mod_name] + if hasattr(mod, "__file__"): + return None + if hasattr(mod, "__path__"): + return PthPackage(mod_name, None, mod.__path__) + return BuiltinModule(mod_name, None) + if mod_name in sys.builtin_module_names: + return BuiltinModule(mod_name, None) + return None + + def name_from_path(self, path, extensions): + return None + +#Stub file handling + +class StubFinder(PyFinder): + + def __init__(self, logger): + try: + tools = os.environ['ODASA_TOOLS'] + except KeyError: + tools = sys.path[1] + logger.debug("StubFinder: can't find ODASA_TOOLS, using '%s' instead", tools) + path = os.path.join(tools, "data", "python", "stubs") + super(StubFinder, self).__init__(path, True, logger) + + +def _finders_for_path(path, respect_init, logger): + finders = [ StubFinder(logger) ] + for p in path: + if p: + finders.append(PyFinder(p, respect_init, logger)) + finders.append(BuiltinFinder(logger)) + return finders + + +def finders_from_options_and_env(options, logger): + '''Return a list of finders from the given command line options''' + if options.path: + path = options.path + options.sys_path + else: + path = options.sys_path + path = [os.path.abspath(p) for p in path] + if options.exclude: + exclude = set(options.exclude) + trimmed_path = [] + for p in path: + for x in exclude: + if p.startswith(x): + break + else: + trimmed_path.append(p) + path = trimmed_path + logger.debug("Finder path: %s", path) + logger.debug("sys path: %s", sys.path) + return _finders_for_path(path, options.respect_init, logger) + + +class Finder(object): + + def __init__(self, finders, options, logger): + self.finders = finders + self.path_map = {} + self.logger = logger + self.respect_init = options.respect_init + + def find(self, mod_name): + for finder in self.finders: + mod = finder.find(mod_name) + if mod is not None: + return mod + self.logger.debug("Cannot find module '%s'", mod_name) + return None + + @staticmethod + def from_options_and_env(options, logger): + return Finder(finders_from_options_and_env(options, logger), options, logger) + + def from_extractable(self, unit): + if isinstance(unit, FolderExtractable) or isinstance(unit, FileExtractable): + return self.from_path(unit.path) + return None + + def from_path(self, path, extensions=PY_EXTENSIONS): + if path in self.path_map: + return self.path_map[path] + if not path or path == "/": + return None + is_python_2 = (get_analysis_major_version() == 2) + if os.path.isdir(path) and not os.path.exists(os.path.join(path, "__init__.py")) and (self.respect_init or not is_python_2): + return None + pkg = self.from_path(os.path.dirname(path)) + mod = None + if os.path.isdir(path): + mod = FilePackage(None, pkg, path) + if os.path.isfile(path): + base, ext = os.path.splitext(path) + if ext in extensions: + mod = PyModule(None, pkg, path) + if is_script(path): + mod = PyModule(None, None, path) + self.path_map[path] = mod + return mod + + def name_from_path(self, path, extensions=PY_EXTENSIONS): + for finder in self.finders: + name = finder.name_from_path(path, extensions) + if name is not None: + return name + return None diff --git a/python/extractor/semmle/python/imports.py b/python/extractor/semmle/python/imports.py new file mode 100644 index 00000000000..851193e89f5 --- /dev/null +++ b/python/extractor/semmle/python/imports.py @@ -0,0 +1,256 @@ +import sys +from semmle.python import ast + +from collections import namedtuple + +from semmle.util import VERSION, get_analysis_major_version +from semmle.cache import Cache +from semmle.logging import INFO + +#Maintain distinct version strings for distinct versions of Python +IMPORTS_KEY = 'import%s_%x%x' % (VERSION, sys.version_info[0], sys.version_info[1]) + +import pickle + +__all__ = [ 'CachingModuleImporter', 'ModuleImporter', 'importer_from_options' ] + +ImportStar = namedtuple('ImportStar', 'level module') +ImportExpr = namedtuple('ImportExpr', 'level module') +ImportMember = namedtuple('ImportMember', 'level module name') + +def safe_string(txt): + try: + if isinstance(txt, bytes): + try: + return txt.decode(sys.getfilesystemencoding(), errors="replace") + except Exception: + return txt.decode("latin-1") + else: + return str(txt) + except Exception: + return u"?" + +class SemmleImportError(Exception): + + def __init__(self, module_name, *reasons): + reason_txt = u"".join(safe_string(reason) for reason in reasons) + module_name = safe_string(module_name) + if reason_txt: + message = u"Import of %s failed: %s.\n" % (module_name, reason_txt) + else: + message = u"Import of %s failed.\n" % module_name + Exception.__init__(self, message) + + def write(self, out=sys.stdout): + out.write(self.args[0]) + + +class CachingModuleImporter(object): + + def __init__(self, cachedir, finder, logger): + self.worker = ModuleImporter(finder, logger) + if cachedir is None: + raise IOError("No cache directory") + self.cache = Cache.for_directory(cachedir, logger) + self.logger = logger + + def get_imports(self, module, loaded_module): + import_nodes = self.get_import_nodes(loaded_module) + return self.worker.parse_imports(module, import_nodes) + + def get_import_nodes(self, loaded_module): + key = loaded_module.get_hash_key(IMPORTS_KEY) + if key is None: + return self.worker.get_import_nodes(loaded_module) + imports = self.cache.get(key) + #Unpickle the data + if imports is not None: + try: + imports = pickle.loads(imports) + except Exception: + self.logger.debug("Failed to unpickle imports for %s", loaded_module.path) + imports = None + if imports is None: + imports = self.worker.get_import_nodes(loaded_module) + try: + data = pickle.dumps(imports) + self.cache.set(key, data) + except Exception as ex: + # Shouldn't really fail, but carry on anyway + self.logger.debug("Failed to save pickled imports to cache for %s: %s", loaded_module.path, ex) + else: + self.logger.debug("Cached imports file found for %s", loaded_module.path) + return imports + +class ModuleImporter(object): + 'Discovers and records which modules import which other modules' + + def __init__(self, finder, logger): + + self.finder = finder + self.logger = logger + self.failures = {} + + def get_imports(self, module, loaded_module): + import_nodes = self.get_import_nodes(loaded_module) + return self.parse_imports(module, import_nodes) + + def get_import_nodes(self, loaded_module): + 'Return list of AST nodes representing imports' + try: + return imports_from_ast(loaded_module.py_ast) + except Exception as ex: + if isinstance(ex, SyntaxError): + # Example: `Syntax Error (line 123) in /home/.../file.py` + self.logger.warning("%s in %s", ex, loaded_module.path) + # no need to show traceback, it's not an internal bug + else: + self.logger.warning("Failed to analyse imports of %s : %s", loaded_module.path, ex) + self.logger.traceback(INFO) + return [] + + def _relative_import(self, module, level, mod_name, report_failure = True): + for i in range(level): + parent = module.package + if parent is None: + relative_name = level * u'.' + mod_name + if relative_name not in self.failures: + if report_failure: + self.logger.warning("Failed to find %s, no parent package of %s", relative_name, module) + self.failures[relative_name] = str(module) + return None + module = parent + res = module + if mod_name: + res = res.get_sub_module(mod_name) + if res is None and report_failure: + relative_name = level * '.' + mod_name + if relative_name not in self.failures: + self.logger.warning("Failed to find %s, %s has no module %s", relative_name, module, mod_name) + self.failures[relative_name] = str(module) + return res + + def _absolute_import(self, module, mod_name): + try: + mod = self.finder.find(mod_name) + except SemmleImportError as ex: + if mod_name not in self.failures: + self.logger.warning("%s", ex) + self.failures[mod_name] = str(module) + return None + return mod + + def parse_imports(self, module, import_nodes): + imports = set() + #If an imported module is a package, then yield its __init__ module as well + for imported in self._parse_imports_no_init(module, import_nodes): + if imported not in imports: + imports.add(imported) + assert imported is not None + yield imported + if not imported.is_package(): + continue + init = imported.get_sub_module(u"__init__") + if init is not None and init not in imports: + yield init + + def _parse_imports_no_init(self, module, import_nodes): + assert not module.is_package() + for node in import_nodes: + if node.module is None: + top = '' + parts = [] + else: + parts = node.module.split('.') + top, parts = parts[0], parts[1:] + if node.level <= 0: + if get_analysis_major_version() < 3: + #Attempt relative import with level 1 + imported = self._relative_import(module, 1, top, False) + if imported is None: + imported = self._absolute_import(module, top) + else: + imported = self._absolute_import(module, top) + else: + imported = self._relative_import(module, node.level, top) + if imported is None: + self.logger.debug("Unable to resolve import: %s", top) + continue + yield imported + for p in parts: + inner = imported.get_sub_module(p) + if inner is None: + self.logger.debug("Unable to resolve import: %s", p) + break + imported = inner + yield imported + if isinstance(node, ImportStar): + self.logger.debug("Importing all sub modules of %s", imported) + #If import module is a package then yield all sub_modules. + for mod in imported.all_sub_modules(): + yield mod + elif isinstance(node, ImportMember): + mod = imported.get_sub_module(node.name) + if mod is not None: + self.logger.debug("Unable to resolve import: %s", node.name) + yield mod + +def imports_from_ast(the_ast): + def walk(node, in_function, in_name_main): + if isinstance(node, ast.Module): + for import_node in walk(node.body, in_function, in_name_main): + yield import_node + elif isinstance(node, ast.ImportFrom): + yield ImportStar(node.module.level, node.module.name) + elif isinstance(node, ast.Import): + for alias in node.names: + imp = alias.value + if isinstance(imp, ast.ImportExpr): + yield ImportExpr(imp.level, imp.name) + else: + assert isinstance(imp, ast.ImportMember) + yield ImportMember(imp.module.level, imp.module.name, imp.name) + elif isinstance(node, ast.FunctionExpr): + for _, child in ast.iter_fields(node.inner_scope): + for import_node in walk(child, True, in_name_main): + yield import_node + elif isinstance(node, ast.Call): + # Might be a decorator + for import_node in walk(node.positional_args, in_function, in_name_main): + yield import_node + elif isinstance(node, list): + for n in node: + for import_node in walk(n, in_function, in_name_main): + yield import_node + elif isinstance(node, ast.stmt): + name_eq_main = is_name_eq_main(node) + for _, child in ast.iter_fields(node): + for import_node in walk(child, in_function, name_eq_main or in_name_main): + yield import_node + return list(walk(the_ast, False, False)) + +def name_from_expr(expr): + if isinstance(expr, ast.Name): + return expr.id + if isinstance(expr, ast.Attribute): + return name_from_expr(expr.value) + "." + expr.attr + raise ValueError("%s is not a name" % expr) + +def is_name_eq_main(node): + if not isinstance(node, ast.If): + return False + try: + lhs = node.test.left + rhs = node.test.comparators[0] + return rhs.s == "__main__" and lhs.id == "__name__" + except Exception: + return False + +def importer_from_options(options, finder, logger): + try: + importer = CachingModuleImporter(options.trap_cache, finder, logger) + except Exception as ex: + if options.trap_cache is not None: + logger.warn("Failed to create caching importer: %s", ex) + importer = ModuleImporter(finder, logger) + return importer diff --git a/python/extractor/semmle/python/master.py b/python/extractor/semmle/python/master.py new file mode 100755 index 00000000000..200340061fc --- /dev/null +++ b/python/extractor/semmle/python/master.py @@ -0,0 +1,504 @@ +#Much of the information in this file is hardcoded into parser. +#Modify with care and test well. +#It should be relatively safe to add fields. + + +from semmle.python.AstMeta import Node, PrimitiveNode, ClassNode, UnionNode, ListNode +from semmle.python.AstMeta import build_node_relations as _build_node_relations + +string = PrimitiveNode('str', 'string', 'varchar(1)', 'string') +bytes_ = PrimitiveNode('bytes', 'string', 'varchar(1)') + +location = PrimitiveNode('location', '@location', 'unique int') +variable = PrimitiveNode('variable', '@py_variable', 'int') + +int_ = PrimitiveNode('int', 'int', 'int') +bool_ = PrimitiveNode('bool', 'boolean', 'boolean') +number = PrimitiveNode('number', 'string', 'varchar(1)') + +Module = ClassNode('Module') +Class = ClassNode('Class') +Function = ClassNode('Function') + +alias = ClassNode('alias') +arguments = ClassNode('arguments', None, 'parameters definition') +boolop = ClassNode('boolop', None, 'boolean operator') +cmpop = ClassNode('cmpop', None, 'comparison operator') +comprehension = ClassNode('comprehension') +comprehension.field('location', location) +expr = ClassNode('expr', None, 'expression') +expr.field('location', location) +expr.field('parenthesised', bool_, 'parenthesised') +expr_context = ClassNode('expr_context', None, 'expression context') +operator = ClassNode('operator') +stmt = ClassNode('stmt', None, 'statement') +stmt.field('location', location) +unaryop = ClassNode('unaryop', None, 'unary operation') +pattern = ClassNode('pattern') +pattern.field('location', location) +pattern.field('parenthesised', bool_, 'parenthesised') +Add = ClassNode('Add', operator, '+') +And = ClassNode('And', boolop, 'and') +Assert = ClassNode('Assert', stmt) +Assign = ClassNode('Assign', stmt, 'assignment') +Attribute = ClassNode('Attribute', expr) +AugAssign = ClassNode('AugAssign', stmt, 'augmented assignment statement') +AugLoad = ClassNode('AugLoad', expr_context, 'augmented-load') +AugStore = ClassNode('AugStore', expr_context, 'augmented-store') +BinOp = ClassNode('BinOp', expr, 'binary') +#Choose a name more consistent with other Exprs. +BinOp.set_name("BinaryExpr") +BitAnd = ClassNode('BitAnd', operator, '&') +BitOr = ClassNode('BitOr', operator, '|') +BitXor = ClassNode('BitXor', operator, '^') +BoolOp = ClassNode('BoolOp', expr, 'boolean') +#Avoid name clash with boolop +BoolOp.set_name('BoolExpr') +Break = ClassNode('Break', stmt) +Bytes = ClassNode('Bytes', expr) +Call = ClassNode('Call', expr) +ClassExpr = ClassNode('ClassExpr', expr, 'class definition') +Compare = ClassNode('Compare', expr) +Continue = ClassNode('Continue', stmt) +Del = ClassNode('Del', expr_context, 'deletion') +Delete = ClassNode('Delete', stmt) +Dict = ClassNode('Dict', expr, 'dictionary') +DictComp = ClassNode('DictComp', expr, 'dictionary comprehension') +Div = ClassNode('Div', operator, '/') +Ellipsis = ClassNode('Ellipsis', expr) +Eq = ClassNode('Eq', cmpop, '==') +ExceptStmt = ClassNode('ExceptStmt', stmt, 'except block') +ExceptGroupStmt = ClassNode('ExceptGroupStmt', stmt, 'except group block') +Exec = ClassNode('Exec', stmt) +Expr_stmt = ClassNode('Expr', stmt) +Expr_stmt.set_name('Expr_stmt') +FloorDiv = ClassNode('FloorDiv', operator, '//') +For = ClassNode('For', stmt) +FunctionExpr = ClassNode('FunctionExpr', expr, 'function definition') +GeneratorExp = ClassNode('GeneratorExp', expr, 'generator') +Global = ClassNode('Global', stmt) +Gt = ClassNode('Gt', cmpop, '>') +GtE = ClassNode('GtE', cmpop, '>=') +If = ClassNode('If', stmt) +IfExp = ClassNode('IfExp', expr, 'if') +Import = ClassNode('Import', stmt) +ImportExpr = ClassNode('ImportExpr', expr, 'import') +ImportMember = ClassNode('ImportMember', expr, 'from import') +ImportFrom = ClassNode('ImportFrom', stmt, 'import * statement') +In = ClassNode('In', cmpop) +Invert = ClassNode('Invert', unaryop, '~') +Is = ClassNode('Is', cmpop) +IsNot = ClassNode('IsNot', cmpop, 'is not') +LShift = ClassNode('LShift', operator, '<<') +Lambda = ClassNode('Lambda', expr) +List = ClassNode('List', expr) +ListComp = ClassNode('ListComp', expr, 'list comprehension') +Load = ClassNode('Load', expr_context) +Lt = ClassNode('Lt', cmpop, '<') +LtE = ClassNode('LtE', cmpop, '<=') +Match = ClassNode('Match', stmt) +#Avoid name clash with regex match +Match.set_name('MatchStmt') +Case = ClassNode('Case', stmt) +Guard = ClassNode('Guard', expr) +MatchAsPattern = ClassNode('MatchAsPattern', pattern) +MatchOrPattern = ClassNode('MatchOrPattern', pattern) +MatchLiteralPattern = ClassNode('MatchLiteralPattern', pattern) +MatchCapturePattern = ClassNode('MatchCapturePattern', pattern) +MatchWildcardPattern = ClassNode('MatchWildcardPattern', pattern) +MatchValuePattern = ClassNode('MatchValuePattern', pattern) +MatchSequencePattern = ClassNode('MatchSequencePattern', pattern) +MatchStarPattern = ClassNode('MatchStarPattern', pattern) +MatchMappingPattern = ClassNode('MatchMappingPattern', pattern) +MatchDoubleStarPattern = ClassNode('MatchDoubleStarPattern', pattern) +MatchKeyValuePattern = ClassNode('MatchKeyValuePattern', pattern) +MatchClassPattern = ClassNode('MatchClassPattern', pattern) +MatchKeywordPattern = ClassNode('MatchKeywordPattern', pattern) +Mod = ClassNode('Mod', operator, '%') +Mult = ClassNode('Mult', operator, '*') +Name = ClassNode('Name', expr) +Nonlocal = ClassNode('Nonlocal', stmt) +Not = ClassNode('Not', unaryop) +NotEq = ClassNode('NotEq', cmpop, '!=') +NotIn = ClassNode('NotIn', cmpop, 'not in') +Num = ClassNode('Num', expr, 'numeric literal') +Or = ClassNode('Or', boolop) +Param = ClassNode('Param', expr_context, 'parameter') +Pass = ClassNode('Pass', stmt) +Pow = ClassNode('Pow', operator, '**') +Print = ClassNode('Print', stmt) +RShift = ClassNode('RShift', operator, '>>') +Raise = ClassNode('Raise', stmt) +Repr = ClassNode('Repr', expr, 'backtick') +Return = ClassNode('Return', stmt) +Set = ClassNode('Set', expr) +SetComp = ClassNode('SetComp', expr, 'set comprehension') +#Add $ to name to prevent doc-gen adding sub type name +Slice = ClassNode('Slice', expr, '$slice') +Starred = ClassNode('Starred', expr) +Store = ClassNode('Store', expr_context) +Str = ClassNode('Str', expr, 'string literal') +Sub = ClassNode('Sub', operator, '-') +Subscript = ClassNode('Subscript', expr) +Try = ClassNode('Try', stmt) +Tuple = ClassNode('Tuple', expr) +UAdd = ClassNode('UAdd', unaryop, '+') +USub = ClassNode('USub', unaryop, '-') +UnaryOp = ClassNode('UnaryOp', expr, 'unary') +#Avoid name clash with 'unaryop' +UnaryOp.set_name('UnaryExpr') +While = ClassNode('While', stmt) +With = ClassNode('With', stmt) +Yield = ClassNode('Yield', expr) +YieldFrom = ClassNode('YieldFrom', expr, 'yield-from') +alias_list = ListNode(alias) +cmpop_list = ListNode(cmpop) +comprehension_list = ListNode(comprehension) +expr_list = ListNode(expr) +stmt_list = ListNode(stmt) +string_list = ListNode(string) +StringPart = ClassNode('StringPart', None, "implicitly concatenated part") +string_parts_list = ListNode(StringPart) +pattern_list = ListNode(pattern) + +#Template AST Nodes +TemplateWrite = ClassNode('TemplateWrite', stmt, "template write statement") +TemplateDottedNotation = ClassNode('TemplateDottedNotation', expr, "template dotted notation expression") +Filter = ClassNode("Filter", expr, "template filter expression") +PlaceHolder = ClassNode('PlaceHolder', expr, "template place-holder expression") + +Await = ClassNode('Await', expr) +MatMult = ClassNode('MatMult', operator, '@') + +scope = UnionNode(Module, Class, Function) +scope.set_name('scope') + +dict_item = ClassNode('dict_item') + +#DoubleStar in calls fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4}) or dict displays {'a': 1, **{'b': 2, 'd': 4}} +DictUnpacking = ClassNode('DictUnpacking', dict_item, descriptive_name='dictionary unpacking') +KeyValuePair = ClassNode('KeyValuePair', dict_item, descriptive_name='key-value pair') +keyword = ClassNode('keyword', dict_item, descriptive_name='keyword argument') + +#Initial name must match that in ast module. +FormattedStringLiteral = ClassNode("JoinedStr", expr, descriptive_name='formatted string literal') +FormattedStringLiteral.set_name("Fstring") + +FormattedValue = ClassNode("FormattedValue", expr, descriptive_name='formatted value') + +AnnAssign = ClassNode("AnnAssign", stmt, descriptive_name='annotated assignment') + +AssignExpr = ClassNode('AssignExpr', expr, "assignment expression") + +SpecialOperation = ClassNode('SpecialOperation', expr, "special operation") + +type_parameter = ClassNode('type_parameter', descriptive_name='type parameter') +type_parameter.field('location', location) +type_parameter_list = ListNode(type_parameter) + +TypeAlias = ClassNode('TypeAlias', stmt, 'type alias') +ParamSpec = ClassNode('ParamSpec', type_parameter, 'parameter spec') +TypeVar = ClassNode('TypeVar', type_parameter, 'type variable') +TypeVarTuple = ClassNode('TypeVarTuple', type_parameter, 'type variable tuple') + + +expr_or_stmt = UnionNode(expr, stmt) + +dict_item_list = ListNode(dict_item) + +ast_node = UnionNode(expr, stmt, pattern, Module, Class, Function, comprehension, StringPart, dict_item, type_parameter) +ast_node.set_name('ast_node') + +parameter = UnionNode(Name, Tuple) +parameter.set_name('parameter') + +parameter_list = ListNode(parameter) + +alias.field('value', expr) +alias.field('asname', expr, 'name') + +arguments.field('kw_defaults', expr_list, 'keyword-only default values') +arguments.field('defaults', expr_list, 'default values') +arguments.field('annotations', expr_list) +arguments.field('varargannotation', expr, '*arg annotation') +arguments.field('kwargannotation', expr, '**kwarg annotation') +arguments.field('kw_annotations', expr_list, 'keyword-only annotations') + +Assert.field('test', expr, 'value being tested') +Assert.field('msg', expr, 'failure message') + +Assign.field('value', expr) +Assign.field('targets', expr_list, 'targets') + +Attribute.field('value', expr, 'object') +Attribute.field('attr', string, 'attribute name') +Attribute.field('ctx', expr_context, 'context') + +AugAssign.field('operation', BinOp) + +BinOp.field('left', expr, 'left sub-expression') +BinOp.field('op', operator, 'operator') +BinOp.field('right', expr, 'right sub-expression') + +BoolOp.field('op', boolop, 'operator') +BoolOp.field('values', expr_list, 'sub-expressions') + +Bytes.field('s', bytes_, 'value') +Bytes.field('prefix', bytes_, 'prefix') +Bytes.field('implicitly_concatenated_parts', string_parts_list) + +Call.field('func', expr, 'callable') +Call.field('positional_args', expr_list, 'positional arguments') +Call.field('named_args', dict_item_list, 'named arguments') + +Class.field('name', string) +Class.field('body', stmt_list) + +ClassExpr.field('name', string) +ClassExpr.field('bases', expr_list) +ClassExpr.field('keywords', dict_item_list, 'keyword arguments') +ClassExpr.field('inner_scope', Class, 'class scope') +ClassExpr.field('type_parameters', type_parameter_list, 'type parameters') + +Compare.field('left', expr, 'left sub-expression') +Compare.field('ops', cmpop_list, 'comparison operators') +Compare.field('comparators', expr_list, 'right sub-expressions') + +comprehension.field('iter', expr, 'iterable') +comprehension.field('target', expr) +comprehension.field('ifs', expr_list, 'conditions') + +Delete.field('targets', expr_list) + +Dict.field('items', dict_item_list) + +DictUnpacking.field('location', location) +DictUnpacking.field('value', expr) + +DictComp.field('function', Function, 'implementation') +DictComp.field('iterable', expr) + +ExceptStmt.field('type', expr) +ExceptStmt.field('name', expr) +ExceptStmt.field('body', stmt_list) + +ExceptGroupStmt.field('type', expr) +ExceptGroupStmt.field('name', expr) +ExceptGroupStmt.field('body', stmt_list) + +Exec.field('body', expr) +Exec.field('globals', expr) +Exec.field('locals', expr) + +Expr_stmt.field('value', expr) + +For.field('target', expr) +For.field('iter', expr, 'iterable') +For.field('body', stmt_list) +For.field('orelse', stmt_list, 'else block') +For.field('is_async', bool_, 'async') + +Function.field('name', string) +Function.field('args', parameter_list, 'positional parameter list') +Function.field('vararg', expr, 'tuple (*) parameter') +Function.field('kwonlyargs', expr_list, 'keyword-only parameter list') +Function.field('kwarg', expr, 'dictionary (**) parameter') +Function.field('body', stmt_list) +Function.field('is_async', bool_, 'async') +Function.field('type_parameters', type_parameter_list, 'type parameters') + +FunctionExpr.field('name', string) +FunctionExpr.field('args', arguments, 'parameters') +FunctionExpr.field('returns', expr, 'return annotation') +FunctionExpr.field('inner_scope', Function, 'function scope') + +GeneratorExp.field('function', Function, 'implementation') +GeneratorExp.field('iterable', expr) + +Global.field('names', string_list) + +If.field('test', expr) +If.field('body', stmt_list, 'if-true block') +If.field('orelse', stmt_list, 'if-false block') + +IfExp.field('test', expr) +IfExp.field('body', expr, 'if-true expression') +IfExp.field('orelse', expr, 'if-false expression') + +Import.field('names', alias_list, 'alias list') + +ImportFrom.set_name('ImportStar') +ImportFrom.field('module', expr) + +ImportMember.field('module', expr) +ImportMember.field('name', string) + +keyword.field('location', location) +keyword.field('value', expr) +keyword.field('arg', string) + +KeyValuePair.field('location', location) +KeyValuePair.field('value', expr) +KeyValuePair.field('key', expr) + +Lambda.field('args', arguments, 'arguments') +Lambda.field('inner_scope', Function, 'function scope') + +List.field('elts', expr_list, 'element list') +List.field('ctx', expr_context, 'context') + +#For Python 3 a new scope is created and these fields are populated: +ListComp.field('function', Function, 'implementation') +ListComp.field('iterable', expr) +#For Python 2 no new scope is created and these are populated: +ListComp.field('generators', comprehension_list) +ListComp.field('elt', expr, 'elements') + +Match.field('subject', expr) +Match.field('cases', stmt_list) +Case.field('pattern', pattern) +Case.field('guard', expr) +Case.field('body', stmt_list) +Guard.field('test', expr) +MatchStarPattern.field('target', pattern) +MatchDoubleStarPattern.field('target', pattern) +MatchKeyValuePattern.field('key', pattern) +MatchKeyValuePattern.field('value', pattern) +MatchClassPattern.field('class', expr) +MatchKeywordPattern.field('attribute', expr) +MatchKeywordPattern.field('value', pattern) +MatchAsPattern.field('pattern', pattern) +MatchAsPattern.field('alias', expr) +MatchOrPattern.field('patterns', pattern_list) +MatchLiteralPattern.field('literal', expr) +MatchCapturePattern.field('variable', expr) +MatchValuePattern.field('value', expr) +MatchSequencePattern.field('patterns', pattern_list) +MatchMappingPattern.field('mappings', pattern_list) +MatchClassPattern.field('class_name', expr) +MatchClassPattern.field('positional', pattern_list) +MatchClassPattern.field('keyword', pattern_list) + +Module.field('name', string) +Module.field('hash', string , 'hash (not populated)') +Module.field('body', stmt_list) +Module.field('kind', string) + +ImportExpr.field('level', int_) +ImportExpr.field('name', string) +ImportExpr.field('top', bool_, 'top level') + +Name.field('variable', variable) +Name.field('ctx', expr_context, 'context') + +Nonlocal.field('names', string_list) + +Num.field('n', number, 'value') +Num.field('text', number) + +ParamSpec.field('name', expr) + +Print.field('dest', expr, 'destination') +Print.field('values', expr_list) +Print.field('nl', bool_, 'new line') + +#Python3 has exc & cause +Raise.field('exc', expr, 'exception') +Raise.field('cause', expr) +#Python2 has type, inst, tback +Raise.field('type', expr) +Raise.field('inst', expr, 'instance') +Raise.field('tback', expr, 'traceback') + +Repr.field('value', expr) + +Return.field('value', expr) + +Set.field('elts', expr_list, 'elements') + +SetComp.field('function', Function, 'implementation') +SetComp.field('iterable', expr) + +Slice.field('start', expr) +Slice.field('stop', expr) +Slice.field('step', expr) + +Starred.field('value', expr) +Starred.field('ctx', expr_context, 'context') + +Str.field('s', string, 'text') +Str.field('prefix', string, 'prefix') +Str.field('implicitly_concatenated_parts', string_parts_list) + +Subscript.field('value', expr) +Subscript.field('index', expr) +Subscript.field('ctx', expr_context, 'context') + +Try.field('body', stmt_list) +Try.field('orelse', stmt_list, 'else block') +Try.field('handlers', stmt_list, 'exception handlers') +Try.field('finalbody', stmt_list, 'finally block') + +Tuple.field('elts', expr_list, 'elements') +Tuple.field('ctx', expr_context, 'context') + +TypeAlias.field('name', expr) +TypeAlias.field('type_parameters', type_parameter_list) +TypeAlias.field('value', expr) + +TypeVar.field('name', expr) +TypeVar.field('bound', expr) + +TypeVarTuple.field('name', expr) + +UnaryOp.field('op', unaryop, 'operator') +UnaryOp.field('operand', expr) + +While.field('test', expr) +While.field('body', stmt_list) +While.field('orelse', stmt_list, 'else block') + +With.field('context_expr', expr, 'context manager') +With.field('optional_vars', expr, 'optional variable') +With.field('body', stmt_list) +With.field('is_async', bool_, 'async') + +Yield.field('value', expr) + +YieldFrom.field('value', expr) + +#Template AST Nodes +TemplateWrite.field('value', expr) +TemplateDottedNotation.field('value', expr, 'object') +TemplateDottedNotation.field('attr', string, 'attribute name') +TemplateDottedNotation.field('ctx', expr_context, 'context') +Filter.field('value', expr, 'filtered value') +Filter.field('filter', expr, 'filter') + +PlaceHolder.field('variable', variable) +PlaceHolder.field('ctx', expr_context, 'context') + +StringPart.field('text', string) +StringPart.field('location', location) + +Await.field('value', expr, 'expression waited upon') + +FormattedStringLiteral.field('values', expr_list) + +FormattedValue.field('value', expr, "expression to be formatted") +FormattedValue.field('conversion', string, 'type conversion') +FormattedValue.field('format_spec', FormattedStringLiteral, 'format specifier') + +AnnAssign.field('value', expr) +AnnAssign.field('annotation', expr) +AnnAssign.field('target', expr) + +SpecialOperation.field('name', string) +SpecialOperation.field('arguments', expr_list) + +AssignExpr.field('value', expr) +AssignExpr.field('target', expr) + +def all_nodes(): + nodes = [ val for val in globals().values() if isinstance(val, Node) ] + return _build_node_relations(nodes) diff --git a/python/extractor/semmle/python/modules.py b/python/extractor/semmle/python/modules.py new file mode 100644 index 00000000000..8934d810eb8 --- /dev/null +++ b/python/extractor/semmle/python/modules.py @@ -0,0 +1,214 @@ +'''MODULE_TYPES: mapping from type-code returned by +imp.find_module to Module subclass''' + +import semmle.python.parser.tokenizer +import semmle.python.parser.tsg_parser +import re +import os +from blib2to3.pgen2 import tokenize +import codecs + +from semmle.python.passes.labeller import Labeller +from semmle.util import base64digest +from semmle.profiling import timers + +__all__ = [ 'PythonSourceModule' ] + +class PythonSourceModule(object): + + kind = None + + def __init__(self, name, path, logger, bytes_source = None): + assert isinstance(path, str), path + self.name = name # May be None + self.path = path + if bytes_source is None: + with timers["load"]: + with open(self.path, 'rb') as src: + bytes_source = src.read() + if BIN_PYTHON.match(bytes_source): + self.kind = "Script" + self._ast = None + self._py_ast = None + self._lines = None + self._line_types = None + self._comments = None + self._tokens = None + self.logger = logger + with timers["decode"]: + self.encoding, self.bytes_source = semmle.python.parser.tokenizer.encoding_from_source(bytes_source) + if self.encoding != 'utf-8': + logger.debug("File '%s' has encoding %s.", path, self.encoding) + try: + self._source = self.bytes_source.decode(self.encoding) + self._illegal_encoding = False + except Exception as ex: + self.logger.warning("%s has encoding '%s'", path, self.encoding) + #Set source to a latin-1 decoding of source string (which cannot fail). + #Attempting to get the AST will raise a syntax error as expected. + self._source = self.bytes_source.decode("latin-1") + self._illegal_encoding = str(ex) + self._source = normalize_line_endings(self._source) + #Strip BOM + if self._source.startswith(u'\ufeff'): + self._source = self._source[1:] + self._secure_hash = base64digest(self._source) + assert isinstance(self._source, str) + + @property + def source(self): + return self._source + + @property + def lines(self): + if self._lines is None: + def genline(): + src = self._source + #Handle non-linux line endings + src = src.replace("\r\n", "\n").replace("\r", "\n") + length = len(src) + start = 0 + while True: + end = src.find(u'\n', start) + if end < 0: + if start < length: + yield src[start:] + return + yield src[start:end+1] + start = end+1 + self._lines = list(genline()) + return self._lines + + @property + def tokens(self): + if self._tokens is None: + with timers["tokenize"]: + tokenizer = semmle.python.parser.tokenizer.Tokenizer(self._source) + self._tokens = list(tokenizer.tokens()) + return self._tokens + + @property + def ast(self): + # The ast will be modified by the labeller, so we cannot share it with the py_ast property. + # However, we expect py_ast to be accessed and used before ast, so we avoid reparsing in that case. + if self._ast is None: + if self._illegal_encoding: + message = self._illegal_encoding + error = SyntaxError(message) + error.filename = self.path + error.lineno, error.offset = offending_byte_position(message, self.bytes_source) + raise error + self._ast = self.py_ast + self._ast.trap_name = self.trap_name + self._py_ast = None + with timers["label"]: + Labeller().apply(self) + return self._ast + + @property + def old_py_ast(self): + # The py_ast is the raw ast from the Python parser. + if self._py_ast is None: + self._py_ast = semmle.python.parser.parse(self.tokens, self.logger) + return self._py_ast + + @property + def py_ast(self): + try: + # First, try to parse the source with the old Python parser. + return self.old_py_ast + except Exception as ex: + # If that fails, try to parse the source with the new Python parser (unless it has been + # explicitly disabled). + # + # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the + # flag is enabled. + # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED + if os.environ.get("CODEQL_PYTHON_DISABLE_TSG_PARSER"): + if isinstance(ex, SyntaxError): + raise ex + else: + raise SyntaxError("Exception %s while parsing %s" % (ex, self.path)) + else: + try: + self._py_ast = semmle.python.parser.tsg_parser.parse(self.path, self.logger) + return self._py_ast + except SyntaxError as ex: + raise ex + except Exception as ex: + raise SyntaxError("Exception %s in tsg-python while parsing %s" % (ex, self.path)) + + + @property + def trap_name(self): + return type(self).__name__ + ':' + self.path + ":" + self._secure_hash + + def get_hash_key(self, token): + return base64digest(self.path + u":" + self._secure_hash + token) + + def get_encoding(self): + 'Returns encoding of source' + return self.encoding + + @property + def comments(self): + ''' Returns an iterable of comments in the form: + test, start, end where start and end are line. column + pairs''' + if self._comments is None: + self._lexical() + return self._comments + + def close(self): + self.bytes_source = None + self._source = None + self._ast = None + self._line_types = None + self._comments = None + self._lines = None + + def _lexical(self): + self._comments = [] + for kind, text, start, end in self.tokens: + if kind == tokenize.COMMENT: + self._comments.append((text, start, end)) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + +NEWLINE = b'\n' +OFFENDING_BYTE_RE = re.compile(r"decode byte \w+ in position (\d+):") + +def offending_byte_position(message, string): + m = OFFENDING_BYTE_RE.search(message) + if m is None: + return (0,0) + badposition = int(m.group(1)) + prefix = string[:badposition] + line = prefix.count(NEWLINE) + 1 + column = badposition - prefix.rfind(NEWLINE) - 1 + return (line, column) + + +BIN_PYTHON = re.compile(b'#! *(/usr|/bin|/local)*/?(env)? *python') + +def is_script(path): + '''Is the file at `path` a script? (does it start with #!... python)''' + try: + with open(path, "rb") as contents: + start = contents.read(100) + return bool(BIN_PYTHON.match(start)) + except Exception: + return False + +def normalize_line_endings(src): + #Our tokenizer expects single character `\n`, `\r` or `\f` as line endings. + src = src.replace(u'\r\n', u'\n') + #Our parser expects that there are no unterminated lines. + if src and src[-1] != u'\n': + return src + u'\n' + return src diff --git a/python/extractor/semmle/python/parser/__init__.py b/python/extractor/semmle/python/parser/__init__.py new file mode 100644 index 00000000000..d5eb021f8d3 --- /dev/null +++ b/python/extractor/semmle/python/parser/__init__.py @@ -0,0 +1,153 @@ + +# Black's version of lib2to3 (modified) +from blib2to3.pytree import type_repr +from blib2to3 import pygram +from blib2to3.pgen2 import driver, token +from blib2to3.pgen2.parse import ParseError, Parser +from . import ast +from blib2to3.pgen2 import tokenize, grammar +from blib2to3.pgen2.token import tok_name +from semmle.profiling import timers + +pygram.initialize() +syms = pygram.python_symbols + + +GRAMMARS = [ + ("Python 3", pygram.python3_grammar), + ("Python 3 without async", pygram.python3_grammar_no_async), + ("Python 2 with print as function", pygram.python2_grammar_no_print_statement), + ("Python 2", pygram.python2_grammar), +] + + +SKIP_IF_SINGLE_CHILD_NAMES = { + 'atom', + 'power', + 'test', + 'not_test', + 'and_test', + 'or_test', + 'suite', + 'testlist', + 'expr', + 'xor_expr', + 'and_expr', + 'shift_expr', + 'arith_expr', + 'term', + 'factor', + 'testlist_gexp', + 'exprlist', + 'testlist_safe', + 'old_test', + 'comparison', +} + +SKIP_IF_SINGLE_CHILD = { + val for name, val in + syms.__dict__.items() + if name in SKIP_IF_SINGLE_CHILD_NAMES +} + + +class Leaf(object): + + __slots__ = "type", "value", "start", "end" + + def __init__(self, type, value, start, end): + self.type = type + self.value = value + self.start = start + self.end = end + + def __repr__(self): + """Return a canonical string representation.""" + return "%s(%s, %r)" % (self.__class__.__name__, + self.name, + self.value) + + @property + def name(self): + return tok_name.get(self.type, self.type) + +class Node(object): + + __slots__ = "type", "children", "used_names" + + def __init__(self, type, children): + self.type = type + self.children = children + + @property + def start(self): + node = self + while isinstance(node, Node): + node = node.children[0] + return node.start + + @property + def end(self): + node = self + while isinstance(node, Node): + node = node.children[-1] + return node.end + + def __repr__(self): + """Return a canonical string representation.""" + return "%s(%s, %r)" % (self.__class__.__name__, + self.name, + self.children) + + @property + def name(self): + return type_repr(self.type) + +def convert(gr, raw_node): + type, value, context, children = raw_node + if children or type in gr.number2symbol: + # If there's exactly one child, return that child instead of + # creating a new node. + if len(children) == 1 and type in SKIP_IF_SINGLE_CHILD: + return children[0] + return Node(type, children) + else: + start, end = context + return Leaf(type, value, start, end) + +def parse_tokens(gr, tokens): + """Parse a series of tokens and return the syntax tree.""" + p = Parser(gr, convert) + p.setup() + for tkn in tokens: + type, value, start, end = tkn + if type in (tokenize.COMMENT, tokenize.NL): + continue + if type == token.OP: + type = grammar.opmap[value] + if type == token.INDENT: + value = "" + if p.addtoken(type, value, (start, end)): + break + else: + # We never broke out -- EOF is too soon (how can this happen???) + raise parse.ParseError("incomplete input", + type, value, ("", start)) + return p.rootnode + + +def parse(tokens, logger): + """Given a string with source, return the lib2to3 Node.""" + for name, grammar in GRAMMARS: + try: + with timers["parse"]: + cpt = parse_tokens(grammar, tokens) + with timers["rewrite"]: + return ast.convert(logger, cpt) + except ParseError as pe: + lineno, column = pe.context[1] + logger.debug("%s at line %d, column %d using grammar for %s", pe, lineno, column, name) + exc = SyntaxError("Syntax Error") + exc.lineno = lineno + exc.offset = column + raise exc diff --git a/python/extractor/semmle/python/parser/ast.py b/python/extractor/semmle/python/parser/ast.py new file mode 100644 index 00000000000..85d87108e35 --- /dev/null +++ b/python/extractor/semmle/python/parser/ast.py @@ -0,0 +1,1491 @@ +from blib2to3.pgen2 import token +from ast import literal_eval +from semmle.python import ast +from blib2to3.pgen2.parse import ParseError +import sys + +LOAD = ast.Load() +STORE = ast.Store() +PARAM = ast.Param() +DEL = ast.Del() + +POSITIONAL = 1 +KEYWORD = 2 + + +class ParseTreeVisitor(object): + '''Standard tree-walking visitor, + using `node.name` rather than `type(node).__name__` + ''' + + def visit(self, node, extra_arg=None): + method = 'visit_' + node.name + if extra_arg is None: + return getattr(self, method)(node) + else: + return getattr(self, method)(node, extra_arg) + +class Convertor(ParseTreeVisitor): + ''' Walk the conrete parse tree, returning an AST. + The CPT is specified by blib2to3/Grammar.txt. + The AST specified by semmle/python/master.py. + Each `visit_X` method takes a `X` node in the CFG and + produces some part of the AST, usually a single node. + ''' + + def __init__(self, logger): + self.logger = logger + # To handle f-strings nested inside other f-strings, we must keep track of the stack of + # surrounding prefixes while walking the tree. This is necessary because inside an f-string + # like `f"hello{f'to{you}dear'}world"`, the string part containing "world" has (in terms of + # the concrete parse tree) a prefix of `}`, which doesn't tell us how to interpret it (in + # particular, we can't tell if it's a raw string or not). So instead we look at the top of + # the prefix stack to figure out what the "current prefix" is. The nested f-string in the + # example above demonstrates why we must do this as a stack -- we must restore the outer + # `f"` prefix when we're done with the inner `f'`-prefix string. + # + # The stack manipulation itself takes place in the `visit_FSTRING_START` and + # `visit_FSTRING_END` methods. The text wrangling takes place in the `parse_string` helper + # function. + + self.outer_prefix_stack = [] + + + def visit_file_input(self, node): + body = [] + for s in [self.visit(s) for s in node.children if s.name not in ("ENDMARKER", "NEWLINE")]: + if isinstance(s, list): + body.extend(s) + else: + body.append(s) + result = ast.Module(body) + set_location(result, node) + return result + + def visit_import_from(self, node): + level = 0 + index = 1 + module_start = node.children[index].start + while is_token(node.children[index], "."): + level += 1 + index += 1 + if is_token(node.children[index], "import"): + module_end = node.children[index-1].end + index += 1 + module_name = None + else: + module_end = node.children[index].end + module_name = self.visit(node.children[index]) + index += 2 + if is_token(node.children[index], "*"): + module = ast.ImportExpr(level, module_name, False) + set_location(module, module_start, module_end) + result = ast.ImportFrom(module) + set_location(result, node) + return result + if is_token(node.children[index], "("): + import_as_names = node.children[index+1] + else: + import_as_names = node.children[index] + aliases = [] + for import_as_name in import_as_names.children[::2]: + module = ast.ImportExpr(level, module_name, False) + set_location(module, module_start, module_end) + aliases.append(self._import_as_name(import_as_name, module)) + result = ast.Import(aliases) + set_location(result, node) + return result + + #Helper for visit_import_from + def _import_as_name(self, node, module): + name = node.children[0].value + if len(node.children) == 3: + asname = node.children[2] + else: + asname = node.children[0] + expr = ast.ImportMember(module, name) + set_location(expr, node) + rhs = make_name(asname.value, STORE, asname.start, asname.end) + result = ast.alias(expr, rhs) + set_location(result, node) + return result + + def visit_small_stmt(self, node): + return self.visit(node.children[0]) + + def visit_simple_stmt(self, node): + return [self.visit(s) for s in node.children if s.name not in ("SEMI", "NEWLINE")] + + def visit_stmt(self, node): + return self.visit(node.children[0]) + + def visit_compound_stmt(self, node): + return self.visit(node.children[0]) + + def visit_pass_stmt(self, node): + p = ast.Pass() + set_location(p, node) + return p + + def visit_classdef(self, node): + if len(node.children) == 4: + cls, name, colon, suite = node.children + args, keywords = [], [] + elif len(node.children) == 7: + cls, name, _, args, _, colon, suite = node.children + args, keywords = self.visit(args) + else: + assert len(node.children) == 6 + cls, name, _, _, colon, suite = node.children + args, keywords = [], [] + start = cls.start + end = colon.end + suite = self.visit(suite) + inner = ast.Class(name.value, suite) + set_location(inner, start, end) + cls_expr = ast.ClassExpr(name.value, [], args, keywords, inner) + set_location(cls_expr, start, end) + name_expr = make_name(name.value, STORE, name.start, name.end) + result = ast.Assign(cls_expr, [name_expr]) + set_location(result, start, end) + return result + + def visit_arglist(self, node): + all_args = self._visit_list(node.children[::2]) + args = [ arg for kind, arg in all_args if kind is POSITIONAL ] + keywords = [ arg for kind, arg in all_args if kind is KEYWORD ] + return args, keywords + + def visit_argument(self, node): + child = node.children[0] + if is_token(child, "*"): + kind, arg = POSITIONAL, ast.Starred(self.visit(node.children[1], LOAD), LOAD) + elif is_token(child, "**"): + kind, arg = KEYWORD, ast.DictUnpacking(self.visit(node.children[1], LOAD)) + elif len(node.children) == 3 and is_token(node.children[1], "="): + try: + name = get_node_value(child) + except Exception: + #Not a legal name + name = None + self.logger.warning("Illegal name for keyword on line %s", child.start[0]) + kind, arg = KEYWORD, ast.keyword(name, self.visit(node.children[2], LOAD)) + else: + arg = self.visit(child, LOAD) + if len(node.children) == 1: + return POSITIONAL, arg + elif len(node.children) == 3 and is_token(node.children[1], ":="): + return POSITIONAL, self.visit_namedexpr_test(node, LOAD) + generators = self.visit(node.children[1]) + kind, arg = POSITIONAL, ast.GeneratorExp(arg, generators) + set_location(arg, node) + rewrite_comp(arg) + set_location(arg, node) + return kind, arg + + def visit_namedexpr_test(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + target = self.visit(node.children[0], STORE) + value = self.visit(node.children[-1], LOAD) + result = ast.AssignExpr(value, target) + set_location(result, node) + return result + + def visit_test(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + else: + if ctx is not LOAD: + context_error(node) + body = self.visit(node.children[0], ctx) + test = self.visit(node.children[2], ctx) + orelse = self.visit(node.children[4], ctx) + ifexp = ast.IfExp(test, body, orelse) + set_location(ifexp, node) + return ifexp + + def visit_or_test(self, node, ctx): + return self._boolop(node, ast.Or, ctx) + + def visit_and_test(self, node, ctx): + return self._boolop(node, ast.And, ctx) + + def visit_not_test(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + if ctx is not LOAD: + context_error(node) + result = ast.UnaryOp( + ast.Not(), + self.visit(node.children[1], ctx) + ) + set_location(result, node) + return result + + # Helper for `or` and `and`. + def _boolop(self, node, opcls, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + values = [ self.visit(s, ctx) for s in node.children[::2] ] + result = ast.BoolOp(opcls(), values) + set_location(result, node) + return result + + # Helper for various binary expression visitors. + def _binary(self, node, opfact, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + if ctx is not LOAD: + context_error(node) + children = iter(node.children) + result = self.visit(next(children), LOAD) + for op in children: + item = next(children) + rhs = self.visit(item, LOAD) + result = ast.BinOp(result, opfact(op), rhs) + set_location(result, node.start, item.end) + return result + + def visit_suite(self, node): + if len(node.children) == 1: + return self.visit(node.children[0]) + result = [] + for s in [self.visit(s) for s in node.children[2:-1]]: + if isinstance(s, list): + result.extend(s) + else: + result.append(s) + return result + + def visit_expr_stmt(self, node): + if len(node.children) == 1: + result = ast.Expr(self.visit(node.children[0], LOAD)) + set_location(result, node) + return result + if len(node.children) > 1 and is_token(node.children[1], "="): + return self._assign(node) + if len(node.children) == 2: + # Annotated assignment + target = self.visit(node.children[0], STORE) + ann = node.children[1] + type_anno = self.visit(ann.children[1], LOAD) + if len(ann.children) > 2: + value = self.visit(ann.children[3], LOAD) + else: + value = None + result = ast.AnnAssign(value, type_anno, target) + else: + #Augmented assignment + lhs = self.visit(node.children[0], LOAD) + op = self.visit(node.children[1]) + rhs = self.visit(node.children[2], LOAD) + expr = ast.BinOp(lhs, op, rhs) + set_location(expr, node) + result = ast.AugAssign(expr) + set_location(result, node) + return result + + def visit_augassign(self, node): + return AUG_ASSIGN_OPS[node.children[0].value]() + + #Helper for visit_expr_stmt (for assignment) + def _assign(self, node): + targets = [ self.visit(t, STORE) for t in node.children[:-1:2]] + result = ast.Assign(self.visit(node.children[-1], LOAD), targets) + set_location(result, node) + return result + + def visit_testlist(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + elts = self._visit_list(node.children[::2], ctx) + result = ast.Tuple(elts, ctx) + set_location(result, node) + return result + + visit_testlist_star_expr = visit_testlist + + def visit_comparison(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + if ctx is not LOAD: + context_error(node) + left = self.visit(node.children[0], ctx) + ops = [ self.visit(op) for op in node.children[1::2]] + comps = [ self.visit(op, ctx) for op in node.children[2::2]] + result = ast.Compare(left, ops, comps) + set_location(result, node) + return result + + def visit_comp_op(self, node): + if len(node.children) == 1: + return COMP_OP_CLASSES[node.children[0].value]() + else: + assert len(node.children) == 2 + return ast.IsNot() if node.children[0].value == "is" else ast.NotIn() + + def visit_expr(self, node, ctx): + return self._binary(node, lambda _: ast.BitOr(), ctx) + + def visit_xor_expr(self, node, ctx): + return self._binary(node, lambda _: ast.BitXor(), ctx) + + def visit_and_expr(self, node, ctx): + return self._binary(node, lambda _: ast.BitAnd(), ctx) + + def visit_shift_expr(self, node, ctx): + return self._binary( + node, + lambda op: ast.LShift() if op.value == "<<" else ast.RShift(), + ctx + ) + + def visit_arith_expr(self, node, ctx): + return self._binary( + node, + lambda op: ast.Add() if op.value == "+" else ast.Sub(), + ctx + ) + + def visit_term(self, node, ctx): + return self._binary( + node, + lambda op: TERM_OP_CLASSES[op.value](), + ctx + ) + + def visit_factor(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + result = ast.UnaryOp( + FACTOR_OP_CLASSES[node.children[0].value](), + self.visit(node.children[1], ctx) + ) + set_location(result, node) + return result + + def visit_power(self, node, ctx): + '''This part of the Grammar is formulated in a slightly + awkward way, so we need to recursively handle the `await` + prefix, then the `** factor` suffix, then the atom and trailers. + ''' + + # Because `await` was a valid identifier in earlier versions of Python, + # we cannot assume it indicates an `await` expression. We therefore + # have to look at what follows in order to make a decision. The + # relevant part of the grammar is + # + # power: ['await'] atom trailer* ['**' factor] + # + # The case we wish to identify is when 'await' appears, but as an + # `atom`, and not an `await` token. + # + # Because `atom` nodes may no longer be present (see + # `SKIP_IF_SINGLE_CHILD_NAMES` in `__init__.py`) we instead look at the + # node following the (potentially) skipped `atom`. In particular, if + # the following node is a `trailer` or "**" token, we know that the + # given node cannot be an `await` token, and must be an `atom` instead. + try: + next_node = node.children[1] + next_is_atom = next_node.name != "trailer" and not is_token(next_node, "**") + except (IndexError, AttributeError): + # IndexError if `node` has at most one child. + # AttributeError if `next_node` is a `Leaf` instead of a `Node`. + next_is_atom = False + if is_token(node.children[0], "await") and next_is_atom: + if ctx is not LOAD: + context_error(node) + pow = self._power(node.children[1:], ctx) + result = ast.Await(pow) + set_location(result, node) + return result + else: + return self._power(node.children, ctx) + + #Helper for visit_power + def _power(self, children, ctx): + start = children[0].start + if len(children) > 1 and is_token(children[-2], "**"): + if ctx is not LOAD: + context_error(children[0]) + trailers = children[1:-2] + pow_expr = self.visit(children[-1], ctx) + else: + trailers = children[1:] + pow_expr = None + if trailers: + expr = self.visit(children[0], LOAD) + for trailer in trailers[:-1]: + expr = self._apply_trailer(expr, trailer, start, LOAD) + expr = self._apply_trailer(expr, trailers[-1], start, ctx) + else: + expr = self.visit(children[0], ctx) + if pow_expr: + expr = ast.BinOp(expr, ast.Pow(), pow_expr) + set_location(expr, children[0].start, children[-1].end) + return expr + + #Helper for _power + def _atom(self, children, ctx): + start = children[0].start + if len(children) == 1: + return self.visit(children[0], ctx) + atom = self.visit(children[0], LOAD) + for trailer in children[1:-1]: + atom = self._apply_trailer(atom, trailer, start, LOAD) + atom = self._apply_trailer(atom, children[-1], start, ctx) + return atom + + #Helper for _atom + def _apply_trailer(self, atom, trailer, start, ctx): + children = trailer.children + left = children[0] + if is_token(left, "("): + if is_token(children[1], ")"): + args, keywords = [], [] + end = children[1].end + else: + args, keywords = self.visit(children[1]) + end = children[2].end + result = ast.Call(atom, args, keywords) + elif is_token(left, "["): + result = ast.Subscript(atom, self.visit(children[1], LOAD), ctx) + end = children[2].end + else: + assert is_token(left, ".") + result = ast.Attribute(atom, children[1].value, ctx) + end = children[1].end + set_location(result, start, end) + return result + + def visit_atom(self, node, ctx): + left = node.children[0] + if left.value in "[({": + n = node.children[1] + if hasattr(n, "value") and n.value in "])}": + if n.value == ")": + result = ast.Tuple([], ctx) + elif n.value == "]": + result = ast.List([], ctx) + else: + result = ast.Dict([]) + set_location(result, node) + return result + else: + result = self.visit(node.children[1], ctx) + if left.value == "(": + result.parenthesised = True + else: + #Meaningful bracketing + set_location(result, node) + if isinstance(result, (ast.GeneratorExp, ast.ListComp, ast.SetComp, ast.DictComp)): + rewrite_comp(result) + return result + if left.type == token.NAME: + return make_name(left.value, ctx, left.start, left.end) + if ctx is not LOAD: + context_error(node) + if left.type == token.NUMBER: + val = get_numeric_value(left) + result = ast.Num(val, left.value) + set_location(result, left) + return result + if left.value == ".": + assert len(node.children) == 3 and node.children[2].value == "." + result = ast.Ellipsis() + set_location(result, node) + return result + assert left.type == token.BACKQUOTE + result = ast.Repr(self.visit(node.children[1], LOAD)) + set_location(result, node) + return result + + def visit_STRING(self, node, ctx): + if ctx is not LOAD: + context_error(node) + outer_prefix = self.outer_prefix_stack[-1] if self.outer_prefix_stack else None + prefix, s = parse_string(node.value, self.logger, outer_prefix) + text = get_text(node.value, outer_prefix) + result = ast.StringPart(prefix, text, s) + set_location(result, node) + return result + + def visit_NUMBER(self, node, ctx): + if ctx is not LOAD: + context_error(node) + val = get_numeric_value(node) + result = ast.Num(val, node.value) + set_location(result, node) + return result + + def visit_funcdef(self, node, is_async=False): + # funcdef: 'def' NAME parameters ['->' test] ':' suite + name = node.children[1].value + if node.children[3].value == "->": + return_type = self.visit(node.children[4], LOAD) + end = node.children[5].end + body = self.visit(node.children[6]) + else: + return_type = None + end = node.children[3].end + body = self.visit(node.children[4]) + start = node.children[0].start + params = node.children[2] + if len(params.children) == 2: + args, vararg, kwonlyargs, kwarg = [], None, [], None + else: + args, vararg, kwonlyargs, kwarg = self._get_parameters(params.children[1]) + func = ast.Function(name, [], args, vararg, kwonlyargs, kwarg, body, is_async) + set_location(func, start, end) + if len(params.children) == 2: + args = ast.arguments([], [], [], None, None, []) + else: + args = self._get_defaults_and_annotations(params.children[1]) + funcexpr = ast.FunctionExpr(name, args, return_type, func) + set_location(funcexpr, start, end) + name_expr = make_name(name, STORE, node.children[1].start, node.children[1].end) + result = ast.Assign(funcexpr, [name_expr]) + set_location(result, start, end) + return result + + #Helper for visit_funcdef and visit_lambdef + def _get_parameters(self, node): + '''Returns the quadruple: args, vararg, kwonlyargs, kwarg + ''' + args = [] + vararg = None + kwonlyargs = [] + kwarg = None + children = iter(node.children) + arg = None + for child in children: + if is_token(child, "*"): + try: + child = next(children) + except StopIteration: + pass + else: + if not is_token(child, ","): + vararg = self.visit(child, PARAM) + break + if is_token(child, ","): + pass + elif is_token(child, "/"): + pass + elif is_token(child, "="): + next(children) + elif is_token(child, "**"): + child = next(children) + kwarg = self.visit(child, PARAM) + else: + arg = self.visit(child, PARAM) + args.append(arg) + #kwonly args + for child in children: + if is_token(child, ","): + pass + elif is_token(child, "="): + next(children) + elif is_token(child, "**"): + child = next(children) + kwarg = self.visit(child, PARAM) + else: + arg = self.visit(child, PARAM) + kwonlyargs.append(arg) + return args, vararg, kwonlyargs, kwarg + + #Helper for visit_funcdef and visit_lambdef + def _get_defaults_and_annotations(self, node): + defaults = [] + kw_defaults = [] + annotations = [] + varargannotation = None + kwargannotation = None + kw_annotations = [] + children = iter(node.children) + # Because we want the i'th element of `kw_defaults` to be the default value for + # the i'th keyword-only argument, when encountering the combined token for the + # argument name and optional annotation, we add a `None` to `kw_defaults` assuming + # that there is no default value. If there turns out to be a default value, we + # remove the `None` and add the real default value. Like-wise for `defaults`. + + # positional-only args and "normal" args + for child in children: + if is_token(child, "*"): + try: + child = next(children) + except StopIteration: + pass + else: + if not is_token(child, ","): + varargannotation = self.visit(child, LOAD) + break + if is_token(child, ","): + pass + elif is_token(child, "/"): + pass + elif is_token(child, "="): + child = next(children) + defaults.pop() + defaults.append(self.visit(child, LOAD)) + elif is_token(child, "**"): + child = next(children) + kwargannotation = self.visit(child, LOAD) + arg = None + else: + # Preemptively assume there is no default argument (indicated by None) + defaults.append(None) + annotations.append(self.visit(child, LOAD)) + + #kwonly args + for child in children: + if is_token(child, ","): + pass + elif is_token(child, "="): + child = next(children) + kw_defaults.pop() + kw_defaults.append(self.visit(child, LOAD)) + elif is_token(child, "**"): + child = next(children) + kwargannotation = self.visit(child, LOAD) + else: + # Preemptively assume there is no default argument (indicated by None) + kw_defaults.append(None) + kw_annotations.append(self.visit(child, LOAD)) + result = ast.arguments(defaults, kw_defaults, annotations, varargannotation, kwargannotation, kw_annotations) + set_location(result, node) + return result + + def visit_tfpdef(self, node, ctx): + # TO DO Support tuple parameters + # No one uses them any more, so this isn't super important. + child = node.children[0] + if is_token(child, "("): + return None + return self.visit(child, ctx) + + def visit_tname(self, node, ctx): + if ctx is PARAM: + child = node.children[0] + return make_name(child.value, ctx, child.start, child.end) + elif len(node.children) > 1: + return self.visit(node.children[2], ctx) + else: + return None + + def visit_decorated(self, node): + asgn = self.visit(node.children[1]) + value = asgn.value + for deco in reversed(node.children[0].children): + defn = value + decorator = self.visit(deco) + value = ast.Call(decorator, [defn], []) + copy_location(decorator, value) + asgn.value = value + return asgn + + def visit_decorators(self, node): + return self._visit_list(node.children) + + def visit_decorator(self, node): + namedexpr_test = node.children[1] + result = self.visit_namedexpr_test(namedexpr_test, LOAD) + set_location(result, namedexpr_test) + return result + + def _visit_list(self, items, ctx=None): + if ctx is None: + return [ self.visit(i) for i in items ] + else: + return [ self.visit(i, ctx) for i in items ] + + def visit_dotted_name(self, node): + return ".".join(name.value for name in node.children[::2]) + + def visit_NAME(self, name, ctx): + return make_name(name.value, ctx, name.start, name.end) + + def visit_listmaker(self, node, ctx): + if len(node.children) == 1 or is_token(node.children[1], ","): + items = [self.visit(c, ctx) for c in node.children[::2]] + result = ast.List(items, ctx) + else: + if ctx is not LOAD: + context_error(node) + elt = self.visit(node.children[0], ctx) + generators = self.visit(node.children[1]) + result = ast.ListComp(elt, generators) + set_location(result, node) + return result + + def visit_testlist_gexp(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + if is_token(node.children[1], ","): + items = [self.visit(c, ctx) for c in node.children[::2]] + result = ast.Tuple(items, ctx) + else: + if ctx is not LOAD: + context_error(node) + elt = self.visit(node.children[0], ctx) + generators = self.visit(node.children[1]) + result = ast.GeneratorExp(elt, generators) + set_location(result, node) + return result + + def visit_comp_for(self, node): + is_async = is_token(node.children[0], "async") + target = self.visit(node.children[1+is_async], STORE) + iter = self.visit(node.children[3+is_async], LOAD) + if len(node.children) == 5+is_async: + ifs = [] + end = iter._end + comp_iter = self.visit(node.children[4+is_async]) + while comp_iter and not isinstance(comp_iter[0], ast.comprehension): + ifs.append(comp_iter[0]) + end = comp_iter[0]._end + comp_iter = comp_iter[1:] + comp = ast.comprehension(target, iter, ifs) + comp.is_async = is_async + set_location(comp, node.children[0].start, end) + return [comp] + comp_iter + else: + comp = ast.comprehension(target, iter, []) + comp.is_async = is_async + set_location(comp, node) + return [comp] + + visit_old_comp_for = visit_comp_for + + def visit_comp_iter(self, node): + return self.visit(node.children[0]) + + def visit_comp_if(self, node): + cond = self.visit(node.children[1], LOAD) + if len(node.children) == 3: + comp_list = self.visit(node.children[2]) + return [cond] + comp_list + else: + return [cond] + + visit_old_comp_if = visit_comp_if + + visit_old_comp_iter = visit_comp_iter + + def visit_exprlist(self, node, ctx): + #Despite the name this returns a single expression + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + else: + elts = self._visit_list(node.children[::2], ctx) + result = ast.Tuple(elts, ctx) + set_location(result, node) + return result + + visit_testlist_safe = visit_exprlist + + def visit_old_test(self, node, ctx): + return self.visit(node.children[0], ctx) + + def visit_if_stmt(self, node): + endindex = len(node.children) + if is_token(node.children[-3], "else"): + orelse = self.visit(node.children[-1]) + endindex -= 3 + else: + orelse = None + while endindex: + test = self.visit(node.children[endindex-3], LOAD) + body = self.visit(node.children[endindex-1]) + result = ast.If(test, body, orelse) + start = node.children[endindex-4].start + end = node.children[endindex-2].end + set_location(result, start, end) + orelse = [result] + endindex -= 4 + return result + + def visit_import_stmt(self, node): + return self.visit(node.children[0]) + + def visit_import_name(self, node): + aliases = self.visit(node.children[1]) + result = ast.Import(aliases) + set_location(result, node) + return result + + def visit_dotted_as_names(self, node): + return self._visit_list(node.children[::2]) + + def visit_dotted_as_name(self, node): + child0 = node.children[0] + dotted_name = self.visit(child0) + if len(node.children) == 3: + value = ast.ImportExpr(0, dotted_name, False) + child2 = node.children[2] + asname = make_name(child2.value, STORE, child2.start, child2.end) + else: + value = ast.ImportExpr(0, dotted_name, True) + topname = dotted_name.split(".")[0] + asname = make_name(topname, STORE, child0.start, child0.end) + set_location(value, child0) + result = ast.alias(value, asname) + set_location(result, node) + return result + + def visit_dictsetmaker(self, node, ctx): + if ctx is not LOAD: + context_error(node) + if is_token(node.children[0], "**") or len(node.children) > 1 and is_token(node.children[1], ":"): + return self._dictmaker(node) + else: + return self._setmaker(node) + + #Helper for visit_dictsetmaker (for dictionaries) + def _dictmaker(self, node): + if len(node.children) == 4 and is_token(node.children[1], ":") and not is_token(node.children[3], ","): + #Comprehension form + key = self.visit(node.children[0], LOAD) + value = self.visit(node.children[2], LOAD) + generators = self.visit(node.children[3]) + result = ast.DictComp(key, value, generators) + set_location(result, node) + return result + index = 0 + items = [] + while len(node.children) > index: + if is_token(node.children[index], "**"): + d = self.visit(node.children[index+1], LOAD) + item = ast.DictUnpacking(d) + set_location(item, node.children[index].start, node.children[index+1].end) + index += 3 + else: + key = self.visit(node.children[index], LOAD) + value = self.visit(node.children[index+2], LOAD) + item = ast.KeyValuePair(key, value) + set_location(item, node.children[index].start, node.children[index+2].end) + index += 4 + items.append(item) + result = ast.Dict(items) + set_location(result, node) + return result + + #Helper for visit_dictsetmaker (for sets) + def _setmaker(self, node): + if len(node.children) == 2 and not is_token(node.children[1], ","): + #Comprehension form + elt = self.visit(node.children[0], LOAD) + generators = self.visit(node.children[1]) + result = ast.SetComp(elt, generators) + set_location(result, node) + return result + items = self._visit_list(node.children[::2], LOAD) + result = ast.Set(items) + set_location(result, node) + return result + + def visit_while_stmt(self, node): + test = self.visit(node.children[1], LOAD) + body = self.visit(node.children[3]) + if len(node.children) == 7: + orelse = self.visit(node.children[6]) + else: + orelse = None + result = ast.While(test, body, orelse) + set_location(result, node.children[0].start, node.children[2].end) + return result + + def visit_flow_stmt(self, node): + return self.visit(node.children[0]) + + def visit_break_stmt(self, node): + result = ast.Break() + set_location(result, node) + return result + + def visit_continue_stmt(self, node): + result = ast.Continue() + set_location(result, node) + return result + + def visit_return_stmt(self, node): + if len(node.children) == 2: + result = ast.Return(self.visit(node.children[1], LOAD)) + else: + result = ast.Return(None) + set_location(result, node) + return result + + def visit_raise_stmt(self, node): + result = ast.Raise() + set_location(result, node) + if len(node.children) == 1: + return result + result.exc = self.visit(node.children[1], LOAD) + if len(node.children) > 3: + if is_token(node.children[2], "from"): + result.cause = self.visit(node.children[3], LOAD) + else: + result.type = result.exc + del result.exc + result.inst = self.visit(node.children[3], LOAD) + if len(node.children) == 6: + result.tback = self.visit(node.children[5], LOAD) + return result + + def visit_yield_stmt(self, node): + result = ast.Expr(self.visit(node.children[0], LOAD)) + set_location(result, node) + return result + + def visit_yield_expr(self, node, ctx): + if ctx is not LOAD: + context_error(node) + if len(node.children) == 1: + result = ast.Yield(None) + else: + if is_token(node.children[1].children[0], "from"): + result = ast.YieldFrom(self.visit(node.children[1].children[1], LOAD)) + else: + result = ast.Yield(self.visit(node.children[1].children[0], LOAD)) + set_location(result, node) + return result + + def visit_try_stmt(self, node): + body = self.visit(node.children[2]) + index = 3 + handlers = [] + while len(node.children) > index and not hasattr(node.children[index], "value"): + #Except block. + type, name = self.visit(node.children[index]) + handler_body = self.visit(node.children[index+2]) + handler = ast.ExceptStmt(type, name, handler_body) + set_location(handler, node.children[index].start , node.children[index+1].end) + handlers.append(handler) + index += 3 + if len(node.children) > index and is_token(node.children[index], "else"): + orelse = self.visit(node.children[index+2]) + else: + orelse = [] + if is_token(node.children[-3], "finally"): + finalbody = self.visit(node.children[-1]) + else: + finalbody = [] + result = ast.Try(body, orelse, handlers, finalbody) + set_location(result, node.start, node.children[1].end) + return result + + def visit_except_clause(self, node): + type, name = None, None + if len(node.children) > 1: + type = self.visit(node.children[1], LOAD) + if len(node.children) > 3: + name = self.visit(node.children[3], STORE) + return type, name + + def visit_del_stmt(self, node): + if len(node.children) > 1: + result = ast.Delete(self._visit_list(node.children[1].children[::2], DEL)) + else: + result = ast.Delete([]) + set_location(result, node) + return result + + visit_subscriptlist = visit_testlist + visit_testlist1 = visit_testlist + + def visit_subscript(self, node, ctx): + if len(node.children) == 1 and not is_token(node.children[0], ":"): + return self.visit(node.children[0], ctx) + values = [None, None, None] + index = 0 + for child in node.children: + if is_token(child, ":"): + index += 1 + else: + values[index] = self.visit(child, LOAD) + result = ast.Slice(*values) + set_location(result, node) + return result + + def visit_sliceop(self, node, ctx): + if ctx is not LOAD: + context_error(node) + if len(node.children) == 2: + return self.visit(node.children[1], LOAD) + else: + return None + + def visit_assert_stmt(self, node): + test = self.visit(node.children[1], LOAD) + if len(node.children) > 2: + msg = self.visit(node.children[3], LOAD) + else: + msg = None + result = ast.Assert(test, msg) + set_location(result, node) + return result + + def visit_for_stmt(self, node, is_async=False): + target = self.visit(node.children[1], STORE) + iter = self.visit(node.children[3], LOAD) + body = self.visit(node.children[5]) + if len(node.children) == 9: + orelse = self.visit(node.children[8]) + else: + orelse = None + result = ast.For(target, iter, body, orelse) + result.is_async = is_async + set_location(result, node.children[0].start, node.children[4].end) + return result + + def visit_global_stmt(self, node): + cls = ast.Global if node.children[0].value == "global" else ast.Nonlocal + names = [child.value for child in node.children[1::2]] + result = cls(names) + set_location(result, node) + return result + + def visit_lambdef(self, node, ctx): + if ctx is not LOAD: + context_error(node) + test = self.visit(node.children[-1], LOAD) + stmt = ast.Return(test) + set_location(stmt, node.children[-1]) + if is_token(node.children[1], ":"): + args, vararg, kwonlyargs, kwarg = [], None, [], None + else: + args, vararg, kwonlyargs, kwarg = self._get_parameters(node.children[1]) + func = ast.Function("lambda", [], args, vararg, kwonlyargs, kwarg, [stmt], False) + set_location(func, node) + if is_token(node.children[1], ":"): + args = ast.arguments([], [], [], None, None, []) + else: + args = self._get_defaults_and_annotations(node.children[1]) + result = ast.Lambda(args, func) + set_location(result, node) + return result + + visit_old_lambdef = visit_lambdef + + visit_vfpdef = visit_tfpdef + + def visit_vname(self, node, ctx): + if ctx is PARAM: + child = node.children[0] + return make_name(child.value, ctx, child.start, child.end) + else: + return None + + def visit_star_expr(self, node, ctx): + result = ast.Starred(self.visit(node.children[1], ctx), ctx) + set_location(result, node) + return result + + def visit_with_stmt(self, node, is_async=False): + body = self.visit(node.children[-1]) + for item in node.children[-3:0:-2]: + ctx_mngr, opt_vars = self.visit(item) + withstmt = ast.With(ctx_mngr, opt_vars, body) + set_location(withstmt, item) + body = [withstmt] + set_location(withstmt, node.children[0].start, node.children[-2].end) + withstmt.is_async = is_async + return withstmt + + def visit_with_item(self, node): + ctx_mngr = self.visit(node.children[0], LOAD) + if len(node.children) == 1: + return ctx_mngr, None + else: + return ctx_mngr, self.visit(node.children[2], STORE) + + def visit_async_stmt(self, node): + return self.visit(node.children[1], True) + + visit_async_funcdef = visit_async_stmt + + def visit_print_stmt(self, node): + if len(node.children) > 1 and is_token(node.children[1], ">>"): + dest = self.visit(node.children[2], LOAD) + items = node.children[4::2] + else: + dest = None + items = node.children[1::2] + values = self._visit_list(items, LOAD) + nl = not is_token(node.children[-1], ",") + result = ast.Print(dest, values, nl) + set_location(result, node) + return result + + def visit_exec_stmt(self, node): + body = self.visit(node.children[1], LOAD) + globals, locals = None, None + if len(node.children) > 3: + globals = self.visit(node.children[3], LOAD) + if len(node.children) > 5: + locals = self.visit(node.children[5], LOAD) + result = ast.Exec(body, globals, locals) + set_location(result, node) + return result + + def visit_special_operation(self, node, ctx): + if ctx is not LOAD: + context_error(node) + name = node.children[0].value + if len(node.children) == 3: + args = [] + else: + args = self._visit_list(node.children[2].children[::2], LOAD) + result = ast.SpecialOperation(name, args) + set_location(result, node) + return result + + def visit_string(self, node, ctx): + + def convert_parts_to_expr(): + if not current_parts: + return None + if len(current_parts) == 1: + string = ast.Str(current_parts[0].s, current_parts[0].prefix, None) + else: + # Our string parts may be any combination of byte and unicode + # strings, as this is valid in Python 2. We therefore decode + # the strings into unicode before concatenating. + text = "".join(decode_str(p.s) for p in current_parts) + string = ast.Str(text, current_parts[0].prefix, current_parts[:]) + start = current_parts[0].lineno, current_parts[0].col_offset + set_location(string, start, current_parts[-1]._end) + current_parts[:] = [] + return string + + if ctx is not LOAD: + context_error(node) + parts = [] + for p in self._visit_list(node.children, LOAD): + if isinstance(p, list): + parts.extend(p) + else: + parts.append(p) + current_parts = [] + exprs = [] + for part in parts: + if part is None: + #Conversion -- currently ignored. + pass + elif isinstance(part, ast.StringPart): + current_parts.append(part) + else: + assert isinstance(part, ast.expr), part + string = convert_parts_to_expr() + if string: + exprs.append(string) + exprs.append(part) + string = convert_parts_to_expr() + if string: + exprs.append(string) + if len(exprs) == 1: + return exprs[0] + result = ast.JoinedStr(exprs) + set_location(result, node) + return result + + def visit_fstring_part(self, node, ctx): + nodes_to_visit = [] + for node in node.children: + if node.name == 'format_specifier': + # Flatten format_specifiers first + nodes_to_visit += [ n for n in node.children if not n.name == 'FSTRING_SPEC' ] + else: + nodes_to_visit += [node] + + return self._visit_list(nodes_to_visit, ctx) + + def visit_format_specifier(self, node, ctx): + # This will currently never be visited because of the above flattening + assert ctx is LOAD + #Currently ignored + return None + + def visit_CONVERSION(self, node, ctx): + return None + + def visit_COLON(self, node, ctx): + return None + + def visit_EQUAL(self, node, ctx): + return None + + def visit_FSTRING_START(self, node, ctx): + string = self.visit_STRING(node, ctx) + # Push the current prefix onto the prefix stack + self.outer_prefix_stack.append(string.prefix) + return string + + def visit_FSTRING_END(self, node, ctx): + string = self.visit_STRING(node, ctx) + # We're done with this f-string, so pop its prefix off the prefix stack + self.outer_prefix_stack.pop() + return string + + visit_FSTRING_MID = visit_STRING + +# In the following function, we decode to `latin-1` in order to preserve +# the byte values present in the string. This is an undocumented feature of +# this encoding. See also the `test_python_sanity.py` test file in `/tests`. + +def decode_str(s): + if isinstance(s, bytes): + return str(s, 'latin-1') + else: + return s + +def context_error(node): + s = SyntaxError("Invalid context") + s.lineno, s.offset = node.start + raise s + +def is_token(node, text): + '''Holds if `node` is a token (terminal) and its textual value is `text`''' + return hasattr(node, "value") and node.value == text + +def get_node_value(node): + '''Get the value from a NAME node, + stripping redundant CPT nodes''' + while hasattr(node, "children"): + assert len(node.children) == 1 + node = node.children[0] + return node.value + +#Mapping from comparison operator strings to ast classes. +COMP_OP_CLASSES = { + "<": ast.Lt, + "<=": ast.LtE, + ">": ast.Gt, + ">=": ast.GtE, + "==": ast.Eq, + "<>": ast.NotEq, + "!=": ast.NotEq, + "in": ast.In, + "not in": ast.NotIn, + "is": ast.Is, + "is not": ast.IsNot, +} + +#Mapping from multiplicative operator strings to ast classes. +TERM_OP_CLASSES = { + '*': ast.Mult, + '/': ast.Div, + '%': ast.Mod, + '//': ast.FloorDiv, + '@': ast.MatMult, +} + +#Mapping from additive operator strings to ast classes. +FACTOR_OP_CLASSES = { + '+': ast.UAdd, + '-': ast.USub, + '~': ast.Invert, +} + +#Mapping from assignment operator strings to ast classes. +AUG_ASSIGN_OPS = { + '+=': ast.Add, + '-=': ast.Sub, + '*=': ast.Mult, + '/=': ast.Div, + '%=': ast.Mod, + '&=': ast.BitAnd, + '|=': ast.BitOr, + '^=': ast.BitXor, + '<<=': ast.LShift, + '>>=': ast.RShift, + '**=': ast.Pow, + '//=': ast.FloorDiv, + '@=': ast.MatMult, +} + +def make_name(name, ctx, start, end): + '''Create a `Name` ast node''' + variable = ast.Variable(name) + node = ast.Name(variable, ctx) + set_location(node, start, end) + return node + +def set_location(astnode, cptnode_or_start, end=None): + '''Set the location of `astnode` from + either the CPT node or pair of locations. + ''' + if end is None: + astnode.lineno, astnode.col_offset = cptnode_or_start.start + astnode._end = cptnode_or_start.end + else: + astnode.lineno, astnode.col_offset = cptnode_or_start + astnode._end = end + +def split_full_prefix(s): + """Splits a prefix (or a string starting with a prefix) into prefix and quote parts.""" + quote_start = 0 + # First, locate the end of the prefix (and the start of the quotes) + while s[quote_start] not in "'\"}": + quote_start += 1 + # Next, find the end of the quotes. This is either one character past `quote_start`, or three + # (for triple-quoted strings). + if s[quote_start:quote_start + 3] in ("'''",'"""'): + prefix_end = quote_start + 3 + else: + prefix_end = quote_start + 1 + + return s[:quote_start], s[quote_start:prefix_end] + + +def split_string(s, outer_prefix): + """Splits a string into prefix, quotes, and content.""" + s_prefix, s_quotes = split_full_prefix(s) + + quote_start = len(s_prefix) + prefix_end = quote_start + len(s_quotes) + + # If the string starts with `}`, it is a non-inital string part of an f-string. In this case we + # must use the prefix and quotes from the outer f-string. + if s[0] == '}': + prefix, quotes = split_full_prefix(outer_prefix) + else: + prefix, quotes = s_prefix, s_quotes + + # The string either ends with a `{` (if it comes before an interpolation inside an f-string) + # or else it ends with the same quotes as it begins with. + if s[-1] == "{": + content = s[prefix_end:-1] + else: + content = s[prefix_end:-len(quotes)] + + return prefix.lower(), quotes, content + +def get_text(s, outer_prefix): + """Returns a cleaned-up text version of the string, normalizing the quotes and removing any + format string marker.""" + prefix, quotes, content = split_string(s, outer_prefix) + return prefix.strip("fF") + quotes + content + quotes + +def parse_string(s, logger, outer_prefix): + '''Gets the prefix and escaped string text''' + prefix, quotes, content = split_string(s, outer_prefix) + saved_content = content + try: + ends_with_illegal_character = False + # If the string ends with the same quote character as the outer quotes (and/or backslashes) + # (e.g. the first string part of `f"""hello"{0}"""`), we must take care to not accidently create + # the ending quotes at the wrong place. (`literal_eval` would be unhappy with `"""hello""""` + # as an input.) To do this, we insert an extra space at the end (that we then must remember + # to remove later on). + if content.endswith(quotes[0]) or content.endswith('\\'): + ends_with_illegal_character = True + content = content + " " + text = prefix.strip("fF") + quotes + content + quotes + s = literal_eval(text) + except Exception as ex: + # Something has gone wrong, but we still have the original form - Should be OK. + logger.warning("Unable to parse string %s: %s", text, ex) + logger.traceback() + ends_with_illegal_character = False + s = saved_content + if isinstance(s, bytes): + try: + s = s.decode(sys.getfilesystemencoding()) + except UnicodeDecodeError: + s = decode_str(s) + if ends_with_illegal_character: + s = s[:-1] + return prefix + quotes, s + +ESCAPES = "" + +def get_numeric_value(node): + '''Gets numeric value from a CPT leaf node.''' + value = node.value + value = value.replace("_", "") + chars = set(value.lower()) + try: + if u'.' in chars or u'e' in chars or u'j' in chars: + # Probable float or hex or imaginary + return literal_eval(value) + if len(value) > 1 and value[0] == u'0' and value[1] not in u'boxlBOXL': + # Old-style octal + value = u'0o' + value[1:] + if value[-1] in u'lL': + return literal_eval(value[:-1]) + return literal_eval(value) + except ValueError: + raise ParseError("Not a valid numeric value", node.type, node.value, (node.start, node.end)) + +#This rewriting step is performed separately for two reasons. +# 1. It is complicated +# 2. In future, we may want to make the AST more like the syntax and less like the semantics. +# Keeping step separate should make that a bit easier. +def rewrite_comp(node): + if hasattr(node, "function"): + return + gens = node.generators + if hasattr(node, "elt"): + elt = node.elt + del node.elt + else: + elt = ast.Tuple([node.value, node.key], LOAD) + elt.lineno = node.key.lineno + elt.col_offset = node.key.col_offset + elt._end = node.value._end + del node.key + del node.value + y = ast.Yield(elt) + copy_location(elt, y) + stmt = ast.Expr(y) + copy_location(elt, stmt) + for gen in reversed(gens[1:]): + for if_ in gen.ifs: + stmt = ast.If(if_, [stmt], None) + copy_location(if_, stmt) + stmt = ast.For(gen.target, gen.iter, [stmt], None) + if getattr(gen, "is_async", False): + stmt.is_async = True + copy_location(node, stmt) + for if_ in gens[0].ifs: + stmt = ast.If(if_, [stmt], None) + copy_location(if_, stmt) + p0 = ".0" + pvar = ast.Variable(p0) + arg = ast.Name(pvar, LOAD) + copy_location(node, arg) + stmt = ast.For(gens[0].target, arg, [stmt], None) + if getattr(gens[0], "is_async", False): + stmt.is_async = True + copy_location(node, stmt) + pvar = ast.Variable(p0) + arg = ast.Name(pvar, PARAM) + copy_location(node, arg) + function = ast.Function(COMP_NAMES[type(node).__name__], [],[arg], None, None, None, [ stmt ]) + copy_location(node, function) + node.function = function + node.iterable = gens[0].iter + del node.generators + + +COMP_NAMES = { + 'GeneratorExp' : 'genexpr', + 'DictComp' : 'dictcomp', + 'ListComp' : 'listcomp', + 'SetComp' : 'setcomp' +} + +def copy_location(src, dest): + '''Copy location from `src` to `dest`''' + dest.lineno = src.lineno + dest.col_offset = src.col_offset + dest._end = src._end + +def convert(logger, cpt): + '''Covert concrete parse tree as specified by blib2to3/Grammar.txt + to the AST specified by semmle/python/master.py + ''' + return Convertor(logger).visit(cpt) diff --git a/python/extractor/semmle/python/parser/dump_ast.py b/python/extractor/semmle/python/parser/dump_ast.py new file mode 100644 index 00000000000..fbeaabb2939 --- /dev/null +++ b/python/extractor/semmle/python/parser/dump_ast.py @@ -0,0 +1,151 @@ +# dump_ast.py + +# Functions for dumping the internal Python AST in a human-readable format. + +import sys +import semmle.python.parser.tokenizer +import semmle.python.parser.tsg_parser +from semmle.python.parser.tsg_parser import ast_fields +from semmle.python import ast +from semmle import logging +from semmle.python.modules import PythonSourceModule + + + +def get_fields(cls): + """Gets the fields of the given class, followed by the fields of its (single-inheritance) + superclasses, if any. + Only includes fields for classes in `ast_fields`.""" + if cls not in ast_fields: + return () + s = cls.__bases__[0] + return ast_fields[cls] + get_fields(s) + +def missing_fields(known, node): + """Returns a list of fields in `node` that are not in `known`.""" + return [field + for field in dir(node) + if field not in known + and not field.startswith("_") + and not field in ("lineno", "col_offset") + and not (isinstance(node, ast.Name) and field == "id") + ] + +class AstDumper(object): + def __init__(self, output=sys.stdout, no_locations=False): + self.output = output + self.show_locations = not no_locations + + def visit(self, node, level=0, visited=None): + if visited is None: + visited = set() + if node in visited: + output.write("{} CYCLE DETECTED!\n".format(indent)) + return + visited = visited.union({node}) + output = self.output + cls = node.__class__ + name = cls.__name__ + indent = ' ' * level + if node is None: # Special case for `None` to avoid printing `NoneType`. + name = 'None' + if cls == str: # Special case for bare strings + output.write("{}{}\n".format(indent, repr(node))) + return + # In some places, we have non-AST nodes in lists, and since these don't have a location, we + # simply print their name instead. + # `ast.arguments` is special -- it has fields but no location + if hasattr(node, 'lineno') and not isinstance(node, ast.arguments) and self.show_locations: + position = (node.lineno, node.col_offset, node._end[0], node._end[1]) + output.write("{}{}: [{}, {}] - [{}, {}]\n".format(indent, name, *position)) + else: + output.write("{}{}\n".format(indent, name)) + + + fields = get_fields(cls) + unknown = missing_fields(fields, node) + if unknown: + output.write("{}UNKNOWN FIELDS: {}\n".format(indent, unknown)) + for field in fields: + value = getattr(node, field, None) + # By default, the `parenthesised` field on expressions has no value, so it's easier to + # just not print it in that case. + if field == "parenthesised" and value is None: + continue + # Likewise, the default value for `is_async` is `False`, so we don't need to print it. + if field == "is_async" and value is False: + continue + output.write("{} {}:".format(indent,field)) + if isinstance(value, list): + output.write(" [") + if len(value) == 0: + output.write("]\n") + continue + output.write("\n") + for n in value: + self.visit(n, level+2, visited) + output.write("{} ]\n".format(indent)) + # Some AST classes are special in that the identity of the object is the only thing + # that matters (and they have no location info). For this reason we simply print the name. + elif isinstance(value, (ast.expr_context, ast.boolop, ast.cmpop, ast.operator, ast.unaryop)): + output.write(' {}\n'.format(value.__class__.__name__)) + elif isinstance(value, ast.AstBase): + output.write("\n") + self.visit(value, level+2, visited) + else: + output.write(' {}\n'.format(repr(value))) + + +class StdoutLogger(logging.Logger): + def log(self, level, fmt, *args): + sys.stdout.write(fmt % args + "\n") + +def old_parser(inputfile, logger): + mod = PythonSourceModule(None, inputfile, logger) + logger.close() + return mod.old_py_ast + +def args_parser(): + 'Parse command_line, returning options, arguments' + from optparse import OptionParser + usage = "usage: %prog [options] python-file" + parser = OptionParser(usage=usage) + parser.add_option("-o", "--old", help="Dump old AST.", action="store_true") + parser.add_option("-n", "--new", help="Dump new AST.", action="store_true") + parser.add_option("-l", "--no-locations", help="Don't include location info in dump", action="store_true") + parser.add_option("-d", "--debug", help="Print debug information.", action="store_true") + return parser + +def main(): + parser = args_parser() + options, args = parser.parse_args(sys.argv[1:]) + + if options.debug: + global DEBUG + DEBUG = True + + if len(args) != 1: + sys.stderr.write("Error: wrong number of arguments.\n") + parser.print_help() + sys.exit(1) + + inputfile = args[0] + + if options.old and options.new: + sys.stderr.write("Error: options --old and --new are mutually exclusive.\n") + sys.exit(1) + + if not (options.old or options.new): + sys.stderr.write("Error: Must specify either --old or --new.\n") + sys.exit(1) + + with StdoutLogger() as logger: + + if options.old: + ast = old_parser(inputfile, logger) + else: + ast = semmle.python.parser.tsg_parser.parse(inputfile, logger) + AstDumper(no_locations=options.no_locations).visit(ast) + +if __name__ == '__main__': + main() diff --git a/python/extractor/semmle/python/parser/tokenizer.py b/python/extractor/semmle/python/parser/tokenizer.py new file mode 100644 index 00000000000..6ddf3fa4d03 --- /dev/null +++ b/python/extractor/semmle/python/parser/tokenizer.py @@ -0,0 +1,1146 @@ +# This file is AUTO-GENERATED. DO NOT MODIFY +# To regenerate: run "python3 -m tokenizer_generator.gen_state_machine tokenizer_generator/state_transition.txt tokenizer_generator/tokenizer_template.py" + +import codecs +import re +import sys + +from blib2to3.pgen2.token import * + +if sys.version < '3': + from array import array + def toarray(b): + return array('B', b) +else: + def toarray(b): + return b + +IDENTIFIER_CLASS = 1 +IDENTIFIER_CONTINUE_CLASS = 2 +ERROR_CLASS = 0 +# 3586 entries in ID index +ID_INDEX = toarray( + b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x01\x11\x12\x13\x01\x14\x15\x16\x17\x18\x19\x1a\x1b\x01\x1c' + b'\x1d\x1e\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f !"\x1f#$\x1f\x1f\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01%\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01&' + b"\x01\x01\x01\x01'\x01()*+,-\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01" + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01.\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01/0\x01123' + b'456789\x01:;<=>?@\x1fABCDEFGHIJKL\x1fMNO\x1f' + b'\x01\x01\x01PQR\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01\x01\x01\x01S\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x01\x01T\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01\x01UV\x1f\x1fWX\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01Y\x01\x01Z\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01[\\\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f]\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f^_\x1f`abc\x1f\x1fd\x1f\x1f\x1f\x1f\x1f' + b'efg\x1f\x1f\x1f\x1f\x1fhi\x1f\x1f\x1f\x1fj\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01k\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01lm\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01n\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01o\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01\x01p\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1fq' +) +ID_CHUNKS = ( + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\n\x00TUUUUU\x15\x80TUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x84\x10\x00UUUUU\x15UUUUUUU\x15UU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05PUU\x05\x00\x00\x00U\x01\x00\x11\x00\x00\x00\x00'), + toarray(b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaaUQPE\x00\x90\x15QUUUUEUUUUUUUUUUUUUUUUUUUUEUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x85\xaaPUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUTUUUUUUUU\x15\x04\x00UUUUUUUUUU\x01\x00\xa8\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x8a(\x8a\x00\x00UUUUUU\x15@\x15\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\xaa\xaa*\x00UUUUUUUUUU\x95\xaa\xaa\xaa\xaa\xaa\xaa\xaa\nPVUUUUUUUUUUUUUUUUUUUUUUUU\xa4\xaa\x82\xaa\x96\xa2Z\xaa\xaaZA'), + toarray(b'\x00\x00\x00\x00YUUUUUUU\xaa\xaa\xaa\xaa\xaa\xaa*TUUUUUUUUUUUUUUUUUUUUU\xa5\xaa\xaa\x06\x00\x00\x00\xaa\xaaZUUUUUUU\x95\xaa\xaa\x05\x10\x08'), + toarray(b'UUUUU\xa5\x9a\xaa\xaa\xa9\xa9\n\x00\x00\x00\x00UUUUUU\xa9\x00UU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUQU\x05\x00\x00\x00\x00\x80\xaa\xaa\xaa\x8a\xaa\xaa\xaa\xaa\xaa\xaa\xaa'), + toarray(b'\xaaUUUUUUUUUUUUU\xa5\xa6\xaa\xaa\xaa\xaa\xa9\xaaUU\xa5\xa0\xaa\xaaTUUU\xa9TUAAUUUUUQU\x11P\x05\xa6\xaa\x82\x82\x1a\x00\x80\x00E\xa5\xa0\xaa\xaa\x05\x00\x00!'), + toarray(b'\xa8T\x15@AUUUUUQUQ\x14\x05\xa2*\x80\x82\n\x08\x00T\x11\x00\xa0\xaa\xaaZ\t\x00\x00\xa8TUEEUUUUUQUQT\x05\xa6\xaa\x8a\x8a\n\x01\x00\x00\x00\xa5\xa0\xaa\xaa\x00\x00\xa4\xaa'), + toarray(b'\xa8TUAAUUUUUQUQT\x05\xa6\xaa\x82\x82\n\x00\xa0\x00E\xa5\xa0\xaa\xaa\x04\x00\x00\x00`T\x15PQ\x05\x14Q@\x01\x15PUU\x05\xa0*\xa0\xa2\n\x01\x80\x00\x00\x00\xa0\xaa\xaa\x00\x00\x00\x00'), + toarray(b'\xaaVUQQUUUUUQUUU\x05\xa4\xaa\xa2\xa2\n\x00(\x15\x00\xa5\xa0\xaa\xaa\x00\x00\x00\x00\xa9TUQQUUUUUQUUT\x05\xa6\xaa\xa2\xa2\n\x00(\x00\x10\xa5\xa0\xaa\xaa\x14\x00\x00\x00'), + toarray(b'\xaaTUQQUUUUUUUUU\x95\xa6\xaa\xa2\xa2\x1a\x00\x95\x00@\xa5\xa0\xaa\xaa\x00\x00PU\xa0TUUU\x15PUUUUUEUU\x04U\x15 \x80\xaa"\xaa\xaa\x00\xa0\xaa\xaa\xa0\x00\x00\x00'), + toarray(b'TUUUUUUUUUUUY\xaa*\x00U\x95\xaa*\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14Q\x15UUUUUUDUUY\xaa\xaa\x06U\x11\xaa\n\xaa\xaa\nU\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x01\x00\x00\x00\x00\x00\n\x00\xaa\xaa\n\x00\x00\x88\x08\xa0UUTUUUUUUUU\x01\xa8\xaa\xaa\xaa\xaa\xa2U\xa9\xaa\xaa\xa8\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x02\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUU\x95\xaa\xaa\xaa\xaaj\xaa\xaa\n\x00U\xa5Z\xa5\xa6\x96\xaaZ\xa9VUU\xa5\xaa\xaa\x9a\xaa\xaa\xaa\nUUUUUUUUUE\x00\x04UUUUUUUUUU\x15U'), + toarray(b'UUUUUUUUUUUUUUUUUUQ\x05U\x15Q\x05UUUUUUUUUUQ\x05UUUUUUUUQ\x05U\x15Q\x05UUU\x15UUUUUUUUUU'), + toarray(b'UUUUQ\x05UUUUUUUUUUUUUUUU\x15\xa8\x00\x00\xa8\xaa\n\x00\x00\x00UUUU\x00\x00\x00\x00UUUUUUUUUUUUUUUUUUUUU\x05U\x05'), + toarray(b'TUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUAUUUUTUUUUU\x15\x00UUUUUUUUUUUUUUUUUU\x15PUU\x01\x00'), + toarray(b'UUUQ\xa5\x02\x00\x00UUUU\xa5\x02\x00\x00UUUU\xa5\x00\x00\x00UUUQ\xa1\x00\x00\x00UUUUUUUUUUUUU\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa@\x00\t\xaa\xaa\n\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x80\n\xaa\xaa\n\x00UUUUUUUUUUUUUUUUUUUUUU\x01\x00UUUUUUUUUU\x19\x00UUUUUUUUUUUUUUUUU\x05\x00\x00'), + toarray(b'UUUUUUU\x15\xaa\xaa\xaa\x00\xaa\xaa\xaa\x00\x00\xa0\xaa\xaaUUUUUUU\x05U\x01\x00\x00UUUUUUUUUUU\x00UUUUUU\x05\x00\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUU\x95\xaa\x00UUUUUUUUUUUUU\xa9\xaa*\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x82\xaa\xaa\n\x00\xaa\xaa\n\x00\x00@\x00\x00\xaa\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\xaaVUUUUUUUUUUU\xaa\xaa\xaa\xaaVU\x00\xaa\xaa\n\x00\x00\x00\x80\xaa\xaa\x00\x00\x00jUUUUUUU\xa9\xaa\xaaZ\xaa\xaaZUUUUUUUUUU\xa5\xaa\xaa\xaa\x00\x00\x00'), + toarray(b'UUUUUUUUU\xaa\xaa\xaa\xaa\xaa\x00\x00\xaa\xaa\nT\xaa\xaaZUUUUUUUU\x05UU\x01\x00UUUUUUUUUU\x15T\x00\x00\x00\x00*\xaa\xaa\xaa\xaa\xaaVYU\x96\x1a\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x8a\xaa'), + toarray(b'UUUUU\x05U\x05UUUUUUUUU\x05U\x05UUDDUUUUUUU\x05UUUUUUUUUUUUUQU\x11PQU\x01UPU\x00UUU\x01PQU\x01'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x02\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x04\x00\x00@\x00\x00\x00\x00UUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\xaa\x02\x08\xa8\xaa\xaa\x02\x00\x00\x00'), + toarray(b'\x10@PUU\x04U\x05\x00\x11QUUU\x05U\x00T\x05\x10\x00\x00\x00\x00UUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUU\x15UUUUUUUUUUU\x15UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01@\x95Z\x00\x00\x00'), + toarray(b'UUUUUUUUUE\x00\x04UUUUUUUUUUUUUU\x00@\x00\x00\x00\x80UUUUU\x15\x00\x00U\x15U\x15U\x15U\x15U\x15U\x15U\x15U\x15\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00T\x00\x00\x00\x00\x00\x00TU\xa5\xaaT\x05U\x01TUUUUUUUUUUUUUUUUUUUU\x15hUTUUUUUUUUUUUUUUUUUUUUU\x15U'), + toarray(b'\x00TUUUUUUUUUUTUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00UUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUU\x05'), + toarray(b'UUU\x01UUUU\xaa\xaaZ\x00\x00\x00\x00\x00UUUUUUUUUUU\x95\x00\xaa\xaaJUUUUUUU\xa5UUUUUUUUUUUUUUUUUUUU\n\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00@UUPUUUUUUUUUUUUUUUUUUUUUUUUUAUUUUUUUUUUUUUP\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@UU'), + toarray(b'ee\x95UUUUU\x95\xaa\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUU\x00\x00\x00ZUUUUUUUUUUUU\xaa\xaa\xaa\xaa\n\x00\x00\xaa\xaa\n\x00\xaa\xaa\xaa\xaaZU@\x94'), + toarray(b'\xaa\xaaZUUUUUU\xa5\xaa\nUUUUU\x95\xaa\xaa\xaa\x00\x00\x00UUUUUUU\x01\xaaUUUUUUUUUUU\x95\xaa\xaa\xaa\x02\x00\x00@\xaa\xaa\n\x00UYUU\xaa\xaaZ\x15'), + toarray(b'UUUUUUUUUU\xa9\xaa\xaa*\x00\x00\x95UU\n\xaa\xaa\n\x00UUUUU\x15\x90ZUUUUUUUUUUUU\xa6\x96V\xa5\x19\x00\x00\x00\x00\x00@\x05UU\x95\xaaP)\x00\x00'), + toarray(b'T\x15T\x15T\x15\x00\x00U\x15U\x15UUUUUUUUUU\x15UUU\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUU\x95\xaa*\n\xaa\xaa\n\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00\x00\x00UUUUU\x15@UUUUUUUUUUUU\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUU\x05UUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'U\x15\x00\x00@U\x00dUUQUU\x15U\x11EQUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00@UUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUU\x05\x00\x00\x00\x00UUUUUUUUUUUUUUUUPUUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUU\x00'), + toarray(b'\xaa\xaa\xaa\xaa\x00\x00\x00\x00\xaa\xaa\xaa\xaa\x80\x02\x00\x00\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00UQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01'), + toarray(b'\x00\x00\x00\x00\xaa\xaa\n\x00TUUUUU\x15\x80TUUUUU\x15\x00\x00PUUUUUUUUUUUUUUUUUUUUU\x15PUPUPUP\x01\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUTUUUUU\x15UUUU\x15EUUU\x05UUU\x05\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUU\x01UUUUUUUUUUUU\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUU\x00\x00\x00TUUUUUU\x15\x00UUUUUUUUU\xa5*\x00UUUUUUU\x05UUUUUUUUU\x00UUT\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\xaa\xaa\n\x00UUUUUUUUU\x00UUUUUUUUU\x00'), + toarray(b'UUUUUUUUUU\x00\x00UUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUU\x15\x00\x00UUUUU\x05\x00\x00UU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'U\x05QUUUUUUUUUUE\x01AUUUUU\x05\x00\x00UUUUU\x15\x00\x00UUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUU\x15\x05\x00\x00'), + toarray(b'UUUUU\x05\x00\x00UUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUU\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\xa9(\x00\xaaUTTUUUUUU\x05*\x80\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUU\x01UUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00UUTUUUUUU)\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUU\x05\x00\x00UUUUU\x05\x00\x00UUUU\x15\x00\x00\x00UUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUU\x15\x00\x00\x00UUUUUUUUUUUU\x15\x00\x00\x00'), + toarray(b'UUUUUUUUU\xaa\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUU\x01\x00@\x00\x00UUUUU\xa5\xaa\xaa\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUU\x15\x00\x00'), + toarray(b'jUUUUUUUUUUUUU\xaa\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\xa0\xaa\xaa\x00\x00\x00\x80jUUUUUUUUUUU\xaa\xaa*\x00\x00\x00\x00\x00UUUUUU\x01\x00\xaa\xaa\n\x00'), + toarray(b'jUUUUUUUU\x95\xaa\xaa\xaa\xa2\xaa\xaa\x00)\x00\x00UUUUUUUU\x95\x10\x00\x00jUUUUUUUUUUU\x95\xaa\xaa\xaaV\x01\xa8\x02\xaa\xaa\x1a\x01\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUEUUUUUU\xaa\xaa\xaa\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\x15QEUUUEUU\x01\x00UUUUUUUUUUU\x95\xaa\xaa*\x00\xaa\xaa\n\x00'), + toarray(b'\xaaTUAAUUUUUQUQT\x85\xa6\xaa\x82\x82\n\x01\x80\x00T\xa5\xa0\xaa\x02\xaa\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUU\xa9\xaa\xaa\xaaj\x15\x00\xaa\xaa\n`\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUU\xaa\xaa\xaa\xaa\xaaE\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUU\x95\xaa\n\xaa\xaa\x02\x00\x00\x00\x00\x00U\n\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUU\xaa\xaa\xaa\xaa\x02\x01\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUU\x95\xaa\xaa\xaa\x01\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUU\x15\xa8\xaa\xaa\xaa\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUU\xaa\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUUUU\xaa\xaa\n\x00\x00\x00\x00@'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUPUUUUUUUUU\xa9\xaa\xa0\xaaF\x02\x00\x00\x00\x00\x00\x00'), + toarray(b'\xa9\xaajUUUUUUUUU\x95\xaa\x9a*\x00\x80\x00\x00\xa9\xaa\xaaUUUUUUUUUUU\xa5\xaa\xaa\xaa\n\x04\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUU\x01\x00'), + toarray(b'UUQUUUUUUUU\x95\xaa*\xaa\xaa\x01\x00\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00PUUUUUUU\xa0\xaa\xaa\xaa\xaa\xaa\xa8\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'U\x15EUUUUUUUUU\xa9* \x8a\xaa\x9a\x00\x00\xaa\xaa\n\x00UEQUUUUUUU\xa5*\x8a\xaa\x01\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUU\x95*\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUU\x01\x00UUUUUUU\x15\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUU\x05\xaa\x02\x00\x00'), + toarray(b'UUUUUUUUUUUU\xaa*\x00\x00U\x00\x00\x00\xaa\xaa\n\x00@UUUUU\x00TUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUU\x15\x80\xa9\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x80jUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00E\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00'), + toarray(b'UUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00U\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00UUU\x01UU\x01\x00UU\x05(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\n\xa8*\x00\x80\xaa*\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\xa0\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUQUUUUUUUUUUUUUUUUUQ\x10\x14TQUUETUTUUUUUUUUUUUUUU'), + toarray(b'UE\x15TUQUQUUUUUUE\x15U\x11PUQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05UUUUUUQUUUUU\x15UUUUUUU\x15U'), + toarray(b'UUUUUQUUUUUUUQUUUUU\x15UUUUUUU\x15UUUUUUQUUUUUUUQUUUUU\x15UU\xa0\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa'), + toarray(b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa*\x80\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x02\x00\x08\x00\x00\x00\x02\x00\x00\x00\x00\x80\xaa\xa8\xaa\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\xaa*\xaa\xaa\xaa\xaa\x82\xaa\x8a\xa2*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUU\x01\xaajU\x05\xaa\xaa\n\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUU\xaa\xaa\xaa\n\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01\x00\x00\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUU\xaaj\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UTUUUUUU\x14ATU\x15UD\x00\x10@DT\x14ADD\x14A\x15U\x15UT\x11UUEUUUU\x00TTEUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUU\x01\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUU\x05UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00UUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x00'), +) +#0 = ERROR_CLASS(0) +#1 = IDENTIFIER_CLASS(1) +#2 = CharacterClass 2 [] +#3 = CharacterClass 3 ['\t', ' '] +#4 = CharacterClass 4 ['\n', '\r'] +#5 = CharacterClass 5 ['\x0c'] +#6 = CharacterClass 6 ['!'] +#7 = CharacterClass 7 ['"'] +#8 = CharacterClass 8 ['#'] +#9 = CharacterClass 9 ['$'] +#10 = CharacterClass 10 ['%', '&', '^', '|'] +#11 = CharacterClass 11 ["'"] +#12 = CharacterClass 12 ['('] +#13 = CharacterClass 13 [')'] +#14 = CharacterClass 14 ['*'] +#15 = CharacterClass 15 ['+'] +#16 = CharacterClass 16 [','] +#17 = CharacterClass 17 ['-'] +#18 = CharacterClass 18 ['.'] +#19 = CharacterClass 19 ['/'] +#20 = CharacterClass 20 ['0'] +#21 = CharacterClass 21 ['1'] +#22 = CharacterClass 22 ['2', '3', '4', '5', '6', '7'] +#23 = CharacterClass 23 ['8', '9'] +#24 = CharacterClass 24 [':'] +#25 = CharacterClass 25 [';'] +#26 = CharacterClass 26 ['<'] +#27 = CharacterClass 27 ['='] +#28 = CharacterClass 28 ['>'] +#29 = CharacterClass 29 ['@'] +#30 = CharacterClass 30 ['A', 'C', 'D', 'c'] +#31 = CharacterClass 31 ['B', 'b'] +#32 = CharacterClass 32 ['E'] +#33 = CharacterClass 33 ['F', 'f'] +#34 = CharacterClass 34 ['J', 'j'] +#35 = CharacterClass 35 ['L'] +#36 = CharacterClass 36 ['N'] +#37 = CharacterClass 37 ['O', 'o'] +#38 = CharacterClass 38 ['R'] +#39 = CharacterClass 39 ['U', 'u'] +#40 = CharacterClass 40 ['X', 'x'] +#41 = CharacterClass 41 ['['] +#42 = CharacterClass 42 ['\\'] +#43 = CharacterClass 43 [']'] +#44 = CharacterClass 44 ['_'] +#45 = CharacterClass 45 ['`'] +#46 = CharacterClass 46 ['a', 'd'] +#47 = CharacterClass 47 ['e'] +#48 = CharacterClass 48 ['l'] +#49 = CharacterClass 49 ['r'] +#50 = CharacterClass 50 ['s'] +#51 = CharacterClass 51 ['{'] +#52 = CharacterClass 52 ['}'] +#53 = CharacterClass 53 ['~'] +CLASS_TABLE = toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x04\x00\x05\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x06\x07\x08\t\n\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x16\x16\x16\x16\x16\x17\x17\x18\x19\x1a\x1b\x1c\x00\x1d\x1e\x1f\x1e\x1e !\x01\x01\x01"\x01#\x01$%\x01\x01&\x01\x01\'\x01\x01(\x01\x01)*+\n,-.\x1f\x1e./!\x01\x01\x01"\x010\x01\x01%\x01\x0112\x01\'\x01\x01(\x01\x013\n45\x00') + +B00 = toarray(b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01') +B01 = toarray(b'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii') +B02 = toarray(b'cccabaccdccccccccccccccccccccccccccccccccccccccccccccc') +B03 = toarray(b'jUje`j*\x07[W=\x06 #9=2;6:D???/3(\')4U\x02U\x10UUUU\x02\x02U!f$U&UUU\x02U"%>') +B04 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x05\x08\x08\x08\x04\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x03\x08\x11\x08\x08\x08\x08\x03\x03\x08\x08\x08\x08\x08\x08\x08\x08\x08\x03\x08\x08\x08\x08') +B05 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x05\x08\x08\x08\x04\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08') +B06 = toarray(b'\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\t\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b') +B07 = toarray(b'\x0e\x0e\x0e\x0e\x0e\x0e\x0e\n\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e') +B08 = toarray(b'YVVYYYYYYYYYYYYYYYYYVVVVYYYYYYVVVVVVVVVVVYYYVYVVVVVYYY') +B09 = toarray(b'\r\r\r\r\r\r\r\r\r\r\r\x0c\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') +B10 = toarray(b'\r\r\r\r\r\r\r\x0f\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') +B11 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B12 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x13\x08\x08\x08\x12\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x11\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x11\x08\x08\x08\x08') +B13 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x13\x08\x08\x08\x12\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08') +B14 = toarray(b'\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x14\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16') +B15 = toarray(b'\x18\x18\x18\x18\x18\x18\x18\x15\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18') +B16 = toarray(b'\r\r\r\r\r\r\r\r\r\r\r\x17\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') +B17 = toarray(b'\r\r\r\r\r\r\r\x19\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') +B18 = toarray(b'\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1c\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e') +B19 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1d\x1a\x1a') +B20 = toarray(b'\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1a\x1d') +B21 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B22 = toarray(b'---------------------------,--------------------------') +B23 = toarray(b'--------------------------+,,-------------------------') +B24 = toarray(b'---------------------------,+-------------------------') +B25 = toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.\x00\x00..\x00\x00\x00') +B26 = toarray(b'111111111111111111111111111011111111111111111111111111') +B27 = toarray(b'555555555555555555555555555,55555555555555555555555555') +B28 = toarray(b'888888888888888888887777888888888888888888888888888888') +B29 = toarray(b'IIIIIIIIIIIIIIIIIIII7777IIIIIIIIQIAIIIIIIIIIOIIPIIIIII') +B30 = toarray(b'-------------------+-------,--------------------------') +B31 = toarray(b'--------------+------------,--------------------------') +B32 = toarray(b'---------------------------,<-------------------------') +B33 = toarray(b'IIIIIIIIIIIIIIIIIINI@@@@IIIIIIIIQIAAIIIIIIIIBIIPAIIIII') +B34 = toarray(b'IIIIIIIIIIIIIIIIIINIEEEEIIIIIIIJQIAAIGIILIIIFIIPAIIIII') +B35 = toarray(b'IIIIIIIIIIIIIIIIIINIEEEEIIIIIIIIQIAAIIIIIIIIFIIPAIIIII') +B36 = toarray(b'IIIIIIIIIIIIIIIIIIIIJJIIIIIIIIIIIIIAIIIIIIIIKIIIAIIIII') +B37 = toarray(b'IIIIIIIIIIIIIIIIIIIIGGGIIIIIIIIIIIIAIIIIIIIIHIIIAIIIII') +B38 = toarray(b'IIIIIIIIIIIIIIIIIIIILLLLIIIIIILLLLIAIIIIIIIIMILLAIIIII') +B39 = toarray(b'CCCCCCCCCCCCCCCCCCCC@@@@CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B40 = toarray(b'CCCCCCCCCCCCCCCCCCCCEEEECCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B41 = toarray(b'CCCCCCCCCCCCCCCCCCCCGGGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B42 = toarray(b'CCCCCCCCCCCCCCCCCCCCJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B43 = toarray(b'CCCCCCCCCCCCCCCCCCCCLLLLCCCCCCLLLLCCCCCCCCCCCCLLCCCCCC') +B44 = toarray(b'IIIIIIIIIIIIIIIIIIII7777IIIIIIIIQIAIIIIIIIIIIIIPIIIIII') +B45 = toarray(b'CCCCCCCCCCCCCCCCCCCC7777CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B46 = toarray(b'CCCCCCCCCCCCCCCQCQCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCRCCCCC') +B47 = toarray(b'CCCCCCCCCCCCCCCQCQCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B48 = toarray(b'IIIIIIIIIIIIIIIIIIIISSSSIIIIIIIIIIAIIIIIIIIITIIIIIIIII') +B49 = toarray(b'CCCCCCCCCCCCCCCCCCCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B50 = toarray(b'ZXXZZZZZZZZZZZZZZZZZXXXXZZZZZZXXXXXXXXXXXZZZXZXXXXXZZZ') +B51 = toarray(b']]]]\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]') +B52 = toarray(b'____^_________________________________________________') +B53 = toarray(b'CCCCgCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B54 = toarray(b'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh') +B55 = toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +B56 = toarray(b'jUjekj*\x07[W=\x06 l9=2;6:D???/3(\')4U\x02U\x10UUUU\x02\x02U!fmU&UUU\x02U"n>') +B57 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B58 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B59 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B60 = toarray(b'ssss\x1fssssssrssssssssssssssssssssssssssssssssssssssssss') +B61 = toarray(b'ssss\x1fssssssossssssssssssssssssssssssssssssssssssssssss') +B62 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B63 = toarray(b'ssss\x1fssrssssssssssssssssssssssssssssssssssssssssssssss') +B64 = toarray(b'ssss\x1fssossssssssssssssssssssssssssssssssssssssssssssss') +B65 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B66 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B67 = toarray(b'uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\x1auu') +B68 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B69 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B70 = toarray(b'vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\x1avv') +B71 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1aw\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B72 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B73 = toarray(b'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\x1axx') +B74 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1aw\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B75 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B76 = toarray(b'ssss\x1fsssssssssssssssssssssssssssssssssssssssssssssssss') +B77 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B78 = toarray(b'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\x1ayy') +B79 = toarray(b'ssss\x1fsssssswssssssssssssssssssssssssssssssssssssssssss') +B80 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B81 = toarray(b'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\x1azz') +B82 = toarray(b'ssss\x1fsswssssssssssssssssssssssssssssssssssssssssssssss') +B83 = toarray(b'jUjekj*\x07[W=\x06 l9=2;6:D???|3(\')4U\x02U\x10UUUU\x02\x02U!fmU&UUU\x02U"{>') +B84 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a{\x1a') +B85 = toarray(b'jUje`j*\x07[W=\x06 #9=2;6:D???/3(\')4U\x02U\x10UUUU\x02\x02U!f$U&UUU\x02U"\x7f>') +B86 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a}~\x1a') +B87 = toarray(b'\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80') + +DEFAULT = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +PAREN = (B00, B01, B02, B56, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +STRING_S = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B57, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +STRING_D = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B58, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +STRING_SSS = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B59, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B60, B61, B55, ) +STRING_DDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B62, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B63, B64, B55, ) +FSTRING_SDSSSDDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B65, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) +FSTRING_SD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B68, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) +FSTRING_START_S = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B69, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B70, ) +FSTRING_S = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B71, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) +FSTRING_START_D = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B72, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B73, ) +FSTRING_D = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B74, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) +FSTRING_SSSDDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B75, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B76, B76, B67, ) +FSTRING_START_SSS = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B77, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B60, B61, B78, ) +FSTRING_SSS = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B77, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B60, B79, B67, ) +FSTRING_START_DDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B80, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B63, B64, B81, ) +FSTRING_DDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B80, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B63, B82, B67, ) +FSTRING_EXPR = (B00, B01, B02, B83, B04, B05, B06, B07, B08, B09, B10, B84, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +FORMAT_SPECIFIER = (B00, B01, B02, B85, B04, B05, B06, B07, B08, B09, B10, B86, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +PENDING_DEDENT = (B00, B01, B02, B87, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) + +TRANSITION_STATE_NAMES = { + id(DEFAULT): 'default', + id(PAREN): 'paren', + id(STRING_S): 'string_s', + id(STRING_D): 'string_d', + id(STRING_SSS): 'string_sss', + id(STRING_DDD): 'string_ddd', + id(FSTRING_SDSSSDDD): 'fstring_sdsssddd', + id(FSTRING_SD): 'fstring_sd', + id(FSTRING_START_S): 'fstring_start_s', + id(FSTRING_S): 'fstring_s', + id(FSTRING_START_D): 'fstring_start_d', + id(FSTRING_D): 'fstring_d', + id(FSTRING_SSSDDD): 'fstring_sssddd', + id(FSTRING_START_SSS): 'fstring_start_sss', + id(FSTRING_SSS): 'fstring_sss', + id(FSTRING_START_DDD): 'fstring_start_ddd', + id(FSTRING_DDD): 'fstring_ddd', + id(FSTRING_EXPR): 'fstring_expr', + id(FORMAT_SPECIFIER): 'format_specifier', + id(PENDING_DEDENT): 'pending_dedent', +} +START_SUPER_STATE = DEFAULT +''' +Lookup table based tokenizer with state popping and pushing capabilities. +The ability to push and pop state is required for handling parenthesised expressions, +indentation, and f-strings. We also use it for handling the different quotation mark types, +but it is not essential for that, merely convenient. + +''' + + + +class Tokenizer(object): + + def __init__(self, text): + self.text = text + self.index = 0 + self.line_start_index = 0 + self.token_start_index = 0 + self.token_start = 1, 0 + self.line = 1 + self.super_state = START_SUPER_STATE + self.state_stack = [] + self.indents = [0] + + def action_0(self): + self.index -= 1 + self.index += 1 + return None + + def action_1(self): + self.token_start_index = self.index + self.token_start = self.line, self.index-self.line_start_index + self.index += 1 + return None + + def action_2(self): + self.index -= 1 + self.state_stack.append(self.super_state) + self.super_state = STRING_S + self.index += 1 + return None + + def action_3(self): + self.state_stack.append(self.super_state) + self.super_state = STRING_SSS + self.index += 1 + return None + + def action_4(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [STRING, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_5(self): + self.index -= 1 + self.state_stack.append(self.super_state) + self.super_state = STRING_D + self.index += 1 + return None + + def action_6(self): + self.state_stack.append(self.super_state) + self.super_state = STRING_DDD + self.index += 1 + return None + + def action_7(self): + self.index -= 1 + self.state_stack.append(self.super_state) + self.super_state = FSTRING_START_S + self.index += 1 + return None + + def action_8(self): + self.state_stack.append(self.super_state) + self.super_state = FSTRING_START_SSS + self.index += 1 + return None + + def action_9(self): + self.index -= 1 + self.state_stack.append(self.super_state) + self.super_state = FSTRING_START_D + self.index += 1 + return None + + def action_10(self): + self.state_stack.append(self.super_state) + self.super_state = FSTRING_START_DDD + self.index += 1 + return None + + def action_11(self): + self.line_start_index = self.index+1 + self.line += 1 + self.index += 1 + return None + + def action_12(self): + end = self.line, self.index-self.line_start_index+1 + result = [LPAR, u"(", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.state_stack.append(self.super_state) + self.super_state = PAREN + self.index += 1 + return result + + def action_13(self): + end = self.line, self.index-self.line_start_index+1 + result = [LSQB, u"[", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.state_stack.append(self.super_state) + self.super_state = PAREN + self.index += 1 + return result + + def action_14(self): + end = self.line, self.index-self.line_start_index+1 + result = [LBRACE, u"{", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.state_stack.append(self.super_state) + self.super_state = PAREN + self.index += 1 + return result + + def action_15(self): + end = self.line, self.index-self.line_start_index+1 + result = [RPAR, u")", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_16(self): + end = self.line, self.index-self.line_start_index+1 + result = [RSQB, u"]", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_17(self): + end = self.line, self.index-self.line_start_index+1 + result = [RBRACE, u"}", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_18(self): + end = self.line, self.index-self.line_start_index+1 + result = [BACKQUOTE, u'`', (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_19(self): + end = self.line, self.index-self.line_start_index+1 + result = [OP, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_20(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [OP, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_21(self): + end = self.line, self.index-self.line_start_index+1 + result = [CONVERSION, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_22(self): + end = self.line, self.index-self.line_start_index+1 + result = [COLONEQUAL, u":=", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_23(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [COLON, u":", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_24(self): + end = self.line, self.index-self.line_start_index+1 + result = [COMMA, u",", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_25(self): + end = self.line, self.index-self.line_start_index+1 + result = [SEMI, u";", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_26(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [AT, u"@", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_27(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [DOT, u".", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_28(self): + end = self.line, self.index-self.line_start_index+1 + result = [RARROW, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_29(self): + end = self.line, self.index-self.line_start_index+1 + result = [OP, u'~', (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_30(self): + end = self.line, self.index-self.line_start_index+1 + result = [NUMBER, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_31(self): + end = self.line, self.index-self.line_start_index+1 + result = [ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_32(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [NUMBER, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_33(self): + self.index -= 1 + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [NUMBER, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_34(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [NAME, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_35(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [DOLLARNAME, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_36(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [COMMENT, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_37(self): + end = self.line, self.index-self.line_start_index+1 + result = [NEWLINE, u"\n", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.line_start_index = self.index+1 + self.line += 1 + self.index += 1 + return result + + def action_38(self): + return self.emit_indent() + + def action_39(self): + self.index -= 1 + self.token_start_index = self.index + self.token_start = self.line, self.index-self.line_start_index + self.index += 1 + return None + + def action_40(self): + self.token_start_index = self.index + self.token_start = self.line, self.index-self.line_start_index + end = self.line, self.index-self.line_start_index+1 + result = [ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_41(self): + self.token_start_index = self.index + self.token_start = self.line, self.index-self.line_start_index + self.line_start_index = self.index+1 + self.line += 1 + self.index += 1 + return None + + def action_42(self): + end = self.line, self.index-self.line_start_index+1 + result = [RPAR, u")", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.index += 1 + return result + + def action_43(self): + end = self.line, self.index-self.line_start_index+1 + result = [RSQB, u"]", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.index += 1 + return result + + def action_44(self): + end = self.line, self.index-self.line_start_index+1 + result = [RBRACE, u"}", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.index += 1 + return result + + def action_45(self): + self.super_state = self.state_stack.pop() + end = self.line, self.index-self.line_start_index+1 + result = [STRING, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_46(self): + self.super_state = self.state_stack.pop() + end = self.line, self.index-self.line_start_index+1 + result = [ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.line_start_index = self.index+1 + self.line += 1 + self.index += 1 + return result + + def action_47(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_MID, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.state_stack.append(self.super_state) + self.super_state = FSTRING_EXPR + self.index += 1 + return result + + def action_48(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.state_stack.append(self.super_state) + self.super_state = FSTRING_S + self.state_stack.append(self.super_state) + self.super_state = FSTRING_EXPR + self.index += 1 + return result + + def action_49(self): + self.super_state = self.state_stack.pop() + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_END, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_50(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.state_stack.append(self.super_state) + self.super_state = FSTRING_D + self.state_stack.append(self.super_state) + self.super_state = FSTRING_EXPR + self.index += 1 + return result + + def action_51(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.state_stack.append(self.super_state) + self.super_state = FSTRING_SSS + self.state_stack.append(self.super_state) + self.super_state = FSTRING_EXPR + self.index += 1 + return result + + def action_52(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.state_stack.append(self.super_state) + self.super_state = FSTRING_DDD + self.state_stack.append(self.super_state) + self.super_state = FSTRING_EXPR + self.index += 1 + return result + + def action_53(self): + self.super_state = self.state_stack.pop() + self.token_start_index = self.index + self.token_start = self.line, self.index-self.line_start_index + self.index += 1 + return None + + def action_54(self): + end = self.line, self.index-self.line_start_index+1 + result = [COLON, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.state_stack.append(self.super_state) + self.super_state = FORMAT_SPECIFIER + self.index += 1 + return result + + def action_55(self): + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_SPEC, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_56(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_SPEC, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.index += 1 + return result + + def action_57(self): + self.super_state = self.state_stack.pop() + return self.emit_indent() + + + def tokens(self, debug=False): + text = self.text + cls_table = CLASS_TABLE + id_index = ID_INDEX + id_chunks = ID_CHUNKS + max_id = len(id_index)*256 + action_table = [ + (1, None), (2, self.action_0), (4, self.action_1), (5, None), + (6, None), (7, None), (6, self.action_1), (7, self.action_1), + (8, self.action_0), (9, None), (10, None), (11, self.action_2), + (11, self.action_3), (3, self.action_4), (11, self.action_5), (11, self.action_6), + (12, self.action_1), (13, None), (14, None), (15, None), + (16, None), (17, None), (11, self.action_7), (11, self.action_8), + (11, self.action_9), (11, self.action_10), (11, None), (18, None), + (19, None), (20, None), (21, self.action_0), (11, self.action_11), + (3, self.action_12), (3, self.action_13), (3, self.action_14), (3, self.action_15), + (3, self.action_16), (3, self.action_17), (3, self.action_18), (22, self.action_1), + (23, self.action_1), (24, self.action_1), (25, self.action_1), (26, None), + (3, self.action_19), (3, self.action_20), (3, self.action_21), (27, None), + (3, self.action_22), (3, self.action_23), (3, self.action_24), (3, self.action_25), + (28, self.action_1), (3, self.action_26), (29, self.action_1), (30, None), + (3, self.action_27), (32, self.action_1), (31, self.action_1), (33, self.action_1), + (3, self.action_28), (26, self.action_1), (3, self.action_29), (34, self.action_1), + (34, None), (3, self.action_30), (40, None), (1, self.action_31), + (35, self.action_1), (36, None), (41, None), (38, None), + (42, None), (3, self.action_32), (37, None), (43, None), + (39, None), (44, None), (45, None), (46, None), + (47, None), (48, None), (3, self.action_33), (49, None), + (50, None), (8, self.action_1), (8, None), (51, self.action_1), + (51, None), (3, self.action_34), (3, self.action_35), (52, self.action_1), + (3, self.action_36), (52, None), (2, self.action_36), (53, None), + (2, self.action_37), (2, None), (2, self.action_11), (3, self.action_38), + (53, self.action_1), (3, None), (54, None), (55, self.action_11), + (3, self.action_39), (3, self.action_0), (3, self.action_40), (3, self.action_41), + (3, self.action_42), (3, self.action_43), (3, self.action_44), (3, self.action_45), + (1, self.action_46), (56, None), (57, None), (11, self.action_0), + (58, None), (3, self.action_47), (3, self.action_48), (3, self.action_49), + (3, self.action_50), (3, self.action_51), (3, self.action_52), (11, self.action_53), + (11, self.action_54), (3, self.action_55), (11, self.action_56), (11, self.action_1), + (3, self.action_57), + ] + state = 0 + try: + if debug: + while True: + c = ord(text[self.index]) + if c < 128: + cls = cls_table[c] + elif c >= max_id: + cls = ERROR_CLASS + else: + b = id_chunks[id_index[c>>8]][(c>>2)&63] + cls = (b>>((c&3)*2))&3 + prev_state = state + print("char = '%s', state=%d, cls=%d" % (text[self.index], state, cls)) + state, transition = action_table[self.super_state[state][cls]] + print ("%s -> %s on %r in %s" % (prev_state, state, text[self.index], TRANSITION_STATE_NAMES[id(self.super_state)])) + if transition: + tkn = transition() + if tkn: + yield tkn + else: + self.index += 1 + else: + while True: + c = ord(text[self.index]) + if c < 128: + cls = cls_table[c] + elif c >= max_id: + cls = ERROR_CLASS + else: + b = id_chunks[id_index[c>>8]][(c>>2)&63] + cls = (b>>((c&3)*2))&3 + state, transition = action_table[self.super_state[state][cls]] + if transition: + tkn = transition() + if tkn: + yield tkn + else: + self.index += 1 + except IndexError as ex: + if self.index != len(text): + #Reraise index error + cls = cls_table[c] + trans = self.super_state[state] + action_index = trans[cls] + action_table[action_index] + # Not raised? Must have been raised in transition function. + raise ex + tkn = self.emit_indent() + while tkn is not None: + yield tkn + tkn = self.emit_indent() + end = self.line, self.index-self.line_start_index + yield ENDMARKER, u"", self.token_start, end + return + + def emit_indent(self): + indent = 0 + index = self.line_start_index + current = self.index + here = self.line, current-self.line_start_index + while index < current: + if self.text[index] == ' ': + indent += 1 + elif self.text[index] == '\t': + indent = (indent+8) & -8 + elif self.text[index] == '\f': + indent = 0 + else: + #Unexpected state. Emit error token + while len(self.indents) > 1: + self.indents.pop() + result = ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, here + self.token_start = here + self.line_start_index = self.index + return result + index += 1 + if indent == self.indents[-1]: + self.token_start = here + self.token_start_index = self.index + return None + elif indent > self.indents[-1]: + self.indents.append(indent) + start = self.line, 0 + result = INDENT, self.text[self.line_start_index:current], start, here + self.token_start = here + self.token_start_index = current + return result + else: + self.indents.pop() + if indent > self.indents[-1]: + #Illegal indent + result = ILLEGALINDENT, u"", here, here + else: + result = DEDENT, u"", here, here + if indent < self.indents[-1]: + #More dedents to do + self.state_stack.append(self.super_state) + self.super_state = PENDING_DEDENT + self.token_start = here + self.token_start_index = self.index + return result + + +ENCODING_RE = re.compile(br'.*coding[:=]\s*([-\w.]+).*') +NEWLINE_BYTES = b'\n' + +def encoding_from_source(source): + 'Returns encoding of source (bytes), plus source strip of any BOM markers.' + #Check for BOM + if source.startswith(codecs.BOM_UTF8): + return 'utf8', source[len(codecs.BOM_UTF8):] + if source.startswith(codecs.BOM_UTF16_BE): + return 'utf-16be', source[len(codecs.BOM_UTF16_BE):] + if source.startswith(codecs.BOM_UTF16_LE): + return 'utf-16le', source[len(codecs.BOM_UTF16_LE):] + try: + first_new_line = source.find(NEWLINE_BYTES) + first_line = source[:first_new_line] + second_new_line = source.find(NEWLINE_BYTES, first_new_line+1) + second_line = source[first_new_line+1:second_new_line] + match = ENCODING_RE.match(first_line) or ENCODING_RE.match(second_line) + if match: + ascii_encoding = match.groups()[0] + if sys.version < "3": + encoding = ascii_encoding + else: + encoding = ascii_encoding.decode("ascii") + # Handle non-standard encodings that are recognised by the interpreter. + if encoding.startswith("utf-8-"): + encoding = "utf-8" + elif encoding == "iso-latin-1": + encoding = "iso-8859-1" + elif encoding.startswith("latin-1-"): + encoding = "iso-8859-1" + elif encoding.startswith("iso-8859-1-"): + encoding = "iso-8859-1" + elif encoding.startswith("iso-latin-1-"): + encoding = "iso-8859-1" + return encoding, source + except Exception as ex: + print(ex) + #Failed to determine encoding -- Just treat as default. + pass + return 'utf-8', source + diff --git a/python/extractor/semmle/python/parser/tsg_parser.py b/python/extractor/semmle/python/parser/tsg_parser.py new file mode 100644 index 00000000000..46784c4e860 --- /dev/null +++ b/python/extractor/semmle/python/parser/tsg_parser.py @@ -0,0 +1,495 @@ +# tsg_parser.py + +# Functions and classes used for parsing Python files using `tree-sitter-graph` + +from ast import literal_eval +import sys +import os +import semmle.python.parser +from semmle.python.parser.ast import copy_location, decode_str, split_string +from semmle.python import ast +import subprocess +from itertools import groupby + +DEBUG = False +def debug_print(*args, **kwargs): + if DEBUG: + print(*args, **kwargs) + +# Node ids are integers, and so to distinguish them from actual integers we wrap them in this class. +class Node(object): + def __init__(self, id): + self.id = id + def __repr__(self): + return "Node({})".format(self.id) + +# A wrapper for nodes containing comments. The old parser does not create such nodes (and therefore +# there is no `ast.Comment` class) since it accesses the comments via the tokens for the given file. +class Comment(object): + def __init__(self, text): + self.text = text + def __repr__(self): + return "Comment({})".format(self.text) + +class SyntaxErrorNode(object): + def __init__(self, source): + self.source = source + def __repr__(self): + return "SyntaxErrorNode({})".format(self.source) + +# Mapping from tree-sitter CPT node kinds to their corresponding AST node classes. +tsg_to_ast = {name: cls + for name, cls in semmle.python.ast.__dict__.items() + if isinstance(cls, type) and ast.AstBase in cls.__mro__ +} +tsg_to_ast["Comment"] = Comment +tsg_to_ast["SyntaxErrorNode"] = SyntaxErrorNode + +# Mapping from AST node class to the fields of the node. The order of the fields is the order in +# which they will be output in the AST dump. +# +# These fields cannot be extracted automatically, so we set them manually. +ast_fields = { + ast.Module: ("body",), # Note: has no `__slots__` to inspect + Comment: ("text",), # Note: not an `ast` class + SyntaxErrorNode: ("source",), # Note: not an `ast` class + ast.Continue: (), + ast.Break: (), + ast.Pass: (), + ast.Ellipsis: (), + ast.MatchWildcardPattern: (), +} + +# Fields that we don't want to dump on every single AST node. These are just the slots of the AST +# base class, consisting of all of the location information (which we print in a different way). +ignored_fields = semmle.python.ast.AstBase.__slots__ + +# Extract fields for the remaining AST classes +for name, cls in semmle.python.ast.__dict__.items(): + if name.startswith("_"): + continue + if not hasattr(cls, "__slots__"): + continue + slots = tuple(field for field in cls.__slots__ if field not in ignored_fields) + if not slots: + continue + ast_fields[cls] = slots + +# A mapping from strings to the AST node classes that represent things like operators. +# These have to be handled specially, because they have no location information. +locationless = { + "and": ast.And, + "or": ast.Or, + "not": ast.Not, + "uadd": ast.UAdd, + "usub": ast.USub, + "+": ast.Add, + "-": ast.Sub, + "~": ast.Invert, + "**": ast.Pow, + "<<": ast.LShift, + ">>": ast.RShift, + "&": ast.BitAnd, + "|": ast.BitOr, + "^": ast.BitXor, + "load": ast.Load, + "store": ast.Store, + "del" : ast.Del, + "param" : ast.Param, +} +locationless.update(semmle.python.parser.ast.TERM_OP_CLASSES) +locationless.update(semmle.python.parser.ast.COMP_OP_CLASSES) +locationless.update(semmle.python.parser.ast.AUG_ASSIGN_OPS) + +if 'CODEQL_EXTRACTOR_PYTHON_ROOT' in os.environ: + platform = os.environ['CODEQL_PLATFORM'] + ext = ".exe" if platform == "win64" else "" + tools = os.path.join(os.environ['CODEQL_EXTRACTOR_PYTHON_ROOT'], "tools", platform) + tsg_command = [os.path.join(tools, "tsg-python" + ext )] +else: + # Get the path to the current script + script_path = os.path.dirname(os.path.realpath(__file__)) + tsg_python_path = os.path.join(script_path, "../../../tsg-python") + cargo_file = os.path.join(tsg_python_path, "Cargo.toml") + tsg_command = ["cargo", "run", "--quiet", "--release", "--manifest-path="+cargo_file] + +def read_tsg_python_output(path, logger): + # Mapping from node id (an integer) to a dictionary containing attribute data. + node_attr = {} + # Mapping a start node to a map from attribute names to lists of (value, end_node) pairs. + edge_attr = {} + + command_args = tsg_command + [path] + p = subprocess.Popen(command_args, stdout=subprocess.PIPE) + for line in p.stdout: + line = line.decode(sys.getfilesystemencoding()) + line = line.rstrip() + if line.startswith("node"): # e.g. `node 5` + current_node = int(line.split(" ")[1]) + d = {} + node_attr[current_node] = d + in_node = True + elif line.startswith("edge"): # e.g. `edge 5 -> 6` + current_start, current_end = tuple(map(int, line[4:].split("->"))) + d = edge_attr.setdefault(current_start, {}) + in_node = False + else: # attribute, e.g. `_kind: "Class"` + key, value = line[2:].split(": ", 1) + if value.startswith("[graph node"): # e.g. `_skip_to: [graph node 5]` + value = Node(int(value.split(" ")[2][:-1])) + elif value == "#true": # e.g. `_is_parenthesised: #true` + value = True + elif value == "#false": # e.g. `top: #false` + value = False + elif value == "#null": # e.g. `exc: #null` + value = None + else: # literal values, e.g. `name: "k1.k2"` or `level: 5` + try: + if key =="s" and value[0] == '"': # e.g. `s: "k1.k2"` + value = evaluate_string(value) + else: + value = literal_eval(value) + if isinstance(value, bytes): + try: + value = value.decode(sys.getfilesystemencoding()) + except UnicodeDecodeError: + # just include the bytes as-is + pass + except Exception as ex: + # We may not know the location at this point -- for instance if we forgot to set + # it -- but `get_location_info` will degrade gracefully in this case. + loc = ":".join(str(i) for i in get_location_info(d)) + error = ex.args[0] if ex.args else "unknown" + logger.warning("Error '{}' while parsing value {} at {}:{}\n".format(error, repr(value), path, loc)) + if in_node: + d[key] = value + else: + d.setdefault(key, []).append((value, current_end)) + p.stdout.close() + p.terminate() + p.wait() + logger.info("Read {} nodes and {} edges from TSG output".format(len(node_attr), len(edge_attr))) + return node_attr, edge_attr + +def evaluate_string(s): + s = literal_eval(s) + prefix, quotes, content = split_string(s, None) + ends_with_illegal_character = False + # If the string ends with the same quote character as the outer quotes (and/or backslashes) + # (e.g. the first string part of `f"""hello"{0}"""`), we must take care to not accidently create + # the ending quotes at the wrong place. To do this, we insert an extra space at the end (that we + # then must remember to remove later on.) + if content.endswith(quotes[0]) or content.endswith('\\'): + ends_with_illegal_character = True + content = content + " " + s = prefix.strip("fF") + quotes + content + quotes + s = literal_eval(s) + if isinstance(s, bytes): + s = decode_str(s) + if ends_with_illegal_character: + s = s[:-1] + return s + +def resolve_node_id(id, node_attr): + """Finds the end of a sequence of nodes linked by `_skip_to` fields, starting at `id`.""" + while "_skip_to" in node_attr[id]: + id = node_attr[id]["_skip_to"].id + return id + +def get_context(id, node_attr, logger): + """Gets the context of the node with the given `id`. This is either whatever is stored in the + `ctx` attribute of the node, or the result of dereferencing a sequence of `_inherited_ctx` attributes.""" + + while "ctx" not in node_attr[id]: + if "_inherited_ctx" not in node_attr[id]: + logger.error("No context for node {} with attributes {}\n".format(id, node_attr[id])) + # A missing context is most likely to be a "load", so return that. + return ast.Load() + id = node_attr[id]["_inherited_ctx"].id + return locationless[node_attr[id]["ctx"]]() + +def get_location_info(attrs): + """Returns the location information for a node, depending on which fields are set. + + In particular, more specific fields take precedence over (and overwrite) less specific fields. + So, `_start_line` and `_start_column` take precedence over `location_start`, which takes + precedence over `_location`. Likewise when `end` replaces `start` above. + + If part of the location information is missing, the string `"???"` is substituted for the + missing bits. + """ + start_line = "???" + start_column = "???" + end_line = "???" + end_column = "???" + if "_location" in attrs: + (start_line, start_column, end_line, end_column) = attrs["_location"] + if "_location_start" in attrs: + (start_line, start_column) = attrs["_location_start"] + if "_location_end" in attrs: + (end_line, end_column) = attrs["_location_end"] + if "_start_line" in attrs: + start_line = attrs["_start_line"] + if "_start_column" in attrs: + start_column = attrs["_start_column"] + if "_end_line" in attrs: + end_line = attrs["_end_line"] + if "_end_column" in attrs: + end_column = attrs["_end_column"] + # Lines in the `tsg-python` output is 0-indexed, but the AST expects them to be 1-indexed. + if start_line != "???": + start_line += 1 + if end_line != "???": + end_line += 1 + return (start_line, start_column, end_line, end_column) + +list_fields = { + ast.arguments: ("annotations", "defaults", "kw_defaults", "kw_annotations"), + ast.Assign: ("targets",), + ast.BoolOp: ("values",), + ast.Bytes: ("implicitly_concatenated_parts",), + ast.Call: ("positional_args", "named_args"), + ast.Case: ("body",), + ast.Class: ("body",), + ast.ClassExpr: ("type_parameters", "bases", "keywords"), + ast.Compare: ("ops", "comparators",), + ast.comprehension: ("ifs",), + ast.Delete: ("targets",), + ast.Dict: ("items",), + ast.ExceptStmt: ("body",), + ast.For: ("body",), + ast.Function: ("type_parameters", "args", "kwonlyargs", "body"), + ast.Global: ("names",), + ast.If: ("body",), + ast.Import: ("names",), + ast.List: ("elts",), + ast.Match: ("cases",), + ast.MatchClassPattern: ("positional", "keyword"), + ast.MatchMappingPattern: ("mappings",), + ast.MatchOrPattern: ("patterns",), + ast.MatchSequencePattern: ("patterns",), + ast.Module: ("body",), + ast.Nonlocal: ("names",), + ast.Print: ("values",), + ast.Set: ("elts",), + ast.Str: ("implicitly_concatenated_parts",), + ast.TypeAlias: ("type_parameters",), + ast.Try: ("body", "handlers", "orelse", "finalbody"), + ast.Tuple: ("elts",), + ast.While: ("body",), +# ast.FormattedStringLiteral: ("arguments",), +} + +def create_placeholder_args(cls): + """ Returns a dictionary containing the placeholder arguments necessary to create an AST node. + + In most cases these arguments will be assigned the value `None`, however for a few classes we + must substitute the empty list, as this is enforced by asserts in the constructor. + """ + if cls in (ast.Raise, ast.Ellipsis): + return {} + fields = ast_fields[cls] + args = {field: None for field in fields if field != "is_async"} + for field in list_fields.get(cls, ()): + args[field] = [] + if cls in (ast.GeneratorExp, ast.ListComp, ast.SetComp, ast.DictComp): + del args["function"] + del args["iterable"] + return args + +def parse(path, logger): + node_attr, edge_attr = read_tsg_python_output(path, logger) + debug_print("node_attr:", node_attr) + debug_print("edge_attr:", edge_attr) + nodes = {} + # Nodes that need to be fixed up after building the graph + fixups = {} + # Reverse index from node object to node id. + node_id = {} + # Create all the node objects + for id, attrs in node_attr.items(): + if "_is_literal" in attrs: + nodes[id] = attrs["_is_literal"] + continue + if "_kind" not in attrs: + logger.error("Error: Graph node {} with attributes {} has no `_kind`!\n".format(id, attrs)) + continue + # This is not the node we are looking for (so don't bother creating it). + if "_skip_to" in attrs: + continue + cls = tsg_to_ast[attrs["_kind"]] + args = ast_fields[cls] + obj = cls(**create_placeholder_args(cls)) + nodes[id] = obj + node_id[obj] = id + # If this node needs fixing up afterwards, add it to the fixups map. + if "_fixup" in attrs: + fixups[id] = obj + # Set all of the node attributes + for id, node in nodes.items(): + attrs = node_attr[id] + if "_is_literal" in attrs: + continue + expected_fields = ast_fields[type(node)] + + # Set up location information. + node.lineno, node.col_offset, end_line, end_column = get_location_info(attrs) + node._end = (end_line, end_column) + + if isinstance(node, SyntaxErrorNode): + exc = SyntaxError("Syntax Error") + exc.lineno = node.lineno + exc.offset = node.col_offset + raise exc + + # Set up context information, if any + if "ctx" in expected_fields: + node.ctx = get_context(id, node_attr, logger) + # Set the fields. + for field, val in attrs.items(): + if field.startswith("_"): continue + if field == "ctx": continue + if field != "parenthesised" and field not in expected_fields: + logger.warning("Unknown field {} found among {} in node {}\n".format(field, attrs, id)) + + # For fields that point to other AST nodes. + if isinstance(val, Node): + val = resolve_node_id(val.id, node_attr) + setattr(node, field, nodes[val]) + # Special case for `Num.n`, which should be coerced to an int. + elif isinstance(node, ast.Num) and field == "n": + node.n = literal_eval(val.rstrip("lL")) + # Special case for `Name.variable`, for which we must create a new `Variable` object + elif isinstance(node, ast.Name) and field == "variable": + node.variable = ast.Variable(val) + # Special case for location-less leaf-node subclasses of `ast.Node`, such as `ast.Add`. + elif field == "op" and val in locationless.keys(): + setattr(node, field, locationless[val]()) + else: # Any other value, usually literals of various kinds. + setattr(node, field, val) + + # Create all fields pointing to lists of values. + for start, field_map in edge_attr.items(): + start = resolve_node_id(start, node_attr) + parent = nodes[start] + extra_fields = {} + for field_name, value_end in field_map.items(): + # Sort children by index (in case they were visited out of order) + children = [nodes[resolve_node_id(end, node_attr)] for _index, end in sorted(value_end)] + # Skip any comments. + children = [child for child in children if not isinstance(child, Comment)] + # Special case for `Compare.ops`, a list of comparison operators + if isinstance(parent, ast.Compare) and field_name == "ops": + parent.ops = [locationless[v]() for v in children] + elif field_name.startswith("_"): + # We can only set the attributes given in `__slots__` on the `start` node, and so we + # must handle fields starting with `_` specially. In this case, we simply record the + # values and then subsequently update `edge_attr` to refer to these values. This + # makes it act as a pseudo-field, that we can access as long as we know the `id` + # corresponding to a given node (for which we have the `node_id` map). + extra_fields[field_name] = children + else: + setattr(parent, field_name, children) + if extra_fields: + # Extend the existing map in `node_attr` with the extra fields. + node_attr[start].update(extra_fields) + + # Fixup any nodes that need it. + for id, node in fixups.items(): + if isinstance(node, (ast.JoinedStr, ast.Str)): + fix_strings(id, node, node_attr, node_id, logger) + + debug_print("nodes:", nodes) + if not nodes: + # if the file referenced by path is empty, return an empty module: + if os.path.getsize(path) == 0: + module = ast.Module([]) + module.lineno = 1 + module.col_offset = 0 + module._end = (1, 0) + return module + else: + raise SyntaxError("Syntax Error") + # Fix up start location of outer `Module`. + module = nodes[0] + if module.body: + # Get the location of the first non-comment node. + module.lineno = module.body[0].lineno + else: + # No children! File must contain only comments! Pick the end location as the start location. + module.lineno = module._end[0] + return module + + +def get_JoinedStr_children(children): + """ + Folds the `Str` and `expr` parts of a `JoinedStr` into a single list, and does this for each + `JoinedStr` in `children`. Top-level `StringPart`s are included in the output directly. + """ + for child in children: + if isinstance(child, ast.JoinedStr): + for value in child.values: + yield value + elif isinstance(child, ast.StringPart): + yield child + else: + raise ValueError("Unexpected node type: {}".format(type(child))) + +def concatenate_stringparts(stringparts, logger): + """Concatenates the strings contained in the list of `stringparts`.""" + try: + return "".join(decode_str(stringpart.s) for stringpart in stringparts) + except Exception as ex: + logger.error("Unable to concatenate string %s getting error %s", stringparts, ex) + return stringparts[0].s + + +def fix_strings(id, node, node_attr, node_id, logger): + """ + Reassociates the `StringPart` children of an implicitly concatenated f-string (`JoinedStr`) + """ + # Tests whether something is a string child + is_string = lambda node: isinstance(node, ast.StringPart) + + # We have two cases to consider. Either we're given something that came from a + # `concatenated_string`, or something that came from an `formatted_string`. The latter case can + # be seen as a special case of the former where the list of children we consider is just the + # single f-string. + children = node_attr[id].get("_children", [node]) + if isinstance(node, ast.Str): + # If the outer node is a `Str`, then we don't have to reassociate, since there are no + # f-strings. + # In this case we simply have to create the concatenation of its constituent parts. + node.implicitly_concatenated_parts = children + node.s = concatenate_stringparts(children, logger) + node.prefix = children[0].prefix + else: + # Otherwise, we first have to get the flattened list of all of the strings and/or + # expressions. + flattened_children = get_JoinedStr_children(children) + groups = [list(n) for _, n in groupby(flattened_children, key=is_string)] + # At this point, `values` is a list of lists, where each sublist is either: + # - a list of `StringPart`s, or + # - a singleton list containing an `expr`. + # Crucially, `StringPart` is _not_ an `expr`. + combined_values = [] + for group in groups: + first = group[0] + if isinstance(first, ast.expr): + # If we have a list of expressions (which may happen if an interpolation contains + # multiple distinct expressions, such as f"{foo:{bar}}", which uses interpolation to + # also specify the padding dynamically), we simply append it. + combined_values.extend(group) + else: + # Otherwise, we have a list of `StringPart`s, and we need to create a `Str` node to + # it. + + combined_string = concatenate_stringparts(group, logger) + str_node = ast.Str(combined_string, first.prefix, None) + copy_location(first, str_node) + # The end location should be the end of the last part (even if there is only one part). + str_node._end = group[-1]._end + if len(group) > 1: + str_node.implicitly_concatenated_parts = group + combined_values.append(str_node) + node.values = combined_values diff --git a/python/extractor/semmle/python/passes/__init__.py b/python/extractor/semmle/python/passes/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/semmle/python/passes/_pass.py b/python/extractor/semmle/python/passes/_pass.py new file mode 100644 index 00000000000..94c3b77a63d --- /dev/null +++ b/python/extractor/semmle/python/passes/_pass.py @@ -0,0 +1,11 @@ + +from abc import abstractmethod + +class Pass(object): + '''The base class for all extractor passes. + Defines a single method 'extract' for all extractors to override''' + + @abstractmethod + def extract(self, module, writer): + '''Extract trap file data from 'module', writing it to the writer.''' + pass diff --git a/python/extractor/semmle/python/passes/ast_pass.py b/python/extractor/semmle/python/passes/ast_pass.py new file mode 100644 index 00000000000..363e1007c64 --- /dev/null +++ b/python/extractor/semmle/python/passes/ast_pass.py @@ -0,0 +1,232 @@ + +from semmle.python import ast +import semmle.python.master +import sys +from semmle.python.passes._pass import Pass +from semmle.util import get_analysis_major_version + +__all__ = [ 'ASTPass' ] + +class ASTPass(Pass): + '''Extract relations from AST. + Use AST.Node objects to guide _walking of AST''' + + name = "ast" + + def __init__(self): + self.offsets = get_offset_table() + + #Entry point + def extract(self, root, writer): + try: + self.writer = writer + if root is None: + return + self._emit_variable(ast.Variable("__name__", root)) + self._emit_variable(ast.Variable("__package__", root)) + # Introduce special variable "$" for use by the points-to library. + self._emit_variable(ast.Variable("$", root)) + writer.write_tuple(u'py_extracted_version', 'gs', root.trap_name, get_analysis_major_version()) + self._walk(root, None, 0, root, None) + finally: + self.writer = None + + #Tree _walkers + + def _get_walker(self, node): + if isinstance(node, list): + return self._walk_list + elif isinstance(node, ast.AstBase): + return self._walk_node + else: + return self._emit_primitive + + def _walk(self, node, parent, index, scope, description): + self._get_walker(node)(node, parent, index, scope, description) + + def _walk_node(self, node, parent, index, scope, _unused): + self._emit_node(node, parent, index, scope) + if type(node) is ast.Name: + assert (hasattr(node, 'variable') and + type(node.variable) is ast.Variable), (node, parent, index, scope) + if type(node) in (ast.Class, ast.Function): + scope = node + # For scopes with a `from ... import *` statement introduce special variable "*" for use by the points-to library. + if isinstance(node, ast.ImportFrom): + self._emit_variable(ast.Variable("*", scope)) + for field_name, desc, child_node in iter_fields(node): + try: + index = self.offsets[(type(node).__name__, field_name)] + self._walk(child_node, node, index, scope, desc) + except ConsistencyError: + ex = sys.exc_info()[1] + ex.message += ' in ' + type(node).__name__ + if hasattr(node, 'rewritten') and node.rewritten: + ex.message += '(rewritten)' + ex.message += '.' + field_name + raise + + def _walk_list(self, node, parent, index, scope, description): + assert description.is_list(), description + if len(node) == 0: + return + else: + self._emit_list(node, parent, index, description) + for i, child in enumerate(node): + self._get_walker(child)(child, node, i, scope, description.item_type) + + #Emitters + def _emit_node(self, ast_node, parent, index, scope): + t = type(ast_node) + node = _ast_nodes[t.__name__] + #Ensure all stmts have a list as a parent. + if isinstance(ast_node, ast.stmt): + assert isinstance(parent, list), (ast_node, parent) + if node.is_sub_type(): + rel_name = node.super_type.relation_name() + shared_parent = not node.super_type.unique_parent + else: + rel_name = node.relation_name() + shared_parent = node.parents is None or not node.unique_parent + if rel_name[-1] != 's': + rel_name += 's' + if t.__mro__[1] in (ast.cmpop, ast.operator, ast.expr_context, ast.unaryop, ast.boolop): + #These nodes may be used more than once, but must have a + #unique id for each occurrence in the AST + fields = [ self.writer.get_unique_id() ] + fmt = 'r' + else: + fields = [ ast_node ] + fmt = 'n' + if node.is_sub_type(): + fields.append(node.index) + fmt += 'd' + if parent: + fields.append(parent) + fmt += 'n' + if shared_parent: + fields.append(index) + fmt += 'd' + self.writer.write_tuple(rel_name, fmt, *fields) + if t.__mro__[1] in (ast.expr, ast.stmt): + self.writer.write_tuple(u'py_scopes', 'nn', ast_node, scope) + + def _emit_variable(self, ast_node): + self.writer.write_tuple(u'variable', 'nns', ast_node, ast_node.scope, ast_node.id) + + def _emit_name(self, ast_node, parent): + self._emit_variable(ast_node) + self.writer.write_tuple(u'py_variables', 'nn', ast_node, parent) + + def _emit_primitive(self, val, parent, index, scope, description): + if val is None or val is False: + return + if isinstance(val, ast.Variable): + self._emit_name(val, parent) + return + assert not isinstance(val, ast.AstBase) + rel = description.relation_name() + if val is True: + if description.unique_parent: + self.writer.write_tuple(rel, 'n', parent) + else: + self.writer.write_tuple(rel, 'nd', parent, index) + else: + f = format_for_primitive(val, description) + if description.unique_parent: + self.writer.write_tuple(rel, f + 'n', val, parent) + else: + self.writer.write_tuple(rel, f + 'nd', val, parent, index) + + def _emit_list(self, node, parent, index, description): + rel_name = description.relation_name() + if description.unique_parent: + self.writer.write_tuple(rel_name, 'nn', node, parent) + else: + self.writer.write_tuple(rel_name, 'nnd', node, parent, index) + +_ast_nodes = semmle.python.master.all_nodes() +if get_analysis_major_version() < 3: + _ast_nodes['TryExcept'] = _ast_nodes['Try'] + _ast_nodes['TryFinally'] = _ast_nodes['Try'] + +class ConsistencyError(Exception): + + def __str__(self): + return self.message + +def iter_fields(node): + desc = _ast_nodes[type(node).__name__] + for name, description, _, _, _ in desc.fields: + if hasattr(node, name): + yield name, description, getattr(node, name) + + +NUMBER_TYPES = (int, float) + +def check_matches(node, node_type, owner, field): + if node_type is list: + if node.is_list(): + return + else: + for t in node_type.__mro__: + if t.__name__ == node.__name__: + return + if node_type in NUMBER_TYPES and node.__name__ == 'number': + return + raise ConsistencyError("Found %s expected %s for field %s of %s" % + (node_type.__name__, node.__name__, field, owner.__name__)) + +def get_offset_table(): + '''Returns mapping of (class_name, field_name) + pairs to offsets (in relation)''' + table = {} + nodes = _ast_nodes.values() + for node in nodes: + for field, _, offset, _, _, _ in node.layout: + table[(node.__name__, field)] = offset + try_node = _ast_nodes['Try'] + for field, _, offset, _, _, _ in try_node.layout: + table[('TryFinally', field)] = offset + table[('TryExcept', field)] = offset + return table + + +def format_for_primitive(val, description): + if isinstance(val, str): + return 'u' + elif isinstance(val, bytes): + return 'b' + elif description.__name__ == 'int': + return 'd' + else: + return 'q' + +class ASTVisitor(object): + """ + A node visitor base class that walks the abstract syntax tree and calls a + visitor function for every node found. This function may return a value + which is forwarded by the `visit` method. + + This class is meant to be subclassed, with the subclass adding visitor + methods. + + The visitor functions for the nodes are ``'visit_'`` + class name of the node. + """ + + def _get_visit_method(self, node): + method = 'visit_' + node.__class__.__name__ + return getattr(self, method, self.generic_visit) + + def visit(self, node): + """Visit a node.""" + self._get_visit_method(node)(node) + + def generic_visit(self, node): + """Called if no explicit visitor function exists for a node.""" + if isinstance(node, ast.AstBase): + for _, _, child in iter_fields(node): + self.visit(child) + elif isinstance(node, list): + for item in node: + self._get_visit_method(item)(item) diff --git a/python/extractor/semmle/python/passes/exports.py b/python/extractor/semmle/python/passes/exports.py new file mode 100644 index 00000000000..5fd69c8e093 --- /dev/null +++ b/python/extractor/semmle/python/passes/exports.py @@ -0,0 +1,113 @@ + +from semmle.python import ast +from semmle.python.passes._pass import Pass + +def write_exports(module, exports, writer): + for sym in exports: + writer.write_tuple(u'py_exports', 'ns', module, sym) + +def list_of_symbols_from_expr(expr): + #This should be a list of constant strings + if isinstance(expr, (ast.List, ast.Tuple)): + exports = [] + for item in expr.elts: + if isinstance(item, ast.Str): + exports.append(item.s) + return exports + return [] + +def is___all__(node): + try: + return isinstance(node, ast.Name) and node.variable.id == '__all__' + except Exception: + return False + +def __all___from_stmt(stmt): + '''Returns None if __all__ is not defined. + If __all__ may be defined then return a conservative approximation''' + assert isinstance(stmt, ast.stmt) + if isinstance(stmt, ast.If): + body_exports = __all___from_stmt_list(stmt.body) + if stmt.orelse: + orelse_exports = __all___from_stmt_list(stmt.orelse) + else: + orelse_exports = None + # If __all__ = ... on one branch but not other then return [] + # If defined on neither branch return None + if body_exports is None: + if orelse_exports is None: + return None + else: + return [] + else: + if orelse_exports is None: + return [] + else: + return set(body_exports).intersection(set(orelse_exports)) + elif isinstance(stmt, ast.Assign): + for target in stmt.targets: + if is___all__(target): + return list_of_symbols_from_expr(stmt.value) + return None + +def __all___from_stmt_list(stmts): + assert isinstance(stmts, list) + exports = None + for stmt in stmts: + ex = __all___from_stmt(stmt) + if ex is not None: + exports = ex + return exports + +def is_private_symbol(sym): + if sym[0] != '_': + return False + if len(sym) >= 4 and sym[:2] == '__' and sym[-2:] == '__': + return False + return True + +def globals_from_tree(node, names): + 'Add all globals defined in the tree to names' + if isinstance(node, list): + for subnode in node: + globals_from_tree(subnode, names) + elif isinstance(node, ast.Assign): + for target in node.targets: + if isinstance(target, ast.Name): + names.add(target.variable.id) + elif isinstance(node, ast.If): + if node.orelse: + left = set() + right = set() + globals_from_tree(node.body, left) + globals_from_tree(node.orelse, right) + names.update(left.intersection(right)) + # Don't decent into other nodes. + +def exports_from_ast(node): + 'Get a list of symbols exported by the module from its ast.' + #Look for assignments to __all__ + #If not available at top-level, then check if-statements, + #but ignore try-except and loops + assert type(node) is ast.Module + exports = __all___from_stmt_list(node.body) + if exports is not None: + return exports + # No explicit __all__ assignment so gather global assignments + exports = set() + globals_from_tree(node.body, exports) + return [ ex for ex in exports if not is_private_symbol(ex) ] + +class ExportsPass(Pass): + '''Finds all 'exports' of a module. An export is a symbol that is defined + in the __all__ list or, if __all__ is undefined, is defined at top-level + and is not private''' + + name = "exports" + + def __init__(self): + pass + + def extract(self, ast, writer): + exported = exports_from_ast(ast) + write_exports(ast, exported, writer) diff --git a/python/extractor/semmle/python/passes/flow.py b/python/extractor/semmle/python/passes/flow.py new file mode 100755 index 00000000000..a9148aefd0f --- /dev/null +++ b/python/extractor/semmle/python/passes/flow.py @@ -0,0 +1,1927 @@ +import sys +import os.path +import traceback +from typing import Optional + +from semmle.python import ast +from semmle import util +from semmle.python.passes.ast_pass import iter_fields +from semmle.python.passes._pass import Pass +from semmle.python.passes import pruner +from semmle.python.passes import splitter +from semmle.python.passes import unroller +from semmle.python import modules +import semmle.graph as graph +from semmle.logging import Logger + +__all__ = [ 'FlowPass' ] + +class ConsistencyError(util.SemmleError): + pass + +def error(node, _): + raise ConsistencyError("Unexpected node type " + type(node).__name__) + + +class FlowNode(object): + __slots__ = [ 'node' ] + + def __init__(self, node): + self.node = node + + def __repr__(self): + if hasattr(self.node, "lineno"): + return 'FlowNode(%s at %d)' % (type(self.node), self.node.lineno) + else: + return 'FlowNode(%r)' % self.node + + def copy(self): + return FlowNode(self.node) + +#Kinds of node sets. +NORMAL = util.NORMAL_EDGE +TRUE = util.TRUE_EDGE +FALSE = util.FALSE_EDGE +EXCEPTION = util.EXCEPTIONAL_EDGE +EXHAUSTED = util.EXHAUSTED_EDGE + +TRUE_OR_FALSE = TRUE | FALSE + +#Set of names of modules that are guaranteed to be in the interpreter regardless of platform +GUARANTEED_MODULES = { + "_ast", + "_bisect", + "_codecs", + "_collections", + "_functools", + "_heapq", + "_io", + "_locale", + "_md5", + "_operator", + "_random", + "_sha256", + "_sha512", + "_socket", + "_sre", + "_struct", + "_symtable", + "_warnings", + "_weakref", + "array", + "binascii", + "cmath", + "errno", + "gc", + "itertools", + "marshal", + "math", + "sys", + "syslog", + "time", + "unicodedata", + "zipimport", + "zlib", +} + + +_py3_names = { + "ArithmeticError", + "AssertionError", + "AttributeError", + "BaseException", + "BlockingIOError", + "BrokenPipeError", + "BufferError", + "BytesWarning", + "ChildProcessError", + "ConnectionAbortedError", + "ConnectionError", + "ConnectionRefusedError", + "ConnectionResetError", + "DeprecationWarning", + "EOFError", + "Ellipsis", + "EnvironmentError", + "Exception", + "False", + "FileExistsError", + "FileNotFoundError", + "FloatingPointError", + "FutureWarning", + "GeneratorExit", + "IOError", + "ImportError", + "ImportWarning", + "IndentationError", + "IndexError", + "InterruptedError", + "IsADirectoryError", + "KeyError", + "KeyboardInterrupt", + "LookupError", + "MemoryError", + "NameError", + "None", + "NotADirectoryError", + "NotImplemented", + "NotImplementedError", + "OSError", + "OverflowError", + "PendingDeprecationWarning", + "PermissionError", + "ProcessLookupError", + "ReferenceError", + "ResourceWarning", + "RuntimeError", + "RuntimeWarning", + "StopIteration", + "SyntaxError", + "SyntaxWarning", + "SystemError", + "SystemExit", + "TabError", + "TimeoutError", + "True", + "TypeError", + "UnboundLocalError", + "UnicodeDecodeError", + "UnicodeEncodeError", + "UnicodeError", + "UnicodeTranslateError", + "UnicodeWarning", + "UserWarning", + "ValueError", + "Warning", + "ZeroDivisionError", + "__build_class__", + "__debug__", + "__doc__", + "__import__", + "__loader__", + "__name__", + "__package__", + "__spec__", + "abs", + "all", + "any", + "ascii", + "bin", + "bool", + "bytearray", + "bytes", + # "callable", only 3.2+ + "chr", + "classmethod", + "compile", + "complex", + "copyright", + "credits", + "delattr", + "dict", + "dir", + "divmod", + "enumerate", + "eval", + "exec", + "exit", + "filter", + "float", + "format", + "frozenset", + "getattr", + "globals", + "hasattr", + "hash", + "help", + "hex", + "id", + "input", + "int", + "isinstance", + "issubclass", + "iter", + "len", + "license", + "list", + "locals", + "map", + "max", + "memoryview", + "min", + "next", + "object", + "oct", + "open", + "ord", + "pow", + "print", + "property", + "quit", + "range", + "repr", + "reversed", + "round", + "set", + "setattr", + "slice", + "sorted", + "staticmethod", + "str", + "sum", + "super", + "tuple", + "type", + "vars", + "zip", +} + +_py2_names = { + "ArithmeticError", + "AssertionError", + "AttributeError", + "BaseException", + "BufferError", + "BytesWarning", + "DeprecationWarning", + "EOFError", + "Ellipsis", + "EnvironmentError", + "Exception", + "False", + "FloatingPointError", + "FutureWarning", + "GeneratorExit", + "IOError", + "ImportError", + "ImportWarning", + "IndentationError", + "IndexError", + "KeyError", + "KeyboardInterrupt", + "LookupError", + "MemoryError", + "NameError", + "None", + "NotImplemented", + "NotImplementedError", + "OSError", + "OverflowError", + "PendingDeprecationWarning", + "ReferenceError", + "RuntimeError", + "RuntimeWarning", + "StandardError", + "StopIteration", + "SyntaxError", + "SyntaxWarning", + "SystemError", + "SystemExit", + "TabError", + "True", + "TypeError", + "UnboundLocalError", + "UnicodeDecodeError", + "UnicodeEncodeError", + "UnicodeError", + "UnicodeTranslateError", + "UnicodeWarning", + "UserWarning", + "ValueError", + "Warning", + "ZeroDivisionError", + "__debug__", + "__doc__", + "__import__", + "__name__", + "__package__", + "abs", + "all", + "any", + "apply", + "basestring", + "bin", + "bool", + "buffer", + "bytearray", + "bytes", + "callable", + "chr", + "classmethod", + "cmp", + "coerce", + "compile", + "complex", + "copyright", + "credits", + "delattr", + "dict", + "dir", + "divmod", + "enumerate", + "eval", + "execfile", + "exit", + "file", + "filter", + "float", + "format", + "frozenset", + "getattr", + "globals", + "hasattr", + "hash", + "help", + "hex", + "id", + "input", + "int", + "intern", + "isinstance", + "issubclass", + "iter", + "len", + "license", + "list", + "locals", + "long", + "map", + "max", + "memoryview", + "min", + "next", + "object", + "oct", + "open", + "ord", + "pow", + "print", + "property", + "quit", + "range", + "raw_input", + "reduce", + "reload", + "repr", + "reversed", + "round", + "set", + "setattr", + "slice", + "sorted", + "staticmethod", + "str", + "sum", + "super", + "tuple", + "type", + "unichr", + "unicode", + "vars", + "xrange", + "zip", +} + +#Set of names that always exist (for both Python 2 and 3) +BUILTIN_NAME_ALWAYS_EXISTS = _py2_names.intersection(_py3_names) + +# A NodeSet is a conceptually a set of (FlowNode, kind) pairs. +#This class exists to document the interface. +class ExampleNodeSet(object): + '''This class exists for documentation purposes only.''' + + def branch(self): + '''Branch into (true, false) pair of nodesets.''' + + def __add__(self, other): + '''Add this node set to another, returning the union''' + + def normalise(self): + '''Return normalise form of this node set, turning all kinds into NORMAL''' + + def exception(self): + '''Return exception form of this node set, turning all kinds into EXCEPTION''' + + def merge_true_false_pairs(self): + '''Return copy of this node set with all pairs of TRUE and FALSE kinds for the same node turned into NORMAL''' + + def add_node(self, node, kind): + '''Return a new node set with (node, kind) pair added.''' + + def invert(self): + '''Return copy of this node set with all TRUE kinds set to FALSE and vice versa.''' + +class EmptyNodeSet(object): + + def branch(self): + return self, self + + def __add__(self, other): + return other + + def normalise(self): + return self + + def exception(self): + return self + + def merge_true_false_pairs(self): + return self + + def add_node(self, node, kind): + return SingletonNodeSet(node, kind) + + def __iter__(self): + return iter(()) + + def __len__(self): + return 0 + + def __str__(self): + return "{}" + + def invert(self): + return self + +EMPTY = EmptyNodeSet() + +class SingletonNodeSet(object): + + __slots__ = [ 'node', 'kind'] + + def __init__(self, node, kind): + self.node = node + self.kind = kind + + def branch(self): + if self.kind == TRUE: + return self, EMPTY + elif self.kind == FALSE: + return EMPTY, self + elif self.kind == NORMAL: + return SingletonNodeSet(self.node, TRUE), SingletonNodeSet(self.node, FALSE) + else: + return self, self + + def __add__(self, other): + if other is EMPTY: + return self + else: + return other.add_node(self.node, self.kind) + + def normalise(self): + return SingletonNodeSet(self.node, NORMAL) + + def exception(self): + return SingletonNodeSet(self.node, EXCEPTION) + + def merge_true_false_pairs(self): + return self + + def add_node(self, node, kind): + if node == self.node and kind == self.kind: + return self + other = MultiNodeSet() + other.append((self.node, self.kind)) + other.append((node, kind)) + return other + + def __iter__(self): + yield self.node, self.kind + + def __len__(self): + return 1 + + def invert(self): + if self.kind & TRUE_OR_FALSE: + return SingletonNodeSet(self.node, self.kind ^ TRUE_OR_FALSE) + else: + return self + + def unique_node(self): + return self.node + + def __str__(self): + return "{(%s, %d)}" % (self.node, self.kind) + +class MultiNodeSet(list): + + __slots__ = [] + + def branch(self): + '''Branch into (true, false) pair of nodesets.''' + l = EMPTY + for node, kind in self: + if kind != FALSE: + l = l.add_node(node, kind) + r = EMPTY + for node, kind in self: + if kind != TRUE: + r = r.add_node(node, kind) + return l, r + + def __add__(self, other): + if other is EMPTY: + return self + res = MultiNodeSet(self) + if isinstance(other, SingletonNodeSet): + res.insert_node(other.node, other.kind) + return res + for node, kind in other: + res.insert_node(node, kind) + return res + + def convert(self, the_kind): + the_node = self[0][0] + for node, kind in self: + if node != the_node: + break + else: + return SingletonNodeSet(node, the_kind) + res = MultiNodeSet() + for node, kind in self: + res.insert_node(node, the_kind) + return res + + def normalise(self): + return self.convert(NORMAL) + + def exception(self): + return self.convert(EXCEPTION) + + def merge_true_false_pairs(self): + #Common case len() == 2 + if len(self) == 2: + if (self[0][1] | self[0][1]) == TRUE_OR_FALSE and self[0][0] == self[1][0]: + return SingletonNodeSet(self[0][0], NORMAL) + else: + return self + #Either no true, or no false edges. + all_kinds = 0 + for node, kind in self: + all_kinds |= kind + if (all_kinds & TRUE_OR_FALSE) != TRUE_OR_FALSE: + return self + + #General, slow and hopefully rare case. + nodes = {} + for node, kind in self: + if node in nodes: + nodes[node] |= kind + else: + nodes[node] = kind + res = MultiNodeSet() + for node, kind in nodes.items(): + if (kind & TRUE_OR_FALSE)== TRUE_OR_FALSE: + kind = (kind | NORMAL) & (NORMAL | EXCEPTION) + for K in (NORMAL, TRUE, FALSE, EXCEPTION): + if kind & K: + res.insert_node(node, K) + return res + + def add_node(self, *t): + res = MultiNodeSet(self) + res.insert_node(*t) + return res + + def insert_node(self, *t): + if t not in self: + self.append(t) + + def __str__(self): + return "{" + ",".join(self) + "}" + + def invert(self): + res = MultiNodeSet() + for node, kind in self: + if kind & TRUE_OR_FALSE: + res.insert_node(node, kind ^ TRUE_OR_FALSE) + else: + res.insert_node(node, kind) + return res + +class BlockStack(list): + '''A stack of blocks (loops or tries).''' + + + def push_block(self): + self.append(EMPTY) + + def pop_block(self): + return self.pop() + + def add(self, node_set): + self[-1] = self[-1] + node_set + +class FlowScope(object): + + def __init__(self, depth, ast_scope): + self.entry = FlowNode(ast_scope) + self.graph = graph.FlowGraph(self.entry) + self.exceptional_exit = FlowNode(ast_scope) + self.graph.add_node(self.exceptional_exit) + self.graph.annotate_node(self.exceptional_exit, EXCEPTION_EXIT) + self.depth = depth + self.exception_stack = BlockStack() + self.exception_stack.push_block() + self.breaking_stack = BlockStack() + self.continuing_stack = BlockStack() + self.return_stack = BlockStack() + self.return_stack.push_block() + self.ast_scope = ast_scope + + def inner(self, ast_scope): + return FlowScope(self.depth+1, ast_scope) + + def pop_exceptions(self): + return self.exception_stack.pop_block() + + def split(self): + splitter.do_split(self.ast_scope, self.graph) + + def prune(self): + #Remove the always false condition edges. + pruner.do_pruning(self.ast_scope, self.graph) + + def unroll(self): + unroller.do_unrolling(self.ast_scope, self.graph) + + def write_graph(self, writer): + self.graph.delete_unreachable_nodes() + #Emit flow graph + self._write_flow_nodes(writer) + for pred, succ, kind in self.graph.edges(): + write_successors(writer, pred, succ, kind) + if kind != NORMAL and kind != EXHAUSTED: + write_successors(writer, pred, succ, NORMAL) + #Emit idoms + for node, idom in self.graph.idoms(): + write_idoms(writer, node, idom) + #Emit SSA variables + for var in self.graph.ssa_variables(): + write_ssa_var(writer, var) + for node, var in self.graph.ssa_definitions(): + write_ssa_defn(writer, var, node) + for node, var in self.graph.ssa_uses(): + write_ssa_use(writer, node, var) + for var, arg in self.graph.ssa_phis(): + write_ssa_phi(writer, var, arg) + + def _write_flow_nodes(self, writer): + blocks = self.graph.get_basic_blocks() + for flow, note in self.graph.nodes(): + if note is not None: + write_scope_node(writer, flow, self.ast_scope, note) + if flow in blocks: + head, index = blocks[flow] + write_flow_node(writer, flow, head, index) + + +#Codes for scope entry/exit nodes. +#These are hardcoded in QL. Do not change them. +FALL_THROUGH_EXIT = 0 +EXCEPTION_EXIT = 1 +RETURN_EXIT = 2 +ENTRY = -1 + +class FlowPass(Pass): + '''Extracts flow-control information. Currently generates a flow control + graph. There is a many-to-one relation between flow-nodes and ast nodes. + This enables precise flow control for 'try' statements. + Each flow node also has a number. If there are several flow nodes for + one ast node, they will all have different numbers. + For flow nodes representing a scope (class, function or module) then + the numbers are as follows: entry=-1, exceptional exit=1, + fallthrough exit=0, explicit return=2 + ''' + + name = "flow" + + def __init__(self, split, prune=True, unroll=False, logger:Optional[Logger] = None): + 'Initialize all the tree walkers' + self._walkers = { + list : self._walk_list, + bool : self.skip, + int : self.skip, + float : self.skip, + bytes : self.skip, + str : self.skip, + complex : self.skip, + type(None) : self.skip, + ast.Lambda : self._walk_scope_defn, + ast.ClassExpr : self._walk_class_expr, + ast.FunctionExpr : self._walk_scope_defn, + ast.For : self._walk_for_loop, + ast.Pass : self._walk_stmt_only, + ast.Global : self._walk_stmt_only, + ast.Break : self._walk_break, + ast.BinOp : self._walk_binop, + ast.Compare : self._walk_compare, + ast.Continue : self._walk_continue, + ast.Raise : self._walk_raise, + ast.Return : self._walk_return, + ast.Delete : self._walk_delete, + ast.While : self._walk_while, + ast.If : self._walk_if_stmt, + ast.IfExp : self._walk_if_expr, + ast.expr_context : self.skip, + ast.Slice : self._walk_slice, + ast.ExceptStmt : error, + ast.comprehension : error, + ast.ListComp: self._walk_generator, + ast.SetComp: self._walk_generator, + ast.DictComp: self._walk_generator, + ast.Dict : self._walk_dict, + ast.keyword : self._walk_expr_no_raise, + ast.KeyValuePair : self._walk_keyword, + ast.DictUnpacking : self._walk_yield, + ast.Starred : self._walk_yield, + ast.arguments : self._walk_arguments, + ast.Name : self._walk_name, + ast.PlaceHolder : self._walk_name, + ast.Num : self._walk_atom, + ast.Str : self._walk_atom, + ast.Try : self._walk_try, + ast.List : self._walk_sequence, + ast.Tuple : self._walk_sequence, + ast.UnaryOp : self._walk_expr_no_raise, + ast.UnaryOp : self._walk_unary_op, + ast.Assign : self._walk_assign, + ast.ImportExpr : self._walk_import_expr, + ast.ImportMember : self._walk_expr, + ast.Ellipsis : self._walk_atom, + ast.Print : self._walk_post_stmt, + ast.alias : self._walk_alias, + ast.GeneratorExp: self._walk_generator, + ast.Assert: self._walk_assert, + ast.AssignExpr: self._walk_assignexpr, + ast.AugAssign : self._walk_augassign, + ast.Attribute : self._walk_attribute, + ast.Subscript : self._walk_subscript, + ast.BoolOp : self._walk_bool_expr, + ast.TemplateWrite : self._walk_post_stmt, + ast.Filter : self._walk_expr_no_raise, + ast.Yield : self._walk_yield, + ast.YieldFrom : self._walk_yield, + ast.Expr : self._walk_skip_stmt, + ast.Import : self._walk_skip_stmt, + ast.ImportFrom : self._walk_post_stmt, + ast.With: self._walk_with, + ast.Match: self._walk_match, + ast.Case: self._walk_case, + ast.Repr : self._walk_expr_no_raise, + ast.Nonlocal : self._walk_stmt_only, + ast.Exec : self._walk_exec, + ast.AnnAssign : self._walk_ann_assign, + ast.TypeAlias : self._walk_stmt_only, + ast.TypeVar: self.skip, + ast.TypeVarTuple: self.skip, + ast.ParamSpec: self.skip, + ast.SpecialOperation: self._walk_expr_no_raise, + ast.Module : error, + ast.expr : error, + ast.stmt : error, + ast.cmpop : error, + ast.boolop : error, + ast.operator : error, + ast.expr_context : error, + ast.unaryop : error, + ast.AstBase : error, + } + for t in ast.__dict__.values(): + if isinstance(t, type) and ast.AstBase in t.__mro__: + #Setup walkers + expr_walker = self._walk_expr + if t.__mro__[1] is ast.expr: + if t not in self._walkers: + self._walkers[t] = expr_walker + elif t.__mro__[1] in (ast.cmpop, ast.boolop, ast.operator, + ast.expr_context, ast.unaryop): + self._walkers[t] = self.skip + self._walkers[ast.TemplateDottedNotation] = self._walkers[ast.Attribute] + + # Initialize walkers for patterns, + # These return both a tree and a list of nodes: + # - the tree represents the computation needed to evaluate whether the pattern matches, + # - the list of nodes represents the bindings resulting from a successful match. + self._pattern_walkers = { + ast.MatchAsPattern: self._walk_as_pattern, + ast.MatchOrPattern: self._walk_or_pattern, + ast.MatchLiteralPattern: self._walk_literal_pattern, + ast.MatchCapturePattern: self._walk_capture_pattern, + ast.MatchWildcardPattern: self._walk_wildcard_pattern, + ast.MatchValuePattern: self._walk_value_pattern, + ast.MatchSequencePattern: self._walk_sequence_pattern, + ast.MatchStarPattern: self._walk_star_pattern, + ast.MatchMappingPattern: self._walk_mapping_pattern, + ast.MatchDoubleStarPattern: self._walk_double_star_pattern, + ast.MatchKeyValuePattern: self._walk_key_value_pattern, + ast.MatchClassPattern: self._walk_class_pattern, + ast.MatchKeywordPattern: self._walk_keyword_pattern, + } + + self.scope = None + self.in_try = 0 + self.in_try_name = 0 + self.split = split + self.prune = prune + self.unroll = unroll + self.logger = logger or Logger() + self.filename = "" + + #Entry point to the tree walker + def extract(self, ast, writer): + if ast is None: + return + self.writer = writer + self._walk_scope(ast) + + def set_filename(self, filename): + self.filename = filename + + #Walkers + + def _walk_arguments(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + return predecessors + + def _walk_generator(self, node, predecessors): + res = self._walk(node.iterable, predecessors) + res = self.add_successor(res, node) + raises = self._walk_scope(node.function) + if raises: + self._raise_exception(res) + return res + + def _walk_comprehension(self, node, predecessors): + return self._walk_generators(node, node.generators, predecessors) + + def _walk_generators(self, node, generators, predecessors): + if not generators: + if isinstance(node, ast.DictComp): + predecessors = self.add_successor(predecessors, node.value) + predecessors = self.add_successor(predecessors, node.key) + else: + predecessors = self.add_successor(predecessors, node.elt) + return predecessors + else: + gen = generators[0] + predecessors = self._walk(gen.iter, predecessors) + predecessors = self.add_successor(predecessors, gen) + loop_node = predecessors.unique_node() + predecessors = self._walk(gen.target, predecessors) + skip = EMPTY + for test in gen.ifs: + predecessors = self._walk(test, predecessors) + true_nodes, false_nodes = predecessors.branch() + predecessors += true_nodes + skip += false_nodes + predecessors = self._walk_generators(node, generators[1:], predecessors) + predecessors += skip + self.add_successor_node(predecessors, loop_node) + return predecessors + + def _walk_if_expr(self, node, predecessors): + test_successors = self._walk(node.test, predecessors) + true_successors, false_successors = test_successors.branch() + body_successors = self._walk(node.body, true_successors) + orelse_successors = self._walk(node.orelse, false_successors) + predecessors = body_successors + orelse_successors + predecessors = self.add_successor(predecessors, node) + return predecessors + + def _walk_dict(self, node, predecessors): + for item in node.items: + predecessors = self._walk(item, predecessors) + return self.add_successor(predecessors, node) + + def _walk_alias(self, node, predecessors): + predecessors = self._walk(node.value, predecessors) + return self._walk(node.asname , predecessors) + + def _walk_slice(self, node, predecessors): + predecessors = self._walk(node.start, predecessors) + predecessors = self._walk(node.stop, predecessors) + predecessors = self._walk(node.step, predecessors) + return self.add_successor(predecessors, node) + + def _walk_break(self, node, predecessors): + #A break statement counts as an exit to the enclosing loop statement + predecessors = self.add_successor(predecessors, node) + self.scope.breaking_stack.add(predecessors) + #Provide no predecessors to following statement + return EMPTY + + def _walk_continue(self, node, predecessors): + #A continue statement counts as an exit to the following orelse + predecessors = self.add_successor(predecessors, node) + self.scope.continuing_stack.add(predecessors) + #Provide no predecessors to following statement + return EMPTY + + def _raise_exception(self, predecessors): + predecessors = predecessors.exception() + self.scope.exception_stack.add(predecessors) + + def _walk_raise(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + predecessors = self.add_successor(predecessors, node) + self._raise_exception(predecessors) + return EMPTY + + def _walk_return(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + predecessors = self.add_successor(predecessors, node) + self.scope.return_stack.add(predecessors) + return EMPTY + + def _walk_delete(self, node, predecessors): + '''The CFG for the delete statement `del a, b` + looks like `a -> del -> b -> del` to ensure that + the implied use occurs before the deletion and that + `del x, x` has the correct semantics.''' + for item in node.targets: + predecessors = self._walk(item, predecessors) + predecessors = self.add_successor(predecessors, node) + return predecessors + + def _walk_stmt_only(self, node, predecessors): + return self.add_successor(predecessors, node) + + def _walk_scope(self, scope_node): + '''Returns: whether this scope raises an exception (or not)''' + prev_flow_scope = self.scope + if prev_flow_scope is None: + self.scope = FlowScope(0, scope_node) + else: + self.scope = prev_flow_scope.inner(scope_node) + predecessors = SingletonNodeSet(self.scope.entry, NORMAL) + for _, _, child_node in iter_fields(scope_node): + predecessors = self._walk(child_node, predecessors) + implicit_exit = self.add_successor(predecessors, scope_node).unique_node() + self.scope.graph.annotate_node(implicit_exit, FALL_THROUGH_EXIT) + if isinstance(scope_node, (ast.Module, ast.Class)): + self.scope.graph.use_all_defined_variables(implicit_exit) + #Mark all nodes that raise unhandled exceptions. + exceptions = self.scope.pop_exceptions() + for node, kind in exceptions: + if kind == NORMAL or kind == EXCEPTION: + self.scope.graph.annotate_node(node, EXCEPTION_EXIT) + else: + self.scope.graph.add_edge(node, self.scope.exceptional_exit) + self.scope.graph.annotate_edge(node, self.scope.exceptional_exit, kind) + self.scope.graph.annotate_node(self.scope.entry, ENTRY) + if not isinstance(scope_node, ast.Module): + returns = self.scope.return_stack.pop_block() + return_exit = self.add_successor(returns, scope_node).unique_node() + self.scope.graph.annotate_node(return_exit, RETURN_EXIT) + if self.split: + try: + self.scope.split() + # we found a regression in the split logic, where in some scenarios a split head would not be in the subgraph. + # Instead of aborting extracting the whole file, we can continue and just not split the graph. + # see semmlecode-python-tests/extractor-tests/splitter-regression/failure.py + except AssertionError: + self.logger.warning("Failed to split in " + self.filename + ", continuing anyway") + if self.prune: + self.scope.prune() + if self.unroll: + self.scope.unroll() + self.scope.write_graph(self.writer) + self.scope = prev_flow_scope + return bool(exceptions) + + def _walk_scope_defn(self, node, predecessors): + for field_name, _, child_node in iter_fields(node): + if field_name == 'inner_scope': + continue + predecessors = self._walk(child_node, predecessors) + predecessors = self.add_successor(predecessors, node) + sub_node = node.inner_scope + self._walk_scope(sub_node) + return predecessors + + def _walk_class_expr(self, node, predecessors): + predecessors = self._walk_scope_defn(node, predecessors) + self._raise_exception(predecessors) + return predecessors + + def _walk_post_stmt(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + return self.add_successor(predecessors, node) + + def _walk_skip_stmt(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + return predecessors + + def _walk_with(self, node, predecessors): + nodes = self._walk(node.context_expr, predecessors) + #The with statement has side effects which occur after the context manager has been computed + nodes = self.add_successor(nodes, node) + nodes = self._walk(node.optional_vars, nodes) + return self._walk(node.body, nodes) + + def _walk_match(self, node, predecessors): + pre_subject = self.add_successor(predecessors, node) + subject_successors = self._walk(node.subject, pre_subject) + final_successors = EMPTY + case_predecessors = subject_successors + for case in node.cases: + case_match_successors, case_nomatch_successors = self._walk_case(case, case_predecessors) + case_predecessors = case_nomatch_successors + final_successors += case_match_successors + return final_successors + case_nomatch_successors + + def _walk_case(self, node, predecessors): + """Returns: (match_successors, nomatch_successors)""" + + pre_test = self.add_successor(predecessors, node) + pattern_successors, pattern_captures = self._walk_pattern(node.pattern, pre_test) + + pattern_match_successors, pattern_nomatch_successors = pattern_successors.branch() + + for capture in pattern_captures: + pattern_match_successors = self._walk(capture, pattern_match_successors) + + if node.guard: + guard_successors = self._walk_guard(node.guard, pattern_match_successors) + guard_true_successors, guard_false_successors = guard_successors.branch() + pattern_match_successors = guard_true_successors + pattern_nomatch_successors += guard_false_successors + + body_successors = self._walk(node.body, pattern_match_successors) + return body_successors, pattern_nomatch_successors + + def _walk_pattern(self, node, predecessors): + """Walking a pattern results in a tree and a list of nodes: + - the tree represents the computation needed to evaluate whether the pattern matches, + - the list of nodes represents the bindings resulting from a successful match.""" + + return self._pattern_walkers[type(node)](node, predecessors) + + def _walk_patterns_in_sequence(self, patterns, predecessors): + bindings = [] + for pattern in patterns: + predecessors, new_bindings = self._walk_pattern(pattern, predecessors) + bindings += new_bindings + return predecessors, bindings + + def _walk_as_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + pattern_successors, bindings = self._walk_pattern(node.pattern, predecessors) + return pattern_successors, bindings + [node.alias] + + def _walk_or_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + # We cannot use `self._walk_patterns_in_sequence` as we only want + # to capture the bindings of the first pattern in the sequence + # (the bindings of the subsequent patterns are simply repetitions) + bindings = [] + first = True + for pattern in node.patterns: + predecessors, new_bindings = self._walk_pattern(pattern, predecessors) + if first: + bindings += new_bindings + first = False + return predecessors, bindings + + def _walk_literal_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + predecessors = self._walk(node.literal, predecessors) + return predecessors, [] + + def _walk_capture_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return predecessors, [node.variable] + + def _walk_wildcard_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return predecessors, [] + + def _walk_value_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + predecessors = self._walk(node.value, predecessors) + return predecessors, [] + + def _walk_sequence_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return self._walk_patterns_in_sequence(node.patterns, predecessors) + + def _walk_star_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return self._walk_pattern(node.target, predecessors) + + def _walk_mapping_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return self._walk_patterns_in_sequence(node.mappings, predecessors) + + def _walk_double_star_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return self._walk_pattern(node.target, predecessors) + + def _walk_key_value_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + key_successors, bindings = self._walk_pattern(node.key, predecessors) + # The key should have no bindings + assert not bindings, "Unexpected bindings in key pattern: %s" % bindings + return self._walk_pattern(node.value, key_successors) + + def _walk_class_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + class_name_successors = self._walk(node.class_name, predecessors) + bindings = EMPTY + positional_successors = class_name_successors + if node.positional: + for positional in node.positional: + positional_successors, new_bindings = self._walk_pattern(positional, positional_successors) + bindings += new_bindings + keyword_successors = positional_successors + if node.keyword: + for keyword in node.keyword: + keyword_successors, new_bindings = self._walk_pattern(keyword, keyword_successors) + bindings += new_bindings + return keyword_successors, bindings + + def _walk_keyword_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + attribute_successors = self._walk(node.attribute, predecessors) + return self._walk_pattern(node.value, attribute_successors) + + def _walk_guard(self, node, predecessors): + pre_test = self.add_successor(predecessors, node) + return self._walk(node.test, pre_test) + + def _walk_exec(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + exit = self.add_successor(predecessors, node) + self._raise_exception(exit) + if isinstance(node.body, ast.Str) and node.body.s.startswith("raise "): + #Due to syntactic differences between Python 2 and Python 3 + #`exec("raise ...")` can sometimes be used instead of `raise ...` + return EMPTY + return exit + + def _walk_assert(self, node, predecessors): + predecessors = self._walk(node.test, predecessors) + if is_false_constant(node.test): + msg = self._walk(node.msg, predecessors) + assert_ = self.add_successor(msg, node) + self._raise_exception(assert_) + return EMPTY + if is_true_constant(node.test): + return self.add_successor(predecessors, node) + true_succ, false_succ = predecessors.branch() + assert_ok = self.add_successor(true_succ, node) + msg = self._walk(node.msg, false_succ) + assert_fail = self.add_successor(msg, node) + self._raise_exception(assert_fail) + return assert_ok + + def _walk_assign(self, node, predecessors): + value = self._walk(node.value, predecessors) + rhs_count = self._count_items(node.value) + if rhs_count > 0: + for target in node.targets: + if rhs_count != self._count_items(target): + break + else: + #All targets and rhs are sequences of the same length + for target in node.targets: + value = self._walk_sequence(target, value, True) + return value + #All other cases + for target in node.targets: + value = self._walk(target, value) + return value + + def _count_items(self, node): + if isinstance(node, (ast.Tuple, ast.List)): + return len(node.elts) + return 0 + + def _walk_expr_no_raise(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + res = self.add_successor(predecessors, node) + return res + + def _walk_arg(self, node, predecessors): + return self._walk(node.arg, predecessors) + + def _walk_keyword(self, node, predecessors): + predecessors = self._walk(node.key, predecessors) + predecessors = self._walk(node.value, predecessors) + return self.add_successor(predecessors, node) + + def _walk_yield(self, node, predecessors): + predecessors = self._walk(node.value, predecessors) + res = self.add_successor(predecessors, node) + if self.in_try: + self._raise_exception(res) + return res + + def _walk_sequence(self, node, predecessors, safe=False): + #In the case of a store the list/tuple is "evaluated" first, + #i.e. it is exploded before the parts are stored. + #This operation may raise an exception, unless the + #corresponding tuple of exactly the same size exists on the rhs + #of the assignment. + if isinstance(node.ctx, (ast.Store, ast.Param)): + predecessors = self.add_successor(predecessors, node) + if self.in_try and not safe: + self._raise_exception(predecessors) + for child_node in node.elts: + predecessors = self._walk(child_node, predecessors) + else: + for child_node in node.elts: + predecessors = self._walk(child_node, predecessors) + predecessors = self.add_successor(predecessors, node) + return predecessors + + def _walk_unary_op(self, node, predecessors): + predecessors = self._walk(node.operand, predecessors) + if not isinstance(node.op, ast.Not): + return self.add_successor(predecessors, node) + if len(predecessors) <= 1: + successors = self.add_successor(predecessors, node) + else: + #Avoid merging true/false branches. + successors = EMPTY + flownodes = {} + for pred, kind in predecessors: + if kind not in flownodes: + flownodes[kind] = FlowNode(node) + successors = successors.add_node(flownodes[kind], kind) + self.scope.graph.add_node(flownodes[kind]) + self.scope.graph.add_edge(pred, flownodes[kind]) + self.scope.graph.annotate_edge(pred, flownodes[kind], kind) + return successors.invert() + + def _walk_import_expr(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + res = self.add_successor(predecessors, node) + if node.name not in GUARANTEED_MODULES: + #Can raise an exception + self._raise_exception(res) + return res + + def _walk_expr(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + res = self.add_successor(predecessors, node) + #Many expressions can raise an exception + self._raise_exception(res) + return res + + def _walk_bool_expr(self, node, predecessors): + other = self.add_successor(predecessors, node) + short_circuit = EMPTY + for operand in node.values: + predecessors = self._walk(operand, other) + true_pred, false_pred = predecessors.branch() + if isinstance(node.op, ast.And): + short_circuit += false_pred + other = true_pred + else: + short_circuit += true_pred + other = false_pred + return other + short_circuit + + def _walk_name(self, node, predecessors, ctx_type = None): + # Too many exception edges make analysis slower and adds almost no accuracy + # Assume that Name may only raise an exception if global in scope and + # not a store + res = self.add_successor(predecessors, node) + if ctx_type is None: + ctx_type = type(node.ctx) + assert ctx_type not in (ast.AugAssign, ast.AugLoad) + #Only generate SSA variables for variables local to scope + if node.variable.scope == self.scope.ast_scope: + if ctx_type in (ast.Store, ast.Param, ast.AugStore): + for flow_node, kind in res: + self.scope.graph.add_definition(flow_node, node.variable) + elif ctx_type is ast.Del: + for flow_node, kind in res: + self.scope.graph.add_deletion(flow_node, node.variable) + elif ctx_type in (ast.Load, ast.AugLoad): + for flow_node, kind in res: + self.scope.graph.add_use(flow_node, node.variable) + if self.in_try and ctx_type is not ast.Store: + if self.scope.depth == 0 or node.variable.is_global(): + # Use the common subset of Py2/3 names when determining which Name node can never raise. + # Ensures that code is not marked as unreachable by the Python 2 extractor, + # when it could be reached in Python 3 (and vice verse). + if node.variable.id not in BUILTIN_NAME_ALWAYS_EXISTS: + self._raise_exception(res) + elif self.in_try_name: + #If code explicitly catches NameError we need to raise from names. + self._raise_exception(res) + return res + + def _walk_subscript(self, node, predecessors, ctx_type = None): + if ctx_type is not ast.AugStore: + predecessors = self._walk(node.value, predecessors) + predecessors = self._walk(node.index, predecessors) + res = self.add_successor(predecessors, node) + self._raise_exception(res) + return res + + def _walk_attribute(self, node, predecessors, ctx_type = None): + if ctx_type is not ast.AugStore: + predecessors = self._walk(node.value, predecessors) + res = self.add_successor(predecessors, node) + if self.in_try: + self._raise_exception(res) + return res + + def _walk_atom(self, node, predecessors): + #Do not raise exception. Should have queries for undefined values. + return self.add_successor(predecessors, node) + + def _walk_if_stmt(self, node, predecessors): + test_successors = self._walk(node.test, predecessors) + true_successors, false_successors = test_successors.branch() + body_successors = self._walk(node.body, true_successors) + orelse_successors = self._walk(node.orelse, false_successors) + return body_successors + orelse_successors + + def _walk_compare(self, node, predecessors): + #TO DO -- Handle the (rare) case of multiple comparators; + #a < b < c is equivalent to a < b and b < c (without reevaluating b) + predecessors = self._walk(node.left, predecessors) + for comp in node.comparators: + predecessors = self._walk(comp, predecessors) + res = self.add_successor(predecessors, node) + #All comparisons except 'is' can (theoretically) raise an exception + #However == and != should never do so. + if self.in_try and node.ops[0].__class__ not in NON_RAISING_COMPARISON_OPS: + self._raise_exception(res) + return res + + def _walk_binop(self, node, predecessors, ctx_type = None): + left = node.left + if ctx_type is not None: + predecessors = self._walkers[type(left)](left, predecessors, ctx_type) + else: + predecessors = self._walk(left, predecessors) + predecessors = self._walk(node.right, predecessors) + res = self.add_successor(predecessors, node) + if self.in_try: + self._raise_exception(res) + return res + + def _walk_assignexpr(self, node, predecessors): + flow = self._walk(node.value, predecessors) + flow = self._walk_name(node.target, flow, ast.Store) + flow = self.add_successor(flow, node) + return flow + + def _walk_augassign(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + predecessors = self._walk_binop(node.operation, predecessors, ast.AugLoad) + target = node.operation.left + return self._walkers[type(target)](target, predecessors, ast.AugStore) + + def _walk_for_loop(self, node, predecessors): + loop_entry = self._walk(node.iter, predecessors) + pre_target = self.add_successor(loop_entry, node) + #Getting the iterator from the iterable may raise + if self.in_try: + self._raise_exception(pre_target) + body_entry = self._walk(node.target, pre_target) + return self._walk_loop_body(node, pre_target, body_entry, SingletonNodeSet(pre_target.node, EXHAUSTED)) + + def _walk_while(self, node, predecessors): + #return self._walk_loop(None, node.test, node, predecessors) + pre_test = self.add_successor(predecessors, node) + test_out = self._walk(node.test, pre_test) + body_entry, loop_exit = test_out.branch() + return self._walk_loop_body(node, pre_test, body_entry, loop_exit, is_true_constant(node.test)) + + def _walk_loop_body(self, node, top, body_entry, loop_exit, infinite = False): + self.scope.breaking_stack.push_block() + self.scope.continuing_stack.push_block() + body_exit = self._walk(node.body, body_entry) + breaks = self.scope.breaking_stack.pop_block() + continues = self.scope.continuing_stack.pop_block() + top_node = top.unique_node() + self.add_successor_node(continues, top_node) + self.add_successor_node(body_exit, top_node) + if infinite: + return breaks + if node.orelse: + loop_exit = self._walk(node.orelse, loop_exit) + return loop_exit + breaks + + def _walk_try_finally(self, node, predecessors): + assert node.finalbody + + self.scope.exception_stack.push_block() + self.scope.return_stack.push_block() + self.scope.continuing_stack.push_block() + self.scope.breaking_stack.push_block() + self.in_try += 1 + body_exit = self._walk_try_except(node, predecessors) + self.in_try -= 1 + continuing = self.scope.continuing_stack.pop_block() + returning = self.scope.return_stack.pop_block() + breaking = self.scope.breaking_stack.pop_block() + exceptions = self.scope.pop_exceptions() + if exceptions: + self.scope.exception_stack.add(self._walk(node.finalbody, exceptions)) + if continuing: + assert self.scope.continuing_stack, continuing + self.scope.continuing_stack.add(self._walk(node.finalbody, continuing)) + if breaking: + self.scope.breaking_stack.add(self._walk(node.finalbody, breaking)) + if returning: + self.scope.return_stack.add(self._walk(node.finalbody, returning)) + finally_exit = self._walk(node.finalbody, body_exit) + return finally_exit + + def _walk_try(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + if node.finalbody: + return self._walk_try_finally(node, predecessors) + else: + return self._walk_try_except(node, predecessors) + + def _walk_try_except(self, node, predecessors): + if not node.handlers: + self.in_try += 1 + body_exit = self._walk(node.body, predecessors) + res = self._walk(node.orelse, body_exit) + self.in_try -= 1 + return res + # check if there is a handler for exception groups (PEP 654) + handles_grouped = [h for h in node.handlers if isinstance(h, ast.ExceptGroupStmt)] + if handles_grouped: + return self._walk_try_except_groups(node, predecessors) + else: + return self._walk_try_except_no_groups(node, predecessors) + + def _walk_try_body(self, node, predecessors): + self.in_try += 1 + in_try_name = 0 + for handler in node.handlers: + if hasattr(handler.type, "variable") and handler.type.variable.id == "NameError": + in_try_name = 1 + self.in_try_name += in_try_name + self.scope.exception_stack.push_block() + body_exit = self._walk(node.body, predecessors) + self.in_try -= 1 + self.in_try_name -= in_try_name + exceptions = self.scope.pop_exceptions() + return body_exit, exceptions + + def _walk_try_except_groups(self, node, predecessors): + body_exit, exceptions = self._walk_try_body(node, predecessors) + + for handler in node.handlers: + # the handler test might fail, meaning the handler does not match the + # exception group. In this case, the exception is propagated, so the + # test node gets its own variable. + handler_test = self.add_successor(exceptions, handler) + handler_test = self._walk(handler.type, handler_test) + + # Assuming the handler does match, the handler body is executed. + handled = handler_test + if handler.name is not None: + handled = self._walk(handler.name, handled) + + handled = self._walk(handler.body, handled) + + # The next handler only sees unhandled exceptions from this handler + # _not_ exceptions raised from the body of the handler. + # If this handler did not match, there is an exceptional transition from the test + # otherwise, there is one from the body exit. + exceptions = handler_test.exception() + handled.exception() + + body_exit = self._walk(node.orelse, body_exit) + + # When we run out of handlers, there might still be unhandled exceptions. + # We add them to the current stack, so they can be picked up by the finally block + # or the scope exit. + self.scope.exception_stack.add(exceptions) + + # normal exit includes the last handler in case it handled all remaining exceptions + return handled + body_exit + + def _walk_try_except_no_groups(self, node, predecessors): + body_exit, exceptions = self._walk_try_body(node, predecessors) + + handler_exit = EMPTY + catch_all = False + for handler in node.handlers: + handled = self.add_successor(exceptions, handler).normalise() + if handler.type is None: + catch_all = True + else: + handled = self._walk(handler.type, handled) + if handler.name is not None: + handled = self._walk(handler.name, handled) + handler_exit += self._walk(handler.body, handled) + if not catch_all: + self.scope.exception_stack.add(exceptions) + body_exit = self._walk(node.orelse, body_exit) + return handler_exit + body_exit + + def _walk_ann_assign(self, node, predecessors): + flow = self._walk(node.value, predecessors) + flow = self._walk(node.target, flow) + # PEP 526 specifies that only annotations outside functions will be evaluated + if not isinstance(self.scope.ast_scope, ast.Function): + flow = self._walk(node.annotation, flow) + flow = self.add_successor(flow, node) + return flow + + def _walk(self, node, predecessors): + res = self._walkers[type(node)](node, predecessors) + return res + + def _walk_list(self, node, predecessors): + for child in node: + predecessors = self._walkers[type(child)](child, predecessors) + return predecessors + + def skip(self, _, predecessors): + return predecessors + + def add_successor_node(self, predecessors, flow_node): + for n, kind in predecessors: + self.scope.graph.add_edge(n, flow_node) + self.scope.graph.annotate_edge(n, flow_node, kind) + + def add_successor(self, predecessors, node, kind=NORMAL): + '''Add successor relations between all nodes + in the iterable predecessors and node.''' + assert isinstance(node, ast.AstBase) + flow_node = FlowNode(node) + predecessors = predecessors.merge_true_false_pairs() + #Ensure node is in graph, even if unreachable, so it can be annotated. + self.scope.graph.add_node(flow_node) + self.add_successor_node(predecessors, flow_node) + return SingletonNodeSet(flow_node, kind) + +NON_RAISING_COMPARISON_OPS = (ast.Is, ast.IsNot, ast.Eq, ast.NotEq) + + +SUCCESSOR_RELATIONS = { + TRUE: u'py_true_successors', + FALSE: u'py_false_successors', + NORMAL: u'py_successors', + EXCEPTION: u'py_exception_successors', + EXHAUSTED: u'py_successors', +} + +def write_successors(writer, from_node, to_node, kind): + writer.write_tuple(SUCCESSOR_RELATIONS[kind], 'nn', from_node, to_node) + +def write_flow_node(writer, flow, bb, index): + writer.write_tuple(u'py_flow_bb_node', 'nnnd', flow, flow.node, bb, index) + +def write_idoms(writer, node, idom): + writer.write_tuple(u'py_idoms', 'nn', node, idom) + +def write_ssa_var(writer, var): + writer.write_tuple(u'py_ssa_var', 'nn', var, var.variable) + +def write_ssa_defn(writer, var, node): + writer.write_tuple(u'py_ssa_defn', 'nn', var, node) + +def write_ssa_use(writer, node, var): + writer.write_tuple(u'py_ssa_use', 'nn', node, var) + +def write_ssa_phi(writer, var, arg): + writer.write_tuple(u'py_ssa_phi', 'nn', var, arg) + +def write_scope_node(writer, node, scope, index): + writer.write_tuple(u'py_scope_flow', 'nnd', node, scope, index) + +def is_true_constant(condition): + 'Determine if (AST node) condition is both constant and evaluates to True' + if isinstance(condition, ast.Num): + return condition.n + elif isinstance(condition, ast.Name): + return condition.variable.id == "True" + elif isinstance(condition, ast.Str): + return condition.s + return False + +def is_false_constant(condition): + 'Determine if (AST node) condition is both constant and evaluates to False' + if isinstance(condition, ast.Num): + return not condition.n + elif isinstance(condition, ast.Name): + return condition.variable.id == "False" or condition.variable.id == "None" + elif isinstance(condition, ast.Str): + return not condition.s + return False + + +TEMPLATE = '''"%s" [ +label = "%s" +color = "%s" +shape = "%s" +]; +''' + +class GraphVizIdPool(object): + '''This class provides the same interface as IDPool. + It outputs nodes in graphviz format''' + + def __init__(self, out, options): + self.out = out + self.pool = {} + self.next_id = 1000 + self.ranks = {} + self.node_colours = {} + self.options = options + + def get(self, node, name=None): + 'Return an id (in this pool) for node' + assert node is not None + #Use id() except for strings. + col = "black" + if isinstance(node, str): + node_id = node + else: + node_id = id(node) + if node_id in self.pool: + return self.pool[node_id] + next_id = 'ID_%d' % self.next_id + show = isinstance(node, FlowNode) or self.options.ast + if isinstance(node, FlowNode) and not self.options.ast: + col = self.node_colours.get(node, "black") + node = node.node + if name is None: + if hasattr(node, "is_async") and node.is_async: + name = "Async " + type(node).__name__ + else: + name = type(node).__name__ + if isinstance(node, FlowNode): + col = self.node_colours.get(node, "black") + name = type(node.node).__name__[:6] + if node.node not in self.ranks: + self.ranks[node.node] = set() + self.ranks[node.node].add(node) + else: + if name in ('Name', 'PlaceHolder'): + ctx_name = node.ctx.__class__.__name__ + name += ' (%s) id=%s' % (ctx_name, node.variable.id) + elif hasattr(node, "op"): + name = type(node.op).__name__ + else: + for field_name, _, child_node in iter_fields(node): + if field_name == "is_async": + continue + if type(child_node) in (str, int, float, bool): + txt = str(child_node) + if len(txt) > 16: + txt = txt[:13] + '...' + txt = txt.replace('\n', '\\n').replace('"', '\\"') + name += ' ' + field_name + '=' + txt + if isinstance(node, ast.stmt): + shape = 'rectangle' + elif type(node) in (ast.Function, ast.Module, ast.Class): + shape = 'octagon' + elif isinstance(node, FlowNode): + shape = "diamond" + else: + shape = 'oval' + if show: + util.fprintf(self.out, TEMPLATE, next_id, name, col, shape) + self.pool[node_id] = next_id + self.next_id += 1 + return next_id + + def print_ranks(self): + for node, flows in self.ranks.items(): + if not self.options.ast: + continue + node_id = self.get(node) + ids = [ node_id ] + for flow in flows: + flow_id = self.get(flow) + ids.append(flow_id) + util.fprintf(self.out, "{rank=same; %s;}\n", ' '.join(ids)) + +class GraphVizTrapWriter(object): + + def __init__(self, options): + if options.out is None: + self.out = sys.stdout + else: + self.out = open(options.out, 'w') + self.pool = GraphVizIdPool(self.out, options) + util.fprintf(self.out, HEADER) + + def close(self): + self.pool.print_ranks() + util.fprintf(self.out, FOOTER) + if self.out != sys.stdout: + self.out.close() + self.out = None + + def __del__(self): + if self.out and self.out != sys.stdout: + self.out.close() + +HEADER = '''digraph g { +graph [ +rankdir = "TB" +]; +''' + +FOOTER = '''} +''' + +FORMAT = '%s -> %s [color="%s"];\n' + +EDGE_COLOURS = {TRUE: "green", FALSE: "blue", NORMAL: "black", EXCEPTION: "red", EXHAUSTED: "brown" } +NODE_COLOURS = {EXCEPTION_EXIT: "red", ENTRY: "orange", FALL_THROUGH_EXIT: "grey", RETURN_EXIT: "blue" } + +EXTENDED_HELP = """Edge types: + +- Green, solid :: True successor of branching node. +- Blue, solid :: False successor of branching node. +- Brown, solid:: Exhausted successor of for node. +- Brown, dashed :: Target is corresponding AST node. + +- option -s (--ssa) :: + - Green, dashed :: Source is a place where the variable is used, target is the place + where the variable is defined. Edge marked with variable + name. + - Blue, dashed :: Target is phi node, source is where the variable comes from. + Edge marked with variable name. +- option -b (--basic_blocks) :: + - Purple, dashed :: Points from a node to the first node in its basic + block. Labelled with index of node within its basic block. +- option -i (--idoms) :: + - Yellow, solid :: Shows the immediate dominator (source) of a node (target). + +Node shapes: + +- Rectangle :: Statement. +- Octagon :: Function / module / class. +- Diamond :: Flow node. +- Oval :: Everything else. + +Node colours: +- Red :: Exception exit. +- Orange :: Entry. +- Grey :: Fall-through exit. +- Blue :: Return exit. +- Black :: Everything else. +""" + +def print_extended_help(option, opt_str, value, parser): + print(EXTENDED_HELP) + sys.exit(0) + +def args_parser(): + 'Parse command_line, returning options, arguments' + from optparse import OptionParser + usage = "usage: %prog [options] python-file" + parser = OptionParser(usage=usage) + parser.add_option("-i", "--idoms", help="Show immediate dominators", action="store_true") + parser.add_option("-s", "--ssa", help="Show SSA phis and uses.", action="store_true") + parser.add_option("-b", "--basic_blocks", help="Show basic-blocks.", action="store_true") + parser.add_option("-o", "--out", dest="out", + help="Output directory for writing gv file") + parser.add_option("--dont-split-graph", dest="split", default=True, action="store_false", + help = """Do not perform splitting on the flow graph.""") + parser.add_option("--dont-prune-graph", dest="prune", default=True, action="store_false", + help = """Do not perform pruning on the flow graph.""") + parser.add_option("--dont-unroll-graph", dest="unroll", action="store_false", + help = """DEPRECATED. Do not perform unrolling on the flow graph.""") + parser.add_option("--unroll-graph", dest="unroll", default=False, action="store_true", + help = """Perform unrolling on the flow graph. Default false.""") + parser.add_option("--no-ast", dest="ast", default=True, action="store_false", + help = """Do not output AST nodes.""") + parser.add_option("--extended-help", help="Print extended help.", action="callback", + callback=print_extended_help) + parser.add_option("--tsg", dest="tsg", default=False, action="store_true", + help="Use tgs based parser.") + return parser + +def main(): + 'Write out flow graph (as computed by FlowPass) in graphviz format' + import re + definitions = {} + + _UNDEFINED_NAME = ast.Name("Not defined", ast.Load()) + _UNDEFINED_NAME.variable = ast.Variable("Not defined", None) + UNDEFINED_NODE = FlowNode(_UNDEFINED_NAME) + + global write_successors, write_flow_node, write_idoms, write_special_successors + global write_ssa_var, write_ssa_use, write_ssa_phi, write_ssa_defn, write_scope_node + + parser = args_parser() + options, args = parser.parse_args(sys.argv[1:]) + + if len(args) != 1: + sys.stderr.write("Error: wrong number of arguments.\n") + parser.print_help() + return + + inputfile = args[0] + + if not os.path.isfile(inputfile): + sys.stderr.write("Error: input file does not exist.\n") + return + + writer = GraphVizTrapWriter(options) + def write(*args): + util.fprintf(writer.out, *args) + + successors = set() + def write_successors(writer, from_node, to_node, kind): + from_id = writer.pool.get(from_node) + to_id = writer.pool.get(to_node) + if (from_node, to_node) not in successors: + write(FORMAT, from_id, to_id, EDGE_COLOURS[kind]) + successors.add((from_node, to_node)) + + def write_flow_node(out, flow, bb, index): + flow_id = writer.pool.get(flow) + if options.ast: + node_id = writer.pool.get(flow.node) + write('%s->%s [ style = "dashed" color = "brown" ];\n', flow_id, node_id) + if options.basic_blocks: + bb_id = writer.pool.get(bb) + write('%s->%s [ style = "dashed" color = "purple" label = "%d" ];\n', + flow_id, bb_id, index) + + if options.idoms: + def write_idoms(out, node, idom): + node_id = writer.pool.get(node) + idom_id = writer.pool.get(idom) + write('%s->%s [ color = "yellow" ];\n', idom_id, node_id) + else: + def write_idoms(out, node, idom): + pass + + def write_scope_node(writer, node, scope, index): + writer.pool.node_colours[node] = NODE_COLOURS[index] + + def write_ssa_var(out, ssa_var): + pass + + def write_ssa_defn(out, ssa_var, node): + definitions[ssa_var] = node + + def get_ssa_node(var): + '''If SSA_Var node is undefined, then FlowGraph inserts a None - + Change to UNDEFINED''' + if var in definitions: + return definitions[var] + else: + return UNDEFINED_NODE + + if options.ssa: + def write_ssa_use(out, node, var): + var_id = writer.pool.get(get_ssa_node(var)) + node_id = writer.pool.get(node) + write('%s->%s [ color = "green", style="dashed", label="use(%s)" ]\n' + % (node_id, var_id, var.variable.id)) + + def write_ssa_phi(out, phi, arg): + phi_id = writer.pool.get(get_ssa_node(phi)) + arg_id = writer.pool.get(get_ssa_node(arg)) + write('%s->%s [ color = "blue", style="dashed", label="phi(%s)" ]\n' + % (arg_id, phi_id, arg.variable.id)) + else: + def write_ssa_use(out, node, var): + pass + + def write_ssa_phi(out, phi, arg): + pass + if options.tsg: + import semmle.python.parser.tsg_parser + parsed_ast = semmle.python.parser.tsg_parser.parse(inputfile, FakeLogger()) + else: + module = modules.PythonSourceModule("__main__", inputfile, FakeLogger()) + parsed_ast = module.ast + FlowPass(options.split, options.prune, options.unroll).extract(parsed_ast, writer) + writer.close() + +class FakeLogger(object): + + def debug(self, fmt, *args): + print(fmt % args) + + def traceback(self): + print(traceback.format_exc()) + + info = warning = error = trace = debug + +if __name__ == '__main__': + main() diff --git a/python/extractor/semmle/python/passes/labeller.py b/python/extractor/semmle/python/passes/labeller.py new file mode 100644 index 00000000000..d093aee6547 --- /dev/null +++ b/python/extractor/semmle/python/passes/labeller.py @@ -0,0 +1,117 @@ +# Label an AST with symbol-tables. +# Follow ordering specified in Python/symtable.c + +from semmle.python import ast + +from semmle.python.passes.ast_pass import iter_fields, ASTVisitor + +__all__ = [ 'Labeller' ] + +class SymbolTable(ASTVisitor): + '''A symbol table for a Python scope. + Records uses and definitions, `global` and `nonlocal` statements for names in that scope''' + + def __init__(self, scope): + self.definitions = set() + self.uses = set() + self.declared_as_global = set() + self.declared_as_nonlocal = set() + for _, _, child in iter_fields(scope): + self.visit(child) + + def visit_Class(self, node): + pass + + def visit_Function(self, node): + pass + + def visit_Name(self, node): + name = node.variable.id + if isinstance(node.ctx, ast.Load): + self.uses.add(name) + elif isinstance(node.ctx, (ast.Store, ast.Param, ast.Del)): + self.definitions.add(name) + else: + raise Exception("Unknown context for name: %s" % node.ctx) + + def visit_Global(self, node): + self.declared_as_global.update(node.names) + + def visit_Nonlocal(self, node): + self.declared_as_nonlocal.update(node.names) + + def is_bound(self, name): + declared_free = name in self.declared_as_global or name in self.declared_as_nonlocal + return name in self.definitions and not declared_free + +class _LabellingContext(ASTVisitor): + + def __init__(self, scope, module = None, outer = None): + '''Create a labelling context for `scope`. `module` is the module containing the scope, + and outer is the enclosing context, if any''' + self.symbols = SymbolTable(scope) + self.scope = scope + self.outer = outer + if module is None: + module = scope + self.module = module + + def label(self): + 'Label the node with this context' + self.visit(self.module) + + def visit_Function(self, node): + sub_context = _LabellingContext(node, self.module, self) + for _, _, child in iter_fields(node): + sub_context.visit(child) + + visit_Class = visit_Function + + def visit_Variable(self, node): + if node.scope is not None: + return + name = node.id + if name in self.symbols.declared_as_global: + node.scope = self.module + elif self.symbols.is_bound(name): + node.scope = self.scope + else: # Free variable, either implicitly or explicitly via nonlocal. + outer = self.outer + while outer is not None: + if isinstance(outer.scope, ast.Class): + # in the code example below, the use of `baz` inside `func` is NOT a reference to the + # function defined on the class, but is a reference to a global variable. + # + # The use of `baz` on class scope -- `bazzed = baz("class-scope")` + # -- is a reference to the function defined on the + # + # ```py + # class Foo + # def baz(arg): + # return arg + "-baz" + # def func(self): + # return baz("global-scope") + # bazzed = baz("class-scope") + # ``` + # + # So we skip over class scopes. + # + # See ql/python/ql/test/library-tests/variables/scopes/in_class.py + # added in https://github.com/github/codeql/pull/10171 + pass + elif outer.symbols.is_bound(name): + node.scope = outer.scope + break + outer = outer.outer + else: + node.scope = self.module + +class Labeller(object): + '''Labels the ast using symbols generated by the symtable module''' + + def apply(self, module): + 'Apply this Labeller to the module' + #Ensure that AST root nodes have a globally consistent identifier + if module.ast is None: + return + _LabellingContext(module.ast).label() diff --git a/python/extractor/semmle/python/passes/lexical.py b/python/extractor/semmle/python/passes/lexical.py new file mode 100644 index 00000000000..31c52c2a959 --- /dev/null +++ b/python/extractor/semmle/python/passes/lexical.py @@ -0,0 +1,153 @@ +import ast +import sys +import math + +from semmle.python.passes.ast_pass import iter_fields +from semmle.python import ast +from semmle.python.passes._pass import Pass + +__all__ = [ 'LexicalPass' ] + +STMT_OR_EXPR = ast.expr, ast.stmt +LOCATABLE = STMT_OR_EXPR + (ast.pattern, ast.comprehension, ast.StringPart, ast.keyword, ast.KeyValuePair, ast.DictUnpacking, ast.type_parameter) +CLASS_OR_FUNCTION = ast.Class, ast.Function +SCOPES = ast.Class, ast.Function, ast.Module + +class LexicalPass(Pass): + + def extract(self, ast, comments, writer): + 'The entry point' + LexicalModule(ast, comments, writer).extract() + + +class LexicalModule(object): + 'Object for extracting lexical information for the given module.' + + def __init__(self, ast, comments, writer): + assert ast is not None and comments is not None + self.ast = ast + self.comments = comments + self.writer = writer + self.module_id = writer.get_node_id(ast) + + def extract(self): + loc_id = self.get_location(0, 0, 0, 0) + self.writer.write_tuple(u'py_scope_location', 'rr', loc_id, self.module_id) + self.emit_line_info() + self.emit_locations(self.ast) + + def emit_line_info(self): + for text, start, end in self.comments: + #Generate a unique string for comment based on location + comment_id = str(start + end) + loc_id = self.get_location(start[0], start[1]+1, + end[0], end[1]) + try: + self.writer.write_tuple(u'py_comments', 'nsr', + comment_id, text, loc_id) + except UnicodeDecodeError: + # Handle non-ascii comments. Should only happen in Py2 + assert sys.hexversion < 0x03000000 + text = text.decode("latin8") + self.writer.write_tuple(u'py_comments', 'nsr', + comment_id, text, loc_id) + comment_bits = get_comment_bits(self.comments) + self.emit_line_counts(self.ast, set(), comment_bits) + + def emit_line_counts(self, node, code_lines, comment_bits): + if isinstance(node, SCOPES) and node.body: + doc_line_count = 0 + stmt0 = node.body[0] + if type(stmt0) == ast.Expr: + docstring = stmt0.value + if isinstance(docstring, ast.Str): + doc_line_count = docstring._end[0] - docstring.lineno + 1 + inner_code_lines = set() + inner_code_lines.add(node.lineno) + for _, _, child_node in iter_fields(node): + self.emit_line_counts(child_node, inner_code_lines, comment_bits) + assert inner_code_lines + startline = min(inner_code_lines) + endline = max(inner_code_lines) + if isinstance(node, ast.Module): + endline = max(endline, last_line(comment_bits)) + comment_line_count = get_lines_in_range(comment_bits, startline, endline) + code_line_count = len(inner_code_lines) - doc_line_count + code_lines.update(inner_code_lines) + self.print_lines(u'code', node, code_line_count) + self.print_lines(u'comment', node, comment_line_count) + self.print_lines(u'docstring', node, doc_line_count) + self.print_lines(u'all', node, endline - startline + 1) + if isinstance(node, ast.Module): + total_lines = code_line_count + comment_line_count + doc_line_count + self.writer.write_tuple(u'numlines', 'rddd', self.module_id, total_lines, code_line_count, comment_line_count + doc_line_count) + elif isinstance(node, list): + for n in node: + self.emit_line_counts(n, code_lines, comment_bits) + elif isinstance(node, STMT_OR_EXPR): + for _, _, child_node in iter_fields(node): + self.emit_line_counts(child_node, code_lines, comment_bits) + assert hasattr(node, "lineno"), node + line = node.lineno + endline, _ = node._end + while line <= endline: + code_lines.add(line) + line += 1 + + def print_lines(self, name, node, count): + self.writer.write_tuple(u'py_%slines' % name, 'nd', node, count) + + def get_location(self, bl, bc, el, ec): + loc_id = self.writer.get_unique_id() + self.writer.write_tuple(u'locations_ast', 'rrdddd', + loc_id, self.module_id, bl, bc, el, ec) + return loc_id + + def emit_locations(self, node): + if isinstance(node, ast.AstBase): + if isinstance(node, LOCATABLE): + self._write_location(node) + elif isinstance(node, CLASS_OR_FUNCTION): + bl, bc = node.lineno, node.col_offset+1 + el, ec = node._end + loc_id = self.get_location(bl, bc, el, ec) + self.writer.write_tuple(u'py_scope_location', 'rn', loc_id, node) + for _, _, child_node in iter_fields(node): + self.emit_locations(child_node) + elif isinstance(node, list): + for n in node: + self.emit_locations(n) + + def _write_location(self, node): + bl, bc = node.lineno, node.col_offset+1 + assert len(node._end) == 2, node + el, ec = node._end + loc_id = self.get_location(bl, bc, el, ec) + self.writer.write_tuple(u'py_locations', 'rn', loc_id, node) + +def get_comment_bits(comments): + comment_bits = 0 + for _, start, end in comments: + line, _ = start + end_line, _ = end + while line <= end_line: + comment_bits |= (1<= 0: + length = end - start + 1 + if length < 0: + return 0 + section = bits >> start + section &= (1 << length) - 1 + else: + section = bits >> start + return bin(section).count('1') + +def last_line(n): + if n <= 0: + return 0 + return int(math.log(n, 2)) diff --git a/python/extractor/semmle/python/passes/objects.py b/python/extractor/semmle/python/passes/objects.py new file mode 100644 index 00000000000..599539bc541 --- /dev/null +++ b/python/extractor/semmle/python/passes/objects.py @@ -0,0 +1,380 @@ + +import ast +import sys +from types import ModuleType, GetSetDescriptorType +import hashlib +import os + +from semmle.python import ast +from semmle.python.passes._pass import Pass +from semmle.util import get_analysis_major_version +from semmle.python.passes.ast_pass import iter_fields +from semmle.cmdline import is_legal_module_name + + +''' +The QL library depends on a reasonable one-to-one correspondence +between DB entities and Python objects. However, since QL has only +one notion of equality, but Python has two (`__eq__` and `is`) we need to be careful. +What we want to do is to treat objects like builtin functions and classes as using +reference equality and numbers and strings as using value equality. + +In practice this is impossible as we want to distinguish `True` from `1` from `1.0` +even though all these values are equal. However, we want to get as close as possible. + +''' + + +__all__ = [ 'ObjectPass' ] + +OBJECT_TYPES = set([ ast.ClassExpr, ast.Call, + ast.FunctionExpr, ast.Tuple, + ast.Str, ast.Num, ast.List, ast.ListComp, ast.Module, + ast.Dict, ast.Ellipsis, ast.Lambda]) + +# Types from Python 2.7 onwards +OBJECT_TYPES.add(ast.DictComp) +OBJECT_TYPES.add(ast.SetComp) +OBJECT_TYPES.add(ast.Set) + +NUMERIC_TYPES = set([int, float, bool]) + +BUILTINS_NAME = 'builtins' + +LITERALS = (ast.Num, ast.Str) + +class _CObject(object): + '''Utility class to wrap arbitrary C objects. + Treat all objects as unique. Rely on naming in the + trap files to merge the objects that we want merged. + ''' + __slots__ = ['obj'] + + def __init__(self, obj): + self.obj = obj + + def __eq__(self, other): + if isinstance(other, _CObject): + return self.obj is other.obj + else: + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return id(self.obj) + +class ObjectPass(Pass): + '''Generates relations for objects. This includes information about + builtin objects, including their types and members. + It also generates objects for all literal values present in the Python source.''' + + def extract(self, ast, path, writer): + self.writer = writer + try: + self._extract_py(ast) + self._extract_possible_module_names(path) + finally: + self.writer = None + + def _extract_possible_module_names(self, path): + maybe_name, _ = os.path.splitext(path) + maybe_name = maybe_name.replace(os.sep, ".") + while maybe_name.count(".") > 3: + _, maybe_name = maybe_name.split(".", 1) + while True: + if is_legal_module_name(maybe_name): + self._write_module_and_package_names(maybe_name) + if "." not in maybe_name: + return + _, maybe_name = maybe_name.split(".", 1) + + def _write_module_and_package_names(self, module_name): + self._write_c_object(module_name, None, False) + while "." in module_name: + module_name, _ = module_name.rsplit(".", 1) + self._write_c_object(module_name, None, False) + + def extract_builtin(self, module, writer): + self.writer = writer + try: + self._extract_c(module) + finally: + self.writer = None + + def _extract_c(self, mod): + self.next_address_label = 0 + self.address_labels = {} + self._write_c_object(mod, None, False) + self.address_labels = None + + def _write_str(self, s): + assert type(s) is str + self._write_c_object(s, None, False) + + def _write_c_object(self, obj, label, write_special, string_prefix=""): + ANALYSIS_MAJOR_VERSION = get_analysis_major_version() + # If we're extracting Python 2 code using Python 3, we want to treat `str` as `bytes` for + # the purposes of determining the type, but we still want to treat the _value_ as if it's a `str`. + obj_type = type(obj) + if obj_type == str and ANALYSIS_MAJOR_VERSION == 2 and 'u' not in string_prefix: + obj_type = bytes + + cobj = _CObject(obj) + if self.writer.has_written(cobj): + return self.writer.get_node_id(cobj) + obj_label = self.get_label_for_object(obj, label, obj_type) + obj_id = self.writer.get_labelled_id(cobj, obj_label) + #Avoid writing out all the basic types for every C module. + if not write_special and cobj in SPECIAL_OBJECTS: + return obj_id + type_id = self._write_c_object(obj_type, None, write_special) + self.writer.write_tuple(u'py_cobjects', 'r', obj_id) + self.writer.write_tuple(u'py_cobjecttypes', 'rr', obj_id, type_id) + self.writer.write_tuple(u'py_cobject_sources', 'rd', obj_id, 0) + if isinstance(obj, ModuleType) or isinstance(obj, type): + for name, value in sorted(obj.__dict__.items()): + if (obj, name) in SKIPLIST: + continue + val_id = self._write_c_object(value, obj_label + u'$%d' % ANALYSIS_MAJOR_VERSION + name, write_special) + self.writer.write_tuple(u'py_cmembers_versioned', 'rsrs', + obj_id, name, val_id, ANALYSIS_MAJOR_VERSION) + if isinstance(obj, type) and obj is not object: + super_id = self._write_c_object(obj.__mro__[1], None, write_special) + self.writer.write_tuple(u'py_cmembers_versioned', 'rsrs', + obj_id, u".super.", super_id, ANALYSIS_MAJOR_VERSION) + if isinstance(obj, (list, tuple)): + for index, item in enumerate(obj): + item_id = self._write_c_object(item, obj_label + u'$' + str(index), write_special) + self.writer.write_tuple(u'py_citems', 'rdr', + obj_id, index, item_id) + if type(obj) is GetSetDescriptorType: + for name in type(obj).__dict__: + if name == '__name__' or not hasattr(obj, name): + continue + val_id = self._write_c_object(getattr(obj, name), obj_label + u'$%d' % ANALYSIS_MAJOR_VERSION + name, write_special) + self.writer.write_tuple(u'py_cmembers_versioned', 'rsrs', + obj_id, name, val_id, ANALYSIS_MAJOR_VERSION) + if hasattr(obj, '__name__'): + #Use qualified names for classes. + if isinstance(obj, type): + name = qualified_type_name(obj) + # https://bugs.python.org/issue18602 + elif isinstance(obj, ModuleType) and obj.__name__ == "io": + name = "_io" + elif obj is EXEC: + name = "exec" + else: + name = obj.__name__ + self.writer.write_tuple(u'py_cobjectnames', 'rs', + obj_id, name) + elif type(obj) in NUMERIC_TYPES: + self.writer.write_tuple(u'py_cobjectnames', 'rq', + obj_id, obj) + elif type(obj) is str: + if 'b' in string_prefix: + prefix = u"b" + elif 'u' in string_prefix: + prefix = u"u" + else: + if ANALYSIS_MAJOR_VERSION == 2: + prefix = u"b" + else: + prefix = u"u" + self.writer.write_tuple(u'py_cobjectnames', 'rs', + obj_id, prefix + u"'" + obj + u"'") + elif type(obj) is bytes: + #Convert bytes to a unicode characters one-to-one. + obj_string = u"b'" + obj.decode("latin-1") + u"'" + self.writer.write_tuple(u'py_cobjectnames', 'rs', + obj_id, obj_string) + elif type(obj) is type(None): + self.writer.write_tuple(u'py_cobjectnames', 'rs', + obj_id, u'None') + else: + self.writer.write_tuple(u'py_cobjectnames', 'rs', + obj_id, u'object') + return obj_id + + def write_special_objects(self, writer): + '''Write important builtin objects to the trap file''' + self.writer = writer + self.next_address_label = 0 + self.address_labels = {} + + def write(obj, name, label=None): + obj_id = self._write_c_object(obj, label, True) + self.writer.write_tuple(u'py_special_objects', 'rs', obj_id, name) + + for obj, name in SPECIAL_OBJECTS.items(): + write(obj.obj, name) + + ###Artificial objects for use by the type-inferencer - Make sure that they are unique. + write(object(), u"_semmle_unknown_type", u"$_semmle_unknown_type") + write(object(), u"_semmle_undefined_value", u"$_semmle_undefined_value") + + self.writer = None + self.address_labels = None + + def get_label_for_object(self, obj, default_label, obj_type): + """Gets a label for an object. Attempt to make this as universal as possible. + The object graph in the database should reflect the real object graph, + only rarely diverging. This should be true even in highly parallel environments + including cases where trap files may be overwritten. + Proviso: Distinct immutable primitive objects may be merged (which should be benign) + For objects without a unambiguous global name, 'default_label' is used. + """ + #This code must be robust against (possibly intentionally) incorrect implementations + #of the object model. + if obj is None: + return u"C_None" + t = type(obj) + t_name = t.__name__ + if t is tuple and len(obj) == 0: + return u"C_EmptyTuple" + + if obj_type is str: + prefix = u"C_unicode$" + else: + prefix = u"C_bytes$" + if t is str: + obj = obj.encode("utf8", errors='replace') + return prefix + hashlib.sha1(obj).hexdigest() + if t is bytes: + return prefix + hashlib.sha1(obj).hexdigest() + if t in NUMERIC_TYPES: + return u"C_" + t_name + u"$" + repr(obj) + try: + if isinstance(obj, type): + return u"C_" + t_name + u"$" + qualified_type_name(obj) + except Exception: + #Misbehaved object. + return default_label + if t is ModuleType: + return u"C_" + t_name + u"$" + obj.__name__ + if t is type(len): + mod_name = obj.__module__ + if isinstance(mod_name, str): + if mod_name == BUILTINS_NAME: + mod_name = "builtins" + return u"C_" + t_name + u"$" + mod_name + "." + obj.__name__ + return default_label + + # Python files -- Extract objects for all numeric and string values. + + def _extract_py(self, ast): + self._walk_py(ast) + + def _write_literal(self, node): + if isinstance(node, ast.Num): + self._write_c_object(node.n, None, False) + else: + prefix = getattr(node, "prefix", "") + # Output both byte and unicode objects if the relevant objects could exist + # Non-prefixed strings can be either bytes or unicode. + if 'u' not in prefix: + try: + self._write_c_object(node.s.encode("latin-1"), None, False, string_prefix=prefix) + except UnicodeEncodeError: + #If not encodeable as latin-1 then it cannot be bytes + pass + if 'b' not in prefix: + self._write_c_object(node.s, None, False, string_prefix=prefix) + + def _walk_py(self, node): + if isinstance(node, ast.AstBase): + if isinstance(node, LITERALS): + self._write_literal(node) + else: + for _, _, child_node in iter_fields(node): + self._walk_py(child_node) + elif isinstance(node, list): + for n in node: + self._walk_py(n) + +def a_function(): + pass + +def a_generator_function(): + yield None + +class C(object): + def meth(self): + pass + +#Create an object for 'exec', as parser no longer treats it as statement. +# Use `[].append` as it has the same type as `exec`. +EXEC = [].append + +SPECIAL_OBJECTS = { + type(a_function): u"FunctionType", + type(len): u"BuiltinFunctionType", + classmethod: u"ClassMethod", + staticmethod: u"StaticMethod", + type(sys): u"ModuleType", + type(a_generator_function()): u"generator", + None: u"None", + type(None): u"NoneType", + True: u"True", + False: u"False", + bool: u"bool", + sys: u"sys", + Exception: u"Exception", + BaseException: u"BaseException", + TypeError: u"TypeError", + AttributeError: u"AttributeError", + KeyError: u"KeyError", + int: u"int", + float: u"float", + object: u"object", + type: u"type", + tuple: u"tuple", + dict: u"dict", + list: u"list", + set: u"set", + locals: u"locals", + globals: u"globals", + property: u"property", + type(list.append): u"MethodDescriptorType", + super: u"super", + type(C().meth): u"MethodType", + #For future enhancements + object(): u"_1", + object(): u"_2", + #Make sure we have all version numbers as single character strings. + b'2': u'b2', + b'3': u'b3', + u'2': u'u2', + u'3': u'u3', +} + +SPECIAL_OBJECTS[__import__(BUILTINS_NAME)] = u"builtin_module" +SPECIAL_OBJECTS[str] = u"unicode" +SPECIAL_OBJECTS[bytes] = u"bytes" + +#Store wrapped versions of special objects, so that they compare correctly. +tmp = {} +for obj, name in SPECIAL_OBJECTS.items(): + tmp[_CObject(obj)] = name +SPECIAL_OBJECTS = tmp +del tmp + +#List of various attributes VM implementation details we want to skip. +SKIPLIST = set([ + (sys, "exc_value"), + (sys, "exc_type"), + (sys, "exc_traceback"), + (__import__(BUILTINS_NAME), "_"), +]) + +def qualified_type_name(cls): + #Special case bytes/str/unicode to make sure they share names across versions + if cls is bytes: + return u"bytes" + if cls is str: + return u"unicode" + if cls.__module__ == BUILTINS_NAME or cls.__module__ == "exceptions": + return cls.__name__ + else: + return cls.__module__ + "." + cls.__name__ diff --git a/python/extractor/semmle/python/passes/pruner.py b/python/extractor/semmle/python/passes/pruner.py new file mode 100644 index 00000000000..d6363e529f1 --- /dev/null +++ b/python/extractor/semmle/python/passes/pruner.py @@ -0,0 +1,450 @@ +''' +Prune the flow-graph, eliminating edges with impossible constraints. +For example: +1. if x: +2. if x == 0: +3. pass +The edge from `x == 0` to pass (line 2 to line 3) is impossible as `x` cannot be zero to +reach line 2. + +While code like the above is unlikely in source code, it is quite common after splitting. + +''' + +from semmle.python import ast +import cmath +from collections import defaultdict + +from semmle.python.passes.ast_pass import ASTVisitor +import semmle.util as util +from semmle.python.ast import Lt, LtE, Eq, NotEq, Gt, GtE, Is, IsNot + +__all__ = [ 'do_pruning' ] + +INT_TYPES = int + +# Classes representing constraint on branches, for pruning. +# For example, the constraint `x` allows pruning and edge with the constraint `x == 0` +# since if `x` is True it cannot be zero. + +class Truthy(object): + '''A test of the form `x` or `not x`''' + + def __init__(self, sense): + self.sense = sense + + def invert(self): + return (VAR_IS_TRUE, VAR_IS_FALSE)[self.sense] + + def contradicts(self, other): + '''Holds if self and other are contradictory.''' + if self.sense: + return other.constrainsVariableToBeFalse() + else: + return other.constrainsVariableToBeTrue() + + def constrainsVariableToBeTrue(self): + '''Holds if this constrains the variable such that `bool(var) is True`''' + return self.sense + + def constrainsVariableToBeFalse(self): + '''Holds if this constrains the variable such that `bool(var) is False`''' + return not self.sense + + def __repr__(self): + return "True" if self.sense else "False" + +class IsNone(object): + '''A test of the form `x is None` or `x is not None`''' + + def __init__(self, sense): + self.sense = sense + + def contradicts(self, other): + if self is VAR_IS_NONE: + return other is VAR_IS_NOT_NONE or other is VAR_IS_TRUE + else: + return other is VAR_IS_NONE + + def invert(self): + return (VAR_IS_NONE, VAR_IS_NOT_NONE)[self.sense] + + def constrainsVariableToBeTrue(self): + return False + + def constrainsVariableToBeFalse(self): + return self is VAR_IS_NONE + + def __repr__(self): + return "Is None" if self.sense else "Is Not None" + +class ComparedToConst(object): + '''A test of the form `x == k`, `x < k`, etc.''' + + def __init__(self, op, k): + #We can treat is/is not as ==/!= as we only + #compare with simple literals which are always interned. + if op is Is: + op = Eq + elif op is IsNot: + op = NotEq + self.op = op + self.k = k + + def invert(self): + return ComparedToConst(INVERT_OP[self.op], self.k) + + def constrainsVariableToBeTrue(self): + if self.op == Eq: + return self.k != 0 + if self.op == NotEq: + return self.k == 0 + if self.op == GtE: + return self.k > 0 + if self.op == Gt: + return self.k >= 0 + if self.op == LtE: + return self.k < 0 + if self.op == Lt: + return self.k <= 0 + return False + + def constrainsVariableToBeFalse(self): + return self.op == Eq and self.k == 0 + + def contradicts(self, other): + if self.constrainsVariableToBeTrue() and other is VAR_IS_FALSE: + return True + if self.constrainsVariableToBeFalse() and other is VAR_IS_TRUE: + return True + if self.op == Eq and other is VAR_IS_NONE: + return True + if not isinstance(other, ComparedToConst): + return False + if self.op == Eq: + if other.op == NotEq: + return self.k == other.k + if other.op == Eq: + return self.k != other.k + if other.op == Lt: + return self.k >= other.k + if other.op == LtE: + return self.k > other.k + if other.op == Gt: + return self.k <= other.k + if other.op == GtE: + return self.k < other.k + return False + if self.op == Lt: + if other.op == Eq or other.op == Gt or other.op == GtE: + return self.k <= other.k + return False + if self.op == LtE: + if other.op == Eq or other.op == GtE: + return self.k < other.k + if other.op == Gt: + return self.k <= other.k + return False + if other.op in (NotEq, Gt, GtE): + return False + return other.contradicts(self) + + def __repr__(self): + return "%s %d" % (OP_NAME[self.op], self.k) + + +INVERT_OP = { + Eq: NotEq, + NotEq: Eq, + Lt: GtE, + LtE: Gt, + Gt: LtE, + GtE: Lt + } + +OP_NAME = { + Eq: "==", + NotEq: "!=", + Lt: "<", + LtE: "<=", + Gt: ">", + GtE: ">=", +} + +VAR_IS_TRUE = Truthy(True) +VAR_IS_FALSE = Truthy(False) + +VAR_IS_NONE = IsNone(True) +VAR_IS_NOT_NONE = IsNone(False) + +NAME_CONSTS = { + "True" : VAR_IS_TRUE, + "False": VAR_IS_FALSE, + "None": VAR_IS_NONE, +} + +class SkippedVisitor(ASTVisitor): + + def __init__(self): + self.nodes = set() + + def visit_Subscript(self, node): + if isinstance(node.value, ast.Name): + self.nodes.add(node.value) + + def visit_Attribute(self, node): + if isinstance(node.value, ast.Name): + self.nodes.add(node.value) + +class NonlocalVisitor(ASTVisitor): + def __init__(self): + self.names = set() + + def visit_Nonlocal(self, node): + for name in node.names: + self.names.add(name) + +class GlobalVisitor(ASTVisitor): + def __init__(self): + self.names = set() + + def visit_Global(self, node): + for name in node.names: + self.names.add(name) + +class KeptVisitor(ASTVisitor): + + def __init__(self): + self.nodes = set() + + #Keep imports + def visit_alias(self, node): + bool_const = const_value(node.value) + if bool_const is None: + return + defn = node.asname + if hasattr(defn, 'variable'): + self.nodes.add(defn) + +def skipped_variables(tree, graph, use_map): + '''Returns a collection of SsaVariables that + are skipped as possibly mutated. + + Variables are skipped if their values may be mutated + in such a way that it might alter their boolean value. + This means that they have an attribute accessed, or are subscripted. + However, modules are always true, so are never skipped. + ''' + variables = use_map.values() + skiplist = set() + v = SkippedVisitor() + v.visit(tree) + ast_skiplist = v.nodes + for node, var in use_map.items(): + if node.node in ast_skiplist: + skiplist.add(var) + v = KeptVisitor() + v.visit(tree) + ast_keeplist = v.nodes + keeplist = set() + for var in variables: + defn = graph.get_ssa_definition(var) + if defn and defn.node in ast_keeplist: + keeplist.add(var) + return skiplist - keeplist + +def get_branching_edges(tree, graph, use_map): + ''''Returns an iterator of pred, succ, var, bool tuples + representing edges and the boolean value or None-ness that + the ssa variable holds on that edge. + ''' + for pred, succ, ann in graph.edges(): + if ann not in (util.TRUE_EDGE, util.FALSE_EDGE): + continue + #Handle 'not' expressions. + invert = ann == util.FALSE_EDGE + test = pred + while isinstance(test.node, ast.UnaryOp): + if not isinstance(test.node.op, ast.Not): + break + preds = graph.pred[test] + if len(preds) != 1: + break + test = preds[0] + invert = not invert + t = comparison_kind(graph, test) + if t is None: + continue + val, use = t + if invert: + val = val.invert() + if use in use_map: + yield pred, succ, use_map[use], val + +def effective_constants_definitions(bool_const_defns, graph, branching_edges): + '''Returns a mapping of var -> list of (node, effective-constant) + representing the effective boolean constant definitions. + A constant definition is an assignment to a + SSA variable 'var' such that bool(var) is a constant + for all uses of that variable dominated by the definition. + + A (SSA) variable is effectively constant if it assigned + a constant, or it is guarded by a test. + ''' + consts = defaultdict(list) + for var in graph.ssa_variables(): + defn = graph.get_ssa_definition(var) + if not defn or defn.node not in bool_const_defns: + continue + consts[var].append((defn, bool_const_defns[defn.node])) + for pred, succ, var, bval in branching_edges: + if len(graph.pred[succ]) != 1: + continue + consts[var].append((succ, bval)) + return consts + +def do_pruning(tree, graph): + v = BoolConstVisitor() + v.visit(tree) + nonlocals = NonlocalVisitor() + nonlocals.visit(tree) + global_vars = GlobalVisitor() + global_vars.visit(tree) + bool_const_defns = v.const_defns + #Need to repeatedly do this until we reach a fixed point + while True: + use_map = {} + for node, var in graph.ssa_uses(): + if isinstance(node.node, ast.Name): + use_map[node] = var + skiplist = skipped_variables(tree, graph, use_map) + edges = list(get_branching_edges(tree, graph, use_map)) + consts = effective_constants_definitions(bool_const_defns, graph, edges) + dominated_by = {} + #Look for effectively constant definitions that dominate edges on + #which the relative variable has the inverse sense. + #Put edges to be removed in a set, as an edge could be removed for + #multiple reasons. + to_be_removed = set() + for pred, succ, var, bval in edges: + if var not in consts: + continue + if var in skiplist and bval in (VAR_IS_TRUE, VAR_IS_FALSE): + continue + if var.variable.id in nonlocals.names: + continue + if var.variable.id in global_vars.names: + continue + for defn, const_kind in consts[var]: + if not const_kind.contradicts(bval): + continue + if defn not in dominated_by: + dominated_by[defn] = graph.dominated_by(defn) + if pred in dominated_by[defn]: + to_be_removed.add((pred, succ)) + #Delete simply dead edges (like `if False: ...` ) + for pred, succ, ann in graph.edges(): + if ann == util.TRUE_EDGE: + val = VAR_IS_TRUE + elif ann == util.FALSE_EDGE: + val = VAR_IS_FALSE + else: + continue + b = const_value(pred.node) + if b is None: + continue + if b.contradicts(val): + to_be_removed.add((pred, succ)) + if not to_be_removed: + break + for pred, succ in to_be_removed: + graph.remove_edge(pred, succ) + graph.clear_computed() + +class BoolConstVisitor(ASTVisitor): + '''Look for assignments of a boolean constant to a variable. + self.const_defns holds a mapping from the AST node for the definition + to the True/False value for the constant.''' + + def __init__(self): + self.const_defns = {} + + + def visit_alias(self, node): + bool_const = const_value(node.value) + if bool_const is None: + return + defn = node.asname + if hasattr(defn, 'variable'): + self.const_defns[defn] = bool_const + + def visit_Assign(self, node): + bool_const = const_value(node.value) + if bool_const is None: + return + for defn in node.targets: + if hasattr(defn, 'variable'): + self.const_defns[defn] = bool_const + +def _comparison(test): + # Comparisons to None or ints + if isinstance(test, ast.Compare) and len(test.ops) == 1: + left = test.left + right = test.comparators[0] + if not hasattr(left, "variable"): + return None + if isinstance(right, ast.Name) and right.id == "None": + if isinstance(test.ops[0], ast.Is): + return VAR_IS_NONE + if isinstance(test.ops[0], ast.IsNot): + return VAR_IS_NOT_NONE + if isinstance(right, ast.Num) and isinstance(right.n, INT_TYPES): + return ComparedToConst(type(test.ops[0]), right.n) + return None + + +def comparison_kind(graph, test): + # Comparisons to None or ints + val = _comparison(test.node) + if val is None: + if hasattr(test.node, "variable"): + return VAR_IS_TRUE, test + return None + use_set = graph.pred[graph.pred[test][0]] + if len(use_set) != 1: + return None + use = use_set[0] + return val, use + +def const_value(ast_node): + '''Returns the boolean value of a boolean or numeric constant AST node or None if not a constant. + NaN is not a constant.''' + if isinstance(ast_node, ast.Name): + if ast_node.id in ("True", "False", "None"): + return NAME_CONSTS[ast_node.id] + else: + return None + if isinstance(ast_node, ast.ImportExpr): + #Modules always evaluate True + return VAR_IS_TRUE + if isinstance(ast_node, ast.Num): + n = ast_node.n + elif isinstance(ast_node, ast.UnaryOp): + if isinstance(ast_node.op, ast.USub) and isinstance(ast_node.operand, ast.Num): + n = ast_node.operand.n + elif isinstance(ast_node.op, ast.Not): + not_value = const_value(ast_node.operand) + if not_value is None: + return None + return not_value.invert() + else: + return None + else: + return None + + #Check for NaN, but be careful not to overflow + #Handle integers first as they may overflow cmath.isnan() + if not isinstance(n, INT_TYPES) and cmath.isnan(n): + return None + #Now have an int or a normal float or complex + return ComparedToConst(Eq, n) diff --git a/python/extractor/semmle/python/passes/splitter.py b/python/extractor/semmle/python/passes/splitter.py new file mode 100755 index 00000000000..06e4c1d19d9 --- /dev/null +++ b/python/extractor/semmle/python/passes/splitter.py @@ -0,0 +1,384 @@ +''' +Split the flow-graph to allow tests to dominate all parts of the code that depends on them. +We split on `if`s and `try`s. Either because of several tests on the same condition or +subsequent tests on a constant determined by the first condition. +E.g. + +if a: + A +B +if a: + C +becomes +if a: + A + B + C +else: + B +ensuring that A dominates C. + +or... + +try: + import foo +except: + foo = None +X +if foo: + Y +becomes +try: + import foo + X + Y +except: + foo = None + X + +To split on CFG node N we require that there exists nodes H1..Hn and N2 such that: + N and N2 are tests or conditional assignments to the same variable. + N dominates H1 .. Hn and N2 + There is no assignment to the variable between N and N2 + H1..Hn are the "split heads" of N, that is: + if N is a test, H1 and H2 are its true and false successors (there is no H3). + if N is a `try` then H1 .. Hn-1 are exists from the try body and Hn is the CFG node for the first (and only) `except` statement. + Within the region strictly dominated by N, N2 must reachable from all of H1..Hn + + For simplicity we limit n (as in Hn) to 2, but that is not required for correctness. +''' + +from collections import defaultdict + +from semmle.python import ast +from semmle.python.passes.ast_pass import iter_fields +from operator import itemgetter +from semmle.graph import FlowGraph + +MAX_SPLITS = 2 + +def do_split(ast_root, graph: FlowGraph): + '''Split the flow graph, using the AST to determine split points.''' + ast_labels = label_ast(ast_root) + cfg_labels = label_cfg(graph, ast_labels) + split_points = choose_split_points(graph, cfg_labels) + graph.split(split_points) + +class ScopedAstLabellingVisitor(object): + '''Visitor for labelling AST nodes in scope. + Does not visit nodes belonging to inner scopes (methods, etc) + ''' + + def __init__(self, labels): + self.labels = labels + self.priority = 0 + + def visit(self, node): + """Visit a node.""" + method = 'visit_' + node.__class__.__name__ + getattr(self, method, self.generic_visit)(node) + + def generic_visit(self, node): + if isinstance(node, ast.AstBase): + for _, _, value in iter_fields(node): + self.visit(value) + + def visit_Class(self, node): + #Do not visit sub-scopes + return + + visit_Function = visit_Class + + def visit_list(self, the_list): + for item in the_list: + method = 'visit_' + item.__class__.__name__ + getattr(self, method, self.generic_visit)(item) + + #Helper methods + + @staticmethod + def get_variable(expr): + '''Returns the variable of this expr. Returns None if no variable.''' + if hasattr(expr, "variable"): + return expr.variable + else: + return None + + @staticmethod + def is_const(expr): + if isinstance(expr, ast.Name): + return expr.variable.id in ("None", "True", "False") + elif isinstance(expr, ast.UnaryOp): + return ScopedAstLabellingVisitor.is_const(expr.operand) + return isinstance(expr, (ast.Num, ast.Str)) + + + +class AstLabeller(ScopedAstLabellingVisitor): + '''Visitor to label tests and assignments + for later scanning to determine split points. + ''' + + def __init__(self, *args): + ScopedAstLabellingVisitor.__init__(self, *args) + self.in_test = 0 + + def _label_for_compare(self, cmp): + if len(cmp.ops) != 1: + return None + var = self.get_variable(cmp.left) + if var is None: + var = self.get_variable(cmp.comparators[0]) + k = cmp.left + else: + k = cmp.comparators[0] + if var is not None and self.is_const(k): + self.priority += 1 + return (var, k, self.priority) + return None + + def visit_Compare(self, cmp): + label = self._label_for_compare(cmp) + if label: + self.labels[cmp].append(label) + + def visit_Name(self, name): + self.priority += 1 + if isinstance(name.ctx, ast.Store): + self.labels[name].append((name.variable, "assign", self.priority)) + elif self.in_test: + self.labels[name].append((name.variable, None, self.priority)) + + def _label_for_unary_operand(self, op): + if not isinstance(op.op, ast.Not): + return None + if isinstance(op.operand, ast.UnaryOp): + return self._label_for_unary_operand(op.operand) + elif isinstance(op.operand, ast.Name): + self.priority += 1 + return (op.operand.variable, None, self.priority) + elif isinstance(op.operand, ast.Compare): + return self._label_for_compare(op.operand) + return None + + def visit_UnaryOp(self, op): + if not self.in_test: + return + label = self._label_for_unary_operand(op) + if label: + self.labels[op].append(label) + else: + self.visit(op.operand) + + def visit_If(self, ifstmt): + # Looking for the pattern: + # if x: k = K0 else: k = K1 + # the test is the split point, but the variable is `k` + self.in_test += 1 + self.visit(ifstmt.test) + self.in_test -= 1 + self.visit(ifstmt.body) + self.visit(ifstmt.orelse) + k1 = {} + ConstantAssignmentVisitor(k1).visit(ifstmt.body) + k2 = {} + ConstantAssignmentVisitor(k2).visit(ifstmt.orelse) + k = set(k1.keys()).union(k2.keys()) + self.priority += 1 + for var in k: + val = k1[var] if var in k1 else k2[var] + self.labels[ifstmt.test].append((var, val, self.priority)) + + def visit_Try(self, stmt): + # Looking for the pattern: + # if try: k = K0 except: k = K1 + # the try is the split point, and the variable is `k` + self.generic_visit(stmt) + if not stmt.handlers or len(stmt.handlers) > 1: + return + k1 = {} + ConstantAssignmentVisitor(k1).visit(stmt.body) + k2 = {} + ConstantAssignmentVisitor(k2).visit(stmt.handlers[0]) + k = set(k1.keys()).union(k2.keys()) + self.priority += 1 + for var in k: + val = k1[var] if var in k1 else k2[var] + self.labels[stmt].append((var, val, self.priority)) + + def visit_ClassExpr(self, node): + # Don't split over class definitions, + # as the presence of multiple ClassObjects for a + # single class can be confusing. + # The same applies to function definitions. + self.priority += 1 + self.labels[node].append((None, "define", self.priority)) + + visit_FunctionExpr = visit_ClassExpr + + +class TryBodyAndHandlerVisitor(ScopedAstLabellingVisitor): + '''Visitor to gather all AST nodes under visited node + including, but not under `ExceptStmt`s.''' + + def generic_visit(self, node): + if isinstance(node, ast.AstBase): + self.labels.add(node) + for _, _, value in iter_fields(node): + self.visit(value) + + def visit_ExceptStmt(self, node): + #Do not visit node below this. + self.labels.add(node) + return + + +class ConstantAssignmentVisitor(ScopedAstLabellingVisitor): + '''Visitor to label assignments where RHS is a constant''' + + def visit_Assign(self, asgn): + if not self.is_const(asgn.value): + return + for target in asgn.targets: + if hasattr(target, "variable"): + self.labels[target.variable] = asgn.value + +def label_ast(ast_root): + '''Visits the AST, returning the labels''' + labels = defaultdict(list) + labeller = AstLabeller(labels) + labeller.generic_visit(ast_root) + return labels + +def _is_branch(node, graph: FlowGraph): + '''Holds if `node` (in `graph`) is a branch point.''' + if len(graph.succ[node]) == 2 or isinstance(node.node, ast.Try): + return True + if len(graph.succ[node]) != 1: + return False + succ = graph.succ[node][0] + if not isinstance(succ.node, ast.UnaryOp): + return False + return _is_branch(succ, graph) + + +def label_cfg(graph: FlowGraph, ast_labels): + '''Copies labels from AST to CFG for branches and assignments.''' + cfg_labels = {} + for node, _ in graph.nodes(): + if node.node not in ast_labels: + continue + labels = ast_labels[node.node] + if not labels: + continue + if _is_branch(node, graph) or labels[0][1] in ("assign", "define", "loop"): + cfg_labels[node] = labels + return cfg_labels + +def usefully_comparable_types(o1, o2): + '''Holds if a test against object o1 can provide any + meaningful information w.r.t. to a test against o2. + ''' + if o1 is None or o2 is None: + return True + return type(o1) is type(o2) + +def exits_from_subtree(head, subtree, graph: FlowGraph): + '''Returns all nodes in `subtree`, that exit + the subtree and are reachable from `head` + ''' + exits = set() + seen = set() + todo = set([head]) + while todo: + node = todo.pop() + if node in seen: + continue + seen.add(node) + if not graph.succ[node]: + continue + is_exit = True + for succ in graph.succ[node]: + if succ.node in subtree: + todo.add(succ) + is_exit = False + if is_exit: + exits.add(node) + return exits + +def get_split_heads(head, graph: FlowGraph): + '''Compute the split tails for the node `head` + That is, the set of nodes from which splitting should commence. + ''' + if isinstance(head.node, ast.Try): + try_body = set() + TryBodyAndHandlerVisitor(try_body).visit(head.node) + if head.node.handlers: + try_body.add(head.node.handlers[0]) + try_split_tails = exits_from_subtree(head, try_body, graph) + return try_split_tails + else: + return graph.succ[head] + + +def choose_split_points(graph: FlowGraph, cfg_labels): + '''Select the set of nodes to be the split heads for the graph, + from the given labels. A maximum of two points are chosen to avoid + excessive blow up. + ''' + candidates = [] + #Find pairs -- N1, N2 where N1 and N2 are tests on the same variable and the tests are similar. + labels = [] + for node, label_list in cfg_labels.items(): + for label in label_list: + labels.append((node, label[0], label[1], label[2])) + labels.sort(key=itemgetter(3)) + for first_node, first_var, first_type, first_priority in labels: + if first_type in ("assign", "define"): + continue + #Avoid splitting if any class or function is defined later in scope. + if 'define' in [type for (_, _, type, priority) in labels if priority > first_priority]: + break + for second_node, second_var, second_type, second_priority in labels: + if second_var != first_var: + continue + # First node must dominate second node to be a viable splitting candidate. + # Quick check to avoid doing pointless dominance checks. + if first_priority >= second_priority: + continue + #Avoid splitting if variable is reassigned + if second_type == "assign": + break + if not graph.strictly_dominates(first_node, second_node): + continue + if not usefully_comparable_types(first_type, second_type): + continue + split_heads = get_split_heads(first_node, graph) + if len(split_heads) != 2: + continue + # Unless both of the split heads reach the second node, + # then there is no benefit to splitting. + for head in split_heads: + if not graph.strictly_dominates(first_node, head): + break + if not graph.reaches_while_dominated(head, second_node, first_node): + break + else: + candidates.append((first_node, split_heads, first_var, first_priority)) + #Candidates is a list of (node, split-heads, variable, priority) tuples. + #Remove any duplicate nodes + candidates = deduplicate(candidates, 0, 3) + #Remove repeated splits on the same variable if more than MAX_SPLITS split and more than one variable. + if len(candidates) > MAX_SPLITS and len({c[2] for c in candidates}) > 1: + candidates = deduplicate(candidates, 2, 3) + # Return best two results, but must return in reverse priority order, + # so that splitting on one node does not remove a later one. + return [c[:2] for c in candidates[MAX_SPLITS-1::-1]] + +def deduplicate(lst, col, sort_col): + '''De-duplicate list `lst` of tuples removing all but the first tuple containing + duplicates of `col`. Sort the result on `sort_col''' + dedupped = {} + for t in reversed(lst): + dedupped[t[col]] = t + return sorted(dedupped.values(), key=itemgetter(sort_col)) diff --git a/python/extractor/semmle/python/passes/unroller.py b/python/extractor/semmle/python/passes/unroller.py new file mode 100644 index 00000000000..ffdee34dbc3 --- /dev/null +++ b/python/extractor/semmle/python/passes/unroller.py @@ -0,0 +1,181 @@ +''' +Unroll loops in the flow-graph once if we know that the iterator is not empty. +E.g. + +if seq: + for x in seq: + y = x + y # y is defined here + +or +if not seq: + raise +for x in seq: + y = x +y # y is defined here + +This is broadly analagous to splitting. +If the edge leaving the test that signifies a non-empty container dominates the loop, then we want to unroll the loop once. + +Loop unrolling will transform +A (loop header), B (loop body) --> A(first loop header), B(first loop body), C(second loop header), D(second loop body) +and is done as follows: + +Make a copy of A as C and make a copy of B as D. +Convert all edges from B to A into edges from B to C. +Convert edge from C to B to an edge from C to D. +Convert all edges from D to A into edges from D to C. + +Subsequent pruning will then remove any dead edges for iterables known to be empty or non-empty. +''' +from collections import defaultdict, namedtuple +from operator import itemgetter + +from semmle.python import ast +from semmle.python.passes.splitter import ScopedAstLabellingVisitor, label_cfg +from semmle.util import EXHAUSTED_EDGE + +class HasDefinitionInLoop(ScopedAstLabellingVisitor): + '''Check to see if a class or function definition occurs + in a loop. Note that this will prevent unrolling of a loop + if a definition occurs in any loop in scope, not just the one + to be unrolled. + ''' + + def __init__(self): + ScopedAstLabellingVisitor.__init__(self, None) + self.has_definition = False + self.in_loopbody = False + + def visit_For(self, loop): + self.visit(loop.iter) + self.in_loopbody = True + self.visit(loop.body) + self.in_loopbody = False + + def visit_ClassExpr(self, node): + # Don't split over class definitions, + # as the presence of multiple ClassObjects for a + # single class can be confusing. + # The same applies to function definitions. + if self.in_loopbody: + self.has_definition = True + + visit_FunctionExpr = visit_ClassExpr + + def __bool__(self): + return self.has_definition + +AstLabel = namedtuple("AstLabel", "variable type priority") +CfgLabel = namedtuple("CfgLabel", "node variable type priority") + +class Labeller(ScopedAstLabellingVisitor): + + def __init__(self, *args): + ScopedAstLabellingVisitor.__init__(self, *args) + self.in_test = 0 + self.in_loop = False + + def visit_If(self, ifstmt): + # Looking for tests for empty sequences. + self.in_test += 1 + self.visit(ifstmt.test) + self.in_test -= 1 + self.visit(ifstmt.body) + self.visit(ifstmt.orelse) + + def visit_UnaryOp(self, op): + if not self.in_test: + return + label = self._label_for_unary_operand(op) + if label: + self.labels[op].append(label) + else: + self.visit(op.operand) + + def _label_for_unary_operand(self, op): + if not isinstance(op.op, ast.Not): + return None + if isinstance(op.operand, ast.UnaryOp): + return self._label_for_unary_operand(op.operand) + elif isinstance(op.operand, ast.Name): + self.priority += 1 + return AstLabel(op.operand.variable, "test", self.priority) + elif isinstance(op.operand, ast.Call): + return self._label_for_call(op.operand) + return None + + def visit_Call(self, call): + if not self.in_test: + return + label = self._label_for_call(call) + if label: + self.labels[call].append(label) + return + + def _label_for_call(self, call): + #TO DO -- Check for calls to len() + pass + + def visit_For(self, loop): + self.in_loop = True + self.visit(loop.iter) + self.in_loop = False + self.visit(loop.body) + + def visit_Name(self, name): + self.priority += 1 + if self.in_test: + self.labels[name].append(AstLabel(name.variable, "test", self.priority)) + elif self.in_loop: + self.labels[name].append(AstLabel(name.variable, "loop", self.priority)) + +def do_unrolling(ast_root, graph): + #Avoid unrolling if any class or function is defined in a loop. + hasdef = HasDefinitionInLoop() + hasdef.generic_visit(ast_root) + if hasdef: + return + ast_labels = defaultdict(list) + labeller = Labeller(ast_labels) + labeller.generic_visit(ast_root) + cfg_labels = label_cfg(graph, ast_labels) + unrolls = choose_loops_to_unroll(graph, cfg_labels) + for head, body in unrolls: + graph.unroll(head, body) + + +def choose_loops_to_unroll(graph, cfg_labels): + '''Select the set of nodes to unroll.''' + candidates = [] + #Find pairs -- N1, N2 where N1 is a test on the variable and N2 is a loop over it. + labels = [] + for node, label_list in cfg_labels.items(): + for label in label_list: + labels.append(CfgLabel(node, label.variable, label.type, label.priority)) + labels.sort(key=itemgetter(3)) + for first_node, first_var, first_type, first_priority in labels: + if first_type == "loop": + continue + for second_node, second_var, second_type, second_priority in labels: + if second_var != first_var: + continue + # First node must dominate second node to be a viable unrolling candidate. + # Quick check to avoid doing pointless dominance checks. + if first_priority >= second_priority: + continue + #Avoid if second use is not a loop + if second_type != "loop": + continue + if not graph.strictly_dominates(first_node, second_node): + continue + candidates.append((second_node, second_priority)) + iters = reversed([c for c, p in sorted(candidates, key=itemgetter(1))]) + result = [] + for iter in iters: + head = graph.succ[iter][0] + for body in graph.succ[head]: + if graph.edge_annotations[head, body] != EXHAUSTED_EDGE: + result.append((head, body)) + break + return result diff --git a/python/extractor/semmle/query_gen.py b/python/extractor/semmle/query_gen.py new file mode 100644 index 00000000000..b3fc2442e8a --- /dev/null +++ b/python/extractor/semmle/query_gen.py @@ -0,0 +1,231 @@ +#Parse the dbscheme file + +#Look for comments or declarations ending with ';' + +import sys +import os.path + +from semmle.python import master + + +def singularize(name): + if name and name[-1] == 's': + return name[:-1] + elif name.endswith('_list'): + return name[:-5] + elif name.endswith('body'): + return name[:-4] + 'stmt' + else: + return name + +def singularize_text(name): + if name.endswith('block'): + return name[:-5] + 'statement' + elif name.endswith('body'): + return name[:-4] + 'statement' + elif name.endswith(' list'): + return name[:-5] + else: + return singularize(name) + +def make_fields(field_type, index): + if field_type.__name__ == 'bool': + fields = [] + else: + fields = [ 'result' ] + if field_type.is_case_type(): + fields.append('_') + fields.append('this') + if not field_type.unique_parent: + fields.append(str(index)) + return ', '.join(fields) + +def get_a(name): + name = capitalize_name(singularize(name)) + if name[0] in 'AEIOU': + return 'getAn' + name + else: + return 'getA' + name + +def indefinite_article(name): + name = capitalize_name(singularize(name)) + if name[0] in 'AEIOU': + return 'an' + else: + return 'a' + +def capitalize_name(name): + 'Capitalize name, forming camel-case from undescores' + return ''.join(part.capitalize() for part in name.split('_')) + +def name_to_query(name): + if name.startswith("is_"): + return "i" + capitalize_name(name)[1:] + else: + return "is" + capitalize_name(name) + +def longer_name(node, name, docname): + return '%s of this %s' % (docname, node.descriptive_name) + +def property_name(node, name, docname): + return '%s property of this %s' % (docname, node.descriptive_name) + +def make_getter(node, name, offset, field_type, docname, override): + txt = [u'\n'] + if field_type.__name__ == 'bool': + txt.append(u' /** Whether the %s is true. */\n' % property_name(node, name, docname)) + txt.append(u' predicate %s() {\n' % name_to_query(name)) + elif name == "location": + txt.append(u' /** Gets the %s. */\n' % longer_name(node, name, docname)) + txt.append(u' %s%s get%s() {\n'%(override , field_type.ql_name(), capitalize_name(name))) + else: + txt.append(u' /** Gets the %s. */\n' % longer_name(node, name, docname)) + txt.append(u' %s get%s() {\n'%(field_type.ql_name(), capitalize_name(name))) + if field_type.super_type: + field_type = field_type.super_type + fields = make_fields(field_type, offset) + txt.append(u' %s(%s)\n' % (field_type.relation_name(), fields)) + txt.append(u' }\n\n') + if field_type.is_list(): + item = field_type.item_type + lname = longer_name(node, singularize(name), singularize_text(docname)) + txt.append('\n') + txt.append(' /** Gets the nth %s. */\n' % lname) + txt.append(' %s get%s(int index) {\n' % + (item.ql_name(), capitalize_name(singularize(name)))) + txt.append(' result = this.get%s().getItem(index)\n' % + capitalize_name(name)) + txt.append(' }\n') + txt.append('\n') + txt.append(' /** Gets %s %s. */\n' % (indefinite_article(lname), lname)) + txt.append(' %s %s() {\n' % (item.ql_name(), get_a(name))) + txt.append(' result = this.get%s().getAnItem()\n' % + capitalize_name(name)) + txt.append(' }\n\n') + + return ''.join(txt) + +def defined_in_supertype(node, name): + if node.super_type: + for fname, _, _, _, _, _ in node.super_type.layout: + if fname == name: + return True + return False + + +def write_queries(nodes, out, lang): + parents = {} + nodes = set(nodes) + done = set() + out.write('import %s\n\n' % lang) + while nodes: + #Emit in (mostly) sorted order to reduce diffs. + node = pop_least_value(nodes) + done.add(node) + if node.is_primitive(): + continue + if node.is_list() and node.item_type.is_union_type(): + #List of unions are best ignored. + #They can be implemented manually if needed. + continue + out.write('/** INTERNAL: See the class `%s` for further information. */\n' % node.ql_name()) + out.write('class %s_ extends %s' % + (node.ql_name(), node.db_name())) + if node.super_type: + out.write(', %s' % node.super_type.ql_name()) + override = "override " if node.super_type else "" + out.write(' {\n\n') + if node.is_sub_type() and node.super_type.is_union_type(): + out.write(' %s() {\n' % node.ql_name()) + out.write(' %s(this, %d, _, _' % + (node.super_type.relation_name(), node.case_index)) + out.write(')\n') + out.write(' }\n\n') + else: + body = [] + for name, field_type, offset, docname, _, _ in node.layout: + if defined_in_supertype(node, name): + continue + body.append(make_getter(node, name, offset, field_type, docname, override)) + out.write(''.join(body)) + if node.parents: + if node.super_type and node.super_type.is_case_type(): + child_node = node.super_type + else: + child_node = node + #Ensure closure + if child_node.parents not in done: + nodes.add(child_node.parents) + if not override: + out.write(' /** Gets a parent of this %s */\n' % node.descriptive_name) + out.write(' %s%s getParent() {\n' % + (override, child_node.parents.ql_name())) + out.write(' %s(' % child_node.relation_name()) + fields = [ 'this', ] + if child_node.is_case_type(): + fields.append('_') + fields.append('result') + if not child_node.unique_parent: + fields.append('_') + out.write('%s)\n' % ', '.join(fields)) + out.write(' }\n\n') + if child_node.parents.ql_name() not in parents: + parents[child_node.parents.ql_name()] = [] + parents[child_node.parents.ql_name()].append(child_node) + if node.is_list(): + fields = [ 'result'] + item = node.item_type + if item.super_type and item.super_type.is_case_type(): + item = item.super_type + if item.is_case_type(): + fields.append('_') + fields.append('this') + fields = ', '.join(fields) + out.write(' /** Gets an item of this %s */\n' % node.descriptive_name) + out.write(' %s getAnItem() {\n' % item.ql_name()) + out.write(' %s(%s, _)\n' % + (item.relation_name(), fields)) + out.write(' }\n\n') + out.write(' /** Gets the nth item of this %s */\n' % node.descriptive_name) + out.write(' %s getItem(int index) {\n' % item.ql_name()) + out.write(' %s(%s, index)\n' % + (item.relation_name(), fields)) + out.write(' }\n\n') + if not override: + out.write(' /** Gets a textual representation of this element. */\n') + out.write(' %sstring toString() {\n' % override) + out.write(' result = "%s"\n' % node.ql_name()) + out.write(' }\n') + out.write('\n}\n\n') + out.close() + +def pop_least_value(nodes): + #This is inefficient, but it doesn't matter + res = min(nodes, key = lambda n: n.__name__) + nodes.remove(res) + return res + + +HEADER = '''/** + * This library file is auto-generated by '%s'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py. + */ +''' + +def main(): + run(master) + +def run(nodes_module, lang="python"): + if len(sys.argv) != 2: + print("Usage: %s output-directory" % sys.argv[0]) + sys.exit(1) + outdir = sys.argv[1] + nodes = nodes_module.all_nodes() + outfile = os.path.join(outdir, 'AstGenerated.qll') + with open(outfile, 'w') as out: + out.write(HEADER % '/'.join(__file__.split(os.path.sep)[-2:])) + write_queries(nodes.values(), out, lang) + +if __name__ == '__main__': + main() diff --git a/python/extractor/semmle/thrift/__init__.py b/python/extractor/semmle/thrift/__init__.py new file mode 100644 index 00000000000..52c640f138c --- /dev/null +++ b/python/extractor/semmle/thrift/__init__.py @@ -0,0 +1,34 @@ +import os.path + +from .parse import Parser +from .emit import Emitter + +class Extractor(object): + + def __init__(self, trap_folder, src_archive=None): + self.parser = Parser() + self.emitter = Emitter(trap_folder) + self.src_archive = src_archive + + def _walk(self, path): + for dirpath, _, filenames in os.walk(path): + for filename in filenames: + if filename.endswith(".thrift"): + yield os.path.join(dirpath, filename) + + def extract_files(self, files): + for file in files: + self.extract_file(file) + + def extract_folder(self, path): + for file in self._walk(path): + self.extract_file(file) + + def extract_file(self, file): + with open(file, "rb") as fd: + bytes_source = fd.read() + src = bytes_source.decode('utf-8') + tree = self.parser.parse(src) + self.emitter.emit(file, tree) + if self.src_archive: + self.src_archive.write(file, bytes_source) diff --git a/python/extractor/semmle/thrift/emit.py b/python/extractor/semmle/thrift/emit.py new file mode 100644 index 00000000000..bd0c8c27faa --- /dev/null +++ b/python/extractor/semmle/thrift/emit.py @@ -0,0 +1,52 @@ + +import os.path +import csv +import re +import semmle.util + +IGNORE = re.compile("namespace|fieldreq") + +class Emitter(object): + + def __init__(self, trap_folder): + self.trap_folder = trap_folder + self.lengths = {} + self.next_id = 0 + self.uuid = semmle.util.uuid('thrift') + + def emit(self, file, tree): + trapwriter = semmle.util.TrapWriter() + vpath = self.trap_folder.get_virtual_path(file) + self.emit_recursive(trapwriter, vpath, tree, None, None) + trapwriter.write_file(vpath) + self.trap_folder.write_trap("thrift", file, trapwriter.get_compressed()) + + def emitrow(self, trapwriter, kind, *args): + if kind in self.lengths: + if len(args) != self.lengths[kind]: + raise Exception("Inconsistent row for '%s': %s, expecting %d" % (kind, args, self.lengths[kind])) + else: + self.lengths[kind] = len(args) + qpath = "thrift-"+kind + id = trapwriter.get_unique_id() + for index, value in enumerate(args): + trapwriter.write_tuple("externalData", "rsds", id, qpath, index, value) + + def emit_recursive(self, trapwriter, file, node, index, parent): + self.next_id += 1 + if hasattr(node, "type"): + tag = node.type + assert index >= 0 + name = "%s-%s-%s" % (tag, self.next_id, self.uuid) + self.emitrow(trapwriter, tag, name, index, parent, node.value, file, node.line, node.column) + else: + tag = node.data + if IGNORE.match(tag): + return + name = "%s-%s-%s" % (node.data, self.next_id, self.uuid) + for cindex, child in enumerate(node.children): + self.emit_recursive(trapwriter, file, child, cindex, name) + if index is None: + self.emitrow(trapwriter, tag, name) + else: + self.emitrow(trapwriter, tag, name, index, parent) diff --git a/python/extractor/semmle/thrift/parse.py b/python/extractor/semmle/thrift/parse.py new file mode 100644 index 00000000000..bf1379a9057 --- /dev/null +++ b/python/extractor/semmle/thrift/parse.py @@ -0,0 +1,83 @@ + +# This grammar is based on https://github.com/apache/thrift/blob/master/doc/specs/idl.md +grammar = r""" +start : document +document : header* definition* +header : include | cppinclude | namespace +include : "include" LITERAL +cppinclude : "cpp_include" LITERAL +namespace : ( "namespace" ( namespacescope name ) + | ( "smalltalk.prefix" name ) ) + | ( "php_namespace" LITERAL ) + | ( "xsd_namespace" LITERAL ) +!namespacescope : "*" | IDENTIFIER +definition : const | typedef | enum | senum | struct | union | exception | service +const : "const" fieldtype name "=" constvalue _listseparator? +typedef : "typedef" definitiontype type_annotations name type_annotations _listseparator? +enum : "enum" name "{" enumfield* "}" type_annotations +enumfield : name enumvalue type_annotations _listseparator? +enumvalue : ("=" INTCONSTANT)? +senum : "senum" name "{" senumfield* "}" +senumfield : LITERAL _listseparator? +struct : "struct" name "xsd_all"? "{" field* "}" type_annotations +name : IDENTIFIER +union : "union" name "xsd_all"? "{" field* "}" +exception : "exception" name "{" field* "}" +service : "service" name extends? "{" function* "}" type_annotations +extends : "extends" IDENTIFIER +field : fieldid fieldreq fieldtype type_annotations IDENTIFIER fieldvalue xsdfieldoptions type_annotations _listseparator? +fieldvalue : ("=" constvalue)? +fieldid : (INTCONSTANT ":")? +fieldreq : ("required" | "optional")? +?xsdfieldoptions: "xsd_optional"? "xsd_nillable"? xsdattrs? +xsdattrs : "xsd_attrs" "{" field* "}" +function : oneway functiontype name "(" field* ")" throws type_annotations _listseparator? +oneway : ("oneway")? +!functiontype : fieldtype | "void" +throws : ( "throws" "(" field* ")" )? +fieldtype : IDENTIFIER | basetype | containertype +definitiontype : IDENTIFIER | basetype | containertype +!basetype : "bool" | "byte" | "i8" | "i16" | "i32" | "i64" | "double" | "string" | "binary" | "slist" +containertype : maptype | settype | listtype +maptype : "map" cpptype? "<" fieldtype "," fieldtype ">" +settype : "set" cpptype? "<" fieldtype ">" +listtype : "list" "<" fieldtype ">" cpptype? +cpptype : "cpp_type" LITERAL +!constvalue : INTCONSTANT | DOUBLECONSTANT | LITERAL | IDENTIFIER | constlist | constmap +INTCONSTANT : ("+" | "-")? DIGIT+ +DOUBLECONSTANT : ("+" | "-")? DIGIT* "." DIGIT+ ( ("E" | "e") INTCONSTANT )? +constlist : "[" constlistelt* "]" +constlistelt : constvalue _listseparator? +constmap : "{" constmapelt* "}" +constmapelt : constvalue ":" constvalue _listseparator? + +type_annotations : ( "(" type_annotation* ")" )? +type_annotation : name "=" constvalue _listseparator? + +LITERAL : ("\"" /[^"]/* "\"") | ("'" /[^']/* "'") +IDENTIFIER : ( LETTER | "_" ) ( LETTER | DIGIT | "." | "_" )* +_listseparator : "," | ";" +LETTER : "A".."Z" | "a".."z" +DIGIT : "0".."9" +WHITESPACE : (" " | "\t" | "\r" | "\n")+ + +%import common.NEWLINE +COMMENT : "/*" /(.|\n|\r)*?/ "*/" + | "//" /(.)*/ NEWLINE + | "#" /(.)*/ NEWLINE +%ignore WHITESPACE +%ignore COMMENT +""" + + + + +from lark import Lark + +class Parser(Lark): + + def __init__(self): + Lark.__init__(self, grammar, parser="earley", lexer="standard") + +def parse(src): + return parser.parse(src) diff --git a/python/extractor/semmle/traverser.py b/python/extractor/semmle/traverser.py new file mode 100644 index 00000000000..ad8bd38ae73 --- /dev/null +++ b/python/extractor/semmle/traverser.py @@ -0,0 +1,157 @@ + +'''The traverser is the front-end of the Python extractor. It walks the file system yielding +a sequence of modules to be queued up and processed by the back-end.''' + +import re +import os.path + +from semmle.path_filters import filter_from_pattern +from semmle.util import Extractable, PY_EXTENSIONS, isdir, islink, listdir +from semmle.python import finder, modules +from semmle.worker import ExtractorFailure + +try: + FileNotFoundError +except NameError: + FileNotFoundError = IOError + +__all__ = [ 'Traverser' ] + +class Traverser(object): + '''Default iterable of extractables for the Python extractor, + as specified by the command line options and environment variables. + ''' + + def __init__(self, options, modulenames, logger): + self.paths = set() + if options.files: + py_files = options.files + for p in py_files: + if not os.path.exists(p) and not options.ignore_missing_modules: + raise FileNotFoundError("'%s' does not exist." % p) + self.paths.add(p) + self.exclude_paths = set([ os.path.abspath(f) for f in options.exclude_file ]) + self.exclude = exclude_filter_from_options(options) + self.filter = filter_from_options_and_environment(options) + self.recurse_files = options.recurse_files + self.recurse_packages = options.recursive + self.modulenames = modulenames + self.finder = finder.Finder.from_options_and_env(options, logger) + self.logger = logger + self.ignore_missing_modules = options.ignore_missing_modules + + def __iter__(self): + '''Return an iterator over all the specified files''' + for name in self.modulenames: + if not self.exclude(name): + mod = self.finder.find(name) + if mod is None: + self.logger.error("No module named '%s'.", name) + raise ExtractorFailure() + yield mod.get_extractable() + for path in self.paths: + yield Extractable.from_path(path) + for path in self.recurse_files: + for modpath in self._treewalk(path): + yield Extractable.from_path(modpath) + for name in self.recurse_packages: + mod = self.finder.find(name) + if mod is None: + if self.ignore_missing_modules: + continue + self.logger.error("Package '%s' does not exist.", name) + raise ExtractorFailure() + path = mod.path + if path is None: + self.logger.error("Package '%s' does not have a path.", name) + raise ExtractorFailure() + for modpath in self._treewalk(path): + yield Extractable.from_path(modpath) + + def _treewalk(self, path): + '''Recursively walk the directory tree, skipping sym-links and + hidden files and directories.''' + #Note that if a path is both explicitly specified *and* specifically excluded, + #then the inclusion takes priority + + path = os.path.abspath(path) + self.logger.debug("Traversing %s", path) + filenames = listdir(path) + for filename in filenames: + fullpath = os.path.join(path, filename) + if islink(fullpath): + self.logger.debug("Ignoring %s (symlink)", fullpath) + continue + if isdir(fullpath): + if fullpath in self.exclude_paths or is_hidden(fullpath): + if is_hidden(fullpath): + self.logger.debug("Ignoring %s (hidden)", fullpath) + else: + self.logger.debug("Ignoring %s (excluded)", fullpath) + else: + empty = True + for item in self._treewalk(fullpath): + yield item + empty = False + if not empty: + yield fullpath + elif self.filter(fullpath): + yield fullpath + else: + self.logger.debug("Ignoring %s (filter)", fullpath) + + +if os.name== 'nt': + import ctypes + + def is_hidden(path): + #Magical windows code + try: + attrs = ctypes.windll.kernel32.GetFileAttributesW(str(path)) + if attrs == -1: + return False + if attrs&2: + return True + except Exception: + #Not sure what to log here, probably best to carry on. + pass + return os.path.basename(path).startswith(".") + +else: + + def is_hidden(path): + return os.path.basename(path).startswith(".") + + +def exclude_filter_from_options(options): + if options.exclude_package: + choices = '|'.join(mod.replace('.', r'\.') for mod in options.exclude_package) + pattern = r'(?:%s)(?:\..+)?' % choices + if options.exclude_pattern: + pattern = '^((?:%s)|(?:%s))$' % (pattern, options.exclude_pattern) + else: + pattern = '^%s$' % pattern + elif options.exclude_pattern: + pattern = '^(?:%s)$' % options.exclude_pattern + else: + def no_filter(name): + return False + return no_filter + matcher = re.compile(pattern) + def exclude_filter(name): + return name is not None and bool(matcher.match(name)) + return exclude_filter + +def base_filter(path): + _, ext = os.path.splitext(path) + return ext in PY_EXTENSIONS or not ext and modules.is_script(path) + +def filter_from_options_and_environment(options): + the_filter = base_filter + filter_prefix = "" + src_path = os.environ.get("LGTM_SRC", None) + if src_path is not None: + filter_prefix = os.path.join(src_path, "") + for line in options.path_filter: + the_filter = filter_from_pattern(line, the_filter, filter_prefix) + return the_filter diff --git a/python/extractor/semmle/util.py b/python/extractor/semmle/util.py new file mode 100644 index 00000000000..85868a79351 --- /dev/null +++ b/python/extractor/semmle/util.py @@ -0,0 +1,574 @@ +import sys +import codecs +import gzip +import re +import os.path +import random +import base64 +import hashlib +from io import BytesIO + +#Semantic version of extractor. +#Update this if any changes are made +VERSION = "6.1.1" + +PY_EXTENSIONS = ".py", ".pyw" + +STDLIB_PATH = os.path.dirname(os.__file__) + +def get_analysis_version(): + return PYTHON_ANALYSIS_VERSION + +def get_analysis_major_version(): + return PYTHON_ANALYSIS_MAJOR_VERSION + +def update_analysis_version(version): + global PYTHON_ANALYSIS_VERSION + PYTHON_ANALYSIS_VERSION = version + global PYTHON_ANALYSIS_MAJOR_VERSION + PYTHON_ANALYSIS_MAJOR_VERSION = 2 if PYTHON_ANALYSIS_VERSION.startswith("2") else 3 + +update_analysis_version(os.environ.get("CODEQL_EXTRACTOR_PYTHON_ANALYSIS_VERSION", "3")) + +#Flow graph labels: +#These should be powers of two, to allow use of bitsets. +NORMAL_EDGE = 1 +FALSE_EDGE = 2 +TRUE_EDGE = 4 +EXCEPTIONAL_EDGE = 8 +EXHAUSTED_EDGE = 16 + +class SemmleError(Exception): + 'Custom Error class, for reporting errors.' + pass + +#Define our own printf function to avoid Python2/3 problems. +def printf(fmt, *args): + 'Format arguments using % operator and print to sys.stdout' + sys.stdout.write(fmt % args) + +def fprintf(fout, fmt, *args): + 'Format arguments using % operator and print to file' + fout.write(fmt % args) + +def safe_string(txt): + #Replace all characters after the first 10k + if len(txt) > 10000: + txt = txt[:10000] + u"..." + return txt.replace(u'"', u'""') + +def escaped_string(txt): + return txt.replace(u'"', u'""') + + +if os.name == 'nt': + + MAGIC_PREFIX = u"\\\\?\\" + + def safe_path(path): + 'Returns an absolute path, safe for use on all OSes regardless of length.' + if path.startswith(MAGIC_PREFIX): + return path + return MAGIC_PREFIX + os.path.abspath(path) + + _open = open + + def open(path, *args): + assert safe_path(path) == path + return _open(path, *args) + +else: + + def safe_path(path): + 'Returns an absolute path, safe for use on all OSes regardless of length.' + if os.path.isabs(path): + return path + return os.path.abspath(path) + +AUTO_GEN_STRING = "/* AUTO GENERATED PART STARTS HERE */\n" + +def folder_tag(name): + return name + ';folder' + +def trap_id_escape(s): + """Escapes characters that are interpreted specially in TRAP IDs""" + s = s.replace("&", "&") + s = s.replace("{", "{") + s = s.replace("}", "}") + s = s.replace('"', """) + s = s.replace('@', "@") + s = s.replace('#', "#") + return s + +def generate_formatting_function(fmt): + '''Generate a new function that writes its arguments with the given format. + For example, for the format string "dd", this function will create the following function: + def format_ss(self, name, arg0, arg1): + self.out.write(u'%s(%s %s)\\n' % (name, str(arg0), str(arg1))) + ''' + func_name = 'format_' + fmt + args = ['self', 'name'] + [ 'arg%d' % i for i in range(len(fmt)) ] + defn = 'def %s(%s):\n' % (func_name, ', '.join(args)) + values = [ _formatting_functions[f](a) for f, a in zip(fmt, args[2:])] + format_string = "u'%s(" + ', '.join(['%s'] * len(fmt)) + ")\\n'" + body = ' self.out.write(%s %% (%s))\n' % (format_string, ',\n'.join(['name'] + values)) + func = defn + body + namespace = globals() + exec (func, namespace) + function = namespace[func_name] + del namespace[func_name] + return function + +def _format_d(val): + return 'repr(%s)' % val + +def _format_g(val): + return 'self.pool.get(%s, %s)' % (val, val) + +def _format_n(val): + return '''self.pool.get(%s, %s.trap_name) if hasattr(%s, 'trap_name') else self.pool.get(%s)''' % (val, val, val, val) + +def _format_r(val): + return val + +def _format_u(val): + return '''_INVALID_RE.sub(u'\uFFFD', u'"%%s"' %% safe_string(%s))''' % val + +def _format_b(val): + return '''u'"%%s"' %% safe_string(%s.decode("latin-1"))''' % val + +def _format_s(val): + return '''%s if isinstance(%s, bytes) else _INVALID_RE.sub(u'\uFFFD', u'"%%s"' %% safe_string(str(%s)))''' % (_format_b(val), val, val) + +def _format_B(val): + return '''u'"%%s"' %% escaped_string(%s.decode("latin-1"))''' % val + +def _format_S(val): + return '''%s if isinstance(%s, bytes) else _INVALID_RE.sub(u'\uFFFD', u'"%%s"' %% escaped_string(str(%s)))''' % (_format_B(val), val, val) + +def _format_x(val): + return '''(u"false", u"true")[%s]''' % val + +def _format_q(val): + return 'format_numeric_literal(%s)' % val + +_formatting_functions = { + 'b' : _format_b, + 'd' : _format_d, + 'g' : _format_g, + 'n' : _format_n, + 'r' : _format_r, + 's' : _format_s, + 'u' : _format_u, + 'x' : _format_x, + 'q' : _format_q, + 'B' : _format_B, + 'S' : _format_S, +} + + +def format_numeric_literal(val): + txt = repr(val) + return u'"%s"' % txt + +class Buffer(object): + def __init__(self, out): + self.out = out + self.buf = [] + + def write(self, content): + self.buf.append(content) + if len(self.buf) > 10000: + self.flush() + + def close(self): + self.flush() + self.out.close() + + def flush(self): + self.out.write(u''.join(self.buf)) + self.buf = [] + +class Utf8Zip(object): + + def __init__(self): + self.raw = BytesIO() + gout = gzip.GzipFile('', 'wb', 5, fileobj=self.raw) + self.out = codecs.getwriter('utf-8')(gout, errors='backslashreplace') + + def write(self, data): + self.out.write(data) + + def close(self): + self.out.close() + + def getvalue(self): + return self.raw.getvalue() + + +class TrapWriter(object): + + _format_functions = {} + + def __init__(self): + self.zip = Utf8Zip() + self.out = Buffer(self.zip) + self.pool = IDPool(self.out) + self.written_containers = {} + + def write_tuple(self, name, fmt, *args): + '''Write tuple accepts the following format characters: + 'b' : A bytes object. Limits the resulting string to ~10k. + 'd' : An integer + 'g' : A unicode object, as a globally shared object + 'n' : A node object (any AST, flow or variable node) + 'r' : "Raw", a precomputed id or similar. + 's' : Any object to be written as a unicode string. Limits the string to ~10k. + 'u' : A unicode object, as a string + 'x' : A boolean + 'B' : Like 'b' but not limited to 10k + 'S' : Like 's' but not limited to 10k + ''' + if fmt in self._format_functions: + return self._format_functions[fmt](self, name, *args) + func = generate_formatting_function(fmt) + self._format_functions[fmt] = func + return func(self, name, *args) + + def get_node_id(self, node): + if hasattr(node, 'trap_name'): + return self.pool.get(node, node.trap_name) + else: + return self.pool.get(node) + + def has_written(self, node): + return node in self.pool.pool + + def get_unique_id(self): + return self.pool.get_unique_id() + + '''Return an id that is shared across trap files, + whenever the label is used''' + def get_labelled_id(self, obj, label): + return self.pool.get(obj, label) + + def write_container(self, fullpath, is_file): + if fullpath in self.written_containers: + return self.written_containers[fullpath] + folder, filename = os.path.split(fullpath) + if is_file: + tag = get_source_file_tag(fullpath) + self.write_tuple(u'files', 'gs', tag, fullpath) + else: + tag = get_folder_tag(fullpath) + self.write_tuple(u'folders', 'gs', tag, fullpath) + self.written_containers[fullpath] = tag + if folder and filename: + folder_tag = self.write_container(folder, False) + self.write_tuple(u'containerparent' , 'gg', folder_tag, tag) + return tag + + def write_file(self, fullpath): + '''Writes `files` tuple plus all container tuples, up to the root. + Returns the tag. + Records tuples written to avoid duplication. + ''' + return self.write_container(fullpath, True) + + def write_folder(self, fullpath): + '''Writes `folders` tuple plus all container tuples, up to the root. + Returns the tag. + Records tuples written to avoid duplication. + ''' + return self.write_container(fullpath, False) + + def get_compressed(self): + '''Returns the gzipped compressed, utf-8 encoded contents of this trap file. + Closes the underlying zip stream, which means that no more tuples can be added.''' + self.out.close() + return self.zip.getvalue() + + def write_comment(self, text): + self.out.write(u'// %s\n' % text) + +# RegEx to find invalid characters +_INVALID_RE = re.compile(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE) + +class _HashableList(object): + 'Utility class for handling lists in the IDPool' + + def __init__(self, items): + self.items = items + + def __eq__(self, other): + if not isinstance(other, _HashableList): + return False + return self.items is other.items + + def __ne__(self, other): + if not isinstance(other, _HashableList): + return True + return self.items is not other.items + + def __hash__(self): + return id(self.items) + +class IDPool(object): + + def __init__(self, out, init_id = 10000): + self.out = out + self.pool = {} + self.next_id = init_id + + def get_unique_id(self): + res = u'#' + str(self.next_id) + self.out.write(res + u' = *\n') + self.next_id += 1 + return res + + def get(self, node, name=None): + """Gets the ID for the given node, creating a new one if necessary. + Inside name (if supplied), the characters &, {, }, ", @, and # will be escaped, + as these have special meaning in TRAP IDs + """ + #Need to special case lists as they are unhashable + if type(node) is list: + node = _HashableList(node) + if node in self.pool: + return self.pool[node] + next_id = (u'#' + + str(self.next_id)) + if name is not None: + name = str(name) + name = u'@"%s"' % safe_string(trap_id_escape(name)) + else: + name = u'*' + self.out.write(u"%s = %s\n" % (next_id, name)) + self.pool[node] = next_id + self.next_id += 1 + return next_id + + +def get_folder_tag(folder): + return '/'.join(folder.split(os.path.sep)) + ';folder' + + +def get_source_file_tag(fullpath): + return fullpath, sys.getfilesystemencoding() + u';sourcefile' + +def makedirs(path): + try: + os.makedirs(path) + except OSError: + #If directory does not exist then error was a real one. + if not os.path.isdir(path): + raise + +def clean_cache(subdir, suffix, verbose): + #Remove any pre-existing cached files as they are now out of date + if os.path.exists(subdir): + for filename in os.listdir(subdir): + if not filename.endswith(suffix): + continue + filepath = os.path.join(subdir, filename) + try: + if verbose: + print ("Deleting stale trap file: " + filepath) + os.remove(filepath) + except Exception as ex: + if verbose: + msg = "Failed to remove stale trap file %s due to %s" + print (msg % (filepath, repr(ex))) + else: + makedirs(subdir) + +if os.name == 'nt': + + def storage_path(container, path): + ''' Returns a path in a source archive, trap-output or trap-cache.''' + path = path.replace(":", "_") + if os.path.isabs(path): + path = path[1:] + return safe_path(os.path.join(container, path)) + + def isdir(path): + if len(path) > 240: + path = "\\\\?\\" + path + return os.path.isdir(path) + + def islink(path): + if len(path) > 240: + path = "\\\\?\\" + path + return os.path.islink(path) + + def listdir(path): + if len(path) > 240: + path = "\\\\?\\" + path + return os.listdir(path) + +else: + + def storage_path(container, path): + ''' Returns a path in a source archive, trap-output or trap-cache.''' + if os.path.isabs(path): + path = path[1:] + return safe_path(os.path.join(container, path)) + + isdir = os.path.isdir + islink = os.path.islink + listdir = os.listdir + + +LATIN1 = codecs.lookup("latin-1") +UTF8 = codecs.lookup("utf-8") + +def was_interned_ascii_bytes(txt): + return txt is sys.intern(txt[:]) + +def is_a_number(txt): + try: + float(txt) + return True + except ValueError: + return False + + +#Should only be set to True for debugging and testing +USE_INTOLERANT_ENCODING = False + +def change_default_encoding(): + + if USE_INTOLERANT_ENCODING: + + def _decode(input, errors=None): + '''If the input is interned (program source) or a number, then it is safe to implicitly convert it. + Otherwise it may not be, so raise an exception''' + if not was_interned_ascii_bytes(input) and not is_a_number(input): + f = sys._getframe(1) + if "semmle" in f.f_code.co_filename: + raise SemmleError(b"Implicit decode of '%s' at %s:%d" % (input, f.f_code.co_filename, f.f_lineno)) + try: + return UTF8.decode(input) + except UnicodeDecodeError: + return LATIN1.decode(input) + + def _encode(input, errors=None): + f = sys._getframe(1) + if "semmle" in f.f_code.co_filename: + raise SemmleError("Implicit encode of '%s' at %s:%d" % (UTF8.encode(input), f.f_code.co_filename, f.f_lineno)) + return UTF8.encode(input, "backslashreplace") + + else: + + def _decode(input, errors=None): + '''Convert bytes to unicode without failing.''' + try: + return UTF8.decode(input) + except UnicodeDecodeError: + return LATIN1.decode(input) + + def _encode(input, errors=None): + '''Convert unicode to bytes without failing.''' + return UTF8.encode(input, "backslashreplace") + + def search(name): + if name != "safe": + return None + return codecs.CodecInfo(_encode, _decode, name="safe") + codecs.register(search) + from importlib import reload + reload(sys) + sys.setdefaultencoding("safe") + del sys.setdefaultencoding + +_sys_rand = random.SystemRandom() + +def uuid(local_name): + '''Return a randomised string to use as a UUID. + Do not use the uuid module as it calls out to ldconfig, + which is prohibited in some sandboxed environments. + ''' + hex_string = hex(_sys_rand.randrange(1 << 256)) + #Strip leading '0x' + return hex_string[2:] + "-" + local_name + + +class Extractable(object): + '''Extractable class representing a Extractable of extraction. + Typically a file, but may be other things like a built-in Python module. + ''' + + def __ne__(self, other): + return not self == other + + @staticmethod + def from_path(path): + if os.path.isdir(path): + return FolderExtractable(path) + elif os.path.isfile(path): + return FileExtractable(path) + else: + raise IOError("% does not exist" % path) + +class PathExtractable(Extractable): + + PATTERN = 421706893 + + __slots__ = [ 'path' ] + + def __init__(self, path): + assert "" not in path + self.path = path + + def __eq__(self, other): + return isinstance(other, type(self)) and self.path == other.path + + def __hash__(self): + return hash(self.path) ^ self.PATTERN + +class FileExtractable(PathExtractable): + + PATTERN = 1903946595 + + __slots__ = [ 'path' ] + + def __str__(self): + return "file " + self.path + + def __repr__(self): + return "FileExtractable(%r)" % self.path + + +class FolderExtractable(PathExtractable): + + PATTERN = 712343093 + + __slots__ = [ 'path' ] + + def __str__(self): + return "folder " + self.path + + def __repr__(self): + return "FolderExtractable(%r)" % self.path + +class BuiltinModuleExtractable(Extractable): + + __slots__ = [ 'name' ] + + def __init__(self, name): + self.name = name + + def __str__(self): + return "module " + self.name + + def __repr__(self): + return "BuiltinModuleExtractable(%r)" % self.name + + def __eq__(self, other): + return isinstance(other, BuiltinModuleExtractable) and self.name == other.name + + def __hash__(self): + return hash(self.name) ^ 82753421 + +def base64digest(code): + return base64.b64encode(hashlib.sha1(code.encode("utf8")).digest(), b"_-").decode("ascii") diff --git a/python/extractor/semmle/worker.py b/python/extractor/semmle/worker.py new file mode 100644 index 00000000000..1207caf6727 --- /dev/null +++ b/python/extractor/semmle/worker.py @@ -0,0 +1,305 @@ +import sys, os +from collections import deque, defaultdict +import time +import multiprocessing as mp +import json + +from queue import Empty as _Empty +from queue import Full as _Full + +from semmle.extractors import SuperExtractor, ModulePrinter, SkippedBuiltin +from semmle.profiling import get_profiler +from semmle.path_rename import renamer_from_options_and_env +from semmle.logging import WARN, recursion_error_message, internal_error_message, Logger + +class ExtractorFailure(Exception): + 'Generic exception representing the failure of an extractor.' + pass + + +class ModuleImportGraph(object): + + def __init__(self, max_depth): + self.modules = {} + self.succ = defaultdict(set) + self.todo = set() + self.done = set() + self.max_depth = max_depth + + def add_root(self, mod): + self.modules[mod] = 0 + if mod not in self.done: + self.todo.add(mod) + + def add_import(self, mod, imported): + assert mod in self.modules + self.succ[mod].add(imported) + if imported in self.modules: + if self.modules[imported] > self.modules[mod] + 1: + self._reduce_depth(imported, self.modules[mod] + 1) + else: + if self.modules[mod] < self.max_depth and imported not in self.done: + self.todo.add(imported) + self.modules[imported] = self.modules[mod] + 1 + + def _reduce_depth(self, mod, depth): + if self.modules[mod] <= depth: + return + if depth > self.max_depth: + return + if mod not in self.done: + self.todo.add(mod) + self.modules[mod] = depth + for imp in self.succ[mod]: + self._reduce_depth(imp, depth+1) + + def get(self): + mod = self.todo.pop() + assert not mod in self.done and self.modules[mod] <= self.max_depth + self.done.add(mod) + return mod + + def push_back(self, mod): + self.done.remove(mod) + self.todo.add(mod) + + def empty(self): + return not self.todo + +class ExtractorPool(object): + '''Pool of worker processes running extractors''' + + def __init__(self, outdir, archive, proc_count, options, logger: Logger): + if proc_count < 1: + raise ValueError("Number of processes must be at least one.") + self.verbose = options.verbose + self.outdir = outdir + self.max_import_depth = options.max_import_depth + # macOS does not support `fork` properly, so we must use `spawn` instead. + method = 'spawn' if sys.platform == "darwin" else None + try: + ctx = mp.get_context(method) + except AttributeError: + # `get_context` doesn't exist -- we must be running an old version of Python. + ctx = mp + #Keep queue short to minimise delay when stopping + self.module_queue = ctx.Queue(proc_count*2) + self.reply_queue = ctx.Queue(proc_count*20) + self.archive = archive + self.local_queue = deque() + self.enqueued = set() + self.done = set() + self.requirements = {} + self.import_graph = ModuleImportGraph(options.max_import_depth) + logger.debug("Source archive: %s", archive) + self.logger = logger + DiagnosticsWriter.create_output_dir() + args = (self.module_queue, outdir, archive, options, self.reply_queue, logger) + self.procs = [ + ctx.Process(target=_extract_loop, args=(n+1,) + args + (n == 0,)) for n in range(proc_count) + ] + for p in self.procs: + p.start() + self.start_time = time.time() + + def extract(self, the_traverser): + '''Extract all the files from the given traverser, + and all the imported files up to the depth specified + by the options. + ''' + self.logger.trace("Starting traversal") + for mod in the_traverser: + self.import_graph.add_root(mod) + self.try_to_send() + self.receive(False) + #Prime the queue + while self.try_to_send(): + pass + while self.enqueued or not self.import_graph.empty(): + self.try_to_send() + self.receive(True) + + def try_to_send(self): + if self.import_graph.empty(): + return False + module = self.import_graph.get() + try: + self.module_queue.put(module, False) + self.enqueued.add(module) + self.logger.debug("Enqueued %s", module) + return True + except _Full: + self.import_graph.push_back(module) + return False + + def receive(self, block=False): + try: + what, mod, imp = self.reply_queue.get(block) + if what == "INTERRUPT": + self.logger.debug("Main process received interrupt") + raise KeyboardInterrupt + elif what == "UNRECOVERABLE_FAILURE": + raise ExtractorFailure(str(mod)) + elif what == "FAILURE": + self.enqueued.remove(mod) + elif what == "SUCCESS": + self.enqueued.remove(mod) + else: + assert what == "IMPORT" + assert mod is not None + if imp is None: + self.logger.warning("Unexpected None as import.") + else: + self.import_graph.add_import(mod, imp) + except _Empty: + #Nothing in reply queue. + pass + + def close(self): + self.logger.debug("Closing down workers") + assert not self.enqueued + for p in self.procs: + self.module_queue.put(None) + for p in self.procs: + p.join() + self.logger.info("Processed %d modules in %0.2fs", len(self.import_graph.done), time.time() - self.start_time) + + def stop(self, timeout=2.0): + '''Stop the worker pool, reasonably promptly and as cleanly as possible.''' + try: + _drain_queue(self.module_queue) + for p in self.procs: + self.module_queue.put(None) + _drain_queue(self.reply_queue) + end = time.time() + timeout + running = set(self.procs) + while running and time.time() < end: + time.sleep(0.1) + _drain_queue(self.reply_queue) + running = {p for p in running if p.is_alive()} + if running: + for index, proc in enumerate(self.procs, 1): + if proc.is_alive(): + self.logger.error("Process %d timed out", index) + except Exception as ex: + self.logger.error("Unexpected error when stopping %s", ex) + + @staticmethod + def from_options(options, trap_dir, archive, logger: Logger): + '''Convenience method to create extractor pool from options.''' + cpus = mp.cpu_count() + procs = options.max_procs + if procs == 'all': + procs = cpus + elif procs is None or procs == 'half': + procs = (cpus+1)//2 + else: + procs = int(procs) + return ExtractorPool(trap_dir, archive, procs, options, logger) + +def _drain_queue(queue): + try: + while True: + queue.get(False) + except _Empty: + #Emptied queue as best we can. + pass + +class DiagnosticsWriter(object): + def __init__(self, proc_id): + self.proc_id = proc_id + + def write(self, message): + dir = os.environ.get("CODEQL_EXTRACTOR_PYTHON_DIAGNOSTIC_DIR") + if dir: + with open(os.path.join(dir, "worker-%d.jsonl" % self.proc_id), "a") as output_file: + output_file.write(json.dumps(message.to_dict()) + "\n") + + @staticmethod + def create_output_dir(): + dir = os.environ.get("CODEQL_EXTRACTOR_PYTHON_DIAGNOSTIC_DIR") + if dir: + os.makedirs(os.environ["CODEQL_EXTRACTOR_PYTHON_DIAGNOSTIC_DIR"], exist_ok=True) + + + +# Function run by worker processes +def _extract_loop(proc_id, queue, trap_dir, archive, options, reply_queue, logger: Logger, write_global_data): + diagnostics_writer = DiagnosticsWriter(proc_id) + send_time = 0 + recv_time = 0 + extraction_time = 0 + + # use utf-8 as the character encoding for stdout/stderr to be able to properly + # log/print things on systems that use bad default encodings (windows). + sys.stdout.reconfigure(encoding='utf-8') + sys.stderr.reconfigure(encoding='utf-8') + + try: + renamer = renamer_from_options_and_env(options, logger) + except Exception as ex: + logger.error("Exception: %s", ex) + reply_queue.put(("INTERRUPT", None, None)) + sys.exit(2) + logger.set_process_id(proc_id) + try: + if options.trace_only: + extractor = ModulePrinter(options, trap_dir, archive, renamer, logger) + else: + extractor = SuperExtractor(options, trap_dir, archive, renamer, logger, diagnostics_writer) + profiler = get_profiler(options, id, logger) + with profiler: + while True: + start_recv = time.time() + unit = queue.get() + recv_time += time.time() - start_recv + if unit is None: + if write_global_data: + extractor.write_global_data() + extractor.close() + return + try: + start = time.time() + imports = extractor.process(unit) + end_time = time.time() + extraction_time += end_time - start + if imports is SkippedBuiltin: + logger.info("Skipped built-in %s", unit) + else: + for imp in imports: + reply_queue.put(("IMPORT", unit, imp)) + send_time += time.time() - end_time + logger.info("Extracted %s in %0.0fms", unit, (end_time-start)*1000) + except SyntaxError as ex: + # Syntax errors have already been handled in extractor.py + reply_queue.put(("FAILURE", unit, None)) + except RecursionError as ex: + error = recursion_error_message(ex, unit) + diagnostics_writer.write(error) + logger.error("Failed to extract %s: %s", unit, ex) + logger.traceback(WARN) + reply_queue.put(("FAILURE", unit, None)) + except Exception as ex: + error = internal_error_message(ex, unit) + diagnostics_writer.write(error) + logger.error("Failed to extract %s: %s", unit, ex) + logger.traceback(WARN) + reply_queue.put(("FAILURE", unit, None)) + else: + reply_queue.put(("SUCCESS", unit, None)) + except KeyboardInterrupt: + logger.debug("Worker process received interrupt") + reply_queue.put(("INTERRUPT", None, None)) + except Exception as ex: + logger.error("Exception: %s", ex) + reply_queue.put(("INTERRUPT", None, None)) + # Avoid deadlock and speed up termination by clearing queue. + try: + while True: + msg = queue.get(False) + if msg is None: + break + except _Empty: + #Cleared queue enough to avoid deadlock. + pass + sys.exit(2) diff --git a/python/extractor/setup.py b/python/extractor/setup.py new file mode 100644 index 00000000000..f93051d7cd0 --- /dev/null +++ b/python/extractor/setup.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +#This file needs to be able to handle all versions of Python we are likely to encounter +#Which is probably 3.0 and upwards + +'''Run buildtools/install.py''' + +import sys +import os +import subprocess +from python_tracer import getzipfilename + +if 'SEMMLE_DIST' in os.environ: + if 'CODEQL_EXTRACTOR_PYTHON_ROOT' not in os.environ: + os.environ['CODEQL_EXTRACTOR_PYTHON_ROOT'] = os.environ['SEMMLE_DIST'] +else: + os.environ["SEMMLE_DIST"] = os.environ["CODEQL_EXTRACTOR_PYTHON_ROOT"] + +tools = os.path.join(os.environ['SEMMLE_DIST'], "tools") +zippath = os.path.join(tools, getzipfilename()) +sys.path = [ zippath ] + sys.path + +# these are imported from the zip +from buildtools.discover import discover +import buildtools.install + +def main(): + version, root, requirement_files = discover() + buildtools.install.main(version, root, requirement_files) + + +if __name__ == "__main__": + main() diff --git a/python/extractor/test.py b/python/extractor/test.py new file mode 100644 index 00000000000..2f774569753 --- /dev/null +++ b/python/extractor/test.py @@ -0,0 +1 @@ +match() diff --git a/python/extractor/tests/__init__.py b/python/extractor/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/buildtools/__init__.py b/python/extractor/tests/buildtools/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/buildtools/helper.py b/python/extractor/tests/buildtools/helper.py new file mode 100644 index 00000000000..9ac738a5197 --- /dev/null +++ b/python/extractor/tests/buildtools/helper.py @@ -0,0 +1,102 @@ +import os +import stat +import tempfile +import shutil +import time +import sys +import subprocess +from contextlib import contextmanager +from functools import wraps + + +# Would have liked to use a decorator, but for Python 2 the functools.wraps is not good enough for +# signature preservation that pytest can figure out what is going on. It would be possible to use +# the decorator package, but that seemed like a bit too much of a hassle. +@contextmanager +def in_fresh_temp_dir(): + old_cwd = os.getcwd() + with managed_temp_dir('extractor-python-buildtools-test-') as tmp: + os.chdir(tmp) + try: + yield tmp + finally: + os.chdir(old_cwd) + + +@contextmanager +def managed_temp_dir(prefix=None): + dir = tempfile.mkdtemp(prefix=prefix) + try: + yield dir + finally: + rmtree_robust(dir) + + +def rmtree_robust(dir): + if is_windows(): + # It's important that the path is a Unicode path on Windows, so + # that the right system calls get used. + dir = u'' + dir + if not dir.startswith("\\\\?\\"): + dir = "\\\\?\\" + os.path.abspath(dir) + + # Emulate Python 3 "nonlocal" keyword + class state: pass + state.last_failed_delete = None + + + def _rmtree(path): + """wrapper of shutil.rmtree to handle Python 3.12 rename (onerror => onexc)""" + if sys.version_info >= (3, 12): + shutil.rmtree(path, onexc=remove_error) + else: + shutil.rmtree(path, onerror=remove_error) + + def remove_error(func, path, excinfo): + # If we get an error twice in a row for the same path then just give up. + if state.last_failed_delete == path: + return + state.last_failed_delete = path + + # The problem could be one of permissions, so setting path writable + # might fix it. + os.chmod(path, stat.S_IWRITE) + + # On Windows, we sometimes get errors about directories not being + # empty, but immediately afterwards they are empty. Waiting a bit + # might therefore be sufficient. + t = 0.1 + while (True): + try: + if os.path.isdir(path): + _rmtree(path) + else: + os.remove(path) + except OSError: + if (t > 1): + return # Give up + time.sleep(t) + t *= 2 + _rmtree(dir) + # On Windows, attempting to write immediately after deletion may result in + # an 'access denied' exception, so wait a bit. + if is_windows(): + time.sleep(0.5) + + +def is_windows(): + return os.name == 'nt' + + +@contextmanager +def copy_repo_dir(repo_dir_in): + with managed_temp_dir(prefix="extractor-python-buildtools-test-") as tmp: + repo_dir = os.path.join(tmp, 'repo') + print('copying', repo_dir_in, 'to', repo_dir) + shutil.copytree(repo_dir_in, repo_dir, symlinks=True) + yield repo_dir + +################################################################################ + + +DEVNULL = subprocess.DEVNULL diff --git a/python/extractor/tests/buildtools/test_index.py b/python/extractor/tests/buildtools/test_index.py new file mode 100644 index 00000000000..a0a6e09a952 --- /dev/null +++ b/python/extractor/tests/buildtools/test_index.py @@ -0,0 +1,169 @@ +import os +import pytest +import shutil +import glob + +import buildtools.index +from tests.buildtools.helper import in_fresh_temp_dir + +# we use `monkeypatch.setenv` instead of setting `os.environ` directly, since that produces +# cross-talk between tests. (using mock.patch.dict is only available for Python 3) + + +class TestIncludeOptions: + @staticmethod + def test_LGTM_SRC(monkeypatch): + monkeypatch.setenv("LGTM_SRC", "path/src") + assert buildtools.index.get_include_options() == ["-R", "path/src"] + + @staticmethod + def test_LGTM_INDEX_INCLUDE(monkeypatch): + monkeypatch.setenv("LGTM_INDEX_INCLUDE", "/foo\n/bar") + assert buildtools.index.get_include_options() == ["-R", "/foo", "-R", "/bar"] + + +class TestPip21_3: + @staticmethod + def test_no_build_dir(monkeypatch): + with in_fresh_temp_dir() as path: + os.makedirs(os.path.join(path, "src")) + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_pip_21_3_build_dir_options() == [] + + @staticmethod + def test_faked_build_dir(monkeypatch): + # since I don't want to introduce specific pip version on our + # testing infrastructure, I'm just going to fake that `pip install .` had + # been called. + with in_fresh_temp_dir() as path: + os.makedirs(os.path.join(path, "build", "lib")) + monkeypatch.setenv("LGTM_SRC", path) + expected = ["-Y", os.path.join(path, "build")] + assert buildtools.index.exclude_pip_21_3_build_dir_options() == expected + + @staticmethod + def test_disable_environment_variable(monkeypatch): + monkeypatch.setenv( + "CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_PIP_BUILD_DIR_EXCLUDE", "1" + ) + with in_fresh_temp_dir() as path: + os.makedirs(os.path.join(path, "build", "lib")) + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_pip_21_3_build_dir_options() == [] + + @staticmethod + def test_code_build_dir(monkeypatch): + # simulating that you have the module `mypkg.build.lib.foo` + with in_fresh_temp_dir() as path: + os.makedirs(os.path.join(path, "mypkg", "build", "lib")) + open(os.path.join(path, "mypkg", "build", "lib", "foo.py"), "wt").write("print(42)") + open(os.path.join(path, "mypkg", "build", "lib", "__init__.py"), "wt").write("") + open(os.path.join(path, "mypkg", "build", "__init__.py"), "wt").write("") + open(os.path.join(path, "mypkg", "__init__.py"), "wt").write("") + + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_pip_21_3_build_dir_options() == [] + + +def create_fake_venv(path, is_unix): + os.makedirs(path) + open(os.path.join(path, "pyvenv.cfg"), "wt").write("") + if is_unix: + os.mkdir(os.path.join(path, "bin")) + open(os.path.join(path, "bin", "activate"), "wt").write("") + os.makedirs(os.path.join(path, "lib", "python3.10", "site-packages")) + else: + os.mkdir(os.path.join(path, "Scripts")) + open(os.path.join(path, "Scripts", "activate.bat"), "wt").write("") + os.makedirs(os.path.join(path, "Lib", "site-packages")) + +class TestVenvIgnore: + @staticmethod + def test_no_venv(monkeypatch): + with in_fresh_temp_dir() as path: + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_venvs_options() == [] + + @staticmethod + @pytest.mark.parametrize("is_unix", [True,False]) + def test_faked_venv_dir(monkeypatch, is_unix): + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=is_unix) + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_venvs_options() == ["-Y", os.path.join(path, "venv")] + + @staticmethod + @pytest.mark.parametrize("is_unix", [True,False]) + def test_multiple_faked_venv_dirs(monkeypatch, is_unix): + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=is_unix) + create_fake_venv(os.path.join(path, "venv2"), is_unix=is_unix) + + monkeypatch.setenv("LGTM_SRC", path) + + expected = [ + "-Y", os.path.join(path, "venv"), + "-Y", os.path.join(path, "venv2"), + ] + + actual = buildtools.index.exclude_venvs_options() + assert sorted(actual) == sorted(expected) + + @staticmethod + def test_faked_venv_dir_no_pyvenv_cfg(monkeypatch): + """ + Some times, the `pyvenv.cfg` file is not included when a virtual environment is + added to a git-repo, but we should be able to ignore the venv anyway. + + See + - https://github.com/FiacreT/M-moire/tree/4089755191ffc848614247e98bbb641c1933450d/osintplatform/testNeo/venv + - https://github.com/Lynchie/KCM/tree/ea9eeed07e0c9eec41f9fc7480ce90390ee09876/VENV + """ + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=True) + monkeypatch.setenv("LGTM_SRC", path) + os.remove(os.path.join(path, "venv", "pyvenv.cfg")) + assert buildtools.index.exclude_venvs_options() == ["-Y", os.path.join(path, "venv")] + + @staticmethod + def test_faked_venv_no_bin_dir(monkeypatch): + """ + Some times, the activate script is not included when a virtual environment is + added to a git-repo, but we should be able to ignore the venv anyway. + """ + + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=True) + monkeypatch.setenv("LGTM_SRC", path) + bin_dir = os.path.join(path, "venv", "bin") + assert os.path.isdir(bin_dir) + shutil.rmtree(bin_dir) + assert buildtools.index.exclude_venvs_options() == ["-Y", os.path.join(path, "venv")] + + @staticmethod + def test_faked_venv_dir_no_lib_python(monkeypatch): + """ + If there are no `lib/pyhton*` dirs within a unix venv, then it doesn't + constitute a functional virtual environment, and we don't exclude it. That's not + going to hurt, since it won't contain any installed packages. + """ + + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=True) + monkeypatch.setenv("LGTM_SRC", path) + glob_res = glob.glob(os.path.join(path, "venv", "lib", "python*")) + assert glob_res + for d in glob_res: + shutil.rmtree(d) + assert buildtools.index.exclude_venvs_options() == [] + + @staticmethod + @pytest.mark.parametrize("is_unix", [True,False]) + def test_disable_environment_variable(monkeypatch, is_unix): + monkeypatch.setenv( + "CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE", "1" + ) + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=is_unix) + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_venvs_options() == [] diff --git a/python/extractor/tests/buildtools/test_install.py b/python/extractor/tests/buildtools/test_install.py new file mode 100644 index 00000000000..3950e6e853a --- /dev/null +++ b/python/extractor/tests/buildtools/test_install.py @@ -0,0 +1,16 @@ +import pytest + +import buildtools.install +from tests.buildtools.helper import in_fresh_temp_dir + +def test_basic(monkeypatch, mocker): + mocker.patch('subprocess.call') + mocker.patch('subprocess.check_call') + + with in_fresh_temp_dir() as path: + monkeypatch.setenv('LGTM_WORKSPACE', path) + monkeypatch.setenv('SEMMLE_DIST', '') + + with pytest.raises(SystemExit) as exc_info: + buildtools.install.main(3, '.', []) + assert exc_info.value.code == 0 diff --git a/python/extractor/tests/buildtools/test_python_auto_install.py b/python/extractor/tests/buildtools/test_python_auto_install.py new file mode 100755 index 00000000000..277b25475c0 --- /dev/null +++ b/python/extractor/tests/buildtools/test_python_auto_install.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +import buildtools.semmle.requirements as requirements +import unittest + +class RequirementsTests(unittest.TestCase): + + def assertExpected(self, reqs, expected): + self.assertEqual(str(reqs), str(requirements.parse(expected.splitlines()))) + + _input = """\ + SQLAlchemy<1.1.0,>=1.0.10 # MIT + sqlalchemy-migrate>=0.9.6 # Apache-2.0 + stevedore>=1.10.0a4 # Apache-2.0 + WebOb>1.2.3 # MIT + oslo.i18n!=2.1.0,==2.0.7 # Apache-2.0 + foo>=0.9,<0.8 # Contradictory + bar>=1.3, <1.3 # Contradictory, but only just + baz>=3 # No dot in version number. + git+https://github.com/mozilla/elasticutils.git # Requirement in Git. Should be ignored. + -e git+https://github.com/Lasagne/Lasagne.git@8f4f9b2#egg=Lasagne==0.2.git # Another Git requirement. + """ + + def test_clean(self): + reqs = requirements.parse(self._input.splitlines()) + expected = """\ + SQLAlchemy<1.1.0,>=1.0.10 + sqlalchemy-migrate>=0.9.6 + stevedore>=1.10.0a4 + WebOb>1.2.3 + oslo.i18n!=2.1.0,==2.0.7 + foo>=0.9 + bar>=1.3 + baz>=3 + """ + self.assertExpected(requirements.clean(reqs), expected) + + def test_restricted(self): + reqs = requirements.parse(self._input.splitlines()) + expected = """\ + SQLAlchemy<1.1.0,>=1.0.10,==1.* + sqlalchemy-migrate>=0.9.6,==0.* + stevedore>=1.10.0a4,==1.* + WebOb>1.2.3,==1.* + oslo.i18n!=2.1.0,==2.0.7 + foo>=0.9,==0.* + bar>=1.3,==1.* + baz==3.*,>=3 + """ + self.assertExpected(requirements.restrict(reqs), expected) + +if __name__ == "__main__": + unittest.main() diff --git a/python/extractor/tests/buildtools/test_version.py b/python/extractor/tests/buildtools/test_version.py new file mode 100644 index 00000000000..8a3c05e7c0e --- /dev/null +++ b/python/extractor/tests/buildtools/test_version.py @@ -0,0 +1,244 @@ +import os +import re +from textwrap import dedent +import itertools + +import pytest + +import buildtools.version as version +from tests.buildtools.helper import in_fresh_temp_dir + + +class TestTravisVersion: + + # based on https://docs.travis-ci.com/user/customizing-the-build/#build-matrix + # and https://docs.travis-ci.com/user/languages/python/ + + def test_simple(self): + with in_fresh_temp_dir(): + assert version.travis_version('.') is None + + + @pytest.mark.parametrize( + 'name,expected,travis_file',[ + ('empty', None, ''), + ('no_python', None, dedent("""\ + language: ruby + rvm: + - 2.5 + - 2.6 + """)), + + ('both', None, dedent("""\ + language: python + python: + - "2.6" + - "2.7" + - "3.5" + - "3.6" + """)), + + ('only_py2', 2, dedent("""\ + language: python + python: + - "2.6" + - "2.7" + """)), + + ('only_py3', 3, dedent("""\ + language: python + python: + - "3.5" + - "3.6" + """)), + + ('jobs_both', None, dedent("""\ + language: python + jobs: + include: + - python: 2.6 + - python: 2.7 + - python: 3.5 + - python: 3.6 + """)), + + ('jobs_only_py2', 2, dedent("""\ + language: python + jobs: + include: + - python: 2.6 + - python: 2.7 + """)), + + ('jobs_only_py3', 3, dedent("""\ + language: python + jobs: + include: + - python: 3.5 + - python: 3.6 + """)), + + ('top_level_and_jobs', None, dedent("""\ + language: python + python: + - "2.6" + - "2.7" + jobs: + include: + - python: 3.5 + - python: 3.6 + """)), + + ('jobs_unrelated', 2, dedent("""\ + language: python + python: + - "2.6" + - "2.7" + jobs: + include: + - env: FOO=FOO + - env: FOO=BAR + """)), + + ('jobs_no_python', None, dedent("""\ + language: ruby + jobs: + include: + - rvm: 2.5 + - rvm: 2.6 + """)), + + # matrix is the old name for jobs (still supported as of 2019-11) + ('matrix_only_py3', 3, dedent("""\ + language: python + matrix: + include: + - python: 3.5 + - python: 3.6 + """)), + + ('quoted_py2', 2, dedent("""\ + language: python + python: + - "2.7" + """)), + + ('unquoted_py2', 2, dedent("""\ + language: python + python: + - 2.7 + """)), + ]) + def test_with_file(self, name, expected, travis_file): + with in_fresh_temp_dir(): + with open('.travis.yml', 'w') as f: + f.write(travis_file) + assert version.travis_version('.') is expected, name + + def test_filesnames(self): + """Should prefer .travis.yml over travis.yml (which we still support for some legacy reason) + """ + with in_fresh_temp_dir(): + with open('travis.yml', 'w') as f: + f.write(dedent("""\ + language: python + python: + - "2.6" + - "2.7" + """)) + assert version.travis_version('.') is 2 + + with open('.travis.yml', 'w') as f: + f.write(dedent("""\ + language: python + python: + - "3.5" + - "3.6" + """)) + assert version.travis_version('.') is 3 +class TestTroveVersion: + + def test_empty(self): + with in_fresh_temp_dir(): + assert version.trove_version('.') is None + + def test_with_file(self): + def _to_file(classifiers): + with open('setup.py', 'wt') as f: + f.write(dedent("""\ + setup( + classifiers={!r} + ) + """.format(classifiers) + )) + + cases = [ + (2, "Programming Language :: Python :: 2.7"), + (2, "Programming Language :: Python :: 2"), + (2, "Programming Language :: Python :: 2 :: Only"), + (3, "Programming Language :: Python :: 3.7"), + (3, "Programming Language :: Python :: 3"), + (3, "Programming Language :: Python :: 3 :: Only"), + ] + + for expected, classifier in cases: + with in_fresh_temp_dir(): + _to_file([classifier]) + assert version.trove_version('.') == expected + + for combination in itertools.combinations(cases, 2): + with in_fresh_temp_dir(): + versions, classifiers = zip(*combination) + _to_file(classifiers) + expected = 3 if 3 in versions else 2 + assert version.trove_version('.') == expected + + @pytest.mark.xfail() + def test_tricked_regex_is_too_simple(self): + with in_fresh_temp_dir(): + with open('setup.py', 'wt') as f: + f.write(dedent("""\ + setup( + name='Programming Language :: Python :: 2', + classifiers=[], + ) + """ + )) + assert version.trove_version('.') is None + + @pytest.mark.xfail() + def test_tricked_regex_is_too_simple2(self): + with in_fresh_temp_dir(): + with open('setup.py', 'wt') as f: + f.write(dedent("""\ + setup( + # classifiers=['Programming Language :: Python :: 2'], + ) + """ + )) + assert version.trove_version('.') is None + + @pytest.mark.xfail() + def test_tricked_not_running_as_code(self): + with in_fresh_temp_dir(): + with open('setup.py', 'wt') as f: + f.write(dedent("""\ + c = 'Programming Language :: ' + 'Python :: 2' + setup( + classifiers=[c], + ) + """ + )) + assert version.trove_version('.') is 2 + + def test_constructing_other_place(self): + with in_fresh_temp_dir(): + with open('setup.py', 'wt') as f: + f.write(dedent("""\ + c = 'Programming Language :: Python :: 2' + setup( + classifiers=[c], + ) + """ + )) + assert version.trove_version('.') is 2 diff --git a/python/extractor/tests/data-imports/mod1.py b/python/extractor/tests/data-imports/mod1.py new file mode 100644 index 00000000000..176f846316c --- /dev/null +++ b/python/extractor/tests/data-imports/mod1.py @@ -0,0 +1 @@ +import mod2 diff --git a/python/extractor/tests/data-imports/mod2.py b/python/extractor/tests/data-imports/mod2.py new file mode 100644 index 00000000000..5267ffc7b38 --- /dev/null +++ b/python/extractor/tests/data-imports/mod2.py @@ -0,0 +1,2 @@ +import mod3 +import mod4 diff --git a/python/extractor/tests/data-imports/mod3.py b/python/extractor/tests/data-imports/mod3.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data-imports/mod4.py b/python/extractor/tests/data-imports/mod4.py new file mode 100644 index 00000000000..0ec7223a8a1 --- /dev/null +++ b/python/extractor/tests/data-imports/mod4.py @@ -0,0 +1 @@ +import mod5 diff --git a/python/extractor/tests/data-imports/mod5.py b/python/extractor/tests/data-imports/mod5.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data-imports/mod6.py b/python/extractor/tests/data-imports/mod6.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/mod1.py b/python/extractor/tests/data/mod1.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/mod11.py b/python/extractor/tests/data/mod11.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/mod2.py b/python/extractor/tests/data/mod2.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/__init__.py b/python/extractor/tests/data/package/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/sub/__init__.py b/python/extractor/tests/data/package/sub/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/sub/a.py b/python/extractor/tests/data/package/sub/a.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/sub/b.py b/python/extractor/tests/data/package/sub/b.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/sub2.py b/python/extractor/tests/data/package/sub2.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/x.py b/python/extractor/tests/data/package/x.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/y.py b/python/extractor/tests/data/package/y.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/dot-py/why.py/__init__.py b/python/extractor/tests/dot-py/why.py/__init__.py new file mode 100644 index 00000000000..58ce32f636d --- /dev/null +++ b/python/extractor/tests/dot-py/why.py/__init__.py @@ -0,0 +1,2 @@ +import a +import why diff --git a/python/extractor/tests/dot-py/why.py/a.py b/python/extractor/tests/dot-py/why.py/a.py new file mode 100644 index 00000000000..7d4290a117a --- /dev/null +++ b/python/extractor/tests/dot-py/why.py/a.py @@ -0,0 +1 @@ +x = 1 diff --git a/python/extractor/tests/lgtm_src/x.py b/python/extractor/tests/lgtm_src/x.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/lgtm_src/y.py b/python/extractor/tests/lgtm_src/y.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/off-path/nameless.py b/python/extractor/tests/off-path/nameless.py new file mode 100644 index 00000000000..6b209ec6830 --- /dev/null +++ b/python/extractor/tests/off-path/nameless.py @@ -0,0 +1,2 @@ +import mod1 +import mod2 diff --git a/python/extractor/tests/parser/alternating.py b/python/extractor/tests/parser/alternating.py new file mode 100644 index 00000000000..bf0f8de518d --- /dev/null +++ b/python/extractor/tests/parser/alternating.py @@ -0,0 +1 @@ +(0, [1, (2, [3, (4, [5, 6])])]) diff --git a/python/extractor/tests/parser/assignment.py b/python/extractor/tests/parser/assignment.py new file mode 100644 index 00000000000..c47eec4dd0d --- /dev/null +++ b/python/extractor/tests/parser/assignment.py @@ -0,0 +1,17 @@ + +#foo[bar].baz[(quux := 5)] = 5 +foo = 5 + +baz, quux = 1, 2 + +blah : int = 5 + +just_the_type : float + +x, y = z, w = 3, 4 + +(a, (b, (c, (d, e)))) = (j, (k, (l, (m, n)))) + +s, *t = u + +o,p, = q,r, diff --git a/python/extractor/tests/parser/call.py b/python/extractor/tests/parser/call.py new file mode 100644 index 00000000000..efd14a8c422 --- /dev/null +++ b/python/extractor/tests/parser/call.py @@ -0,0 +1,11 @@ +foo(x,y,z=1,w=2) + +bar()()() + +baz(2+2, kw = 3*4) + +a(*b, **c) + +d(e,) + +f(g.h[i]) diff --git a/python/extractor/tests/parser/class.py b/python/extractor/tests/parser/class.py new file mode 100644 index 00000000000..d1d4694fb3f --- /dev/null +++ b/python/extractor/tests/parser/class.py @@ -0,0 +1,2 @@ +class Foo(int, object, metaclass=type): + x = 5 diff --git a/python/extractor/tests/parser/collections.py b/python/extractor/tests/parser/collections.py new file mode 100644 index 00000000000..4e570fd0adc --- /dev/null +++ b/python/extractor/tests/parser/collections.py @@ -0,0 +1,37 @@ +() + +[] + +{} + +[1,2,3] + +(4,5,6) + +{7: 8, 9: 10, 11: 12} + +{13, 14, 15} + +a = {x:y} + +b = {z:w, **a} + +c = [k,l,*m] + +(o,) + +(p,q,r,) + +s, + +t, u, + +(#comment + v, w +#comment +) + +(#comment + x, y, +#comment +) diff --git a/python/extractor/tests/parser/comment-in-args.py b/python/extractor/tests/parser/comment-in-args.py new file mode 100644 index 00000000000..d5e4400d02e --- /dev/null +++ b/python/extractor/tests/parser/comment-in-args.py @@ -0,0 +1,15 @@ +""" +At the time this test was added, when either comment 2 or comment 3 was present, this +would cause the TSG parser to have an error. +""" + +# comment 0 +print( + # comment 1 + ( + # comment 2 + 1 + # comment 3 +) +# comment 4 +) diff --git a/python/extractor/tests/parser/comprehensions.py b/python/extractor/tests/parser/comprehensions.py new file mode 100644 index 00000000000..52de5828467 --- /dev/null +++ b/python/extractor/tests/parser/comprehensions.py @@ -0,0 +1,57 @@ +(a + for b in c + if d + if e + for f in g + if h + if i +) + +(a1 for b1 in c1) + +(a2 for b2 in c2 if d2) + +[k + for l in m + if n + if o + for p in q + if r + if s +] + +[k1 for l1 in m1] + +[k2 for l2 in m2 if n2] + +{p + for q in r + if s + if t + for u in v + if w + if x +} + +{p1 for q1 in r1} + +{p2 for q2 in r2 if s2} + + +{k3: v3 + for l3 in m3 + if n3 + if o3 + for p3 in q3 + if r3 + if s3 +} + +{k4: v4 for l4 in m4} + +{k5: v5 for l5 in m5 if n5} + +# Special case for generator expressions inside calls +t = tuple(x for y in z) + +[( t, ) for v in w] diff --git a/python/extractor/tests/parser/empty.py b/python/extractor/tests/parser/empty.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/parser/exception_groups_new.expected b/python/extractor/tests/parser/exception_groups_new.expected new file mode 100644 index 00000000000..1d2de92755f --- /dev/null +++ b/python/extractor/tests/parser/exception_groups_new.expected @@ -0,0 +1,136 @@ +Module: [1, 0] - [22, 0] + body: [ + Try: [1, 0] - [1, 4] + body: [ + Expr: [2, 4] - [2, 5] + value: + Name: [2, 4] - [2, 5] + variable: Variable('a', None) + ctx: Load + Expr: [3, 4] - [3, 5] + value: + Name: [3, 4] - [3, 5] + variable: Variable('b', None) + ctx: Load + ] + orelse: [ + Expr: [17, 4] - [17, 5] + value: + Name: [17, 4] - [17, 5] + variable: Variable('s', None) + ctx: Load + Expr: [18, 4] - [18, 5] + value: + Name: [18, 4] - [18, 5] + variable: Variable('t', None) + ctx: Load + ] + handlers: [ + ExceptGroupStmt: [4, 0] - [6, 5] + type: + Name: [4, 8] - [4, 9] + variable: Variable('c', None) + ctx: Load + name: None + body: [ + Expr: [5, 4] - [5, 5] + value: + Name: [5, 4] - [5, 5] + variable: Variable('d', None) + ctx: Load + Expr: [6, 4] - [6, 5] + value: + Name: [6, 4] - [6, 5] + variable: Variable('e', None) + ctx: Load + ] + ExceptGroupStmt: [7, 0] - [9, 5] + type: + Name: [7, 8] - [7, 9] + variable: Variable('f', None) + ctx: Load + name: + Name: [7, 13] - [7, 14] + variable: Variable('g', None) + ctx: Store + body: [ + Expr: [8, 4] - [8, 5] + value: + Name: [8, 4] - [8, 5] + variable: Variable('h', None) + ctx: Load + Expr: [9, 4] - [9, 5] + value: + Name: [9, 4] - [9, 5] + variable: Variable('i', None) + ctx: Load + ] + ExceptGroupStmt: [10, 0] - [12, 5] + type: + Tuple: [10, 9] - [10, 13] + elts: [ + Name: [10, 9] - [10, 10] + variable: Variable('j', None) + ctx: Load + Name: [10, 12] - [10, 13] + variable: Variable('k', None) + ctx: Load + ] + ctx: Load + parenthesised: True + name: None + body: [ + Expr: [11, 4] - [11, 5] + value: + Name: [11, 4] - [11, 5] + variable: Variable('l', None) + ctx: Load + Expr: [12, 4] - [12, 5] + value: + Name: [12, 4] - [12, 5] + variable: Variable('m', None) + ctx: Load + ] + ExceptGroupStmt: [13, 0] - [15, 5] + type: + Tuple: [13, 9] - [13, 13] + elts: [ + Name: [13, 9] - [13, 10] + variable: Variable('n', None) + ctx: Load + Name: [13, 12] - [13, 13] + variable: Variable('o', None) + ctx: Load + ] + ctx: Load + parenthesised: True + name: + Name: [13, 18] - [13, 19] + variable: Variable('p', None) + ctx: Store + body: [ + Expr: [14, 4] - [14, 5] + value: + Name: [14, 4] - [14, 5] + variable: Variable('q', None) + ctx: Load + Expr: [15, 4] - [15, 5] + value: + Name: [15, 4] - [15, 5] + variable: Variable('r', None) + ctx: Load + ] + ] + finalbody: [ + Expr: [20, 4] - [20, 5] + value: + Name: [20, 4] - [20, 5] + variable: Variable('u', None) + ctx: Load + Expr: [21, 4] - [21, 5] + value: + Name: [21, 4] - [21, 5] + variable: Variable('v', None) + ctx: Load + ] + ] diff --git a/python/extractor/tests/parser/exception_groups_new.py b/python/extractor/tests/parser/exception_groups_new.py new file mode 100644 index 00000000000..f24e3b00f4e --- /dev/null +++ b/python/extractor/tests/parser/exception_groups_new.py @@ -0,0 +1,21 @@ +try: + a + b +except* c: + d + e +except* f as g: + h + i +except* (j, k): + l + m +except* (n, o) as p: + q + r +else: + s + t +finally: + u + v diff --git a/python/extractor/tests/parser/exceptions.py b/python/extractor/tests/parser/exceptions.py new file mode 100644 index 00000000000..fe1ca679e6a --- /dev/null +++ b/python/extractor/tests/parser/exceptions.py @@ -0,0 +1,18 @@ +try: + a + b +except c as d: + e + f +except g: + h + i +except: + j + k +else: + l + m +finally: + n + o diff --git a/python/extractor/tests/parser/expressions.py b/python/extractor/tests/parser/expressions.py new file mode 100644 index 00000000000..67f53351265 --- /dev/null +++ b/python/extractor/tests/parser/expressions.py @@ -0,0 +1,14 @@ +1 + +2 + 3 + +4 * 5 / 6 + +(7 + 8) * 9 + +(10, 11) +( 12, 13 ) + +14 , 15 + +(match := 16) diff --git a/python/extractor/tests/parser/for.py b/python/extractor/tests/parser/for.py new file mode 100644 index 00000000000..ccd3f9209cd --- /dev/null +++ b/python/extractor/tests/parser/for.py @@ -0,0 +1,15 @@ +async for x in y: + if z: continue + if w: break +else: + v + +for ham in eggs: + spam + +for (a,b) in c: + pass + +for d, *e in f: + pass + diff --git a/python/extractor/tests/parser/functions.py b/python/extractor/tests/parser/functions.py new file mode 100644 index 00000000000..126c952917e --- /dev/null +++ b/python/extractor/tests/parser/functions.py @@ -0,0 +1,58 @@ +def a(b): pass +def c(*d): pass + +def foo(a, b, c=d, e:f, g:h=i, *j) -> t: + x + y + +def foo(l): + pass + +def bar(*k): + x1 + y1 + +def bar(*k, l, m:n, o:p=q, r=s, **u): + x1 + y1 + +def klef(*): pass + +def main(): pass + +@dec1(a,b) +@dec2(c,d) +def func(e,f,g): + h + i + + +lambda: a + +lambda b: c + +lambda d, *e: f + +lambda *g, h: i + +lambda j=k: l + +lambda *m: n + +lambda **o: p + +lambda *p, q=r: s + +def typed_dictionary_splat(**kw : KEYWORD): + pass +def typed_list_splat(*args : ARGS): + pass + +@False or True +def decorated(): pass + +def all_separators(pos_only, /, pos_or_keyword, *, keyword_only): pass + +@decorator #comment +def decorated_with_comment(): + pass diff --git a/python/extractor/tests/parser/if.py b/python/extractor/tests/parser/if.py new file mode 100644 index 00000000000..8cd53c19e67 --- /dev/null +++ b/python/extractor/tests/parser/if.py @@ -0,0 +1,11 @@ +if x: do_x +elif y: do_y +elif z: do_z +else: do_else + +if a and b: + c +# comment +elif d or e: + f + diff --git a/python/extractor/tests/parser/just_comments.py b/python/extractor/tests/parser/just_comments.py new file mode 100644 index 00000000000..4a6128a7a82 --- /dev/null +++ b/python/extractor/tests/parser/just_comments.py @@ -0,0 +1,8 @@ +# This is a comment +# it goes on for many lines... +# (Well, okay. Three lines.) + +# Here's one that's separated with some whitespace. + +# More whitespace at the end. + diff --git a/python/extractor/tests/parser/just_newlines.py b/python/extractor/tests/parser/just_newlines.py new file mode 100644 index 00000000000..b28b04f6431 --- /dev/null +++ b/python/extractor/tests/parser/just_newlines.py @@ -0,0 +1,3 @@ + + + diff --git a/python/extractor/tests/parser/match_new.expected b/python/extractor/tests/parser/match_new.expected new file mode 100644 index 00000000000..b71bda010ba --- /dev/null +++ b/python/extractor/tests/parser/match_new.expected @@ -0,0 +1,382 @@ +Module: [1, 0] - [43, 0] + body: [ + Match: [1, 0] - [3, 19] + subject: + List: [1, 6] - [1, 11] + elts: [ + Num: [1, 7] - [1, 8] + n: 1 + text: '1' + Num: [1, 9] - [1, 10] + n: 2 + text: '2' + ] + ctx: Load + cases: [ + Case: [2, 4] - [3, 19] + pattern: + MatchSequencePattern: [2, 9] - [2, 15] + patterns: [ + MatchCapturePattern: [2, 10] - [2, 11] + variable: + Name: [2, 10] - [2, 11] + variable: Variable('a', None) + ctx: Store + MatchCapturePattern: [2, 13] - [2, 14] + variable: + Name: [2, 13] - [2, 14] + variable: Variable('b', None) + ctx: Store + ] + guard: None + body: [ + Expr: [3, 8] - [3, 19] + value: + Call: [3, 8] - [3, 19] + func: + Name: [3, 8] - [3, 13] + variable: Variable('print', None) + ctx: Load + positional_args: [ + Name: [3, 14] - [3, 15] + variable: Variable('b', None) + ctx: Load + Name: [3, 17] - [3, 18] + variable: Variable('a', None) + ctx: Load + ] + named_args: [] + ] + ] + Match: [5, 0] - [15, 12] + subject: + BinOp: [5, 6] - [5, 10] + left: + Num: [5, 6] - [5, 7] + n: 1 + text: '1' + op: Add + right: + Num: [5, 8] - [5, 10] + n: 2j + text: '2j' + cases: [ + Case: [6, 4] - [7, 12] + pattern: + MatchLiteralPattern: [6, 9] - [6, 13] + literal: + BinOp: [6, 9] - [6, 13] + left: + Num: [6, 9] - [6, 10] + n: 1 + text: '1' + op: Add + right: + Num: [6, 11] - [6, 13] + n: 2j + text: '2j' + guard: None + body: [ + Pass: [7, 8] - [7, 12] + ] + Case: [8, 4] - [9, 12] + pattern: + MatchLiteralPattern: [8, 9] - [8, 18] + literal: + BinOp: [8, 9] - [8, 18] + left: + UnaryOp: [8, 10] - [8, 11] + op: USub + operand: + Num: [8, 10] - [8, 11] + n: 1 + text: '1' + op: Sub + right: + Num: [8, 12] - [8, 18] + n: 26000000j + text: '2.6e7j' + guard: None + body: [ + Pass: [9, 8] - [9, 12] + ] + Case: [10, 4] - [11, 12] + pattern: + MatchLiteralPattern: [10, 9] - [10, 11] + literal: + UnaryOp: [10, 10] - [10, 11] + op: USub + operand: + Num: [10, 10] - [10, 11] + n: 1 + text: '1' + guard: None + body: [ + Pass: [11, 8] - [11, 12] + ] + Case: [12, 4] - [13, 12] + pattern: + MatchLiteralPattern: [12, 9] - [12, 10] + literal: + Num: [12, 9] - [12, 10] + n: 2 + text: '2' + guard: None + body: [ + Pass: [13, 8] - [13, 12] + ] + Case: [14, 4] - [15, 12] + pattern: + MatchLiteralPattern: [14, 9] - [14, 16] + literal: + BinOp: [14, 9] - [14, 16] + left: + UnaryOp: [14, 10] - [14, 13] + op: USub + operand: + Num: [14, 10] - [14, 13] + n: 1.5 + text: '1.5' + op: Add + right: + Num: [14, 14] - [14, 16] + n: 5j + text: '5j' + guard: None + body: [ + Pass: [15, 8] - [15, 12] + ] + ] + Assign: [17, 0] - [17, 20] + targets: [ + Name: [17, 4] - [17, 17] + variable: Variable('soft_keywords', None) + ctx: Store + ] + value: + FunctionExpr: [17, 0] - [17, 20] + name: 'soft_keywords' + args: + arguments + defaults: [] + kw_defaults: [] + annotations: [] + varargannotation: None + kwargannotation: None + kw_annotations: [] + returns: None + inner_scope: + Function: [17, 0] - [17, 20] + name: 'soft_keywords' + type_parameters: [] + args: [] + vararg: None + kwonlyargs: [] + kwarg: None + body: [ + Assign: [18, 4] - [18, 13] + targets: [ + Name: [18, 4] - [18, 9] + variable: Variable('match', None) + ctx: Store + ] + value: + Num: [18, 12] - [18, 13] + n: 0 + text: '0' + Assign: [19, 4] - [19, 12] + targets: [ + Name: [19, 4] - [19, 8] + variable: Variable('case', None) + ctx: Store + ] + value: + Num: [19, 11] - [19, 12] + n: 0 + text: '0' + Match: [20, 4] - [22, 17] + subject: + Name: [20, 10] - [20, 15] + variable: Variable('match', None) + ctx: Load + cases: [ + Case: [21, 8] - [22, 17] + pattern: + MatchCapturePattern: [21, 13] - [21, 17] + variable: + Name: [21, 13] - [21, 17] + variable: Variable('case', None) + ctx: Store + guard: None + body: [ + Assign: [22, 12] - [22, 17] + targets: [ + Name: [22, 12] - [22, 13] + variable: Variable('x', None) + ctx: Store + ] + value: + Num: [22, 16] - [22, 17] + n: 0 + text: '0' + ] + ] + ] + Match: [24, 0] - [26, 12] + subject: + Tuple: [24, 7] - [24, 10] + elts: [ + Num: [24, 7] - [24, 8] + n: 0 + text: '0' + Num: [24, 9] - [24, 10] + n: 1 + text: '1' + ] + ctx: Load + parenthesised: True + cases: [ + Case: [25, 4] - [26, 12] + pattern: + MatchSequencePattern: [25, 9] - [25, 12] + patterns: [ + MatchStarPattern: [25, 9] - [25, 11] + target: + MatchCapturePattern: [25, 10] - [25, 11] + variable: + Name: [25, 10] - [25, 11] + variable: Variable('x', None) + ctx: Store + ] + guard: None + body: [ + Pass: [26, 8] - [26, 12] + ] + ] + Match: [28, 0] - [30, 12] + subject: + Tuple: [28, 7] - [28, 10] + elts: [ + Num: [28, 7] - [28, 8] + n: 2 + text: '2' + Num: [28, 9] - [28, 10] + n: 3 + text: '3' + ] + ctx: Load + parenthesised: True + cases: [ + Case: [29, 4] - [30, 12] + pattern: + MatchSequencePattern: [29, 9] - [29, 14] + patterns: [ + MatchStarPattern: [29, 10] - [29, 12] + target: + MatchCapturePattern: [29, 11] - [29, 12] + variable: + Name: [29, 11] - [29, 12] + variable: Variable('x', None) + ctx: Store + ] + guard: None + body: [ + Pass: [30, 8] - [30, 12] + ] + ] + Match: [32, 0] - [34, 13] + subject: + Tuple: [32, 6] - [32, 10] + elts: [ + Name: [32, 6] - [32, 7] + variable: Variable('w', None) + ctx: Load + Name: [32, 9] - [32, 10] + variable: Variable('x', None) + ctx: Load + ] + ctx: Load + parenthesised: True + cases: [ + Case: [33, 4] - [34, 13] + pattern: + MatchSequencePattern: [33, 9] - [33, 13] + patterns: [ + MatchCapturePattern: [33, 9] - [33, 10] + variable: + Name: [33, 9] - [33, 10] + variable: Variable('y', None) + ctx: Store + MatchCapturePattern: [33, 12] - [33, 13] + variable: + Name: [33, 12] - [33, 13] + variable: Variable('z', None) + ctx: Store + ] + guard: None + body: [ + Assign: [34, 8] - [34, 13] + targets: [ + Name: [34, 8] - [34, 9] + variable: Variable('v', None) + ctx: Store + ] + value: + Num: [34, 12] - [34, 13] + n: 0 + text: '0' + ] + ] + Match: [36, 0] - [38, 12] + subject: + Tuple: [36, 6] - [36, 10] + elts: [ + Name: [36, 6] - [36, 7] + variable: Variable('x', None) + ctx: Load + Name: [36, 9] - [36, 10] + variable: Variable('y', None) + ctx: Load + ] + ctx: Load + parenthesised: True + cases: [ + Case: [37, 4] - [38, 12] + pattern: + MatchSequencePattern: [37, 9] - [37, 13] + patterns: [ + MatchLiteralPattern: [37, 9] - [37, 10] + literal: + Num: [37, 9] - [37, 10] + n: 1 + text: '1' + MatchLiteralPattern: [37, 12] - [37, 13] + literal: + Num: [37, 12] - [37, 13] + n: 2 + text: '2' + ] + guard: None + body: [ + Pass: [38, 8] - [38, 12] + ] + ] + Match: [40, 0] - [42, 12] + subject: + Name: [40, 6] - [40, 7] + variable: Variable('z', None) + ctx: Load + cases: [ + Case: [41, 4] - [42, 12] + pattern: + MatchCapturePattern: [41, 9] - [41, 10] + variable: + Name: [41, 9] - [41, 10] + variable: Variable('w', None) + ctx: Store + guard: None + body: [ + Pass: [42, 8] - [42, 12] + ] + ] + ] diff --git a/python/extractor/tests/parser/match_new.py b/python/extractor/tests/parser/match_new.py new file mode 100644 index 00000000000..99a06de5b08 --- /dev/null +++ b/python/extractor/tests/parser/match_new.py @@ -0,0 +1,42 @@ +match [1,2]: + case (a, b): + print(b, a) + +match 1+2j: + case 1+2j: + pass + case -1-2.6e7j: + pass + case -1: + pass + case 2: + pass + case -1.5+5j: + pass + +def soft_keywords(): + match = 0 + case = 0 + match match: + case case: + x = 0 + +match (0,1): + case *x,: + pass + +match (2,3): + case (*x,): + pass + +match w, x: + case y, z: + v = 0 + +match x, y: + case 1, 2: + pass + +match z: + case w: + pass diff --git a/python/extractor/tests/parser/misc.py b/python/extractor/tests/parser/misc.py new file mode 100644 index 00000000000..90f60025468 --- /dev/null +++ b/python/extractor/tests/parser/misc.py @@ -0,0 +1,15 @@ +... + +a = (b := c) + +d = e if f else g + +h1[h2] = h3[h4] + +i[i1:i2] + +j[j1:j2:j3] + +k.l = m.n + +o[p,q] diff --git a/python/extractor/tests/parser/numbers.py b/python/extractor/tests/parser/numbers.py new file mode 100644 index 00000000000..ce0027ea2e8 --- /dev/null +++ b/python/extractor/tests/parser/numbers.py @@ -0,0 +1,12 @@ +1 + +2.0 + +3j + +0x4 + +0o5 + +0b110 + diff --git a/python/extractor/tests/parser/operators.py b/python/extractor/tests/parser/operators.py new file mode 100644 index 00000000000..b2b8b2ef328 --- /dev/null +++ b/python/extractor/tests/parser/operators.py @@ -0,0 +1,54 @@ +1 and 2 + +3 or 4 + +5 == 6 + +7 > 8 + +9 >= 10 + +11 in 12 + +13 is 14 + +15 is not 16 + +17 < 18 + +19 <= 20 + +21 != 22 + +23 <> 24 + +25 not in 26 + +27 > 28 >= 29 < 30 <= 31 == 32 != 33 <> 34 + ++35 + +-36 + +~37 + +not 38 + +# or(not(a), b) +not a or b + +# and(c, d, e, f, g) +c and d and e and f and g + +# or(h, i, j, k, l) +h or i or j or k or l + +# or(and(m, n), and(o, p)) +m and n or o and p + +# or(q, and(s, t), u) +q or s and t or u + +a1 or b1 and c1 + +d1 and e1 or f1 diff --git a/python/extractor/tests/parser/simple_statements.py b/python/extractor/tests/parser/simple_statements.py new file mode 100644 index 00000000000..a9d6a845546 --- /dev/null +++ b/python/extractor/tests/parser/simple_statements.py @@ -0,0 +1,70 @@ +# Statements that do not contain any other statements. + +pass + +a = b + +c : int = 1 + +d += e + +del f + +del f1, f2 + +global h + +global h1, h2 + +nonlocal i + +nonlocal i1, i2 + +import j + +import j1, j2 + +import j3.j4.j5, j6.j7.j8 as j9 + +import j10.j11 as j12 + +from k import l + +from ..k1.k2 import l1 as l2, l3 + +from __future__ import print_function, goto_statement + +from . import l4 + +from l5 import * + +from ..l6 import * +from ... import * + +raise + +raise m + +raise m1 from m2 + +raise m3, m4 + +raise m5, m6, m7 + +assert n + +assert n1, n2 + +return o + +return *o1, + +return 1, *o2 + +return 2, *o3, + +yield p + +yield from q + +await r diff --git a/python/extractor/tests/parser/simple_statements_py2.py b/python/extractor/tests/parser/simple_statements_py2.py new file mode 100644 index 00000000000..33f16dddbd6 --- /dev/null +++ b/python/extractor/tests/parser/simple_statements_py2.py @@ -0,0 +1,8 @@ + +exec "ls" + +print "Hello" + +print "two parts", "no newline", + +print >> f, "World" diff --git a/python/extractor/tests/parser/strings.py b/python/extractor/tests/parser/strings.py new file mode 100644 index 00000000000..8d465d25752 --- /dev/null +++ b/python/extractor/tests/parser/strings.py @@ -0,0 +1,79 @@ +if 1: + "double quotes" +if 2: + 'single quotes' +if 3: + """triple double quotes (sextuple quotes?)""" +if 4: + '''triple single quotes''' +if 5: + r"raw string" +if 6: + b"byte string" +if 7: + u"unicode string" +if 8: + br"raw byte string" +if 9: + "Let's put some control\tcharacters in here\n" +if 10: + """ + Multiline + string + time + """ +if 11: + "escaped \"quotes\" here" +if 12: + """Unescaped "quotes" inside triple quotes""" +if 13: + "string" """concatenation""" 'here' '''oh yeah''' +if 14: + f"format string with no funny business" +if 15: + f"format string with {1} interpolation" +if 16: + f"{2}{3}{4}" +if 17: + f"and a format string with {'nested'} string" +if 18: + f"foo{x}bar" "regular string" +if 19: + pass + # This doesn't quite give the right result, but it's close enough. + #f"no interpolation" ' but still implicit concatenation' +if 20: + f"{9}" "blah" f'{10}' +if 21: + f"format{129}string" "not format" +if 21.1: + # regression from https://github.com/github/codeql/issues/9940 + f"format{123}string" f"technically format string\n" +if 22: + "again not format" f"format again{foo}hello" +if 23: + f"""f-string with {"inner " 'implicit ' '''concatenation'''} how awful""" +if 24: + f'''oh no python { f'why do you {"allow"} such'} absolute horrors?''' +if 25: + b"""5""" b"byte format" +if 26: + r'X(\u0061|a)*Y' +if 27: + f"""triple-quoted {11}""f-st""" fr"""ri'''ng\\\\\""{12} with an inner quoted part""" +if 28: + f'{value:{width + padding!r}.{precision}}' +if 29: + f'{1,}' +if 30: + fr"""quotes before interpolation "{123}" are okay.""" +if 31: + fr"""backslash before an interpolation \{456}\ are okay.""" +if 32: + f'' +if 33: + '' +if 34: + b'\xc5\xe5' +if 35: + f"{x=}" diff --git a/python/extractor/tests/parser/strings_3.12_new.expected b/python/extractor/tests/parser/strings_3.12_new.expected new file mode 100644 index 00000000000..835fe157f52 --- /dev/null +++ b/python/extractor/tests/parser/strings_3.12_new.expected @@ -0,0 +1,305 @@ +Module: [2, 0] - [22, 0] + body: [ + Assign: [2, 0] - [2, 60] + targets: [ + Name: [2, 0] - [2, 5] + variable: Variable('songs', None) + ctx: Store + ] + value: + List: [2, 8] - [2, 60] + elts: [ + Str: [2, 9] - [2, 31] + s: 'Take me back to Eden' + prefix: "'" + implicitly_concatenated_parts: None + Str: [2, 33] - [2, 43] + s: 'Alkaline' + prefix: "'" + implicitly_concatenated_parts: None + Str: [2, 45] - [2, 59] + s: 'Ascensionism' + prefix: "'" + implicitly_concatenated_parts: None + ] + ctx: Load + Expr: [3, 0] - [3, 43] + value: + JoinedStr: [3, 0] - [3, 43] + values: [ + Str: [3, 0] - [3, 25] + s: 'This is the playlist: ' + prefix: 'f"' + implicitly_concatenated_parts: None + Call: [3, 25] - [3, 41] + func: + Attribute: [3, 25] - [3, 34] + value: + Str: [3, 25] - [3, 29] + s: ', ' + prefix: '"' + implicitly_concatenated_parts: None + attr: 'join' + ctx: Load + positional_args: [ + Name: [3, 35] - [3, 40] + variable: Variable('songs', None) + ctx: Load + ] + named_args: [] + Str: [3, 41] - [3, 43] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Expr: [6, 0] - [6, 31] + value: + JoinedStr: [6, 0] - [6, 31] + values: [ + Str: [6, 0] - [6, 5] + s: '' + prefix: 'f"""' + implicitly_concatenated_parts: None + JoinedStr: [6, 5] - [6, 27] + values: [ + Str: [6, 5] - [6, 10] + s: '' + prefix: "f'''" + implicitly_concatenated_parts: None + JoinedStr: [6, 10] - [6, 23] + values: [ + Str: [6, 10] - [6, 13] + s: '' + prefix: "f'" + implicitly_concatenated_parts: None + JoinedStr: [6, 13] - [6, 21] + values: [ + Str: [6, 13] - [6, 16] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + BinOp: [6, 16] - [6, 19] + left: + Num: [6, 16] - [6, 17] + n: 1 + text: '1' + op: Add + right: + Num: [6, 18] - [6, 19] + n: 1 + text: '1' + Str: [6, 19] - [6, 21] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [6, 21] - [6, 23] + s: '' + prefix: "f'" + implicitly_concatenated_parts: None + ] + Str: [6, 23] - [6, 27] + s: '' + prefix: "f'''" + implicitly_concatenated_parts: None + ] + Str: [6, 27] - [6, 31] + s: '' + prefix: 'f"""' + implicitly_concatenated_parts: None + ] + Expr: [9, 0] - [9, 33] + value: + JoinedStr: [9, 0] - [9, 33] + values: [ + Str: [9, 0] - [9, 3] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + JoinedStr: [9, 3] - [9, 31] + values: [ + Str: [9, 3] - [9, 6] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + JoinedStr: [9, 6] - [9, 29] + values: [ + Str: [9, 6] - [9, 9] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + JoinedStr: [9, 9] - [9, 27] + values: [ + Str: [9, 9] - [9, 12] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + JoinedStr: [9, 12] - [9, 25] + values: [ + Str: [9, 12] - [9, 15] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + JoinedStr: [9, 15] - [9, 23] + values: [ + Str: [9, 15] - [9, 18] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + BinOp: [9, 18] - [9, 21] + left: + Num: [9, 18] - [9, 19] + n: 1 + text: '1' + op: Add + right: + Num: [9, 20] - [9, 21] + n: 1 + text: '1' + Str: [9, 21] - [9, 23] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [9, 23] - [9, 25] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [9, 25] - [9, 27] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [9, 27] - [9, 29] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [9, 29] - [9, 31] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [9, 31] - [9, 33] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Expr: [12, 0] - [16, 4] + value: + JoinedStr: [12, 0] - [16, 4] + values: [ + Str: [12, 0] - [12, 25] + s: 'This is the playlist: ' + prefix: 'f"' + implicitly_concatenated_parts: None + Call: [12, 25] - [16, 2] + func: + Attribute: [12, 25] - [12, 34] + value: + Str: [12, 25] - [12, 29] + s: ', ' + prefix: '"' + implicitly_concatenated_parts: None + attr: 'join' + ctx: Load + positional_args: [ + List: [12, 35] - [16, 1] + elts: [ + Str: [13, 4] - [13, 26] + s: 'Take me back to Eden' + prefix: "'" + implicitly_concatenated_parts: None + Str: [14, 4] - [14, 14] + s: 'Alkaline' + prefix: "'" + implicitly_concatenated_parts: None + Str: [15, 4] - [15, 18] + s: 'Ascensionism' + prefix: "'" + implicitly_concatenated_parts: None + ] + ctx: Load + ] + named_args: [] + Str: [16, 2] - [16, 4] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Expr: [19, 0] - [19, 50] + value: + Call: [19, 0] - [19, 50] + func: + Name: [19, 0] - [19, 5] + variable: Variable('print', None) + ctx: Load + positional_args: [ + JoinedStr: [19, 6] - [19, 49] + values: [ + Str: [19, 6] - [19, 31] + s: 'This is the playlist: ' + prefix: 'f"' + implicitly_concatenated_parts: None + Call: [19, 31] - [19, 47] + func: + Attribute: [19, 31] - [19, 40] + value: + Str: [19, 31] - [19, 35] + s: '\n' + prefix: '"' + implicitly_concatenated_parts: None + attr: 'join' + ctx: Load + positional_args: [ + Name: [19, 41] - [19, 46] + variable: Variable('songs', None) + ctx: Load + ] + named_args: [] + Str: [19, 47] - [19, 49] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + ] + named_args: [] + Expr: [21, 0] - [21, 68] + value: + Call: [21, 0] - [21, 68] + func: + Name: [21, 0] - [21, 5] + variable: Variable('print', None) + ctx: Load + positional_args: [ + JoinedStr: [21, 6] - [21, 67] + values: [ + Str: [21, 6] - [21, 31] + s: 'This is the playlist: ' + prefix: 'f"' + implicitly_concatenated_parts: None + Call: [21, 31] - [21, 65] + func: + Attribute: [21, 31] - [21, 58] + value: + Str: [21, 31] - [21, 53] + s: '♥' + prefix: '"' + implicitly_concatenated_parts: None + attr: 'join' + ctx: Load + positional_args: [ + Name: [21, 59] - [21, 64] + variable: Variable('songs', None) + ctx: Load + ] + named_args: [] + Str: [21, 65] - [21, 67] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + ] + named_args: [] + ] diff --git a/python/extractor/tests/parser/strings_3.12_new.py b/python/extractor/tests/parser/strings_3.12_new.py new file mode 100644 index 00000000000..dda25362bcb --- /dev/null +++ b/python/extractor/tests/parser/strings_3.12_new.py @@ -0,0 +1,21 @@ +# An expression containing the same kind of quotes as the outer f-string +songs = ['Take me back to Eden', 'Alkaline', 'Ascensionism'] +f"This is the playlist: {", ".join(songs)}" + +# An example of the previously maximal level of nesting +f"""{f'''{f'{f"{1+1}"}'}'''}""" + +# An example of the new, unlimited level of nesting +f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}" + +# An f-string with newlines inside the expression part +f"This is the playlist: {", ".join([ + 'Take me back to Eden', # My, my, those eyes like fire + 'Alkaline', # Not acid nor alkaline + 'Ascensionism' # Take to the broken skies at last +])}" + +# Two instances of string escaping used inside the expression part +print(f"This is the playlist: {"\n".join(songs)}") + +print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}") diff --git a/python/extractor/tests/parser/strings_new.expected b/python/extractor/tests/parser/strings_new.expected new file mode 100644 index 00000000000..7d1f2c647db --- /dev/null +++ b/python/extractor/tests/parser/strings_new.expected @@ -0,0 +1,265 @@ +Module: [1, 0] - [31, 0] + body: [ + If: [1, 0] - [1, 5] + test: + Num: [1, 3] - [1, 4] + n: 1 + text: '1' + body: [ + Expr: [2, 4] - [2, 72] + value: + JoinedStr: [2, 4] - [2, 72] + values: [ + Str: [2, 4] - [2, 61] + s: 'this is not a unicode escape but an interpolation: \\N' + prefix: 'fr"' + implicitly_concatenated_parts: None + Name: [2, 61] - [2, 70] + variable: Variable('AMPERSAND', None) + ctx: Load + Str: [2, 70] - [2, 72] + s: '' + prefix: 'fr"' + implicitly_concatenated_parts: None + ] + ] + orelse: None + If: [3, 0] - [3, 5] + test: + Num: [3, 3] - [3, 4] + n: 2 + text: '2' + body: [ + Expr: [4, 4] - [4, 44] + value: + JoinedStr: [4, 4] - [4, 44] + values: [ + Str: [4, 4] - [4, 33] + s: 'also an interpolation: \\N' + prefix: "f'" + implicitly_concatenated_parts: None + Name: [4, 33] - [4, 42] + variable: Variable('AMPERSAND', None) + ctx: Load + Str: [4, 42] - [4, 44] + s: '' + prefix: "f'" + implicitly_concatenated_parts: None + ] + ] + orelse: None + If: [5, 0] - [5, 5] + test: + Num: [5, 3] - [5, 4] + n: 3 + text: '3' + body: [ + Expr: [6, 4] - [6, 14] + value: + Str: [6, 4] - [6, 14] + s: '\\Nspam' + prefix: "f'" + implicitly_concatenated_parts: None + ] + orelse: None + If: [7, 0] - [7, 5] + test: + Num: [7, 3] - [7, 4] + n: 4 + text: '4' + body: [ + Expr: [8, 4] - [8, 46] + value: + Str: [8, 4] - [8, 46] + s: 'this is a unicode escape: &' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + orelse: None + If: [9, 0] - [9, 5] + test: + Num: [9, 3] - [9, 4] + n: 5 + text: '5' + body: [ + Expr: [10, 4] - [10, 55] + value: + Str: [10, 4] - [10, 55] + s: 'this is also not a unicode escape: \\N{AMPERSAND}' + prefix: 'r"' + implicitly_concatenated_parts: None + ] + orelse: None + If: [11, 0] - [11, 5] + test: + Num: [11, 3] - [11, 4] + n: 6 + text: '6' + body: [ + Expr: [12, 4] - [12, 20] + value: + Str: [12, 4] - [12, 20] + s: '\\N{AMPERSAND}' + prefix: "'" + implicitly_concatenated_parts: None + ] + orelse: None + If: [13, 0] - [13, 5] + test: + Num: [13, 3] - [13, 4] + n: 7 + text: '7' + body: [ + Expr: [14, 4] - [14, 13] + value: + Str: [14, 4] - [14, 13] + s: '\\Nspam' + prefix: "'" + implicitly_concatenated_parts: None + ] + orelse: None + If: [15, 0] - [15, 5] + test: + Num: [15, 3] - [15, 4] + n: 8 + text: '8' + body: [ + Expr: [16, 4] - [16, 55] + value: + Str: [16, 4] - [16, 55] + s: 'this is also also a unicode escape: &' + prefix: '"' + implicitly_concatenated_parts: None + ] + orelse: None + If: [17, 0] - [17, 5] + test: + Num: [17, 3] - [17, 4] + n: 9 + text: '9' + body: [ + Expr: [18, 4] - [18, 56] + value: + Str: [18, 4] - [18, 56] + s: 'this is also not a unicode escape: \\N{AMPERSAND}' + prefix: 'rb"' + implicitly_concatenated_parts: None + ] + orelse: None + If: [19, 0] - [19, 6] + test: + Num: [19, 3] - [19, 5] + n: 10 + text: '10' + body: [ + Expr: [20, 4] - [20, 21] + value: + Str: [20, 4] - [20, 21] + s: '\\N{AMPERSAND}' + prefix: "b'" + implicitly_concatenated_parts: None + ] + orelse: None + If: [21, 0] - [21, 6] + test: + Num: [21, 3] - [21, 5] + n: 11 + text: '11' + body: [ + Expr: [22, 4] - [22, 14] + value: + Str: [22, 4] - [22, 14] + s: '\\Nspam' + prefix: "b'" + implicitly_concatenated_parts: None + ] + orelse: None + If: [23, 0] - [23, 6] + test: + Num: [23, 3] - [23, 5] + n: 12 + text: '12' + body: [ + Expr: [24, 4] - [24, 81] + value: + Str: [24, 4] - [24, 81] + s: 'this is not a unicode escape because we are in a bytestring: \\N{AMPERSAND}' + prefix: 'b"' + implicitly_concatenated_parts: None + ] + orelse: None + If: [25, 0] - [25, 6] + test: + Num: [25, 3] - [25, 5] + n: 13 + text: '13' + body: [ + Expr: [26, 4] - [26, 55] + value: + JoinedStr: [26, 4] - [26, 55] + values: [ + Str: [26, 4] - [26, 39] + s: 'quotes before interpolation "' + prefix: 'fr"""' + implicitly_concatenated_parts: None + Num: [26, 39] - [26, 40] + n: 0 + text: '0' + Str: [26, 40] - [26, 55] + s: '" are okay.' + prefix: 'fr"""' + implicitly_concatenated_parts: None + ] + ] + orelse: None + If: [27, 0] - [27, 6] + test: + Num: [27, 3] - [27, 5] + n: 14 + text: '14' + body: [ + Expr: [28, 4] - [28, 61] + value: + JoinedStr: [28, 4] - [28, 61] + values: [ + Str: [28, 4] - [28, 45] + s: 'backslash before an interpolation \\' + prefix: 'fr"""' + implicitly_concatenated_parts: None + Num: [28, 45] - [28, 46] + n: 1 + text: '1' + Str: [28, 46] - [28, 61] + s: '\\ are okay.' + prefix: 'fr"""' + implicitly_concatenated_parts: None + ] + ] + orelse: None + If: [29, 0] - [29, 6] + test: + Num: [29, 3] - [29, 5] + n: 15 + text: '15' + body: [ + Expr: [30, 4] - [30, 54] + value: + JoinedStr: [30, 4] - [30, 54] + values: [ + Str: [30, 4] - [30, 33] + s: 'Yield inside an f-string: ' + prefix: 'f"' + implicitly_concatenated_parts: None + Yield: [30, 33] - [30, 40] + value: + Num: [30, 39] - [30, 40] + n: 5 + text: '5' + Str: [30, 40] - [30, 54] + s: ' is allowed.' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + ] + orelse: None + ] diff --git a/python/extractor/tests/parser/strings_new.py b/python/extractor/tests/parser/strings_new.py new file mode 100644 index 00000000000..44302fc8756 --- /dev/null +++ b/python/extractor/tests/parser/strings_new.py @@ -0,0 +1,30 @@ +if 1: + fr"this is not a unicode escape but an interpolation: \N{AMPERSAND}" +if 2: + f'also an interpolation: \\N{AMPERSAND}' +if 3: + f'\\Nspam' +if 4: + f"this is a unicode escape: \N{AMPERSAND}" +if 5: + r"this is also not a unicode escape: \N{AMPERSAND}" +if 6: + '\\N{AMPERSAND}' +if 7: + '\\Nspam' +if 8: + "this is also also a unicode escape: \N{AMPERSAND}" +if 9: + rb"this is also not a unicode escape: \N{AMPERSAND}" +if 10: + b'\\N{AMPERSAND}' +if 11: + b'\\Nspam' +if 12: + b"this is not a unicode escape because we are in a bytestring: \N{AMPERSAND}" +if 13: + fr"""quotes before interpolation "{0}" are okay.""" +if 14: + fr"""backslash before an interpolation \{1}\ are okay.""" +if 15: + f"Yield inside an f-string: {yield 5} is allowed." diff --git a/python/extractor/tests/parser/types_new.expected b/python/extractor/tests/parser/types_new.expected new file mode 100644 index 00000000000..be42268c201 --- /dev/null +++ b/python/extractor/tests/parser/types_new.expected @@ -0,0 +1,142 @@ +Module: [1, 0] - [6, 0] + body: [ + TypeAlias: [1, 0] - [1, 34] + name: + Name: [1, 5] - [1, 6] + variable: Variable('T', None) + ctx: Store + type_parameters: [ + TypeVar: [1, 7] - [1, 9] + name: + Name: [1, 7] - [1, 9] + variable: Variable('T1', None) + ctx: Store + bound: None + TypeVar: [1, 11] - [1, 17] + name: + Name: [1, 11] - [1, 13] + variable: Variable('T2', None) + ctx: Store + bound: + Name: [1, 15] - [1, 17] + variable: Variable('E1', None) + ctx: Load + TypeVarTuple: [1, 19] - [1, 22] + name: + Name: [1, 20] - [1, 22] + variable: Variable('T3', None) + ctx: Store + ParamSpec: [1, 24] - [1, 28] + name: + Name: [1, 26] - [1, 28] + variable: Variable('T4', None) + ctx: Store + ] + value: + Name: [1, 32] - [1, 34] + variable: Variable('T5', None) + ctx: Load + Assign: [3, 0] - [3, 31] + targets: [ + Name: [3, 4] - [3, 5] + variable: Variable('f', None) + ctx: Store + ] + value: + FunctionExpr: [3, 0] - [3, 31] + name: 'f' + args: + arguments + defaults: [] + kw_defaults: [] + annotations: [] + varargannotation: None + kwargannotation: None + kw_annotations: [] + returns: None + inner_scope: + Function: [3, 0] - [3, 31] + name: 'f' + type_parameters: [ + TypeVar: [3, 6] - [3, 8] + name: + Name: [3, 6] - [3, 8] + variable: Variable('T6', None) + ctx: Store + bound: None + TypeVar: [3, 10] - [3, 16] + name: + Name: [3, 10] - [3, 12] + variable: Variable('T7', None) + ctx: Store + bound: + Name: [3, 14] - [3, 16] + variable: Variable('E2', None) + ctx: Load + TypeVarTuple: [3, 18] - [3, 21] + name: + Name: [3, 19] - [3, 21] + variable: Variable('T8', None) + ctx: Store + ParamSpec: [3, 23] - [3, 27] + name: + Name: [3, 25] - [3, 27] + variable: Variable('T9', None) + ctx: Store + ] + args: [] + vararg: None + kwonlyargs: [] + kwarg: None + body: [ + Expr: [3, 32] - [3, 35] + value: + Ellipsis: [3, 32] - [3, 35] + ] + Assign: [5, 0] - [5, 35] + targets: [ + Name: [5, 6] - [5, 7] + variable: Variable('C', None) + ctx: Store + ] + value: + ClassExpr: [5, 0] - [5, 35] + name: 'C' + type_parameters: [ + TypeVar: [5, 8] - [5, 11] + name: + Name: [5, 8] - [5, 11] + variable: Variable('T10', None) + ctx: Store + bound: None + TypeVar: [5, 13] - [5, 20] + name: + Name: [5, 13] - [5, 16] + variable: Variable('T11', None) + ctx: Store + bound: + Name: [5, 18] - [5, 20] + variable: Variable('E3', None) + ctx: Load + TypeVarTuple: [5, 22] - [5, 26] + name: + Name: [5, 23] - [5, 26] + variable: Variable('T12', None) + ctx: Store + ParamSpec: [5, 28] - [5, 33] + name: + Name: [5, 30] - [5, 33] + variable: Variable('T13', None) + ctx: Store + ] + bases: [] + keywords: [] + inner_scope: + Class: [5, 0] - [5, 35] + name: 'C' + body: [ + Expr: [5, 36] - [5, 39] + value: + Ellipsis: [5, 36] - [5, 39] + ] + ] diff --git a/python/extractor/tests/parser/types_new.py b/python/extractor/tests/parser/types_new.py new file mode 100644 index 00000000000..844ba4930ed --- /dev/null +++ b/python/extractor/tests/parser/types_new.py @@ -0,0 +1,5 @@ +type T[T1, T2: E1, *T3, **T4] = T5 + +def f[T6, T7: E2, *T8, **T9](): ... + +class C[T10, T11: E3, *T12, **T13]: ... diff --git a/python/extractor/tests/parser/while.py b/python/extractor/tests/parser/while.py new file mode 100644 index 00000000000..3e622e6f87f --- /dev/null +++ b/python/extractor/tests/parser/while.py @@ -0,0 +1,6 @@ +while a: + b + c +else: + d + e diff --git a/python/extractor/tests/parser/with.py b/python/extractor/tests/parser/with.py new file mode 100644 index 00000000000..25022cbb9f9 --- /dev/null +++ b/python/extractor/tests/parser/with.py @@ -0,0 +1,9 @@ +with a as b: + c + d + +with f as g, h as i: + j + +with k, l: + m diff --git a/python/extractor/tests/project_layout/project-layout b/python/extractor/tests/project_layout/project-layout new file mode 100644 index 00000000000..3adda330ddc --- /dev/null +++ b/python/extractor/tests/project_layout/project-layout @@ -0,0 +1,2 @@ +#/target +**//src diff --git a/python/extractor/tests/project_layout/src/mod1.py b/python/extractor/tests/project_layout/src/mod1.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/source_archive_unchanged/src/no_newline.py b/python/extractor/tests/source_archive_unchanged/src/no_newline.py new file mode 100644 index 00000000000..82129e54245 --- /dev/null +++ b/python/extractor/tests/source_archive_unchanged/src/no_newline.py @@ -0,0 +1 @@ +print("Hello world! This line of code has no newline at the end.") \ No newline at end of file diff --git a/python/extractor/tests/source_archive_unchanged/src/weird_bytes.py b/python/extractor/tests/source_archive_unchanged/src/weird_bytes.py new file mode 100644 index 00000000000..288c4848425 --- /dev/null +++ b/python/extractor/tests/source_archive_unchanged/src/weird_bytes.py @@ -0,0 +1,2 @@ +print("This line of code ends with a non-standard newline:") +print("This string contains weird bytes: aÿb") \ No newline at end of file diff --git a/python/extractor/tests/syntax-error/error.py b/python/extractor/tests/syntax-error/error.py new file mode 100644 index 00000000000..4cd4b017053 --- /dev/null +++ b/python/extractor/tests/syntax-error/error.py @@ -0,0 +1 @@ +This is a syntax error! diff --git a/python/extractor/tests/test_concurrent_cache.py b/python/extractor/tests/test_concurrent_cache.py new file mode 100644 index 00000000000..6ab4b54633d --- /dev/null +++ b/python/extractor/tests/test_concurrent_cache.py @@ -0,0 +1,95 @@ + +import sys +import os.path +import unittest +import multiprocessing + +import semmle +from tests import test_utils +from semmle.util import makedirs + + +ITERATIONS = 100 +CONCURRENCY = 20 + +class ConcurrentCacheTest(test_utils.ExtractorTest): + ''' + Test the cache under heavy concurrent load. + ''' + + def __init__(self, name): + super(ConcurrentCacheTest, self).__init__(name) + self.cachedir = os.path.abspath(os.path.join(self.here, "cache")) + + def setUp(self): + super(ConcurrentCacheTest, self).setUp() + makedirs(self.cachedir) + self.cache = semmle.cache.Cache(self.cachedir) + + def tearDown(self): + super(ConcurrentCacheTest, self).tearDown() + + def _concurrent_read_and_write(self): + readers = [] + writers = [] + queue = multiprocessing.Queue(CONCURRENCY+1) + for i in range(CONCURRENCY): + readers.append(multiprocessing.Process(target=read_func, args=(self.cache, queue))) + writers.append(multiprocessing.Process(target=write_func, args=(self.cache, ITERATIONS//4))) + for read, write in zip(readers, writers): + read.start() + write.start() + for proc in writers: + proc.join() + for proc in readers: + proc.join() + successes = [ queue.get(False) for i in range(CONCURRENCY) ] + self.assertNotIn(None, successes) + # We expect a fairly low success rate here + # But want to assert that at least one read succeeded. + self.assertGreater(sum(successes), 0) + + def _concurrent_read_ok(self): + readers = [] + queue = multiprocessing.Queue(CONCURRENCY+1) + for i in range(CONCURRENCY): + readers.append(multiprocessing.Process(target=read_func, args=(self.cache, queue))) + for proc in readers: + proc.start() + for proc in readers: + proc.join() + successes = [ queue.get(False) for i in range(CONCURRENCY) ] + self.assertNotIn(None, successes) + self.assertEqual(sum(successes), 2*CONCURRENCY*ITERATIONS) + + def test(self): + #Must run this first as it populates the cache + self._concurrent_read_and_write() + #Then this tests that the cache is correctly populated. + self._concurrent_read_ok() + +def key(i): + return "key%d" % i + +def value(i): + return ("value%d\n" % i).encode("utf-8")*10000 + +def read_func(cache, queue): + successes = 0 + for i in range(ITERATIONS): + val = cache.get(key(i)) + if val is not None: + successes += 1 + assert val == value(i) + for i in range(ITERATIONS): + val = cache.get(key(i)) + if val is not None: + successes += 1 + assert val == value(i) + queue.put(successes) + +def write_func(cache, offset): + for i in range(offset, ITERATIONS): + cache.set(key(i), value(i)) + for i in range(offset-1, -1, -1): + cache.set(key(i), value(i)) diff --git a/python/extractor/tests/test_config1/setup.py b/python/extractor/tests/test_config1/setup.py new file mode 100644 index 00000000000..a3ea90ffa15 --- /dev/null +++ b/python/extractor/tests/test_config1/setup.py @@ -0,0 +1,7 @@ + +classifiers = [ + 'License :: OSI Approved :: MIT License', + 'Programming Language :: Java :: 7', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2.7', +] diff --git a/python/extractor/tests/test_config2/setup.py b/python/extractor/tests/test_config2/setup.py new file mode 100644 index 00000000000..984792209c2 --- /dev/null +++ b/python/extractor/tests/test_config2/setup.py @@ -0,0 +1,13 @@ + +classifiers = [ + 'Development Status :: 2 - Pre-Alpha', + 'Environment :: Console', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: POSIX', + 'Programming Language :: Python :: 3.2', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Topic :: Software Development', +] diff --git a/python/extractor/tests/test_dot_py.py b/python/extractor/tests/test_dot_py.py new file mode 100644 index 00000000000..b8f6b4253c8 --- /dev/null +++ b/python/extractor/tests/test_dot_py.py @@ -0,0 +1,18 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class DotPyPathTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(DotPyPathTest, self).__init__(name) + + def test_dot_py(self): + dot_py = os.path.abspath(os.path.join(self.here, "dot-py")) + self.run_extractor("-R", dot_py, "-p", dot_py) + self.check_only_traps_exists_and_clear('__init__', 'a') diff --git a/python/extractor/tests/test_exclude.py b/python/extractor/tests/test_exclude.py new file mode 100644 index 00000000000..2a41d887541 --- /dev/null +++ b/python/extractor/tests/test_exclude.py @@ -0,0 +1,25 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class ExtractorExcludeTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(ExtractorExcludeTest, self).__init__(name) + + def test_simple_exclude(self): + self.run_extractor("-y", "package.sub", "mod1", "package.x", "package.sub.a") + self.check_only_traps_exists_and_clear("mod1", "package/", "x") + + def test_simple_exclude_pattern(self): + self.run_extractor("--exclude-pattern", ".*(a|x)", "mod1", "package.x", "package.sub.a", "package.sub.b") + self.check_only_traps_exists_and_clear("mod1", "b", "package/", "sub/") + + def test_multiple_exclude(self): + self.run_extractor("-y", "package.sub.x", "mod1", "-y", "package.sub.y", "package.sub.a") + self.check_only_traps_exists_and_clear("mod1", "package/", "sub/", "a") diff --git a/python/extractor/tests/test_file.py b/python/extractor/tests/test_file.py new file mode 100644 index 00000000000..3ef043a509b --- /dev/null +++ b/python/extractor/tests/test_file.py @@ -0,0 +1,30 @@ + +import sys +import os.path +import shutil +import unittest +import subprocess + +import semmle.populator +from tests import test_utils + +class FileOptionTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(FileOptionTest, self).__init__(name) + + def test_file(self): + self.run_extractor("-F", "tests/data/mod1.py") + self.check_only_traps_exists_and_clear("mod1") + + def test_no_file(self): + try: + self.run_extractor("-F", "this-file-does-not-exist.py") + except subprocess.CalledProcessError as ex: + self.assertEqual(ex.returncode, 1) + + def test_no_module(self): + try: + self.run_extractor("this_module_does_not_exist") + except subprocess.CalledProcessError as ex: + self.assertEqual(ex.returncode, 1) diff --git a/python/extractor/tests/test_import_restrict.py b/python/extractor/tests/test_import_restrict.py new file mode 100644 index 00000000000..a2010205b53 --- /dev/null +++ b/python/extractor/tests/test_import_restrict.py @@ -0,0 +1,30 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class ExtractorImportRestrictTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(ExtractorImportRestrictTest, self).__init__(name) + self.module_path = os.path.abspath(os.path.join(self.here, "data-imports")) + + def test_import_unrestricted(self): + self.run_extractor("mod1") + self.check_only_traps_exists_and_clear("mod1", "mod2", "mod3", "mod4", "mod5") + + def test_import_unrestricted_2(self): + self.run_extractor("mod2") + self.check_only_traps_exists_and_clear("mod2", "mod3", "mod4", "mod5") + + def test_import_depth(self): + self.run_extractor("--max-import-depth", "1", "mod1") + self.check_only_traps_exists_and_clear("mod1", "mod2") + + def test_import_depth_2(self): + self.run_extractor("--max-import-depth", "2", "mod1") + self.check_only_traps_exists_and_clear("mod1", "mod2", "mod3", "mod4") diff --git a/python/extractor/tests/test_io_error.py b/python/extractor/tests/test_io_error.py new file mode 100644 index 00000000000..6caa16cd381 --- /dev/null +++ b/python/extractor/tests/test_io_error.py @@ -0,0 +1,45 @@ + +import sys +import os.path +import shutil +import unittest +from contextlib import contextmanager + +import semmle.populator +from tests import test_utils +import subprocess +if sys.version_info < (3,0): + from StringIO import StringIO +else: + from io import StringIO + +ALL_ACCESS = int("777", base=8) + + +@contextmanager +def discard_output(): + new_out, new_err = StringIO(), StringIO() + old_out, old_err = sys.stdout, sys.stderr + try: + sys.stdout, sys.stderr = new_out, new_err + yield + finally: + sys.stdout, sys.stderr = old_out, old_err + +class SingleThreadedTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(SingleThreadedTest, self).__init__(name) + + def test_ioerror(self): + if os.name == "nt": + return + try: + os.chmod(self.trap_path, 0) + with discard_output(): + try: + self.run_extractor("-z1", "-y", "package.sub", "mod1", "package.x", "package.sub.a") + except subprocess.CalledProcessError as ex: + self.assertEqual(ex.returncode, 1) + finally: + os.chmod(self.trap_path, ALL_ACCESS) diff --git a/python/extractor/tests/test_lgtm_relative_path.py b/python/extractor/tests/test_lgtm_relative_path.py new file mode 100644 index 00000000000..432c40811cf --- /dev/null +++ b/python/extractor/tests/test_lgtm_relative_path.py @@ -0,0 +1,14 @@ +import os + +from tests import test_utils + +class ExtractorPatternsTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(ExtractorPatternsTest, self).__init__(name) + + def test(self): + src = os.path.join(self.here, "lgtm_src") + with test_utils.environment("LGTM_SRC", src): + self.run_extractor("-R", src, "--filter", "exclude:*.py", "--filter", "include:x.py") + self.check_only_traps_exists_and_clear("x") diff --git a/python/extractor/tests/test_off_path.py b/python/extractor/tests/test_off_path.py new file mode 100644 index 00000000000..ab6a527c74e --- /dev/null +++ b/python/extractor/tests/test_off_path.py @@ -0,0 +1,18 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class ExtractorOffPathTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(ExtractorOffPathTest, self).__init__(name) + + def test_off_path(self): + off_path = os.path.abspath(os.path.join(self.here, "off-path")) + self.run_extractor("-R", off_path) + self.check_only_traps_exists_and_clear("nameless", "mod1", "mod2") diff --git a/python/extractor/tests/test_omit_syntax_error.py b/python/extractor/tests/test_omit_syntax_error.py new file mode 100644 index 00000000000..8064d2e8972 --- /dev/null +++ b/python/extractor/tests/test_omit_syntax_error.py @@ -0,0 +1,22 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class OmitSyntaxErrorTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(OmitSyntaxErrorTest, self).__init__(name) + self.module_path = os.path.abspath(os.path.join(self.here, "syntax-error")) + + def test_omit(self): + self.run_extractor("--omit-syntax-error", "error") + self.check_only_traps_exists_and_clear() + + def test_dont_omit(self): + self.run_extractor("error") + self.check_only_traps_exists_and_clear("error", "error") diff --git a/python/extractor/tests/test_parser.py b/python/extractor/tests/test_parser.py new file mode 100644 index 00000000000..e93ffd1ffd7 --- /dev/null +++ b/python/extractor/tests/test_parser.py @@ -0,0 +1,107 @@ +import sys +import os.path +import shutil +import unittest +import pytest +import warnings + +from tests import test_utils +from semmle.python.parser.dump_ast import old_parser, AstDumper, StdoutLogger +from semmle.python.parser.tsg_parser import parse as new_parser +import subprocess + +class ParserTest(unittest.TestCase): + def __init__(self, name): + super(ParserTest, self).__init__(name) + self.test_folder = os.path.join(os.path.dirname(__file__), "parser") + self.maxDiff = None + + + @pytest.fixture(autouse=True) + def capsys(self, capsys): + self.capsys = capsys + + def compare_parses(self, filename, logger): + pyfile = os.path.join(self.test_folder, filename) + stem = filename[:-3] + oldfile = os.path.join(self.test_folder, stem + ".old") + newfile = os.path.join(self.test_folder, stem + ".new") + old_error = False + new_error = False + try: + old_ast = old_parser(pyfile, logger) + with open(oldfile, "w") as old: + AstDumper(old).visit(old_ast) + except SyntaxError: + old_error = True + try: + new_ast = new_parser(pyfile, logger) + with open(newfile, "w") as new: + AstDumper(new).visit(new_ast) + except SyntaxError: + new_error = True + + if old_error or new_error: + raise Exception("Parser error: old_error={}, new_error={}".format(old_error, new_error)) + try: + diff = subprocess.check_output(["git", "diff", "--patience", "--no-index", oldfile, newfile]) + except subprocess.CalledProcessError as e: + diff = e.output + if diff: + pytest.fail(diff.decode("utf-8")) + self.assertEqual(self.capsys.readouterr().err, "") + os.remove(oldfile) + os.remove(newfile) + + def compare_expected(self, filename, logger, new=True ): + if sys.version_info.major < 3: + return + pyfile = os.path.join(self.test_folder, filename) + stem = filename[:-3] + expected = os.path.join(self.test_folder, stem + ".expected") + actual = os.path.join(self.test_folder, stem + ".actual") + parser = new_parser if new else old_parser + with warnings.catch_warnings(): + # The test case `b"this is not a unicode escape because we are in a + # bytestring: \N{AMPERSAND}"`` in strings_new.py gives a DeprecationWarning, + # however we are actually testing the parser behavior on such bad code, so + # we can't just "fix" the code. You would think we could use the Python + # warning filter to ignore this specific warning, but that doesn't work -- + # furthermore, using `error::DeprecationWarning` makes the *output* of the + # test change :O + # + # This was the best solution I could come up with that _both_ allows pytest + # to error on normal deprecation warnings, but also allows this one case to + # exist. + if filename == "strings_new.py": + warnings.simplefilter("ignore", DeprecationWarning) + ast = parser(pyfile, logger) + with open(actual, "w") as actual_file: + AstDumper(actual_file).visit(ast) + try: + diff = subprocess.check_output(["git", "diff", "--patience", "--no-index", expected, actual]) + except subprocess.CalledProcessError as e: + diff = e.output + if diff: + pytest.fail(diff.decode("utf-8")) + self.assertEqual(self.capsys.readouterr().err, "") + os.remove(actual) + + +def setup_tests(): + test_folder = os.path.join(os.path.dirname(__file__), "parser") + with StdoutLogger() as logger: + for file in os.listdir(test_folder): + if file.endswith(".py"): + stem = file[:-3] + test_name = "test_" + stem + if stem.endswith("_new"): + test_func = lambda self, file=file: self.compare_expected(file, logger, new=True) + elif stem.endswith("_old"): + test_func = lambda self, file=file: self.compare_expected(file, logger, new=False) + else: + test_func = lambda self, file=file: self.compare_parses(file, logger) + setattr(ParserTest, test_name, test_func) + +setup_tests() +del setup_tests diff --git a/python/extractor/tests/test_patterns.py b/python/extractor/tests/test_patterns.py new file mode 100644 index 00000000000..f218e7a4907 --- /dev/null +++ b/python/extractor/tests/test_patterns.py @@ -0,0 +1,27 @@ +import os +import json +import subprocess + +import semmle.path_filters +from tests import test_utils + +class ExtractorPatternsTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(ExtractorPatternsTest, self).__init__(name) + + def test(self): + repo_dir = subprocess.Popen(["git", "rev-parse", "--show-toplevel"], stdout=subprocess.PIPE).communicate()[0].rstrip().decode("utf-8") + test_file_path = os.path.abspath(os.path.join(repo_dir, "unit-tests", "files", "pattern-matching", "patterns.json")) + with open(test_file_path) as test_file: + test_patterns = json.load(test_file) + for test_pattern in test_patterns: + pattern = test_pattern["pattern"] + regex = semmle.path_filters.glob_to_regex(pattern) + for matching_path in test_pattern["should_match"]: + self.assertTrue(regex.match(matching_path), "Pattern \"%s\" did not match path \"%s\"." % (pattern, matching_path)) + for matching_path in test_pattern["shouldnt_match"]: + self.assertFalse(regex.match(matching_path), "Pattern \"%s\" matched path \"%s\"." % (pattern, matching_path)) + + def test_escape_prefix(self): + semmle.path_filters.glob_to_regex("x", prefix="foo\\") diff --git a/python/extractor/tests/test_projectlayout.py b/python/extractor/tests/test_projectlayout.py new file mode 100644 index 00000000000..37aecdbd03a --- /dev/null +++ b/python/extractor/tests/test_projectlayout.py @@ -0,0 +1,133 @@ +# +# This is a port of com.semmle.extractor.projectstructure.ProjectLayoutTests +# and must be kept in sync +# + +from semmle.projectlayout import ProjectLayout +import unittest + +PROJECT_LAYOUT = ProjectLayout(u""" +@Example + +/this/path/will/remain +-this/path/will/not +/and/look//this/path/is/ok + +#Source +/src// +-/src/tests + +#Tests +/src/tests// + +#Generated +/gen +/gen2//gen + +#Misc +misc// +othermisc +//thirdmisc + +#ExecutionOrder +ex/order +-ex/order/tests/a +ex/order/tests +/src/tests//testA.c +#Patterns +**/*.included +**/inc +-**/exc +my +-my/excluded/**/files +my/**//files/**/a +//**/weird""".split('\n')) + +MINIMAL_LAYOUT = ProjectLayout(u""" +/included/path +- excluded/path""".split('\n')) + +CS_LAYOUT = ProjectLayout(u""" +#Production code +/ +-**/src.test + +#Testing code +**/src.test""".split('\n')) + +def map(path): + return PROJECT_LAYOUT.artificial_path(path) + +class ProjectLayoutTests(unittest.TestCase): + def test_advanced_patterns(self): + self.assertEqual(u"/Patterns/firstPattern.included", map(u"/firstPattern.included")) + self.assertEqual(u"/Patterns/P1/P2/a.included", map(u"/P1/P2/a.included")) + self.assertEqual(u"/Patterns/P3/P4/inc", map(u"/P3/P4/inc")) + self.assertEqual(u"/Patterns/P4/P5/inc/a.c", map(u"/P4/P5/inc/a.c")) + assert map(u"/P3/P4/inc/exc") is None + assert map(u"/P3/P4/inc/exc/a/b.c") is None + self.assertEqual(u"/Patterns/my/code", map(u"/my/code")) + assert map("u/my/excluded/but/very/interesting/files/a.c") is None + self.assertEqual(u"/Patterns/files/a/b.c", map(u"/my/excluded/but/very/interesting/files/a/b.c")) + self.assertEqual(u"/Patterns/P5/P6/weird", map(u"/P5/P6/weird")) + + def test_non_virtual_path(self): + self.assertEqual(u"/this/path/will/remain/the-same.c", map(u"/this/path/will/remain/the-same.c")) + assert map(u"/this/path/will/not/be/included.c") is None + self.assertEqual(u"/this/path/is/ok/to-use.c", map(u"/and/look/this/path/is/ok/to-use.c")) + + def test_ignore_unmentioned_paths(self): + assert map(u"/lib/foo.c") is None + + def test_do_not_match_partial_names(self): + assert map(u"/gen2/foo.c") is None + assert map(u"/src2/foo.c") is None + + def test_simple_mapping(self): + self.assertEqual(u"/Source/foo.c", map(u"/src/foo.c")) + + def test_match_in_sequence(self): + self.assertEqual(u"/ExecutionOrder/ex/order/tests/a", map("/ex/order/tests/a")) + self.assertEqual(u"/Tests/testA.c", map(u"/src/tests/testA.c")) + + def test_excluded_and_included(self): + self.assertEqual(u"/Tests/test.c", map("/src/tests/test.c")) + + def test_without_double_slashes(self): + self.assertEqual(u"/Generated/gen/gen.c", map("/gen/gen.c")) + + def test_middle_double_slash(self): + self.assertEqual(u"/Generated/gen/gen.c", map("/gen2/gen/gen.c")) + + def test_initial_double_slash(self): + self.assertEqual(u"/Misc/thirdmisc/misc.c", map("/thirdmisc/misc.c")) + + def test_map_directories(self): + self.assertEqual(u"/Generated/gen", map("/gen")) + self.assertEqual(u"/Generated/gen/", map("/gen/")) + self.assertEqual(u"/Source", map("/src")) + self.assertEqual(u"/Misc/thirdmisc", map("/thirdmisc")) + + def test_missing_initial_slash(self): + self.assertEqual(u"/Misc", map("/misc")) + self.assertEqual(u"/Misc/othermisc", map("/othermisc")) + + def test_minimal_layout(self): + self.assertEqual(u"/included/path/foo.c", MINIMAL_LAYOUT.artificial_path("/included/path/foo.c")) + assert MINIMAL_LAYOUT.artificial_path(u"/excluded/path/name") is None + + def test_project_names(self): + self.assertEqual(u"Example", PROJECT_LAYOUT.project_name()) + self.assertEqual(u"Example", PROJECT_LAYOUT.project_name("Something else")) + self.assertRaises(Exception, lambda: MINIMAL_LAYOUT.project_name()) + self.assertEqual(u"My project", MINIMAL_LAYOUT.project_name("My project")) + + def test_cs(self): + self.assertEqual(u"/Production code", CS_LAYOUT.artificial_path(u"")) + self.assertEqual(u"/Production code/", CS_LAYOUT.artificial_path(u"/")); + self.assertEqual(u"/Production code/AppAuth/ear/App/src", CS_LAYOUT.artificial_path(u"/AppAuth/ear/App/src")); + self.assertEqual(u"/Testing code/BUILD/bun/BUILD/src.test", CS_LAYOUT.artificial_path(u"/BUILD/bun/BUILD/src.test")); + + +if __name__ == "__main__": + unittest.main() diff --git a/python/extractor/tests/test_python_sanity.py b/python/extractor/tests/test_python_sanity.py new file mode 100644 index 00000000000..778b257d2d3 --- /dev/null +++ b/python/extractor/tests/test_python_sanity.py @@ -0,0 +1,23 @@ +import sys +import unittest + + +class PythonSanityTest(unittest.TestCase): + """Tests various implicit assumptions we have about Python behavior. + + This is intended to catch changes that may break extraction in future + versions of Python. + """ + + def __init__(self, name): + super(PythonSanityTest, self).__init__(name) + + def test_latin_1_encoding(self): + """Tests whether 'latin-1' acts as a "do nothing" encoding.""" + + s = bytes(range(256)) + u = str(s, 'latin-1') + s_as_tuple = tuple(s) + + u_as_tuple = tuple(map(ord, u)) + assert u_as_tuple == s_as_tuple diff --git a/python/extractor/tests/test_single.py b/python/extractor/tests/test_single.py new file mode 100644 index 00000000000..c4dacbc2464 --- /dev/null +++ b/python/extractor/tests/test_single.py @@ -0,0 +1,21 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class SingleThreadedTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(SingleThreadedTest, self).__init__(name) + + def test_simple(self): + self.run_extractor("-z1", "package.sub.a") + self.check_only_traps_exists_and_clear("a", "package/", "sub/") + + def test_simple_exclude(self): + self.run_extractor("-z1", "-y", "package.sub", "mod1", "package.x", "package.sub.a") + self.check_only_traps_exists_and_clear("mod1", "package/", "x") diff --git a/python/extractor/tests/test_source_archive_unchanged.py b/python/extractor/tests/test_source_archive_unchanged.py new file mode 100644 index 00000000000..524b5199f24 --- /dev/null +++ b/python/extractor/tests/test_source_archive_unchanged.py @@ -0,0 +1,27 @@ +import os +import subprocess +import filecmp + +from tests.test_utils import ExtractorTest, environment + +class SourceArchiveUnchangedTest(ExtractorTest): + """Checks that the files stored in the source archive are exact copies of the originals.""" + + def __init__(self, name): + super(SourceArchiveUnchangedTest, self).__init__(name) + testfiledir = os.path.abspath(os.path.join(self.here, "source_archive_unchanged")) + self.src_path = os.path.join(testfiledir, "src") + self.src_archive = os.path.join(testfiledir, "src_archive") + + def test_source_archive_unchanged(self): + self.run_extractor( + "-F", "tests/source_archive_unchanged/src/weird_bytes.py", + "-F", "tests/source_archive_unchanged/src/no_newline.py" + ) + source_archive_location = os.path.join(self.src_archive, os.path.relpath(self.src_path, "/")) + for filename in ("weird_bytes.py", "no_newline.py"): + orig = os.path.join(self.src_path, filename) + copy = os.path.join(source_archive_location, filename) + if not filecmp.cmp(orig, copy): + self.fail("The source archive version of the following file has changed: " + copy) + self.check_source_exists_and_clear(os.path.join(source_archive_location, filename)) diff --git a/python/extractor/tests/test_tokenizer.py b/python/extractor/tests/test_tokenizer.py new file mode 100644 index 00000000000..cd843f5dad3 --- /dev/null +++ b/python/extractor/tests/test_tokenizer.py @@ -0,0 +1,66 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils +from semmle.python.parser import tokenizer +from blib2to3.pgen2.token import tok_name + +def unescape(s): + return u"'" + s.replace(u"\\", u"\\\\").replace(u"\n", u"\\n").replace(u"\t", u"\\t").replace(u"\'", u"\\'") + u"'" + + +def format_token(token): + type, text, start, end = token + # Use Python 3 tokenize style output, regardless of version + token_range = u"%d,%d-%d,%d:" % (start + end) + return u"%-20s%-15s%s" % (token_range, tok_name[type], unescape(text)) + +class TokenizerTest(unittest.TestCase): + + def __init__(self, name): + super(TokenizerTest, self).__init__(name) + self.test_folder = os.path.join(os.path.dirname(__file__), "tokenizer") + + def setUp(self): + pass + + def tearDown(self): + pass + + def compare_tokens(self, filename): + pyfile = os.path.join(self.test_folder, filename) + tokenfile = os.path.join(self.test_folder, filename[:-3]+".tokens") + with open(tokenfile, "rb") as tkns: + expected = [ line.strip().decode("utf8") for line in tkns if line.strip() ] + try: + with open(pyfile, "rb") as srcfile: + srcbytes = srcfile.read() + encoding, srcbytes = tokenizer.encoding_from_source(srcbytes) + text = srcbytes.decode(encoding) + actual = [format_token(tkn) for tkn in tokenizer.Tokenizer(text).tokens()] + except Exception as ex: + print(ex) + self.fail("Failed to tokenize " + filename) + if expected == actual: + return + actualfile = os.path.join(self.test_folder, filename[:-3]+".actual") + with open(actualfile, "wb") as out: + for line in actual: + out.write(line.encode("utf8")) + out.write(b"\n") + lineno = 1 + for expected_tkn, actual_tkn in zip(expected, actual): + assert type(expected_tkn) is str + assert type(actual_tkn) is str + self.assertEqual(expected_tkn, actual_tkn, " at %s:%d" % (filename[:-3]+".tokens", lineno)) + lineno += 1 + self.assertTrue(len(expected) == len(actual), "Too few or too many tokens for %s" % filename) + + def test_tokens(self): + for file in os.listdir(self.test_folder): + if file.endswith(".py"): + self.compare_tokens(file) diff --git a/python/extractor/tests/test_trap_cache.py b/python/extractor/tests/test_trap_cache.py new file mode 100644 index 00000000000..8bb2e3eda2b --- /dev/null +++ b/python/extractor/tests/test_trap_cache.py @@ -0,0 +1,39 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class TrapCacheTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(TrapCacheTest, self).__init__(name) + self.trap_cache = os.path.abspath(os.path.join(self.here, "cache")) + + + def tearDown(self): + super(TrapCacheTest, self).tearDown() + shutil.rmtree(self.trap_cache, ignore_errors=True) + + def run_extractor(self, *args): + super(TrapCacheTest, self).run_extractor(*(["-c", self.trap_cache] + list(args))) + + def create_trap_cache(self): + try: + os.makedirs(self.trap_cache) + except: + if os.path.exists(self.trap_cache): + return + raise + + def test_pre_created(self): + self.create_trap_cache() + self.run_extractor("mod1", "package.x", "package.sub.a") + self.check_only_traps_exists_and_clear("mod1", "package/", "x", "sub/", "a") + + def test_not_pre_created(self): + self.run_extractor("mod1", "package.x", "package.sub.a") + self.check_only_traps_exists_and_clear("mod1", "package/", "x", "sub/", "a") diff --git a/python/extractor/tests/test_use_projectlayout.py b/python/extractor/tests/test_use_projectlayout.py new file mode 100644 index 00000000000..fde36016f97 --- /dev/null +++ b/python/extractor/tests/test_use_projectlayout.py @@ -0,0 +1,27 @@ +import os +import subprocess + +from tests.test_utils import ExtractorTest, environment + +class ProjectLayoutUseTest(ExtractorTest): + + def __init__(self, name): + super(ProjectLayoutUseTest, self).__init__(name) + self.module_path = os.path.abspath(os.path.join(self.here, "project_layout")) + self.src_path = os.path.join(self.module_path, "src") + self.src_archive = os.path.join(self.module_path, "src_archive") + + def test_layout(self): + with environment("SEMMLE_PATH_TRANSFORMER", "tests/project_layout/project-layout"): + self.run_extractor("-R", self.src_path) + self.check_only_traps_exists_and_clear("mod1") + self.check_source_exists_and_clear(os.path.join(self.src_archive, "target", "src", "mod1.py")) + + def test_invalid_layout(self): + try: + with environment("SEMMLE_PATH_TRANSFORMER", "nonsuch/project-layout"): + self.run_extractor("-R", self.src_path) + except subprocess.CalledProcessError as ex: + self.assertEqual(ex.returncode, 2) + else: + self.fail("Not cleanly halting on invalid path transformer") diff --git a/python/extractor/tests/test_utils.py b/python/extractor/tests/test_utils.py new file mode 100644 index 00000000000..74ebbacf119 --- /dev/null +++ b/python/extractor/tests/test_utils.py @@ -0,0 +1,83 @@ +import os +import sys +import semmle +import unittest +import shutil +import re +from contextlib import contextmanager + +import semmle.populator +import subprocess + +BUILTIN_TRAP = "builtins.trap.gz" + +PY_PATTERN = re.compile(r"(\w+)\.py.[A-Za-z0-9=_\-]+\.trap\.gz") +FOLDER_PATTERN = re.compile(r"(\w+).[A-Za-z0-9=_\-]+\.trap\.gz") + + +@contextmanager +def environment(key, value): + os.environ[key] = value + try: + yield + finally: + del os.environ[key] + + +class ExtractorTest(unittest.TestCase): + + def __init__(self, name): + unittest.TestCase.__init__(self, name) + self.here = os.path.dirname(__file__) + self.module_path = os.path.abspath(os.path.join(self.here, "data")) + self.trap_path = os.path.abspath(os.path.join(self.here, "traps")) + self.src_archive = None + + def setUp(self): + try: + os.makedirs(self.trap_path) + except: + if os.path.exists(self.trap_path): + return + raise + + def tearDown(self): + shutil.rmtree(self.trap_path, ignore_errors=True) + + def check_only_traps_exists_and_clear(self, *module_names): + modules = list(module_names) + for filename in os.listdir(self.trap_path): + match = PY_PATTERN.match(filename) + if match: + name = match.group(1) + else: + match = FOLDER_PATTERN.match(filename) + if match: + name = match.group(1) + "/" + else: + continue + if name in modules: + modules.remove(name) + path = os.path.join(self.trap_path, filename) + os.remove(path) + if modules: + self.fail("No trap file for " + modules.pop()) + for _, _, filenames in os.walk(self.trap_path): + #Ignore the builtin trap file, any `__init__.py` files, and $file, $interpreter trap files. + filenames = [ name for name in filenames if not name.startswith("$") and not name.startswith("__init__.py") and name != BUILTIN_TRAP] + self.assertFalse(filenames, "Some trap files remain: " + ", ".join(filenames)) + + def check_source_exists_and_clear(self, path): + try: + os.remove(path) + except OSError: + self.fail("File '%s' does not exist" % path) + + def run_extractor(self, *args): + cmd = [sys.executable, os.path.join(os.path.dirname(self.here), "python_tracer.py"), "--quiet" ] + ["-p", self.module_path, "-o", self.trap_path] + list(args) + with environment("CODEQL_EXTRACTOR_PYTHON_ENABLE_PYTHON2_EXTRACTION", "True"): + if self.src_archive: + with environment("CODEQL_EXTRACTOR_PYTHON_SOURCE_ARCHIVE_DIR", self.src_archive): + subprocess.check_call(cmd) + else: + subprocess.check_call(cmd) diff --git a/python/extractor/tests/tokenizer/basic.py b/python/extractor/tests/tokenizer/basic.py new file mode 100644 index 00000000000..473a4046be6 --- /dev/null +++ b/python/extractor/tests/tokenizer/basic.py @@ -0,0 +1,134 @@ + +#AST nodes: Classes, Functions, Modules, expr, stmts + +class C: + + def stmts(p0, p1): + global x + assert x == 2 + y = 3 + y += 4 + while True: + break + while x > 0: + x -= 1 + continue + + f() + for x in y: + pass + if x: + print(y) + import a + import a.b as c + import a as b + from a.b import c + + + with open("file") as f: + pass + try: + 1/0 + except Exception as ex: + del y + finally: + del x + if x: + raise Exception() + else: + return + + def exprs(p2, p3): + p2.x = 2 + a = p3.y + x = 1 + 2 + y = b'h4tpvhsa' + call(arg0, arg1, name0="Hi", name1=y, *(), **{}) + x < y + {1:1, 2: 2} + + x[a, 7] + (x for x in y) + 17 if x < y else 16 + lambda x : x * y + [ 1, 2, a, x.b, p1.c ] + [ a + "Hi" for a in str(y) ] + + + + #a, *b = y + u"Hi" + x[0] + x[y[0]] + (p2, p3, 7) + +#Some multiline strings +''' +Single quotes string''' + +""" +Double-quotes +string""" + +r''' +Bytes +''' + +U""" +Raw +Unicode +""" + +#Decorated function +@deco +def f(): + pass + +#Inner function (see ODASA-1774) +def outer(): + def inner(): + pass + +#Oddly laid out comprehension +[[ + x for x in y + ] + + for a in b +] + +#Nested binary operations +"Hello" + " " + "world" +1+2+f() +1+(2+3) + +# operations +a|b&c+d-e +x*f%g^h@j**k + +#Augmented assigns +a @= b +a |= b +a *= b + +~a + +#Comparisons +< +> +<= +>= +!= +== +is +is not + +(""" +""") +del x + +`backticks` + +x := y + +1 <> 2 diff --git a/python/extractor/tests/tokenizer/basic.tokens b/python/extractor/tests/tokenizer/basic.tokens new file mode 100644 index 00000000000..91445621022 --- /dev/null +++ b/python/extractor/tests/tokenizer/basic.tokens @@ -0,0 +1,472 @@ +2,0-2,52: COMMENT '#AST nodes: Classes, Functions, Modules, expr, stmts' +4,0-4,5: NAME 'class' +4,6-4,7: NAME 'C' +4,7-4,8: COLON ':' +4,8-4,9: NEWLINE '\n' +6,0-6,4: INDENT ' ' +6,4-6,7: NAME 'def' +6,8-6,13: NAME 'stmts' +6,13-6,14: LPAR '(' +6,14-6,16: NAME 'p0' +6,16-6,17: COMMA ',' +6,18-6,20: NAME 'p1' +6,20-6,21: RPAR ')' +6,21-6,22: COLON ':' +6,22-6,23: NEWLINE '\n' +7,0-7,8: INDENT ' ' +7,8-7,14: NAME 'global' +7,15-7,16: NAME 'x' +7,16-7,17: NEWLINE '\n' +8,8-8,14: NAME 'assert' +8,15-8,16: NAME 'x' +8,17-8,19: OP '==' +8,20-8,21: NUMBER '2' +8,21-8,22: NEWLINE '\n' +9,8-9,9: NAME 'y' +9,10-9,11: OP '=' +9,12-9,13: NUMBER '3' +9,13-9,14: NEWLINE '\n' +10,8-10,9: NAME 'y' +10,10-10,12: OP '+=' +10,13-10,14: NUMBER '4' +10,14-10,15: NEWLINE '\n' +11,8-11,13: NAME 'while' +11,14-11,18: NAME 'True' +11,18-11,19: COLON ':' +11,19-11,20: NEWLINE '\n' +12,0-12,12: INDENT ' ' +12,12-12,17: NAME 'break' +12,17-12,18: NEWLINE '\n' +13,8-13,8: DEDENT '' +13,8-13,13: NAME 'while' +13,14-13,15: NAME 'x' +13,16-13,17: OP '>' +13,18-13,19: NUMBER '0' +13,19-13,20: COLON ':' +13,20-13,21: NEWLINE '\n' +14,0-14,12: INDENT ' ' +14,12-14,13: NAME 'x' +14,14-14,16: OP '-=' +14,17-14,18: NUMBER '1' +14,18-14,19: NEWLINE '\n' +15,12-15,20: NAME 'continue' +15,20-15,21: NEWLINE '\n' +17,8-17,8: DEDENT '' +17,8-17,9: NAME 'f' +17,9-17,10: LPAR '(' +17,10-17,11: RPAR ')' +17,11-17,12: NEWLINE '\n' +18,8-18,11: NAME 'for' +18,12-18,13: NAME 'x' +18,14-18,16: NAME 'in' +18,17-18,18: NAME 'y' +18,18-18,19: COLON ':' +18,19-18,20: NEWLINE '\n' +19,0-19,12: INDENT ' ' +19,12-19,16: NAME 'pass' +19,16-19,17: NEWLINE '\n' +20,8-20,8: DEDENT '' +20,8-20,10: NAME 'if' +20,11-20,12: NAME 'x' +20,12-20,13: COLON ':' +20,13-20,14: NEWLINE '\n' +21,0-21,12: INDENT ' ' +21,12-21,17: NAME 'print' +21,17-21,18: LPAR '(' +21,18-21,19: NAME 'y' +21,19-21,20: RPAR ')' +21,20-21,21: NEWLINE '\n' +22,8-22,8: DEDENT '' +22,8-22,14: NAME 'import' +22,15-22,16: NAME 'a' +22,16-22,17: NEWLINE '\n' +23,8-23,14: NAME 'import' +23,15-23,16: NAME 'a' +23,16-23,17: DOT '.' +23,17-23,18: NAME 'b' +23,19-23,21: NAME 'as' +23,22-23,23: NAME 'c' +23,23-23,24: NEWLINE '\n' +24,8-24,14: NAME 'import' +24,15-24,16: NAME 'a' +24,17-24,19: NAME 'as' +24,20-24,21: NAME 'b' +24,21-24,22: NEWLINE '\n' +25,8-25,12: NAME 'from' +25,13-25,14: NAME 'a' +25,14-25,15: DOT '.' +25,15-25,16: NAME 'b' +25,17-25,23: NAME 'import' +25,24-25,25: NAME 'c' +25,25-25,26: NEWLINE '\n' +28,8-28,12: NAME 'with' +28,13-28,17: NAME 'open' +28,17-28,18: LPAR '(' +28,18-28,24: STRING '"file"' +28,24-28,25: RPAR ')' +28,26-28,28: NAME 'as' +28,29-28,30: NAME 'f' +28,30-28,31: COLON ':' +28,31-28,32: NEWLINE '\n' +29,0-29,12: INDENT ' ' +29,12-29,16: NAME 'pass' +29,16-29,17: NEWLINE '\n' +30,8-30,8: DEDENT '' +30,8-30,11: NAME 'try' +30,11-30,12: COLON ':' +30,12-30,13: NEWLINE '\n' +31,0-31,12: INDENT ' ' +31,12-31,13: NUMBER '1' +31,13-31,14: OP '/' +31,14-31,15: NUMBER '0' +31,15-31,16: NEWLINE '\n' +32,8-32,8: DEDENT '' +32,8-32,14: NAME 'except' +32,15-32,24: NAME 'Exception' +32,25-32,27: NAME 'as' +32,28-32,30: NAME 'ex' +32,30-32,31: COLON ':' +32,31-32,32: NEWLINE '\n' +33,0-33,12: INDENT ' ' +33,12-33,15: NAME 'del' +33,16-33,17: NAME 'y' +33,17-33,18: NEWLINE '\n' +34,8-34,8: DEDENT '' +34,8-34,15: NAME 'finally' +34,15-34,16: COLON ':' +34,16-34,17: NEWLINE '\n' +35,0-35,12: INDENT ' ' +35,12-35,15: NAME 'del' +35,16-35,17: NAME 'x' +35,17-35,18: NEWLINE '\n' +36,8-36,8: DEDENT '' +36,8-36,10: NAME 'if' +36,11-36,12: NAME 'x' +36,12-36,13: COLON ':' +36,13-36,14: NEWLINE '\n' +37,0-37,12: INDENT ' ' +37,12-37,17: NAME 'raise' +37,18-37,27: NAME 'Exception' +37,27-37,28: LPAR '(' +37,28-37,29: RPAR ')' +37,29-37,30: NEWLINE '\n' +38,8-38,8: DEDENT '' +38,8-38,12: NAME 'else' +38,12-38,13: COLON ':' +38,13-38,14: NEWLINE '\n' +39,0-39,12: INDENT ' ' +39,12-39,18: NAME 'return' +39,18-39,19: NEWLINE '\n' +41,4-41,4: DEDENT '' +41,4-41,4: DEDENT '' +41,4-41,7: NAME 'def' +41,8-41,13: NAME 'exprs' +41,13-41,14: LPAR '(' +41,14-41,16: NAME 'p2' +41,16-41,17: COMMA ',' +41,18-41,20: NAME 'p3' +41,20-41,21: RPAR ')' +41,21-41,22: COLON ':' +41,22-41,23: NEWLINE '\n' +42,0-42,8: INDENT ' ' +42,8-42,10: NAME 'p2' +42,10-42,11: DOT '.' +42,11-42,12: NAME 'x' +42,13-42,14: OP '=' +42,15-42,16: NUMBER '2' +42,16-42,17: NEWLINE '\n' +43,8-43,9: NAME 'a' +43,10-43,11: OP '=' +43,12-43,14: NAME 'p3' +43,14-43,15: DOT '.' +43,15-43,16: NAME 'y' +43,16-43,17: NEWLINE '\n' +44,8-44,9: NAME 'x' +44,10-44,11: OP '=' +44,12-44,13: NUMBER '1' +44,14-44,15: OP '+' +44,16-44,17: NUMBER '2' +44,17-44,18: NEWLINE '\n' +45,8-45,9: NAME 'y' +45,10-45,11: OP '=' +45,12-45,23: STRING 'b\'h4tpvhsa\'' +45,23-45,24: NEWLINE '\n' +46,8-46,12: NAME 'call' +46,12-46,13: LPAR '(' +46,13-46,17: NAME 'arg0' +46,17-46,18: COMMA ',' +46,19-46,23: NAME 'arg1' +46,23-46,24: COMMA ',' +46,25-46,30: NAME 'name0' +46,30-46,31: OP '=' +46,31-46,35: STRING '"Hi"' +46,35-46,36: COMMA ',' +46,37-46,42: NAME 'name1' +46,42-46,43: OP '=' +46,43-46,44: NAME 'y' +46,44-46,45: COMMA ',' +46,46-46,47: OP '*' +46,47-46,48: LPAR '(' +46,48-46,49: RPAR ')' +46,49-46,50: COMMA ',' +46,51-46,53: OP '**' +46,53-46,54: LBRACE '{' +46,54-46,55: RBRACE '}' +46,55-46,56: RPAR ')' +46,56-46,57: NEWLINE '\n' +47,8-47,9: NAME 'x' +47,10-47,11: OP '<' +47,12-47,13: NAME 'y' +47,13-47,14: NEWLINE '\n' +48,8-48,9: LBRACE '{' +48,9-48,10: NUMBER '1' +48,10-48,11: COLON ':' +48,11-48,12: NUMBER '1' +48,12-48,13: COMMA ',' +48,14-48,15: NUMBER '2' +48,15-48,16: COLON ':' +48,17-48,18: NUMBER '2' +48,18-48,19: RBRACE '}' +48,19-48,20: NEWLINE '\n' +50,8-50,9: NAME 'x' +50,9-50,10: LSQB '[' +50,10-50,11: NAME 'a' +50,11-50,12: COMMA ',' +50,13-50,14: NUMBER '7' +50,14-50,15: RSQB ']' +50,15-50,16: NEWLINE '\n' +51,8-51,9: LPAR '(' +51,9-51,10: NAME 'x' +51,11-51,14: NAME 'for' +51,15-51,16: NAME 'x' +51,17-51,19: NAME 'in' +51,20-51,21: NAME 'y' +51,21-51,22: RPAR ')' +51,22-51,23: NEWLINE '\n' +52,8-52,10: NUMBER '17' +52,11-52,13: NAME 'if' +52,14-52,15: NAME 'x' +52,16-52,17: OP '<' +52,18-52,19: NAME 'y' +52,20-52,24: NAME 'else' +52,25-52,27: NUMBER '16' +52,27-52,28: NEWLINE '\n' +53,8-53,14: NAME 'lambda' +53,15-53,16: NAME 'x' +53,17-53,18: COLON ':' +53,19-53,20: NAME 'x' +53,21-53,22: OP '*' +53,23-53,24: NAME 'y' +53,24-53,25: NEWLINE '\n' +54,8-54,9: LSQB '[' +54,10-54,11: NUMBER '1' +54,11-54,12: COMMA ',' +54,13-54,14: NUMBER '2' +54,14-54,15: COMMA ',' +54,16-54,17: NAME 'a' +54,17-54,18: COMMA ',' +54,19-54,20: NAME 'x' +54,20-54,21: DOT '.' +54,21-54,22: NAME 'b' +54,22-54,23: COMMA ',' +54,24-54,26: NAME 'p1' +54,26-54,27: DOT '.' +54,27-54,28: NAME 'c' +54,29-54,30: RSQB ']' +54,30-54,31: NEWLINE '\n' +55,8-55,9: LSQB '[' +55,10-55,11: NAME 'a' +55,12-55,13: OP '+' +55,14-55,18: STRING '"Hi"' +55,19-55,22: NAME 'for' +55,23-55,24: NAME 'a' +55,25-55,27: NAME 'in' +55,28-55,31: NAME 'str' +55,31-55,32: LPAR '(' +55,32-55,33: NAME 'y' +55,33-55,34: RPAR ')' +55,35-55,36: RSQB ']' +55,36-55,37: NEWLINE '\n' +59,8-59,18: COMMENT '#a, *b = y' +60,8-60,13: STRING 'u"Hi"' +60,13-60,14: NEWLINE '\n' +61,8-61,9: NAME 'x' +61,9-61,10: LSQB '[' +61,10-61,11: NUMBER '0' +61,11-61,12: RSQB ']' +61,12-61,13: NEWLINE '\n' +62,8-62,9: NAME 'x' +62,9-62,10: LSQB '[' +62,10-62,11: NAME 'y' +62,11-62,12: LSQB '[' +62,12-62,13: NUMBER '0' +62,13-62,14: RSQB ']' +62,14-62,15: RSQB ']' +62,15-62,16: NEWLINE '\n' +63,8-63,9: LPAR '(' +63,9-63,11: NAME 'p2' +63,11-63,12: COMMA ',' +63,13-63,15: NAME 'p3' +63,15-63,16: COMMA ',' +63,17-63,18: NUMBER '7' +63,18-63,19: RPAR ')' +63,19-63,20: NEWLINE '\n' +65,0-65,23: COMMENT '#Some multiline strings' +66,0-66,0: DEDENT '' +66,0-66,0: DEDENT '' +66,0-67,23: STRING '\'\'\'\nSingle quotes string\'\'\'' +67,23-67,24: NEWLINE '\n' +69,0-71,9: STRING '"""\nDouble-quotes\nstring"""' +71,9-71,10: NEWLINE '\n' +73,0-75,3: STRING 'r\'\'\'\nBytes\n\'\'\'' +75,3-75,4: NEWLINE '\n' +77,0-80,3: STRING 'U"""\nRaw\nUnicode\n"""' +80,3-80,4: NEWLINE '\n' +82,0-82,19: COMMENT '#Decorated function' +83,0-83,1: AT '@' +83,1-83,5: NAME 'deco' +83,5-83,6: NEWLINE '\n' +84,0-84,3: NAME 'def' +84,4-84,5: NAME 'f' +84,5-84,6: LPAR '(' +84,6-84,7: RPAR ')' +84,7-84,8: COLON ':' +84,8-84,9: NEWLINE '\n' +85,0-85,4: INDENT ' ' +85,4-85,8: NAME 'pass' +85,8-85,9: NEWLINE '\n' +87,0-87,32: COMMENT '#Inner function (see ODASA-1774)' +88,0-88,0: DEDENT '' +88,0-88,3: NAME 'def' +88,4-88,9: NAME 'outer' +88,9-88,10: LPAR '(' +88,10-88,11: RPAR ')' +88,11-88,12: COLON ':' +88,12-88,13: NEWLINE '\n' +89,0-89,4: INDENT ' ' +89,4-89,7: NAME 'def' +89,8-89,13: NAME 'inner' +89,13-89,14: LPAR '(' +89,14-89,15: RPAR ')' +89,15-89,16: COLON ':' +89,16-89,17: NEWLINE '\n' +90,0-90,8: INDENT ' ' +90,8-90,12: NAME 'pass' +90,12-90,13: NEWLINE '\n' +92,0-92,29: COMMENT '#Oddly laid out comprehension' +93,0-93,0: DEDENT '' +93,0-93,0: DEDENT '' +93,0-93,1: LSQB '[' +93,1-93,2: LSQB '[' +94,2-94,3: NAME 'x' +94,4-94,7: NAME 'for' +94,8-94,9: NAME 'x' +94,10-94,12: NAME 'in' +94,13-94,14: NAME 'y' +95,2-95,3: RSQB ']' +97,2-97,5: NAME 'for' +97,6-97,7: NAME 'a' +97,8-97,10: NAME 'in' +97,11-97,12: NAME 'b' +98,0-98,1: RSQB ']' +98,1-98,2: NEWLINE '\n' +100,0-100,25: COMMENT '#Nested binary operations' +101,0-101,7: STRING '"Hello"' +101,8-101,9: OP '+' +101,10-101,13: STRING '" "' +101,14-101,15: OP '+' +101,16-101,23: STRING '"world"' +101,23-101,24: NEWLINE '\n' +102,0-102,1: NUMBER '1' +102,1-102,2: OP '+' +102,2-102,3: NUMBER '2' +102,3-102,4: OP '+' +102,4-102,5: NAME 'f' +102,5-102,6: LPAR '(' +102,6-102,7: RPAR ')' +102,7-102,8: NEWLINE '\n' +103,0-103,1: NUMBER '1' +103,1-103,2: OP '+' +103,2-103,3: LPAR '(' +103,3-103,4: NUMBER '2' +103,4-103,5: OP '+' +103,5-103,6: NUMBER '3' +103,6-103,7: RPAR ')' +103,7-103,8: NEWLINE '\n' +105,0-105,12: COMMENT '# operations' +106,0-106,1: NAME 'a' +106,1-106,2: OP '|' +106,2-106,3: NAME 'b' +106,3-106,4: OP '&' +106,4-106,5: NAME 'c' +106,5-106,6: OP '+' +106,6-106,7: NAME 'd' +106,7-106,8: OP '-' +106,8-106,9: NAME 'e' +106,9-106,10: NEWLINE '\n' +107,0-107,1: NAME 'x' +107,1-107,2: OP '*' +107,2-107,3: NAME 'f' +107,3-107,4: OP '%' +107,4-107,5: NAME 'g' +107,5-107,6: OP '^' +107,6-107,7: NAME 'h' +107,7-107,8: AT '@' +107,8-107,9: NAME 'j' +107,9-107,11: OP '**' +107,11-107,12: NAME 'k' +107,12-107,13: NEWLINE '\n' +109,0-109,18: COMMENT '#Augmented assigns' +110,0-110,1: NAME 'a' +110,2-110,4: OP '@=' +110,5-110,6: NAME 'b' +110,6-110,7: NEWLINE '\n' +111,0-111,1: NAME 'a' +111,2-111,4: OP '|=' +111,5-111,6: NAME 'b' +111,6-111,7: NEWLINE '\n' +112,0-112,1: NAME 'a' +112,2-112,4: OP '*=' +112,5-112,6: NAME 'b' +112,6-112,7: NEWLINE '\n' +114,0-114,1: OP '~' +114,1-114,2: NAME 'a' +114,2-114,3: NEWLINE '\n' +116,0-116,12: COMMENT '#Comparisons' +117,0-117,1: OP '<' +117,1-117,2: NEWLINE '\n' +118,0-118,1: OP '>' +118,1-118,2: NEWLINE '\n' +119,0-119,2: OP '<=' +119,2-119,3: NEWLINE '\n' +120,0-120,2: OP '>=' +120,2-120,3: NEWLINE '\n' +121,0-121,2: OP '!=' +121,2-121,3: NEWLINE '\n' +122,0-122,2: OP '==' +122,2-122,3: NEWLINE '\n' +123,0-123,2: NAME 'is' +123,2-123,3: NEWLINE '\n' +124,0-124,2: NAME 'is' +124,3-124,6: NAME 'not' +124,6-124,7: NEWLINE '\n' +126,0-126,1: LPAR '(' +126,1-127,3: STRING '"""\n"""' +127,3-127,4: RPAR ')' +127,4-127,5: NEWLINE '\n' +128,0-128,3: NAME 'del' +128,4-128,5: NAME 'x' +128,5-128,6: NEWLINE '\n' +130,0-130,1: BACKQUOTE '`' +130,1-130,10: NAME 'backticks' +130,10-130,11: BACKQUOTE '`' +130,11-130,12: NEWLINE '\n' +132,0-132,1: NAME 'x' +132,3-132,4: COLONEQUAL ':=' +132,5-132,6: NAME 'y' +132,6-132,7: NEWLINE '\n' +134,0-134,1: NUMBER '1' +134,2-134,4: OP '<>' +134,5-134,6: NUMBER '2' +134,6-134,7: NEWLINE '\n' +135,0-135,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/close_brace.py b/python/extractor/tests/tokenizer/close_brace.py new file mode 100644 index 00000000000..f64214bb17c --- /dev/null +++ b/python/extractor/tests/tokenizer/close_brace.py @@ -0,0 +1,3 @@ +} +) +] diff --git a/python/extractor/tests/tokenizer/close_brace.tokens b/python/extractor/tests/tokenizer/close_brace.tokens new file mode 100644 index 00000000000..75d0c8feff6 --- /dev/null +++ b/python/extractor/tests/tokenizer/close_brace.tokens @@ -0,0 +1,7 @@ +1,0-1,1: RBRACE '}' +1,1-1,2: NEWLINE '\n' +2,0-2,1: RPAR ')' +2,1-2,2: NEWLINE '\n' +3,0-3,1: RSQB ']' +3,1-3,2: NEWLINE '\n' +4,0-4,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/comments.py b/python/extractor/tests/tokenizer/comments.py new file mode 100644 index 00000000000..1f89e4debc5 --- /dev/null +++ b/python/extractor/tests/tokenizer/comments.py @@ -0,0 +1,13 @@ + +import sys + +def f(): + code-here # Line end comment + #Indented comment +#Unindented comment + return 1 + +def g(arg): + return arg + +x = g(f()) diff --git a/python/extractor/tests/tokenizer/comments.tokens b/python/extractor/tests/tokenizer/comments.tokens new file mode 100644 index 00000000000..c76d40757e0 --- /dev/null +++ b/python/extractor/tests/tokenizer/comments.tokens @@ -0,0 +1,43 @@ +2,0-2,6: NAME 'import' +2,7-2,10: NAME 'sys' +2,10-2,11: NEWLINE '\n' +4,0-4,3: NAME 'def' +4,4-4,5: NAME 'f' +4,5-4,6: LPAR '(' +4,6-4,7: RPAR ')' +4,7-4,8: COLON ':' +4,8-4,9: NEWLINE '\n' +5,0-5,4: INDENT ' ' +5,4-5,8: NAME 'code' +5,8-5,9: OP '-' +5,9-5,13: NAME 'here' +5,14-5,32: COMMENT '# Line end comment' +5,32-5,33: NEWLINE '\n' +6,4-6,21: COMMENT '#Indented comment' +7,0-7,19: COMMENT '#Unindented comment' +8,4-8,10: NAME 'return' +8,11-8,12: NUMBER '1' +8,12-8,13: NEWLINE '\n' +10,0-10,0: DEDENT '' +10,0-10,3: NAME 'def' +10,4-10,5: NAME 'g' +10,5-10,6: LPAR '(' +10,6-10,9: NAME 'arg' +10,9-10,10: RPAR ')' +10,10-10,11: COLON ':' +10,11-10,12: NEWLINE '\n' +11,0-11,4: INDENT ' ' +11,4-11,10: NAME 'return' +11,11-11,14: NAME 'arg' +11,14-11,15: NEWLINE '\n' +13,0-13,0: DEDENT '' +13,0-13,1: NAME 'x' +13,2-13,3: OP '=' +13,4-13,5: NAME 'g' +13,5-13,6: LPAR '(' +13,6-13,7: NAME 'f' +13,7-13,8: LPAR '(' +13,8-13,9: RPAR ')' +13,9-13,10: RPAR ')' +13,10-13,11: NEWLINE '\n' +14,0-14,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/continuation.py b/python/extractor/tests/tokenizer/continuation.py new file mode 100644 index 00000000000..c9516a29a24 --- /dev/null +++ b/python/extractor/tests/tokenizer/continuation.py @@ -0,0 +1,5 @@ +def foo(): + pass \ +\ +\ + diff --git a/python/extractor/tests/tokenizer/continuation.tokens b/python/extractor/tests/tokenizer/continuation.tokens new file mode 100644 index 00000000000..a0d221967a2 --- /dev/null +++ b/python/extractor/tests/tokenizer/continuation.tokens @@ -0,0 +1,11 @@ +1,0-1,3: NAME 'def' +1,4-1,7: NAME 'foo' +1,7-1,8: LPAR '(' +1,8-1,9: RPAR ')' +1,9-1,10: COLON ':' +1,10-1,11: NEWLINE '\n' +2,0-2,4: INDENT ' ' +2,4-2,8: NAME 'pass' +5,0-5,1: NEWLINE '\n' +6,0-6,0: DEDENT '' +6,0-6,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/dollar.py b/python/extractor/tests/tokenizer/dollar.py new file mode 100644 index 00000000000..d355cb52a39 --- /dev/null +++ b/python/extractor/tests/tokenizer/dollar.py @@ -0,0 +1,2 @@ +$name +$ßðđ0 diff --git a/python/extractor/tests/tokenizer/dollar.tokens b/python/extractor/tests/tokenizer/dollar.tokens new file mode 100644 index 00000000000..7b0d3646c75 --- /dev/null +++ b/python/extractor/tests/tokenizer/dollar.tokens @@ -0,0 +1,5 @@ +1,0-1,5: DOLLARNAME '$name' +1,5-1,6: NEWLINE '\n' +2,0-2,5: DOLLARNAME '$ßðđ0' +2,5-2,6: NEWLINE '\n' +3,0-3,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/dots.py b/python/extractor/tests/tokenizer/dots.py new file mode 100644 index 00000000000..3bb53d080e8 --- /dev/null +++ b/python/extractor/tests/tokenizer/dots.py @@ -0,0 +1,4 @@ +. +.. +... +.... diff --git a/python/extractor/tests/tokenizer/dots.tokens b/python/extractor/tests/tokenizer/dots.tokens new file mode 100644 index 00000000000..d8b11498818 --- /dev/null +++ b/python/extractor/tests/tokenizer/dots.tokens @@ -0,0 +1,15 @@ +1,0-1,1: DOT '.' +1,1-1,2: NEWLINE '\n' +2,0-2,1: DOT '.' +2,1-2,2: DOT '.' +2,2-2,3: NEWLINE '\n' +3,0-3,1: DOT '.' +3,1-3,2: DOT '.' +3,2-3,3: DOT '.' +3,3-3,4: NEWLINE '\n' +4,0-4,1: DOT '.' +4,1-4,2: DOT '.' +4,2-4,3: DOT '.' +4,3-4,4: DOT '.' +4,4-4,5: NEWLINE '\n' +5,0-5,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/emoji.py b/python/extractor/tests/tokenizer/emoji.py new file mode 100644 index 00000000000..9c329e84e7d --- /dev/null +++ b/python/extractor/tests/tokenizer/emoji.py @@ -0,0 +1,2 @@ +"👦👦ðŸ»ðŸ‘¦ðŸ¼ðŸ‘¦ðŸ½ðŸ‘¦ðŸ¾ðŸ‘¦ðŸ¿ðŸ‘§ðŸ‘§ðŸ»ðŸ‘§ðŸ¼ðŸ‘§ðŸ½ðŸ‘§ðŸ¾ðŸ‘§ðŸ¿" +"😀ðŸ˜ðŸ˜‚😃😄😅😆😇😈😉😊😋😌ðŸ˜ðŸ˜ŽðŸ˜" diff --git a/python/extractor/tests/tokenizer/emoji.tokens b/python/extractor/tests/tokenizer/emoji.tokens new file mode 100644 index 00000000000..84f4a3deb9f --- /dev/null +++ b/python/extractor/tests/tokenizer/emoji.tokens @@ -0,0 +1,5 @@ +1,0-1,24: STRING '"👦👦ðŸ»ðŸ‘¦ðŸ¼ðŸ‘¦ðŸ½ðŸ‘¦ðŸ¾ðŸ‘¦ðŸ¿ðŸ‘§ðŸ‘§ðŸ»ðŸ‘§ðŸ¼ðŸ‘§ðŸ½ðŸ‘§ðŸ¾ðŸ‘§ðŸ¿"' +1,24-1,25: NEWLINE '\n' +2,0-2,18: STRING '"😀ðŸ˜ðŸ˜‚😃😄😅😆😇😈😉😊😋😌ðŸ˜ðŸ˜ŽðŸ˜"' +2,18-2,19: NEWLINE '\n' +3,0-3,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/feeds.py b/python/extractor/tests/tokenizer/feeds.py new file mode 100644 index 00000000000..007b983b8ab --- /dev/null +++ b/python/extractor/tests/tokenizer/feeds.py @@ -0,0 +1,4 @@ + + + +name diff --git a/python/extractor/tests/tokenizer/feeds.tokens b/python/extractor/tests/tokenizer/feeds.tokens new file mode 100644 index 00000000000..4fdc4512d72 --- /dev/null +++ b/python/extractor/tests/tokenizer/feeds.tokens @@ -0,0 +1,3 @@ +4,0-4,4: NAME 'name' +4,4-4,5: NEWLINE '\n' +5,0-5,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/gen_tokens.py b/python/extractor/tests/tokenizer/gen_tokens.py new file mode 100644 index 00000000000..52a04f79fe3 --- /dev/null +++ b/python/extractor/tests/tokenizer/gen_tokens.py @@ -0,0 +1,38 @@ +import sys +import tokenize +import token + +def printtoken(type, token, start, end, _): + # Use Python 3 tokenize style output, regardless of version + if tokenize.tok_name[type] not in ("ENCODING", "NL"): + token_range = "%d,%d-%d,%d:" % (start + end) + print("%-20s%-15s%r" % + (token_range, tokenize.tok_name[type], token) + ) + +OP_TYPES = { + "(" : token.LPAR, + ")" : token.RPAR, + "[" : token.LSQB, + "]" : token.RSQB, + "{" : token.LBRACE, + "}" : token.RBRACE, + ":" : token.COLON, + "," : token.COMMA, + "." : token.DOT, + "@" : token.AT, + } + +def main(): + readline = open(sys.argv[1], "rb").readline + if sys.version < "3": + tokenize.tokenize(readline, printtoken) + else: + for type, token, start, end, _ in tokenize.tokenize(readline): + if tokenize.tok_name[type] == "OP": + type = OP_TYPES.get(token, type) + if tokenize.tok_name[type] not in ("ENCODING", "NL"): + printtoken(type, token, start, end, _) + +if __name__ == "__main__": + main() diff --git a/python/extractor/tests/tokenizer/gen_tokens.tokens b/python/extractor/tests/tokenizer/gen_tokens.tokens new file mode 100644 index 00000000000..ab72f956525 --- /dev/null +++ b/python/extractor/tests/tokenizer/gen_tokens.tokens @@ -0,0 +1,275 @@ +1,0-1,6: NAME 'import' +1,7-1,10: NAME 'sys' +1,10-1,11: NEWLINE '\n' +2,0-2,6: NAME 'import' +2,7-2,15: NAME 'tokenize' +2,15-2,16: NEWLINE '\n' +3,0-3,6: NAME 'import' +3,7-3,12: NAME 'token' +3,12-3,13: NEWLINE '\n' +5,0-5,3: NAME 'def' +5,4-5,14: NAME 'printtoken' +5,14-5,15: LPAR '(' +5,15-5,19: NAME 'type' +5,19-5,20: COMMA ',' +5,21-5,26: NAME 'token' +5,26-5,27: COMMA ',' +5,28-5,33: NAME 'start' +5,33-5,34: COMMA ',' +5,35-5,38: NAME 'end' +5,38-5,39: COMMA ',' +5,40-5,41: NAME '_' +5,41-5,42: RPAR ')' +5,42-5,43: COLON ':' +5,44-5,45: NEWLINE '\n' +6,4-6,63: COMMENT '# Use Python 3 tokenize style output, regardless of version' +7,0-7,4: INDENT ' ' +7,4-7,6: NAME 'if' +7,7-7,15: NAME 'tokenize' +7,15-7,16: DOT '.' +7,16-7,24: NAME 'tok_name' +7,24-7,25: LSQB '[' +7,25-7,29: NAME 'type' +7,29-7,30: RSQB ']' +7,31-7,34: NAME 'not' +7,35-7,37: NAME 'in' +7,38-7,39: LPAR '(' +7,39-7,49: STRING '"ENCODING"' +7,49-7,50: COMMA ',' +7,51-7,55: STRING '"NL"' +7,55-7,56: RPAR ')' +7,56-7,57: COLON ':' +7,57-7,58: NEWLINE '\n' +8,0-8,8: INDENT ' ' +8,8-8,19: NAME 'token_range' +8,20-8,21: OP '=' +8,22-8,36: STRING '"%d,%d-%d,%d:"' +8,37-8,38: OP '%' +8,39-8,40: LPAR '(' +8,40-8,45: NAME 'start' +8,46-8,47: OP '+' +8,48-8,51: NAME 'end' +8,51-8,52: RPAR ')' +8,52-8,53: NEWLINE '\n' +9,8-9,13: NAME 'print' +9,13-9,14: LPAR '(' +9,14-9,28: STRING '"%-20s%-15s%r"' +9,29-9,30: OP '%' +10,12-10,13: LPAR '(' +10,13-10,24: NAME 'token_range' +10,24-10,25: COMMA ',' +10,26-10,34: NAME 'tokenize' +10,34-10,35: DOT '.' +10,35-10,43: NAME 'tok_name' +10,43-10,44: LSQB '[' +10,44-10,48: NAME 'type' +10,48-10,49: RSQB ']' +10,49-10,50: COMMA ',' +10,51-10,56: NAME 'token' +10,56-10,57: RPAR ')' +11,8-11,9: RPAR ')' +11,9-11,10: NEWLINE '\n' +13,0-13,0: DEDENT '' +13,0-13,0: DEDENT '' +13,0-13,8: NAME 'OP_TYPES' +13,9-13,10: OP '=' +13,11-13,12: LBRACE '{' +14,4-14,7: STRING '"("' +14,8-14,9: COLON ':' +14,10-14,15: NAME 'token' +14,15-14,16: DOT '.' +14,16-14,20: NAME 'LPAR' +14,20-14,21: COMMA ',' +15,4-15,7: STRING '")"' +15,8-15,9: COLON ':' +15,10-15,15: NAME 'token' +15,15-15,16: DOT '.' +15,16-15,20: NAME 'RPAR' +15,20-15,21: COMMA ',' +16,4-16,7: STRING '"["' +16,8-16,9: COLON ':' +16,10-16,15: NAME 'token' +16,15-16,16: DOT '.' +16,16-16,20: NAME 'LSQB' +16,20-16,21: COMMA ',' +17,4-17,7: STRING '"]"' +17,8-17,9: COLON ':' +17,10-17,15: NAME 'token' +17,15-17,16: DOT '.' +17,16-17,20: NAME 'RSQB' +17,20-17,21: COMMA ',' +18,4-18,7: STRING '"{"' +18,8-18,9: COLON ':' +18,10-18,15: NAME 'token' +18,15-18,16: DOT '.' +18,16-18,22: NAME 'LBRACE' +18,22-18,23: COMMA ',' +19,4-19,7: STRING '"}"' +19,8-19,9: COLON ':' +19,10-19,15: NAME 'token' +19,15-19,16: DOT '.' +19,16-19,22: NAME 'RBRACE' +19,22-19,23: COMMA ',' +20,4-20,7: STRING '":"' +20,8-20,9: COLON ':' +20,10-20,15: NAME 'token' +20,15-20,16: DOT '.' +20,16-20,21: NAME 'COLON' +20,21-20,22: COMMA ',' +21,4-21,7: STRING '","' +21,8-21,9: COLON ':' +21,10-21,15: NAME 'token' +21,15-21,16: DOT '.' +21,16-21,21: NAME 'COMMA' +21,21-21,22: COMMA ',' +22,4-22,7: STRING '"."' +22,8-22,9: COLON ':' +22,10-22,15: NAME 'token' +22,15-22,16: DOT '.' +22,16-22,19: NAME 'DOT' +22,19-22,20: COMMA ',' +23,4-23,7: STRING '"@"' +23,8-23,9: COLON ':' +23,10-23,15: NAME 'token' +23,15-23,16: DOT '.' +23,16-23,18: NAME 'AT' +23,18-23,19: COMMA ',' +24,4-24,5: RBRACE '}' +24,5-24,6: NEWLINE '\n' +26,0-26,3: NAME 'def' +26,4-26,8: NAME 'main' +26,8-26,9: LPAR '(' +26,9-26,10: RPAR ')' +26,10-26,11: COLON ':' +26,11-26,12: NEWLINE '\n' +27,0-27,4: INDENT ' ' +27,4-27,12: NAME 'readline' +27,13-27,14: OP '=' +27,15-27,19: NAME 'open' +27,19-27,20: LPAR '(' +27,20-27,23: NAME 'sys' +27,23-27,24: DOT '.' +27,24-27,28: NAME 'argv' +27,28-27,29: LSQB '[' +27,29-27,30: NUMBER '1' +27,30-27,31: RSQB ']' +27,31-27,32: COMMA ',' +27,33-27,37: STRING '"rb"' +27,37-27,38: RPAR ')' +27,38-27,39: DOT '.' +27,39-27,47: NAME 'readline' +27,47-27,48: NEWLINE '\n' +28,4-28,6: NAME 'if' +28,7-28,10: NAME 'sys' +28,10-28,11: DOT '.' +28,11-28,18: NAME 'version' +28,19-28,20: OP '<' +28,21-28,24: STRING '"3"' +28,24-28,25: COLON ':' +28,25-28,26: NEWLINE '\n' +29,0-29,8: INDENT ' ' +29,8-29,16: NAME 'tokenize' +29,16-29,17: DOT '.' +29,17-29,25: NAME 'tokenize' +29,25-29,26: LPAR '(' +29,26-29,34: NAME 'readline' +29,34-29,35: COMMA ',' +29,36-29,46: NAME 'printtoken' +29,46-29,47: RPAR ')' +29,47-29,48: NEWLINE '\n' +30,4-30,4: DEDENT '' +30,4-30,8: NAME 'else' +30,8-30,9: COLON ':' +30,9-30,10: NEWLINE '\n' +31,0-31,8: INDENT ' ' +31,8-31,11: NAME 'for' +31,12-31,16: NAME 'type' +31,16-31,17: COMMA ',' +31,18-31,23: NAME 'token' +31,23-31,24: COMMA ',' +31,25-31,30: NAME 'start' +31,30-31,31: COMMA ',' +31,32-31,35: NAME 'end' +31,35-31,36: COMMA ',' +31,37-31,38: NAME '_' +31,39-31,41: NAME 'in' +31,42-31,50: NAME 'tokenize' +31,50-31,51: DOT '.' +31,51-31,59: NAME 'tokenize' +31,59-31,60: LPAR '(' +31,60-31,68: NAME 'readline' +31,68-31,69: RPAR ')' +31,69-31,70: COLON ':' +31,70-31,71: NEWLINE '\n' +32,0-32,12: INDENT ' ' +32,12-32,14: NAME 'if' +32,15-32,23: NAME 'tokenize' +32,23-32,24: DOT '.' +32,24-32,32: NAME 'tok_name' +32,32-32,33: LSQB '[' +32,33-32,37: NAME 'type' +32,37-32,38: RSQB ']' +32,39-32,41: OP '==' +32,42-32,46: STRING '"OP"' +32,46-32,47: COLON ':' +32,47-32,48: NEWLINE '\n' +33,0-33,16: INDENT ' ' +33,16-33,20: NAME 'type' +33,21-33,22: OP '=' +33,23-33,31: NAME 'OP_TYPES' +33,31-33,32: DOT '.' +33,32-33,35: NAME 'get' +33,35-33,36: LPAR '(' +33,36-33,41: NAME 'token' +33,41-33,42: COMMA ',' +33,43-33,47: NAME 'type' +33,47-33,48: RPAR ')' +33,48-33,49: NEWLINE '\n' +34,12-34,12: DEDENT '' +34,12-34,14: NAME 'if' +34,15-34,23: NAME 'tokenize' +34,23-34,24: DOT '.' +34,24-34,32: NAME 'tok_name' +34,32-34,33: LSQB '[' +34,33-34,37: NAME 'type' +34,37-34,38: RSQB ']' +34,39-34,42: NAME 'not' +34,43-34,45: NAME 'in' +34,46-34,47: LPAR '(' +34,47-34,57: STRING '"ENCODING"' +34,57-34,58: COMMA ',' +34,59-34,63: STRING '"NL"' +34,63-34,64: RPAR ')' +34,64-34,65: COLON ':' +34,65-34,66: NEWLINE '\n' +35,0-35,16: INDENT ' ' +35,16-35,26: NAME 'printtoken' +35,26-35,27: LPAR '(' +35,27-35,31: NAME 'type' +35,31-35,32: COMMA ',' +35,33-35,38: NAME 'token' +35,38-35,39: COMMA ',' +35,40-35,45: NAME 'start' +35,45-35,46: COMMA ',' +35,47-35,50: NAME 'end' +35,50-35,51: COMMA ',' +35,52-35,53: NAME '_' +35,53-35,54: RPAR ')' +35,54-35,55: NEWLINE '\n' +37,0-37,0: DEDENT '' +37,0-37,0: DEDENT '' +37,0-37,0: DEDENT '' +37,0-37,0: DEDENT '' +37,0-37,2: NAME 'if' +37,3-37,11: NAME '__name__' +37,12-37,14: OP '==' +37,15-37,25: STRING '"__main__"' +37,25-37,26: COLON ':' +37,26-37,27: NEWLINE '\n' +38,0-38,4: INDENT ' ' +38,4-38,8: NAME 'main' +38,8-38,9: LPAR '(' +38,9-38,10: RPAR ')' +38,10-38,11: NEWLINE '\n' +39,0-39,0: DEDENT '' +39,0-39,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/illegal_indentation.py b/python/extractor/tests/tokenizer/illegal_indentation.py new file mode 100644 index 00000000000..ed793d1c0da --- /dev/null +++ b/python/extractor/tests/tokenizer/illegal_indentation.py @@ -0,0 +1,4 @@ +def foo(seq): + for var in seq: + body + illegal-dedent diff --git a/python/extractor/tests/tokenizer/illegal_indentation.tokens b/python/extractor/tests/tokenizer/illegal_indentation.tokens new file mode 100644 index 00000000000..bcc8d8f355e --- /dev/null +++ b/python/extractor/tests/tokenizer/illegal_indentation.tokens @@ -0,0 +1,24 @@ +1,0-1,3: NAME 'def' +1,4-1,7: NAME 'foo' +1,7-1,8: LPAR '(' +1,8-1,11: NAME 'seq' +1,11-1,12: RPAR ')' +1,12-1,13: COLON ':' +1,13-1,14: NEWLINE '\n' +2,0-2,4: INDENT ' ' +2,4-2,7: NAME 'for' +2,8-2,11: NAME 'var' +2,12-2,14: NAME 'in' +2,15-2,18: NAME 'seq' +2,18-2,19: COLON ':' +2,19-2,20: NEWLINE '\n' +3,0-3,8: INDENT ' ' +3,8-3,12: NAME 'body' +3,12-3,13: NEWLINE '\n' +4,6-4,6: ILLEGALINDENT '' +4,6-4,13: NAME 'illegal' +4,13-4,14: OP '-' +4,14-4,20: NAME 'dedent' +4,20-4,21: NEWLINE '\n' +5,0-5,0: DEDENT '' +5,0-5,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/illegal_indentation2.py b/python/extractor/tests/tokenizer/illegal_indentation2.py new file mode 100644 index 00000000000..3aa2c634df4 --- /dev/null +++ b/python/extractor/tests/tokenizer/illegal_indentation2.py @@ -0,0 +1,7 @@ +class C: + def foo(seq): + for var in seq: + body + illegal + dedent + sequence diff --git a/python/extractor/tests/tokenizer/illegal_indentation2.tokens b/python/extractor/tests/tokenizer/illegal_indentation2.tokens new file mode 100644 index 00000000000..69bf427ce70 --- /dev/null +++ b/python/extractor/tests/tokenizer/illegal_indentation2.tokens @@ -0,0 +1,34 @@ +1,0-1,5: NAME 'class' +1,6-1,7: NAME 'C' +1,7-1,8: COLON ':' +1,8-1,9: NEWLINE '\n' +2,0-2,4: INDENT ' ' +2,4-2,7: NAME 'def' +2,8-2,11: NAME 'foo' +2,11-2,12: LPAR '(' +2,12-2,15: NAME 'seq' +2,15-2,16: RPAR ')' +2,16-2,17: COLON ':' +2,17-2,18: NEWLINE '\n' +3,0-3,8: INDENT ' ' +3,8-3,11: NAME 'for' +3,12-3,15: NAME 'var' +3,16-3,18: NAME 'in' +3,19-3,22: NAME 'seq' +3,22-3,23: COLON ':' +3,23-3,24: NEWLINE '\n' +4,0-4,12: INDENT ' ' +4,12-4,16: NAME 'body' +4,16-4,17: NEWLINE '\n' +5,6-5,6: DEDENT '' +5,6-5,6: ILLEGALINDENT '' +5,6-5,13: NAME 'illegal' +5,13-5,14: NEWLINE '\n' +6,0-6,5: INDENT ' ' +6,5-6,11: NAME 'dedent' +6,11-6,12: NEWLINE '\n' +7,4-7,4: DEDENT '' +7,4-7,12: NAME 'sequence' +7,12-7,13: NEWLINE '\n' +8,0-8,0: DEDENT '' +8,0-8,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/import.py b/python/extractor/tests/tokenizer/import.py new file mode 100644 index 00000000000..58ce32f636d --- /dev/null +++ b/python/extractor/tests/tokenizer/import.py @@ -0,0 +1,2 @@ +import a +import why diff --git a/python/extractor/tests/tokenizer/import.tokens b/python/extractor/tests/tokenizer/import.tokens new file mode 100644 index 00000000000..b88471b23f2 --- /dev/null +++ b/python/extractor/tests/tokenizer/import.tokens @@ -0,0 +1,7 @@ +1,0-1,6: NAME 'import' +1,7-1,8: NAME 'a' +1,8-1,9: NEWLINE '\n' +2,0-2,6: NAME 'import' +2,7-2,10: NAME 'why' +2,10-2,11: NEWLINE '\n' +3,0-3,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/kannada.py b/python/extractor/tests/tokenizer/kannada.py new file mode 100644 index 00000000000..674af2d6e31 --- /dev/null +++ b/python/extractor/tests/tokenizer/kannada.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +def à²à²¨à²¾à²¦à²°à³‚_ಮಾಡà³(): + print('à²à²¨à³‹ ಮಾಡಿದೆ') + + +à²à²¨à²¾à²¦à²°à³‚_ಮಾಡà³() diff --git a/python/extractor/tests/tokenizer/kannada.tokens b/python/extractor/tests/tokenizer/kannada.tokens new file mode 100644 index 00000000000..b96a64ad3d1 --- /dev/null +++ b/python/extractor/tests/tokenizer/kannada.tokens @@ -0,0 +1,19 @@ +1,0-1,23: COMMENT '# -*- coding: utf-8 -*-' +3,0-3,3: NAME 'def' +3,4-3,15: NAME 'à²à²¨à²¾à²¦à²°à³‚_ಮಾಡà³' +3,15-3,16: LPAR '(' +3,16-3,17: RPAR ')' +3,17-3,18: COLON ':' +3,18-3,19: NEWLINE '\n' +4,0-4,4: INDENT ' ' +4,4-4,9: NAME 'print' +4,9-4,10: LPAR '(' +4,10-4,22: STRING '\'à²à²¨à³‹ ಮಾಡಿದೆ\'' +4,22-4,23: RPAR ')' +4,23-4,24: NEWLINE '\n' +7,0-7,0: DEDENT '' +7,0-7,11: NAME 'à²à²¨à²¾à²¦à²°à³‚_ಮಾಡà³' +7,11-7,12: LPAR '(' +7,12-7,13: RPAR ')' +7,13-7,14: NEWLINE '\n' +8,0-8,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/latin.py b/python/extractor/tests/tokenizer/latin.py new file mode 100644 index 00000000000..538a7b90e93 --- /dev/null +++ b/python/extractor/tests/tokenizer/latin.py @@ -0,0 +1,4 @@ +"Any old stuff can go here" +# -*- coding: latin1 -*- +# Günter + diff --git a/python/extractor/tests/tokenizer/latin.tokens b/python/extractor/tests/tokenizer/latin.tokens new file mode 100644 index 00000000000..c7158916808 --- /dev/null +++ b/python/extractor/tests/tokenizer/latin.tokens @@ -0,0 +1,5 @@ +1,0-1,27: STRING '"Any old stuff can go here"' +1,27-1,28: NEWLINE '\n' +2,0-2,24: COMMENT '# -*- coding: latin1 -*-' +3,0-3,8: COMMENT '# Günter' +5,0-5,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/numbers.py b/python/extractor/tests/tokenizer/numbers.py new file mode 100644 index 00000000000..d57fa12ef05 --- /dev/null +++ b/python/extractor/tests/tokenizer/numbers.py @@ -0,0 +1,83 @@ + +#Some negative numbers + +-1 +-10000000000000000 +-1.0 +-3.0e17 + +-(1) +-(10000000000000000) +-(1.0) +-(3.0e17) + +(-1) +(-10000000000000000) +(-1.0) +(-3.0e17) + +-1j + +-3.7e12j + +#Some other numbers +0.058823529630899429 + +1e-06 +.9999999 +0xffffff +1e10 +1. +2.79252680 +0x0001000 +4987312561856745907287624786230562734672583763984576267 + +#Octal both styles +0777 +0o777 + +#Python2 longs +0 +0L +5L +-2L +498731256185674590728762478623056L + +0xfffffffL +0xeeeeeeeeeeeeeeeeL + +0b00010101011111111111L +0o77777777777L +0777777777777L +0j +0_0234j + +0e0 + +#Valid uses of underscore: + +1_1 +1_2_3.4_5_6e7_8_9 +0b1_1 +0o1_1 +0x1_1 + +0b_010 +0o_010 +0x_010 + +#Invalid uses of underscore: + +1__3 +2e_5 +2e+_5 +123_ + +#Valid prefixed zero: + +0_0 +009. +009e005 +00123 + +1 if 1else 0 diff --git a/python/extractor/tests/tokenizer/numbers.tokens b/python/extractor/tests/tokenizer/numbers.tokens new file mode 100644 index 00000000000..81d210f6baa --- /dev/null +++ b/python/extractor/tests/tokenizer/numbers.tokens @@ -0,0 +1,156 @@ +2,0-2,22: COMMENT '#Some negative numbers' +4,0-4,1: OP '-' +4,1-4,2: NUMBER '1' +4,2-4,3: NEWLINE '\n' +5,0-5,1: OP '-' +5,1-5,18: NUMBER '10000000000000000' +5,18-5,19: NEWLINE '\n' +6,0-6,1: OP '-' +6,1-6,4: NUMBER '1.0' +6,4-6,5: NEWLINE '\n' +7,0-7,1: OP '-' +7,1-7,7: NUMBER '3.0e17' +7,7-7,8: NEWLINE '\n' +9,0-9,1: OP '-' +9,1-9,2: LPAR '(' +9,2-9,3: NUMBER '1' +9,3-9,4: RPAR ')' +9,4-9,5: NEWLINE '\n' +10,0-10,1: OP '-' +10,1-10,2: LPAR '(' +10,2-10,19: NUMBER '10000000000000000' +10,19-10,20: RPAR ')' +10,20-10,21: NEWLINE '\n' +11,0-11,1: OP '-' +11,1-11,2: LPAR '(' +11,2-11,5: NUMBER '1.0' +11,5-11,6: RPAR ')' +11,6-11,7: NEWLINE '\n' +12,0-12,1: OP '-' +12,1-12,2: LPAR '(' +12,2-12,8: NUMBER '3.0e17' +12,8-12,9: RPAR ')' +12,9-12,10: NEWLINE '\n' +14,0-14,1: LPAR '(' +14,1-14,2: OP '-' +14,2-14,3: NUMBER '1' +14,3-14,4: RPAR ')' +14,4-14,5: NEWLINE '\n' +15,0-15,1: LPAR '(' +15,1-15,2: OP '-' +15,2-15,19: NUMBER '10000000000000000' +15,19-15,20: RPAR ')' +15,20-15,21: NEWLINE '\n' +16,0-16,1: LPAR '(' +16,1-16,2: OP '-' +16,2-16,5: NUMBER '1.0' +16,5-16,6: RPAR ')' +16,6-16,7: NEWLINE '\n' +17,0-17,1: LPAR '(' +17,1-17,2: OP '-' +17,2-17,8: NUMBER '3.0e17' +17,8-17,9: RPAR ')' +17,9-17,10: NEWLINE '\n' +19,0-19,1: OP '-' +19,1-19,3: NUMBER '1j' +19,3-19,4: NEWLINE '\n' +21,0-21,1: OP '-' +21,1-21,8: NUMBER '3.7e12j' +21,8-21,9: NEWLINE '\n' +23,0-23,19: COMMENT '#Some other numbers' +24,0-24,20: NUMBER '0.058823529630899429' +24,20-24,21: NEWLINE '\n' +26,0-26,5: NUMBER '1e-06' +26,5-26,6: NEWLINE '\n' +27,0-27,8: NUMBER '.9999999' +27,8-27,9: NEWLINE '\n' +28,0-28,8: NUMBER '0xffffff' +28,8-28,9: NEWLINE '\n' +29,0-29,4: NUMBER '1e10' +29,4-29,5: NEWLINE '\n' +30,0-30,2: NUMBER '1.' +30,2-30,3: NEWLINE '\n' +31,0-31,10: NUMBER '2.79252680' +31,10-31,11: NEWLINE '\n' +32,0-32,9: NUMBER '0x0001000' +32,9-32,10: NEWLINE '\n' +33,0-33,55: NUMBER '4987312561856745907287624786230562734672583763984576267' +33,55-33,56: NEWLINE '\n' +35,0-35,18: COMMENT '#Octal both styles' +36,0-36,4: NUMBER '0777' +36,4-36,5: NEWLINE '\n' +37,0-37,5: NUMBER '0o777' +37,5-37,6: NEWLINE '\n' +39,0-39,14: COMMENT '#Python2 longs' +40,0-40,1: NUMBER '0' +40,1-40,2: NEWLINE '\n' +41,0-41,2: NUMBER '0L' +41,2-41,3: NEWLINE '\n' +42,0-42,2: NUMBER '5L' +42,2-42,3: NEWLINE '\n' +43,0-43,1: OP '-' +43,1-43,3: NUMBER '2L' +43,3-43,4: NEWLINE '\n' +44,0-44,34: NUMBER '498731256185674590728762478623056L' +44,34-44,35: NEWLINE '\n' +46,0-46,10: NUMBER '0xfffffffL' +46,10-46,11: NEWLINE '\n' +47,0-47,19: NUMBER '0xeeeeeeeeeeeeeeeeL' +47,19-47,20: NEWLINE '\n' +49,0-49,23: NUMBER '0b00010101011111111111L' +49,23-49,24: NEWLINE '\n' +50,0-50,14: NUMBER '0o77777777777L' +50,14-50,15: NEWLINE '\n' +51,0-51,14: NUMBER '0777777777777L' +51,14-51,15: NEWLINE '\n' +52,0-52,2: NUMBER '0j' +52,2-52,3: NEWLINE '\n' +53,0-53,7: NUMBER '0_0234j' +53,7-53,8: NEWLINE '\n' +55,0-55,3: NUMBER '0e0' +55,3-55,4: NEWLINE '\n' +57,0-57,26: COMMENT '#Valid uses of underscore:' +59,0-59,3: NUMBER '1_1' +59,3-59,4: NEWLINE '\n' +60,0-60,17: NUMBER '1_2_3.4_5_6e7_8_9' +60,17-60,18: NEWLINE '\n' +61,0-61,5: NUMBER '0b1_1' +61,5-61,6: NEWLINE '\n' +62,0-62,5: NUMBER '0o1_1' +62,5-62,6: NEWLINE '\n' +63,0-63,5: NUMBER '0x1_1' +63,5-63,6: NEWLINE '\n' +65,0-65,6: NUMBER '0b_010' +65,6-65,7: NEWLINE '\n' +66,0-66,6: NUMBER '0o_010' +66,6-66,7: NEWLINE '\n' +67,0-67,6: NUMBER '0x_010' +67,6-67,7: NEWLINE '\n' +69,0-69,28: COMMENT '#Invalid uses of underscore:' +71,0-71,3: ERRORTOKEN '1__' +71,3-71,4: NUMBER '3' +71,4-71,5: NEWLINE '\n' +72,0-72,3: ERRORTOKEN '2e_' +72,3-72,4: NUMBER '5' +72,4-72,5: NEWLINE '\n' +73,0-73,4: ERRORTOKEN '2e+_' +73,4-73,5: NUMBER '5' +73,5-73,6: NEWLINE '\n' +74,0-74,5: ERRORTOKEN '123_\n' +74,5-74,6: NEWLINE '\n' +75,0-75,21: COMMENT '#Valid prefixed zero:' +77,0-77,3: NUMBER '0_0' +77,3-77,4: NEWLINE '\n' +78,0-78,4: NUMBER '009.' +78,4-78,5: NEWLINE '\n' +79,0-79,7: NUMBER '009e005' +79,7-79,8: NEWLINE '\n' +80,0-80,5: NUMBER '00123' +80,5-80,6: NEWLINE '\n' +82,0-82,1: NUMBER '1' +82,2-82,4: NAME 'if' +82,5-82,6: NUMBER '1' +82,6-82,10: NAME 'else' +82,11-82,12: NUMBER '0' +82,12-82,13: NEWLINE '\n' +83,0-83,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/pep484.py b/python/extractor/tests/tokenizer/pep484.py new file mode 100644 index 00000000000..d44a11b63c9 --- /dev/null +++ b/python/extractor/tests/tokenizer/pep484.py @@ -0,0 +1,19 @@ +#PEP 484 style annotations. + +def func(callee_type: CallableType, + formal_to_actual: List[List[int]], + strict: bool = True) -> List[Type]: + pass + + +def func(self, + name: str, + args: List[str], + *, + cwd: str = None, + env: Dict[str, str] = None) -> None: + pass + +def specials(self, *varargs: vanno, **kwargs: kwanno): + pass + diff --git a/python/extractor/tests/tokenizer/pep484.tokens b/python/extractor/tests/tokenizer/pep484.tokens new file mode 100644 index 00000000000..4faaad6ca74 --- /dev/null +++ b/python/extractor/tests/tokenizer/pep484.tokens @@ -0,0 +1,100 @@ +1,0-1,27: COMMENT '#PEP 484 style annotations.' +3,0-3,3: NAME 'def' +3,4-3,8: NAME 'func' +3,8-3,9: LPAR '(' +3,9-3,20: NAME 'callee_type' +3,20-3,21: COLON ':' +3,22-3,34: NAME 'CallableType' +3,34-3,35: COMMA ',' +4,9-4,25: NAME 'formal_to_actual' +4,25-4,26: COLON ':' +4,27-4,31: NAME 'List' +4,31-4,32: LSQB '[' +4,32-4,36: NAME 'List' +4,36-4,37: LSQB '[' +4,37-4,40: NAME 'int' +4,40-4,41: RSQB ']' +4,41-4,42: RSQB ']' +4,42-4,43: COMMA ',' +5,9-5,15: NAME 'strict' +5,15-5,16: COLON ':' +5,17-5,21: NAME 'bool' +5,22-5,23: OP '=' +5,24-5,28: NAME 'True' +5,28-5,29: RPAR ')' +5,30-5,32: RARROW '->' +5,33-5,37: NAME 'List' +5,37-5,38: LSQB '[' +5,38-5,42: NAME 'Type' +5,42-5,43: RSQB ']' +5,43-5,44: COLON ':' +5,44-5,45: NEWLINE '\n' +6,0-6,4: INDENT ' ' +6,4-6,8: NAME 'pass' +6,8-6,9: NEWLINE '\n' +9,0-9,0: DEDENT '' +9,0-9,3: NAME 'def' +9,4-9,8: NAME 'func' +9,8-9,9: LPAR '(' +9,9-9,13: NAME 'self' +9,13-9,14: COMMA ',' +10,9-10,13: NAME 'name' +10,13-10,14: COLON ':' +10,15-10,18: NAME 'str' +10,18-10,19: COMMA ',' +11,9-11,13: NAME 'args' +11,13-11,14: COLON ':' +11,15-11,19: NAME 'List' +11,19-11,20: LSQB '[' +11,20-11,23: NAME 'str' +11,23-11,24: RSQB ']' +11,24-11,25: COMMA ',' +12,9-12,10: OP '*' +12,10-12,11: COMMA ',' +13,9-13,12: NAME 'cwd' +13,12-13,13: COLON ':' +13,14-13,17: NAME 'str' +13,18-13,19: OP '=' +13,20-13,24: NAME 'None' +13,24-13,25: COMMA ',' +14,9-14,12: NAME 'env' +14,12-14,13: COLON ':' +14,14-14,18: NAME 'Dict' +14,18-14,19: LSQB '[' +14,19-14,22: NAME 'str' +14,22-14,23: COMMA ',' +14,24-14,27: NAME 'str' +14,27-14,28: RSQB ']' +14,29-14,30: OP '=' +14,31-14,35: NAME 'None' +14,35-14,36: RPAR ')' +14,37-14,39: RARROW '->' +14,40-14,44: NAME 'None' +14,44-14,45: COLON ':' +14,45-14,46: NEWLINE '\n' +15,0-15,4: INDENT ' ' +15,4-15,8: NAME 'pass' +15,8-15,9: NEWLINE '\n' +17,0-17,0: DEDENT '' +17,0-17,3: NAME 'def' +17,4-17,12: NAME 'specials' +17,12-17,13: LPAR '(' +17,13-17,17: NAME 'self' +17,17-17,18: COMMA ',' +17,19-17,20: OP '*' +17,20-17,27: NAME 'varargs' +17,27-17,28: COLON ':' +17,29-17,34: NAME 'vanno' +17,34-17,35: COMMA ',' +17,36-17,38: OP '**' +17,38-17,44: NAME 'kwargs' +17,44-17,45: COLON ':' +17,46-17,52: NAME 'kwanno' +17,52-17,53: RPAR ')' +17,53-17,54: COLON ':' +17,54-17,55: NEWLINE '\n' +18,0-18,4: INDENT ' ' +18,4-18,8: NAME 'pass' +18,8-18,9: NEWLINE '\n' +20,0-20,0: DEDENT '' +20,0-20,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/shift_jis.py b/python/extractor/tests/tokenizer/shift_jis.py new file mode 100644 index 00000000000..89b7b91fd8c --- /dev/null +++ b/python/extractor/tests/tokenizer/shift_jis.py @@ -0,0 +1,11 @@ +# encoding:shift-jis + +#This is copied from the Python test library copyright PSF. + +""" +Python ‚ÌŠJ”­‚ÍA1990 ”N‚²‚ë‚©‚çŠJŽn‚³‚ê‚Ä‚¢‚Ü‚·B +ŠJ”­ŽÒ‚Ì Guido van Rossum ‚Í‹³ˆç—p‚̃vƒƒOƒ‰ƒ~ƒ“ƒOŒ¾ŒêuABCv‚ÌŠJ”­‚ÉŽQ‰Á‚µ‚Ä‚¢‚Ü‚µ‚½‚ªAABC ‚ÍŽÀ—pã‚Ì–Ú“I‚ɂ͂ ‚Ü‚è“K‚µ‚Ä‚¢‚Ü‚¹‚ñ‚Å‚µ‚½B +‚±‚̂悤‚È”wŒi‚©‚綂܂ꂽ Python ‚ÌŒ¾ŒêÝŒv‚ÍAuƒVƒ“ƒvƒ‹v‚ÅuK“¾‚ª—eˆÕv‚Æ‚¢‚¤–Ú•W‚Éd“_‚ª’u‚©‚ê‚Ä‚¢‚Ü‚·B +‘½‚­‚̃XƒNƒŠƒvƒgŒnŒ¾Œê‚ł̓†[ƒU‚Ì–Úæ‚Ì—˜•Ö«‚ð—D悵‚ÄFX‚È‹@”\‚ðŒ¾Œê—v‘f‚Æ‚µ‚ÄŽæ‚è“ü‚ê‚éꇂª‘½‚¢‚̂ł·‚ªAPython ‚ł͂»‚¤‚¢‚Á‚½¬×H‚ª’ljÁ‚³‚ê‚邱‚Ƃ͂ ‚܂肠‚è‚Ü‚¹‚ñB +Œ¾ŒêŽ©‘̂̋@”\‚ÍŬŒÀ‚ɉŸ‚³‚¦A•K—v‚È‹@”\‚ÍŠg’£ƒ‚ƒWƒ…[ƒ‹‚Æ‚µ‚ĒljÁ‚·‚éA‚Æ‚¢‚¤‚Ì‚ª Python ‚̃|ƒŠƒV[‚Å‚·B +""" diff --git a/python/extractor/tests/tokenizer/shift_jis.tokens b/python/extractor/tests/tokenizer/shift_jis.tokens new file mode 100644 index 00000000000..cdfdc6ba1b2 --- /dev/null +++ b/python/extractor/tests/tokenizer/shift_jis.tokens @@ -0,0 +1,5 @@ +1,0-1,20: COMMENT '# encoding:shift-jis' +3,0-3,59: COMMENT '#This is copied from the Python test library copyright PSF.' +5,0-11,3: STRING '"""\nPython ã®é–‹ç™ºã¯ã€1990 å¹´ã”ã‚ã‹ã‚‰é–‹å§‹ã•れã¦ã„ã¾ã™ã€‚\n開発者㮠Guido van Rossum ã¯æ•™è‚²ç”¨ã®ãƒ—ログラミング言語「ABCã€ã®é–‹ç™ºã«å‚加ã—ã¦ã„ã¾ã—ãŸãŒã€ABC ã¯å®Ÿç”¨ä¸Šã®ç›®çš„ã«ã¯ã‚ã¾ã‚Šé©ã—ã¦ã„ã¾ã›ã‚“ã§ã—ãŸã€‚\nã“ã®ã‚ˆã†ãªèƒŒæ™¯ã‹ã‚‰ç”Ÿã¾ã‚ŒãŸ Python ã®è¨€èªžè¨­è¨ˆã¯ã€ã€Œã‚·ãƒ³ãƒ—ルã€ã§ã€Œç¿’å¾—ãŒå®¹æ˜“ã€ã¨ã„ã†ç›®æ¨™ã«é‡ç‚¹ãŒç½®ã‹ã‚Œã¦ã„ã¾ã™ã€‚\n多ãã®ã‚¹ã‚¯ãƒªãƒ—ト系言語ã§ã¯ãƒ¦ãƒ¼ã‚¶ã®ç›®å…ˆã®åˆ©ä¾¿æ€§ã‚’優先ã—ã¦è‰²ã€…ãªæ©Ÿèƒ½ã‚’言語è¦ç´ ã¨ã—ã¦å–り入れる場åˆãŒå¤šã„ã®ã§ã™ãŒã€Python ã§ã¯ãã†ã„ã£ãŸå°ç´°å·¥ãŒè¿½åŠ ã•れるã“ã¨ã¯ã‚ã¾ã‚Šã‚りã¾ã›ã‚“。\nè¨€èªžè‡ªä½“ã®æ©Ÿèƒ½ã¯æœ€å°é™ã«æŠ¼ã•ãˆã€å¿…è¦ãªæ©Ÿèƒ½ã¯æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ã—ã¦è¿½åŠ ã™ã‚‹ã€ã¨ã„ã†ã®ãŒ Python ã®ãƒãƒªã‚·ãƒ¼ã§ã™ã€‚\n"""' +11,3-11,4: NEWLINE '\n' +12,0-12,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/strings.py b/python/extractor/tests/tokenizer/strings.py new file mode 100644 index 00000000000..3d4a8ab2014 --- /dev/null +++ b/python/extractor/tests/tokenizer/strings.py @@ -0,0 +1,112 @@ + + +#Raw + +r'012345678' +r'(\033|~{)' +r'\A[+-]?\d+' +r'(?P[\w]+)|' +r'\|\[\][123]|\{\}' +r'^.$' +r'[^A-Z]' + +# With escapes + +'\n' +"\'" +'\'' +"\"" +"\t\l\b" + + +#F-strings + +f'' +rf'hello' +fr'hello' +f'a{1+1}b' +f'{x}{y}a{z}' +#This is not legal in CPython, but we tokenize it anyway. +f'a{'x'+"y"}b' + +#Multiline f-string +f''' + In f-string expressions act as if parenthesised +{ + x + + y & + z +} +end +''' + +#Multi-line + + +r""" Single quotation character with multi-line + +"a", 'b', "", '' +.... +""" + +r''' Single quotation character with multi-line + +"a", 'b', "", '' +.... +''' + +#f-string conversions +!a +!s +!r + +f"{k}={v!r}" + +#Implicit concatenation +(f'{expr} text ' + 'continuation' + f'and{v}' +) + +#prefixes + +u'{}\r{}{:<{width}}' +u'{}\r{}{:<{}}' + +#f-strings with format specifier +f'result: {value:0.2f}' +f'result: {value:{width}.{precision}}' + + +f"Too {'many' if alen > elen else 'few'} parameters for {cls};" + +# f-strings have special escaping rules for curly-brackets +f'This should work \{foo}' +rf'This should work \{foo}' + +f'\}' # syntax error (we currently don't report this) +f'\}}' # ok + + +# f-strings with unicode literals of the form `\N{...}` +f'{degrees:0.0f}\N{DEGREE SIGN}' +f"{degrees:0.0f}\N{DEGREE SIGN}" +f'''{degrees:0.0f}\N{DEGREE SIGN}''' +f"""{degrees:0.0f}\N{DEGREE SIGN}""" + +# double curlies in f-strings with various kinds of quoting +f'{{ {foo} }}' +f"{{ {foo} }}" +f'''{{ {foo} }}''' +f"""{{ {foo} }}""" + +# Empty f-strings +f'' +f"" +f'''''' +f"""""" + + +r'\NUL' # _Not_ a named unicode escape (`\N{...}`) + +f'res: {val:{width:0}.{prec:1}}' diff --git a/python/extractor/tests/tokenizer/strings.tokens b/python/extractor/tests/tokenizer/strings.tokens new file mode 100644 index 00000000000..76e63bc790b --- /dev/null +++ b/python/extractor/tests/tokenizer/strings.tokens @@ -0,0 +1,211 @@ +3,0-3,4: COMMENT '#Raw' +5,0-5,12: STRING 'r\'012345678\'' +5,12-5,13: NEWLINE '\n' +6,0-6,12: STRING 'r\'(\\033|~{)\'' +6,12-6,13: NEWLINE '\n' +7,0-7,13: STRING 'r\'\\A[+-]?\\d+\'' +7,13-7,14: NEWLINE '\n' +8,0-8,19: STRING 'r\'(?P[\\w]+)|\'' +8,19-8,20: NEWLINE '\n' +9,0-9,19: STRING 'r\'\\|\\[\\][123]|\\{\\}\'' +9,19-9,20: NEWLINE '\n' +10,0-10,6: STRING 'r\'^.$\'' +10,6-10,7: NEWLINE '\n' +11,0-11,9: STRING 'r\'[^A-Z]\'' +11,9-11,10: NEWLINE '\n' +13,0-13,14: COMMENT '# With escapes' +15,0-15,4: STRING '\'\\n\'' +15,4-15,5: NEWLINE '\n' +16,0-16,4: STRING '"\\\'"' +16,4-16,5: NEWLINE '\n' +17,0-17,4: STRING '\'\\\'\'' +17,4-17,5: NEWLINE '\n' +18,0-18,4: STRING '"\\""' +18,4-18,5: NEWLINE '\n' +19,0-19,8: STRING '"\\t\\l\\b"' +19,8-19,9: NEWLINE '\n' +22,0-22,10: COMMENT '#F-strings' +24,0-24,3: STRING 'f\'\'' +24,3-24,4: NEWLINE '\n' +25,0-25,9: STRING 'rf\'hello\'' +25,9-25,10: NEWLINE '\n' +26,0-26,9: STRING 'fr\'hello\'' +26,9-26,10: NEWLINE '\n' +27,0-27,4: FSTRING_START 'f\'a{' +27,4-27,5: NUMBER '1' +27,5-27,6: OP '+' +27,6-27,7: NUMBER '1' +27,7-27,10: FSTRING_END '}b\'' +27,10-27,11: NEWLINE '\n' +28,0-28,3: FSTRING_START 'f\'{' +28,3-28,4: NAME 'x' +28,4-28,6: FSTRING_MID '}{' +28,6-28,7: NAME 'y' +28,7-28,10: FSTRING_MID '}a{' +28,10-28,11: NAME 'z' +28,11-28,13: FSTRING_END '}\'' +28,13-28,14: NEWLINE '\n' +29,0-29,57: COMMENT '#This is not legal in CPython, but we tokenize it anyway.' +30,0-30,4: FSTRING_START 'f\'a{' +30,4-30,7: STRING '\'x\'' +30,7-30,8: OP '+' +30,8-30,11: STRING '"y"' +30,11-30,14: FSTRING_END '}b\'' +30,14-30,15: NEWLINE '\n' +32,0-32,19: COMMENT '#Multiline f-string' +33,0-35,1: FSTRING_START 'f\'\'\'\n In f-string expressions act as if parenthesised\n{' +36,4-36,5: NAME 'x' +36,6-36,7: OP '+' +37,4-37,5: NAME 'y' +37,6-37,7: OP '&' +38,6-38,7: NAME 'z' +39,0-41,3: FSTRING_END '}\nend\n\'\'\'' +41,3-41,4: NEWLINE '\n' +43,0-43,11: COMMENT '#Multi-line' +46,0-50,3: STRING 'r""" Single quotation character with multi-line\n\n"a", \'b\', "", \'\'\n....\n"""' +50,3-50,4: NEWLINE '\n' +52,0-56,3: STRING 'r\'\'\' Single quotation character with multi-line\n\n"a", \'b\', "", \'\'\n....\n\'\'\'' +56,3-56,4: NEWLINE '\n' +58,0-58,21: COMMENT '#f-string conversions' +59,0-59,2: CONVERSION '!a' +59,2-59,3: NEWLINE '\n' +60,0-60,2: CONVERSION '!s' +60,2-60,3: NEWLINE '\n' +61,0-61,2: CONVERSION '!r' +61,2-61,3: NEWLINE '\n' +63,0-63,3: FSTRING_START 'f"{' +63,3-63,4: NAME 'k' +63,4-63,7: FSTRING_MID '}={' +63,7-63,8: NAME 'v' +63,8-63,10: CONVERSION '!r' +63,10-63,12: FSTRING_END '}"' +63,12-63,13: NEWLINE '\n' +65,0-65,23: COMMENT '#Implicit concatenation' +66,0-66,1: LPAR '(' +66,1-66,4: FSTRING_START 'f\'{' +66,4-66,8: NAME 'expr' +66,8-66,16: FSTRING_END '} text \'' +67,4-67,18: STRING '\'continuation\'' +68,4-68,10: FSTRING_START 'f\'and{' +68,10-68,11: NAME 'v' +68,11-68,13: FSTRING_END '}\'' +69,0-69,1: RPAR ')' +69,1-69,2: NEWLINE '\n' +71,0-71,9: COMMENT '#prefixes' +73,0-73,20: STRING 'u\'{}\\r{}{:<{width}}\'' +73,20-73,21: NEWLINE '\n' +74,0-74,15: STRING 'u\'{}\\r{}{:<{}}\'' +74,15-74,16: NEWLINE '\n' +76,0-76,32: COMMENT '#f-strings with format specifier' +77,0-77,11: FSTRING_START 'f\'result: {' +77,11-77,16: NAME 'value' +77,16-77,17: COLON ':' +77,17-77,21: FSTRING_SPEC '0.2f' +77,21-77,23: FSTRING_END '}\'' +77,23-77,24: NEWLINE '\n' +78,0-78,11: FSTRING_START 'f\'result: {' +78,11-78,16: NAME 'value' +78,16-78,17: COLON ':' +78,17-78,18: FSTRING_SPEC '{' +78,18-78,23: NAME 'width' +78,23-78,26: FSTRING_SPEC '}.{' +78,26-78,35: NAME 'precision' +78,35-78,36: FSTRING_SPEC '}' +78,36-78,38: FSTRING_END '}\'' +78,38-78,39: NEWLINE '\n' +81,0-81,7: FSTRING_START 'f"Too {' +81,7-81,13: STRING '\'many\'' +81,14-81,16: NAME 'if' +81,17-81,21: NAME 'alen' +81,22-81,23: OP '>' +81,24-81,28: NAME 'elen' +81,29-81,33: NAME 'else' +81,34-81,39: STRING '\'few\'' +81,39-81,57: FSTRING_MID '} parameters for {' +81,57-81,60: NAME 'cls' +81,60-81,63: FSTRING_END '};"' +81,63-81,64: NEWLINE '\n' +83,0-83,58: COMMENT '# f-strings have special escaping rules for curly-brackets' +84,0-84,21: FSTRING_START 'f\'This should work \\{' +84,21-84,24: NAME 'foo' +84,24-84,26: FSTRING_END '}\'' +84,26-84,27: NEWLINE '\n' +85,0-85,22: FSTRING_START 'rf\'This should work \\{' +85,22-85,25: NAME 'foo' +85,25-85,27: FSTRING_END '}\'' +85,27-85,28: NEWLINE '\n' +87,0-87,5: STRING 'f\'\\}\'' +87,6-87,53: COMMENT '# syntax error (we currently don\'t report this)' +87,53-87,54: NEWLINE '\n' +88,0-88,6: STRING 'f\'\\}}\'' +88,7-88,11: COMMENT '# ok' +88,11-88,12: NEWLINE '\n' +91,0-91,55: COMMENT '# f-strings with unicode literals of the form `\\N{...}`' +92,0-92,3: FSTRING_START 'f\'{' +92,3-92,10: NAME 'degrees' +92,10-92,11: COLON ':' +92,11-92,15: FSTRING_SPEC '0.0f' +92,15-92,32: FSTRING_END '}\\N{DEGREE SIGN}\'' +92,32-92,33: NEWLINE '\n' +93,0-93,3: FSTRING_START 'f"{' +93,3-93,10: NAME 'degrees' +93,10-93,11: COLON ':' +93,11-93,15: FSTRING_SPEC '0.0f' +93,15-93,32: FSTRING_END '}\\N{DEGREE SIGN}"' +93,32-93,33: NEWLINE '\n' +94,0-94,5: FSTRING_START 'f\'\'\'{' +94,5-94,12: NAME 'degrees' +94,12-94,13: COLON ':' +94,13-94,17: FSTRING_SPEC '0.0f' +94,17-94,36: FSTRING_END '}\\N{DEGREE SIGN}\'\'\'' +94,36-94,37: NEWLINE '\n' +95,0-95,5: FSTRING_START 'f"""{' +95,5-95,12: NAME 'degrees' +95,12-95,13: COLON ':' +95,13-95,17: FSTRING_SPEC '0.0f' +95,17-95,36: FSTRING_END '}\\N{DEGREE SIGN}"""' +95,36-95,37: NEWLINE '\n' +97,0-97,59: COMMENT '# double curlies in f-strings with various kinds of quoting' +98,0-98,6: FSTRING_START 'f\'{{ {' +98,6-98,9: NAME 'foo' +98,9-98,14: FSTRING_END '} }}\'' +98,14-98,15: NEWLINE '\n' +99,0-99,6: FSTRING_START 'f"{{ {' +99,6-99,9: NAME 'foo' +99,9-99,14: FSTRING_END '} }}"' +99,14-99,15: NEWLINE '\n' +100,0-100,8: FSTRING_START 'f\'\'\'{{ {' +100,8-100,11: NAME 'foo' +100,11-100,18: FSTRING_END '} }}\'\'\'' +100,18-100,19: NEWLINE '\n' +101,0-101,8: FSTRING_START 'f"""{{ {' +101,8-101,11: NAME 'foo' +101,11-101,18: FSTRING_END '} }}"""' +101,18-101,19: NEWLINE '\n' +103,0-103,17: COMMENT '# Empty f-strings' +104,0-104,3: STRING 'f\'\'' +104,3-104,4: NEWLINE '\n' +105,0-105,3: STRING 'f""' +105,3-105,4: NEWLINE '\n' +106,0-106,7: STRING 'f\'\'\'\'\'\'' +106,7-106,8: NEWLINE '\n' +107,0-107,7: STRING 'f""""""' +107,7-107,8: NEWLINE '\n' +110,0-110,7: STRING 'r\'\\NUL\'' +110,8-110,50: COMMENT '# _Not_ a named unicode escape (`\\N{...}`)' +110,50-110,51: NEWLINE '\n' +112,0-112,8: FSTRING_START 'f\'res: {' +112,8-112,11: NAME 'val' +112,11-112,12: COLON ':' +112,12-112,13: FSTRING_SPEC '{' +112,13-112,18: NAME 'width' +112,18-112,19: COLON ':' +112,19-112,20: NUMBER '0' +112,20-112,23: FSTRING_SPEC '}.{' +112,23-112,27: NAME 'prec' +112,27-112,28: COLON ':' +112,28-112,29: NUMBER '1' +112,29-112,30: FSTRING_SPEC '}' +112,30-112,32: FSTRING_END '}\'' +112,32-112,33: NEWLINE '\n' +113,0-113,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/tab.py b/python/extractor/tests/tokenizer/tab.py new file mode 100644 index 00000000000..a36eda5b341 --- /dev/null +++ b/python/extractor/tests/tokenizer/tab.py @@ -0,0 +1,3 @@ + +class C(object): + pass diff --git a/python/extractor/tests/tokenizer/tab.tokens b/python/extractor/tests/tokenizer/tab.tokens new file mode 100644 index 00000000000..8ef7901a204 --- /dev/null +++ b/python/extractor/tests/tokenizer/tab.tokens @@ -0,0 +1,12 @@ +2,0-2,5: NAME 'class' +2,6-2,7: NAME 'C' +2,7-2,8: LPAR '(' +2,8-2,14: NAME 'object' +2,14-2,15: RPAR ')' +2,15-2,16: COLON ':' +2,16-2,17: NEWLINE '\n' +3,0-3,1: INDENT '\t' +3,1-3,5: NAME 'pass' +3,5-3,6: NEWLINE '\n' +4,0-4,0: DEDENT '' +4,0-4,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/temp.tokens b/python/extractor/tests/tokenizer/temp.tokens new file mode 100644 index 00000000000..63beaf05bc1 --- /dev/null +++ b/python/extractor/tests/tokenizer/temp.tokens @@ -0,0 +1,84 @@ +2,0-2,22: COMMENT '#Some negative numbers' +4,0-4,1: OP '-' +4,1-4,2: NUMBER '1' +4,2-4,3: NEWLINE '\n' +5,0-5,1: OP '-' +5,1-5,18: NUMBER '10000000000000000' +5,18-5,19: NEWLINE '\n' +6,0-6,1: OP '-' +6,1-6,4: NUMBER '1.0' +6,4-6,5: NEWLINE '\n' +7,0-7,1: OP '-' +7,1-7,7: NUMBER '3.0e17' +7,7-7,8: NEWLINE '\n' +9,0-9,1: OP '-' +9,1-9,2: LPAR '(' +9,2-9,3: NUMBER '1' +9,3-9,4: RPAR ')' +9,4-9,5: NEWLINE '\n' +10,0-10,1: OP '-' +10,1-10,2: LPAR '(' +10,2-10,19: NUMBER '10000000000000000' +10,19-10,20: RPAR ')' +10,20-10,21: NEWLINE '\n' +11,0-11,1: OP '-' +11,1-11,2: LPAR '(' +11,2-11,5: NUMBER '1.0' +11,5-11,6: RPAR ')' +11,6-11,7: NEWLINE '\n' +12,0-12,1: OP '-' +12,1-12,2: LPAR '(' +12,2-12,8: NUMBER '3.0e17' +12,8-12,9: RPAR ')' +12,9-12,10: NEWLINE '\n' +14,0-14,1: LPAR '(' +14,1-14,2: OP '-' +14,2-14,3: NUMBER '1' +14,3-14,4: RPAR ')' +14,4-14,5: NEWLINE '\n' +15,0-15,1: LPAR '(' +15,1-15,2: OP '-' +15,2-15,19: NUMBER '10000000000000000' +15,19-15,20: RPAR ')' +15,20-15,21: NEWLINE '\n' +16,0-16,1: LPAR '(' +16,1-16,2: OP '-' +16,2-16,5: NUMBER '1.0' +16,5-16,6: RPAR ')' +16,6-16,7: NEWLINE '\n' +17,0-17,1: LPAR '(' +17,1-17,2: OP '-' +17,2-17,8: NUMBER '3.0e17' +17,8-17,9: RPAR ')' +17,9-17,10: NEWLINE '\n' +19,0-19,1: OP '-' +19,1-19,3: NUMBER '1j' +19,3-19,4: NEWLINE '\n' +21,0-21,1: OP '-' +21,1-21,8: NUMBER '3.7e12j' +21,8-21,9: NEWLINE '\n' +23,0-23,19: COMMENT '#Some other numbers' +24,0-24,20: NUMBER '0.058823529630899429' +24,20-24,21: NEWLINE '\n' +26,0-26,5: NUMBER '1e-06' +26,5-26,6: NEWLINE '\n' +27,0-27,8: NUMBER '.9999999' +27,8-27,9: NEWLINE '\n' +28,0-28,8: NUMBER '0xffffff' +28,8-28,9: NEWLINE '\n' +29,0-29,4: NUMBER '1e10' +29,4-29,5: NEWLINE '\n' +30,0-30,2: NUMBER '1.' +30,2-30,3: NEWLINE '\n' +31,0-31,10: NUMBER '2.79252680' +31,10-31,11: NEWLINE '\n' +32,0-32,9: NUMBER '0x0001000' +32,9-32,10: NEWLINE '\n' +33,0-33,55: NUMBER '4987312561856745907287624786230562734672583763984576267' +33,55-33,56: NEWLINE '\n' +35,0-35,18: COMMENT '#Octal both styles' +36,0-36,4: NUMBER '0777' +36,4-36,5: NEWLINE '\n' +37,0-37,5: NUMBER '0o777' +37,5-37,6: NEWLINE '\n' +39,0-39,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/utf8.py b/python/extractor/tests/tokenizer/utf8.py new file mode 100644 index 00000000000..f440c6944d9 --- /dev/null +++ b/python/extractor/tests/tokenizer/utf8.py @@ -0,0 +1,2 @@ +# Some abitrary prefix with no space beforecoding: utf-8 -*- +# €€€€ diff --git a/python/extractor/tests/tokenizer/utf8.tokens b/python/extractor/tests/tokenizer/utf8.tokens new file mode 100644 index 00000000000..bff89345d59 --- /dev/null +++ b/python/extractor/tests/tokenizer/utf8.tokens @@ -0,0 +1,3 @@ +1,0-1,60: COMMENT '# Some abitrary prefix with no space beforecoding: utf-8 -*-' +2,0-2,6: COMMENT '# €€€€' +3,0-3,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/utf8_bom.py b/python/extractor/tests/tokenizer/utf8_bom.py new file mode 100644 index 00000000000..509f44c690e --- /dev/null +++ b/python/extractor/tests/tokenizer/utf8_bom.py @@ -0,0 +1 @@ +#Starts with a BOM diff --git a/python/extractor/tests/tokenizer/utf8_bom.tokens b/python/extractor/tests/tokenizer/utf8_bom.tokens new file mode 100644 index 00000000000..49ee0f628e0 --- /dev/null +++ b/python/extractor/tests/tokenizer/utf8_bom.tokens @@ -0,0 +1,2 @@ +1,0-1,18: COMMENT '#Starts with a BOM' +2,0-2,0: ENDMARKER '' \ No newline at end of file diff --git a/python/extractor/thrift_extractor.py b/python/extractor/thrift_extractor.py new file mode 100755 index 00000000000..64b814b712c --- /dev/null +++ b/python/extractor/thrift_extractor.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +"""Run the thrift extractor locally for debugging. +""" +import sys +import python_tracer + +if __name__ == "__main__": + python_tracer.load_library() + import semmle.thrift + import semmle.files + if len(sys.argv) != 3: + print("Usage %s INPUT_FOLDER TRAP_FOLDER" % sys.argv[0]) + sys.exit(1) + trap_folder = semmle.files.TrapFolder(sys.argv[2]) + extractor = semmle.thrift.Extractor(trap_folder) + extractor.extract_folder(sys.argv[1]) diff --git a/python/extractor/tokenizer_generator/README.md b/python/extractor/tokenizer_generator/README.md new file mode 100644 index 00000000000..104de535a1f --- /dev/null +++ b/python/extractor/tokenizer_generator/README.md @@ -0,0 +1,172 @@ +# The Python tokenizer + +This file describes the syntax and operational semantics of the state machine +that underlies our tokenizer. + +## The state machine syntax + +The state machine is described in a declarative fashion in the +`state_transition.txt` file. This file contains a sequence of declarations, as +described in the following subsections. + +Additionally, lines may contain comments indicated using the `#` character, as +in Python itself. + +In the remainder of the document, "identifier" means any sequence of characters +starting with a letter (`a-z` or `A-Z`) and followed by a sequence of letters, +digits, and/or underscores. + +### Start declarations +This has the form `start: ` followed by the name of a table. It is used to +indicate what table is used as the starting point for the tokenization. + +There should be exactly one of these declarations in the file. + +### Alias declarations +These have the form +``` +identifier = id_or_char or id_or_char or ... +``` +where `id_or_char` is either a single character surrounded by single quotes +(e.g. `'a'`) or an identifier defined in another alias declaration. + +Thus, aliases define _sets_ of characters: single-quoted characters representing +singleton sets, and `or` being set union. +>Note: A few character classes are predefined: +> - `ERROR` representing the error state of the state machine, +> - `IDENTIFIER` representing characters that can appear at the start of +> a Unicode identifier, and +> - `IDENTIFIER_CONTINUE` representing characters that can appear +> within a Unicode identifier. + +### Table declarations +These have the form + +``` +table header { + state_transition + state_transition + ... +} +``` +where `header` is either an identifier or an identifier followed by another +identifier surrounded by parentheses. The latter implements a form of +"inheritance" between tables, and is explained in a later section. + +The format of `state_transition`s is described in the next subsection. + +### State transitions +Each state transition has the following form: +``` +set_of_before_states -> after_state for set_of_characters optional_actions +``` +Here, `set_of_before_states` is either a single identifier or a list of identifiers +with `or`s interspersed (mimicking the way sets of characters are specified) and +`after_state` is an identifier. These identifiers do not have to be declared +separately — they are implicitly declared when used. +>Note: A special state `0` (in the table indicated with the `start: ` +>declaration represents the starting state for the entire tokenization. + +The `set_of_characters` can either be +- the identifier corresponding to an alias, +- a single character (e.g. `'a'`), +- a list of sets of characters with `or`s interspersed, or +- an asterisk `*` representing _all_ characters that do not already have a + transition defined for the set of "before" states. + +After the state transition is an optional list of actions, described next. + +### Actions +Actions are specified using the keyword `do`. After this keyword, one or more +actions may be specified, each terminated with `;`, e.g. +``` +foo -> bar for 'a' do action1; action2; +``` +As the actions are very operational in nature, they will be described when we go +into the operational semantics of the state machine. + +## Informal operational semantics +>Note: What follows is not based on a reading of the source code, but just +>experience with working with modifying the state machine. There may be +>significant inaccuracies. + +At a high level, the purpose of the tokenizer is to partition the given input +into a sequence of strings representing tokens. The decision of where to put the +boundaries between these strings is done on a character-by-character basis. To +mark the start of a token, the action `mark` is used. Note that the mark is +placed _before_ the character that caused the action to be executed. That is, in +the following transition rule +``` +foo -> bar for 'a' do mark; +``` +the mark is placed _before_ the `a`. + +Once the end of a token has been reached, the `emit` action is used. This +creates a token from the part of the input spanning from the most recent `mark` +up to (and including) the character that caused the transition to which the +`emit` action is attached. + +As an example, consider the following state machine that splits a sequence of +zeroes and ones into tokens consisting of (maximal) runs of each character: + +``` +start: default +table default { + + # This is essentially just an unconditional state transition. + 0 -> zero_or_one for * do pushback; + + zero_or_one -> zeros for '0' do mark; + zero_or_one -> ones for '1' do mark; + + zeros -> zeros for '0' + zeros -> zero_or_one for * do pushback; emit(ZEROS); + + ones -> zero_or_one for * do pushback; emit(ONES); + ones -> ones for '1' +} +``` +The `pushback` action has the effect of "pushing back" the current character. +(In reality, all this does is move the pointer to the current character one step +back. It is thus not a problem to have several pushbacks in a row.) + +> Note: The order in which the transition rules for a state is specified does +> not matter. Even if the `*` state is listed first, as with `ones` above, it +> does not take precedence over other more specific character sets. + +After tokenizing a string with the above grammar, the result will be a sequence +of `ZEROS` and `ONES` tokens. Each of these will have three pieces of data +associated with it: the starting point (line and column), the end point (also +line and column), and the characters that make up the token. Note that `emit` +accepts a second argument (which must be a string) as well. For example, the +transition for code when reaching a newline is: +``` +feed = '\r' or '\n' +... + code -> whitespace_line for feed do emit(NEWLINE, "\n"); newline; +``` +This has the effect of normalizing end of line characters to be `\n`. + +>Note: The replacement text may have a different length than the distance to the +>most recent `span`. This may not be desirable. + +The above snippet introduces another action: `newline`. This has the effect of +resetting the column counter to zero and incrementing the line counter. + +>Note: There are some peculiarities about newlines, and the tokenizer will get +>confused if they are not handled through the `newline` action. + +The last two actions have to do with maintaining a stack of parsing tables. At +all points, the behavior of the tokenizer is governed by the table that is on +top of the stack. The `push` action pushes the specified table (given as an +argument) on top of this stack. Naturally, the `pop` action does the opposite, +discarding the top element. + +This leaves the final point of interest: what decides which transitions are +"active" at a given point? + +The way this functions is essentially like method dispatch in Python (though +thankfully there is no multiple inheritance). Thus, given the current state and +the current character, we first look in the table on top of the stack. If this +table does not have a transition for the given state and character, we next look +at the table it inherits from, and so forth. diff --git a/python/extractor/tokenizer_generator/compiled.py b/python/extractor/tokenizer_generator/compiled.py new file mode 100644 index 00000000000..3981a6d81df --- /dev/null +++ b/python/extractor/tokenizer_generator/compiled.py @@ -0,0 +1,155 @@ + +import unicodedata +from . import machine + +class SuperState: + + def __init__(self, name, mapping): + self.name = name + self.mapping = mapping + + def as_list_of_bytes(self): + lst = dict_to_list(self.mapping) + return [ table.as_bytes() for table in lst ] + + def as_list_of_transitions(self): + return dict_to_list(self.mapping) + +action_id = 0 +all_actions = {} + +class ActionList: + + def __init__(self, actions, id): + self.actions = actions + self.id = id + + @staticmethod + def get(actions): + global action_id + assert isinstance(actions, tuple) + if actions not in all_actions: + all_actions[actions] = ActionList(actions, action_id) + action_id += 1 + return all_actions[actions] + + @staticmethod + def listall(): + return sorted(all_actions.values(), key = lambda al: al.id) + +next_pair_id = 0 +pairs = {} + +class StateActionListPair: + + def __init__(self, state, actionlist, id): + self.state = state + self.actionlist = actionlist + self.id = id + + @staticmethod + def get(state, actionlist): + global next_pair_id + if actionlist is not None and not isinstance(actionlist, ActionList): + actionlist = ActionList.get(actionlist) + if (state, actionlist) not in pairs: + pairs[(state, actionlist)] = StateActionListPair(state, actionlist, next_pair_id) + next_pair_id += 1 + return pairs[(state, actionlist)] + + @staticmethod + def listall(): + return sorted(pairs.values(), key = lambda pair: pair.id) + +next_table_id = 0 +table_ids = {} + +class StateTransitionTable: + + def __init__(self, mapping): + self.mapping = mapping + + def as_bytes(self): + lst = dict_to_list(self.mapping) + return bytes(pair.id for pair in lst) + + def __getitem__(self, key): + return self.mapping[key] + + @property + def id(self): + global next_table_id + b = self.as_bytes() + if not b in table_ids: + table_ids[b] = next_table_id + next_table_id += 1 + return table_ids[b] + +def dict_to_list(mapping): + assert isinstance(mapping, dict) + result = [] + for key, value in mapping.items(): + while key.id >= len(result): + result.append(None) + result[key.id] = value + return result + + +#Each character is one of id-start, id-continuation or other. Represent "other" as ERROR for all non-ascii characters. +#See https://www.python.org/dev/peps/pep-3131 for an explanation of what is an identifier. +OTHER_START = {0x1885, 0x1886, 0x2118, 0x212E, 0x309B, 0x309C} +OTHER_CONTINUE = {0x00B7, 0x0387, 0x19DA} +OTHER_CONTINUE.update(range(0x1369, 0x1372)) +ID_CATEGORIES = {"Lu", "Ll", "Lt", "Lm", "Lo", "Nl"} +CONT_CATEGORIES = {"Mn", "Mc", "Nd", "Pc"} + +CHUNK_SIZE = 64 + +class IdentifierTable: + + def __init__(self): + classes = [] + for i in range(0x110000): + try: + c = chr(i) + except: + continue + cat = unicodedata.category(c) + if cat in ID_CATEGORIES or i in OTHER_START: + cls = machine.IDENTIFIER_CLASS.id + elif cat in CONT_CATEGORIES or i in OTHER_CONTINUE: + cls = machine.IDENTIFIER_CONTINUE_CLASS.id + else: + cls = machine.ERROR_CLASS.id + assert cls in (0,1,2,3) + classes.append(cls) + result = [] + for i, cls in enumerate(classes): + byte, bits = i>>2, cls<<((i&3)*2) + while byte >= len(result): + result.append(0) + result[byte] |= bits + while result[-1] == 0: + result.pop() + while len(result) % CHUNK_SIZE: + result.append(0) + self.table = result + + def as_bytes(self): + return bytes(self.table) + + def as_two_level_table(self): + index = [] + chunks = {} + next_id = 0 + the_bytes = self.as_bytes() + for n in range(0, len(the_bytes), CHUNK_SIZE): + chunk = the_bytes[n:n+CHUNK_SIZE] + if chunk in chunks: + index.append(chunks[chunk]) + else: + index.append(next_id) + chunks[chunk] = next_id + next_id += 1 + chunks = [ chunk for (i, chunk) in sorted((i, chunk) for chunk, i in chunks.items())] + return chunks, index diff --git a/python/extractor/tokenizer_generator/gen_state_machine.py b/python/extractor/tokenizer_generator/gen_state_machine.py new file mode 100644 index 00000000000..7ee3a37fdfa --- /dev/null +++ b/python/extractor/tokenizer_generator/gen_state_machine.py @@ -0,0 +1,225 @@ +''' +Generate a state-machine based tokenizer from a state transition description and a template. + +Parses the state transition description to compute a set of transition tables. +Each table maps (state, character-class) pairs to (state, action) pairs. +During tokenization each input character is converted to a class, then a new state and action is +looked up using the current state and character-class. + +The generated tables are: + CLASS_TABLE: + Maps ASCII code points to character class. + ID_TABLE: + Maps all unicode points to one of Identifier, Identifier-continuation, or other. + The transition tables: + Each table maps each state to a per-class transition table. + Each per-class transition table maps each character-class to an index in the action table. + ACTION_TABLE: + Embedded in code as `action_table`; maps each index to a (state, action) pair. + +Since the number of character-classes, states and (state, action) pairs is small. Everything is represented as +a byte and tables as `bytes` object for Python 3, or `array.array` objects for Python 2. +''' + + +from .parser import parse +from . import machine +from .compiled import StateActionListPair, IdentifierTable + +def emit_id_bytes(id_table): + chunks, index = id_table.as_two_level_table() + print("# %d entries in ID index" % len(index)) + index_bytes = bytes(index) + print("ID_INDEX = toarray(") + for n in range(0, len(index_bytes), 32): + print(" %r" % index_bytes[n:n+32]) + print(")") + print("ID_CHUNKS = (") + for chunk in chunks: + print(" toarray(%r)," % chunk) + print(")") + +def emit_transition_table(table, verbose=False): + print("%s = (" % table.name.upper(), end="") + for trans in table.as_list_of_transitions(): + print("B%02d," % trans.id, end=" ") + print(")") + +emitted_rows = set() + +def emit_rows(table): + for trans in table.as_list_of_transitions(): + id = trans.id + if id in emitted_rows: + continue + emitted_rows.add(id) + print("B%02d = toarray(%r)" % (id, trans.as_bytes())) + +action_names = {} +next_action_id = 0 + +def get_action_id(action): + global next_action_id + assert action is not None + if action in action_names: + return action_names[action] + result = next_action_id + next_action_id += 1 + action_names[action] = result + return result + +def emit_actions(table, indent=""): + for pair in table: + if pair.actionlist is None: + continue + action = pair.actionlist + get_action_function(action, indent) + +def generate_action_table(table, indent): + result = [] + result.append(indent + "action_table = [\n " + indent) + for i, pair in enumerate(table): + if pair.actionlist is None: + result.append("(%d, None), " % pair.state.id) + else: + result.append("(%d, self.action_%s), " % (pair.state.id, pair.actionlist.id)) + if (i & 3) == 3: + result.append("\n " + indent) + result.append("\n" + indent + "]") + return "".join(result) + +action_functions = set() + +def get_action_function(actionlist, indent=""): + if actionlist in action_functions: + return + action_functions.add(actionlist) + last = actionlist.actions[-1] + print(indent + "def action_%d(self):" % actionlist.id) + emit = False + for action in actionlist.actions: + if action is machine.PUSHBACK: + print(indent + " self.index -= 1") + continue + elif action is machine.POP: + print(indent + " self.super_state = self.state_stack.pop()") + elif isinstance(action, machine.Push): + print(indent + " self.state_stack.append(self.super_state)") + print(indent + " self.super_state = %s" % action.state.name.upper()) + elif action is machine.MARK: + print(indent + " self.token_start_index = self.index") + print(indent + " self.token_start = self.line, self.index-self.line_start_index") + elif isinstance(action, machine.Emit): + emit = True + print(indent + " end = self.line, self.index-self.line_start_index+1") + if action.text is None: + print(indent + " result = [%s, self.text[self.token_start_index:self.index+1], self.token_start, end]" % action.kind) + else: + print(indent + " result = [%s, u%s, (self.line, self.index-self.line_start_index), end]" % (action.kind, action.text)) + print(indent + " self.token_start = end") + print(indent + " self.token_start_index = self.index+1") + elif action is machine.NEWLINE: + print(indent + " self.line_start_index = self.index+1") + print(indent + " self.line += 1") + elif action is machine.EMIT_INDENT: + assert action is last + print(indent + " return self.emit_indent()") + print() + return + else: + assert False, "Unexpected action: %s" % action + print(indent + " self.index += 1") + if emit: + print(indent + " return result") + else: + print(indent + " return None") + print() + return + +def emit_char_classes(char_classes, verbose=False): + for cls in sorted(set(char_classes.values()), key=lambda x : x.id): + print("#%d = %r" % (cls.id, cls)) + table = [None] * 128 + by_id = { + machine.IDENTIFIER_CLASS.id : machine.IDENTIFIER_CLASS, + machine.IDENTIFIER_CONTINUE_CLASS.id : machine.IDENTIFIER_CONTINUE_CLASS, + machine.ERROR_CLASS.id : machine.ERROR_CLASS + } + for c, cls in char_classes.items(): + by_id[cls.id] = cls + if c is machine.IDENTIFIER or c is machine.IDENTIFIER_CONTINUE: + continue + table[ord(c)] = cls.id + by_id[cls.id] = cls + for i in range(128): + assert table[i] is not None + bytes_table = bytes(table) + if verbose: + print("# Class Table") + for i in range(len(bytes_table)): + b = bytes_table[i] + print("# %r -> %s" % (chr(i), by_id[b])) + print("CLASS_TABLE = toarray(%r)" % bytes_table) + + + +PREFACE = """ +import codecs +import re +import sys + +from blib2to3.pgen2.token import * + +if sys.version < '3': + from array import array + def toarray(b): + return array('B', b) +else: + def toarray(b): + return b +""" + +def main(): + verbose = False + import sys + if len(sys.argv) != 3: + print("Usage %s DESCRIPTION TEMPLATE" % sys.argv[0]) + sys.exit(1) + descriptionfile = sys.argv[1] + with open(descriptionfile) as fd: + m = machine.Machine.load(fd.read()) + templatefile = sys.argv[2] + with open(templatefile) as fd: + template = fd.read() + print("# This file is AUTO-GENERATED. DO NOT MODIFY") + print('# To regenerate: run "python3 -m tokenizer_generator.gen_state_machine %s %s"' % (descriptionfile, templatefile)) + print(PREFACE) + print("IDENTIFIER_CLASS = %d" % machine.IDENTIFIER_CLASS.id) + print("IDENTIFIER_CONTINUE_CLASS = %d" % machine.IDENTIFIER_CONTINUE_CLASS.id) + print("ERROR_CLASS = %d" % machine.ERROR_CLASS.id) + emit_id_bytes(IdentifierTable()) + char_classes = m.get_classes() + emit_char_classes(char_classes, verbose) + print() + tables = [state.compile(char_classes) for state in m.states.values() ] + for table in tables: + emit_rows(table) + print() + for table in tables: + #pprint(table) + emit_transition_table(table, verbose) + print() + print("TRANSITION_STATE_NAMES = {") + for state in m.states.values(): + print(" id(%s): '%s'," % (state.name.upper(), state.name)) + print("}") + print("START_SUPER_STATE = %s" % m.start.name.upper()) + prefix, suffix = template.split("#ACTIONS-HERE") + print(prefix) + actions = StateActionListPair.listall() + emit_actions(actions, " ") + action_table = generate_action_table(actions, " ") + print(suffix.replace("#ACTION_TABLE_HERE", action_table)) + +if __name__ == "__main__": + main() diff --git a/python/extractor/tokenizer_generator/machine.py b/python/extractor/tokenizer_generator/machine.py new file mode 100644 index 00000000000..ff58ec2a457 --- /dev/null +++ b/python/extractor/tokenizer_generator/machine.py @@ -0,0 +1,485 @@ + +import ast + +from .parser import parse +from collections import defaultdict +from .compiled import SuperState, StateTransitionTable, StateActionListPair + + +class Transition: + + def __init__(self, from_state, to_state, what, do): + assert isinstance(from_state, State) + assert isinstance(to_state, State) + self.from_state = from_state + self.what = what + if not do: + do = None + else: + assert isinstance(do, list) + for item in do: + assert isinstance(item, Action) + do = tuple(do) + self.action = StateActionListPair.get(to_state, do) + + def dump(self): + if self.action.actionlist: + return "%s -> %s for %s do %s" % ( + self.from_state, + self.action.state, + self.what, + "; ".join(str(do) for do in self.action.actionlist.actions) + ) + else: + return "%s -> %s for %s" % ( + self.from_state, + self.action.state, + self.what + ) + +next_state_id = 1 +states = {} + +class State: + + def __init__(self, name): + global next_state_id + if name.isdigit(): + assert name == "0" + self.id = 0 + self.name = "START" + else: + self.name = name + self.id = next_state_id + next_state_id += 1 + + @staticmethod + def get(name): + if name not in states: + states[name] = State(name) + return states[name] + + @staticmethod + def count(): + return len(states) + + def __repr__(self): + return "state_%s(%s)" % (self.id, self.name) + + @staticmethod + def from_id(id): + for state in states.values(): + if state.id == id: + return state + raise ValueError(id) + +State.get("0") +ERROR_ACTION = StateActionListPair.get(State.get("error"), None) + +next_super_state_id = 0 +super_states = {} + +class TransitionTable: + + def __init__(self, name): + global next_super_state_id + self.name = name + self.id = next_super_state_id + next_super_state_id += 1 + self.parent = None + self.transitions = [] + self._table = None + + def add_transition(self, trans): + self.transitions.append(trans) + + def dump(self): + if self.parent: + lines = [ "TransitionTable %s(%s extends %s)" % (self.id, self.name, self.parent.name) ] + else: + lines = [ "TransitionTable %s(%s):" % (self.id, self.name) ] + lines.extend(" " + t.dump() for t in self.transitions) + return "\n".join(lines) + + @staticmethod + def get(name, parent=None): + if name not in super_states: + super_states[name] = TransitionTable(name) + return super_states[name] + + @staticmethod + def count(): + return len(super_states) + + def get_table(self, character_classes): + '''Returns the transition table for all states in this super-state''' + if self._table is None: + from_transtions = defaultdict(list) + for t in self.transitions: + from_transtions[t.from_state].append(t) + self._table = { state: self.get_transition_table(state, from_transtions.get(state, ()), character_classes) for state in states.values() } + return self._table + + def get_transition_table(self, state, transition_list, character_classes): + table = {} + if self.parent: + parent_table = self.parent.get_table(character_classes) + else: + parent_table = None + default = None + for t in transition_list: + assert state == t.from_state + if isinstance(t.what, Any): + default = t.action + continue + action = t.action + classes = set(character_classes[c] for c in t.what) + for cls in classes: + if cls in table: + raise ValueError("Duplicate transition from %s on %s" % (state, cls)) + else: + table[cls] = action + on_identifier = table.get(IDENTIFIER_CLASS, None) + for cls in character_classes.values(): + if cls in table: + continue + if on_identifier and cls.is_identifier: + table[cls] = on_identifier + elif default: + table[cls] = default + elif parent_table and state in parent_table: + table[cls] = parent_table[state][cls] + else: + table[cls] = ERROR_ACTION + return StateTransitionTable(table) + + def compile(self, character_classes): + return SuperState(self.name, self.get_table(character_classes)) + +class Any: + + def __repr__(self): + return "*" + +class Action: + + def __repr__(self): + return self.__class__.__name__.lower() + +class Emit(Action): + + def __init__(self, kind, text): + assert isinstance(kind, str) + assert kind.upper() == kind + self.kind = kind + self.text = text + + def __repr__(self): + if self.text is None: + return "emit(" + self.kind + ")" + else: + return "emit(%s, %r)" % (self.kind, self.text) + + def __eq__(self, other): + return type(other) is Emit and other.kind == self.kind and other.text == self.text + + def __hash__(self): + return 353 ^ hash(self.kind) ^ hash(self.text) + +class Push(Action): + + def __init__(self, state): + assert isinstance(state, TransitionTable) + self.state = state + + def __repr__(self): + return "push(%s)" % self.state.name + + def __eq__(self, other): + return type(other) is Push and other.state == self.state + + def __hash__(self): + return 59 ^ hash(self.state) + +class EmitIndent(Action): + pass +EMIT_INDENT = EmitIndent() + +class Pop(Action): + pass +POP = Pop() + +class Pushback(Action): + pass +PUSHBACK = Pushback() + +class Mark(Action): + pass +MARK = Mark() + +class Newline(Action): + pass +NEWLINE = Newline() + +class Identifier: + + def __repr__(self): + return "UnicodeIdentifiers()" + +IDENTIFIER = Identifier() + +class IdentifierContinue: + + def __repr__(self): + return "IdentifierContinue()" + +IDENTIFIER_CONTINUE = IdentifierContinue() + +next_char_class_id = 0 + +class CharacterClass: + + def __init__(self, chars, is_identifier = None): + global next_char_class_id + self.chars = chars + self.id = next_char_class_id + next_char_class_id += 1 + if is_identifier is None: + self.is_identifier = chars.copy().pop().isidentifier() + else: + self.is_identifier = is_identifier + + def __repr__(self): + if self == IDENTIFIER_CLASS: + return "IDENTIFIER_CLASS(%d)" % self.id + elif self == ERROR_CLASS: + return "ERROR_CLASS(%d)" % self.id + else: + return "CharacterClass %s %r" % (self.id, sorted(self.chars)) + +ERROR_CLASS = CharacterClass(set(), False) +assert ERROR_CLASS.id == 0 +IDENTIFIER_CLASS = CharacterClass(set(), True) +IDENTIFIER_CONTINUE_CLASS = CharacterClass(set(), False) + +class Machine: + + def __init__(self): + self.aliases = {} + self.states = {} + self.aliases["IDENTIFIER"] = IDENTIFIER + self.aliases["IDENTIFIER_CONTINUE"] = IDENTIFIER_CONTINUE + self.aliases['SPACE'] = {' '} + self.start = None + + def add_state(self, name): + assert name not in self.states + result = TransitionTable.get(name) + self.states[name] = result + return result + + def add_alias(self, name, choices): + assert name not in self.aliases + assert isinstance(choices, set), choices + self.aliases[name] = choices + + def dump(self): + r = [] + a = r.append + a("Starting super-state: %s" % self.start.name) + a("") + a("Aliases:") + for name_alias in self.aliases.items(): + a(" %s = %r" % name_alias) + a("") + for name, state in self.states.items(): + a(state.dump()) + return "\n".join(r) + + @staticmethod + def load(src): + tree = parse(src) + m = Machine() + w = Walker(m) + w.visit(tree) + return m + + def get_classes(self): + '''Get the character classes for this machine''' + #There are two predefined classes: Unicode identifiers, and ERROR. + #A character class is a set of characters, such that the transitions + #and actions of the machine are identical for all characters in that class. + char_to_transitions = defaultdict(set) + for s in self.states.values(): + for t in s.transitions: + w = t.what + if isinstance(w, Any): + continue + for c in w: + if c is IDENTIFIER or c is IDENTIFIER_CONTINUE: + continue + char_to_transitions[c].add((s, t.from_state, t.action)) + equivalence_sets = defaultdict(set) + for c, transition_set in sorted(char_to_transitions.items()): + equivalence_sets[frozenset(transition_set)].add(c) + classes = {} + for char_set in sorted(equivalence_sets.values()): + charcls = CharacterClass(char_set) + for c in char_set: + classes[c] = charcls + classes[IDENTIFIER] = IDENTIFIER_CLASS + classes[IDENTIFIER_CONTINUE] = IDENTIFIER_CONTINUE_CLASS + for i in range(128): + c = chr(i) + if c not in classes: + if c.isidentifier(): + classes[c] = IDENTIFIER_CLASS + elif c in "0123456789": + classes[c] = IDENTIFIER_CONTINUE_CLASS + else: + classes[c] = ERROR_CLASS + for cls in classes.values(): + if cls is IDENTIFIER_CLASS or cls is IDENTIFIER_CONTINUE_CLASS or cls is ERROR_CLASS: + continue + assert { c for c in cls.chars if c.isidentifier() } == cls.chars or not { c for c in cls.chars if c.isidentifier() } + return classes + +class Walker: + + def __init__(self, machine): + self.machine = machine + + def visit(self, node): + if hasattr(node, "type"): + tag = node.type + else: + tag = node.data + meth = getattr(self, "visit_" + tag, None) + if meth is None: + self.fail(node, tag) + else: + return meth(node) + + def fail(self, node, tag): + print(node) + raise NotImplementedError(tag) + + def visit_first_child(self, node): + assert len(node.children) == 1 + return self.visit(node.children[0]) + + def visit_children(self, node): + return [ self.visit(child) for child in node.children ] + + visit_start = visit_first_child + visit_machine = visit_children + visit_declaration = visit_first_child + + def visit_alias_decl(self, node): + assert len(node.children) == 2 + choice = self.visit(node.children[1]) + self.machine.add_alias(node.children[0].value, choice) + + def visit_alias(self, node): + return self.machine.aliases[node.children[0].value] + + def visit_char(self, node): + c = ast.literal_eval(node.children[0].value) + assert isinstance(c, str), c + assert len(c) == 1, c + return c + + def visit_choice(self, node): + #Convert choices into a set of characters + result = set() + for child in node.children: + item = self.visit(child) + if isinstance(item, set): + result.update(item) + else: + result.add(item) + return result + + visit_item = visit_first_child + + def visit_table_decl(self, node): + self.current_state = self.visit(node.children[0]) + for transition in node.children[1:]: + self.visit(transition) + + def visit_table_header(self, node): + name = node.children[0].value + state = self.machine.add_state(name) + if len(node.children) > 1: + base = TransitionTable.get(node.children[1].value) + state.parent = base + return state + + def visit_transition(self, node): + # state_choice "->" state "for" (choice | "*") action_list? + from_states = self.visit(node.children[0]) + to_state = self.visit(node.children[1]) + what = self.visit(node.children[2]) + if len(node.children) > 3: + do = self.visit(node.children[3]) + else: + do = [] + for state in from_states: + trans = Transition(state, to_state, what, do) + self.current_state.add_transition(trans) + + visit_state_choice = visit_children + + def visit_state(self, node): + return State.get(node.children[0].value) + + def visit_any(self, node): + return Any() + + visit_action_list = visit_children + visit_action = visit_first_child + + def visit_emit(self, node): + if len(node.children) == 2: + return Emit(node.children[0].value, self.visit(node.children[1])) + else: + return Emit(node.children[0].value, None) + + def visit_optional_text(self, node): + return node.children[0].value + + def visit_push(self, node): + state = TransitionTable.get(node.children[0].value) + return Push(state) + + def visit_emit_indent(self, node): + return EMIT_INDENT + + def visit_pushback(self, node): + return PUSHBACK + + def visit_pop(self, node): + return POP + + def visit_mark(self, node): + return MARK + + def visit_newline(self, node): + return NEWLINE + + def visit_start_decl(self, node): + self.machine.start = TransitionTable.get(node.children[0].value) + + +def main(): + import sys + file = sys.argv[1] + with open(file) as fd: + tree = parse(fd.read()) + m = Machine() + w = Walker(m) + w.visit(tree) + print(m.dump()) + +if __name__ == "__main__": + main() diff --git a/python/extractor/tokenizer_generator/parser.py b/python/extractor/tokenizer_generator/parser.py new file mode 100644 index 00000000000..2d4111b361e --- /dev/null +++ b/python/extractor/tokenizer_generator/parser.py @@ -0,0 +1,92 @@ + +''' + Explanation of the syntax + + start_decl: The starting transition table + alias_decl: Declare short hand, e.g. digits = '0' or '1' or ... + table_decl: Declare transition table: name and list of transitions. + transition: Transitions from one state to another. From is: state (or choice of states) -> new-state for possible-characters [ do action or actions; ] + action: Actions are: + "emit(kind [, text]): emits a token of kind using the givn text or text from the stream. The token starts at the last mark and ends at the current location. + "push(table)": pushes a transition table to the stack. + "pop" : pops a transition table from the stack. + "pushback": pushes the last character back to the stream. + "mark": marks the current location as the start of the next token. + "emit_indent": Emits zero or more INDENT or DEDENT tokens depending on current indentation. + "newline": Increments the line number and sets the column offset back to zero. + + States: + All states are given names. + The state "0" is the start state and always exists. + All other states are implicitly defined when used (this is for Python after all :) + '*' means all states for which a transition is not explicitly defined. + So the transitions: + 0 -> end for '\n' + 0 -> other for * + 0 -> a_b for 'a' or 'b' + mean that '0' will transition to 'other' for all characters other than 'a', 'b' and `\n`. + The order of transitions in the state machine description is irrelevant. +''' + + +grammar = r""" +start : machine +machine : declaration+ +declaration : alias_decl | table_decl | start_decl +start_decl : "start" ":" IDENTIFIER +table_decl : table_header "{" transition+ "}" +table_header : "table" IDENTIFIER ( "(" IDENTIFIER ")" )? +alias_decl : IDENTIFIER "=" choice +choice : item ( "or" item)* +item : alias | char +alias : IDENTIFIER +char : LITERAL +transition : state_choice "->" state "for" (choice | any) action_list? +any : "*" +state_choice : state ( "or" state)* +state : IDENTIFIER | DIGIT +action_list : "do" action ";" (action ";")* +action : emit | pop | push | pushback | mark | emit_indent | newline +emit : "emit" "(" IDENTIFIER optional_text? ")" +optional_text : "," LITERAL +pop : "pop" +push : "push" "(" IDENTIFIER ")" +pushback : "pushback" +mark : "mark" +emit_indent : "emit_indent" +newline : "newline" + +LITERAL : ("\"" /[^"]/* "\"") | ("'" /[^']/* "'") +IDENTIFIER : LETTER ( LETTER | DIGIT | "_" )* +LETTER : "A".."Z" | "a".."z" +DIGIT : "0".."9" +WHITESPACE : (" " | "\t" | "\r" | "\n")+ + +%import common.NEWLINE +COMMENT : "#" /(.)*/ NEWLINE +%ignore WHITESPACE +%ignore COMMENT +""" + + + +from lark import Lark + +class Parser(Lark): + + def __init__(self): + Lark.__init__(self, grammar, parser="earley", lexer="standard") + +def parse(src): + parser = Parser() + return parser.parse(src) + +def main(): + import sys + file = sys.argv[1] + with open(file) as fd: + tree = parse(fd.read()) + print(tree.pretty()) + +if __name__ == "__main__": + main() diff --git a/python/extractor/tokenizer_generator/state_transition.txt b/python/extractor/tokenizer_generator/state_transition.txt new file mode 100644 index 00000000000..9ce9b3cfe71 --- /dev/null +++ b/python/extractor/tokenizer_generator/state_transition.txt @@ -0,0 +1,385 @@ +# State machine specification for unified Python tokenizer +# Handles all tokens for all versions of Python, including partial string tokens for handling f-strings. +# Stating transition table is "default" and starting state is "0" +# +# + + +#declarations +prefix_chars = 'u' or 'U' or 'b' or 'B' or 'r' or 'R' +one_to_nine = '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9' +digits = '0' or one_to_nine +oct_digits = '0' or '1' or '2' or '3' or '4' or '5' or '6' or '7' +hex_digits = digits or 'a' or 'A' or 'b' or 'B' or 'c' or 'C' or 'd' or 'D' or 'e' or 'E' or 'f' or 'F' +feed = '\n' or '\r' + +#tables +table default { + # 0 is starting state + 0 -> whitespace_line for * do pushback; + + #String prefix states + + # When we encounter a prefix character, we are faced with the possibility + # that it is either the beginning of a string or of an identifier. With a + # single character of lookahead available, we therefore have to be in an + # intermediate state until we are able to determine which case we're in. + + code -> maybe_string1 for prefix_chars do mark; + maybe_string1 -> maybe_string2 for prefix_chars + maybe_string1 or maybe_string2 -> quote_s for "'" + maybe_string1 or maybe_string2 -> quote_d for '"' + code -> quote_s for "'" do mark; + code -> quote_d for '"' do mark; + maybe_string1 or maybe_string2 -> in_identifier for * do pushback; + + # In the following, `_s` means one single quote, `_ss` means two in a row, + # etc. Likewise `_d` indicates double quotes. + + quote_s -> quote_ss for "'" + quote_d -> quote_dd for '"' + quote_s -> instring for * do pushback ; push(string_s); + quote_ss -> instring for "'" do push(string_sss); + quote_ss -> code for * do pushback ; emit(STRING); + quote_d -> instring for * do pushback ; push(string_d); + quote_dd -> instring for '"' do push(string_ddd); + quote_dd -> code for * do pushback ; emit(STRING); + + #F-string prefix states + + # The prefixes `u` and `b` are specific to Python 2, and f-strings are only + # valid for Python 3. Thus, the only potential prefixes are permutations of + # `f` and `fr` (upper/lowercase notwithstanding). + + code -> maybe_fstring1 for 'f' or 'F' do mark; + maybe_string1 -> maybe_fstring2 for 'f' or 'F' + maybe_fstring1 -> maybe_fstring2 for 'r' or 'R' + maybe_fstring1 or maybe_fstring2 -> fquote_s for "'" + maybe_fstring1 or maybe_fstring2 -> fquote_d for '"' + maybe_fstring1 or maybe_fstring2 -> in_identifier for * do pushback; + fquote_s -> fquote_ss for "'" + fquote_d -> fquote_dd for '"' + fquote_s -> instring for * do pushback ; push(fstring_start_s); + fquote_ss -> instring for "'" do push(fstring_start_sss); + fquote_ss -> code for * do pushback ; emit(STRING); + fquote_d -> instring for * do pushback ; push(fstring_start_d); + fquote_dd -> instring for '"' do push(fstring_start_ddd); + fquote_dd -> code for * do pushback ; emit(STRING); + + #String states + instring -> instring for * + instring -> unicode_or_escape for '\\' + unicode_or_escape -> unicode_or_raw for 'N' + unicode_or_raw -> unicode for '{' + unicode_or_raw -> instring for * + unicode -> instring for '}' + unicode -> unicode for * + unicode_or_escape -> escape for * do pushback; + + escape -> instring for feed do newline; + escape -> instring for * + + # When inside a parenthesized expression, newlines indicate the continuation + # of the expression, and not a return to a context where statements may + # appear. This is captured using the `paren` table. + + code -> code for '(' do emit(LPAR, "("); push(paren); + code -> code for '[' do emit(LSQB, "["); push(paren); + code -> code for '{' do emit(LBRACE, "{"); push(paren); + code -> code for ')' do emit(RPAR, ")"); + code -> code for ']' do emit(RSQB, "]"); + code -> code for '}' do emit(RBRACE, "}"); + code -> code for '`' do emit(BACKQUOTE, '`'); + + # Operators + code -> assign for '=' do mark; + code -> le for '<' do mark; + code -> ge for '>' do mark; + code -> bang for '!' do mark; + le -> binop for '<' + le -> code for '>' do emit(OP); + ge -> binop for '>' + bang or le or ge or assign -> code for '=' do emit(OP); + le or ge or assign -> code for * do pushback; emit(OP); + bang -> code for 'r' or 'a' or 's' or 'd' do emit(CONVERSION); + code -> colon for ':' + colon -> code for '=' do emit(COLONEQUAL, ":="); + colon -> code for * do pushback; emit(COLON, ":"); + code -> code for ',' do emit(COMMA, ","); + code -> code for ';' do emit(SEMI, ";"); + code -> at for '@' do mark; + at -> code for '=' do emit(OP); + at -> code for * do pushback; emit(AT, "@"); + code -> dot for '.' do mark; + dot -> float for digits + dot -> code for * do pushback; emit(DOT, "."); + binop or slash or star or dash -> code for '=' do emit(OP); + binop or slash or star or dash -> code for * do pushback; emit(OP); + code -> star for '*' do mark; + star -> binop for '*' + code -> slash for '/' do mark; + slash -> binop for '/' + code -> dash for '-' do mark; + dash -> code for '>' do emit(RARROW); + code -> binop for '+' or '%' or '&' or '|' or '^' do mark; + code -> code for '~' do emit(OP, '~'); + + # Numeric literals + + # Python admits a large variety of numeric literals, and the handling of + # various constructs is a bit inconsistent. For instance, prefixed zeroes are + # not allowed in front of integer numerals (unless all digits are between 0 + # and 7, in which case it is treated as an octal number), but _are_ allowed if + # there is some other context that makes it a float or complex number. Thus, + # `09` is invalid, but `09.` and `09j` are valid. This means we have to be + # very careful in what we commit to in our tokenization, hence the rather + # complicated construction below. + + code -> int for one_to_nine do mark; + int -> int for digits + zero or zero_int or binary or octal or int or hex -> code for 'l' or 'L' do emit(NUMBER); + int -> int_sep for '_' + int_sep -> int for digits + int_sep -> error for * do emit(ERRORTOKEN); + code -> zero for '0' do mark; + zero -> zero_int for digits + zero -> zero_int_sep for '_' + zero_int -> zero_int for digits + zero_int -> zero_int_sep for '_' + zero_int_sep -> zero_int for digits + zero_int_sep -> error for * do emit(ERRORTOKEN); + zero -> octal for 'o' or 'O' + octal -> octal for oct_digits + octal -> octal_sep for '_' + octal_sep -> octal for oct_digits + octal_sep -> error for * do emit(ERRORTOKEN); + zero or octal or hex or binary -> code for * do pushback; emit(NUMBER); + zero -> binary for 'b' or 'B' + binary -> binary for '0' or '1' + binary -> binary_sep for '_' + binary_sep -> binary for '0' or '1' + binary_sep -> error for * do emit(ERRORTOKEN); + zero -> hex for 'x' or 'X' + hex -> hex for hex_digits + hex -> hex_sep for '_' + hex_sep -> hex for hex_digits + hex_sep -> error for * do emit(ERRORTOKEN); + zero or zero_int or int -> int_dot for '.' + zero_int or int -> code for * do pushback; emit(NUMBER); + int_dot or float -> float for digits + float -> float_sep for '_' + float_sep -> float for digits + float_sep -> error for * do emit(ERRORTOKEN); + int_dot -> code for * do pushback; emit(NUMBER); + float or zero or zero_int or int or int_dot -> float_e for 'e' + float or zero or zero_int or int or int_dot -> float_E for 'E' + # `1 if 1else 0` is valid syntax, so we cannot assume 'e' always indicates a float. + float_e -> code for 'l' do pushback; pushback; emit(NUMBER); + float_e or float_E -> float_E for '+' or '-' + float_e or float_E or float_x -> float_x for digits + float_x -> float_x_sep for '_' + float_x_sep -> float_x for digits + float_x_sep -> error for * do emit(ERRORTOKEN); + float or float_x -> code for * do pushback; emit(NUMBER); + + # Identifiers (e.g. names and keywords) + code -> in_identifier for IDENTIFIER do mark; + in_identifier -> in_identifier for IDENTIFIER or digits or IDENTIFIER_CONTINUE + code -> dollar_name for '$' do mark; + dollar_name -> dollar_name for IDENTIFIER or digits or IDENTIFIER_CONTINUE + code -> in_identifier for '_' do mark; + in_identifier -> in_identifier for '_' + in_identifier -> code for * do pushback; emit(NAME); + dollar_name -> code for * do pushback; emit(DOLLARNAME); + + # Comments + code -> line_end_comment for '#' do mark; + line_end_comment -> code for feed do pushback; emit(COMMENT); + line_end_comment -> line_end_comment for * + comment -> whitespace_line for feed do pushback; emit(COMMENT); + comment -> comment for * + code -> whitespace_line for feed do emit(NEWLINE, "\n"); newline; + whitespace_line -> whitespace_line for SPACE or '\t' or '\f' + whitespace_line -> whitespace_line for feed do newline; + whitespace_line -> code for * do emit_indent; + whitespace_line -> comment for '#' do mark; + code -> code for SPACE or '\t' + + # Line continuations and error states. + code or float_e or float_E -> error for * do emit(ERRORTOKEN); + code -> pending_continuation for '\\' + pending_continuation -> line_continuation for feed do newline; + line_continuation -> code for * do pushback; mark; + pending_continuation -> error for * do emit(ERRORTOKEN); + error -> code for * do pushback; + code -> code for * do mark; emit(ERRORTOKEN); + zero or int_dot or zero_int or int or float or float_x -> code for 'j' or 'J' do emit(NUMBER); +} + +table paren(default) { + code -> code for feed do mark; newline; + code -> code for ')' do emit(RPAR, ")"); pop; + code -> code for ']' do emit(RSQB, "]"); pop; + code -> code for '}' do emit(RBRACE, "}"); pop; +} + +#String starting with ' +table string_s(default) { + instring -> code for "'" do pop; emit(STRING); + instring -> error for feed do pop; emit(ERRORTOKEN); newline; +} + +#String starting with " +table string_d(default) { + instring -> code for '"' do pop; emit(STRING); + instring -> error for feed do pop; emit(ERRORTOKEN); newline; +} + +#String starting with ''' +table string_sss(default) { + instring -> string_x for "'" + instring -> instring for feed do newline; + string_x -> string_xx for "'" + string_x -> instring for feed do newline; + string_x -> instring for * do pushback; + string_xx -> code for "'" do pop; emit(STRING); + string_xx -> instring for feed do newline; + string_xx -> instring for * do pushback; +} + +#String starting with """ +table string_ddd(default) { + instring -> string_x for '"' + instring -> instring for feed do newline; + string_x -> string_xx for '"' + string_x -> instring for feed do newline; + string_x -> instring for * do pushback; + string_xx -> code for '"' do pop; emit(STRING); + string_xx -> instring for feed do newline; + string_xx -> instring for * do pushback; +} + +#F-string part common to all fstrings +table fstring_sdsssddd(default) { + instring -> brace for '{' + + escape -> brace for '{' + + brace -> instring for '{' + brace -> code for * do pushback ; emit(FSTRING_MID); push(fstring_expr); +} + +#F-string part common to ' and " +table fstring_sd(fstring_sdsssddd) { + instring -> error for feed do pop; emit(ERRORTOKEN); newline; +} + +#F-string start for string starting with ' +table fstring_start_s(fstring_sd) { + instring -> code for "'" do pop; emit(STRING); + + # If this rule is removed or moved to a higher table, the QL tests start failing for unclear reasons. + # It's identical to a rule in default. + brace -> instring for '{' + brace -> code for * do pushback ; emit(FSTRING_START); pop; push(fstring_s); push(fstring_expr); +} + +#F-string part for string starting with ' +table fstring_s(fstring_sd) { + instring -> code for "'" do pop; emit(FSTRING_END); +} + +#F-string start for string starting with " +table fstring_start_d(fstring_sd) { + instring -> code for '"' do pop; emit(STRING); + + # If this rule is removed or moved to a higher table, the QL tests start failing for unclear reasons. + # It's identical to a rule in fstring_sdsssddd. + brace -> instring for '{' + brace -> code for * do pushback ; emit(FSTRING_START); pop; push(fstring_d); push(fstring_expr); +} + +#F-string part for string starting with " +table fstring_d(fstring_sd) { + instring -> code for '"' do pop; emit(FSTRING_END); +} + +#F-string part common to ''' and """ +table fstring_sssddd(fstring_sdsssddd) { + instring -> instring for feed do newline; + + string_x -> instring for feed do newline; + string_x -> instring for * do pushback; + + string_xx -> instring for feed do newline; + string_xx -> instring for * do pushback; +} + +#F-string start for string starting with ''' +table fstring_start_sss(fstring_sssddd) { + instring -> string_x for "'" + + string_x -> string_xx for "'" + + string_xx -> code for "'" do pop; emit(STRING); + + brace -> instring for '{' + brace -> code for * do pushback ; emit(FSTRING_START); pop; push(fstring_sss); push(fstring_expr); +} + +#F-string part for string starting with ''' +table fstring_sss(fstring_sssddd) { + instring -> string_x for "'" + + string_x -> string_xx for "'" + + string_xx -> code for "'" do pop; emit(FSTRING_END); +} + +#F-string start for string starting with """ +table fstring_start_ddd(fstring_sssddd) { + instring -> string_x for '"' + + string_x -> string_xx for '"' + + string_xx -> code for '"' do pop; emit(STRING); + + brace -> instring for '{' + brace -> code for * do pushback ; emit(FSTRING_START); pop; push(fstring_ddd); push(fstring_expr); +} + +#F-string part for string starting with """ +table fstring_ddd(fstring_sssddd) { + instring -> string_x for '"' + + string_x -> string_xx for '"' + + string_xx -> code for '"' do pop; emit(FSTRING_END); +} + +#Expression within an f-string +table fstring_expr(paren) { + code -> instring for '}' do pop; mark; + code -> instring for ':' do emit(COLON); push(format_specifier); + instring -> instring for '}' do pop; mark; +} + +fspec_type = 'b' or 'c' or 'd' or 'e' or 'E' or 'f' or 'F' or 'g' or 'G' or 'n' or 'o' or 's' or 'x' or 'X' or '%' +fspec_align = '<' or '>' or '=' or '^' +fspec_sign = '+' or '-' or ' ' + +table format_specifier(default) { + instring -> code for '{' do emit(FSTRING_SPEC); + instring -> instring for '}' do pushback; emit(FSTRING_SPEC); pop; + + code -> instring for '}' do mark; +} + + + +#Special state for when dedents are pending. +table pending_dedent(default) { + code -> code for * do pop; emit_indent; +} + +start: default diff --git a/python/extractor/tokenizer_generator/test.py b/python/extractor/tokenizer_generator/test.py new file mode 100644 index 00000000000..97ff19dccc4 --- /dev/null +++ b/python/extractor/tokenizer_generator/test.py @@ -0,0 +1,25 @@ + +from . import test_tokenizer +import sys +from blib2to3.pgen2.token import tok_name + +def printtoken(type, token, start, end): # for testing + token_range = "%d,%d-%d,%d:" % (start + end) + print("%-20s%-15s%r" % + (token_range, tok_name[type], token) + ) + + +def main(): + verbose = sys.argv[1] == "-v" + if verbose: + inputfile = sys.argv[2] + else: + inputfile = sys.argv[1] + with open(inputfile, "r") as input: + t = test_tokenizer.Tokenizer(input.read()+"\n") + for tkn in t.tokens(verbose): + printtoken(*tkn) + +if __name__ == "__main__": + main() diff --git a/python/extractor/tokenizer_generator/tokenizer_template.py b/python/extractor/tokenizer_generator/tokenizer_template.py new file mode 100644 index 00000000000..b4d300667ff --- /dev/null +++ b/python/extractor/tokenizer_generator/tokenizer_template.py @@ -0,0 +1,172 @@ +''' +Lookup table based tokenizer with state popping and pushing capabilities. +The ability to push and pop state is required for handling parenthesised expressions, +indentation, and f-strings. We also use it for handling the different quotation mark types, +but it is not essential for that, merely convenient. + +''' + + + +class Tokenizer(object): + + def __init__(self, text): + self.text = text + self.index = 0 + self.line_start_index = 0 + self.token_start_index = 0 + self.token_start = 1, 0 + self.line = 1 + self.super_state = START_SUPER_STATE + self.state_stack = [] + self.indents = [0] +#ACTIONS-HERE + def tokens(self, debug=False): + text = self.text + cls_table = CLASS_TABLE + id_index = ID_INDEX + id_chunks = ID_CHUNKS + max_id = len(id_index)*256 +#ACTION_TABLE_HERE + state = 0 + try: + if debug: + while True: + c = ord(text[self.index]) + if c < 128: + cls = cls_table[c] + elif c >= max_id: + cls = ERROR_CLASS + else: + b = id_chunks[id_index[c>>8]][(c>>2)&63] + cls = (b>>((c&3)*2))&3 + prev_state = state + print("char = '%s', state=%d, cls=%d" % (text[self.index], state, cls)) + state, transition = action_table[self.super_state[state][cls]] + print ("%s -> %s on %r in %s" % (prev_state, state, text[self.index], TRANSITION_STATE_NAMES[id(self.super_state)])) + if transition: + tkn = transition() + if tkn: + yield tkn + else: + self.index += 1 + else: + while True: + c = ord(text[self.index]) + if c < 128: + cls = cls_table[c] + elif c >= max_id: + cls = ERROR_CLASS + else: + b = id_chunks[id_index[c>>8]][(c>>2)&63] + cls = (b>>((c&3)*2))&3 + state, transition = action_table[self.super_state[state][cls]] + if transition: + tkn = transition() + if tkn: + yield tkn + else: + self.index += 1 + except IndexError as ex: + if self.index != len(text): + #Reraise index error + cls = cls_table[c] + trans = self.super_state[state] + action_index = trans[cls] + action_table[action_index] + # Not raised? Must have been raised in transition function. + raise ex + tkn = self.emit_indent() + while tkn is not None: + yield tkn + tkn = self.emit_indent() + end = self.line, self.index-self.line_start_index + yield ENDMARKER, u"", self.token_start, end + return + + def emit_indent(self): + indent = 0 + index = self.line_start_index + current = self.index + here = self.line, current-self.line_start_index + while index < current: + if self.text[index] == ' ': + indent += 1 + elif self.text[index] == '\t': + indent = (indent+8) & -8 + elif self.text[index] == '\f': + indent = 0 + else: + #Unexpected state. Emit error token + while len(self.indents) > 1: + self.indents.pop() + result = ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, here + self.token_start = here + self.line_start_index = self.index + return result + index += 1 + if indent == self.indents[-1]: + self.token_start = here + self.token_start_index = self.index + return None + elif indent > self.indents[-1]: + self.indents.append(indent) + start = self.line, 0 + result = INDENT, self.text[self.line_start_index:current], start, here + self.token_start = here + self.token_start_index = current + return result + else: + self.indents.pop() + if indent > self.indents[-1]: + #Illegal indent + result = ILLEGALINDENT, u"", here, here + else: + result = DEDENT, u"", here, here + if indent < self.indents[-1]: + #More dedents to do + self.state_stack.append(self.super_state) + self.super_state = PENDING_DEDENT + self.token_start = here + self.token_start_index = self.index + return result + + +ENCODING_RE = re.compile(br'.*coding[:=]\s*([-\w.]+).*') +NEWLINE_BYTES = b'\n' + +def encoding_from_source(source): + 'Returns encoding of source (bytes), plus source strip of any BOM markers.' + #Check for BOM + if source.startswith(codecs.BOM_UTF8): + return 'utf8', source[len(codecs.BOM_UTF8):] + if source.startswith(codecs.BOM_UTF16_BE): + return 'utf-16be', source[len(codecs.BOM_UTF16_BE):] + if source.startswith(codecs.BOM_UTF16_LE): + return 'utf-16le', source[len(codecs.BOM_UTF16_LE):] + try: + first_new_line = source.find(NEWLINE_BYTES) + first_line = source[:first_new_line] + second_new_line = source.find(NEWLINE_BYTES, first_new_line+1) + second_line = source[first_new_line+1:second_new_line] + match = ENCODING_RE.match(first_line) or ENCODING_RE.match(second_line) + if match: + ascii_encoding = match.groups()[0] + encoding = ascii_encoding.decode("ascii") + # Handle non-standard encodings that are recognised by the interpreter. + if encoding.startswith("utf-8-"): + encoding = "utf-8" + elif encoding == "iso-latin-1": + encoding = "iso-8859-1" + elif encoding.startswith("latin-1-"): + encoding = "iso-8859-1" + elif encoding.startswith("iso-8859-1-"): + encoding = "iso-8859-1" + elif encoding.startswith("iso-latin-1-"): + encoding = "iso-8859-1" + return encoding, source + except Exception as ex: + print(ex) + #Failed to determine encoding -- Just treat as default. + pass + return 'utf-8', source diff --git a/python/extractor/tox.ini b/python/extractor/tox.ini new file mode 100644 index 00000000000..2a8979e1651 --- /dev/null +++ b/python/extractor/tox.ini @@ -0,0 +1,15 @@ +[tox] +envlist = py37, py38, py39, py310, py311, py312 +minversion = 4.11.3 +isolated_build = true + +[testenv] +skip_install = true +allowlist_externals = poetry +commands_pre = + poetry env use -- {env_python} + poetry install +commands = + poetry run pytest tests/ +setenv = + VIRTUALENV_DISCOVERY = pyenv diff --git a/python/extractor/tsg-python/.gitignore b/python/extractor/tsg-python/.gitignore new file mode 100644 index 00000000000..2f7896d1d13 --- /dev/null +++ b/python/extractor/tsg-python/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/python/extractor/tsg-python/BUILD.bazel b/python/extractor/tsg-python/BUILD.bazel new file mode 100644 index 00000000000..8e1425e3f3e --- /dev/null +++ b/python/extractor/tsg-python/BUILD.bazel @@ -0,0 +1,16 @@ +load("@tsg_python_crate_index//:defs.bzl", "aliases", "all_crate_deps") +load("//:common.bzl", "codeql_rust_binary") + +codeql_rust_binary( + name = "tsg-python", + srcs = ["src/main.rs"], + aliases = aliases(), + data = ["python.tsg"], + proc_macro_deps = all_crate_deps( + proc_macro = True, + ), + visibility = ["//visibility:public"], + deps = all_crate_deps( + normal = True, + ) + ["//extractor-python/tsg-python/tree-sitter-python"], +) diff --git a/python/extractor/tsg-python/Cargo.Bazel.lock b/python/extractor/tsg-python/Cargo.Bazel.lock new file mode 100644 index 00000000000..fbbd661c9e4 --- /dev/null +++ b/python/extractor/tsg-python/Cargo.Bazel.lock @@ -0,0 +1,2346 @@ +{ + "checksum": "54f1095f5a2e74da736682bc8d355b3dbce47558983feba04faba84cf3abfaca", + "crates": { + "ahash 0.4.7": { + "name": "ahash", + "version": "0.4.7", + "package_url": "https://github.com/tkaitchuck/ahash", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/ahash/0.4.7/download", + "sha256": "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" + } + }, + "targets": [ + { + "Library": { + "crate_name": "ahash", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "ahash", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "0.4.7" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "aho-corasick 0.7.18": { + "name": "aho-corasick", + "version": "0.7.18", + "package_url": "https://github.com/BurntSushi/aho-corasick", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download", + "sha256": "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" + } + }, + "targets": [ + { + "Library": { + "crate_name": "aho_corasick", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "aho_corasick", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "memchr 2.4.1", + "target": "memchr" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.7.18" + }, + "license": "Unlicense/MIT", + "license_ids": [ + "MIT", + "Unlicense" + ], + "license_file": null + }, + "ansi_term 0.11.0": { + "name": "ansi_term", + "version": "0.11.0", + "package_url": "https://github.com/ogham/rust-ansi-term", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/ansi_term/0.11.0/download", + "sha256": "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" + } + }, + "targets": [ + { + "Library": { + "crate_name": "ansi_term", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "ansi_term", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [], + "selects": { + "cfg(target_os = \"windows\")": [ + { + "id": "winapi 0.3.9", + "target": "winapi" + } + ] + } + }, + "edition": "2015", + "version": "0.11.0" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "anyhow 1.0.44": { + "name": "anyhow", + "version": "1.0.44", + "package_url": "https://github.com/dtolnay/anyhow", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/anyhow/1.0.44/download", + "sha256": "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" + } + }, + "targets": [ + { + "Library": { + "crate_name": "anyhow", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "anyhow", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "anyhow 1.0.44", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.44" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "atty 0.2.14": { + "name": "atty", + "version": "0.2.14", + "package_url": "https://github.com/softprops/atty", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/atty/0.2.14/download", + "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" + } + }, + "targets": [ + { + "Library": { + "crate_name": "atty", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "atty", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [], + "selects": { + "cfg(target_os = \"hermit\")": [ + { + "id": "hermit-abi 0.1.19", + "target": "hermit_abi" + } + ], + "cfg(unix)": [ + { + "id": "libc 0.2.101", + "target": "libc" + } + ], + "cfg(windows)": [ + { + "id": "winapi 0.3.9", + "target": "winapi" + } + ] + } + }, + "edition": "2015", + "version": "0.2.14" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "bitflags 1.3.2": { + "name": "bitflags", + "version": "1.3.2", + "package_url": "https://github.com/bitflags/bitflags", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download", + "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + } + }, + "targets": [ + { + "Library": { + "crate_name": "bitflags", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "bitflags", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default" + ], + "selects": {} + }, + "edition": "2018", + "version": "1.3.2" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "cc 1.0.70": { + "name": "cc", + "version": "1.0.70", + "package_url": "https://github.com/alexcrichton/cc-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/cc/1.0.70/download", + "sha256": "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" + } + }, + "targets": [ + { + "Library": { + "crate_name": "cc", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "cc", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "1.0.70" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "cfg-if 1.0.0": { + "name": "cfg-if", + "version": "1.0.0", + "package_url": "https://github.com/alexcrichton/cfg-if", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download", + "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + } + }, + "targets": [ + { + "Library": { + "crate_name": "cfg_if", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "cfg_if", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "1.0.0" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "clap 2.33.3": { + "name": "clap", + "version": "2.33.3", + "package_url": "https://github.com/clap-rs/clap", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/clap/2.33.3/download", + "sha256": "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" + } + }, + "targets": [ + { + "Library": { + "crate_name": "clap", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "clap", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "ansi_term", + "atty", + "color", + "default", + "strsim", + "suggestions", + "vec_map" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "atty 0.2.14", + "target": "atty" + }, + { + "id": "bitflags 1.3.2", + "target": "bitflags" + }, + { + "id": "strsim 0.8.0", + "target": "strsim" + }, + { + "id": "textwrap 0.11.0", + "target": "textwrap" + }, + { + "id": "unicode-width 0.1.8", + "target": "unicode_width" + }, + { + "id": "vec_map 0.8.2", + "target": "vec_map" + } + ], + "selects": { + "cfg(not(windows))": [ + { + "id": "ansi_term 0.11.0", + "target": "ansi_term" + } + ] + } + }, + "edition": "2015", + "version": "2.33.3" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "hashbrown 0.9.1": { + "name": "hashbrown", + "version": "0.9.1", + "package_url": "https://github.com/rust-lang/hashbrown", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/hashbrown/0.9.1/download", + "sha256": "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + } + }, + "targets": [ + { + "Library": { + "crate_name": "hashbrown", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "hashbrown", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "ahash", + "inline-more" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "ahash 0.4.7", + "target": "ahash" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.9.1" + }, + "license": "Apache-2.0/MIT", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "hermit-abi 0.1.19": { + "name": "hermit-abi", + "version": "0.1.19", + "package_url": "https://github.com/hermitcore/libhermit-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download", + "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" + } + }, + "targets": [ + { + "Library": { + "crate_name": "hermit_abi", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "hermit_abi", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "libc 0.2.101", + "target": "libc" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.1.19" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "itoa 1.0.1": { + "name": "itoa", + "version": "1.0.1", + "package_url": "https://github.com/dtolnay/itoa", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/itoa/1.0.1/download", + "sha256": "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + } + }, + "targets": [ + { + "Library": { + "crate_name": "itoa", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "itoa", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "1.0.1" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "libc 0.2.101": { + "name": "libc", + "version": "0.2.101", + "package_url": "https://github.com/rust-lang/libc", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/libc/0.2.101/download", + "sha256": "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" + } + }, + "targets": [ + { + "Library": { + "crate_name": "libc", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "libc", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "libc 0.2.101", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "0.2.101" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "log 0.4.14": { + "name": "log", + "version": "0.4.14", + "package_url": "https://github.com/rust-lang/log", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/log/0.4.14/download", + "sha256": "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" + } + }, + "targets": [ + { + "Library": { + "crate_name": "log", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "log", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" + }, + { + "id": "log 0.4.14", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "0.4.14" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "memchr 2.4.1": { + "name": "memchr", + "version": "2.4.1", + "package_url": "https://github.com/BurntSushi/memchr", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/memchr/2.4.1/download", + "sha256": "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + } + }, + "targets": [ + { + "Library": { + "crate_name": "memchr", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "memchr", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "memchr 2.4.1", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "2.4.1" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "Unlicense/MIT", + "license_ids": [ + "MIT", + "Unlicense" + ], + "license_file": null + }, + "proc-macro2 1.0.29": { + "name": "proc-macro2", + "version": "1.0.29", + "package_url": "https://github.com/alexcrichton/proc-macro2", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.29/download", + "sha256": "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" + } + }, + "targets": [ + { + "Library": { + "crate_name": "proc_macro2", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "proc_macro2", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "proc-macro" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "proc-macro2 1.0.29", + "target": "build_script_build" + }, + { + "id": "unicode-xid 0.2.2", + "target": "unicode_xid" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.29" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "quote 1.0.9": { + "name": "quote", + "version": "1.0.9", + "package_url": "https://github.com/dtolnay/quote", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/quote/1.0.9/download", + "sha256": "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" + } + }, + "targets": [ + { + "Library": { + "crate_name": "quote", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "quote", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "proc-macro" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "proc-macro2 1.0.29", + "target": "proc_macro2" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.9" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "regex 1.5.5": { + "name": "regex", + "version": "1.5.5", + "package_url": "https://github.com/rust-lang/regex", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/regex/1.5.5/download", + "sha256": "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" + } + }, + "targets": [ + { + "Library": { + "crate_name": "regex", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "regex", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "aho-corasick", + "default", + "memchr", + "perf", + "perf-cache", + "perf-dfa", + "perf-inline", + "perf-literal", + "std", + "unicode", + "unicode-age", + "unicode-bool", + "unicode-case", + "unicode-gencat", + "unicode-perl", + "unicode-script", + "unicode-segment" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "aho-corasick 0.7.18", + "target": "aho_corasick" + }, + { + "id": "memchr 2.4.1", + "target": "memchr" + }, + { + "id": "regex-syntax 0.6.25", + "target": "regex_syntax" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.5.5" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "regex-syntax 0.6.25": { + "name": "regex-syntax", + "version": "0.6.25", + "package_url": "https://github.com/rust-lang/regex", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download", + "sha256": "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + } + }, + "targets": [ + { + "Library": { + "crate_name": "regex_syntax", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "regex_syntax", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "unicode", + "unicode-age", + "unicode-bool", + "unicode-case", + "unicode-gencat", + "unicode-perl", + "unicode-script", + "unicode-segment" + ], + "selects": {} + }, + "edition": "2018", + "version": "0.6.25" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "ryu 1.0.9": { + "name": "ryu", + "version": "1.0.9", + "package_url": "https://github.com/dtolnay/ryu", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/ryu/1.0.9/download", + "sha256": "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + } + }, + "targets": [ + { + "Library": { + "crate_name": "ryu", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "ryu", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "1.0.9" + }, + "license": "Apache-2.0 OR BSL-1.0", + "license_ids": [ + "Apache-2.0", + "BSL-1.0" + ], + "license_file": null + }, + "serde 1.0.136": { + "name": "serde", + "version": "1.0.136", + "package_url": "https://github.com/serde-rs/serde", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/serde/1.0.136/download", + "sha256": "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" + } + }, + "targets": [ + { + "Library": { + "crate_name": "serde", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "serde", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "serde 1.0.136", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "1.0.136" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "serde_json 1.0.79": { + "name": "serde_json", + "version": "1.0.79", + "package_url": "https://github.com/serde-rs/json", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/serde_json/1.0.79/download", + "sha256": "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" + } + }, + "targets": [ + { + "Library": { + "crate_name": "serde_json", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "serde_json", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "itoa 1.0.1", + "target": "itoa" + }, + { + "id": "ryu 1.0.9", + "target": "ryu" + }, + { + "id": "serde 1.0.136", + "target": "serde" + }, + { + "id": "serde_json 1.0.79", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.79" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "smallvec 1.6.1": { + "name": "smallvec", + "version": "1.6.1", + "package_url": "https://github.com/servo/rust-smallvec", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/smallvec/1.6.1/download", + "sha256": "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" + } + }, + "targets": [ + { + "Library": { + "crate_name": "smallvec", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "smallvec", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "union" + ], + "selects": {} + }, + "edition": "2018", + "version": "1.6.1" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "string-interner 0.12.2": { + "name": "string-interner", + "version": "0.12.2", + "package_url": "https://github.com/robbepop/string-interner", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/string-interner/0.12.2/download", + "sha256": "383196d1876517ee6f9f0864d1fc1070331b803335d3c6daaa04bbcccd823c08" + } + }, + "targets": [ + { + "Library": { + "crate_name": "string_interner", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "string_interner", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "backends", + "inline-more", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" + }, + { + "id": "hashbrown 0.9.1", + "target": "hashbrown" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.12.2" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "strsim 0.8.0": { + "name": "strsim", + "version": "0.8.0", + "package_url": "https://github.com/dguo/strsim-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/strsim/0.8.0/download", + "sha256": "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + } + }, + "targets": [ + { + "Library": { + "crate_name": "strsim", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "strsim", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2015", + "version": "0.8.0" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "syn 1.0.76": { + "name": "syn", + "version": "1.0.76", + "package_url": "https://github.com/dtolnay/syn", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/syn/1.0.76/download", + "sha256": "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84" + } + }, + "targets": [ + { + "Library": { + "crate_name": "syn", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "syn", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "clone-impls", + "default", + "derive", + "parsing", + "printing", + "proc-macro", + "quote" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "proc-macro2 1.0.29", + "target": "proc_macro2" + }, + { + "id": "quote 1.0.9", + "target": "quote" + }, + { + "id": "syn 1.0.76", + "target": "build_script_build" + }, + { + "id": "unicode-xid 0.2.2", + "target": "unicode_xid" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.76" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "textwrap 0.11.0": { + "name": "textwrap", + "version": "0.11.0", + "package_url": "https://github.com/mgeisler/textwrap", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/textwrap/0.11.0/download", + "sha256": "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" + } + }, + "targets": [ + { + "Library": { + "crate_name": "textwrap", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "textwrap", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "unicode-width 0.1.8", + "target": "unicode_width" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "0.11.0" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "thiserror 1.0.29": { + "name": "thiserror", + "version": "1.0.29", + "package_url": "https://github.com/dtolnay/thiserror", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/thiserror/1.0.29/download", + "sha256": "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88" + } + }, + "targets": [ + { + "Library": { + "crate_name": "thiserror", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "thiserror", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "proc_macro_deps": { + "common": [ + { + "id": "thiserror-impl 1.0.29", + "target": "thiserror_impl" + } + ], + "selects": {} + }, + "version": "1.0.29" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "thiserror-impl 1.0.29": { + "name": "thiserror-impl", + "version": "1.0.29", + "package_url": "https://github.com/dtolnay/thiserror", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/thiserror-impl/1.0.29/download", + "sha256": "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c" + } + }, + "targets": [ + { + "ProcMacro": { + "crate_name": "thiserror_impl", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "thiserror_impl", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "proc-macro2 1.0.29", + "target": "proc_macro2" + }, + { + "id": "quote 1.0.9", + "target": "quote" + }, + { + "id": "syn 1.0.76", + "target": "syn" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.29" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "tree-sitter 0.20.4": { + "name": "tree-sitter", + "version": "0.20.4", + "package_url": "https://github.com/tree-sitter/tree-sitter", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/tree-sitter/0.20.4/download", + "sha256": "4e34327f8eac545e3f037382471b2b19367725a242bba7bc45edb9efb49fe39a" + } + }, + "targets": [ + { + "Library": { + "crate_name": "tree_sitter", + "crate_root": "binding_rust/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "binding_rust/build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "tree_sitter", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "regex 1.5.5", + "target": "regex" + }, + { + "id": "tree-sitter 0.20.4", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.20.4" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "cc 1.0.70", + "target": "cc" + } + ], + "selects": {} + } + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "tree-sitter-graph 0.7.0": { + "name": "tree-sitter-graph", + "version": "0.7.0", + "package_url": "https://github.com/tree-sitter/tree-sitter-graph/", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/tree-sitter-graph/0.7.0/download", + "sha256": "639d21e886f581d293de5f5081f09af003c54607ff3fa85efa159b243ba1f97a" + } + }, + "targets": [ + { + "Library": { + "crate_name": "tree_sitter_graph", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "tree_sitter_graph", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "log 0.4.14", + "target": "log" + }, + { + "id": "regex 1.5.5", + "target": "regex" + }, + { + "id": "serde 1.0.136", + "target": "serde" + }, + { + "id": "serde_json 1.0.79", + "target": "serde_json" + }, + { + "id": "smallvec 1.6.1", + "target": "smallvec" + }, + { + "id": "string-interner 0.12.2", + "target": "string_interner" + }, + { + "id": "thiserror 1.0.29", + "target": "thiserror" + }, + { + "id": "tree-sitter 0.20.4", + "target": "tree_sitter" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.7.0" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "tree-sitter-python 0.19.0": { + "name": "tree-sitter-python", + "version": "0.19.0", + "package_url": "https://github.com/tree-sitter/tree-sitter-python", + "repository": null, + "targets": [ + { + "Library": { + "crate_name": "tree_sitter_python", + "crate_root": "bindings/rust/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "bindings/rust/build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "tree_sitter_python", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "tree-sitter 0.20.4", + "target": "tree_sitter" + }, + { + "id": "tree-sitter-python 0.19.0", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.19.0" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "cc 1.0.70", + "target": "cc" + } + ], + "selects": {} + } + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "tsg-python 0.1.0": { + "name": "tsg-python", + "version": "0.1.0", + "package_url": null, + "repository": null, + "targets": [], + "library_target_name": null, + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "anyhow 1.0.44", + "target": "anyhow" + }, + { + "id": "clap 2.33.3", + "target": "clap" + }, + { + "id": "regex 1.5.5", + "target": "regex" + }, + { + "id": "smallvec 1.6.1", + "target": "smallvec" + }, + { + "id": "string-interner 0.12.2", + "target": "string_interner" + }, + { + "id": "thiserror 1.0.29", + "target": "thiserror" + }, + { + "id": "tree-sitter 0.20.4", + "target": "tree_sitter" + }, + { + "id": "tree-sitter-graph 0.7.0", + "target": "tree_sitter_graph" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.1.0" + }, + "license": null, + "license_ids": [], + "license_file": null + }, + "unicode-width 0.1.8": { + "name": "unicode-width", + "version": "0.1.8", + "package_url": "https://github.com/unicode-rs/unicode-width", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/unicode-width/0.1.8/download", + "sha256": "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + } + }, + "targets": [ + { + "Library": { + "crate_name": "unicode_width", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "unicode_width", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default" + ], + "selects": {} + }, + "edition": "2015", + "version": "0.1.8" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "unicode-xid 0.2.2": { + "name": "unicode-xid", + "version": "0.2.2", + "package_url": "https://github.com/unicode-rs/unicode-xid", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download", + "sha256": "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + } + }, + "targets": [ + { + "Library": { + "crate_name": "unicode_xid", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "unicode_xid", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default" + ], + "selects": {} + }, + "edition": "2015", + "version": "0.2.2" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "vec_map 0.8.2": { + "name": "vec_map", + "version": "0.8.2", + "package_url": "https://github.com/contain-rs/vec-map", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/vec_map/0.8.2/download", + "sha256": "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + } + }, + "targets": [ + { + "Library": { + "crate_name": "vec_map", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "vec_map", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2015", + "version": "0.8.2" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "winapi 0.3.9": { + "name": "winapi", + "version": "0.3.9", + "package_url": "https://github.com/retep998/winapi-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download", + "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" + } + }, + "targets": [ + { + "Library": { + "crate_name": "winapi", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "winapi", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "consoleapi", + "errhandlingapi", + "minwinbase", + "minwindef", + "processenv", + "winbase" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "winapi 0.3.9", + "target": "build_script_build" + } + ], + "selects": { + "i686-pc-windows-gnu": [ + { + "id": "winapi-i686-pc-windows-gnu 0.4.0", + "target": "winapi_i686_pc_windows_gnu" + } + ], + "x86_64-pc-windows-gnu": [ + { + "id": "winapi-x86_64-pc-windows-gnu 0.4.0", + "target": "winapi_x86_64_pc_windows_gnu" + } + ] + } + }, + "edition": "2015", + "version": "0.3.9" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "winapi-i686-pc-windows-gnu 0.4.0": { + "name": "winapi-i686-pc-windows-gnu", + "version": "0.4.0", + "package_url": "https://github.com/retep998/winapi-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download", + "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + } + }, + "targets": [ + { + "Library": { + "crate_name": "winapi_i686_pc_windows_gnu", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "winapi_i686_pc_windows_gnu", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "winapi-i686-pc-windows-gnu 0.4.0", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "0.4.0" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "winapi-x86_64-pc-windows-gnu 0.4.0": { + "name": "winapi-x86_64-pc-windows-gnu", + "version": "0.4.0", + "package_url": "https://github.com/retep998/winapi-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download", + "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + } + }, + "targets": [ + { + "Library": { + "crate_name": "winapi_x86_64_pc_windows_gnu", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "winapi_x86_64_pc_windows_gnu", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "winapi-x86_64-pc-windows-gnu 0.4.0", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "0.4.0" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + } + }, + "binary_crates": [], + "workspace_members": { + "tree-sitter-python 0.19.0": "extractor-python/tsg-python/tree-sitter-python", + "tsg-python 0.1.0": "extractor-python/tsg-python" + }, + "conditions": { + "aarch64-apple-darwin": [ + "aarch64-apple-darwin" + ], + "aarch64-apple-ios": [ + "aarch64-apple-ios" + ], + "aarch64-apple-ios-sim": [ + "aarch64-apple-ios-sim" + ], + "aarch64-fuchsia": [ + "aarch64-fuchsia" + ], + "aarch64-linux-android": [ + "aarch64-linux-android" + ], + "aarch64-pc-windows-msvc": [ + "aarch64-pc-windows-msvc" + ], + "aarch64-unknown-linux-gnu": [ + "aarch64-unknown-linux-gnu" + ], + "aarch64-unknown-nixos-gnu": [ + "aarch64-unknown-nixos-gnu" + ], + "aarch64-unknown-nto-qnx710": [ + "aarch64-unknown-nto-qnx710" + ], + "arm-unknown-linux-gnueabi": [ + "arm-unknown-linux-gnueabi" + ], + "armv7-linux-androideabi": [ + "armv7-linux-androideabi" + ], + "armv7-unknown-linux-gnueabi": [ + "armv7-unknown-linux-gnueabi" + ], + "cfg(not(windows))": [ + "aarch64-apple-darwin", + "aarch64-apple-ios", + "aarch64-apple-ios-sim", + "aarch64-fuchsia", + "aarch64-linux-android", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-nixos-gnu", + "aarch64-unknown-nto-qnx710", + "arm-unknown-linux-gnueabi", + "armv7-linux-androideabi", + "armv7-unknown-linux-gnueabi", + "i686-apple-darwin", + "i686-linux-android", + "i686-unknown-freebsd", + "i686-unknown-linux-gnu", + "powerpc-unknown-linux-gnu", + "riscv32imc-unknown-none-elf", + "riscv64gc-unknown-none-elf", + "s390x-unknown-linux-gnu", + "thumbv7em-none-eabi", + "thumbv8m.main-none-eabi", + "wasm32-unknown-unknown", + "wasm32-wasi", + "x86_64-apple-darwin", + "x86_64-apple-ios", + "x86_64-fuchsia", + "x86_64-linux-android", + "x86_64-unknown-freebsd", + "x86_64-unknown-linux-gnu", + "x86_64-unknown-nixos-gnu", + "x86_64-unknown-none" + ], + "cfg(target_os = \"hermit\")": [], + "cfg(target_os = \"windows\")": [ + "aarch64-pc-windows-msvc", + "i686-pc-windows-msvc", + "x86_64-pc-windows-msvc" + ], + "cfg(unix)": [ + "aarch64-apple-darwin", + "aarch64-apple-ios", + "aarch64-apple-ios-sim", + "aarch64-fuchsia", + "aarch64-linux-android", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-nixos-gnu", + "aarch64-unknown-nto-qnx710", + "arm-unknown-linux-gnueabi", + "armv7-linux-androideabi", + "armv7-unknown-linux-gnueabi", + "i686-apple-darwin", + "i686-linux-android", + "i686-unknown-freebsd", + "i686-unknown-linux-gnu", + "powerpc-unknown-linux-gnu", + "s390x-unknown-linux-gnu", + "x86_64-apple-darwin", + "x86_64-apple-ios", + "x86_64-fuchsia", + "x86_64-linux-android", + "x86_64-unknown-freebsd", + "x86_64-unknown-linux-gnu", + "x86_64-unknown-nixos-gnu" + ], + "cfg(windows)": [ + "aarch64-pc-windows-msvc", + "i686-pc-windows-msvc", + "x86_64-pc-windows-msvc" + ], + "i686-apple-darwin": [ + "i686-apple-darwin" + ], + "i686-linux-android": [ + "i686-linux-android" + ], + "i686-pc-windows-gnu": [], + "i686-pc-windows-msvc": [ + "i686-pc-windows-msvc" + ], + "i686-unknown-freebsd": [ + "i686-unknown-freebsd" + ], + "i686-unknown-linux-gnu": [ + "i686-unknown-linux-gnu" + ], + "powerpc-unknown-linux-gnu": [ + "powerpc-unknown-linux-gnu" + ], + "riscv32imc-unknown-none-elf": [ + "riscv32imc-unknown-none-elf" + ], + "riscv64gc-unknown-none-elf": [ + "riscv64gc-unknown-none-elf" + ], + "s390x-unknown-linux-gnu": [ + "s390x-unknown-linux-gnu" + ], + "thumbv7em-none-eabi": [ + "thumbv7em-none-eabi" + ], + "thumbv8m.main-none-eabi": [ + "thumbv8m.main-none-eabi" + ], + "wasm32-unknown-unknown": [ + "wasm32-unknown-unknown" + ], + "wasm32-wasi": [ + "wasm32-wasi" + ], + "x86_64-apple-darwin": [ + "x86_64-apple-darwin" + ], + "x86_64-apple-ios": [ + "x86_64-apple-ios" + ], + "x86_64-fuchsia": [ + "x86_64-fuchsia" + ], + "x86_64-linux-android": [ + "x86_64-linux-android" + ], + "x86_64-pc-windows-gnu": [], + "x86_64-pc-windows-msvc": [ + "x86_64-pc-windows-msvc" + ], + "x86_64-unknown-freebsd": [ + "x86_64-unknown-freebsd" + ], + "x86_64-unknown-linux-gnu": [ + "x86_64-unknown-linux-gnu" + ], + "x86_64-unknown-nixos-gnu": [ + "x86_64-unknown-nixos-gnu" + ], + "x86_64-unknown-none": [ + "x86_64-unknown-none" + ] + }, + "direct_deps": [ + "anyhow 1.0.44", + "cc 1.0.70", + "clap 2.33.3", + "regex 1.5.5", + "smallvec 1.6.1", + "string-interner 0.12.2", + "thiserror 1.0.29", + "tree-sitter 0.20.4", + "tree-sitter-graph 0.7.0" + ], + "direct_dev_deps": [] +} diff --git a/python/extractor/tsg-python/Cargo.lock b/python/extractor/tsg-python/Cargo.lock new file mode 100644 index 00000000000..9ee8840bde1 --- /dev/null +++ b/python/extractor/tsg-python/Cargo.lock @@ -0,0 +1,331 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +dependencies = [ + "winapi", +] + +[[package]] +name = "anyhow" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "cc" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "2.33.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + +[[package]] +name = "libc" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "proc-macro2" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + +[[package]] +name = "serde" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" + +[[package]] +name = "serde_json" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "smallvec" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" + +[[package]] +name = "string-interner" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "383196d1876517ee6f9f0864d1fc1070331b803335d3c6daaa04bbcccd823c08" +dependencies = [ + "cfg-if", + "hashbrown", +] + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "syn" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tree-sitter" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e34327f8eac545e3f037382471b2b19367725a242bba7bc45edb9efb49fe39a" +dependencies = [ + "cc", + "regex", +] + +[[package]] +name = "tree-sitter-graph" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "639d21e886f581d293de5f5081f09af003c54607ff3fa85efa159b243ba1f97a" +dependencies = [ + "log", + "regex", + "serde", + "serde_json", + "smallvec", + "string-interner", + "thiserror", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-python" +version = "0.19.0" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tsg-python" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "regex", + "smallvec", + "string-interner", + "thiserror", + "tree-sitter", + "tree-sitter-graph", + "tree-sitter-python", +] + +[[package]] +name = "unicode-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/python/extractor/tsg-python/Cargo.toml b/python/extractor/tsg-python/Cargo.toml new file mode 100644 index 00000000000..b88adbc42d9 --- /dev/null +++ b/python/extractor/tsg-python/Cargo.toml @@ -0,0 +1,26 @@ +[workspace] + +[package] +name = "tsg-python" +version = "0.1.0" +authors = ["Taus Brock-Nannestad "] +edition = "2018" + +# When changing/updating these, the `Cargo.Bazel.lock` file has to be regenerated. +# Check out the documentation at https://bazelbuild.github.io/rules_rust/crate_universe.html#repinning--updating-dependencies +# for how to do so. The bazel repository for the tsg-python project is called `tsg_python_crate_index`, +# and instead of calling `bazel sync`, `./build --bazel sync` should be used instead, to always use the correct bazel version. +[dependencies] +anyhow = "1.0" +regex = "1" +smallvec = { version="1.6", features=["union"] } +thiserror = "1.0" +tree-sitter = "0.20.4" +tree-sitter-graph = "0.7.0" +tree-sitter-python = {path = "tree-sitter-python"} +clap = "2.32" + +[dependencies.string-interner] +version = "0.12" +default-features = false +features = ["std", "inline-more", "backends"] diff --git a/python/extractor/tsg-python/LICENSE-APACHE b/python/extractor/tsg-python/LICENSE-APACHE new file mode 100644 index 00000000000..d6456956733 --- /dev/null +++ b/python/extractor/tsg-python/LICENSE-APACHE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/python/extractor/tsg-python/LICENSE-MIT b/python/extractor/tsg-python/LICENSE-MIT new file mode 100644 index 00000000000..1a8706acb11 --- /dev/null +++ b/python/extractor/tsg-python/LICENSE-MIT @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 stack-graphs authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/python/extractor/tsg-python/README.md b/python/extractor/tsg-python/README.md new file mode 100644 index 00000000000..ee3c25d8643 --- /dev/null +++ b/python/extractor/tsg-python/README.md @@ -0,0 +1,624 @@ +# `tsg-python` + +Run `tree-sitter-graph` queries against Python source files. + +## How to build + +Run `cargo build --release`. The resulting binary can be found in the `target/release` directory. + +## How to invoke + +`tsg-python tsg-file.tsg python-file.py` + +Output is emitted on `stdout`. + +If you're impatient, you can also build and run using `cargo run` followed by the arguments given +above. + +## How to use + +To use `tsg-python`, you must have an appropriate `.tsg` file containing the directions for how to +construct a Python AST from the output of `tree-sitter-python`. + +### A quick primer on `tree-sitter-graph` syntax + +A file consists of a sequence of stanzas. Each stanza consists of a query (using the [tree-sitter +query syntax](https://tree-sitter.github.io/tree-sitter/using-parsers#pattern-matching-with-queries)) and a sequence of nodes and edges to define for each query match in the source file. +Queries will (almost always) include captures like `@foo`, which means any occurrence of `@foo` in +the corresponding stanza will refer to a particular syntax node in the bit that the query matches. + +Stanzas are executed in order, and a stanza is only run when all possible matches have been +exhausted for all preceding stanzas. (Since the syntax tree that is matched against never changes, +execution never jumps back to an earlier stanza.) + +Inside stanzas, scoped variables have the form `@foo.bar` where `@foo` is a capture in the +associated query, and `bar` is an identifier. This should be thought of as a variable that is +"attached" to the `tree-sitter` node that `@foo` refers to. If `@baz` is another reference to the same node as +`@foo` (perhaps even in a different stanza), then `@baz.bar` will be a reference to the _same_ +scoped variable. This permits information to be linked across different stanzas. + +Assigning a value to a scoped variable is done using the syntax `let @foo.bar = some-expr` (`let` +for immutable variables, `var` for mutable variables, which may be mutated using `set`). Note that +scoped variables only exist during the execution of the stack graph, and are not immediately part of +the output graph. + +To actually produce output, we must specify some `node`s or `edge`s and possibly `attr`ibutes +thereof. + +To produce a node, we declare `node @foo.bar` (which is equivalent to `let @foo.bar = (node)`, the +right hand side being a function that creates a new node). In the output, nodes are simply integers. + +To assign an attribute to a node, we write `attr (@foo.bar) identifier = expr`, for some suitable +choice of `identifier` and `expr`. In the output, attributes are given alongside nodes in a `key: +value` notation. + +For edges and their attributes, the syntax is similar: + +`edge @foo.bar -> @baz.quux` + +and + +`attr (@foo.bar -> @baz.quux) identifier = expr`. + +Note that it is an error to declare the same node, edge, (or attribute of either of these) twice. + +### The general scheme: + + +For fields that point to some literal value +```tsg + +{ + attr (@nd.node) field_name = some_value +} +``` + +For fields that point directly to an AST node: + +```tsg + +{ + attr (@parent.node) field_name = @child.node +} +``` + +For fields that point to lists of AST nodes: + +```tsg + +{ + edge @parent.node -> @child.node + attr (@parent.node -> @child.node) field_name = +} +``` + +Scoped variables of the form `@foo.node` are used to tie the AST together, and so it's important +that this is set for nodes that map directly onto `tree-sitter-python` nodes. Thus, for instance +for binary operators, the stanza could look as follows: + +```tsg +(binary_operator + left: (_) @left + right: (_) @right +) @bin +{ + attr (@bin.node) left = @left.node + attr (@bin.node) right = @right.node +} +``` + +Note in particular the `@left.node` and `@right.node` references. In order for the above stanza to +work, these scoped variables _must_ exist and point to suitable graph `node`s. + +In practice, the setting up of all of these scoped variables (and creation of output graph nodes) +will happen at the very top of the `.tsg` file, to ensure that these scoped variables are defined +for the remainder of the file. + +To ease the creation of these variables, we have the `ast-node` convenience function. For binary +operators, it would take the following form: + +```tsg +(binary_operator) @bin +{ + let @bin.node = (ast-node @bin "BinOp") +} +``` +Here, the two arguments are respectively +- a `tree-sitter` node (which is used to set the location of `@bin.node`), and +- a string (which is used to set the "kind" of `@bin.node`) + +In effect, the call + +```tsg + let @bin.node = (ast-node @bin "BinOp") +``` + +is exactly equivalent to the more verbose + +```tsg + node @bin.node ; or equivalently `let @bin.node = (node)` + attr (@bin.node) _location = (location @bin) + attr (@bin.node) _kind = "BinOp" +``` + +As the above suggests, attributes that start with an underscore are interpreted in a special way +when reconstructing the AST. + +### Special attributes + +#### The `_kind` attribute (mandatory) +Should be set to a string consisting of the name of the corresponding Python AST class. This +information will be used to build the AST, and so it is an error if this is left out. + +Generally, this (and `_location`) will be set using the `ast-node` function. + +#### The `_skip_to` attribute (optional) +This is used to indicate that the present graph node should _not_ be turned into an AST node, but that the +graph node contained in this attribute should be used instead. That graph node may _also_ contain a +`_skip_to` field, in which case the entire chain is followed until a node is encountered that does +not have a `_skip_to` field. (Please ensure that there are no cycles of `_skip_to` pointers.) + +Example: + +In `tree-sitter-python`, assignment statements are a form of `expression_statement`, and this node +type also encompasses things like expressions (e.g. `2+2`) appearing at the level of statements. In +the internal Python AST, we need to separate the assignment from such expressions. The assignment should be present as an `Assign` node, but `2+2` should be +wrapped in an `Expr` node. To solve this, we create an `Expr` for each `expression_statement`, and +then explicitly skip this node in the AST if it contains an `assignment`. This is implemented as +follows: +```tsg +(expression_statement (assignment) @inner) @outer +{ + attr (@outer.node) _skip_to = @inner.node +} +``` + +#### The `_location` attribute (optional) +This attribute is used to indicate the location of the corresponding AST node. As with `_kind` it +should be set using the `ast-node` function. + +#### The `_location_start` and `_location_end` attributes (optional) +These attributes are used to indicate the start or end of the location of the AST node. They can be +used for nodes where `_location` has already been set, in which case they override the relevant part +of that location. For an example of this see the worked example on `if` statements below. +#### The `_start_line`, `_start_column`, `_end_line`, and `_end_column` attributes (optional) +These can be used to set the start or end position of an AST node with even greater detail than the +preceding attributes. As with the `_location_start` and `_location_end` attributes, these will +override the values of the corresponding part of the location. + +In general, these attributes should be used sparingly, as they are quite verbose. + +### Built-in functions +#### `(source-text` _`tree-sitter-node`_`)` (built-in) +This function returns the source text of the `tree-sitter` node it receives as an argument. + +Example: + +Extracting the operator from a binary expression: +```tsg +(binary_operator + operator: _ @op +) @bin +{ + attr (@bin.node) op = (source-text @op) +} +``` + +#### `(ast-node` _`tree-sitter-node`_ _`string`_`)` (`tsg-python` only) +Creates a new graph node with the given `_kind` and sets the `_location` attribute to the location +of the given `tree-sitter` node. +#### `(child-index` _`tree-sitter-node`_`)` (built-in) +Returns the index of the given `tree-sitter` node in its parent. +#### `(location` _`tree-sitter-node`_`)` (`tsg-python` only) +Returns the location of the given `tree-sitter` node as a list containing four integers +corresponding to the start row and column, followed by the end row and column. +#### `(location-start` _`tree-sitter-node`_`)` and `(location-end` _`tree-sitter-node`_`)` (`tsg-python` only) +Returns the start or end position (row followed by column) of the given `tree-sitter` node (as a list containing two integers). +#### `start-row`, `start-column`, `end-row`, and `end-column` (built-in) +(All of these take a `tree-sitter-node` as an argument.) + +Returns an integer corresponding to the appropriate part of the location of the given `tree-sitter` node. + +### A worked example: `if` statements + +The way the current parser handles `if` statements means we cannot do a straight mapping from the tree-sitter grammar to the AST. In particular, a block of code such as + +```python +if x: do_x +elif y: do_y +elif z: do_z +else: do_else +``` + +is unrolled into the following form by the current parser: + +```python +if x: do_x +else: + if y: do_y + else: + if z: do_z + else: do_else +``` + +This means we have to synthesise nodes for the inner `if` statements. + +However, this should be straightforward -- we simply have to make sure that `elif_clause`s also +produce the appropriate kind of node, and that everything is linked up correctly. + +For references, here are the productions for `if_statement`, `else_clause` and `elif_clause` in +`tree-sitter-python` + +```javascript + if_statement: $ => seq( + 'if', + field('condition', $.expression), + ':', + field('consequence', $._suite), + repeat(field('alternative', $.elif_clause)), + optional(field('alternative', $.else_clause)) + ), + + elif_clause: $ => seq( + 'elif', + field('condition', $.expression), + ':', + field('consequence', $._suite) + ), + + else_clause: $ => seq( + 'else', + ':', + field('body', $._suite) + ), +``` + +First, we'll set up all of the relevant nodes with corresponding nodes in the AST: + +```tsg + +(if_statement) +@tree_sitter_node +{ + let @tree_sitter_node.node = (ast-node @tree_sitter_node "If") +} +``` + +This ensures that we can reference the `.node` scoped variable on the above nodes. + +(We named the capture `@tree_sitter_node` above to make it more clear, but in general something like +`@if` would be more appropriate.) + +In particular, since we want `elif`s to be turned into nested `if`s, it makes sense to apply the +`If` kind to `elif_clauses` as well: + +```tsg +(elif_clause) @elif +{ + let @elif.node = (ast-node @elif "If") +} +``` +Whenever we refer to a node, we must ensure that it has first been defined, however there is no +need to do this separately for each node. + +Next, for both `if`s and `elif`s, we want to record the `test` and the `body`. The `test` we do as follows: + +```tsg +[ + (if_statement + condition: (_) @test) @if + (elif_clause + condition: (_) @test) @if +] +{ + attr (@if.node) test = @test.node +} +``` +For `body`, in the Python AST this is simply a list of nodes, whereas for the `tree-sitter` parse tree, it +will contain a `block` node. Because there is no Python AST equivalent for `block`, we skip over +this node when linking the `if`-statement to its body: +```tsg +[ + (if_statement + consequence: (block (_) @stmt)) @parent + (elif_clause + consequence: (block (_) @stmt)) @parent +] +{ + edge @parent.node -> @stmt.node + attr (@parent.node -> @stmt.node) body = (child-index @stmt) +} +``` +The above shows how we handle fields containing lists of items: we add an edge from the parent node +to each child node, and put an attribute on that edge. The name of the attribute will be the name of +the field, and the value will be the index of this node among the children of its `tree-sitter` parent. + +Now we can begin unwinding the nesting. First of all, the first `elif` should be the `orelse` of the +initial `if_statement`: + +```tsg +(if_statement + consequence: (_) + . + (elif_clause) @elif +) @if +{ + edge @if.node -> @elif.node + attr (@if.node -> @elif.node) orelse = 0 +} +``` +(The `.` acts as an anchor, forcing its two neighbours to be adjancent in the tree. So in this case, +we get the first `elif` after the body of the `if`) + +Next, whenever we have two adjacent `elif`s, we want the `orelse` of the first one to be the second one: + +```tsg +( + (elif_clause) @elif1 + . + (elif_clause) @elif2 +) +{ + edge @elif1.node -> @elif2.node + attr (@elif1.node -> @elif2.node) orelse = 0 +} +``` + +Finally, the `else` branch of the outermost `if` should be the `orelse` of the _last_ `elif`: + +```tsg +(if_statement + (elif_clause) @elif + . + alternative: (else_clause body: (block (_) @orelse)) +) +{ + edge @elif.node -> @orelse.node + attr (@elif.node -> @orelse.node) orelse = (child-index @orelse) +} +``` + +The above gives us the correct tree structure, but we're still missing a few bits (such as +locations). To capture location information we use the following stanza: +```tsg +[ + (if_statement + condition: (_) + ":" @colon) @if + (elif_clause + condition: (_) + ":" @colon) @if +] +{ + attr (@if.node) _location_end = (location-end @colon) +} +``` +Because `tree-sitter-python` disagrees with the Python AST about the location of the `If` node, we +have to adjust it. We do this by setting the `_location_end` attribute to the end of the `:` token. +(Note that the _start_ of this location was set when we called `ast-node` above. As we don't have to +change this part of the location, we simply leave it as is.) + + + +### Synthesizing nodes +In many cases it will be sufficient to hook up AST nodes to the corresponding `tree-sitter` nodes, +but occasionally we want the tree structure to be different. One example of this would be the +`class` statement. For instance, a class declaration such as + +```python +class Foo(int, object, metaclass=type): + x = 5 +``` + +has a `tree-sitter-python` parse tree that looks like this: + +``` +module [0, 0] - [2, 0] + class_definition [0, 0] - [1, 9] + name: identifier [0, 6] - [0, 9] + superclasses: argument_list [0, 9] - [0, 38] + identifier [0, 10] - [0, 13] + identifier [0, 15] - [0, 21] + keyword_argument [0, 23] - [0, 37] + name: identifier [0, 23] - [0, 32] + value: identifier [0, 33] - [0, 37] + body: block [1, 4] - [1, 9] + expression_statement [1, 4] - [1, 9] + assignment [1, 4] - [1, 9] + left: identifier [1, 4] - [1, 5] + right: integer [1, 8] - [1, 9] +``` + +but the Python AST looks like _this_: + +``` +Module: [1, 0] - [3, 0] + body: [ + Assign: [1, 0] - [1, 39] + targets: [ + Name: [1, 6] - [1, 9] + variable: Variable('Foo', None) + ctx: Store + ] + value: + ClassExpr: [1, 0] - [1, 39] + name: 'Foo' + bases: [ + Name: [1, 10] - [1, 13] + variable: Variable('int', None) + ctx: Load + Name: [1, 15] - [1, 21] + variable: Variable('object', None) + ctx: Load + ] + keywords: [ + keyword: [1, 23] - [1, 37] + arg: 'metaclass' + value: + Name: [1, 33] - [1, 37] + variable: Variable('type', None) + ctx: Load + ] + inner_scope: + Class: [1, 0] - [1, 39] + name: 'Foo' + body: [ + Assign: [2, 4] - [2, 9] + targets: [ + Name: [2, 4] - [2, 5] + variable: Variable('x', None) + ctx: Store + ] + value: + Num: [2, 8] - [2, 9] + n: 5 + text: '5' + ] + ] +``` + +In particular, we unroll the `class` statement into an explicit assignment (which is the top node +for this statement in the AST) of a synthetic `ClassExpr`, which in turn contains a `Class` node +(which holds things like the body of the class). This requires too many nodes to simply reuse what's given to +us by `tree-sitter-python`, and so we must _synthesize_ additional nodes. + +First of all, let us set up the outer node to be an `Assign` node: +```tsg +(class_definition) @class +{ + let @class.node = (ast-node @class "Assign") +} +``` + +Next, we can do most of the work in a single stanza: + +```tsg +(class_definition + name: (identifier) @name + ":" @colon +) @class +{ + + ; To make it clearer that the outer node is an assignment, we create an alias for it. + let @class.assign = @class.node + + ; Synthesized nodes: the left-hand side of the assignment, the class_expr node, and the class + ; node. + + let @class.assign_lhs = (ast-node @name "Name") + let @class.class_expr = (ast-node @class "ClassExpr") + let @class.inner_scope = (ast-node @class "Class") + + edge @class.assign -> @class.assign_lhs + attr (@class.assign -> @class.assign_lhs) targets = 0 + attr (@class.assign) value = @class.class_expr + attr (@class.assign) _location_end = (location-end @colon) + + let class_name = (source-text @name) + + ; The left-hand side of the assignment, a `Name`. + attr (@class.assign_lhs) variable = class_name + attr (@class.assign_lhs) ctx = "store" + + ; The right hand side of the assignment, a `ClassExpr`. + attr (@class.class_expr) name = class_name + attr (@class.class_expr) inner_scope = @class.inner_scope + ; `bases` will be set elsewhere + ; `keywords` will be set elsewhere + attr (@class.class_expr) _location_end = (location-end @colon) + + ; The inner scope of the class_expr, a `Class`. + attr (@class.inner_scope) name = class_name + ; body will be set in a separate stanza. + attr (@class.inner_scope) _location_end = (location-end @colon) + +} +``` + +Let's go over these lines bit by bit. First, we create an alias for the outermost node (which will +become an assignment node) in order to make it clearer that it's an assignment. Next, we create +_new_ nodes for the inner synthesized nodes. Note that we can't assign these to `@class.node` as +that already points to the node that will become the assignment node. Instead, we create new scoped +variables (with suitable names), and assign them nodes (with appropriate kinds and locations using +`ast-node`). +```tsg + ; To make it clearer that the outer node is an assignment, we create an alias for it. + let @class.assign = @class.node + + ; Synthesized nodes: the left-hand side of the assignment, the class_expr node, and the class + ; node. + + let @class.assign_lhs = (ast-node @name "Name") + let @class.class_expr = (ast-node @class "ClassExpr") + let @class.inner_scope = (ast-node @class "Class") +``` + +Next, we set up the outer assignment: +```tsg + edge @class.assign -> @class.assign_lhs + attr (@class.assign -> @class.assign_lhs) targets = 0 + attr (@class.assign) value = @class.class_expr + attr (@class.assign) _location_end = (location-end @colon) +``` + +The remaining nodes all contain a field that refers to the name of the class, so put this in a local +variable for convenience: +```tsg + let class_name = (source-text @name) +``` +We set up the left hand side of the assignment: +```tsg + ; The left-hand side of the assignment, a `Name`. + attr (@class.assign_lhs) variable = class_name + attr (@class.assign_lhs) ctx = "store" +``` +The `ClassExpr`: +```tsg + ; The right hand side of the assignment, a `ClassExpr`. + attr (@class.class_expr) name = class_name + attr (@class.class_expr) inner_scope = @class.inner_scope + ; `bases` will be set elsewhere + ; `keywords` will be set elsewhere + attr (@class.class_expr) _location_end = (location-end @colon) +``` + +The `Class`: +```tsg + ; The inner scope of the class_expr, a `Class`. + attr (@class.inner_scope) name = class_name + ; body will be set elsewhere + attr (@class.inner_scope) _location_end = (location-end @colon) + +``` + +The remaining stanzas take care of setting up the fields that contain lists of nodes, and these +follow the same scheme as before. +```tsg +; Class.body +(class_definition + body: (block (_) @stmt) +) @class +{ + edge @class.inner_scope -> @stmt.node + attr (@class.inner_scope -> @stmt.node) body = (child-index @stmt) +} + +; Class.bases +(class_definition + superclasses: (argument_list (identifier) @arg) +) @class +{ + edge @class.class_expr -> @arg.node + attr (@class.class_expr -> @arg.node) bases = (child-index @arg) + attr (@arg.node) ctx = "load" +} + +; Class.keywords +(class_definition + superclasses: (argument_list (keyword_argument) @arg) +) @class +{ + edge @class.class_expr -> @arg.node + attr (@class.class_expr -> @arg.node) keywords = (child-index @arg) +} +``` diff --git a/python/extractor/tsg-python/python.tsg b/python/extractor/tsg-python/python.tsg new file mode 100644 index 00000000000..e185bbbae79 --- /dev/null +++ b/python/extractor/tsg-python/python.tsg @@ -0,0 +1,3472 @@ +;;;;;; Part 1: Definining ~all~ most of the nodes +; This section contains all of the "simple" definitions. All of the places where a single +; tree-sitter node corresponds to an AST node. + +; Create the module node first, so it always appears first in the output. +(module) @mod +{ let @mod.node = (ast-node @mod "Module") } + +(_) @anynode +{ + scan (node-type @anynode) { + "^(ERROR|MISSING)$" { + let @anynode.node = (ast-node @anynode "SyntaxErrorNode") + attr (@anynode.node) source = (source-text @anynode) + } + } +} + +(parenthesized_expression) @nd +{ let @nd.node = (ast-node @nd "Expr") } + +(assignment !type) @assign +{ let @assign.node = (ast-node @assign "Assign") } + +[ (expression_list) (tuple) (tuple_pattern) (pattern_list) ] @tuple +{ let @tuple.node = (ast-node @tuple "Tuple") } + +(call) @call { let @call.node = (ast-node @call "Call") } + +(for_statement) @for +{ let @for.node = (ast-node @for "For") } + +[ (if_statement) (elif_clause) ] @if +{ let @if.node = (ast-node @if "If") } + +(continue_statement) @continue +{ let @continue.node = (ast-node @continue "Continue") } + +(break_statement) @break +{ let @break.node = (ast-node @break "Break") } + +(pass_statement) @pass +{ let @pass.node = (ast-node @pass "Pass") } + +(assert_statement) @assert +{ let @assert.node = (ast-node @assert "Assert") } + +(assignment type: (_)) @assign +{ let @assign.node = (ast-node @assign "AnnAssign") } + +(augmented_assignment) @assign +{ let @assign.node = (ast-node @assign "AugAssign") } + +(delete_statement) @del +{ let @del.node = (ast-node @del "Delete") } + +(global_statement) @global +{ let @global.node = (ast-node @global "Global") } + +(nonlocal_statement) @nonlocal +{ let @nonlocal.node = (ast-node @nonlocal "Nonlocal") } + +[(import_statement) (import_from_statement name: (_))] @import +{ let @import.node = (ast-node @import "Import") } + +(import_from_statement (wildcard_import)) @importstar +{ let @importstar.node = (ast-node @importstar "ImportFrom") } + +(raise_statement) @raise +{ let @raise.node = (ast-node @raise "Raise") } + +(binary_operator) @binop +{ let @binop.node = (ast-node @binop "BinOp") } + +(keyword_argument) @kwarg +{ let @kwarg.node = (ast-node @kwarg "keyword") } + +[(function_definition) (class_definition) (decorated_definition)] @def +{ let @def.node = (ast-node @def "Assign") } + +(decorator) @decorator +{ let @decorator.node = (ast-node @decorator "Call") } + +(expression_statement) @stmt +{ let @stmt.node = (ast-node @stmt "Expr") } + +[ (integer) (float) ] @num +{ let @num.node = (ast-node @num "Num") } + +(identifier) @name +{ let @name.node = (ast-node @name "Name") } + +(list) @list +{ let @list.node = (ast-node @list "List") } + +[(list_splat) (list_splat_pattern)] @starred +{ let @starred.node = (ast-node @starred "Starred") } + +(comment) @comment +{ let @comment.node = (ast-node @comment "Comment") } + +[ + (future_import_statement name: (_) @alias) + (import_from_statement name: (_) @alias) + (import_statement name: (_) @alias) +] +{ let @alias.node = (ast-node @alias "alias") } + +; A string _without_ interpolations is just a `Str`, _except_ if it's inside a string +; concatenation, in which case it's a `StringPart`. +(string !interpolation) @str +{ + var str_class = "Str" + if (instance-of (get-parent @str) "concatenated_string") { + set str_class = "StringPart" + } + let @str.node = (ast-node @str str_class) +} + +(string interpolation: (_)) @fstring +{ let @fstring.node = (ast-node @fstring "JoinedStr") } + + +(string string_content: (_) @part) +{ let @part.node = (ast-node @part "StringPart") } + +; A string concatenation that contains no interpolated expressions is just a `Str` (and its children +; will be `StringPart`s). A string concatenation that contains interpolated expressions is a +; `JoinedStr`, however. +(concatenated_string + (string interpolation: (_))* @interpolations +) @string +{ + var string_class = "Str" + ; Check if there are any interpolations in the string. + ; We cannot use an optional match in the above query, since it could match several times, + ; and subsequent definitions of `@string.node` would then fail. + for _ in @interpolations { + set string_class = "JoinedStr" + } + let @string.node = (ast-node @string string_class) +} + + +(string interpolation: (_)) @fstring +{ + if (not (instance-of (get-parent @fstring) "concatenated_string")) { + attr (@fstring.node) _fixup = #true + } +} + +(pair) @kvpair +{ let @kvpair.node = (ast-node @kvpair "KeyValuePair") } + +(dictionary) @dict +{ let @dict.node = (ast-node @dict "Dict") } + +(dictionary_splat) @dictunpacking +{ let @dictunpacking.node = (ast-node @dictunpacking "DictUnpacking") } + +(set) @set +{ let @set.node = (ast-node @set "Set") } + +(boolean_operator) @boolop +{ let @boolop.node = (ast-node @boolop "BoolOp") } + +(comparison_operator) @compop +{ let @compop.node = (ast-node @compop "Compare") } + +[ (unary_operator) (not_operator) ] @unaryop +{ let @unaryop.node = (ast-node @unaryop "UnaryOp") } + +(exec_statement) @exec +{ let @exec.node = (ast-node @exec "Exec") } + +(print_statement) @print +{ let @print.node = (ast-node @print "Print") } + +(return_statement) @return +{ let @return.node = (ast-node @return "Return") } + +(yield . "from"? @from) @yield +{ + var yield_node = "Yield" + if some @from { + set yield_node = "YieldFrom" + } + let @yield.node = (ast-node @yield yield_node) +} + +(ellipsis) @ellipsis +{ let @ellipsis.node = (ast-node @ellipsis "Ellipsis") } + +(await) @await +{ let @await.node = (ast-node @await "Await") } + +(try_statement) @try +{ let @try.node = (ast-node @try "Try") } + +(except_clause) @except +{ let @except.node = (ast-node @except "ExceptStmt") } + +(except_group_clause) @except +{ let @except.node = (ast-node @except "ExceptGroupStmt") } + +(named_expression) @assignexpr +{ let @assignexpr.node = (ast-node @assignexpr "AssignExpr") } + +(conditional_expression) @ifexp +{ let @ifexp.node = (ast-node @ifexp "IfExp") } + +(subscript) @subscript +{ let @subscript.node = (ast-node @subscript "Subscript") } + +(slice) @slice +{ let @slice.node = (ast-node @slice "Slice") } + +(attribute) @attribute +{ let @attribute.node = (ast-node @attribute "Attribute") } + +(while_statement) @while +{ let @while.node = (ast-node @while "While") } + +(generator_expression) @generatorexp +{ let @generatorexp.node = (ast-node @generatorexp "GeneratorExp") } + +(for_in_clause) @for +{ let @for.node = (ast-node @for "For") } + +(if_clause) @if +{ let @if.node = (ast-node @if "If") } + +(list_comprehension) @listcomp +{ let @listcomp.node = (ast-node @listcomp "ListComp") } + +(set_comprehension) @setcomp +{ let @setcomp.node = (ast-node @setcomp "SetComp") } + +(dictionary_comprehension) @dictcomp +{ let @dictcomp.node = (ast-node @dictcomp "DictComp") } + +[ (with_statement) (with_item)] @with +{ let @with.node = (ast-node @with "With") } + +(match_statement) @match +{ let @match.node = (ast-node @match "Match") } + +; Do not create an AST node for 'cases', we just wire up the children instead. + +(case_block) @case +{ let @case.node = (ast-node @case "Case") } + +(match_as_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchAsPattern") } + +(match_or_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchOrPattern") } + +(match_literal_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchLiteralPattern") } + +(match_capture_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchCapturePattern") } + +(match_wildcard_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchWildcardPattern") } + +(match_value_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchValuePattern") } + +(match_group_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchGroupPattern") } + +(match_sequence_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchSequencePattern") } + +(match_star_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchStarPattern") } + +(match_mapping_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchMappingPattern") } + +(match_double_star_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchDoubleStarPattern") } + +(match_key_value_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchKeyValuePattern") } + +(match_class_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchClassPattern") } + +; Do not create AST nodes for 'only_positionals', 'only_keywords', +; 'partly_positionals', and 'partly_keywords'. We just wire up the children instead. + +(match_keyword_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchKeywordPattern") } + +(guard) @guard +{ let @guard.node = (ast-node @guard "Guard") } + +[(parameters) (lambda_parameters)] @params +{ let @params.node = (ast-node @params "arguments") } + +[(false) (true) (none)] @const +{ let @const.node = (ast-node @const "Name") } + +(lambda) @lambda +{ let @lambda.node = (ast-node @lambda "Lambda") } + +(future_import_statement) @import +{ let @import.node = (ast-node @import "Import") } + +(typevar_parameter) @typevar +{ let @typevar.node = (ast-node @typevar "TypeVar") } + +(typevartuple_parameter) @typevartuple +{ let @typevartuple.node = (ast-node @typevartuple "TypeVarTuple") } + +(paramspec_parameter) @paramspec +{ let @paramspec.node = (ast-node @paramspec "ParamSpec") } + +(type_alias_statement) @typealias +{ let @typealias.node = (ast-node @typealias "TypeAlias") } + +;;;;;; End of part 1. + +;;;;;; Part 2: The awkward bunch. + +;;;;;; Workarounds for node locations +; These are (hopefully temporary) workarounds for the nodes for which the default start and end does +; not agree with what our internal AST provides. +; Once the new parser is in place, we can consider getting rid of these workarounds. + + +;;; If +; End position is set to the end of the `:` after the condition. +[ + (if_statement + condition: (_) + . + ":" @colon) @if + (elif_clause + condition: (_) + . + ":" @colon) @if +] +{ + attr (@if.node) _location_end = (location-end @colon) +} + +;;; For +; Same as with `if`, we must include the `:` in the position. +(for_statement + right: (_) + . + ":" @colon +) @for +{ + attr (@for.node) _location_end = (location-end @colon) +} + +;;; While +; Same as with `if`, we must include the `:` in the position. +(while_statement + condition: (_) + . + ":" @colon +) @while +{ + attr (@while.node) _location_end = (location-end @colon) +} + +;;; Tuples +; In the Python AST tuple start and end positions are set to the start and end of the first and last +; elements. In `tree-sitter-python`, the parentheses are included. +[ + (tuple . (comment)* . element: (_) @first) + (tuple_pattern . (comment)* . element: (_) @first) +] @tuple +{ + attr (@tuple.node) _location_start = (location-start @first) +} + +[ + (tuple !trailing_comma element: (_) @last . (comment)* . ")" .) + (tuple trailing_comma: _ @last) + (tuple_pattern element: (_) @last .) +] @tuple +{ + + attr (@tuple.node) _location_end = (location-end @last) +} + +;;; Try + +(try_statement ":" @colon) @try +{ attr (@try.node) _location_end = (location-end @colon) } + +(except_clause ":" @colon) @except +{ attr (@except.node) _location_end = (location-end @colon) } + +;;; GeneratorExp + +(generator_expression . "(" . (comment)* . (_) @start (_) @end . (comment)* . ")" .) @generatorexp +{ + attr (@generatorexp.node) _location_start = (location-start @start) + attr (@generatorexp.node) _location_end = (location-end @end) +} + +(if_clause (expression) @expr) @if +{ + attr (@if.node) _location_start = (location-start @expr) + attr (@if.node) _location_end = (location-end @expr) +} + +(generator_expression . "(" . (comment)* . (_) @start (for_in_clause) @child (_) @end . (comment)* . ")" .) @genexpr +{ + attr (@child.node) _location_start = (location-start @start) + attr (@child.node) _location_end = (location-end @end) +} + +(generator_expression . "(" . (comment)* . (_) @start (for_in_clause) @end . (comment)* . ")" .) @genexpr +{ + attr (@end.node) _location_start = (location-start @start) + attr (@end.node) _location_end = (location-end @end) +} + +(list_comprehension (for_in_clause) @child) @genexpr +{ + attr (@child.node) _location_start = (location-start @genexpr) + attr (@child.node) _location_end = (location-end @genexpr) +} + +(set_comprehension (for_in_clause) @child) @genexpr +{ + attr (@child.node) _location_start = (location-start @genexpr) + attr (@child.node) _location_end = (location-end @genexpr) +} + +(dictionary_comprehension (for_in_clause) @child) @genexpr +{ + attr (@child.node) _location_start = (location-start @genexpr) + attr (@child.node) _location_end = (location-end @genexpr) +} + +;;; With + +(with_statement + "with" @start + (with_clause . (with_item) @first) + ":" @end +) +{ + attr (@first.node) _location_start = (location-start @start) + attr (@first.node) _location_end = (location-end @end) +} + +;;;;;; End of workarounds + +;;;;;; End of part 2 + +;;;;;; Part 3: All of the simple nodes. + +;;;;;; Module + +; Nodes with a `body` field containing statements. +(module (_) @stmt) @parent +{ + edge @parent.node -> @stmt.node + attr (@parent.node -> @stmt.node) body = (named-child-index @stmt) +} + +;;;;;; Comments + +(comment) @comment +{ + attr (@comment.node) text = (source-text @comment) +} + +;;;;;; Expressions + +(parenthesized_expression + inner: (_) @inner +) @outer +{ + attr (@outer.node) _skip_to = @inner.node + attr (@inner.node) parenthesised = #true +} + +(keyword_argument + name: (_) @name + value: (_) @value +) @kwarg +{ + attr (@kwarg.node) arg = (source-text @name) + attr (@kwarg.node) value = @value.node +} + +;;;;;; Num + +[ (integer) (float) ] @num +{ + ; As we must support a large variety of number literals, we simply forward the source string + ; representation to the Python AST reconstruction. + let source = (source-text @num) + attr (@num.node) n = source + attr (@num.node) text = source +} + +;;;;;; End of Num + +;;;;;; Delete + +(delete_statement + target: (expression_list + element: (_) @target + ) +) @del +{ + edge @del.node -> @target.node + attr (@del.node -> @target.node) targets = (named-child-index @target) +} + +(delete_statement target: (_) @target) @del +{ + attr (@target.node) ctx = "del" +} + +(delete_statement [(identifier) (subscript) (attribute)] @id) @del +{ + edge @del.node -> @id.node + attr (@del.node -> @id.node) targets = 0 +} + +;;;;;; Name + +[(identifier) (false) (true) (none)] @id +{ + attr (@id.node) variable = (source-text @id) +} + +;;;;;; End of Name + +;;;;;; Arguments +[ + (keyword_argument value: (_) @id) + (argument_list element: (_) @id) +] +{ + attr (@id.node) ctx = "load" +} + +[ + (keyword_argument name: (_) @id) +] +{ + attr (@id.node) ctx = "store" +} + +;;;;;; End of Arguments + +;;;;;; BinOp + +(binary_operator + left: (_) @left + operator: _ @op + right: (_) @right +) @bin +{ + attr (@bin.node) left = @left.node + attr (@bin.node) right = @right.node + attr (@bin.node) op = (source-text @op) + attr (@left.node) ctx = "load" + attr (@right.node) ctx = "load" +} + +;;;;;; End of BinOp + +;;;;;; If + +; If.test +[ + (if_statement + condition: (_) @test) @if + (elif_clause + condition: (_) @test) @if +] +{ + attr (@if.node) test = @test.node + attr (@test.node) ctx = "load" +} + +; If.orelse - first `elif` clause +(if_statement + consequence: (_) + . (comment)* . + (elif_clause) @elif +) @if +{ + edge @if.node -> @elif.node + attr (@if.node -> @elif.node) orelse = 0 +} + +; If.orelse - link up adjacent `elif` clauses +( + (elif_clause) @elif1 + . (comment)* . + (elif_clause) @elif2 +) +{ + edge @elif1.node -> @elif2.node + attr (@elif1.node -> @elif2.node) orelse = 0 +} + +; If.orelse - match outer `else` up with last `elif` clause (i.e. innermost `if`) +(if_statement + (elif_clause) @elif . (comment)* . + alternative: (else_clause body: (block (_) @orelse)) +) +{ + edge @elif.node -> @orelse.node + attr (@elif.node -> @orelse.node) orelse = (named-child-index @orelse) +} + +; If.orelse - when there are no `elif` clauses. +(if_statement + consequence: (_) + . (comment)* . + alternative: (else_clause body: (block (_) @orelse)) +) @if +{ + edge @if.node -> @orelse.node + attr (@if.node -> @orelse.node) orelse = (named-child-index @orelse) +} + +; If.body + +[ + (if_statement + consequence: (block (_) @stmt)) @parent + (elif_clause + consequence: (block (_) @stmt)) @parent +] +{ + edge @parent.node -> @stmt.node + attr (@parent.node -> @stmt.node) body = (named-child-index @stmt) +} + +;;;;;; end of If + +;;;;;; For statements + +(for_statement + left: (_) @left + right: (_) @right +) @for +{ + attr (@for.node) target = @left.node + attr (@left.node) ctx = "store" + attr (@for.node) iter = @right.node + attr (@right.node) ctx = "load" +} + +(for_statement + body: (block (_) @body) +) @for +{ + edge @for.node -> @body.node + attr (@for.node -> @body.node) body = (named-child-index @body) +} + +(for_statement + alternative: (else_clause body: (block (_) @orelse)) +) @for +{ + edge @for.node -> @orelse.node + attr (@for.node -> @orelse.node) orelse = (named-child-index @orelse) +} + +(for_statement "async" "for" @for_keyword) @for +{ + attr (@for.node) is_async = #true + attr (@for.node) _location_start = (location-start @for_keyword) +} + +;;;;;; end of For + +;;;;;; Call expressions (`a(b, c, *d, **e)`) + +(call function: (_) @func) @call +{ + attr (@call.node) func = @func.node + attr (@func.node) ctx = "load" +} + +; Handle non-keyword arguments +(call arguments: (argument_list element: (_) @arg)) @call +{ + if (not (or + (instance-of @arg "keyword_argument") + (instance-of @arg "dictionary_splat"))) { + edge @call.node -> @arg.node + attr (@call.node -> @arg.node) positional_args = (named-child-index @arg) + } +} + +(call arguments: (argument_list element: (keyword_argument) @arg)) @call +{ + edge @call.node -> @arg.node + attr (@call.node -> @arg.node) named_args = (named-child-index @arg) +} + +(call arguments: (argument_list element: (dictionary_splat) @arg)) @call +{ + edge @call.node -> @arg.node + attr (@call.node -> @arg.node) named_args = (named-child-index @arg) +} + +(call arguments: (generator_expression) @gen) @call +{ + edge @call.node -> @gen.node + attr (@call.node -> @gen.node) positional_args = 0 +} + + +;;;;;; end of Call (`a(b, c, *d, **e)`) + + +;;;;;; End of part 3 + +;;;;;; Part 4: All of the complicated bits (e.g. nodes that need additional synthesis) + + +;;;;;; ListComp (`[a for b in c if d]`) +; See GeneratorExp for details. + +(list_comprehension) @genexpr +{ + ; Synthesize the `genexpr` function + let @genexpr.fun = (ast-node @genexpr "Function") + attr (@genexpr.node) function = @genexpr.fun + attr (@genexpr.fun) name = "listcomp" + + ; Synthesize the `.0` parameter + let @genexpr.arg = (ast-node @genexpr "Name") + attr (@genexpr.arg) variable = ".0" + attr (@genexpr.arg) ctx = "param" + + edge @genexpr.fun -> @genexpr.arg + attr (@genexpr.fun -> @genexpr.arg) args = 0 + attr (@genexpr.fun) kwonlyargs = #null + attr (@genexpr.fun) kwarg = #null + + ; Synthesize the use of `.0` in the outermost `for`. This has a different context than the parameter + ; ("param" vs. "load") hence we must create another node. + let @genexpr.arg_use = (ast-node @genexpr "Name") + attr (@genexpr.arg_use) variable = ".0" + attr (@genexpr.arg_use) ctx = "load" +} + +;;;;;; End of ListComp (`[a for b in c if d]`) + +;;;;;; SetComp (`{a for b in c if d}`) +; See GeneratorExp for details. + +(set_comprehension) @genexpr +{ + ; Synthesize the `genexpr` function + let @genexpr.fun = (ast-node @genexpr "Function") + attr (@genexpr.node) function = @genexpr.fun + attr (@genexpr.fun) name = "setcomp" + + ; Synthesize the `.0` parameter + let @genexpr.arg = (ast-node @genexpr "Name") + attr (@genexpr.arg) variable = ".0" + attr (@genexpr.arg) ctx = "param" + + edge @genexpr.fun -> @genexpr.arg + attr (@genexpr.fun -> @genexpr.arg) args = 0 + attr (@genexpr.fun) kwonlyargs = #null + attr (@genexpr.fun) kwarg = #null + + ; Synthesize the use of `.0` in the outermost `for`. This has a different context than the parameter + ; ("param" vs. "load") hence we must create another node. + let @genexpr.arg_use = (ast-node @genexpr "Name") + attr (@genexpr.arg_use) variable = ".0" + attr (@genexpr.arg_use) ctx = "load" +} + + +;;;;;; End of SetComp (`{a for b in c if d}`) + +;;;;;; DictComp (`{a: b for c in d if e}`) +; See GeneratorExp for details. + +(dictionary_comprehension + body: (pair + key: (_) @key + value: (_) @value + ) +) @genexpr +{ + ; Synthesize the `genexpr` function + let @genexpr.fun = (ast-node @genexpr "Function") + attr (@genexpr.node) function = @genexpr.fun + attr (@genexpr.fun) name = "dictcomp" + + ; Synthesize the `.0` parameter + let @genexpr.arg = (ast-node @genexpr "Name") + attr (@genexpr.arg) variable = ".0" + attr (@genexpr.arg) ctx = "param" + + edge @genexpr.fun -> @genexpr.arg + attr (@genexpr.fun -> @genexpr.arg) args = 0 + attr (@genexpr.fun) kwonlyargs = #null + attr (@genexpr.fun) kwarg = #null + + ; Synthesize the use of `.0` in the innermost `yield`. This has a different context than the parameter + ; ("param" vs. "load") hence we must create another node. + let @genexpr.arg_use = (ast-node @genexpr "Name") + attr (@genexpr.arg_use) variable = ".0" + attr (@genexpr.arg_use) ctx = "load" +} + +;;;;;; End of DictComp (`{a: b for c in d if e}`) + +;;;;;; GeneratorExp (`(a for b in c if d)`) +; The big one. This one will require quite a bit of setup. +; +; First of all, we need to explain what the old parser does to generator expressions. +; +; The following generator expression +; +; (a +; for b in c +; if d +; if e +; for f in g +; if h +; if i +; ) +; +; becomes +; +; def genexpr(.0): +; for b in .0: +; if e: +; if d: +; for f in g: +; if i: +; if h: +; yield a +; +; where `.0` is a (very oddly named) variable. +; +; Note in particular the reversing of the `if`s, the way `c` is replaced with `.0`, and the way +; `a` is used in the innermost `yield`. + +; First of all, we need to set up the generated function and its parameter. These both copy the location +; information for the entire generator expression (yes, it is a wide parameter!) and so we must recreate the logic for +; setting this location information correctly. + +(generator_expression . "(" . (comment)* . (_) @start (_) @end . (comment)* . ")" .) @genexpr +{ + ; Synthesize the `genexpr` function + let @genexpr.fun = (ast-node @genexpr "Function") + attr (@genexpr.fun) _location_start = (location-start @start) + attr (@genexpr.fun) _location_end = (location-end @end) + attr (@genexpr.node) function = @genexpr.fun + attr (@genexpr.fun) name = "genexpr" + + ; Synthesize the `.0` parameter + let @genexpr.arg = (ast-node @genexpr "Name") + attr (@genexpr.arg) _location_start = (location-start @start) + attr (@genexpr.arg) _location_end = (location-end @end) + attr (@genexpr.arg) variable = ".0" + attr (@genexpr.arg) ctx = "param" + + edge @genexpr.fun -> @genexpr.arg + attr (@genexpr.fun -> @genexpr.arg) args = 0 + attr (@genexpr.fun) kwonlyargs = #null + attr (@genexpr.fun) kwarg = #null + + ; Default to true, but we'll set it to false if we're inside a call + var genexpr_parenthesised = #true + + if (instance-of (get-parent @genexpr) "call") { + set genexpr_parenthesised = #null + } + attr (@genexpr.node) parenthesised = genexpr_parenthesised + + ; Synthesize the use of `.0` in the outermost `for`. This has a different context than the parameter + ; ("param" vs. "load") hence we must create another node. + let @genexpr.arg_use = (ast-node @genexpr "Name") + attr (@genexpr.arg_use) _location_start = (location-start @start) + attr (@genexpr.arg_use) _location_end = (location-end @end) + attr (@genexpr.arg_use) variable = ".0" + attr (@genexpr.arg_use) ctx = "load" +} + +; Link up the outermost `for` +[ + (generator_expression + body: (_) . (comment)* . + (for_in_clause + left: (_) @target + right: (_) @iterable + ) @forin + ) @genexpr + (list_comprehension + body: (_) . (comment)* . + (for_in_clause + left: (_) @target + right: (_) @iterable + ) @forin + ) @genexpr + (set_comprehension + body: (_) . (comment)* . + (for_in_clause + left: (_) @target + right: (_) @iterable + ) @forin + ) @genexpr + (dictionary_comprehension + body: (_) . (comment)* . + (for_in_clause + left: (_) @target + right: (_) @iterable + ) @forin + ) @genexpr +] +{ + attr (@genexpr.node) iterable = @iterable.node + attr (@iterable.node) ctx = "load" + edge @genexpr.fun -> @forin.node + attr (@genexpr.fun -> @forin.node) body = 0 + + attr (@forin.node) target = @target.node + attr (@target.node) ctx = "store" + attr (@forin.node) iter = @genexpr.arg_use +} + +; Set up all subsequent `for ... in ...` +[ + (generator_expression + body: (_) + [(for_in_clause) (if_clause)] + (for_in_clause left: (_) @target right: (_) @iter) @forin + ) + (list_comprehension + body: (_) + [(for_in_clause) (if_clause)] + (for_in_clause left: (_) @target right: (_) @iter) @forin + ) + (set_comprehension + body: (_) + [(for_in_clause) (if_clause)] + (for_in_clause left: (_) @target right: (_) @iter) @forin + ) + (dictionary_comprehension + body: (_) + [(for_in_clause) (if_clause)] + (for_in_clause left: (_) @target right: (_) @iter) @forin + ) +] +{ + attr (@forin.node) target = @target.node + attr (@target.node) ctx = "store" + attr (@forin.node) iter = @iter.node + attr (@iter.node) ctx = "load" +} + +; Set up each `if ...` +(if_clause (expression) @test) @if +{ + attr (@if.node) test = @test.node + attr (@test.node) ctx = "load" +} + +; Link adjacent `for` clauses together +(_ + (for_in_clause) @forin1 + . (comment)* . + (for_in_clause) @forin2 +) +{ + edge @forin1.node -> @forin2.node + attr (@forin1.node -> @forin2.node) body = 0 +} + +; For the first `if` clause after a `for` clause, record both the `for` and `if` clauses in variables that we +; will propagate along. That way, when we get to the last `if` clause, we can link it up with the `for` +; clause, and we can link up the _first_ `if` clause with whatever follows the last `if` clause. +(_ + (for_in_clause) @forin + . (comment)* . + (if_clause) @if +) +{ + let @if.for = @forin.node + let @if.first_if = @if.node +} + +; Link up adjacent `if` clauses (note the reversed order!) and propagate the `for` and `first_if` values. +(_ + (if_clause) @if1 + . (comment)* . + (if_clause) @if2 +) +{ + edge @if2.node -> @if1.node + attr (@if2.node -> @if1.node) body = 0 + let @if2.for = @if1.for + let @if2.first_if = @if1.first_if +} + +; After the last `if` in a chain, we hook it up as the body of its associated `for`, and hook up the _first_ +; `if` as the one that has the following `for` as its body. +; The case where there is no `for` following the last `if` is handled later. +(_ + (if_clause) @if + . (comment)* . + (for_in_clause) @forin +) +{ + edge @if.for -> @if.node + attr (@if.for -> @if.node) body = 0 + edge @if.first_if -> @forin.node + attr (@if.first_if -> @forin.node) body = 0 +} + +; For everything except dictionary comprehensions, the innermost expression is just the `body` of the +; comprehension. +[ + (generator_expression body: (_) @body) @genexpr + (list_comprehension body: (_) @body) @genexpr + (set_comprehension body: (_) @body) @genexpr +] +{ + let @genexpr.result = @body.node +} + +; For dict comprehensions, we build an explicit tuple using the key and value pair. +(dictionary_comprehension + body: (pair + key: (_) @key + value: (_) @value + ) @body +) @genexpr +{ + let tuple = (ast-node @body "Tuple") + edge tuple -> @key.node + attr (tuple -> @key.node) elts = 1 + edge tuple -> @value.node + attr (tuple -> @value.node) elts = 0 + ; TODO verify that it is correct to use a `(value, key)` tuple, and not a `(key, value)` tuple above. + ; That is what the current parser does... + attr (tuple) ctx = "load" + let @genexpr.result = tuple +} + +; For the final `if` clause, we need to hook it up with the `yield` expression and with its associated `for` clause. +[ + (generator_expression + body: (_) @body + (if_clause) @last + . + ) @genexpr + (list_comprehension + body: (_) @body + (if_clause) @last + . + ) @genexpr + (set_comprehension + body: (_) @body + (if_clause) @last + . + ) @genexpr + (dictionary_comprehension + body: (_) @body + (if_clause) @last + . + ) @genexpr +] +{ + let expr = (ast-node @body "Expr") + let yield = (ast-node @body "Yield") + + let @genexpr.expr = expr + let @genexpr.yield = yield + + attr (expr) value = yield + + attr (yield) value = @genexpr.result + attr (@body.node) ctx = "load" + edge @last.first_if -> expr + attr (@last.first_if -> expr) body = 0 + + ; Hook up this `if` clause with its `for` clause + edge @last.for -> @last.node + attr (@last.for -> @last.node) body = 0 +} + +; If the last clause is a `for`, we only have to create and hook up the `yield` expression. +[ + (generator_expression + body: (_) @body + (for_in_clause) @last + . + ) @genexpr + (list_comprehension + body: (_) @body + (for_in_clause) @last + . + ) @genexpr + (set_comprehension + body: (_) @body + (for_in_clause) @last + . + ) @genexpr + (dictionary_comprehension + body: (_) @body + (for_in_clause) @last + . + ) @genexpr +] +{ + let expr = (ast-node @body "Expr") + let yield = (ast-node @body "Yield") + + let @genexpr.expr = expr + let @genexpr.yield = yield + + attr (expr) value = yield + + attr (yield) value = @genexpr.result + attr (@body.node) ctx = "load" + edge @last.node -> expr + attr (@last.node -> expr) body = 0 +} + +; For whatever reason, we do not consider parentheses around the yielded expression if they are present, so +; we must adapt the location accordingly. +[ + (generator_expression + body: (_ . "(" . _ @first) + ) + (list_comprehension + body: (_ . "(" . _ @first) + ) + (set_comprehension + body: (_ . "(" . _ @first) + ) + (dictionary_comprehension + body: (_ . "(" . _ @first) + ) +] @genexpr +{ + attr (@genexpr.expr) _location_start = (location-start @first) + attr (@genexpr.yield) _location_start = (location-start @first) +} + +; Annoyingly, setting the end location of the synthesized `Expr` and `Yield` is a big mess, +; so we have to use mutable variables. +[ + (generator_expression body: (_) @body) + (list_comprehension body: (_) @body) + (set_comprehension body: (_) @body) + (dictionary_comprehension body: (_) @body) +] @genexpr +{ + var @genexpr.body_end = (location-end @body) +} + + +; The reason we need to do this mutably is because the query `(_ _ @last . ")" .)`, despite the liberal use +; of anchors, is broken (due to a bug in `tree-sitter`). Specifically, it will match both `b` and the +; following `,` in the tuple expression `(a, b,)`. This means we cannot set the attribute in this stanza +; (since overwriting attributes is not allowed) and so we instead write it to a mutable variable and set it +; later. Because the order in which the captures are returned results in `b` being matched before `,` this +; gives the correct behaviour. +[ + (generator_expression + body: (_ _ @last . ")" .) + ) + (list_comprehension + body: (_ _ @last . ")" .) + ) + (set_comprehension + body: (_ _ @last . ")" .) + ) + (dictionary_comprehension + body: (_ _ @last . ")" .) + ) +] @genexpr +{ + set @genexpr.body_end = (location-end @last) +} + +[ + (generator_expression) + (list_comprehension) + (set_comprehension) + (dictionary_comprehension) +] @genexpr +{ + attr (@genexpr.expr) _location_end = @genexpr.body_end + attr (@genexpr.yield) _location_end = @genexpr.body_end +} + + +;;;;;; End of GeneratorExp (`(a for b in c if d)`) + + + + +;;;;;; Class statements +; A class definition +; +; class Foo(*bases, **keywords): body +; +; is turned into an actual assignment statement, with the class name as the left-hand side. +; +; Foo = $classexpr(name='Foo', bases, keywords, inner_scope=$class(name='Foo', body)) +; +; (with a suitably magical definition of the `$` prefix). +; +; So we have to synthesize both the outer assignment, and also the two representatives of the class. + +(class_definition + name: (identifier) @name + ":" @colon +) @class +{ + + ; To make it clearer that the outer node is an assignment, we create an alias for it. + let @class.assign = @class.node + + ; We reuse the identifier as the left hand side of the assignment. + let @class.assign_lhs = @name.node + + ; Synthesized nodes: the class_expr node, and the class node. + + let @class.class_expr = (ast-node @class "ClassExpr") + let @class.inner_scope = (ast-node @class "Class") + + ; Setting up the outer assignment + edge @class.assign -> @class.assign_lhs + attr (@class.assign -> @class.assign_lhs) targets = 0 + attr (@class.assign) value = @class.class_expr + attr (@class.assign) _location_end = (location-end @colon) + + attr (@class.assign_lhs) ctx = "store" + + let class_name = (source-text @name) + + ; The right hand side of the assignment, a `ClassExpr`. + attr (@class.class_expr) name = class_name + attr (@class.class_expr) inner_scope = @class.inner_scope + ; `bases` will be set elsewhere + ; `keywords` will be set elsewhere + attr (@class.class_expr) _location_end = (location-end @colon) + + ; The inner scope of the class_expr, a `Class`. + attr (@class.inner_scope) name = class_name + ; body will be set in a separate stanza. + attr (@class.inner_scope) _location_end = (location-end @colon) + +} + +; Class.body +(class_definition + body: (block (_) @stmt) +) @class +{ + edge @class.inner_scope -> @stmt.node + attr (@class.inner_scope -> @stmt.node) body = (named-child-index @stmt) +} + +; Class.bases - using `(_ !name)` as a proxy for all non-keyword arguments. +(class_definition + superclasses: (argument_list element: (_ !name) @arg) +) @class +{ + edge @class.class_expr -> @arg.node + attr (@class.class_expr -> @arg.node) bases = (named-child-index @arg) +} + +; Class.keywords +(class_definition + superclasses: (argument_list element: (keyword_argument) @arg) +) @class +{ + edge @class.class_expr -> @arg.node + attr (@class.class_expr -> @arg.node) keywords = (named-child-index @arg) +} + +;;;;;; End of Class + +;;;;;; Assign statements +; Assignment statements require a bit of interesting handling, since we represent a chained +; assignment such as `a = b = 5` as a single `Assign` node with multiple targets and a single +; right-hand side. This makes it somewhat complicated (but still doable) to determine the index of +; any single target in the resulting list. +; +; The way we handle this is by explicitly propagating two variables inwards. The first variable +; keeps track of the outermost node in a chain of assignments, and the second variable keeps track of +; the index of the left-hand side of the current assignment. + +; Base case, for the outermost assignment we set the outermost node to this node, and the index to zero. +(expression_statement (assignment !type) @assign) @expr +{ + let @assign.outermost_assignment = @assign.node + let @assign.target_index = 0 +} + +; Propagating the two variables inwards, increasing the index by one. Note that this depends on +; having the query match from the outside in -- if this evaluation order ever changes, this will break. +(assignment !type right: (assignment) @inner) @outer +{ + let @inner.outermost_assignment = @outer.outermost_assignment + let @inner.target_index = (plus @outer.target_index 1) +} + +; Finally, with the above variables set, we can -- for each assignment -- create an edge from the +; outermost assignment to it, and set its index to the index that we've calculated for this node. +(assignment !type left: (_) @target) @assign +{ + edge @assign.outermost_assignment -> @target.node + attr (@assign.outermost_assignment -> @target.node) targets = @assign.target_index + attr (@target.node) ctx = "store" +} + +; In addition to the above, we must ensure that the `value` attribute of the outermost assignment +; points to the _innermost_ right-hand side. We do this by first setting the `value` attribute for +; _all_ assignments... +(assignment !type right: (_) @value) @assign +{ + attr (@assign.node) value = @value.node + attr (@value.node) ctx = "load" +} + +; ... and then for assignments that are _inside_ other assigments, we use the `_skip_to` attribute +; to jump across the outer assignment. +; +; Thus, the outermost assignment's `value` will point to its right-hand side, but this one will (if +; it's an assignment itself) skip to _its_ right-hand side, and so on until we reach a right-hand side +; that is not an assignment. +(assignment !type right: (assignment right: (_) @inner) @outer) +{ + attr (@outer.node) _skip_to = @inner.node +} + +;;;;;; End of Assign + +;;;;;; AnnAssign + +(assignment + left: (_) @target + type: (type (expression) @type) +) @assign +{ + attr (@assign.node) target = @target.node + attr (@target.node) ctx = "store" + attr (@assign.node) annotation = @type.node + attr (@type.node) ctx = "load" +} + +(assignment + left: (_) @target + type: (_) + right: (_) @value +) @assign +{ + attr (@assign.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of AnnAssign + +;;;;;; AugAssign + +(augmented_assignment + left: (_) @left + operator: _ @op + right: (_) @right +) @augassign +{ + let binop = (ast-node @augassign "BinOp") + attr (@augassign.node) operation = binop + attr (binop) left = @left.node + attr (@left.node) ctx = "load" ; yes, it really is "load". + attr (binop) op = (source-text @op) + attr (binop) right = @right.node + attr (@right.node) ctx = "load" +} + +;;;;;; End of AugAssign + +;;;;;; Global + +(global_statement (identifier) @name) @global +{ + edge @global.node -> @name.node + attr (@global.node -> @name.node) names = (named-child-index @name) + attr (@name.node) _is_literal = (source-text @name) +} + +;;;;;; End of Global + +;;;;;; Nonlocal + +(nonlocal_statement (identifier) @name) @nonlocal +{ + edge @nonlocal.node -> @name.node + attr (@nonlocal.node -> @name.node) names = (named-child-index @name) + attr (@name.node) _is_literal = (source-text @name) +} + +;;;;;; End of Nonlocal + +;;;;;; Import (`import ...`) + +; `import j1.j2 as j3, j4, ...` becomes +; +; Import: +; names: [ +; alias: +; value: +; ImportExpr: +; level: 0 # always 0 for absolute imports +; name: 'j1.j2' +; top: False +; asname: +; Name: +; variable: Variable('j3', None) +; ctx: Store +; alias: +; value: +; ImportExpr: +; level: 0 # always 0 for absolute imports +; name: 'j4' +; top: True +; asname: +; Name: +; variable: Variable('j4', None) +; ctx: Store +; ... +; ] +; +; from +; +; module +; import_statement +; name: aliased_import +; name: dotted_name +; identifier # j1 +; identifier # j2 +; alias: identifier j3 +; name: dotted_name +; identifier # j4 +; +; This means we have to hang our `alias` nodes off of the `dotted_name` and +; `aliased_import` nodes. + +; Import.names +(import_statement name: (_) @name) @import +{ + edge @import.node -> @name.node + attr (@import.node -> @name.node) names = (named-child-index @name) +} + +; Imports without an explicit alias -- extract the root module name +(import_statement name: (dotted_name . (identifier) @first) @alias) +{ + let import_expr = (ast-node @alias "ImportExpr") + attr (import_expr) level = 0 + attr (import_expr) name = (source-text @alias) + attr (import_expr) top = #true + + attr (@alias.node) value = import_expr + + attr (@alias.node) asname = @first.node + attr (@first.node) ctx = "store" +} + +; Not strictly needed (but the AST reconstruction will complain otherwise) we +; assign a context to each identifier in a dotted name (except the first part, +; which already gets one elsewhere). +(dotted_name (identifier) (identifier) @name) +{ + attr (@name.node) ctx = "load" +} + +; For dotted imports `a.b.c` the location for the `Name` corresponding to the +; `a` part covers the entire expression, so we explicitly match the final +; element and set the location appropriately. If there is only one element, +; this stanza doesn't fire, but in that case the location is actually correct +; already. +(import_statement + name: (dotted_name + . + (identifier) @first + (identifier) @last + . + ) +) +{ + attr (@first.node) _location_end = (location-end @last) +} + +; Imports with an explicit alias +(import_statement + (aliased_import + name: (dotted_name . (identifier) @first) @name + alias: (identifier) @asname + ) @alias +) +{ + let import_expr = (ast-node @name "ImportExpr") + attr (import_expr) level = 0 + attr (import_expr) name = (source-text @name) + attr (import_expr) top = #false + + attr (@alias.node) value = import_expr + + attr (@alias.node) asname = @asname.node + attr (@asname.node) ctx = "store" + + attr (@first.node) ctx = "load" +} + +;;;;;; End of Import (`import ...`) + +;;;;;; Import (`from ... import ...`) + +; Oh what a twisty mess these are. First, the prototypical layout of a +; `from some_module import x1 as y1, x2, ...` statement is as follows: +; +; Import: +; names: [ +; alias: +; value: +; ImportMember: +; module: +; ImportExpr; +; level: +; name: +; top: #false +; name: +; asname: +; Name: +; variable: Variable(, None) +; ctx: "store" +; alias: +; value: +; ImportMember: +; module: +; ImportExpr: +; level: +; name: +; top: #false +; name: +; asname: +; Name: +; variable: Variable(, None) # Note the reuse! +; ctx: "store" +; ... +; ] +; +; In particular, `alias` nodes are used even if no aliasing takes place. + +; Now, on the flip side we have the `tree-sitter-python` output. Here +; the corresponding structure for `from ..some_module import x1 as y1, x2` +; is as follows: +; +; module +; import_from_statement +; module_name: relative_import +; import_prefix # `..` +; dotted_name +; identifier # some_module +; name: aliased_import +; name: dotted_name +; identifier # x1 +; alias: identifier # y1 +; name: dotted_name +; identifier # x2 +; +; Now, we need to pin our `alias` nodes on something, and the only thing we can +; really rely on is whatever is in the `name` field of the +; `import_from_statement` + + +; Import.names +[ + (import_from_statement + name: (_) @alias + ) + (future_import_statement + name: (_) @alias + ) +] @import +{ + edge @import.node -> @alias.node + attr (@import.node -> @alias.node) names = (named-child-index @alias) +} + +; Setting up the synthesized nodes for `ImportMember` and `ImportExpr` +; when the module name is _not_ a relative import. +[ + (import_from_statement + module_name: (dotted_name) @name + name: (_) @alias + ) + (future_import_statement + "__future__" @name + name: (_) @alias + ) +] +{ + let @alias.import_member = (ast-node @alias "ImportMember") + let @alias.import_expr = (ast-node @name "ImportExpr") + + attr (@alias.node) value = @alias.import_member + attr (@alias.import_member) module = @alias.import_expr + attr (@alias.import_expr) level = 0 + attr (@alias.import_expr) name = (source-text @name) + attr (@alias.import_expr) top = #false +} + +; Setting up the synthesized nodes for `ImportMember` and `ImportExpr` +; when the module name _is_ a relative import. +(import_from_statement + module_name: (relative_import name: (dotted_name) @name) @rel + name: (_) @alias +) +{ + let @alias.import_member = (ast-node @alias "ImportMember") + let @alias.import_expr = (ast-node @rel "ImportExpr") + + attr (@alias.node) value = @alias.import_member + attr (@alias.import_member) module = @alias.import_expr + ; ImportExpr.level is computed elsewhere + attr (@alias.import_expr) name = (source-text @name) + attr (@alias.import_expr) top = #false +} + +; Setting up the synthesized nodes for `ImportMember` and `ImportExpr` +; when the module is a relative import with no module name (e.g. `from . import ...`). +(import_from_statement + module_name: (relative_import !name) @rel + name: (_) @alias +) +{ + let @alias.import_member = (ast-node @alias "ImportMember") + let @alias.import_expr = (ast-node @rel "ImportExpr") + + attr (@alias.node) value = @alias.import_member + attr (@alias.import_member) module = @alias.import_expr + ; ImportExpr.level is computed elsewhere + attr (@alias.import_expr) name = #null + attr (@alias.import_expr) top = #false +} + +; Set the level for relative imports +(import_from_statement + module_name: (relative_import (import_prefix) @prefix) + name: (_) @alias +) +{ + var level = 0 + + ; Figure out the number of `.`s in the prefix. + scan (source-text @prefix) { + "\." { + set level = (plus level 1) + } + } + + attr (@alias.import_expr) level = level +} + +; Set aliases for non-aliased imports +[ + (import_from_statement + name: + (dotted_name (identifier) @name) @alias + ) + (future_import_statement + name: + (dotted_name (identifier) @name) @alias + ) +] +{ + attr (@alias.node) asname = @name.node + attr (@alias.import_member) name = (source-text @name) + attr (@name.node) ctx = "store" +} + +; Set aliases for aliased imports +(import_from_statement + name: + (aliased_import + name: (dotted_name) @first + alias: (identifier) @asname + ) @alias +) +{ + attr (@alias.node) asname = @asname.node + attr (@alias.import_member) name = (source-text @first) + attr (@asname.node) ctx = "store" +} + +; Fix up remaining identifiers without contexts. +(import_from_statement + module_name: (dotted_name . (identifier) @first) +) +{ + attr (@first.node) ctx = "load" +} + +(import_from_statement + module_name: (relative_import (dotted_name . (identifier) @first)) +) +{ + attr (@first.node) ctx = "load" +} + +(import_from_statement + name: (aliased_import (dotted_name (identifier) @first)) +) +{ + attr (@first.node) ctx = "load" +} + +(import_from_statement + module_name: (_) @name + (wildcard_import) +) @importfrom +{ + let importexpr = (ast-node @name "ImportExpr") + let @importfrom.importexpr = importexpr + attr (@importfrom.node) module = importexpr + attr (importexpr) top = #false +} + +; Absolute star import: `from a import *` +(import_from_statement + module_name: (dotted_name) @name + (wildcard_import) +) @importfrom +{ + attr (@importfrom.importexpr) name = (source-text @name) + attr (@importfrom.importexpr) level = 0 +} + +; Relative star import, with module name: `from ..a import *` +(import_from_statement + module_name: + (relative_import + (dotted_name) @name + ) + (wildcard_import) +) @importfrom +{ + attr (@importfrom.importexpr) name = (source-text @name) +} + +; Relative star import, without module name: `from ... import *` +(import_from_statement + module_name: + (relative_import + (import_prefix) @prefix + ) + (wildcard_import) +) @importfrom +{ + var level = 0 + + ; Figure out the number of `.`s in the prefix. + scan (source-text @prefix) { + "\." { + set level = (plus level 1) + } + } + + attr (@importfrom.importexpr) level = level +} +;;;;;; End of Import (`from ... import ...`) + +;;;;;; Raise (`raise ...`) +; This one is interesting, since the `tree-sitter-python` grammar doesn't let +; us distinguish between `raise foo` and `raise foo, bar`. At the level of the +; `tree-sitter-python` output, both are `raise_statement` nodes with a single +; child. In the latter case, the child is an `expression_list` but there's +; currently no way to match _against_ a particular node type in a query. + +; To get around this, we instead do the matching inside the stanza itself. + +(raise_statement . (_) @exc) @raise +{ + if (not (instance-of @exc "expression_list") ) { + attr (@raise.node) exc = @exc.node + } + attr (@exc.node) ctx = "load" +} + +; `raise ... from cause` +(raise_statement + cause: (_) @cause +) @raise +{ + attr (@raise.node) cause = @cause.node + attr (@cause.node) ctx = "load" +} + +; `raise type, inst` +(raise_statement (expression_list + . (_) @type + . (_) @inst +)) @raise +{ + attr (@raise.node) type = @type.node + attr (@raise.node) inst = @inst.node +} + +; `raise type, inst, tback` +(raise_statement (expression_list + . (_) + . (_) + . (_) @tback + . +)) @raise +{ + attr (@raise.node) tback = @tback.node +} + +;;;;;; End of Raise (`raise ...`) + +;;;;;; Assert (`assert ...`) + +(assert_statement + . (_) @test +) @assert +{ + attr (@assert.node) test = @test.node + attr (@test.node) ctx = "load" +} + +(assert_statement + . (_) + . (_) @msg +) @assert +{ + attr (@assert.node) msg = @msg.node + attr (@msg.node) ctx = "load" +} + +;;;;;; End of Assert (`assert ...`) + +;;;;;; String (`"foo"`) + +; For regular strings, see the handling of `(string !interpolation)` below. + +; For concatenated strings, the necessary manipulations are quite complicated to express, +; so we instead move this problem into the Python side of things. Thus, a concatenated +; string only has to keep track of what its children are. +(concatenated_string) @string +{ + attr (@string.node) _prefix = (string-prefix @string) + attr (@string.node) _fixup = #true +} + +(concatenated_string (string) @part) @string +{ + edge @string.node -> @part.node + attr (@string.node -> @part.node) _children = (named-child-index @part) +} + +;;;;;; End of String (`"foo"`) + +;;;;;; JoinedStr (`f"foo"`) + +; f-strings are quite complicated for a variety of reasons. First of all, +; we need to synthesize empty strings to appear in-between interpolations +; that are immediately adjacent. Thus, the string `f"{1}{2}"`, which has +; a `tree-sitter-python` representation of the form +; +; (string (interpolation (integer)) (interpolation (integer))) +; +; needs to have three empty additional strings synthesized: +; - `f"{`, before the `1`, +; - `}{`, between the `1` and `2`, and +; - `}"`, after the `2`. +; +; Because of this, children of an f-string are indexed using triples of integers. +; The first component is either 0, 1, or 2, indicating whether this string appears at the +; beginning, in between, or at the end of the f-string. (At the beginning and end, the other +; two components are irrelevant.) The second component is the index of child, as seen by +; `tree-sitter`. The third component allows us to insert empty strings between adjacent children +; of the f-string. Thus, the string `f"{1}{2}"` has the following children at the given indices: +; `f"{"` at `[0,0,0]` +; `1` at `[1,1,0]` +; `}{` at `[1,1,1]` +; `2` at `[1,2,0]` +; `}"` at `[2,0,0]` + + +; First, we add any strings parts that appear either before or after an interpolation: +[ + (string + interpolation: (_) + string_content: (_) @part + ) + (string + string_content: (_) @part + interpolation: (_) + ) +] @fstring +{ + edge @fstring.node -> @part.node + attr (@fstring.node -> @part.node) values = [1, (named-child-index @part), 0] + let safe_string = (concatenate-strings (string-safe-prefix @fstring) (source-text @part) (string-quotes @fstring)) + attr (@part.node) s = safe_string + attr (@part.node) text = safe_string +} + +; In a similar fashion, any expressions that are interpolated: +(string interpolation: (interpolation expression: (_) @part) @interp) @fstring +{ + edge @fstring.node -> @part.node + attr (@fstring.node -> @part.node) values = [1, (named-child-index @interp), 0] + attr (@part.node) ctx = "load" +} + +; Any expressions inside the format specifier are appended at the end +(string + interpolation: (interpolation + (format_specifier + (format_expression + expression: (_) @part + ) @format_expression + ) + ) @interp +) @fstring +{ + edge @fstring.node -> @part.node + attr (@fstring.node -> @part.node) values = [1, (named-child-index @interp), (plus 1 (named-child-index @format_expression))] + attr (@part.node) ctx = "load" +} + +; Next, the empty string before the first interpolation: +(string + . + (interpolation "{" @end) +) @fstring +{ + let empty_string = (ast-node @fstring "StringPart") + edge @fstring.node -> empty_string + attr (@fstring.node -> empty_string) values = [0, 0, 0] + attr (empty_string) prefix = (string-prefix @fstring) + attr (empty_string) s = "\"\"" + let quotes = (string-quotes @fstring) + attr (empty_string) text = (concatenate-strings quotes quotes) + + attr (empty_string) _location_end = (location-end @end) +} + +; Then, the empty string between two immediately adjacent interpolations: +(string + (interpolation "}" @start) @before + . + (interpolation "{" @end) +) @fstring +{ + let empty_string = (ast-node @fstring "StringPart") + edge @fstring.node -> empty_string + attr (@fstring.node -> empty_string) values = [1, (named-child-index @before), 1] + attr (empty_string) prefix = (string-prefix @fstring) + attr (empty_string) s = "\"\"" + let quotes = (string-quotes @fstring) + attr (empty_string) text = (concatenate-strings quotes quotes) + attr (empty_string) _location_start = (location-start @start) + attr (empty_string) _location_end = (location-end @end) +} + +; And finally, the empty string after the last interpolation: +(string + (interpolation "}" @start) + . +) @fstring +{ + let empty_string = (ast-node @fstring "StringPart") + edge @fstring.node -> empty_string + attr (@fstring.node -> empty_string) values = [2, 0, 0] + attr (empty_string) prefix = (string-prefix @fstring) + attr (empty_string) s = "\"\"" + let quotes = (string-quotes @fstring) + attr (empty_string) text = (concatenate-strings quotes quotes) + attr (empty_string) _location_start = (location-start @start) +} + +; If the f-string begins with a non-empty string, we must adjust the start and +; end location of this part: +(string + . + string_content: (_) @part + . + interpolation: (interpolation "{" @int_start) +) @fstring +{ + attr (@part.node) prefix = (string-prefix @fstring) + attr (@part.node) _location_start = (location-start @fstring) + attr (@part.node) _location_end = (location-end @int_start) +} + +; And similarly for any string that follows an interpolation: +(string + interpolation: (interpolation "}" @int_end) + . + string_content: (_) @part) @fstring +{ + attr (@part.node) prefix = (string-prefix @fstring) + attr (@part.node) _location_start = (location-start @int_end) +} + +; Finally, we must adjust the end of the last part: +(string + interpolation: (_) + string_content: (_) @part + . +) @fstring +{ + attr (@part.node) _location_end = (location-end @fstring) +} + +; For f-strings without interpolations, we simply treat them as regular strings (or `StringPart`s if +; they are part of a concatenation): +(string !interpolation string_content: (_) @part) @fstring +{ + let safe_text = (concatenate-strings (string-safe-prefix @fstring) (source-text @part) (string-quotes @fstring)) + if (instance-of (get-parent @fstring) "concatenated_string"){ + ; StringPart + attr (@fstring.node) text = safe_text + } + else { + ; regular string + attr (@fstring.node) implicitly_concatenated_parts = #null + } + attr (@fstring.node) s = safe_text + attr (@fstring.node) prefix = (string-prefix @fstring) +} + +; For f-strings without interpolations _or_ string-content, we simply treat them as regular empty strings: +(string !interpolation !string_content) @fstring +{ + let empty_text = "\"\"" + if (instance-of (get-parent @fstring) "concatenated_string"){ + ; StringPart + attr (@fstring.node) text = empty_text + } + else { + ; regular string + attr (@fstring.node) implicitly_concatenated_parts = #null + } + attr (@fstring.node) s = empty_text + attr (@fstring.node) prefix = (string-prefix @fstring) +} + + +;;;;;; End of JoinedStr (`f"foo"`) + + + +;;;;;; List (`[...]`) + +(list element: (_) @elt) @list +{ + edge @list.node -> @elt.node + attr (@list.node -> @elt.node) elts = (named-child-index @elt) +} + +;;;;;; End of List (`[...]`) + +;;;;;; Starred (`*some_sequence`) + +[ + (list_splat (expression) @value) + (list_splat_pattern vararg: (_) @value) +] @starred +{ + attr (@starred.node) value = @value.node + attr (@value.node) _inherited_ctx = @starred.node +} + +;;;;;; End of Starred (`*some_sequence`) + +;;;;;; Dict (`{... : ..., ...}`) + +(dictionary element: (_) @item) @dict +{ + edge @dict.node -> @item.node + attr (@dict.node -> @item.node) items = (named-child-index @item) + attr (@item.node) ctx = "load" +} + +(pair key: (_) @key value: (_) @value) @item +{ + attr (@item.node) key = @key.node + attr (@item.node) value = @value.node + attr (@key.node) ctx = "load" + attr (@value.node) ctx = "load" +} + +;;;;;; End of Dict (`{... : ..., ...}`) + +;;;;;; DictUnpacking (`**some_dict`) + +(dictionary_splat (expression) @value) @dictunpacking +{ + attr (@dictunpacking.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of DictUnpacking (`**some_dict`) + +;;;;;; Set (`{..., ...}`) + +(set element: (_) @elt) @set +{ + edge @set.node -> @elt.node + attr (@set.node -> @elt.node) elts = (named-child-index @elt) +} + +;;;;;; End of Set (`{..., ...}`) + + +;;;;;; BoolOp (`... and ...`, `... or ...`) + +; This is probably the single most complex thing in this file. Read it slowly. + +; First of all, the problem is that `tree-sitter-python` represents boolean operators as if they are binary, +; whereas in Python they are really n-ary. This means we have to collapse nested `and`s and `or`s in order to +; correctly create the intended AST structure. +; +; We have a structure like this: +; +; or +; / \ +; v_0 or +; / \ +; v_1 ... +; \ +; or +; / \ +; v_n-1 v_n +; +; where each `v_i` may be a value or a subtree, but not an `or`. +; From this we will produce a graph of the form: +; +; or -0-> v_0 +; -1-> v_1 +; ... +; -(n-1)-> v_n-1 +; -n-> [or -skip_to->]* v_n +; +; where we see that the last node may be found by a series of `skip_to` edges along the nested `or` nodes, +; if such are present. +; +; As an intermediate step, we will decorate the `or` nodes of the tree with a field `index`, and for the outermost +; `or` node we will also set `last_index`, initially to 1 but we increment it each time we see a nested `or`, so it ends +; up being `n`: +; +; or index:0, last_index: n +; / \ +; v_0 or index: 1 +; / \ +; v_1 ... +; \ +; or index: n-1 +; / \ +; v_n-1 v_n +; +; This collapsing goes to the outermost operator (`and` or `or`) +; and so the first step is to correctly identify these. + +; For the outermost nodes, we can now assign +; some special variables that we will propagate inwards. Firstly, we record what the outermost node is (in +; this case just the node itself), next the index of the value in its left argument (initially `0`), and +; finally the index at which the _innermost_ right-hand-side value should appear in the resulting list of +; values. This final variable is mutable, and will be updated as we go through the nested sequence of similar +; operators. +(boolean_operator operator: _ @op right: (_)) @boolop +{ + ; this binary operator is outermost if it does not have a parent performing the same operation (`and` or `or`) + if (not (is-boolean-operator (get-parent @boolop) (source-text @op))) { + let @boolop.outermost = @boolop + let @boolop.index = 0 + var @boolop.innermost_index = 1 + } +} + +; Now, we propagate/modify the variables mentioned in the previous stanza. The `outermost` field is simply +; propagated, and the `index` and `innermost_index` fields are propagated and updated respectively. +; +; We also set the `_skip_to` field on the inner operator, making it point to its right child. That way, the +; `right` child of the _outermost_ operator will (once resolved) point to the _innermost_ `right` child (i.e. ; the last child in this nested sequence of operators). +[ + (boolean_operator + operator: "or" + right: (boolean_operator + operator: "or" + right: (_) @inner_right + ) @inner + ) + (boolean_operator + operator: "and" + right: (boolean_operator + operator: "and" + right: (_) @inner_right + ) @inner + ) +] @outer +{ + let @inner.outermost = @outer.outermost + let @inner.index = (plus @outer.index 1) + attr (@inner.node) _skip_to = @inner_right.node + let outermost = @outer.outermost + set outermost.innermost_index = (plus outermost.innermost_index 1) +} + +; For each boolean operator, we hook its left child up as a child of the outermost operator, at the index we +; calculated previously. +(boolean_operator left: (_) @value) @boolop +{ + edge @boolop.outermost.node -> @value.node + attr (@boolop.outermost.node -> @value.node) values = @boolop.index + attr (@value.node) ctx = "load" +} + +; For the outermost boolean operator, we hook up its right child (which ultimately points to the innermost +; right child) as a child at the index we calculated previously. +(boolean_operator + operator: _ @op + right: (_) @value +) @boolop +{ + ; this binary operator is outermost if it does not have a parent performing the same operation (`and` or `or`) + if (not (is-boolean-operator (get-parent @boolop) (source-text @op))) { + edge @boolop.node -> @value.node + attr (@boolop.node -> @value.node) values = @boolop.innermost_index + } +} + +(boolean_operator right: (_) @value) +{ attr (@value.node) ctx = "load" } + +(boolean_operator ["and" "or"] @op) @boolop +{ + attr (@boolop.node) op = (source-text @op) +} + +;;;;;; End of BoolOp (`... and ...`, `... or ...`) + +;;;;;; Compare (`... < ...`, `... <= ...`, etc.) + +(comparison_operator . (primary_expression) @left) @compare +{ + attr (@compare.node) left = @left.node + attr (@left.node) ctx = "load" +} + +; Hook up all of the compared values. These are simply the named children (except the first one, +; which was handled above), as the operators are all unnamed. +(comparison_operator (primary_expression) (primary_expression) @right) @compare +{ + edge @compare.node -> @right.node + attr (@compare.node -> @right.node) comparators = (named-child-index @right) + attr (@right.node) ctx = "load" +} + + +; Record the operators in the `ops` fields. +; +; A complication here is that we want to construct a field pointing to a list of +; literals (and not AST nodes as we do almost everywhere else). To get around this, +; we create a placeholder node for the operation, and then set the `_is_literal` field +; to override it with a literal value. +(comparison_operator ["<" "<=" ">" ">=" "==" "!=" "<>" "in" "is"] @op) @compare +{ + let @op.node = (ast-node @op "cmpop") + attr (@op.node) _is_literal = (node-type @op) + edge @compare.node -> @op.node + attr (@compare.node -> @op.node) ops = (unnamed-child-index @op) +} + +; The `not in` and `is not` operators are complicated by the fact that the query +; `(comparison_operator "not in" @op)` +; matches _twice_ for each `not in` operator (in effect for both the `not` and `in` parts, even +; though these should have been aliased to a single token). To avoid producing duplicate operators, +; we only create an operator for _one_ of these matches, by checking whether the index is even. +(comparison_operator "not in"+ @op) @compare +{ + for op in @op { + let index = (unnamed-child-index op) + if (eq (mod index 2) 0) { + let op.node = (ast-node op "cmpop") + attr (op.node) _is_literal = "not in" + edge @compare.node -> op.node + attr (@compare.node -> op.node) ops = index + } + } +} + +(comparison_operator "is not"+ @op) @compare +{ + for op in @op { + let index = (unnamed-child-index op) + if (eq (mod index 2) 0) { + let op.node = (ast-node op "cmpop") + attr (op.node) _is_literal = "is not" + edge @compare.node -> op.node + attr (@compare.node -> op.node) ops = index + } + } +} + +;;;;;; End of Compare (`... < ...`, `... <= ...`, etc.) + +;;;;;; UnaryOp (`-x`, `~x`, etc.., `not x`) + +[ + (unary_operator argument: (_) @operand) + (not_operator argument: (_) @operand) +] @unaryop +{ + attr (@unaryop.node) operand = @operand.node + attr (@operand.node) ctx = "load" +} + +(unary_operator "~" @op) @unaryop +{ + attr (@unaryop.node) op = "~" +} + +(unary_operator "+") @unaryop +{ + attr (@unaryop.node) op = "uadd" +} + +(unary_operator "-") @unaryop +{ + attr (@unaryop.node) op = "usub" +} + + +(not_operator) @unaryop +{ + attr (@unaryop.node) op = "not" +} + +;;;;;; End of UnaryOp (`-x`, `not x`) + +;;;;;; Exec (`exec ...`) + +(exec_statement (_) @body) @exec +{ + attr (@exec.node) body = @body.node +} + +;;;;;; End of Exec (`exec ...`) + +;;;;;; Print (`print ...`) + +(print_statement argument: (_) @value) @print +{ + edge @print.node -> @value.node + attr (@print.node -> @value.node) values = (named-child-index @value) + attr (@value.node) ctx = "load" +} + +(print_statement (chevron (_) @dest)) @print +{ + attr (@print.node) dest = @dest.node + attr (@dest.node) ctx = "load" +} + +(print_statement ","? @comma .) @print +{ + var nl = #true + if some @comma + { + set nl = #false + } + attr (@print.node) nl = nl +} + +;;;;;; End of Print (`print ...`) + +;;;;;; Return (`return ...`) + +(return_statement (_) @value) @return +{ + attr (@return.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of Return (`return ...`) + +;;;;;; Yield and YieldFrom (`yield ...` and `yield from ...`) + +(yield (_) @value) @yield +{ + attr (@yield.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of Yield and YieldFrom (`yield ...` and `yield from ...`) + +;;;;;; Await (`await ...`) + +(await (_) @value) @await +{ + attr (@await.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of Await (`await ...`) + +;;;;;; Try (`try: ... except: ... else: ... finally: ...`) + +(try_statement body: (block (_) @stmt)) @try +{ + edge @try.node -> @stmt.node + attr (@try.node -> @stmt.node) body = (named-child-index @stmt) +} + +(try_statement (except_clause) @except) @try +{ + edge @try.node -> @except.node + attr (@try.node -> @except.node) handlers = (named-child-index @except) +} + +(try_statement (except_group_clause) @except) @try +{ + edge @try.node -> @except.node + attr (@try.node -> @except.node) handlers = (named-child-index @except) +} + +(try_statement (else_clause body: (block (_) @stmt))) @try +{ + edge @try.node -> @stmt.node + attr (@try.node -> @stmt.node) orelse = (named-child-index @stmt) +} + +(try_statement (finally_clause body: (block (_) @stmt))) @try +{ + edge @try.node -> @stmt.node + attr (@try.node -> @stmt.node) finalbody = (named-child-index @stmt) +} + +(except_clause body: (block (_) @stmt)) @except +{ + edge @except.node -> @stmt.node + attr (@except.node -> @stmt.node) body = (named-child-index @stmt) +} + +(except_clause type: (_) @type) @except +{ + attr (@except.node) type = @type.node + attr (@type.node) ctx = "load" +} + +(except_clause alias: (_) @name) @except +{ + attr (@except.node) name = @name.node + attr (@name.node) ctx = "store" +} + +(except_group_clause body: (block (_) @stmt)) @except +{ + edge @except.node -> @stmt.node + attr (@except.node -> @stmt.node) body = (named-child-index @stmt) +} + +(except_group_clause type: (_) @type) @except +{ + attr (@except.node) type = @type.node + attr (@type.node) ctx = "load" +} + +(except_group_clause alias: (_) @name) @except +{ + attr (@except.node) name = @name.node + attr (@name.node) ctx = "store" +} + +;;;;;; End of Try (`try: ... except: ... else: ... finally: ...`) + + +;;;;;; AssignExpr (`a := b`) + +(named_expression + name: (_) @name + value: (_) @value +) @assignexpr +{ + attr (@assignexpr.node) target = @name.node + attr (@name.node) ctx = "store" + attr (@assignexpr.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of AssignExpr (`a := b`) + +;;;;;; IfExpr (`a if b else c`) + +(conditional_expression + (expression) @body + (expression) @test + (expression) @orelse +) @ifexp +{ + attr (@ifexp.node) body = @body.node + attr (@body.node) ctx = "load" + attr (@ifexp.node) test = @test.node + attr (@test.node) ctx = "load" + attr (@ifexp.node) orelse = @orelse.node + attr (@orelse.node) ctx = "load" +} + +;;;;;; End of IfExpr (`a if b else c`) + +;;;;;; Attribute (`a.b`) + +(attribute + object: (_) @value + attribute: (_) @attr +) @attribute +{ + attr (@attribute.node) value = @value.node + attr (@value.node) ctx = "load" + attr (@attribute.node) attr = (source-text @attr) + ; Not actually used, but we need to set it to something. + attr (@attr.node) ctx = "load" +} + +;;;;;; End of Attribute (`a.b`) + +;;;;;; Subscript (`a[b]`) + +(subscript + value: (_) @value +) @subscript +{ + attr (@subscript.node) value = @value.node + attr (@value.node) ctx = "load" +} + +; Single subscript +(subscript + value: (_) + . + subscript: (_) @index + . +) @subscript +{ + attr (@subscript.node) index = @index.node + attr (@index.node) ctx = "load" +} + +; For expressions of the form `a[b, c]` we must explicitly synthesize an internal tuple node +; We do this and also hook it up: +(subscript + value: (_) + . + subscript: (_) @first + . + subscript: (_) +) @subscript +{ + let @subscript.tuple = (ast-node @first "Tuple") + attr (@subscript.tuple) ctx = "load" + attr (@subscript.node) index = @subscript.tuple + edge @subscript.tuple -> @first.node + attr (@subscript.tuple -> @first.node) elts = (named-child-index @first) + attr (@first.node) ctx = "load" +} + +(subscript + value: (_) + . + subscript: (_) + subscript: (_) @elt +) @subscript +{ + edge @subscript.tuple -> @elt.node + attr (@subscript.tuple -> @elt.node) elts = (named-child-index @elt) + attr (@elt.node) ctx = "load" +} + + +; Set the end position correctly +(subscript + value: (_) + . + subscript: (_) + subscript: (_) @last + . +) @subscript +{ + attr (@subscript.tuple) _location_end = (location-end @last) +} + + + +;;;;;; End of Subscript (`a[b]`) + +;;;;;; Slice (`a:b:c`) + +(slice start: (_) @start) @slice +{ + attr (@slice.node) start = @start.node + attr (@start.node) ctx = "load" +} + +(slice stop: (_) @stop) @slice +{ + attr (@slice.node) stop = @stop.node + attr (@stop.node) ctx = "load" +} + + +(slice step: (_) @step) @slice +{ + attr (@slice.node) step = @step.node + attr (@step.node) ctx = "load" +} + +;;;;;; End of Slice (`a:b:c`) + +;;;;;; While (`while a: ... else: ...`) + +(while_statement condition: (_) @test) @while +{ + attr (@while.node) test = @test.node + attr (@test.node) ctx = "load" +} + +(while_statement body: (block (_) @stmt)) @while +{ + edge @while.node -> @stmt.node + attr (@while.node -> @stmt.node) body = (named-child-index @stmt) +} + +(while_statement alternative: (else_clause (block (_) @stmt))) @while +{ + edge @while.node -> @stmt.node + attr (@while.node -> @stmt.node) orelse = (named-child-index @stmt) +} + +;;;;;; End of While (`while a: ... else: ...`) + +;;;;;; With (`with a as b, c as d: ...`) + +(with_statement (with_clause . (with_item) @first)) @with +{ + attr (@with.node) _skip_to = @first.node + let @with.first = @first.node +} + +(with_item + value: (_) @value +) @with +{ + attr (@with.node) context_expr = @value.node + attr (@value.node) ctx = "load" +} + +(with_item + alias: (_) @alias +) @with +{ + attr (@with.node) optional_vars = @alias.node + attr (@alias.node) ctx = "store" +} + + +(with_clause + (with_item) @with1 + . (comment)* . + (with_item) @with2 +) +{ + edge @with1.node -> @with2.node + attr (@with1.node -> @with2.node) body = 0 +} + + +(with_statement + (with_clause + (with_item) @last + . + ) + body: (block (_) @stmt) +) +{ + edge @last.node -> @stmt.node + attr (@last.node -> @stmt.node) body = (named-child-index @stmt) +} + + + +;;;;;; End of With (`with a as b, c as d: ...`) + +;;;;;; Match (`match a: ...`) + +(match_statement + subject: (_) @subject +) @match +{ + attr (@match.node) subject = @subject.node + attr (@subject.node) ctx = "load" +} + +(match_statement + cases: (cases (case_block) @case) +) @match +{ + edge @match.node -> @case.node + attr (@match.node -> @case.node) cases = (named-child-index @case) +} + +(case_block + pattern: (_) @pattern +) @case +{ + attr (@case.node) pattern = @pattern.node +} + +(case_block + guard: (_) @guard +) @case +{ + attr (@case.node) guard = @guard.node +} + +(guard + test: (_) @test +) @guard +{ + attr (@guard.node) test = @test.node + attr (@test.node) ctx = "load" +} + +(case_block + body: (block (_) @stmt) +) @case +{ + edge @case.node -> @stmt.node + attr (@case.node -> @stmt.node) body = (named-child-index @stmt) +} + +;;; The various pattern shapes need to have their children set up correctly + + +(match_as_pattern + pattern: (_) @pattern +) @match +{ + attr (@match.node) pattern = @pattern.node +} + +(match_as_pattern + alias: (_) @alias +) @match +{ + attr (@match.node) alias = @alias.node + attr (@alias.node) ctx = "store" +} + +(match_or_pattern + (_) @pattern +) @match_or_pattern +{ + edge @match_or_pattern.node -> @pattern.node + attr (@match_or_pattern.node -> @pattern.node) patterns = (named-child-index @pattern) +} + +(match_literal_pattern !real (_) @literal) @match_literal_pattern +{ + attr (@match_literal_pattern.node) literal = @literal.node + attr (@literal.node) ctx = "load" +} + +(match_literal_pattern + prefix_operator: _? @prefix_op + real: (_) @left + operator: _? @op + imaginary: (_)? @right +) @match_literal_pattern +{ + ; Set `left_node` to point to the left hand side (or only part) of the literal, + ; synthesizing it if needed. + var left_node = #null + if some @prefix_op { + set left_node = (ast-node @left "UnaryOp") + attr (left_node) _start_location = (location-start @prefix_op) + attr (left_node) operand = @left.node + attr (left_node) op = "usub" + } else { + set left_node = @left.node + } + attr (left_node) ctx = "load" + ; Synthesize the binary operator node, if needed. + var literal_node = #null + if some @right { + ; Synthesize the node for the binary operation + set literal_node = (ast-node @match_literal_pattern "BinOp") + attr (literal_node) left = left_node + attr (literal_node) right = @right.node + attr (literal_node) op = (source-text @op) + attr (@right.node) ctx = "load" + attr (literal_node) ctx = "load" + } else { + set literal_node = left_node + } + attr (@match_literal_pattern.node) literal = literal_node +} + +(match_capture_pattern (identifier) @pattern) @match_capture_pattern +{ + attr (@match_capture_pattern.node) variable = @pattern.node + attr (@pattern.node) ctx = "store" +} + +; We have a structure where the match_value_pattern has a child for each +; step in the attribute access. +; We will turn each child into an actual attribute access of its predecessor. +; +; We start with (@match_value_pattern) -> id_1 .. id_n +; result is +; id_1 is a Name +; for i > 1: +; @id_i -skip-> Attribute -value-> @id_{i-1} +; -attr-> #text +; @match_value_pattern -value-> @id_n + +(match_value_pattern + (identifier) @obj + . + (identifier) @attr +) @match_value_pattern +{ + let attribute = (ast-node @attr "Attribute") + attr (@attr.node) _skip_to = attribute + attr (attribute) value = @obj.node + attr (attribute) attr = (source-text @attr) + attr (attribute) ctx = "load" +} + +; First id +; this needs a ctx +(match_value_pattern + . + (identifier) @id +) @match_value_pattern +{ + attr (@id.node) ctx = "load" +} + +; Last id +; this should be linked from the pattern. +(match_value_pattern + (identifier) @attr + . +) @match_value_pattern +{ + attr (@match_value_pattern.node) value = @attr.node +} + +; Group patterns only exist in the parser. +; They are elided from the AST, where the information is +; instead recorded in the field `parenthesised`. +(match_group_pattern + content: (_) @pattern +) @match_group_pattern +{ + attr (@match_group_pattern.node) _skip_to = @pattern.node + attr (@match_group_pattern.node) parenthesised = #true +} + +(match_sequence_pattern + (_) @pattern +) @match_sequence_pattern +{ + edge @match_sequence_pattern.node -> @pattern.node + attr (@match_sequence_pattern.node -> @pattern.node) patterns = (named-child-index @pattern) +} + +(match_star_pattern + target: (_) @target +) @match_star_pattern +{ + attr (@match_star_pattern.node) target = @target.node +} + +(match_mapping_pattern + [ + (match_key_value_pattern) @mapping + (match_double_star_pattern) @mapping + ] +) @pattern +{ + edge @pattern.node -> @mapping.node + attr (@pattern.node -> @mapping.node) mappings = (named-child-index @mapping) +} + +(match_double_star_pattern + target: (_) @target +) @match_double_star_pattern +{ + attr (@match_double_star_pattern.node) target = @target.node +} + +(match_key_value_pattern + key: (_) @key + value: (_) @value +) @key_value +{ + attr (@key_value.node) key = @key.node + attr (@key_value.node) value = @value.node +} + +; Similar situation to the match_value_pattern. +; We have a structure where the match_class_pattern has a child for each +; step in the attribute access. +; We will turn each child into an actual attribute access of its predecessor. + +(pattern_class_name + (identifier) @obj + . + (identifier) @attr +) +{ + let attribute = (ast-node @attr "Attribute") + attr (@attr.node) _skip_to = attribute + attr (attribute) value = @obj.node + attr (attribute) attr = (source-text @attr) + attr (attribute) ctx = "load" +} + +; First id +(pattern_class_name + . + (identifier) @id +) +{ + attr (@id.node) ctx = "load" +} + +; Last id +; this should be linked from the pattern. +(match_class_pattern + class: (pattern_class_name + (identifier) @attr + . + ) +) @match_class_pattern +{ + attr (@match_class_pattern.node) class_name = @attr.node +} + +(match_class_pattern + (match_positional_pattern (_) @positional) @positional_pattern +) @match_class_pattern +{ + edge @match_class_pattern.node -> @positional.node + attr (@match_class_pattern.node -> @positional.node) positional = (named-child-index @positional_pattern) +} + +(match_class_pattern + (match_keyword_pattern) @keyword +) @match_class_pattern +{ + edge @match_class_pattern.node -> @keyword.node + attr (@match_class_pattern.node -> @keyword.node) keyword = (named-child-index @keyword) +} + +(match_keyword_pattern + attribute: (_) @attribute +) @match_keyword_pattern +{ + attr (@match_keyword_pattern.node) attribute = @attribute.node + attr (@attribute.node) ctx = "load" +} + +(match_keyword_pattern + value: (_) @pattern +) @match_keyword_pattern +{ attr (@match_keyword_pattern.node) value = @pattern.node} + +;;;;;; End of Match (`match a: ...`) + +;;;;;; Lambda (`lambda a: ...`) + +; Lambdas are tricky, much like function definitions. +; +; One complication is that we need to distinguish the cases where the parameter has a default value and +; where it does not. This leads to an unfortunate explosion in mostly similar cases... + + +(lambda body: (_) @body) @lambda +{ + + ; Lambdas contain a `Function` much like regular functions. + let @lambda.function = (ast-node @lambda "Function") + attr (@lambda.function) name = "lambda" + attr (@lambda.node) inner_scope = @lambda.function + + ; The single child of this function is a synthesised return statement. + let return = (ast-node @body "Return") + edge @lambda.function -> return + attr (@lambda.function -> return) body = 0 + + attr (return) value = @body.node + attr (@body.node) ctx = "load" +} + +; Lambdas without parameters just get a dummy `arguments` child. +(lambda !parameters) @lambda +{ + attr (@lambda.node) args = (ast-node @lambda "arguments") +} + +(lambda parameters: (_) @params) @lambda +{ + attr (@lambda.node) args = @params.node +} + +(lambda + parameters: (lambda_parameters + (list_splat_pattern vararg: (_) @vararg) @starred + ) +) @lambda +{ + attr (@lambda.function) vararg = @vararg.node + attr (@starred.node) ctx = "param" ; Not actually used + attr (@vararg.node) ctx = "param" +} + +(lambda + parameters: (lambda_parameters + (dictionary_splat_pattern kwarg: (_) @kwarg) + ) +) @lambda +{ + attr (@lambda.function) kwarg = @kwarg.node + attr (@kwarg.node) ctx = "param" +} + +(lambda + parameters: (lambda_parameters + [(list_splat_pattern) (keyword_separator)]? @is_kwarg + [ + (identifier) @name + (default_parameter + name: (_) @name + value: (_) @value + ) + ] @param + ) @params +) @lambda +{ + let none = (ast-node @params "None") + attr (none) _is_literal = #null + attr (none) ctx = "load" + edge @params.node -> none + + ; Even though lambda parameters cannot have annotations, we must still record this fact. + if some @is_kwarg { + attr (@params.node -> none) kw_annotations = (named-child-index @param) + } else { + attr (@params.node -> none) annotations = (named-child-index @param) + } + + edge @lambda.function -> @name.node + attr (@name.node) ctx = "param" + + if some @is_kwarg { + attr (@lambda.function -> @name.node) kwonlyargs = (named-child-index @param) + } + else {  + attr (@lambda.function -> @name.node) args = (named-child-index @param) + } + + var default_node = none + if some @value { + set default_node = @value.node + edge @params.node -> default_node + attr (default_node) ctx = "load" + } + if some @is_kwarg { + attr (@params.node -> default_node) kw_defaults = (named-child-index @param) + } else { + attr (@params.node -> default_node) defaults = (named-child-index @param) + } +} + +;;;;;; End of Lambda (`lambda a: ...`) + +;;;;;; Function (`def a(b, c): ...`) + +; Much like lambdas, the main difficulty here is that we need to account for the absence of the positional +; argument separator. We do this using the exact same machinery. +; +; Also, all arguments can now also have a type/annotation, so get ready for _twice_ the number of cases. + +(function_definition + name: (_) @name + ":" @end +) @funcdef +{ + let end = (location-end @end) + + attr (@funcdef.node) _location_end = end + + edge @funcdef.node -> @name.node + attr (@funcdef.node -> @name.node) targets = 0 + attr (@name.node) ctx = "store" + + let @funcdef.funcexpr = (ast-node @funcdef "FunctionExpr") + attr (@funcdef.funcexpr) _location_end = end + attr (@funcdef.node) value = @funcdef.funcexpr + attr (@funcdef.funcexpr) name = (source-text @name) + + let @funcdef.function = (ast-node @funcdef "Function") + attr (@funcdef.function) _location_end = end + attr (@funcdef.function) name = (source-text @name) + attr (@funcdef.funcexpr) inner_scope = @funcdef.function +} + +(function_definition + body: (block (_) @stmt) +) @funcdef +{ + edge @funcdef.function -> @stmt.node + attr (@funcdef.function -> @stmt.node) body = (named-child-index @stmt) +} + +(function_definition + parameters: (_) @params +) @funcdef +{ + attr (@funcdef.funcexpr) args = @params.node +} + + +(function_definition + parameters: (parameters + [(list_splat_pattern) (keyword_separator)]? @is_kwarg + [ + (identifier) @name + (default_parameter + name: (_) @name + value: (_) @value + ) + (typed_parameter + (identifier) @name + . + type: (type (expression) @type) + ) + (typed_default_parameter + name: (_) @name + type: (type (expression) @type) + value: (_) @value + ) + ] @param + ) @params +) @funcdef +{ + let none = (ast-node @params "None") + attr (none) _is_literal = #null + attr (none) ctx = "load" + edge @params.node -> none + + var type_node = none + if some @type { + set type_node = @type.node + edge @params.node -> type_node + attr (type_node) ctx = "load" + } + + if some @is_kwarg { + attr (@params.node -> type_node) kw_annotations = (named-child-index @param) + } else { + attr (@params.node -> type_node) annotations = (named-child-index @param) + } + + edge @funcdef.function -> @name.node + attr (@name.node) ctx = "param" + + if some @is_kwarg { + attr (@funcdef.function -> @name.node) kwonlyargs = (named-child-index @param) + } + else {  + attr (@funcdef.function -> @name.node) args = (named-child-index @param) + } + + var default_node = none + if some @value { + set default_node = @value.node + edge @params.node -> default_node + attr (default_node) ctx = "load" + } + if some @is_kwarg { + attr (@params.node -> default_node) kw_defaults = (named-child-index @param) + } else { + attr (@params.node -> default_node) defaults = (named-child-index @param) + } +} + +; `*args` argument +(function_definition + parameters: (parameters + [ + (list_splat_pattern vararg: (_) @name) @starred + (typed_parameter + (list_splat_pattern vararg: (_) @name) @starred + type: (type (expression) @type) + ) + ] + ) @params +) @funcdef +{ + attr (@funcdef.function) vararg = @name.node + attr (@starred.node) ctx = "param" ; Not actually used + attr (@name.node) ctx = "param" + if some @type { + attr (@params.node) varargannotation = @type.node + attr (@type.node) ctx = "load" + } +} + +; Return type +(function_definition + return_type: (type (expression) @type) +) @funcdef +{ + attr (@funcdef.funcexpr) returns = @type.node + attr (@type.node) ctx = "load" +} + +; `**kwargs` argument +(function_definition + (parameters + [ + (dictionary_splat_pattern kwarg: (identifier) @name) + (typed_parameter + (dictionary_splat_pattern kwarg: (identifier) @name) + type: (type (expression) @type) + ) + ] + ) @params +) @funcdef +{ + attr (@funcdef.function) kwarg = @name.node + attr (@name.node) ctx = "param" + if some @type { + attr (@params.node) kwargannotation = @type.node + attr (@type.node) ctx = "load" + } +} + +;;; Decorators + +(decorated_definition + . (decorator) @first + definition: (function_definition name: (_) @name ":" @end) @funcdef +) @decorator +{ + attr (@decorator.node) value = @first.node + attr (@decorator.node) _location_start = (location-start @funcdef) + attr (@decorator.node) _location_end = (location-end @end) + edge @decorator.node -> @name.node + attr (@decorator.node -> @name.node) targets = 0 +} + +(decorated_definition + . (decorator) @first + definition: (class_definition name: (_) @name ":" @end) @funcdef +) @decorator +{ + attr (@decorator.node) value = @first.node + attr (@decorator.node) _location_start = (location-start @funcdef) + attr (@decorator.node) _location_end = (location-end @end) + edge @decorator.node -> @name.node + attr (@decorator.node -> @name.node) targets = 0 +} + +(decorator (expression) @exp) @decorator +{ + attr (@decorator.node) _location_start = (location-start @exp) + attr (@exp.node) ctx = "load" +} + +(decorated_definition + (decorator (expression) @exp1) @dec1 + . (comment)* . + (decorator (expression) @exp2) @dec2 +) @decorator +{ + attr (@dec1.node) func = @exp1.node + edge @dec1.node -> @dec2.node + attr (@dec1.node -> @dec2.node) positional_args = 0 +} + +(decorated_definition + (decorator (expression) @exp) @last + . (comment)* . + definition: (function_definition) @funcdef +) @decorator +{ + attr (@last.node) func = @exp.node + edge @last.node -> @funcdef.funcexpr + attr (@last.node -> @funcdef.funcexpr) positional_args = 0 + attr (@last.node) _location_end = (location-end @exp) +} + +(decorated_definition + (decorator (expression) @exp) @last + . (comment)* . + definition: (class_definition) @class +) @decorator +{ + attr (@last.node) func = @exp.node + edge @last.node -> @class.class_expr + attr (@last.node -> @class.class_expr) positional_args = 0 + attr (@last.node) _location_end = (location-end @exp) +} + +;;; Type parameters + +(function_definition + type_parameters: (type_parameters type_parameter: (_) @param) +) @funcdef +{ + edge @funcdef.function -> @param.node + attr (@funcdef.function -> @param.node) type_parameters = (named-child-index @param) +} + +(class_definition + type_parameters: (type_parameters type_parameter: (_) @param) +) @class +{ + edge @class.class_expr -> @param.node + attr (@class.class_expr -> @param.node) type_parameters = (named-child-index @param) +} + +;;;;;; End of Function (`def a(b, c): ...`) + +;;;;;; TypeAlias (`type a[...] = ...`) + +(type_alias_statement + name: (_) @name + value: (_) @value +) @type_alias +{ + attr (@name.node) ctx = "store" + attr (@value.node) ctx = "load" + attr (@type_alias.node) name = @name.node + attr (@type_alias.node) value = @value.node +} + +(type_alias_statement + type_parameters: (type_parameters type_parameter: (_) @param) +) @type_alias +{ + edge @type_alias.node -> @param.node + attr (@type_alias.node -> @param.node) type_parameters = (named-child-index @param) +} + +;;;;;; End of TypeAlias (`type a[...] = ...`) + +;;;;;; Type parameters (`T: ..., *T, **T`) + +(typevar_parameter + name: (_) @name + bound: (_)? @bound +) @typevar +{ + attr (@name.node) ctx = "store" + attr (@typevar.node) name = @name.node + if some @bound { + attr (@bound.node) ctx = "load" + attr (@typevar.node) bound = @bound.node + } +} + +(typevartuple_parameter + name: (_) @name +) @typevartuple +{ + attr (@name.node) ctx = "store" + attr (@typevartuple.node) name = @name.node +} + +(paramspec_parameter + name: (_) @name +) @paramspec +{ + attr (@name.node) ctx = "store" + attr (@paramspec.node) name = @name.node +} + +;;;;;; End of Type parameters (`T: ..., *T, **T`) + +; Nodes with an `elts` field +[ + ; Left hand side of an assignment such as `foo, bar = ...` + (pattern_list element: (_) @elt) @parent + + ; An unadorned tuple (such as in `x = y, z`) + (expression_list element: (_) @elt) @parent + + ; A regular tuple such as `(x, y, z)` + (tuple element: (_) @elt) @parent + + (tuple_pattern element: (_) @elt) @parent +] +{ + edge @parent.node -> @elt.node + attr (@parent.node -> @elt.node) elts = (named-child-index @elt) +} + + + +; Expressions that do not produce an `Expr` node in the AST. +(expression_statement [(assignment) (augmented_assignment)] @inner) @outer +{ + attr (@outer.node) _skip_to = @inner.node +} + +; Expressions that may result in an `Expr` node in the AST +; ("may" because of the `_skip_to` field). +(expression_statement . (_) @expr . ) @stmt +{ + attr (@stmt.node) value = @expr.node + attr (@expr.node) ctx = "load" +} + + +; Sequence expressions where the elements inherit the load/store context +[ + (list element: (_) @elt) + (tuple element: (_) @elt) + (tuple_pattern element: (_) @elt) + (pattern_list element: (_) @elt) + (expression_list element: (_) @elt) + (parenthesized_expression inner: (_) @elt) + (set element: (_) @elt) + (match_sequence_pattern (_) @elt) +] @seq +{ + attr (@elt.node) _inherited_ctx = @seq.node +} + +[(tuple element: (_)) (tuple_pattern)] @tup +{ + attr (@tup.node) parenthesised = #true +} diff --git a/python/extractor/tsg-python/rust-toolchain.toml b/python/extractor/tsg-python/rust-toolchain.toml new file mode 100644 index 00000000000..fe5c5df29ff --- /dev/null +++ b/python/extractor/tsg-python/rust-toolchain.toml @@ -0,0 +1,7 @@ +# This file specifies the Rust version used to develop and test the Python +# extractor. It is set to the lowest version of Rust we want to support. + +[toolchain] +channel = "1.68" +profile = "minimal" +components = [ "rustfmt" ] diff --git a/python/extractor/tsg-python/src/main.rs b/python/extractor/tsg-python/src/main.rs new file mode 100644 index 00000000000..fa528d8138d --- /dev/null +++ b/python/extractor/tsg-python/src/main.rs @@ -0,0 +1,572 @@ +// -*- coding: utf-8 -*- +// ------------------------------------------------------------------------------------------------ +// Copyright © 2021, GitHub. +// Licensed under either of Apache License, Version 2.0, or MIT license, at your option. +// Please see the LICENSE-APACHE or LICENSE-MIT files in this distribution for license details. +// ------------------------------------------------------------------------------------------------ + +use std::path::Path; + +use anyhow::anyhow; +use anyhow::Context as _; +use anyhow::Result; +use clap::App; +use clap::Arg; +use tree_sitter::Parser; +use tree_sitter_graph::ast::File; +use tree_sitter_graph::functions::Functions; +use tree_sitter_graph::ExecutionConfig; +use tree_sitter_graph::Identifier; +use tree_sitter_graph::NoCancellation; +use tree_sitter_graph::Variables; + +const BUILD_VERSION: &'static str = env!("CARGO_PKG_VERSION"); + +pub mod extra_functions { + use tree_sitter_graph::functions::{Function, Parameters}; + use tree_sitter_graph::graph::{Graph, Value}; + use tree_sitter_graph::{ExecutionError, Identifier}; + + pub struct Location; + + fn get_location(node: Value, graph: &Graph) -> Result { + let node = graph[node.into_syntax_node_ref()?]; + let start = node.start_position(); + let end = node.end_position(); + Ok(Value::List( + vec![start.row, start.column, end.row, end.column] + .into_iter() + .map(|v| Value::from(v as u32)) + .collect(), + )) + } + + impl Function for Location { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = parameters.param()?; + parameters.finish()?; + get_location(node, graph) + } + } + + pub struct LocationStart; + + impl Function for LocationStart { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let start = node.start_position(); + Ok(Value::List( + vec![start.row, start.column] + .into_iter() + .map(|v| Value::from(v as u32)) + .collect(), + )) + } + } + + pub struct LocationEnd; + + impl Function for LocationEnd { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let end = node.end_position(); + Ok(Value::List( + vec![end.row, end.column] + .into_iter() + .map(|v| Value::from(v as u32)) + .collect(), + )) + } + } + + pub struct AstNode; + + impl Function for AstNode { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let tree_sitter_node = parameters.param()?; + let kind = parameters.param()?; + parameters.finish()?; + let node = graph.add_graph_node(); + let loc = get_location(tree_sitter_node, graph)?; + graph[node] + .attributes + .add(Identifier::from("_location"), loc) + .map_err(|_| { + ExecutionError::DuplicateAttribute(format!( + " _location on graph node ({:?})", + node + )) + })?; + graph[node] + .attributes + .add(Identifier::from("_kind"), kind) + .map_err(|_| { + ExecutionError::DuplicateAttribute(format!(" _kind on graph node ({:?})", node)) + })?; + Ok(Value::GraphNode(node)) + } + } + + /// A struct representing the prefix on a Python string. + struct Prefix { + flags: String, + quotes: String, + } + + impl Prefix { + fn full(&self) -> String { + format!("{}{}", self.flags, self.quotes) + } + + fn safe(&self) -> Prefix { + Prefix { + flags: self.flags.clone().replace("f", "").replace("F", ""), + quotes: self.quotes.clone(), + } + } + } + + fn get_prefix(s: &str) -> Prefix { + let flags_matcher = regex::Regex::new("^[bfurBFUR]{0,2}").unwrap(); + let mut end = 0; + let flags = match flags_matcher.find(s) { + Some(m) => { + end = m.end(); + &s[m.start()..m.end()] + } + None => "", + }; + let mut quotes = ""; + if s[end..].starts_with("\"\"\"") { + quotes = "\"\"\""; + } else if s[end..].starts_with("'''") { + quotes = "'''"; + } else if s[end..].starts_with('"') { + quotes = "\""; + } else if s[end..].starts_with('\'') { + quotes = "'"; + } else if s[end..].starts_with('}') { + quotes = "}"; + } + Prefix { + flags: flags.to_lowercase().to_owned(), + quotes: quotes.to_owned(), + } + } + + #[test] + fn test_get_prefix() { + let p = get_prefix("rb'''hello'''"); + assert_eq!(p.flags, "rb"); + assert_eq!(p.quotes, "'''"); + let p = get_prefix("Br\"\"\"hello\"\"\""); + assert_eq!(p.flags, "Br"); + assert_eq!(p.quotes, "\"\"\""); + let p = get_prefix("FR\"hello\""); + assert_eq!(p.flags, "FR"); + assert_eq!(p.quotes, "\""); + let p = get_prefix("uR'hello'"); + assert_eq!(p.flags, "uR"); + assert_eq!(p.quotes, "'"); + let p = get_prefix("''"); + assert_eq!(p.flags, ""); + assert_eq!(p.quotes, "'"); + let p = get_prefix("\"\""); + assert_eq!(p.flags, ""); + assert_eq!(p.quotes, "\""); + let p = get_prefix("\"\"\"\"\"\""); + assert_eq!(p.flags, ""); + assert_eq!(p.quotes, "\"\"\""); + } + + fn get_string_contents(s: String) -> String { + let prefix = get_prefix(&s); + let contents = s.clone(); + let contents = contents.strip_prefix(prefix.full().as_str()).unwrap(); + let contents = contents.strip_suffix(prefix.quotes.as_str()).unwrap(); + + contents.to_owned() + } + + #[test] + fn test_get_string_contents() { + let s = "rb'''hello'''"; + assert_eq!(get_string_contents(s.to_owned()), "hello"); + let s = "Br\"\"\"hello\"\"\""; + assert_eq!(get_string_contents(s.to_owned()), "hello"); + let s = "FR\"hello\""; + assert_eq!(get_string_contents(s.to_owned()), "hello"); + let s = "uR'hello'"; + assert_eq!(get_string_contents(s.to_owned()), "hello"); + let s = "''"; + assert_eq!(get_string_contents(s.to_owned()), ""); + let s = "\"\""; + assert_eq!(get_string_contents(s.to_owned()), ""); + let s = "\"\"\"\"\"\""; + assert_eq!(get_string_contents(s.to_owned()), ""); + let s = "''''''"; + assert_eq!(get_string_contents(s.to_owned()), ""); + } + + pub struct StringPrefix; + + impl Function for StringPrefix { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let prefix = get_prefix(&source[node.byte_range()]).full(); + Ok(Value::String(prefix)) + } + } + + pub struct StringContents; + + impl Function for StringContents { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let contents = get_string_contents(source[node.byte_range()].to_owned()); + Ok(Value::String(contents)) + } + } + + pub struct StringQuotes; + + impl Function for StringQuotes { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let prefix = get_prefix(&source[node.byte_range()]); + Ok(Value::String(prefix.quotes)) + } + } + + // Gets a version of the prefix that can be used in a call to `literal_eval`. To do so, we must remove + // any `f` or `F` characters, if present. + pub struct StringSafePrefix; + + impl Function for StringSafePrefix { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let prefix = get_prefix(&source[node.byte_range()]).full(); + let prefix = prefix.replace("f", "").replace("F", ""); + Ok(Value::String(prefix)) + } + } + + // Gets a version of the string where `f` and `F` have been stripped from the prefix. + pub struct SafeString; + + impl Function for SafeString { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let prefix = get_prefix(&source[node.byte_range()]); + let contents = get_string_contents(source[node.byte_range()].to_owned()); + let s = format!("{}{}{}", prefix.safe().full(), contents, prefix.quotes); + Ok(Value::String(s)) + } + } + + pub struct UnnamedChildIndex; + + impl Function for UnnamedChildIndex { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let parent = match node.parent() { + Some(parent) => parent, + None => { + return Err(ExecutionError::FunctionFailed( + "unnamed-child-index".into(), + format!("Cannot call child-index on the root node"), + )) + } + }; + let mut tree_cursor = parent.walk(); + let index = parent + .children(&mut tree_cursor) + .position(|child| child == node) + .ok_or_else(|| { + ExecutionError::FunctionFailed( + "unnamed-child-index".into(), + format!("Called child-index on a non-named child"), + ) + })?; + Ok(Value::Integer(index as u32)) + } + } + + pub struct ConcatenateStrings; + + impl Function for ConcatenateStrings { + fn call( + &self, + _graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let mut result = String::new(); + while let Ok(param) = parameters.param() { + let string = param.into_string()?; + result.push_str(string.as_str()); + } + Ok(Value::String(result)) + } + } + + pub struct InstanceOf; + + impl Function for InstanceOf { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + let class_name = parameters.param()?.into_string()?; + parameters.finish()?; + let node_type = node.kind(); + let class_name = class_name.as_str(); + let is_instance = node_type == class_name; + Ok(Value::Boolean(is_instance)) + } + } + + pub struct GetParent; + + impl Function for GetParent { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let parent = node.parent().ok_or_else(|| { + ExecutionError::FunctionFailed( + "get-parent".into(), + format!("Cannot call get-parent on the root node"), + ) + })?; + Ok(Value::SyntaxNode(graph.add_syntax_node(parent))) + } + } + + pub struct HasNamedChild; + + impl Function for HasNamedChild { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + let field_name = parameters.param()?.into_string()?; + parameters.finish()?; + let field_name = field_name.as_str(); + let has_named_child = node.child_by_field_name(field_name).is_some(); + Ok(Value::Boolean(has_named_child)) + } + } + + pub struct IsBooleanOperator; + + impl Function for IsBooleanOperator { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + let expected_op_type = parameters.param()?.into_string()?; + parameters.finish()?; + if let Some(op) = node.child_by_field_name("operator") { + let op_type = source[op.byte_range()].to_string(); + let is_boolean_op = expected_op_type == op_type; + Ok(Value::Boolean(is_boolean_op)) + } else { + Ok(Value::Boolean(false)) + } + } + } + + pub struct Modulo; + + impl Function for Modulo { + fn call( + &self, + _graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result { + let left = parameters.param()?.into_integer()?; + let right = parameters.param()?.into_integer()?; + parameters.finish()?; + Ok(Value::Integer(left % right)) + } + } +} + +fn main() -> Result<()> { + let matches = App::new("tsg-python") + .version(BUILD_VERSION) + .author("Taus Brock-Nannestad ") + .about("Extracts a Python AST from the parse tree given by tree-sitter-python") + .arg( + Arg::with_name("tsg") + .short("t") + .long("tsg") + .takes_value(true) + .required(false), + ) + .arg(Arg::with_name("source").index(1).required(true)) + .get_matches(); + + let tsg_path = if matches.is_present("tsg") { + Path::new(matches.value_of("tsg").unwrap()) + .display() + .to_string() + } else { + "bundled `python.tsg`".to_owned() + }; + let source_path = Path::new(matches.value_of("source").unwrap()); + let language = tree_sitter_python::language(); + let mut parser = Parser::new(); + parser.set_language(language)?; + // Statically include `python.tsg`: + let tsg = if matches.is_present("tsg") { + std::fs::read(&tsg_path).with_context(|| format!("Error reading TSG file {}", tsg_path))? + } else { + include_bytes!("../python.tsg").to_vec() + }; + let tsg = String::from_utf8(tsg)?; + let source = std::fs::read(source_path) + .with_context(|| format!("Error reading source file {}", source_path.display()))?; + let source = String::from_utf8(source)?; + let tree = parser + .parse(&source, None) + .ok_or_else(|| anyhow!("Could not parse {}", source_path.display()))?; + let file = File::from_str(language, &tsg) + .with_context(|| anyhow!("Error parsing TSG file {}", tsg_path))?; + let mut functions = Functions::stdlib(); + functions.add(Identifier::from("location"), extra_functions::Location); + functions.add( + Identifier::from("location-start"), + extra_functions::LocationStart, + ); + functions.add( + Identifier::from("location-end"), + extra_functions::LocationEnd, + ); + functions.add( + Identifier::from("string-prefix"), + extra_functions::StringPrefix, + ); + functions.add( + Identifier::from("string-contents"), + extra_functions::StringContents, + ); + + functions.add( + Identifier::from("string-quotes"), + extra_functions::StringQuotes, + ); + + functions.add( + Identifier::from("string-safe-prefix"), + extra_functions::StringSafePrefix, + ); + + functions.add(Identifier::from("safe-string"), extra_functions::SafeString); + + functions.add( + Identifier::from("unnamed-child-index"), + extra_functions::UnnamedChildIndex, + ); + functions.add(Identifier::from("ast-node"), extra_functions::AstNode); + + functions.add( + Identifier::from("concatenate-strings"), + extra_functions::ConcatenateStrings, + ); + + functions.add(Identifier::from("instance-of"), extra_functions::InstanceOf); + + functions.add(Identifier::from("get-parent"), extra_functions::GetParent); + + functions.add( + Identifier::from("has-named-child"), + extra_functions::HasNamedChild, + ); + functions.add( + Identifier::from("is-boolean-operator"), + extra_functions::IsBooleanOperator, + ); + + functions.add(Identifier::from("mod"), extra_functions::Modulo); + let globals = Variables::new(); + let mut config = ExecutionConfig::new(&mut functions, &globals).lazy(false); + let graph = file + .execute(&tree, &source, &mut config, &NoCancellation) + .with_context(|| format!("Could not execute TSG file {}", tsg_path))?; + print!("{}", graph.pretty_print()); + Ok(()) +} diff --git a/python/extractor/tsg-python/tree-sitter-python/.gitignore b/python/extractor/tsg-python/tree-sitter-python/.gitignore new file mode 100644 index 00000000000..c99713834f2 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/.gitignore @@ -0,0 +1,7 @@ +Cargo.lock +package-lock.json +node_modules +build +*.log +/examples/*/ +/target/ diff --git a/python/extractor/tsg-python/tree-sitter-python/.npmignore b/python/extractor/tsg-python/tree-sitter-python/.npmignore new file mode 100644 index 00000000000..8e142f748b2 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/.npmignore @@ -0,0 +1,6 @@ +corpus +examples +build +script +target +bindings/rust diff --git a/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel b/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel new file mode 100644 index 00000000000..98b636c0d79 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel @@ -0,0 +1,38 @@ +load("@rules_rust//cargo:defs.bzl", "cargo_build_script") +load("@rules_rust//rust:defs.bzl", "rust_library") +load("@tsg_python_crate_index//:defs.bzl", "aliases", "all_crate_deps") + +package(default_visibility = ["//visibility:public"]) + +# This will run the build script from the root of the workspace, and +# collect the outputs. +cargo_build_script( + name = "tsg-build-script", + srcs = ["bindings/rust/build.rs"], + data = glob([ + "src/**", + ]), + deps = all_crate_deps( + build = True, + ), +) + +rust_library( + name = "tree-sitter-python", + srcs = [ + "bindings/rust/lib.rs", + ], + aliases = aliases(), + compile_data = glob([ + "src/**", + "queries/**", + ]) + [ + "grammar.js", + ], + proc_macro_deps = all_crate_deps( + proc_macro = True, + ), + deps = [":tsg-build-script"] + all_crate_deps( + normal = True, + ), +) diff --git a/python/extractor/tsg-python/tree-sitter-python/Cargo.toml b/python/extractor/tsg-python/tree-sitter-python/Cargo.toml new file mode 100644 index 00000000000..4c863753b93 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "tree-sitter-python" +description = "Python grammar for the tree-sitter parsing library" +version = "0.19.0" +authors = [ + "Max Brunsfeld ", + "Douglas Creager ", +] +license = "MIT" +readme = "bindings/rust/README.md" +keywords = ["incremental", "parsing", "python"] +categories = ["parsing", "text-editors"] +repository = "https://github.com/tree-sitter/tree-sitter-python" +edition = "2018" + +build = "bindings/rust/build.rs" +include = [ + "bindings/rust/*", + "grammar.js", + "queries/*", + "src/*", +] + +[lib] +path = "bindings/rust/lib.rs" + +[dependencies] +tree-sitter = ">= 0.20, < 0.21" + +[build-dependencies] +cc = "1.0" diff --git a/python/extractor/tsg-python/tree-sitter-python/LICENSE b/python/extractor/tsg-python/tree-sitter-python/LICENSE new file mode 100644 index 00000000000..ff8ed93cb0d --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Max Brunsfeld + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/python/extractor/tsg-python/tree-sitter-python/README.md b/python/extractor/tsg-python/tree-sitter-python/README.md new file mode 100644 index 00000000000..a7cb44c77ef --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/README.md @@ -0,0 +1,13 @@ +tree-sitter-python +================== + +[![build](https://github.com/tree-sitter/tree-sitter-python/actions/workflows/ci.yml/badge.svg)](https://github.com/tree-sitter/tree-sitter-python/actions/workflows/ci.yml) + +Python grammar for [tree-sitter][]. + +[tree-sitter]: https://github.com/tree-sitter/tree-sitter + +#### References + +* [Python 2 Grammar](https://docs.python.org/2/reference/grammar.html) +* [Python 3 Grammar](https://docs.python.org/3/reference/grammar.html) diff --git a/python/extractor/tsg-python/tree-sitter-python/binding.gyp b/python/extractor/tsg-python/tree-sitter-python/binding.gyp new file mode 100644 index 00000000000..74256d45759 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/binding.gyp @@ -0,0 +1,19 @@ +{ + "targets": [ + { + "target_name": "tree_sitter_python_binding", + "include_dirs": [ + " +#include "nan.h" + +using namespace v8; + +extern "C" TSLanguage * tree_sitter_python(); + +namespace { + +NAN_METHOD(New) {} + +void Init(Local exports, Local module) { + Local tpl = Nan::New(New); + tpl->SetClassName(Nan::New("Language").ToLocalChecked()); + tpl->InstanceTemplate()->SetInternalFieldCount(1); + + Local constructor = Nan::GetFunction(tpl).ToLocalChecked(); + Local instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked(); + Nan::SetInternalFieldPointer(instance, 0, tree_sitter_python()); + + Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("python").ToLocalChecked()); + Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance); +} + +NODE_MODULE(tree_sitter_python_binding, Init) + +} // namespace diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/node/index.js b/python/extractor/tsg-python/tree-sitter-python/bindings/node/index.js new file mode 100644 index 00000000000..e0f77d8003a --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/bindings/node/index.js @@ -0,0 +1,19 @@ +try { + module.exports = require("../../build/Release/tree_sitter_python_binding"); +} catch (error1) { + if (error1.code !== 'MODULE_NOT_FOUND') { + throw error1; + } + try { + module.exports = require("../../build/Debug/tree_sitter_python_binding"); + } catch (error2) { + if (error2.code !== 'MODULE_NOT_FOUND') { + throw error2; + } + throw error1 + } +} + +try { + module.exports.nodeTypeInfo = require("../../src/node-types.json"); +} catch (_) {} diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/README.md b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/README.md new file mode 100644 index 00000000000..66976d4671f --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/README.md @@ -0,0 +1,36 @@ +# tree-sitter-python + +This crate provides a Python grammar for the [tree-sitter][] parsing library. +To use this crate, add it to the `[dependencies]` section of your `Cargo.toml` +file. (Note that you will probably also need to depend on the +[`tree-sitter`][tree-sitter crate] crate to use the parsed result in any useful +way.) + +``` toml +[dependencies] +tree-sitter = "0.17" +tree-sitter-python = "0.17" +``` + +Typically, you will use the [language][language func] function to add this +grammar to a tree-sitter [Parser][], and then use the parser to parse some code: + +``` rust +let code = r#" + def double(x): + return x * 2 +"#; +let mut parser = Parser::new(); +parser.set_language(tree_sitter_python::language()).expect("Error loading Python grammar"); +let parsed = parser.parse(code, None); +``` + +If you have any questions, please reach out to us in the [tree-sitter +discussions] page. + +[Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html +[language func]: https://docs.rs/tree-sitter-python/*/tree_sitter_python/fn.language.html +[Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html +[tree-sitter]: https://tree-sitter.github.io/ +[tree-sitter crate]: https://crates.io/crates/tree-sitter +[tree-sitter discussions]: https://github.com/tree-sitter/tree-sitter/discussions diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/build.rs b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/build.rs new file mode 100644 index 00000000000..4450166885e --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/build.rs @@ -0,0 +1,28 @@ +use std::path::Path; +extern crate cc; + +fn main() { + let src_dir = Path::new("src"); + + let mut c_config = cc::Build::new(); + c_config.include(&src_dir); + c_config + .flag_if_supported("-Wno-unused-parameter") + .flag_if_supported("-Wno-unused-but-set-variable") + .flag_if_supported("-Wno-trigraphs"); + let parser_path = src_dir.join("parser.c"); + c_config.file(&parser_path); + println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap()); + c_config.compile("parser"); + + let mut cpp_config = cc::Build::new(); + cpp_config.cpp(true); + cpp_config.include(&src_dir); + cpp_config + .flag_if_supported("-Wno-unused-parameter") + .flag_if_supported("-Wno-unused-but-set-variable"); + let scanner_path = src_dir.join("scanner.cc"); + cpp_config.file(&scanner_path); + println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); + cpp_config.compile("scanner"); +} diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/lib.rs b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/lib.rs new file mode 100644 index 00000000000..7a58509e89c --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/lib.rs @@ -0,0 +1,68 @@ +// -*- coding: utf-8 -*- +// ------------------------------------------------------------------------------------------------ +// Copyright © 2020, tree-sitter-python authors. +// See the LICENSE file in this repo for license details. +// ------------------------------------------------------------------------------------------------ + +//! This crate provides a Python grammar for the [tree-sitter][] parsing library. +//! +//! Typically, you will use the [language][language func] function to add this grammar to a +//! tree-sitter [Parser][], and then use the parser to parse some code: +//! +//! ``` +//! use tree_sitter::Parser; +//! +//! let code = r#" +//! def double(x): +//! return x * 2 +//! "#; +//! let mut parser = Parser::new(); +//! parser.set_language(tree_sitter_python::language()).expect("Error loading Python grammar"); +//! let parsed = parser.parse(code, None); +//! # let parsed = parsed.unwrap(); +//! # let root = parsed.root_node(); +//! # assert!(!root.has_error()); +//! ``` +//! +//! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html +//! [language func]: fn.language.html +//! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html +//! [tree-sitter]: https://tree-sitter.github.io/ + +use tree_sitter::Language; + +extern "C" { + fn tree_sitter_python() -> Language; +} + +/// Returns the tree-sitter [Language][] for this grammar. +/// +/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html +pub fn language() -> Language { + unsafe { tree_sitter_python() } +} + +/// The source of the Python tree-sitter grammar description. +pub const GRAMMAR: &'static str = include_str!("../../grammar.js"); + +/// The syntax highlighting query for this language. +pub const HIGHLIGHT_QUERY: &'static str = include_str!("../../queries/highlights.scm"); + +/// The content of the [`node-types.json`][] file for this grammar. +/// +/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types +pub const NODE_TYPES: &'static str = include_str!("../../src/node-types.json"); + +/// The symbol tagging query for this language. +pub const TAGGING_QUERY: &'static str = include_str!("../../queries/tags.scm"); + +#[cfg(test)] +mod tests { + #[test] + fn can_load_grammar() { + let mut parser = tree_sitter::Parser::new(); + parser + .set_language(super::language()) + .expect("Error loading Python grammar"); + } +} diff --git a/python/extractor/tsg-python/tree-sitter-python/grammar.js b/python/extractor/tsg-python/tree-sitter-python/grammar.js new file mode 100644 index 00000000000..3fc832cb4e5 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/grammar.js @@ -0,0 +1,1230 @@ +const PREC = { + // this resolves a conflict between the usage of ':' in a lambda vs in a + // typed parameter. In the case of a lambda, we don't allow typed parameters. + lambda: -2, + typed_parameter: -1, + conditional: -1, + + parenthesized_expression: 1, + parenthesized_list_splat: 1, + not: 12, + compare: 2, + or: 10, + and: 11, + bitwise_or: 13, + bitwise_and: 14, + xor: 15, + shift: 16, + plus: 17, + times: 18, + unary: 19, + power: 20, + call: 21, +} + +module.exports = grammar({ + name: 'python', + + extras: $ => [ + $.comment, + /[\s\f\uFEFF\u2060\u200B]|\\\r?\n/ + ], + + conflicts: $ => [ + [$.primary_expression, $.pattern], + [$.primary_expression, $.list_splat_pattern], + [$.tuple, $.tuple_pattern], + [$.list, $.list_pattern], + [$.with_item, $._collection_elements], + ], + + supertypes: $ => [ + $._simple_statement, + $._compound_statement, + $.expression, + $.primary_expression, + $.pattern, + $.parameter, + ], + + externals: $ => [ + $._newline, + $._indent, + $._dedent, + $._string_start, + $._string_content, + $._string_end, + ], + + inline: $ => [ + $._simple_statement, + $._compound_statement, + $._suite, + $._expressions, + $._left_hand_side, + $.keyword_identifier, + ], + + word: $ => $.identifier, + + rules: { + module: $ => repeat($._statement), + + _statement: $ => choice( + $._simple_statements, + $._compound_statement + ), + + // Simple statements + + _simple_statements: $ => seq( + $._simple_statement, + optional(repeat(seq( + $._semicolon, + $._simple_statement + ))), + optional($._semicolon), + $._newline + ), + + _simple_statement: $ => choice( + $.future_import_statement, + $.import_statement, + $.import_from_statement, + $.print_statement, + $.assert_statement, + $.expression_statement, + $.return_statement, + $.delete_statement, + $.raise_statement, + $.pass_statement, + $.break_statement, + $.continue_statement, + $.global_statement, + $.nonlocal_statement, + $.exec_statement, + $.type_alias_statement, + ), + + import_statement: $ => seq( + 'import', + $._import_list + ), + + import_prefix: $ => repeat1('.'), + + relative_import: $ => seq( + $.import_prefix, + optional(field('name', $.dotted_name)) + ), + + future_import_statement: $ => seq( + 'from', + '__future__', + 'import', + choice( + $._import_list, + seq('(', $._import_list, ')'), + ) + ), + + import_from_statement: $ => seq( + 'from', + field('module_name', choice( + $.relative_import, + $.dotted_name + )), + 'import', + choice( + $.wildcard_import, + $._import_list, + seq('(', $._import_list, ')') + ) + ), + + _import_list: $ => seq( + commaSep1(field('name', choice( + $.dotted_name, + $.aliased_import + ))), + optional(',') + ), + + aliased_import: $ => seq( + field('name', $.dotted_name), + 'as', + field('alias', $.identifier) + ), + + wildcard_import: $ => '*', + + print_statement: $ => choice( + prec(1, seq( + 'print', + $.chevron, + repeat(seq(',', field('argument', $.expression))), + optional(',')) + ), + prec(-10, seq( + 'print', + commaSep1(field('argument', $.expression)), + optional(',') + )) + ), + + chevron: $ => seq( + '>>', + $.expression + ), + + assert_statement: $ => seq( + 'assert', + commaSep1($.expression) + ), + + expression_statement: $ => choice( + $.expression, + $.expression_list, + $.assignment, + $.augmented_assignment, + $.yield + ), + + named_expression: $ => seq( + field('name', choice($.identifier, $.keyword_identifier)), + ':=', + field('value', $.expression) + ), + + return_statement: $ => seq( + 'return', + optional($._expressions) + ), + + delete_statement: $ => seq( + 'del', + field('target', $._expressions) + ), + + _expressions: $ => choice( + $.expression, + $.expression_list + ), + + raise_statement: $ => seq( + 'raise', + optional($._expressions), + optional(seq('from', field('cause', $.expression))) + ), + + pass_statement: $ => prec.left('pass'), + break_statement: $ => prec.left('break'), + continue_statement: $ => prec.left('continue'), + + // Compound statements + + _compound_statement: $ => choice( + $.if_statement, + $.for_statement, + $.while_statement, + $.try_statement, + $.with_statement, + $.match_statement, + $.function_definition, + $.class_definition, + $.decorated_definition + ), + + if_statement: $ => seq( + 'if', + field('condition', $.expression), + ':', + field('consequence', $._suite), + repeat(field('alternative', $.elif_clause)), + optional(field('alternative', $.else_clause)) + ), + + elif_clause: $ => seq( + 'elif', + field('condition', $.expression), + ':', + field('consequence', $._suite) + ), + + else_clause: $ => seq( + 'else', + ':', + field('body', $._suite) + ), + + for_statement: $ => seq( + optional('async'), + 'for', + field('left', $._left_hand_side), + 'in', + field('right', $._expressions), + ':', + field('body', $._suite), + field('alternative', optional($.else_clause)) + ), + + while_statement: $ => seq( + 'while', + field('condition', $.expression), + ':', + field('body', $._suite), + optional(field('alternative', $.else_clause)) + ), + + try_statement: $ => seq( + 'try', + ':', + field('body', $._suite), + choice( + seq( + repeat1($.except_clause), + optional($.else_clause), + optional($.finally_clause) + ), + seq( + repeat1($.except_group_clause), + optional($.else_clause), + optional($.finally_clause) + ), + $.finally_clause + ) + ), + + except_clause: $ => seq( + 'except', + optional(seq( + field('type', $.expression), + optional(seq( + choice('as', ','), + field('alias', $.expression) + )) + )), + ':', + field('body', $._suite), + ), + + except_group_clause: $ => seq( + 'except*', + seq( + field('type', $.expression), + optional(seq( + 'as', + field('alias', $.expression) + )) + ), + ':', + field('body', $._suite), + ), + + finally_clause: $ => seq( + 'finally', + ':', + field('body', $._suite), + ), + + with_statement: $ => seq( + optional('async'), + 'with', + $.with_clause, + ':', + field('body', $._suite) + ), + + with_clause: $ => choice( + commaSep1($.with_item), + seq('(', commaSep1($.with_item), optional(","), ')') + ), + + with_item: $ => prec.dynamic(-1, seq( + field('value', $.expression), + optional(seq( + 'as', + field('alias', $.pattern) + )) + )), + + match_statement: $ => seq( + 'match', + field('subject', + choice( + $.expression, + alias($.expression_list, $.tuple), + ) + ), + ':', + field('cases', $.cases) + ), + + cases: $ => repeat1($.case_block), + + case_block: $ => seq( + 'case', + field('pattern', $._match_patterns), + optional(field('guard', $.guard)), + ':', + field('body', $._suite) + ), + + _match_patterns: $ => choice( + $._match_pattern, + alias($.open_sequence_match_pattern, $.match_sequence_pattern) + ), + + open_sequence_match_pattern: $ => open_sequence($._match_maybe_star_pattern), + + _match_pattern: $ => choice( + $.match_as_pattern, + $._match_or_pattern + ), + + match_as_pattern: $ => seq( + field('pattern', $._match_or_pattern), + 'as', + field('alias', $.identifier) + ), + + _match_or_pattern: $ => choice( + $.match_or_pattern, + $._closed_pattern + ), + + match_or_pattern: $ => seq( + $._closed_pattern, + '|', + sep1($._closed_pattern, '|') + ), + + _closed_pattern: $ => choice( + $.match_literal_pattern, + $.match_capture_pattern, + $.match_wildcard_pattern, + $.match_value_pattern, + $.match_group_pattern, + $.match_sequence_pattern, + $.match_mapping_pattern, + $.match_class_pattern + ), + + match_literal_pattern: $ => choice( + seq( + optional(field('prefix_operator', '-')), + field('real', choice($.integer, $.float)), + optional(seq( + field('operator', choice('+', '-')), + field('imaginary', choice($.integer, $.float)) + )) + ), + $.string, + $.concatenated_string, + $.none, + $.true, + $.false + ), + + + + match_capture_pattern: $ => $.identifier, + + match_wildcard_pattern: $ => '_', + + match_value_pattern: $ => seq( + $.identifier, + repeat1(seq('.', $.identifier)) + ), + + match_group_pattern: $ => seq( + '(', + field('content', $._match_pattern), + ')' + ), + + match_sequence_pattern: $ => choice( + seq('[', optional(seq(commaSep1($._match_maybe_star_pattern), optional(','))), ']'), + seq('(', optional(open_sequence($._match_maybe_star_pattern)), ')') + ), + + _match_maybe_star_pattern: $ => choice( + $._match_pattern, + $.match_star_pattern + ), + + match_star_pattern: $ => seq( + '*', + field('target', choice($.match_wildcard_pattern, $.match_capture_pattern)) + ), + + match_mapping_pattern: $ => choice( + seq('{', optional(seq($.match_double_star_pattern, optional(','))), '}'), + seq( + '{', + commaSep1($.match_key_value_pattern), + optional(seq(',', $.match_double_star_pattern)), + optional(','), + '}' + ) + ), + + match_double_star_pattern: $ => seq( + '**', + field('target', $.match_capture_pattern) + ), + + match_key_value_pattern: $ => seq( + field('key', choice($.match_literal_pattern, $.match_value_pattern)), + ':', + field('value', $._match_pattern) + ), + + match_class_pattern: $ => seq( + field('class', $.pattern_class_name), + choice( + seq('(', ')'), + seq('(', seq(commaSep1($.match_positional_pattern), optional(',')), ')'), + seq('(', seq(commaSep1($.match_keyword_pattern), optional(',')), ')'), + seq('(', commaSep1($.match_positional_pattern), ',', commaSep1($.match_keyword_pattern), optional(','), ')') + )), + + pattern_class_name: $ => sep1($.identifier, '.'), + + match_positional_pattern: $ => $._match_pattern, + + match_keyword_pattern: $ => seq( + field('attribute', $.identifier), + '=', + field('value', $._match_pattern) + ), + + guard: $ => seq( + 'if', + field('test', $.expression) + ), + + function_definition: $ => seq( + optional('async'), + 'def', + field('name', $.identifier), + optional(field('type_parameters', $.type_parameters)), + field('parameters', $.parameters), + optional( + seq( + '->', + field('return_type', $.type) + ) + ), + ':', + field('body', $._suite) + ), + + parameters: $ => seq( + '(', + optional($._parameters), + ')' + ), + + lambda_parameters: $ => $._parameters, + + list_splat: $ => seq( + '*', + $.expression, + ), + + dictionary_splat: $ => seq( + '**', + field('value', $.expression), + ), + + global_statement: $ => seq( + 'global', + commaSep1($.identifier) + ), + + nonlocal_statement: $ => seq( + 'nonlocal', + commaSep1($.identifier) + ), + + exec_statement: $ => seq( + 'exec', + field('code', $.string), + optional( + seq( + 'in', + commaSep1($.expression) + ) + ) + ), + + type_alias_statement: $ => seq( + 'type', + field('name', $.identifier), + optional(field('type_parameters', $.type_parameters)), + '=', + field('value', $.expression) + ), + + class_definition: $ => seq( + 'class', + field('name', $.identifier), + optional(field('type_parameters', $.type_parameters)), + field('superclasses', optional($.argument_list)), + ':', + field('body', $._suite) + ), + + type_parameters: $ => seq( + '[', + commaSep1(field('type_parameter', $._type_parameter)), + ']' + ), + + _type_bound: $ => seq( + ':', + field('bound', $.expression) + ), + + typevar_parameter: $ => seq( + field('name', $.identifier), + optional($._type_bound) + ), + + typevartuple_parameter: $ => seq( + '*', + field('name', $.identifier), + ), + + paramspec_parameter: $ => seq( + '**', + field('name', $.identifier), + ), + + _type_parameter: $ => choice( + $.typevar_parameter, + $.typevartuple_parameter, + $.paramspec_parameter, + ), + + parenthesized_list_splat: $ => prec(PREC.parenthesized_list_splat, seq( + '(', + choice( + alias($.parenthesized_list_splat, $.parenthesized_expression), + $.list_splat, + ), + ')', + )), + + argument_list: $ => seq( + '(', + optional(commaSep1( + field('element', choice( + $.expression, + $.list_splat, + $.dictionary_splat, + alias($.parenthesized_list_splat, $.parenthesized_expression), + $.keyword_argument + )) + )), + optional(','), + ')' + ), + + decorated_definition: $ => seq( + repeat1($.decorator), + field('definition', choice( + $.class_definition, + $.function_definition + )) + ), + + decorator: $ => seq( + '@', + $.expression, + $._newline + ), + + _suite: $ => choice( + alias($._simple_statements, $.block), + seq($._indent, $.block), + alias($._newline, $.block) + ), + + block: $ => seq( + repeat($._statement), + $._dedent + ), + + expression_list: $ => open_sequence(field('element', choice($.expression, $.list_splat, $.dictionary_splat))), + + dotted_name: $ => sep1($.identifier, '.'), + + // Patterns + + _parameters: $ => seq( + commaSep1($.parameter), + optional(',') + ), + + _patterns: $ => seq( + commaSep1(field('element', $.pattern)), + optional(field('trailing_comma', ',')) + ), + + parameter: $ => choice( + $.identifier, + $.typed_parameter, + $.default_parameter, + $.typed_default_parameter, + $.list_splat_pattern, + $.tuple_pattern, + $.keyword_separator, + $.positional_separator, + $.dictionary_splat_pattern + ), + + pattern: $ => choice( + $.identifier, + $.keyword_identifier, + $.subscript, + $.attribute, + $.list_splat_pattern, + $.tuple_pattern, + $.list_pattern + ), + + tuple_pattern: $ => seq( + '(', + optional($._patterns), + ')' + ), + + list_pattern: $ => seq( + '[', + optional($._patterns), + ']' + ), + + default_parameter: $ => seq( + field('name', $.identifier), + '=', + field('value', $.expression) + ), + + typed_default_parameter: $ => prec(PREC.typed_parameter, seq( + field('name', $.identifier), + ':', + field('type', $.type), + '=', + field('value', $.expression) + )), + + list_splat_pattern: $ => seq( + '*', + field('vararg', choice($.identifier, $.keyword_identifier, $.subscript, $.attribute)) + ), + + dictionary_splat_pattern: $ => seq( + '**', + field('kwarg', choice($.identifier, $.keyword_identifier, $.subscript, $.attribute)) + ), + + // Expressions + + _expression_within_for_in_clause: $ => choice( + $.expression, + alias($.lambda_within_for_in_clause, $.lambda) + ), + + expression: $ => choice( + $.comparison_operator, + $.not_operator, + $.boolean_operator, + $.await, + $.lambda, + $.primary_expression, + $.conditional_expression, + $.named_expression + ), + + primary_expression: $ => choice( + $.binary_operator, + $.identifier, + $.keyword_identifier, + $.string, + $.concatenated_string, + $.integer, + $.float, + $.true, + $.false, + $.none, + $.unary_operator, + $.attribute, + $.subscript, + $.call, + $.list, + $.list_comprehension, + $.dictionary, + $.dictionary_comprehension, + $.set, + $.set_comprehension, + $.tuple, + $.parenthesized_expression, + $.generator_expression, + $.ellipsis + ), + + not_operator: $ => prec(PREC.not, seq( + 'not', + field('argument', $.expression) + )), + + boolean_operator: $ => choice( + prec.right(PREC.and, seq( + field('left', $.expression), + field('operator', 'and'), + field('right', $.expression) + )), + prec.right(PREC.or, seq( + field('left', $.expression), + field('operator', 'or'), + field('right', $.expression) + )) + ), + + binary_operator: $ => { + const table = [ + [prec.left, '+', PREC.plus], + [prec.left, '-', PREC.plus], + [prec.left, '*', PREC.times], + [prec.left, '@', PREC.times], + [prec.left, '/', PREC.times], + [prec.left, '%', PREC.times], + [prec.left, '//', PREC.times], + [prec.right, '**', PREC.power], + [prec.left, '|', PREC.bitwise_or], + [prec.left, '&', PREC.bitwise_and], + [prec.left, '^', PREC.xor], + [prec.left, '<<', PREC.shift], + [prec.left, '>>', PREC.shift], + ]; + + return choice(...table.map(([fn, operator, precedence]) => fn(precedence, seq( + field('left', $.primary_expression), + field('operator', operator), + field('right', $.primary_expression) + )))); + }, + + unary_operator: $ => prec(PREC.unary, seq( + field('operator', choice('+', '-', '~')), + field('argument', $.primary_expression) + )), + + comparison_operator: $ => prec.left(PREC.compare, seq( + $.primary_expression, + repeat1(seq( + field('operators', + choice( + '<', + '<=', + '==', + '!=', + '>=', + '>', + '<>', + 'in', + alias(seq('not', 'in'), 'not in'), + 'is', + alias(seq('is', 'not'), 'is not') + )), + $.primary_expression + )) + )), + + lambda: $ => prec(PREC.lambda, seq( + 'lambda', + field('parameters', optional($.lambda_parameters)), + ':', + field('body', $.expression) + )), + + lambda_within_for_in_clause: $ => seq( + 'lambda', + field('parameters', optional($.lambda_parameters)), + ':', + field('body', $._expression_within_for_in_clause) + ), + + assignment: $ => seq( + field('left', $._left_hand_side), + choice( + seq('=', field('right', $._right_hand_side)), + seq(':', field('type', $.type)), + seq(':', field('type', $.type), '=', field('right', $._right_hand_side)) + ) + ), + + augmented_assignment: $ => seq( + field('left', $._left_hand_side), + field('operator', choice( + '+=', '-=', '*=', '/=', '@=', '//=', '%=', '**=', + '>>=', '<<=', '&=', '^=', '|=' + )), + field('right', $._right_hand_side) + ), + + _left_hand_side: $ => choice( + $.pattern, + $.pattern_list + ), + + pattern_list: $ => seq( + field('element', $.pattern), + choice( + ',', + seq( + repeat1(seq( + ',', + field('element', $.pattern) + )), + optional(',') + ) + ) + ), + + _right_hand_side: $ => choice( + $.expression, + $.expression_list, + $.assignment, + $.augmented_assignment, + $.yield + ), + + yield: $ => prec.right(seq( + 'yield', + choice( + seq( + 'from', + $.expression + ), + optional($._expressions) + ) + )), + + attribute: $ => prec(PREC.call, seq( + field('object', $.primary_expression), + '.', + field('attribute', $.identifier) + )), + + subscript: $ => prec(PREC.call, seq( + field('value', $.primary_expression), + '[', + commaSep1(field('subscript', choice($.expression, $.slice))), + optional(','), + ']' + )), + + slice: $ => seq( + optional(field('start', $.expression)), + ':', + optional(field('stop', $.expression)), + optional(seq(':', optional(field('step', $.expression)))) + ), + + ellipsis: $ => '...', + + call: $ => prec(PREC.call, seq( + field('function', $.primary_expression), + field('arguments', choice( + $.generator_expression, + $.argument_list + )) + )), + + typed_parameter: $ => prec(PREC.typed_parameter, seq( + choice( + $.identifier, + $.list_splat_pattern, + $.dictionary_splat_pattern + ), + ':', + field('type', $.type) + )), + + type: $ => $.expression, + + keyword_argument: $ => seq( + field('name', choice($.identifier, $.keyword_identifier)), + '=', + field('value', $.expression) + ), + + // Literals + + list: $ => seq( + '[', + optional($._collection_elements), + ']' + ), + + set: $ => seq( + '{', + $._collection_elements, + '}' + ), + + tuple: $ => seq( + '(', + optional($._collection_elements), + ')' + ), + + dictionary: $ => seq( + '{', + optional(commaSep1(field('element', choice($.pair, $.dictionary_splat)))), + optional(','), + '}' + ), + + pair: $ => seq( + field('key', $.expression), + ':', + field('value', $.expression) + ), + + list_comprehension: $ => seq( + '[', + field('body', $.expression), + $._comprehension_clauses, + ']' + ), + + dictionary_comprehension: $ => seq( + '{', + field('body', $.pair), + $._comprehension_clauses, + '}' + ), + + set_comprehension: $ => seq( + '{', + field('body', $.expression), + $._comprehension_clauses, + '}' + ), + + generator_expression: $ => seq( + '(', + field('body', $.expression), + $._comprehension_clauses, + ')' + ), + + _comprehension_clauses: $ => seq( + $.for_in_clause, + repeat(choice( + $.for_in_clause, + $.if_clause + )) + ), + + parenthesized_expression: $ => prec(PREC.parenthesized_expression, seq( + '(', + field('inner', choice($.expression, $.yield)), + ')' + )), + + _collection_elements: $ => seq( + commaSep1(field('element', choice( + $.expression, $.yield, $.list_splat, $.parenthesized_list_splat + ))), + optional(field('trailing_comma', ',')) + ), + + for_in_clause: $ => prec.left(seq( + optional('async'), + 'for', + field('left', $._left_hand_side), + 'in', + field('right', commaSep1($._expression_within_for_in_clause)), + optional(',') + )), + + if_clause: $ => seq( + 'if', + $.expression + ), + + conditional_expression: $ => prec.right(PREC.conditional, seq( + $.expression, + 'if', + $.expression, + 'else', + $.expression + )), + + concatenated_string: $ => seq( + $.string, + repeat1($.string) + ), + + + string: $ => seq( + field('prefix', alias($._string_start, '"')), + repeat(choice( + field('interpolation', $.interpolation), + field('string_content', $.string_content) + )), + field('suffix', alias($._string_end, '"')) + ), + + string_content: $ => prec.right(0, repeat1( + choice( + $._escape_interpolation, + $.escape_sequence, + $._not_escape_sequence, + $._string_content + ))), + + interpolation: $ => seq( + token.immediate('{'), + field('expression', $._f_expression), + optional('='), + optional($.type_conversion), + optional($.format_specifier), + '}' + ), + + _f_expression: $ => choice( + $.expression, + $.expression_list, + $.yield, + ), + + _escape_interpolation: $ => token.immediate(choice('{{', '}}')), + + escape_sequence: $ => token.immediate(prec(1, seq( + '\\', + choice( + /u[a-fA-F\d]{4}/, + /U[a-fA-F\d]{8}/, + /x[a-fA-F\d]{2}/, + /\d{3}/, + /\r?\n/, + /['"abfrntv\\]/, + /N\{[^}]+\}/, + ) + ))), + + _not_escape_sequence: $ => token.immediate('\\'), + + format_specifier: $ => seq( + ':', + repeat(choice( + token(prec(1, /[^{}\n]+/)), + alias($.interpolation, $.format_expression) + )) + ), + + format_expression: $ => seq('{', $.expression, '}'), + + type_conversion: $ => /![a-z]/, + + integer: $ => token(choice( + seq( + choice('0x', '0X'), + repeat1(/_?[A-Fa-f0-9]+/), + optional(/[Ll]/) + ), + seq( + choice('0o', '0O'), + repeat1(/_?[0-7]+/), + optional(/[Ll]/) + ), + seq( + choice('0b', '0B'), + repeat1(/_?[0-1]+/), + optional(/[Ll]/) + ), + seq( + repeat1(/[0-9]+_?/), + choice( + optional(/[Ll]/), // long numbers + optional(/[jJ]/) // complex numbers + ) + ) + )), + + float: $ => { + const digits = repeat1(/[0-9]+_?/); + const exponent = seq(/[eE][\+-]?/, digits) + + return token(seq( + choice( + seq(digits, '.', optional(digits), optional(exponent)), + seq(optional(digits), '.', digits, optional(exponent)), + seq(digits, exponent) + ), + optional(choice(/[Ll]/, /[jJ]/)) + )) + }, + + identifier: $ => /[_\p{XID_Start}][_\p{XID_Continue}]*/, + + keyword_identifier: $ => prec(-3, alias( + choice( + 'print', + 'exec', + 'async', + 'await', + 'match', + 'type', + ), + $.identifier + )), + + true: $ => 'True', + false: $ => 'False', + none: $ => 'None', + + await: $ => prec(PREC.unary, seq( + 'await', + $.expression + )), + + comment: $ => token(seq('#', /.*/)), + + positional_separator: $ => '/', + keyword_separator: $ => '*', + + _semicolon: $ => ';' + } +}) + +function commaSep1(rule) { + return sep1(rule, ',') +} + +function sep1(rule, separator) { + return seq(rule, repeat(seq(separator, rule))) +} + +function open_sequence(rule, repeat_rule = rule) { + return prec.right(seq( + rule, + choice( + ',', + seq( + repeat1(seq( + ',', + repeat_rule + )), + optional(',') + ), + ) + )) +} diff --git a/python/extractor/tsg-python/tree-sitter-python/log.html b/python/extractor/tsg-python/tree-sitter-python/log.html new file mode 100644 index 00000000000..bfe46c45e3e --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/log.html @@ -0,0 +1,1687 @@ + + + + + + + + + + + +%3 + +new_parse + + + + + + + + +%5 + +process version:0, version_count:1, state:1, row:0, col:0 + + + + + + + + +%7 + +lex_external state:2, row:0, column:0 + + + + + + + + +%9 + +lex_internal state:62, row:0, column:0 + + + + + + + + +%11 + +lexed_lookahead sym:match, size:5 + + + + + + + + +%13 + +shift state:71 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fac0 + + +71 + + + + + +node_head_0->node_0x5654d845fac0 + + +0 + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +%19 + +process version:0, version_count:1, state:71, row:0, col:5 + + + + + + + + +%21 + +lex_external state:4, row:0, column:5 + + + + + + + + +%23 + +lex_internal state:62, row:0, column:5 + + + + + + + + +%25 + +lexed_lookahead sym:(, size:1 + + + + + + + + +%27 + +shift state:188 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fbb0 + + +188 + + + + + +node_head_0->node_0x5654d845fbb0 + + +0 + + + + + +node_0x5654d845fac0 + + +71 + + + + + +node_0x5654d845fbb0->node_0x5654d845fac0 + + +'(' + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +%35 + +process version:0, version_count:1, state:188, row:0, col:6 + + + + + + + + +%37 + +lex_external state:2, row:0, column:6 + + + + + + + + +%39 + +lex_internal state:62, row:0, column:6 + + + + + + + + +%41 + +lexed_lookahead sym:), size:1 + + + + + + + + +%43 + +shift state:671 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fca0 + + +671 + + + + + +node_head_0->node_0x5654d845fca0 + + +0 + + + + + +node_0x5654d845fbb0 + + +188 + + + + + +node_0x5654d845fca0->node_0x5654d845fbb0 + + +')' + + + + + +node_0x5654d845fac0 + + +71 + + + + + +node_0x5654d845fbb0->node_0x5654d845fac0 + + +'(' + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +%53 + +process version:0, version_count:1, state:671, row:0, col:7 + + + + + + + + +%55 + +lex_internal state:15, row:0, column:7 + + + + + + + + +%57 + +lex_external state:1, row:0, column:7 + + + + + + + + +%59 + +lexed_lookahead sym:_newline, size:0 + + + + + + + + +%61 + +detect_error + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fca0 + + +671 + + + + + +node_head_0->node_0x5654d845fca0 + + +0 + + + + + +node_0x5654d845fbb0 + + +188 + + + + + +node_0x5654d845fca0->node_0x5654d845fbb0 + + +')' + + + + + +node_0x5654d845fac0 + + +71 + + + + + +node_0x5654d845fbb0->node_0x5654d845fac0 + + +'(' + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +%71 + +resume version:0 + + + + + + + + +%73 + +recover_to_previous state:71, depth:2 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fca0 + + +? + + + + + +node_head_0->node_0x5654d845fca0 + + +0 + + + + + +node_0x5654d845fbb0 + + +630 + + + + + +node_0x5654d845fca0->node_0x5654d845fbb0 + + + + +node_0x5654d8474d40 + + +1080 + + + + + +node_0x5654d845fca0->node_0x5654d8474d40 + + + + +node_head_1 + + + +node_0x5654d8474e30 + + + + + + + +node_head_1->node_0x5654d8474e30 + + +1 + + + + + +node_0x5654d845fac0 + + +71 + + + + + +node_0x5654d8474e30->node_0x5654d845fac0 + + +ERROR + + + + + +node_0x5654d845fbb0->node_0x5654d845fac0 + + +primary_expression + + + + + +node_0x5654d8474d40->node_0x5654d845fac0 + + +expression + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +stack + + + +node_head_1 + + + +node_0x5654d8474e30 + + + + + + + +node_head_1->node_0x5654d8474e30 + + +1 + + + + + +node_0x5654d845fac0 + + +71 + + + + + +node_0x5654d8474e30->node_0x5654d845fac0 + + +ERROR + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +%97 + +process version:1, version_count:2, state:71, row:0, col:7 + + + + + + + + +%99 + +lex_external state:4, row:0, column:7 + + + + + + + + +%101 + +lexed_lookahead sym:_newline, size:0 + + + + + + + + +%103 + +reduce sym:primary_expression, child_count:1 + + + + + + + + +stack + + + +node_head_1 + + + +node_0x5654d84750d0 + + + + + + + +node_head_1->node_0x5654d84750d0 + + +1 + + + + + +node_0x5654d8474fe0 + + +684 + + + + + +node_0x5654d84750d0->node_0x5654d8474fe0 + + +ERROR + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d8474fe0->node_0x5654d845e6b0 + + +primary_expression + + + + + + + + + + + +%111 + +reduce sym:expression, child_count:1 + + + + + + + + +stack + + + +node_head_1 + + + +node_0x5654d8475220 + + + + + + + +node_head_1->node_0x5654d8475220 + + +1 + + + + + +node_0x5654d8474e30 + + +1019 + + + + + +node_0x5654d8475220->node_0x5654d8474e30 + + +ERROR + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d8474e30->node_0x5654d845e6b0 + + +expression + + + + + + + + + + + +%119 + +reduce sym:expression_statement, child_count:1 + + + + + + + + +stack + + + +node_head_1 + + + +node_0x5654d84750d0 + + + + + + + +node_head_1->node_0x5654d84750d0 + + +1 + + + + + +node_0x5654d8474fe0 + + +1209 + + + + + +node_0x5654d84750d0->node_0x5654d8474fe0 + + +ERROR + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d8474fe0->node_0x5654d845e6b0 + + +expression_statement + + + + + + + + + + + +%127 + +shift state:313 + + + + + + + + +stack + + + +node_head_1 + + + +node_0x5654d8474e30 + + +313 + + + + + +node_head_1->node_0x5654d8474e30 + + +1 + + + + + +node_0x5654d84750d0 + + + + + + + +node_0x5654d8474e30->node_0x5654d84750d0 + + +_newline + + + + + +node_0x5654d8474fe0 + + +1209 + + + + + +node_0x5654d84750d0->node_0x5654d8474fe0 + + +ERROR + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d8474fe0->node_0x5654d845e6b0 + + +expression_statement + + + + + + + + + + + +%137 + +process version:0, version_count:1, state:313, row:0, col:7 + + + + + + + + +%139 + +lex_external state:2, row:0, column:7 + + + + + + + + +%141 + +lex_internal state:62, row:0, column:7 + + + + + + + + +%143 + +lexed_lookahead sym:end, size:1 + + + + + + + + +%145 + +reduce sym:_simple_statements, child_count:2 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fac0 + + +64 + + + + + +node_head_0->node_0x5654d845fac0 + + +0 + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +_simple_statements + + + + + + + + + + + +%151 + +reduce sym:module, child_count:1 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d8474fe0 + + +1502 + + + + + +node_head_0->node_0x5654d8474fe0 + + +0 + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d8474fe0->node_0x5654d845e6b0 + + +module + + + + + + + + + + + +%157 + +accept + + + + + + + + +stack + + + + + + + + + +%159 + +done + + + + + + + + +tree + + + +tree_0x7ffd5edb0858 + + +module + + + + + +tree_0x5654d8475370 + + +_simple_statements + + + + + +tree_0x7ffd5edb0858->tree_0x5654d8475370 + + + + + + + +tree_0x5654d8475378 + +end + + + + + +tree_0x7ffd5edb0858->tree_0x5654d8475378 + + + + + + + +tree_0x5654d845c980 + + +expression_statement + + + + + +tree_0x5654d8475370->tree_0x5654d845c980 + + + + + + + +tree_0x5654d845c988 + + +ERROR + + + + + +tree_0x5654d8475370->tree_0x5654d845c988 + + + + + + + +tree_0x5654d845c990 + +_newline + + + + + +tree_0x5654d8475370->tree_0x5654d845c990 + + + + + + + +tree_0x5654d8475310 + + +expression + + + + + +tree_0x5654d845c980->tree_0x5654d8475310 + + + + + + + +tree_0x5654d84751c0 + + +primary_expression + + + + + +tree_0x5654d8475310->tree_0x5654d84751c0 + + + + + + + +tree_0x5654d8474f80 + +identifier + + + + + +tree_0x5654d84751c0->tree_0x5654d8474f80 + + + + + + + +tree_0x5654d845d9d0 + + +primary_expression + + + + + +tree_0x5654d845c988->tree_0x5654d845d9d0 + + + + + + + +tree_0x5654d845df00 + + +tuple + + + + + +tree_0x5654d845d9d0->tree_0x5654d845df00 + + + + + + + +tree_0x5654d8457fb0 + +( + + + + + +tree_0x5654d845df00->tree_0x5654d8457fb0 + + + + + + + +tree_0x5654d8457fb8 + +) + + + + + +tree_0x5654d845df00->tree_0x5654d8457fb8 + + + + + + + diff --git a/python/extractor/tsg-python/tree-sitter-python/package.json b/python/extractor/tsg-python/tree-sitter-python/package.json new file mode 100644 index 00000000000..a9bb55ac506 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/package.json @@ -0,0 +1,33 @@ +{ + "name": "tree-sitter-python", + "version": "0.19.0", + "description": "Python grammar for tree-sitter", + "main": "bindings/node", + "keywords": [ + "parser", + "lexer" + ], + "author": "Max Brunsfeld", + "license": "MIT", + "dependencies": { + "nan": "^2.14.0" + }, + "devDependencies": { + "tree-sitter-cli": "^0.19.3" + }, + "scripts": { + "build": "tree-sitter generate && node-gyp build", + "test": "tree-sitter test && script/parse-examples", + "parse": "tree-sitter parse", + "test-windows": "tree-sitter test" + }, + "repository": "https://github.com/tree-sitter/tree-sitter-python", + "tree-sitter": [ + { + "scope": "source.python", + "file-types": [ + "py" + ] + } + ] +} diff --git a/python/extractor/tsg-python/tree-sitter-python/queries/highlights.scm b/python/extractor/tsg-python/tree-sitter-python/queries/highlights.scm new file mode 100644 index 00000000000..f64fecb2c75 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/queries/highlights.scm @@ -0,0 +1,124 @@ +; Identifier naming conventions + +((identifier) @constructor + (#match? @constructor "^[A-Z]")) + +((identifier) @constant + (#match? @constant "^[A-Z][A-Z_]*$")) + +; Builtin functions + +((call + function: (identifier) @function.builtin) + (#match? + @function.builtin + "^(abs|all|any|ascii|bin|bool|breakpoint|bytearray|bytes|callable|chr|classmethod|compile|complex|delattr|dict|dir|divmod|enumerate|eval|exec|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|isinstance|issubclass|iter|len|list|locals|map|max|memoryview|min|next|object|oct|open|ord|pow|print|property|range|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|vars|zip|__import__)$")) + +; Function calls + +(decorator) @function + +(call + function: (attribute attribute: (identifier) @function.method)) +(call + function: (identifier) @function) + +; Function definitions + +(function_definition + name: (identifier) @function) + +(identifier) @variable +(attribute attribute: (identifier) @property) +(type (identifier) @type) + +; Literals + +[ + (none) + (true) + (false) +] @constant.builtin + +[ + (integer) + (float) +] @number + +(comment) @comment +(string) @string +(escape_sequence) @escape + +(interpolation + "{" @punctuation.special + "}" @punctuation.special) @embedded + +[ + "-" + "-=" + "!=" + "*" + "**" + "**=" + "*=" + "/" + "//" + "//=" + "/=" + "&" + "%" + "%=" + "^" + "+" + "->" + "+=" + "<" + "<<" + "<=" + "<>" + "=" + ":=" + "==" + ">" + ">=" + ">>" + "|" + "~" + "and" + "in" + "is" + "not" + "or" +] @operator + +[ + "as" + "assert" + "async" + "await" + "break" + "class" + "continue" + "def" + "del" + "elif" + "else" + "except" + "exec" + "finally" + "for" + "from" + "global" + "if" + "import" + "lambda" + "nonlocal" + "pass" + "print" + "raise" + "return" + "try" + "while" + "with" + "yield" +] @keyword diff --git a/python/extractor/tsg-python/tree-sitter-python/queries/tags.scm b/python/extractor/tsg-python/tree-sitter-python/queries/tags.scm new file mode 100644 index 00000000000..c5ca8272b85 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/queries/tags.scm @@ -0,0 +1,12 @@ +(class_definition + name: (identifier) @name) @definition.class + +(function_definition + name: (identifier) @name) @definition.function + +(call + function: [ + (identifier) @name + (attribute + attribute: (identifier) @name) + ]) @reference.call diff --git a/python/extractor/tsg-python/tree-sitter-python/src/grammar.json b/python/extractor/tsg-python/tree-sitter-python/src/grammar.json new file mode 100644 index 00000000000..957471765c3 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/src/grammar.json @@ -0,0 +1,6615 @@ +{ + "name": "python", + "word": "identifier", + "rules": { + "module": { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "_statement" + } + }, + "_statement": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_simple_statements" + }, + { + "type": "SYMBOL", + "name": "_compound_statement" + } + ] + }, + "_simple_statements": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_simple_statement" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_semicolon" + }, + { + "type": "SYMBOL", + "name": "_simple_statement" + } + ] + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_semicolon" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "SYMBOL", + "name": "_newline" + } + ] + }, + "_simple_statement": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "future_import_statement" + }, + { + "type": "SYMBOL", + "name": "import_statement" + }, + { + "type": "SYMBOL", + "name": "import_from_statement" + }, + { + "type": "SYMBOL", + "name": "print_statement" + }, + { + "type": "SYMBOL", + "name": "assert_statement" + }, + { + "type": "SYMBOL", + "name": "expression_statement" + }, + { + "type": "SYMBOL", + "name": "return_statement" + }, + { + "type": "SYMBOL", + "name": "delete_statement" + }, + { + "type": "SYMBOL", + "name": "raise_statement" + }, + { + "type": "SYMBOL", + "name": "pass_statement" + }, + { + "type": "SYMBOL", + "name": "break_statement" + }, + { + "type": "SYMBOL", + "name": "continue_statement" + }, + { + "type": "SYMBOL", + "name": "global_statement" + }, + { + "type": "SYMBOL", + "name": "nonlocal_statement" + }, + { + "type": "SYMBOL", + "name": "exec_statement" + }, + { + "type": "SYMBOL", + "name": "type_alias_statement" + } + ] + }, + "import_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "import" + }, + { + "type": "SYMBOL", + "name": "_import_list" + } + ] + }, + "import_prefix": { + "type": "REPEAT1", + "content": { + "type": "STRING", + "value": "." + } + }, + "relative_import": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "import_prefix" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "dotted_name" + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "future_import_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "from" + }, + { + "type": "STRING", + "value": "__future__" + }, + { + "type": "STRING", + "value": "import" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_import_list" + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_import_list" + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + } + ] + }, + "import_from_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "from" + }, + { + "type": "FIELD", + "name": "module_name", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "relative_import" + }, + { + "type": "SYMBOL", + "name": "dotted_name" + } + ] + } + }, + { + "type": "STRING", + "value": "import" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "wildcard_import" + }, + { + "type": "SYMBOL", + "name": "_import_list" + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_import_list" + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + } + ] + }, + "_import_list": { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "dotted_name" + }, + { + "type": "SYMBOL", + "name": "aliased_import" + } + ] + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "dotted_name" + }, + { + "type": "SYMBOL", + "name": "aliased_import" + } + ] + } + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "aliased_import": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "dotted_name" + } + }, + { + "type": "STRING", + "value": "as" + }, + { + "type": "FIELD", + "name": "alias", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + } + ] + }, + "wildcard_import": { + "type": "STRING", + "value": "*" + }, + "print_statement": { + "type": "CHOICE", + "members": [ + { + "type": "PREC", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "print" + }, + { + "type": "SYMBOL", + "name": "chevron" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + { + "type": "PREC", + "value": -10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "print" + }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + } + ] + }, + "chevron": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ">>" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "assert_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "assert" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + } + ] + } + ] + }, + "expression_statement": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "expression_list" + }, + { + "type": "SYMBOL", + "name": "assignment" + }, + { + "type": "SYMBOL", + "name": "augmented_assignment" + }, + { + "type": "SYMBOL", + "name": "yield" + } + ] + }, + "named_expression": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + } + ] + } + }, + { + "type": "STRING", + "value": ":=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "return_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "return" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_expressions" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "delete_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "del" + }, + { + "type": "FIELD", + "name": "target", + "content": { + "type": "SYMBOL", + "name": "_expressions" + } + } + ] + }, + "_expressions": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "expression_list" + } + ] + }, + "raise_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "raise" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_expressions" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "from" + }, + { + "type": "FIELD", + "name": "cause", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "pass_statement": { + "type": "PREC_LEFT", + "value": 0, + "content": { + "type": "STRING", + "value": "pass" + } + }, + "break_statement": { + "type": "PREC_LEFT", + "value": 0, + "content": { + "type": "STRING", + "value": "break" + } + }, + "continue_statement": { + "type": "PREC_LEFT", + "value": 0, + "content": { + "type": "STRING", + "value": "continue" + } + }, + "_compound_statement": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "if_statement" + }, + { + "type": "SYMBOL", + "name": "for_statement" + }, + { + "type": "SYMBOL", + "name": "while_statement" + }, + { + "type": "SYMBOL", + "name": "try_statement" + }, + { + "type": "SYMBOL", + "name": "with_statement" + }, + { + "type": "SYMBOL", + "name": "match_statement" + }, + { + "type": "SYMBOL", + "name": "function_definition" + }, + { + "type": "SYMBOL", + "name": "class_definition" + }, + { + "type": "SYMBOL", + "name": "decorated_definition" + } + ] + }, + "if_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "if" + }, + { + "type": "FIELD", + "name": "condition", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "consequence", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + }, + { + "type": "REPEAT", + "content": { + "type": "FIELD", + "name": "alternative", + "content": { + "type": "SYMBOL", + "name": "elif_clause" + } + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "alternative", + "content": { + "type": "SYMBOL", + "name": "else_clause" + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "elif_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "elif" + }, + { + "type": "FIELD", + "name": "condition", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "consequence", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "else_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "else" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "for_statement": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "async" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "for" + }, + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "_left_hand_side" + } + }, + { + "type": "STRING", + "value": "in" + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "_expressions" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + }, + { + "type": "FIELD", + "name": "alternative", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "else_clause" + }, + { + "type": "BLANK" + } + ] + } + } + ] + }, + "while_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "while" + }, + { + "type": "FIELD", + "name": "condition", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "alternative", + "content": { + "type": "SYMBOL", + "name": "else_clause" + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "try_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "try" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "except_clause" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "else_clause" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "finally_clause" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "except_group_clause" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "else_clause" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "finally_clause" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SYMBOL", + "name": "finally_clause" + } + ] + } + ] + }, + "except_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "except" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "as" + }, + { + "type": "STRING", + "value": "," + } + ] + }, + { + "type": "FIELD", + "name": "alias", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "except_group_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "except*" + }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "as" + }, + { + "type": "FIELD", + "name": "alias", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "finally_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "finally" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "with_statement": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "async" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "with" + }, + { + "type": "SYMBOL", + "name": "with_clause" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "with_clause": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "with_item" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "with_item" + } + ] + } + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "with_item" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "with_item" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + }, + "with_item": { + "type": "PREC_DYNAMIC", + "value": -1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "as" + }, + { + "type": "FIELD", + "name": "alias", + "content": { + "type": "SYMBOL", + "name": "pattern" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "match_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "match" + }, + { + "type": "FIELD", + "name": "subject", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "expression_list" + }, + "named": true, + "value": "tuple" + } + ] + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "cases", + "content": { + "type": "SYMBOL", + "name": "cases" + } + } + ] + }, + "cases": { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "case_block" + } + }, + "case_block": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "case" + }, + { + "type": "FIELD", + "name": "pattern", + "content": { + "type": "SYMBOL", + "name": "_match_patterns" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "guard", + "content": { + "type": "SYMBOL", + "name": "guard" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "_match_patterns": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_match_pattern" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "open_sequence_match_pattern" + }, + "named": true, + "value": "match_sequence_pattern" + } + ] + }, + "open_sequence_match_pattern": { + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + ] + } + }, + "_match_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "match_as_pattern" + }, + { + "type": "SYMBOL", + "name": "_match_or_pattern" + } + ] + }, + "match_as_pattern": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "pattern", + "content": { + "type": "SYMBOL", + "name": "_match_or_pattern" + } + }, + { + "type": "STRING", + "value": "as" + }, + { + "type": "FIELD", + "name": "alias", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + } + ] + }, + "_match_or_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "match_or_pattern" + }, + { + "type": "SYMBOL", + "name": "_closed_pattern" + } + ] + }, + "match_or_pattern": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_closed_pattern" + }, + { + "type": "STRING", + "value": "|" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_closed_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "|" + }, + { + "type": "SYMBOL", + "name": "_closed_pattern" + } + ] + } + } + ] + } + ] + }, + "_closed_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "match_literal_pattern" + }, + { + "type": "SYMBOL", + "name": "match_capture_pattern" + }, + { + "type": "SYMBOL", + "name": "match_wildcard_pattern" + }, + { + "type": "SYMBOL", + "name": "match_value_pattern" + }, + { + "type": "SYMBOL", + "name": "match_group_pattern" + }, + { + "type": "SYMBOL", + "name": "match_sequence_pattern" + }, + { + "type": "SYMBOL", + "name": "match_mapping_pattern" + }, + { + "type": "SYMBOL", + "name": "match_class_pattern" + } + ] + }, + "match_literal_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "prefix_operator", + "content": { + "type": "STRING", + "value": "-" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "FIELD", + "name": "real", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "integer" + }, + { + "type": "SYMBOL", + "name": "float" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "+" + }, + { + "type": "STRING", + "value": "-" + } + ] + } + }, + { + "type": "FIELD", + "name": "imaginary", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "integer" + }, + { + "type": "SYMBOL", + "name": "float" + } + ] + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SYMBOL", + "name": "string" + }, + { + "type": "SYMBOL", + "name": "concatenated_string" + }, + { + "type": "SYMBOL", + "name": "none" + }, + { + "type": "SYMBOL", + "name": "true" + }, + { + "type": "SYMBOL", + "name": "false" + } + ] + }, + "match_capture_pattern": { + "type": "SYMBOL", + "name": "identifier" + }, + "match_wildcard_pattern": { + "type": "STRING", + "value": "_" + }, + "match_value_pattern": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + }, + "match_group_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "FIELD", + "name": "content", + "content": { + "type": "SYMBOL", + "name": "_match_pattern" + } + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "match_sequence_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + ] + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + }, + "_match_maybe_star_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_match_pattern" + }, + { + "type": "SYMBOL", + "name": "match_star_pattern" + } + ] + }, + "match_star_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "FIELD", + "name": "target", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "match_wildcard_pattern" + }, + { + "type": "SYMBOL", + "name": "match_capture_pattern" + } + ] + } + } + ] + }, + "match_mapping_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_double_star_pattern" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_key_value_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_key_value_pattern" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_double_star_pattern" + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + } + ] + }, + "match_double_star_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "**" + }, + { + "type": "FIELD", + "name": "target", + "content": { + "type": "SYMBOL", + "name": "match_capture_pattern" + } + } + ] + }, + "match_key_value_pattern": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "key", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "match_literal_pattern" + }, + { + "type": "SYMBOL", + "name": "match_value_pattern" + } + ] + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "_match_pattern" + } + } + ] + }, + "match_class_pattern": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "class", + "content": { + "type": "SYMBOL", + "name": "pattern_class_name" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_positional_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_positional_pattern" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_keyword_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_keyword_pattern" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_positional_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_positional_pattern" + } + ] + } + } + ] + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_keyword_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_keyword_pattern" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + } + ] + }, + "pattern_class_name": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + }, + "match_positional_pattern": { + "type": "SYMBOL", + "name": "_match_pattern" + }, + "match_keyword_pattern": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "attribute", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "_match_pattern" + } + } + ] + }, + "guard": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "if" + }, + { + "type": "FIELD", + "name": "test", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "function_definition": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "async" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "def" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "type_parameters", + "content": { + "type": "SYMBOL", + "name": "type_parameters" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "FIELD", + "name": "parameters", + "content": { + "type": "SYMBOL", + "name": "parameters" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "->" + }, + { + "type": "FIELD", + "name": "return_type", + "content": { + "type": "SYMBOL", + "name": "type" + } + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "parameters": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_parameters" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "lambda_parameters": { + "type": "SYMBOL", + "name": "_parameters" + }, + "list_splat": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "dictionary_splat": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "**" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "global_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "global" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + } + ] + }, + "nonlocal_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "nonlocal" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + } + ] + }, + "exec_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "exec" + }, + { + "type": "FIELD", + "name": "code", + "content": { + "type": "SYMBOL", + "name": "string" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "in" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "type_alias_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "type" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "type_parameters", + "content": { + "type": "SYMBOL", + "name": "type_parameters" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "class_definition": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "class" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "type_parameters", + "content": { + "type": "SYMBOL", + "name": "type_parameters" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "FIELD", + "name": "superclasses", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "argument_list" + }, + { + "type": "BLANK" + } + ] + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "type_parameters": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "type_parameter", + "content": { + "type": "SYMBOL", + "name": "_type_parameter" + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "type_parameter", + "content": { + "type": "SYMBOL", + "name": "_type_parameter" + } + } + ] + } + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "_type_bound": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "bound", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "typevar_parameter": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_type_bound" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "typevartuple_parameter": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + } + ] + }, + "paramspec_parameter": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "**" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + } + ] + }, + "_type_parameter": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "typevar_parameter" + }, + { + "type": "SYMBOL", + "name": "typevartuple_parameter" + }, + { + "type": "SYMBOL", + "name": "paramspec_parameter" + } + ] + }, + "parenthesized_list_splat": { + "type": "PREC", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "parenthesized_list_splat" + }, + "named": true, + "value": "parenthesized_expression" + }, + { + "type": "SYMBOL", + "name": "list_splat" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } + }, + "argument_list": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "parenthesized_list_splat" + }, + "named": true, + "value": "parenthesized_expression" + }, + { + "type": "SYMBOL", + "name": "keyword_argument" + } + ] + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "parenthesized_list_splat" + }, + "named": true, + "value": "parenthesized_expression" + }, + { + "type": "SYMBOL", + "name": "keyword_argument" + } + ] + } + } + ] + } + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "decorated_definition": { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "decorator" + } + }, + { + "type": "FIELD", + "name": "definition", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "class_definition" + }, + { + "type": "SYMBOL", + "name": "function_definition" + } + ] + } + } + ] + }, + "decorator": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "@" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "_newline" + } + ] + }, + "_suite": { + "type": "CHOICE", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_simple_statements" + }, + "named": true, + "value": "block" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_indent" + }, + { + "type": "SYMBOL", + "name": "block" + } + ] + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_newline" + }, + "named": true, + "value": "block" + } + ] + }, + "block": { + "type": "SEQ", + "members": [ + { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "_statement" + } + }, + { + "type": "SYMBOL", + "name": "_dedent" + } + ] + }, + "expression_list": { + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + } + ] + } + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + ] + } + }, + "dotted_name": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + }, + "_parameters": { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "parameter" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "parameter" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_patterns": { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "SYMBOL", + "name": "pattern" + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "SYMBOL", + "name": "pattern" + } + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "trailing_comma", + "content": { + "type": "STRING", + "value": "," + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "parameter": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "typed_parameter" + }, + { + "type": "SYMBOL", + "name": "default_parameter" + }, + { + "type": "SYMBOL", + "name": "typed_default_parameter" + }, + { + "type": "SYMBOL", + "name": "list_splat_pattern" + }, + { + "type": "SYMBOL", + "name": "tuple_pattern" + }, + { + "type": "SYMBOL", + "name": "keyword_separator" + }, + { + "type": "SYMBOL", + "name": "positional_separator" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat_pattern" + } + ] + }, + "pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + }, + { + "type": "SYMBOL", + "name": "subscript" + }, + { + "type": "SYMBOL", + "name": "attribute" + }, + { + "type": "SYMBOL", + "name": "list_splat_pattern" + }, + { + "type": "SYMBOL", + "name": "tuple_pattern" + }, + { + "type": "SYMBOL", + "name": "list_pattern" + } + ] + }, + "tuple_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_patterns" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "list_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_patterns" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "default_parameter": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "typed_default_parameter": { + "type": "PREC", + "value": -1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "type" + } + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + "list_splat_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "FIELD", + "name": "vararg", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + }, + { + "type": "SYMBOL", + "name": "subscript" + }, + { + "type": "SYMBOL", + "name": "attribute" + } + ] + } + } + ] + }, + "dictionary_splat_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "**" + }, + { + "type": "FIELD", + "name": "kwarg", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + }, + { + "type": "SYMBOL", + "name": "subscript" + }, + { + "type": "SYMBOL", + "name": "attribute" + } + ] + } + } + ] + }, + "_expression_within_for_in_clause": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "lambda_within_for_in_clause" + }, + "named": true, + "value": "lambda" + } + ] + }, + "expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "comparison_operator" + }, + { + "type": "SYMBOL", + "name": "not_operator" + }, + { + "type": "SYMBOL", + "name": "boolean_operator" + }, + { + "type": "SYMBOL", + "name": "await" + }, + { + "type": "SYMBOL", + "name": "lambda" + }, + { + "type": "SYMBOL", + "name": "primary_expression" + }, + { + "type": "SYMBOL", + "name": "conditional_expression" + }, + { + "type": "SYMBOL", + "name": "named_expression" + } + ] + }, + "primary_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "binary_operator" + }, + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + }, + { + "type": "SYMBOL", + "name": "string" + }, + { + "type": "SYMBOL", + "name": "concatenated_string" + }, + { + "type": "SYMBOL", + "name": "integer" + }, + { + "type": "SYMBOL", + "name": "float" + }, + { + "type": "SYMBOL", + "name": "true" + }, + { + "type": "SYMBOL", + "name": "false" + }, + { + "type": "SYMBOL", + "name": "none" + }, + { + "type": "SYMBOL", + "name": "unary_operator" + }, + { + "type": "SYMBOL", + "name": "attribute" + }, + { + "type": "SYMBOL", + "name": "subscript" + }, + { + "type": "SYMBOL", + "name": "call" + }, + { + "type": "SYMBOL", + "name": "list" + }, + { + "type": "SYMBOL", + "name": "list_comprehension" + }, + { + "type": "SYMBOL", + "name": "dictionary" + }, + { + "type": "SYMBOL", + "name": "dictionary_comprehension" + }, + { + "type": "SYMBOL", + "name": "set" + }, + { + "type": "SYMBOL", + "name": "set_comprehension" + }, + { + "type": "SYMBOL", + "name": "tuple" + }, + { + "type": "SYMBOL", + "name": "parenthesized_expression" + }, + { + "type": "SYMBOL", + "name": "generator_expression" + }, + { + "type": "SYMBOL", + "name": "ellipsis" + } + ] + }, + "not_operator": { + "type": "PREC", + "value": 12, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "not" + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + "boolean_operator": { + "type": "CHOICE", + "members": [ + { + "type": "PREC_RIGHT", + "value": 11, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "and" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_RIGHT", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "or" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + } + ] + }, + "binary_operator": { + "type": "CHOICE", + "members": [ + { + "type": "PREC_LEFT", + "value": 17, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "+" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 17, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "-" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 18, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "*" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 18, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "@" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 18, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "/" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 18, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "%" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 18, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "//" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_RIGHT", + "value": 20, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "**" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 13, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "|" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 14, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "&" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 15, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "^" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 16, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "<<" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 16, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": ">>" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + } + ] + }, + "unary_operator": { + "type": "PREC", + "value": 19, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "+" + }, + { + "type": "STRING", + "value": "-" + }, + { + "type": "STRING", + "value": "~" + } + ] + } + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + "comparison_operator": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "primary_expression" + }, + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "operators", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "<" + }, + { + "type": "STRING", + "value": "<=" + }, + { + "type": "STRING", + "value": "==" + }, + { + "type": "STRING", + "value": "!=" + }, + { + "type": "STRING", + "value": ">=" + }, + { + "type": "STRING", + "value": ">" + }, + { + "type": "STRING", + "value": "<>" + }, + { + "type": "STRING", + "value": "in" + }, + { + "type": "ALIAS", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "not" + }, + { + "type": "STRING", + "value": "in" + } + ] + }, + "named": false, + "value": "not in" + }, + { + "type": "STRING", + "value": "is" + }, + { + "type": "ALIAS", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "is" + }, + { + "type": "STRING", + "value": "not" + } + ] + }, + "named": false, + "value": "is not" + } + ] + } + }, + { + "type": "SYMBOL", + "name": "primary_expression" + } + ] + } + } + ] + } + }, + "lambda": { + "type": "PREC", + "value": -2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "lambda" + }, + { + "type": "FIELD", + "name": "parameters", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "lambda_parameters" + }, + { + "type": "BLANK" + } + ] + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + "lambda_within_for_in_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "lambda" + }, + { + "type": "FIELD", + "name": "parameters", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "lambda_parameters" + }, + { + "type": "BLANK" + } + ] + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_expression_within_for_in_clause" + } + } + ] + }, + "assignment": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "_left_hand_side" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "_right_hand_side" + } + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "type" + } + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "type" + } + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "_right_hand_side" + } + } + ] + } + ] + } + ] + }, + "augmented_assignment": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "_left_hand_side" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "+=" + }, + { + "type": "STRING", + "value": "-=" + }, + { + "type": "STRING", + "value": "*=" + }, + { + "type": "STRING", + "value": "/=" + }, + { + "type": "STRING", + "value": "@=" + }, + { + "type": "STRING", + "value": "//=" + }, + { + "type": "STRING", + "value": "%=" + }, + { + "type": "STRING", + "value": "**=" + }, + { + "type": "STRING", + "value": ">>=" + }, + { + "type": "STRING", + "value": "<<=" + }, + { + "type": "STRING", + "value": "&=" + }, + { + "type": "STRING", + "value": "^=" + }, + { + "type": "STRING", + "value": "|=" + } + ] + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "_right_hand_side" + } + } + ] + }, + "_left_hand_side": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "pattern" + }, + { + "type": "SYMBOL", + "name": "pattern_list" + } + ] + }, + "pattern_list": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "SYMBOL", + "name": "pattern" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "SYMBOL", + "name": "pattern" + } + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + ] + }, + "_right_hand_side": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "expression_list" + }, + { + "type": "SYMBOL", + "name": "assignment" + }, + { + "type": "SYMBOL", + "name": "augmented_assignment" + }, + { + "type": "SYMBOL", + "name": "yield" + } + ] + }, + "yield": { + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "yield" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "from" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_expressions" + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + }, + "attribute": { + "type": "PREC", + "value": 21, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "object", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "FIELD", + "name": "attribute", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + } + ] + } + }, + "subscript": { + "type": "PREC", + "value": 21, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "STRING", + "value": "[" + }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "subscript", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "slice" + } + ] + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "subscript", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "slice" + } + ] + } + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + } + }, + "slice": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "start", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "stop", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "step", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "ellipsis": { + "type": "STRING", + "value": "..." + }, + "call": { + "type": "PREC", + "value": 21, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "function", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "arguments", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "generator_expression" + }, + { + "type": "SYMBOL", + "name": "argument_list" + } + ] + } + } + ] + } + }, + "typed_parameter": { + "type": "PREC", + "value": -1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "list_splat_pattern" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat_pattern" + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "type" + } + } + ] + } + }, + "type": { + "type": "SYMBOL", + "name": "expression" + }, + "keyword_argument": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + } + ] + } + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "list": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_collection_elements" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "set": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "_collection_elements" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "tuple": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_collection_elements" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "dictionary": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "pair" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + } + ] + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "pair" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + } + ] + } + } + ] + } + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "pair": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "key", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "list_comprehension": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "SYMBOL", + "name": "_comprehension_clauses" + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "dictionary_comprehension": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "pair" + } + }, + { + "type": "SYMBOL", + "name": "_comprehension_clauses" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "set_comprehension": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "SYMBOL", + "name": "_comprehension_clauses" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "generator_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "SYMBOL", + "name": "_comprehension_clauses" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "_comprehension_clauses": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "for_in_clause" + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "for_in_clause" + }, + { + "type": "SYMBOL", + "name": "if_clause" + } + ] + } + } + ] + }, + "parenthesized_expression": { + "type": "PREC", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "FIELD", + "name": "inner", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "yield" + } + ] + } + }, + { + "type": "STRING", + "value": ")" + } + ] + } + }, + "_collection_elements": { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "yield" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "parenthesized_list_splat" + } + ] + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "yield" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "parenthesized_list_splat" + } + ] + } + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "trailing_comma", + "content": { + "type": "STRING", + "value": "," + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "for_in_clause": { + "type": "PREC_LEFT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "async" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "for" + }, + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "_left_hand_side" + } + }, + { + "type": "STRING", + "value": "in" + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expression_within_for_in_clause" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_expression_within_for_in_clause" + } + ] + } + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "if_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "if" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "conditional_expression": { + "type": "PREC_RIGHT", + "value": -1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "if" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "else" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + }, + "concatenated_string": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "string" + }, + { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "string" + } + } + ] + }, + "string": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "prefix", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_string_start" + }, + "named": false, + "value": "\"" + } + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "interpolation", + "content": { + "type": "SYMBOL", + "name": "interpolation" + } + }, + { + "type": "FIELD", + "name": "string_content", + "content": { + "type": "SYMBOL", + "name": "string_content" + } + } + ] + } + }, + { + "type": "FIELD", + "name": "suffix", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_string_end" + }, + "named": false, + "value": "\"" + } + } + ] + }, + "string_content": { + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "REPEAT1", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_escape_interpolation" + }, + { + "type": "SYMBOL", + "name": "escape_sequence" + }, + { + "type": "SYMBOL", + "name": "_not_escape_sequence" + }, + { + "type": "SYMBOL", + "name": "_string_content" + } + ] + } + } + }, + "interpolation": { + "type": "SEQ", + "members": [ + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "STRING", + "value": "{" + } + }, + { + "type": "FIELD", + "name": "expression", + "content": { + "type": "SYMBOL", + "name": "_f_expression" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "type_conversion" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "format_specifier" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "_f_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "expression_list" + }, + { + "type": "SYMBOL", + "name": "yield" + } + ] + }, + "_escape_interpolation": { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "{{" + }, + { + "type": "STRING", + "value": "}}" + } + ] + } + }, + "escape_sequence": { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PREC", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "\\" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "u[a-fA-F\\d]{4}" + }, + { + "type": "PATTERN", + "value": "U[a-fA-F\\d]{8}" + }, + { + "type": "PATTERN", + "value": "x[a-fA-F\\d]{2}" + }, + { + "type": "PATTERN", + "value": "\\d{3}" + }, + { + "type": "PATTERN", + "value": "\\r?\\n" + }, + { + "type": "PATTERN", + "value": "['\"abfrntv\\\\]" + }, + { + "type": "PATTERN", + "value": "N\\{[^}]+\\}" + } + ] + } + ] + } + } + }, + "_not_escape_sequence": { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "STRING", + "value": "\\" + } + }, + "format_specifier": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "TOKEN", + "content": { + "type": "PREC", + "value": 1, + "content": { + "type": "PATTERN", + "value": "[^{}\\n]+" + } + } + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "interpolation" + }, + "named": true, + "value": "format_expression" + } + ] + } + } + ] + }, + "format_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "type_conversion": { + "type": "PATTERN", + "value": "![a-z]" + }, + "integer": { + "type": "TOKEN", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "0x" + }, + { + "type": "STRING", + "value": "0X" + } + ] + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "_?[A-Fa-f0-9]+" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[Ll]" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "0o" + }, + { + "type": "STRING", + "value": "0O" + } + ] + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "_?[0-7]+" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[Ll]" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "0b" + }, + { + "type": "STRING", + "value": "0B" + } + ] + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "_?[0-1]+" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[Ll]" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[Ll]" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[jJ]" + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + ] + } + }, + "float": { + "type": "TOKEN", + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "CHOICE", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "[eE][\\+-]?" + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "[eE][\\+-]?" + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "[eE][\\+-]?" + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + } + ] + } + ] + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[Ll]" + }, + { + "type": "PATTERN", + "value": "[jJ]" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "identifier": { + "type": "PATTERN", + "value": "[_\\p{XID_Start}][_\\p{XID_Continue}]*" + }, + "keyword_identifier": { + "type": "PREC", + "value": -3, + "content": { + "type": "ALIAS", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "print" + }, + { + "type": "STRING", + "value": "exec" + }, + { + "type": "STRING", + "value": "async" + }, + { + "type": "STRING", + "value": "await" + }, + { + "type": "STRING", + "value": "match" + }, + { + "type": "STRING", + "value": "type" + } + ] + }, + "named": true, + "value": "identifier" + } + }, + "true": { + "type": "STRING", + "value": "True" + }, + "false": { + "type": "STRING", + "value": "False" + }, + "none": { + "type": "STRING", + "value": "None" + }, + "await": { + "type": "PREC", + "value": 19, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "await" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + }, + "comment": { + "type": "TOKEN", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "#" + }, + { + "type": "PATTERN", + "value": ".*" + } + ] + } + }, + "positional_separator": { + "type": "STRING", + "value": "/" + }, + "keyword_separator": { + "type": "STRING", + "value": "*" + }, + "_semicolon": { + "type": "STRING", + "value": ";" + } + }, + "extras": [ + { + "type": "SYMBOL", + "name": "comment" + }, + { + "type": "PATTERN", + "value": "[\\s\\f\\uFEFF\\u2060\\u200B]|\\\\\\r?\\n" + } + ], + "conflicts": [ + [ + "primary_expression", + "pattern" + ], + [ + "primary_expression", + "list_splat_pattern" + ], + [ + "tuple", + "tuple_pattern" + ], + [ + "list", + "list_pattern" + ], + [ + "with_item", + "_collection_elements" + ] + ], + "precedences": [], + "externals": [ + { + "type": "SYMBOL", + "name": "_newline" + }, + { + "type": "SYMBOL", + "name": "_indent" + }, + { + "type": "SYMBOL", + "name": "_dedent" + }, + { + "type": "SYMBOL", + "name": "_string_start" + }, + { + "type": "SYMBOL", + "name": "_string_content" + }, + { + "type": "SYMBOL", + "name": "_string_end" + } + ], + "inline": [ + "_simple_statement", + "_compound_statement", + "_suite", + "_expressions", + "_left_hand_side", + "keyword_identifier" + ], + "supertypes": [ + "_simple_statement", + "_compound_statement", + "expression", + "primary_expression", + "pattern", + "parameter" + ] +} + diff --git a/python/extractor/tsg-python/tree-sitter-python/src/node-types.json b/python/extractor/tsg-python/tree-sitter-python/src/node-types.json new file mode 100644 index 00000000000..515d815d833 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/src/node-types.json @@ -0,0 +1,4064 @@ +[ + { + "type": "_compound_statement", + "named": true, + "subtypes": [ + { + "type": "class_definition", + "named": true + }, + { + "type": "decorated_definition", + "named": true + }, + { + "type": "for_statement", + "named": true + }, + { + "type": "function_definition", + "named": true + }, + { + "type": "if_statement", + "named": true + }, + { + "type": "match_statement", + "named": true + }, + { + "type": "try_statement", + "named": true + }, + { + "type": "while_statement", + "named": true + }, + { + "type": "with_statement", + "named": true + } + ] + }, + { + "type": "_simple_statement", + "named": true, + "subtypes": [ + { + "type": "assert_statement", + "named": true + }, + { + "type": "break_statement", + "named": true + }, + { + "type": "continue_statement", + "named": true + }, + { + "type": "delete_statement", + "named": true + }, + { + "type": "exec_statement", + "named": true + }, + { + "type": "expression_statement", + "named": true + }, + { + "type": "future_import_statement", + "named": true + }, + { + "type": "global_statement", + "named": true + }, + { + "type": "import_from_statement", + "named": true + }, + { + "type": "import_statement", + "named": true + }, + { + "type": "nonlocal_statement", + "named": true + }, + { + "type": "pass_statement", + "named": true + }, + { + "type": "print_statement", + "named": true + }, + { + "type": "raise_statement", + "named": true + }, + { + "type": "return_statement", + "named": true + }, + { + "type": "type_alias_statement", + "named": true + } + ] + }, + { + "type": "expression", + "named": true, + "subtypes": [ + { + "type": "await", + "named": true + }, + { + "type": "boolean_operator", + "named": true + }, + { + "type": "comparison_operator", + "named": true + }, + { + "type": "conditional_expression", + "named": true + }, + { + "type": "lambda", + "named": true + }, + { + "type": "named_expression", + "named": true + }, + { + "type": "not_operator", + "named": true + }, + { + "type": "primary_expression", + "named": true + } + ] + }, + { + "type": "parameter", + "named": true, + "subtypes": [ + { + "type": "default_parameter", + "named": true + }, + { + "type": "dictionary_splat_pattern", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "keyword_separator", + "named": true + }, + { + "type": "list_splat_pattern", + "named": true + }, + { + "type": "positional_separator", + "named": true + }, + { + "type": "tuple_pattern", + "named": true + }, + { + "type": "typed_default_parameter", + "named": true + }, + { + "type": "typed_parameter", + "named": true + } + ] + }, + { + "type": "pattern", + "named": true, + "subtypes": [ + { + "type": "attribute", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "list_pattern", + "named": true + }, + { + "type": "list_splat_pattern", + "named": true + }, + { + "type": "subscript", + "named": true + }, + { + "type": "tuple_pattern", + "named": true + } + ] + }, + { + "type": "primary_expression", + "named": true, + "subtypes": [ + { + "type": "attribute", + "named": true + }, + { + "type": "binary_operator", + "named": true + }, + { + "type": "call", + "named": true + }, + { + "type": "concatenated_string", + "named": true + }, + { + "type": "dictionary", + "named": true + }, + { + "type": "dictionary_comprehension", + "named": true + }, + { + "type": "ellipsis", + "named": true + }, + { + "type": "false", + "named": true + }, + { + "type": "float", + "named": true + }, + { + "type": "generator_expression", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "integer", + "named": true + }, + { + "type": "list", + "named": true + }, + { + "type": "list_comprehension", + "named": true + }, + { + "type": "none", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + }, + { + "type": "set", + "named": true + }, + { + "type": "set_comprehension", + "named": true + }, + { + "type": "string", + "named": true + }, + { + "type": "subscript", + "named": true + }, + { + "type": "true", + "named": true + }, + { + "type": "tuple", + "named": true + }, + { + "type": "unary_operator", + "named": true + } + ] + }, + { + "type": "aliased_import", + "named": true, + "fields": { + "alias": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "dotted_name", + "named": true + } + ] + } + } + }, + { + "type": "argument_list", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "dictionary_splat", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "keyword_argument", + "named": true + }, + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + } + ] + } + } + }, + { + "type": "assert_statement", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "assignment", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pattern", + "named": true + }, + { + "type": "pattern_list", + "named": true + } + ] + }, + "right": { + "multiple": false, + "required": false, + "types": [ + { + "type": "assignment", + "named": true + }, + { + "type": "augmented_assignment", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type", + "named": true + } + ] + } + } + }, + { + "type": "attribute", + "named": true, + "fields": { + "attribute": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "object": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + } + } + }, + { + "type": "augmented_assignment", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pattern", + "named": true + }, + { + "type": "pattern_list", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "%=", + "named": false + }, + { + "type": "&=", + "named": false + }, + { + "type": "**=", + "named": false + }, + { + "type": "*=", + "named": false + }, + { + "type": "+=", + "named": false + }, + { + "type": "-=", + "named": false + }, + { + "type": "//=", + "named": false + }, + { + "type": "/=", + "named": false + }, + { + "type": "<<=", + "named": false + }, + { + "type": ">>=", + "named": false + }, + { + "type": "@=", + "named": false + }, + { + "type": "^=", + "named": false + }, + { + "type": "|=", + "named": false + } + ] + }, + "right": { + "multiple": false, + "required": true, + "types": [ + { + "type": "assignment", + "named": true + }, + { + "type": "augmented_assignment", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + } + } + }, + { + "type": "await", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "binary_operator", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "%", + "named": false + }, + { + "type": "&", + "named": false + }, + { + "type": "*", + "named": false + }, + { + "type": "**", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "/", + "named": false + }, + { + "type": "//", + "named": false + }, + { + "type": "<<", + "named": false + }, + { + "type": ">>", + "named": false + }, + { + "type": "@", + "named": false + }, + { + "type": "^", + "named": false + }, + { + "type": "|", + "named": false + } + ] + }, + "right": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + } + } + }, + { + "type": "block", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "_compound_statement", + "named": true + }, + { + "type": "_simple_statement", + "named": true + } + ] + } + }, + { + "type": "boolean_operator", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "and", + "named": false + }, + { + "type": "or", + "named": false + } + ] + }, + "right": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "break_statement", + "named": true, + "fields": {} + }, + { + "type": "call", + "named": true, + "fields": { + "arguments": { + "multiple": false, + "required": true, + "types": [ + { + "type": "argument_list", + "named": true + }, + { + "type": "generator_expression", + "named": true + } + ] + }, + "function": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + } + } + }, + { + "type": "case_block", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "guard": { + "multiple": false, + "required": false, + "types": [ + { + "type": "guard", + "named": true + } + ] + }, + "pattern": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "cases", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "case_block", + "named": true + } + ] + } + }, + { + "type": "chevron", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "class_definition", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "superclasses": { + "multiple": false, + "required": false, + "types": [ + { + "type": "argument_list", + "named": true + } + ] + }, + "type_parameters": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type_parameters", + "named": true + } + ] + } + } + }, + { + "type": "comparison_operator", + "named": true, + "fields": { + "operators": { + "multiple": true, + "required": true, + "types": [ + { + "type": "!=", + "named": false + }, + { + "type": "<", + "named": false + }, + { + "type": "<=", + "named": false + }, + { + "type": "<>", + "named": false + }, + { + "type": "==", + "named": false + }, + { + "type": ">", + "named": false + }, + { + "type": ">=", + "named": false + }, + { + "type": "in", + "named": false + }, + { + "type": "is", + "named": false + }, + { + "type": "is not", + "named": false + }, + { + "type": "not in", + "named": false + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + } + }, + { + "type": "concatenated_string", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "string", + "named": true + } + ] + } + }, + { + "type": "conditional_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "continue_statement", + "named": true, + "fields": {} + }, + { + "type": "decorated_definition", + "named": true, + "fields": { + "definition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "class_definition", + "named": true + }, + { + "type": "function_definition", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "decorator", + "named": true + } + ] + } + }, + { + "type": "decorator", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "default_parameter", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "delete_statement", + "named": true, + "fields": { + "target": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + } + ] + } + } + }, + { + "type": "dictionary", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "dictionary_splat", + "named": true + }, + { + "type": "pair", + "named": true + } + ] + } + } + }, + { + "type": "dictionary_comprehension", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pair", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "for_in_clause", + "named": true + }, + { + "type": "if_clause", + "named": true + } + ] + } + }, + { + "type": "dictionary_splat", + "named": true, + "fields": { + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "dictionary_splat_pattern", + "named": true, + "fields": { + "kwarg": { + "multiple": false, + "required": true, + "types": [ + { + "type": "attribute", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "subscript", + "named": true + } + ] + } + } + }, + { + "type": "dotted_name", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "elif_clause", + "named": true, + "fields": { + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "consequence": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + } + }, + { + "type": "else_clause", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + } + }, + { + "type": "except_clause", + "named": true, + "fields": { + "alias": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "except_group_clause", + "named": true, + "fields": { + "alias": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "exec_statement", + "named": true, + "fields": { + "code": { + "multiple": false, + "required": true, + "types": [ + { + "type": "string", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "expression_list", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": true, + "types": [ + { + "type": "dictionary_splat", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "list_splat", + "named": true + } + ] + } + } + }, + { + "type": "expression_statement", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "assignment", + "named": true + }, + { + "type": "augmented_assignment", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + } + }, + { + "type": "finally_clause", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + } + }, + { + "type": "for_in_clause", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pattern", + "named": true + }, + { + "type": "pattern_list", + "named": true + } + ] + }, + "right": { + "multiple": true, + "required": true, + "types": [ + { + "type": ",", + "named": false + }, + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "for_statement", + "named": true, + "fields": { + "alternative": { + "multiple": false, + "required": false, + "types": [ + { + "type": "else_clause", + "named": true + } + ] + }, + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pattern", + "named": true + }, + { + "type": "pattern_list", + "named": true + } + ] + }, + "right": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + } + ] + } + } + }, + { + "type": "format_expression", + "named": true, + "fields": { + "expression": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "format_specifier", + "named": true + }, + { + "type": "type_conversion", + "named": true + } + ] + } + }, + { + "type": "format_specifier", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "format_expression", + "named": true + } + ] + } + }, + { + "type": "function_definition", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "parameters": { + "multiple": false, + "required": true, + "types": [ + { + "type": "parameters", + "named": true + } + ] + }, + "return_type": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type", + "named": true + } + ] + }, + "type_parameters": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type_parameters", + "named": true + } + ] + } + } + }, + { + "type": "future_import_statement", + "named": true, + "fields": { + "name": { + "multiple": true, + "required": true, + "types": [ + { + "type": "aliased_import", + "named": true + }, + { + "type": "dotted_name", + "named": true + } + ] + } + } + }, + { + "type": "generator_expression", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "for_in_clause", + "named": true + }, + { + "type": "if_clause", + "named": true + } + ] + } + }, + { + "type": "global_statement", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "guard", + "named": true, + "fields": { + "test": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "if_clause", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "if_statement", + "named": true, + "fields": { + "alternative": { + "multiple": true, + "required": false, + "types": [ + { + "type": "elif_clause", + "named": true + }, + { + "type": "else_clause", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "consequence": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + } + }, + { + "type": "import_from_statement", + "named": true, + "fields": { + "module_name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "dotted_name", + "named": true + }, + { + "type": "relative_import", + "named": true + } + ] + }, + "name": { + "multiple": true, + "required": false, + "types": [ + { + "type": "aliased_import", + "named": true + }, + { + "type": "dotted_name", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "wildcard_import", + "named": true + } + ] + } + }, + { + "type": "import_prefix", + "named": true, + "fields": {} + }, + { + "type": "import_statement", + "named": true, + "fields": { + "name": { + "multiple": true, + "required": true, + "types": [ + { + "type": "aliased_import", + "named": true + }, + { + "type": "dotted_name", + "named": true + } + ] + } + } + }, + { + "type": "interpolation", + "named": true, + "fields": { + "expression": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "format_specifier", + "named": true + }, + { + "type": "type_conversion", + "named": true + } + ] + } + }, + { + "type": "keyword_argument", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "keyword_separator", + "named": true, + "fields": {} + }, + { + "type": "lambda", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "parameters": { + "multiple": false, + "required": false, + "types": [ + { + "type": "lambda_parameters", + "named": true + } + ] + } + } + }, + { + "type": "lambda_parameters", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "parameter", + "named": true + } + ] + } + }, + { + "type": "list", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_list_splat", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + }, + "trailing_comma": { + "multiple": false, + "required": false, + "types": [ + { + "type": ",", + "named": false + } + ] + } + } + }, + { + "type": "list_comprehension", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "for_in_clause", + "named": true + }, + { + "type": "if_clause", + "named": true + } + ] + } + }, + { + "type": "list_pattern", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "pattern", + "named": true + } + ] + }, + "trailing_comma": { + "multiple": false, + "required": false, + "types": [ + { + "type": ",", + "named": false + } + ] + } + } + }, + { + "type": "list_splat", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "list_splat_pattern", + "named": true, + "fields": { + "vararg": { + "multiple": false, + "required": true, + "types": [ + { + "type": "attribute", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "subscript", + "named": true + } + ] + } + } + }, + { + "type": "match_as_pattern", + "named": true, + "fields": { + "alias": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "pattern": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_capture_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "match_class_pattern", + "named": true, + "fields": { + "class": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pattern_class_name", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "match_keyword_pattern", + "named": true + }, + { + "type": "match_positional_pattern", + "named": true + } + ] + } + }, + { + "type": "match_double_star_pattern", + "named": true, + "fields": { + "target": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_capture_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_group_pattern", + "named": true, + "fields": { + "content": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_key_value_pattern", + "named": true, + "fields": { + "key": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_keyword_pattern", + "named": true, + "fields": { + "attribute": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_literal_pattern", + "named": true, + "fields": { + "imaginary": { + "multiple": false, + "required": false, + "types": [ + { + "type": "float", + "named": true + }, + { + "type": "integer", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": false, + "types": [ + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + } + ] + }, + "prefix_operator": { + "multiple": false, + "required": false, + "types": [ + { + "type": "-", + "named": false + } + ] + }, + "real": { + "multiple": false, + "required": false, + "types": [ + { + "type": "float", + "named": true + }, + { + "type": "integer", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "concatenated_string", + "named": true + }, + { + "type": "false", + "named": true + }, + { + "type": "none", + "named": true + }, + { + "type": "string", + "named": true + }, + { + "type": "true", + "named": true + } + ] + } + }, + { + "type": "match_mapping_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "match_double_star_pattern", + "named": true + }, + { + "type": "match_key_value_pattern", + "named": true + } + ] + } + }, + { + "type": "match_or_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + }, + { + "type": "match_positional_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + }, + { + "type": "match_sequence_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_star_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + }, + { + "type": "match_star_pattern", + "named": true, + "fields": { + "target": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_statement", + "named": true, + "fields": { + "cases": { + "multiple": false, + "required": true, + "types": [ + { + "type": "cases", + "named": true + } + ] + }, + "subject": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "tuple", + "named": true + } + ] + } + } + }, + { + "type": "match_value_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "module", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "_compound_statement", + "named": true + }, + { + "type": "_simple_statement", + "named": true + } + ] + } + }, + { + "type": "named_expression", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "nonlocal_statement", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "not_operator", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "pair", + "named": true, + "fields": { + "key": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "parameters", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "parameter", + "named": true + } + ] + } + }, + { + "type": "paramspec_parameter", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + } + }, + { + "type": "parenthesized_expression", + "named": true, + "fields": { + "inner": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + } + ] + } + }, + { + "type": "parenthesized_list_splat", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + } + ] + } + }, + { + "type": "pass_statement", + "named": true, + "fields": {} + }, + { + "type": "pattern_class_name", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "pattern_list", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": true, + "types": [ + { + "type": "pattern", + "named": true + } + ] + } + } + }, + { + "type": "positional_separator", + "named": true, + "fields": {} + }, + { + "type": "print_statement", + "named": true, + "fields": { + "argument": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "chevron", + "named": true + } + ] + } + }, + { + "type": "raise_statement", + "named": true, + "fields": { + "cause": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + } + ] + } + }, + { + "type": "relative_import", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": false, + "types": [ + { + "type": "dotted_name", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "import_prefix", + "named": true + } + ] + } + }, + { + "type": "return_statement", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + } + ] + } + }, + { + "type": "set", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_list_splat", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + }, + "trailing_comma": { + "multiple": false, + "required": false, + "types": [ + { + "type": ",", + "named": false + } + ] + } + } + }, + { + "type": "set_comprehension", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "for_in_clause", + "named": true + }, + { + "type": "if_clause", + "named": true + } + ] + } + }, + { + "type": "slice", + "named": true, + "fields": { + "start": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "step": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "stop": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "string", + "named": true, + "fields": { + "interpolation": { + "multiple": true, + "required": false, + "types": [ + { + "type": "interpolation", + "named": true + } + ] + }, + "prefix": { + "multiple": false, + "required": true, + "types": [ + { + "type": "\"", + "named": false + } + ] + }, + "string_content": { + "multiple": true, + "required": false, + "types": [ + { + "type": "string_content", + "named": true + } + ] + }, + "suffix": { + "multiple": false, + "required": true, + "types": [ + { + "type": "\"", + "named": false + } + ] + } + } + }, + { + "type": "string_content", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "escape_sequence", + "named": true + } + ] + } + }, + { + "type": "subscript", + "named": true, + "fields": { + "subscript": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "slice", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + } + } + }, + { + "type": "try_statement", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "else_clause", + "named": true + }, + { + "type": "except_clause", + "named": true + }, + { + "type": "except_group_clause", + "named": true + }, + { + "type": "finally_clause", + "named": true + } + ] + } + }, + { + "type": "tuple", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "dictionary_splat", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_list_splat", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + }, + "trailing_comma": { + "multiple": false, + "required": false, + "types": [ + { + "type": ",", + "named": false + } + ] + } + } + }, + { + "type": "tuple_pattern", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "pattern", + "named": true + } + ] + }, + "trailing_comma": { + "multiple": false, + "required": false, + "types": [ + { + "type": ",", + "named": false + } + ] + } + } + }, + { + "type": "type", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "type_alias_statement", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "type_parameters": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type_parameters", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "type_parameters", + "named": true, + "fields": { + "type_parameter": { + "multiple": true, + "required": true, + "types": [ + { + "type": "paramspec_parameter", + "named": true + }, + { + "type": "typevar_parameter", + "named": true + }, + { + "type": "typevartuple_parameter", + "named": true + } + ] + } + } + }, + { + "type": "typed_default_parameter", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "typed_parameter", + "named": true, + "fields": { + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "dictionary_splat_pattern", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "list_splat_pattern", + "named": true + } + ] + } + }, + { + "type": "typevar_parameter", + "named": true, + "fields": { + "bound": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + } + }, + { + "type": "typevartuple_parameter", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + } + }, + { + "type": "unary_operator", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "~", + "named": false + } + ] + } + } + }, + { + "type": "while_statement", + "named": true, + "fields": { + "alternative": { + "multiple": false, + "required": false, + "types": [ + { + "type": "else_clause", + "named": true + } + ] + }, + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "wildcard_import", + "named": true, + "fields": {} + }, + { + "type": "with_clause", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "with_item", + "named": true + } + ] + } + }, + { + "type": "with_item", + "named": true, + "fields": { + "alias": { + "multiple": false, + "required": false, + "types": [ + { + "type": "pattern", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "with_statement", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "with_clause", + "named": true + } + ] + } + }, + { + "type": "yield", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + } + ] + } + }, + { + "type": "!=", + "named": false + }, + { + "type": "\"", + "named": false + }, + { + "type": "%", + "named": false + }, + { + "type": "%=", + "named": false + }, + { + "type": "&", + "named": false + }, + { + "type": "&=", + "named": false + }, + { + "type": "(", + "named": false + }, + { + "type": ")", + "named": false + }, + { + "type": "*", + "named": false + }, + { + "type": "**", + "named": false + }, + { + "type": "**=", + "named": false + }, + { + "type": "*=", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "+=", + "named": false + }, + { + "type": ",", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "-=", + "named": false + }, + { + "type": "->", + "named": false + }, + { + "type": ".", + "named": false + }, + { + "type": "/", + "named": false + }, + { + "type": "//", + "named": false + }, + { + "type": "//=", + "named": false + }, + { + "type": "/=", + "named": false + }, + { + "type": ":", + "named": false + }, + { + "type": ":=", + "named": false + }, + { + "type": "<", + "named": false + }, + { + "type": "<<", + "named": false + }, + { + "type": "<<=", + "named": false + }, + { + "type": "<=", + "named": false + }, + { + "type": "<>", + "named": false + }, + { + "type": "=", + "named": false + }, + { + "type": "==", + "named": false + }, + { + "type": ">", + "named": false + }, + { + "type": ">=", + "named": false + }, + { + "type": ">>", + "named": false + }, + { + "type": ">>=", + "named": false + }, + { + "type": "@", + "named": false + }, + { + "type": "@=", + "named": false + }, + { + "type": "[", + "named": false + }, + { + "type": "]", + "named": false + }, + { + "type": "^", + "named": false + }, + { + "type": "^=", + "named": false + }, + { + "type": "__future__", + "named": false + }, + { + "type": "and", + "named": false + }, + { + "type": "as", + "named": false + }, + { + "type": "assert", + "named": false + }, + { + "type": "async", + "named": false + }, + { + "type": "await", + "named": false + }, + { + "type": "break", + "named": false + }, + { + "type": "case", + "named": false + }, + { + "type": "class", + "named": false + }, + { + "type": "comment", + "named": true + }, + { + "type": "continue", + "named": false + }, + { + "type": "def", + "named": false + }, + { + "type": "del", + "named": false + }, + { + "type": "elif", + "named": false + }, + { + "type": "ellipsis", + "named": true + }, + { + "type": "else", + "named": false + }, + { + "type": "escape_sequence", + "named": true + }, + { + "type": "except", + "named": false + }, + { + "type": "except*", + "named": false + }, + { + "type": "exec", + "named": false + }, + { + "type": "false", + "named": true + }, + { + "type": "finally", + "named": false + }, + { + "type": "float", + "named": true + }, + { + "type": "for", + "named": false + }, + { + "type": "from", + "named": false + }, + { + "type": "global", + "named": false + }, + { + "type": "identifier", + "named": true + }, + { + "type": "if", + "named": false + }, + { + "type": "import", + "named": false + }, + { + "type": "in", + "named": false + }, + { + "type": "integer", + "named": true + }, + { + "type": "is", + "named": false + }, + { + "type": "is not", + "named": false + }, + { + "type": "lambda", + "named": false + }, + { + "type": "match", + "named": false + }, + { + "type": "match_wildcard_pattern", + "named": true + }, + { + "type": "none", + "named": true + }, + { + "type": "nonlocal", + "named": false + }, + { + "type": "not", + "named": false + }, + { + "type": "not in", + "named": false + }, + { + "type": "or", + "named": false + }, + { + "type": "pass", + "named": false + }, + { + "type": "print", + "named": false + }, + { + "type": "raise", + "named": false + }, + { + "type": "return", + "named": false + }, + { + "type": "true", + "named": true + }, + { + "type": "try", + "named": false + }, + { + "type": "type", + "named": false + }, + { + "type": "type_conversion", + "named": true + }, + { + "type": "while", + "named": false + }, + { + "type": "with", + "named": false + }, + { + "type": "yield", + "named": false + }, + { + "type": "{", + "named": false + }, + { + "type": "|", + "named": false + }, + { + "type": "|=", + "named": false + }, + { + "type": "}", + "named": false + }, + { + "type": "~", + "named": false + } +] \ No newline at end of file diff --git a/python/extractor/tsg-python/tree-sitter-python/src/parser.c b/python/extractor/tsg-python/tree-sitter-python/src/parser.c new file mode 100644 index 00000000000..05a076d96a2 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/src/parser.c @@ -0,0 +1,76504 @@ +#include + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#endif + +#define LANGUAGE_VERSION 14 +#define STATE_COUNT 1525 +#define LARGE_STATE_COUNT 155 +#define SYMBOL_COUNT 280 +#define ALIAS_COUNT 3 +#define TOKEN_COUNT 108 +#define EXTERNAL_TOKEN_COUNT 6 +#define FIELD_COUNT 53 +#define MAX_ALIAS_SEQUENCE_LENGTH 10 +#define PRODUCTION_ID_COUNT 161 + +enum { + sym_identifier = 1, + anon_sym_import = 2, + anon_sym_DOT = 3, + anon_sym_from = 4, + anon_sym___future__ = 5, + anon_sym_LPAREN = 6, + anon_sym_RPAREN = 7, + anon_sym_COMMA = 8, + anon_sym_as = 9, + anon_sym_STAR = 10, + anon_sym_print = 11, + anon_sym_GT_GT = 12, + anon_sym_assert = 13, + anon_sym_COLON_EQ = 14, + anon_sym_return = 15, + anon_sym_del = 16, + anon_sym_raise = 17, + anon_sym_pass = 18, + anon_sym_break = 19, + anon_sym_continue = 20, + anon_sym_if = 21, + anon_sym_COLON = 22, + anon_sym_elif = 23, + anon_sym_else = 24, + anon_sym_async = 25, + anon_sym_for = 26, + anon_sym_in = 27, + anon_sym_while = 28, + anon_sym_try = 29, + anon_sym_except = 30, + anon_sym_except_STAR = 31, + anon_sym_finally = 32, + anon_sym_with = 33, + anon_sym_match = 34, + anon_sym_case = 35, + anon_sym_PIPE = 36, + anon_sym_DASH = 37, + anon_sym_PLUS = 38, + sym_match_wildcard_pattern = 39, + anon_sym_LBRACK = 40, + anon_sym_RBRACK = 41, + anon_sym_LBRACE = 42, + anon_sym_RBRACE = 43, + anon_sym_STAR_STAR = 44, + anon_sym_EQ = 45, + anon_sym_def = 46, + anon_sym_DASH_GT = 47, + anon_sym_global = 48, + anon_sym_nonlocal = 49, + anon_sym_exec = 50, + anon_sym_type = 51, + anon_sym_class = 52, + anon_sym_AT = 53, + anon_sym_not = 54, + anon_sym_and = 55, + anon_sym_or = 56, + anon_sym_SLASH = 57, + anon_sym_PERCENT = 58, + anon_sym_SLASH_SLASH = 59, + anon_sym_AMP = 60, + anon_sym_CARET = 61, + anon_sym_LT_LT = 62, + anon_sym_TILDE = 63, + anon_sym_LT = 64, + anon_sym_LT_EQ = 65, + anon_sym_EQ_EQ = 66, + anon_sym_BANG_EQ = 67, + anon_sym_GT_EQ = 68, + anon_sym_GT = 69, + anon_sym_LT_GT = 70, + anon_sym_is = 71, + anon_sym_lambda = 72, + anon_sym_PLUS_EQ = 73, + anon_sym_DASH_EQ = 74, + anon_sym_STAR_EQ = 75, + anon_sym_SLASH_EQ = 76, + anon_sym_AT_EQ = 77, + anon_sym_SLASH_SLASH_EQ = 78, + anon_sym_PERCENT_EQ = 79, + anon_sym_STAR_STAR_EQ = 80, + anon_sym_GT_GT_EQ = 81, + anon_sym_LT_LT_EQ = 82, + anon_sym_AMP_EQ = 83, + anon_sym_CARET_EQ = 84, + anon_sym_PIPE_EQ = 85, + anon_sym_yield = 86, + sym_ellipsis = 87, + anon_sym_LBRACE2 = 88, + sym__escape_interpolation = 89, + sym_escape_sequence = 90, + sym__not_escape_sequence = 91, + aux_sym_format_specifier_token1 = 92, + sym_type_conversion = 93, + sym_integer = 94, + sym_float = 95, + anon_sym_await = 96, + sym_true = 97, + sym_false = 98, + sym_none = 99, + sym_comment = 100, + sym__semicolon = 101, + sym__newline = 102, + sym__indent = 103, + sym__dedent = 104, + sym__string_start = 105, + sym__string_content = 106, + sym__string_end = 107, + sym_module = 108, + sym__statement = 109, + sym__simple_statements = 110, + sym_import_statement = 111, + sym_import_prefix = 112, + sym_relative_import = 113, + sym_future_import_statement = 114, + sym_import_from_statement = 115, + sym__import_list = 116, + sym_aliased_import = 117, + sym_wildcard_import = 118, + sym_print_statement = 119, + sym_chevron = 120, + sym_assert_statement = 121, + sym_expression_statement = 122, + sym_named_expression = 123, + sym_return_statement = 124, + sym_delete_statement = 125, + sym_raise_statement = 126, + sym_pass_statement = 127, + sym_break_statement = 128, + sym_continue_statement = 129, + sym_if_statement = 130, + sym_elif_clause = 131, + sym_else_clause = 132, + sym_for_statement = 133, + sym_while_statement = 134, + sym_try_statement = 135, + sym_except_clause = 136, + sym_except_group_clause = 137, + sym_finally_clause = 138, + sym_with_statement = 139, + sym_with_clause = 140, + sym_with_item = 141, + sym_match_statement = 142, + sym_cases = 143, + sym_case_block = 144, + sym__match_patterns = 145, + sym_open_sequence_match_pattern = 146, + sym__match_pattern = 147, + sym_match_as_pattern = 148, + sym__match_or_pattern = 149, + sym_match_or_pattern = 150, + sym__closed_pattern = 151, + sym_match_literal_pattern = 152, + sym_match_capture_pattern = 153, + sym_match_value_pattern = 154, + sym_match_group_pattern = 155, + sym_match_sequence_pattern = 156, + sym__match_maybe_star_pattern = 157, + sym_match_star_pattern = 158, + sym_match_mapping_pattern = 159, + sym_match_double_star_pattern = 160, + sym_match_key_value_pattern = 161, + sym_match_class_pattern = 162, + sym_pattern_class_name = 163, + sym_match_positional_pattern = 164, + sym_match_keyword_pattern = 165, + sym_guard = 166, + sym_function_definition = 167, + sym_parameters = 168, + sym_lambda_parameters = 169, + sym_list_splat = 170, + sym_dictionary_splat = 171, + sym_global_statement = 172, + sym_nonlocal_statement = 173, + sym_exec_statement = 174, + sym_type_alias_statement = 175, + sym_class_definition = 176, + sym_type_parameters = 177, + sym__type_bound = 178, + sym_typevar_parameter = 179, + sym_typevartuple_parameter = 180, + sym_paramspec_parameter = 181, + sym__type_parameter = 182, + sym_parenthesized_list_splat = 183, + sym_argument_list = 184, + sym_decorated_definition = 185, + sym_decorator = 186, + sym_block = 187, + sym_expression_list = 188, + sym_dotted_name = 189, + sym__parameters = 190, + sym__patterns = 191, + sym_parameter = 192, + sym_pattern = 193, + sym_tuple_pattern = 194, + sym_list_pattern = 195, + sym_default_parameter = 196, + sym_typed_default_parameter = 197, + sym_list_splat_pattern = 198, + sym_dictionary_splat_pattern = 199, + sym__expression_within_for_in_clause = 200, + sym_expression = 201, + sym_primary_expression = 202, + sym_not_operator = 203, + sym_boolean_operator = 204, + sym_binary_operator = 205, + sym_unary_operator = 206, + sym_comparison_operator = 207, + sym_lambda = 208, + sym_lambda_within_for_in_clause = 209, + sym_assignment = 210, + sym_augmented_assignment = 211, + sym_pattern_list = 212, + sym__right_hand_side = 213, + sym_yield = 214, + sym_attribute = 215, + sym_subscript = 216, + sym_slice = 217, + sym_call = 218, + sym_typed_parameter = 219, + sym_type = 220, + sym_keyword_argument = 221, + sym_list = 222, + sym_set = 223, + sym_tuple = 224, + sym_dictionary = 225, + sym_pair = 226, + sym_list_comprehension = 227, + sym_dictionary_comprehension = 228, + sym_set_comprehension = 229, + sym_generator_expression = 230, + sym__comprehension_clauses = 231, + sym_parenthesized_expression = 232, + sym__collection_elements = 233, + sym_for_in_clause = 234, + sym_if_clause = 235, + sym_conditional_expression = 236, + sym_concatenated_string = 237, + sym_string = 238, + sym_string_content = 239, + sym_interpolation = 240, + sym__f_expression = 241, + sym_format_specifier = 242, + sym_await = 243, + sym_positional_separator = 244, + sym_keyword_separator = 245, + aux_sym_module_repeat1 = 246, + aux_sym__simple_statements_repeat1 = 247, + aux_sym_import_prefix_repeat1 = 248, + aux_sym__import_list_repeat1 = 249, + aux_sym_print_statement_repeat1 = 250, + aux_sym_assert_statement_repeat1 = 251, + aux_sym_if_statement_repeat1 = 252, + aux_sym_try_statement_repeat1 = 253, + aux_sym_try_statement_repeat2 = 254, + aux_sym_with_clause_repeat1 = 255, + aux_sym_cases_repeat1 = 256, + aux_sym_open_sequence_match_pattern_repeat1 = 257, + aux_sym_match_or_pattern_repeat1 = 258, + aux_sym_match_value_pattern_repeat1 = 259, + aux_sym_match_mapping_pattern_repeat1 = 260, + aux_sym_match_class_pattern_repeat1 = 261, + aux_sym_match_class_pattern_repeat2 = 262, + aux_sym_global_statement_repeat1 = 263, + aux_sym_type_parameters_repeat1 = 264, + aux_sym_argument_list_repeat1 = 265, + aux_sym_decorated_definition_repeat1 = 266, + aux_sym_expression_list_repeat1 = 267, + aux_sym__parameters_repeat1 = 268, + aux_sym__patterns_repeat1 = 269, + aux_sym_comparison_operator_repeat1 = 270, + aux_sym_subscript_repeat1 = 271, + aux_sym_dictionary_repeat1 = 272, + aux_sym__comprehension_clauses_repeat1 = 273, + aux_sym__collection_elements_repeat1 = 274, + aux_sym_for_in_clause_repeat1 = 275, + aux_sym_concatenated_string_repeat1 = 276, + aux_sym_string_repeat1 = 277, + aux_sym_string_content_repeat1 = 278, + aux_sym_format_specifier_repeat1 = 279, + alias_sym_format_expression = 280, + anon_alias_sym_isnot = 281, + anon_alias_sym_notin = 282, +}; + +static const char * const ts_symbol_names[] = { + [ts_builtin_sym_end] = "end", + [sym_identifier] = "identifier", + [anon_sym_import] = "import", + [anon_sym_DOT] = ".", + [anon_sym_from] = "from", + [anon_sym___future__] = "__future__", + [anon_sym_LPAREN] = "(", + [anon_sym_RPAREN] = ")", + [anon_sym_COMMA] = ",", + [anon_sym_as] = "as", + [anon_sym_STAR] = "*", + [anon_sym_print] = "print", + [anon_sym_GT_GT] = ">>", + [anon_sym_assert] = "assert", + [anon_sym_COLON_EQ] = ":=", + [anon_sym_return] = "return", + [anon_sym_del] = "del", + [anon_sym_raise] = "raise", + [anon_sym_pass] = "pass", + [anon_sym_break] = "break", + [anon_sym_continue] = "continue", + [anon_sym_if] = "if", + [anon_sym_COLON] = ":", + [anon_sym_elif] = "elif", + [anon_sym_else] = "else", + [anon_sym_async] = "async", + [anon_sym_for] = "for", + [anon_sym_in] = "in", + [anon_sym_while] = "while", + [anon_sym_try] = "try", + [anon_sym_except] = "except", + [anon_sym_except_STAR] = "except*", + [anon_sym_finally] = "finally", + [anon_sym_with] = "with", + [anon_sym_match] = "match", + [anon_sym_case] = "case", + [anon_sym_PIPE] = "|", + [anon_sym_DASH] = "-", + [anon_sym_PLUS] = "+", + [sym_match_wildcard_pattern] = "match_wildcard_pattern", + [anon_sym_LBRACK] = "[", + [anon_sym_RBRACK] = "]", + [anon_sym_LBRACE] = "{", + [anon_sym_RBRACE] = "}", + [anon_sym_STAR_STAR] = "**", + [anon_sym_EQ] = "=", + [anon_sym_def] = "def", + [anon_sym_DASH_GT] = "->", + [anon_sym_global] = "global", + [anon_sym_nonlocal] = "nonlocal", + [anon_sym_exec] = "exec", + [anon_sym_type] = "type", + [anon_sym_class] = "class", + [anon_sym_AT] = "@", + [anon_sym_not] = "not", + [anon_sym_and] = "and", + [anon_sym_or] = "or", + [anon_sym_SLASH] = "/", + [anon_sym_PERCENT] = "%", + [anon_sym_SLASH_SLASH] = "//", + [anon_sym_AMP] = "&", + [anon_sym_CARET] = "^", + [anon_sym_LT_LT] = "<<", + [anon_sym_TILDE] = "~", + [anon_sym_LT] = "<", + [anon_sym_LT_EQ] = "<=", + [anon_sym_EQ_EQ] = "==", + [anon_sym_BANG_EQ] = "!=", + [anon_sym_GT_EQ] = ">=", + [anon_sym_GT] = ">", + [anon_sym_LT_GT] = "<>", + [anon_sym_is] = "is", + [anon_sym_lambda] = "lambda", + [anon_sym_PLUS_EQ] = "+=", + [anon_sym_DASH_EQ] = "-=", + [anon_sym_STAR_EQ] = "*=", + [anon_sym_SLASH_EQ] = "/=", + [anon_sym_AT_EQ] = "@=", + [anon_sym_SLASH_SLASH_EQ] = "//=", + [anon_sym_PERCENT_EQ] = "%=", + [anon_sym_STAR_STAR_EQ] = "**=", + [anon_sym_GT_GT_EQ] = ">>=", + [anon_sym_LT_LT_EQ] = "<<=", + [anon_sym_AMP_EQ] = "&=", + [anon_sym_CARET_EQ] = "^=", + [anon_sym_PIPE_EQ] = "|=", + [anon_sym_yield] = "yield", + [sym_ellipsis] = "ellipsis", + [anon_sym_LBRACE2] = "{", + [sym__escape_interpolation] = "_escape_interpolation", + [sym_escape_sequence] = "escape_sequence", + [sym__not_escape_sequence] = "_not_escape_sequence", + [aux_sym_format_specifier_token1] = "format_specifier_token1", + [sym_type_conversion] = "type_conversion", + [sym_integer] = "integer", + [sym_float] = "float", + [anon_sym_await] = "await", + [sym_true] = "true", + [sym_false] = "false", + [sym_none] = "none", + [sym_comment] = "comment", + [sym__semicolon] = "_semicolon", + [sym__newline] = "_newline", + [sym__indent] = "_indent", + [sym__dedent] = "_dedent", + [sym__string_start] = "\"", + [sym__string_content] = "_string_content", + [sym__string_end] = "\"", + [sym_module] = "module", + [sym__statement] = "_statement", + [sym__simple_statements] = "_simple_statements", + [sym_import_statement] = "import_statement", + [sym_import_prefix] = "import_prefix", + [sym_relative_import] = "relative_import", + [sym_future_import_statement] = "future_import_statement", + [sym_import_from_statement] = "import_from_statement", + [sym__import_list] = "_import_list", + [sym_aliased_import] = "aliased_import", + [sym_wildcard_import] = "wildcard_import", + [sym_print_statement] = "print_statement", + [sym_chevron] = "chevron", + [sym_assert_statement] = "assert_statement", + [sym_expression_statement] = "expression_statement", + [sym_named_expression] = "named_expression", + [sym_return_statement] = "return_statement", + [sym_delete_statement] = "delete_statement", + [sym_raise_statement] = "raise_statement", + [sym_pass_statement] = "pass_statement", + [sym_break_statement] = "break_statement", + [sym_continue_statement] = "continue_statement", + [sym_if_statement] = "if_statement", + [sym_elif_clause] = "elif_clause", + [sym_else_clause] = "else_clause", + [sym_for_statement] = "for_statement", + [sym_while_statement] = "while_statement", + [sym_try_statement] = "try_statement", + [sym_except_clause] = "except_clause", + [sym_except_group_clause] = "except_group_clause", + [sym_finally_clause] = "finally_clause", + [sym_with_statement] = "with_statement", + [sym_with_clause] = "with_clause", + [sym_with_item] = "with_item", + [sym_match_statement] = "match_statement", + [sym_cases] = "cases", + [sym_case_block] = "case_block", + [sym__match_patterns] = "_match_patterns", + [sym_open_sequence_match_pattern] = "match_sequence_pattern", + [sym__match_pattern] = "_match_pattern", + [sym_match_as_pattern] = "match_as_pattern", + [sym__match_or_pattern] = "_match_or_pattern", + [sym_match_or_pattern] = "match_or_pattern", + [sym__closed_pattern] = "_closed_pattern", + [sym_match_literal_pattern] = "match_literal_pattern", + [sym_match_capture_pattern] = "match_capture_pattern", + [sym_match_value_pattern] = "match_value_pattern", + [sym_match_group_pattern] = "match_group_pattern", + [sym_match_sequence_pattern] = "match_sequence_pattern", + [sym__match_maybe_star_pattern] = "_match_maybe_star_pattern", + [sym_match_star_pattern] = "match_star_pattern", + [sym_match_mapping_pattern] = "match_mapping_pattern", + [sym_match_double_star_pattern] = "match_double_star_pattern", + [sym_match_key_value_pattern] = "match_key_value_pattern", + [sym_match_class_pattern] = "match_class_pattern", + [sym_pattern_class_name] = "pattern_class_name", + [sym_match_positional_pattern] = "match_positional_pattern", + [sym_match_keyword_pattern] = "match_keyword_pattern", + [sym_guard] = "guard", + [sym_function_definition] = "function_definition", + [sym_parameters] = "parameters", + [sym_lambda_parameters] = "lambda_parameters", + [sym_list_splat] = "list_splat", + [sym_dictionary_splat] = "dictionary_splat", + [sym_global_statement] = "global_statement", + [sym_nonlocal_statement] = "nonlocal_statement", + [sym_exec_statement] = "exec_statement", + [sym_type_alias_statement] = "type_alias_statement", + [sym_class_definition] = "class_definition", + [sym_type_parameters] = "type_parameters", + [sym__type_bound] = "_type_bound", + [sym_typevar_parameter] = "typevar_parameter", + [sym_typevartuple_parameter] = "typevartuple_parameter", + [sym_paramspec_parameter] = "paramspec_parameter", + [sym__type_parameter] = "_type_parameter", + [sym_parenthesized_list_splat] = "parenthesized_list_splat", + [sym_argument_list] = "argument_list", + [sym_decorated_definition] = "decorated_definition", + [sym_decorator] = "decorator", + [sym_block] = "block", + [sym_expression_list] = "expression_list", + [sym_dotted_name] = "dotted_name", + [sym__parameters] = "_parameters", + [sym__patterns] = "_patterns", + [sym_parameter] = "parameter", + [sym_pattern] = "pattern", + [sym_tuple_pattern] = "tuple_pattern", + [sym_list_pattern] = "list_pattern", + [sym_default_parameter] = "default_parameter", + [sym_typed_default_parameter] = "typed_default_parameter", + [sym_list_splat_pattern] = "list_splat_pattern", + [sym_dictionary_splat_pattern] = "dictionary_splat_pattern", + [sym__expression_within_for_in_clause] = "_expression_within_for_in_clause", + [sym_expression] = "expression", + [sym_primary_expression] = "primary_expression", + [sym_not_operator] = "not_operator", + [sym_boolean_operator] = "boolean_operator", + [sym_binary_operator] = "binary_operator", + [sym_unary_operator] = "unary_operator", + [sym_comparison_operator] = "comparison_operator", + [sym_lambda] = "lambda", + [sym_lambda_within_for_in_clause] = "lambda", + [sym_assignment] = "assignment", + [sym_augmented_assignment] = "augmented_assignment", + [sym_pattern_list] = "pattern_list", + [sym__right_hand_side] = "_right_hand_side", + [sym_yield] = "yield", + [sym_attribute] = "attribute", + [sym_subscript] = "subscript", + [sym_slice] = "slice", + [sym_call] = "call", + [sym_typed_parameter] = "typed_parameter", + [sym_type] = "type", + [sym_keyword_argument] = "keyword_argument", + [sym_list] = "list", + [sym_set] = "set", + [sym_tuple] = "tuple", + [sym_dictionary] = "dictionary", + [sym_pair] = "pair", + [sym_list_comprehension] = "list_comprehension", + [sym_dictionary_comprehension] = "dictionary_comprehension", + [sym_set_comprehension] = "set_comprehension", + [sym_generator_expression] = "generator_expression", + [sym__comprehension_clauses] = "_comprehension_clauses", + [sym_parenthesized_expression] = "parenthesized_expression", + [sym__collection_elements] = "_collection_elements", + [sym_for_in_clause] = "for_in_clause", + [sym_if_clause] = "if_clause", + [sym_conditional_expression] = "conditional_expression", + [sym_concatenated_string] = "concatenated_string", + [sym_string] = "string", + [sym_string_content] = "string_content", + [sym_interpolation] = "interpolation", + [sym__f_expression] = "_f_expression", + [sym_format_specifier] = "format_specifier", + [sym_await] = "await", + [sym_positional_separator] = "positional_separator", + [sym_keyword_separator] = "keyword_separator", + [aux_sym_module_repeat1] = "module_repeat1", + [aux_sym__simple_statements_repeat1] = "_simple_statements_repeat1", + [aux_sym_import_prefix_repeat1] = "import_prefix_repeat1", + [aux_sym__import_list_repeat1] = "_import_list_repeat1", + [aux_sym_print_statement_repeat1] = "print_statement_repeat1", + [aux_sym_assert_statement_repeat1] = "assert_statement_repeat1", + [aux_sym_if_statement_repeat1] = "if_statement_repeat1", + [aux_sym_try_statement_repeat1] = "try_statement_repeat1", + [aux_sym_try_statement_repeat2] = "try_statement_repeat2", + [aux_sym_with_clause_repeat1] = "with_clause_repeat1", + [aux_sym_cases_repeat1] = "cases_repeat1", + [aux_sym_open_sequence_match_pattern_repeat1] = "open_sequence_match_pattern_repeat1", + [aux_sym_match_or_pattern_repeat1] = "match_or_pattern_repeat1", + [aux_sym_match_value_pattern_repeat1] = "match_value_pattern_repeat1", + [aux_sym_match_mapping_pattern_repeat1] = "match_mapping_pattern_repeat1", + [aux_sym_match_class_pattern_repeat1] = "match_class_pattern_repeat1", + [aux_sym_match_class_pattern_repeat2] = "match_class_pattern_repeat2", + [aux_sym_global_statement_repeat1] = "global_statement_repeat1", + [aux_sym_type_parameters_repeat1] = "type_parameters_repeat1", + [aux_sym_argument_list_repeat1] = "argument_list_repeat1", + [aux_sym_decorated_definition_repeat1] = "decorated_definition_repeat1", + [aux_sym_expression_list_repeat1] = "expression_list_repeat1", + [aux_sym__parameters_repeat1] = "_parameters_repeat1", + [aux_sym__patterns_repeat1] = "_patterns_repeat1", + [aux_sym_comparison_operator_repeat1] = "comparison_operator_repeat1", + [aux_sym_subscript_repeat1] = "subscript_repeat1", + [aux_sym_dictionary_repeat1] = "dictionary_repeat1", + [aux_sym__comprehension_clauses_repeat1] = "_comprehension_clauses_repeat1", + [aux_sym__collection_elements_repeat1] = "_collection_elements_repeat1", + [aux_sym_for_in_clause_repeat1] = "for_in_clause_repeat1", + [aux_sym_concatenated_string_repeat1] = "concatenated_string_repeat1", + [aux_sym_string_repeat1] = "string_repeat1", + [aux_sym_string_content_repeat1] = "string_content_repeat1", + [aux_sym_format_specifier_repeat1] = "format_specifier_repeat1", + [alias_sym_format_expression] = "format_expression", + [anon_alias_sym_isnot] = "is not", + [anon_alias_sym_notin] = "not in", +}; + +static const TSSymbol ts_symbol_map[] = { + [ts_builtin_sym_end] = ts_builtin_sym_end, + [sym_identifier] = sym_identifier, + [anon_sym_import] = anon_sym_import, + [anon_sym_DOT] = anon_sym_DOT, + [anon_sym_from] = anon_sym_from, + [anon_sym___future__] = anon_sym___future__, + [anon_sym_LPAREN] = anon_sym_LPAREN, + [anon_sym_RPAREN] = anon_sym_RPAREN, + [anon_sym_COMMA] = anon_sym_COMMA, + [anon_sym_as] = anon_sym_as, + [anon_sym_STAR] = anon_sym_STAR, + [anon_sym_print] = anon_sym_print, + [anon_sym_GT_GT] = anon_sym_GT_GT, + [anon_sym_assert] = anon_sym_assert, + [anon_sym_COLON_EQ] = anon_sym_COLON_EQ, + [anon_sym_return] = anon_sym_return, + [anon_sym_del] = anon_sym_del, + [anon_sym_raise] = anon_sym_raise, + [anon_sym_pass] = anon_sym_pass, + [anon_sym_break] = anon_sym_break, + [anon_sym_continue] = anon_sym_continue, + [anon_sym_if] = anon_sym_if, + [anon_sym_COLON] = anon_sym_COLON, + [anon_sym_elif] = anon_sym_elif, + [anon_sym_else] = anon_sym_else, + [anon_sym_async] = anon_sym_async, + [anon_sym_for] = anon_sym_for, + [anon_sym_in] = anon_sym_in, + [anon_sym_while] = anon_sym_while, + [anon_sym_try] = anon_sym_try, + [anon_sym_except] = anon_sym_except, + [anon_sym_except_STAR] = anon_sym_except_STAR, + [anon_sym_finally] = anon_sym_finally, + [anon_sym_with] = anon_sym_with, + [anon_sym_match] = anon_sym_match, + [anon_sym_case] = anon_sym_case, + [anon_sym_PIPE] = anon_sym_PIPE, + [anon_sym_DASH] = anon_sym_DASH, + [anon_sym_PLUS] = anon_sym_PLUS, + [sym_match_wildcard_pattern] = sym_match_wildcard_pattern, + [anon_sym_LBRACK] = anon_sym_LBRACK, + [anon_sym_RBRACK] = anon_sym_RBRACK, + [anon_sym_LBRACE] = anon_sym_LBRACE, + [anon_sym_RBRACE] = anon_sym_RBRACE, + [anon_sym_STAR_STAR] = anon_sym_STAR_STAR, + [anon_sym_EQ] = anon_sym_EQ, + [anon_sym_def] = anon_sym_def, + [anon_sym_DASH_GT] = anon_sym_DASH_GT, + [anon_sym_global] = anon_sym_global, + [anon_sym_nonlocal] = anon_sym_nonlocal, + [anon_sym_exec] = anon_sym_exec, + [anon_sym_type] = anon_sym_type, + [anon_sym_class] = anon_sym_class, + [anon_sym_AT] = anon_sym_AT, + [anon_sym_not] = anon_sym_not, + [anon_sym_and] = anon_sym_and, + [anon_sym_or] = anon_sym_or, + [anon_sym_SLASH] = anon_sym_SLASH, + [anon_sym_PERCENT] = anon_sym_PERCENT, + [anon_sym_SLASH_SLASH] = anon_sym_SLASH_SLASH, + [anon_sym_AMP] = anon_sym_AMP, + [anon_sym_CARET] = anon_sym_CARET, + [anon_sym_LT_LT] = anon_sym_LT_LT, + [anon_sym_TILDE] = anon_sym_TILDE, + [anon_sym_LT] = anon_sym_LT, + [anon_sym_LT_EQ] = anon_sym_LT_EQ, + [anon_sym_EQ_EQ] = anon_sym_EQ_EQ, + [anon_sym_BANG_EQ] = anon_sym_BANG_EQ, + [anon_sym_GT_EQ] = anon_sym_GT_EQ, + [anon_sym_GT] = anon_sym_GT, + [anon_sym_LT_GT] = anon_sym_LT_GT, + [anon_sym_is] = anon_sym_is, + [anon_sym_lambda] = anon_sym_lambda, + [anon_sym_PLUS_EQ] = anon_sym_PLUS_EQ, + [anon_sym_DASH_EQ] = anon_sym_DASH_EQ, + [anon_sym_STAR_EQ] = anon_sym_STAR_EQ, + [anon_sym_SLASH_EQ] = anon_sym_SLASH_EQ, + [anon_sym_AT_EQ] = anon_sym_AT_EQ, + [anon_sym_SLASH_SLASH_EQ] = anon_sym_SLASH_SLASH_EQ, + [anon_sym_PERCENT_EQ] = anon_sym_PERCENT_EQ, + [anon_sym_STAR_STAR_EQ] = anon_sym_STAR_STAR_EQ, + [anon_sym_GT_GT_EQ] = anon_sym_GT_GT_EQ, + [anon_sym_LT_LT_EQ] = anon_sym_LT_LT_EQ, + [anon_sym_AMP_EQ] = anon_sym_AMP_EQ, + [anon_sym_CARET_EQ] = anon_sym_CARET_EQ, + [anon_sym_PIPE_EQ] = anon_sym_PIPE_EQ, + [anon_sym_yield] = anon_sym_yield, + [sym_ellipsis] = sym_ellipsis, + [anon_sym_LBRACE2] = anon_sym_LBRACE, + [sym__escape_interpolation] = sym__escape_interpolation, + [sym_escape_sequence] = sym_escape_sequence, + [sym__not_escape_sequence] = sym__not_escape_sequence, + [aux_sym_format_specifier_token1] = aux_sym_format_specifier_token1, + [sym_type_conversion] = sym_type_conversion, + [sym_integer] = sym_integer, + [sym_float] = sym_float, + [anon_sym_await] = anon_sym_await, + [sym_true] = sym_true, + [sym_false] = sym_false, + [sym_none] = sym_none, + [sym_comment] = sym_comment, + [sym__semicolon] = sym__semicolon, + [sym__newline] = sym__newline, + [sym__indent] = sym__indent, + [sym__dedent] = sym__dedent, + [sym__string_start] = sym__string_start, + [sym__string_content] = sym__string_content, + [sym__string_end] = sym__string_start, + [sym_module] = sym_module, + [sym__statement] = sym__statement, + [sym__simple_statements] = sym__simple_statements, + [sym_import_statement] = sym_import_statement, + [sym_import_prefix] = sym_import_prefix, + [sym_relative_import] = sym_relative_import, + [sym_future_import_statement] = sym_future_import_statement, + [sym_import_from_statement] = sym_import_from_statement, + [sym__import_list] = sym__import_list, + [sym_aliased_import] = sym_aliased_import, + [sym_wildcard_import] = sym_wildcard_import, + [sym_print_statement] = sym_print_statement, + [sym_chevron] = sym_chevron, + [sym_assert_statement] = sym_assert_statement, + [sym_expression_statement] = sym_expression_statement, + [sym_named_expression] = sym_named_expression, + [sym_return_statement] = sym_return_statement, + [sym_delete_statement] = sym_delete_statement, + [sym_raise_statement] = sym_raise_statement, + [sym_pass_statement] = sym_pass_statement, + [sym_break_statement] = sym_break_statement, + [sym_continue_statement] = sym_continue_statement, + [sym_if_statement] = sym_if_statement, + [sym_elif_clause] = sym_elif_clause, + [sym_else_clause] = sym_else_clause, + [sym_for_statement] = sym_for_statement, + [sym_while_statement] = sym_while_statement, + [sym_try_statement] = sym_try_statement, + [sym_except_clause] = sym_except_clause, + [sym_except_group_clause] = sym_except_group_clause, + [sym_finally_clause] = sym_finally_clause, + [sym_with_statement] = sym_with_statement, + [sym_with_clause] = sym_with_clause, + [sym_with_item] = sym_with_item, + [sym_match_statement] = sym_match_statement, + [sym_cases] = sym_cases, + [sym_case_block] = sym_case_block, + [sym__match_patterns] = sym__match_patterns, + [sym_open_sequence_match_pattern] = sym_match_sequence_pattern, + [sym__match_pattern] = sym__match_pattern, + [sym_match_as_pattern] = sym_match_as_pattern, + [sym__match_or_pattern] = sym__match_or_pattern, + [sym_match_or_pattern] = sym_match_or_pattern, + [sym__closed_pattern] = sym__closed_pattern, + [sym_match_literal_pattern] = sym_match_literal_pattern, + [sym_match_capture_pattern] = sym_match_capture_pattern, + [sym_match_value_pattern] = sym_match_value_pattern, + [sym_match_group_pattern] = sym_match_group_pattern, + [sym_match_sequence_pattern] = sym_match_sequence_pattern, + [sym__match_maybe_star_pattern] = sym__match_maybe_star_pattern, + [sym_match_star_pattern] = sym_match_star_pattern, + [sym_match_mapping_pattern] = sym_match_mapping_pattern, + [sym_match_double_star_pattern] = sym_match_double_star_pattern, + [sym_match_key_value_pattern] = sym_match_key_value_pattern, + [sym_match_class_pattern] = sym_match_class_pattern, + [sym_pattern_class_name] = sym_pattern_class_name, + [sym_match_positional_pattern] = sym_match_positional_pattern, + [sym_match_keyword_pattern] = sym_match_keyword_pattern, + [sym_guard] = sym_guard, + [sym_function_definition] = sym_function_definition, + [sym_parameters] = sym_parameters, + [sym_lambda_parameters] = sym_lambda_parameters, + [sym_list_splat] = sym_list_splat, + [sym_dictionary_splat] = sym_dictionary_splat, + [sym_global_statement] = sym_global_statement, + [sym_nonlocal_statement] = sym_nonlocal_statement, + [sym_exec_statement] = sym_exec_statement, + [sym_type_alias_statement] = sym_type_alias_statement, + [sym_class_definition] = sym_class_definition, + [sym_type_parameters] = sym_type_parameters, + [sym__type_bound] = sym__type_bound, + [sym_typevar_parameter] = sym_typevar_parameter, + [sym_typevartuple_parameter] = sym_typevartuple_parameter, + [sym_paramspec_parameter] = sym_paramspec_parameter, + [sym__type_parameter] = sym__type_parameter, + [sym_parenthesized_list_splat] = sym_parenthesized_list_splat, + [sym_argument_list] = sym_argument_list, + [sym_decorated_definition] = sym_decorated_definition, + [sym_decorator] = sym_decorator, + [sym_block] = sym_block, + [sym_expression_list] = sym_expression_list, + [sym_dotted_name] = sym_dotted_name, + [sym__parameters] = sym__parameters, + [sym__patterns] = sym__patterns, + [sym_parameter] = sym_parameter, + [sym_pattern] = sym_pattern, + [sym_tuple_pattern] = sym_tuple_pattern, + [sym_list_pattern] = sym_list_pattern, + [sym_default_parameter] = sym_default_parameter, + [sym_typed_default_parameter] = sym_typed_default_parameter, + [sym_list_splat_pattern] = sym_list_splat_pattern, + [sym_dictionary_splat_pattern] = sym_dictionary_splat_pattern, + [sym__expression_within_for_in_clause] = sym__expression_within_for_in_clause, + [sym_expression] = sym_expression, + [sym_primary_expression] = sym_primary_expression, + [sym_not_operator] = sym_not_operator, + [sym_boolean_operator] = sym_boolean_operator, + [sym_binary_operator] = sym_binary_operator, + [sym_unary_operator] = sym_unary_operator, + [sym_comparison_operator] = sym_comparison_operator, + [sym_lambda] = sym_lambda, + [sym_lambda_within_for_in_clause] = sym_lambda, + [sym_assignment] = sym_assignment, + [sym_augmented_assignment] = sym_augmented_assignment, + [sym_pattern_list] = sym_pattern_list, + [sym__right_hand_side] = sym__right_hand_side, + [sym_yield] = sym_yield, + [sym_attribute] = sym_attribute, + [sym_subscript] = sym_subscript, + [sym_slice] = sym_slice, + [sym_call] = sym_call, + [sym_typed_parameter] = sym_typed_parameter, + [sym_type] = sym_type, + [sym_keyword_argument] = sym_keyword_argument, + [sym_list] = sym_list, + [sym_set] = sym_set, + [sym_tuple] = sym_tuple, + [sym_dictionary] = sym_dictionary, + [sym_pair] = sym_pair, + [sym_list_comprehension] = sym_list_comprehension, + [sym_dictionary_comprehension] = sym_dictionary_comprehension, + [sym_set_comprehension] = sym_set_comprehension, + [sym_generator_expression] = sym_generator_expression, + [sym__comprehension_clauses] = sym__comprehension_clauses, + [sym_parenthesized_expression] = sym_parenthesized_expression, + [sym__collection_elements] = sym__collection_elements, + [sym_for_in_clause] = sym_for_in_clause, + [sym_if_clause] = sym_if_clause, + [sym_conditional_expression] = sym_conditional_expression, + [sym_concatenated_string] = sym_concatenated_string, + [sym_string] = sym_string, + [sym_string_content] = sym_string_content, + [sym_interpolation] = sym_interpolation, + [sym__f_expression] = sym__f_expression, + [sym_format_specifier] = sym_format_specifier, + [sym_await] = sym_await, + [sym_positional_separator] = sym_positional_separator, + [sym_keyword_separator] = sym_keyword_separator, + [aux_sym_module_repeat1] = aux_sym_module_repeat1, + [aux_sym__simple_statements_repeat1] = aux_sym__simple_statements_repeat1, + [aux_sym_import_prefix_repeat1] = aux_sym_import_prefix_repeat1, + [aux_sym__import_list_repeat1] = aux_sym__import_list_repeat1, + [aux_sym_print_statement_repeat1] = aux_sym_print_statement_repeat1, + [aux_sym_assert_statement_repeat1] = aux_sym_assert_statement_repeat1, + [aux_sym_if_statement_repeat1] = aux_sym_if_statement_repeat1, + [aux_sym_try_statement_repeat1] = aux_sym_try_statement_repeat1, + [aux_sym_try_statement_repeat2] = aux_sym_try_statement_repeat2, + [aux_sym_with_clause_repeat1] = aux_sym_with_clause_repeat1, + [aux_sym_cases_repeat1] = aux_sym_cases_repeat1, + [aux_sym_open_sequence_match_pattern_repeat1] = aux_sym_open_sequence_match_pattern_repeat1, + [aux_sym_match_or_pattern_repeat1] = aux_sym_match_or_pattern_repeat1, + [aux_sym_match_value_pattern_repeat1] = aux_sym_match_value_pattern_repeat1, + [aux_sym_match_mapping_pattern_repeat1] = aux_sym_match_mapping_pattern_repeat1, + [aux_sym_match_class_pattern_repeat1] = aux_sym_match_class_pattern_repeat1, + [aux_sym_match_class_pattern_repeat2] = aux_sym_match_class_pattern_repeat2, + [aux_sym_global_statement_repeat1] = aux_sym_global_statement_repeat1, + [aux_sym_type_parameters_repeat1] = aux_sym_type_parameters_repeat1, + [aux_sym_argument_list_repeat1] = aux_sym_argument_list_repeat1, + [aux_sym_decorated_definition_repeat1] = aux_sym_decorated_definition_repeat1, + [aux_sym_expression_list_repeat1] = aux_sym_expression_list_repeat1, + [aux_sym__parameters_repeat1] = aux_sym__parameters_repeat1, + [aux_sym__patterns_repeat1] = aux_sym__patterns_repeat1, + [aux_sym_comparison_operator_repeat1] = aux_sym_comparison_operator_repeat1, + [aux_sym_subscript_repeat1] = aux_sym_subscript_repeat1, + [aux_sym_dictionary_repeat1] = aux_sym_dictionary_repeat1, + [aux_sym__comprehension_clauses_repeat1] = aux_sym__comprehension_clauses_repeat1, + [aux_sym__collection_elements_repeat1] = aux_sym__collection_elements_repeat1, + [aux_sym_for_in_clause_repeat1] = aux_sym_for_in_clause_repeat1, + [aux_sym_concatenated_string_repeat1] = aux_sym_concatenated_string_repeat1, + [aux_sym_string_repeat1] = aux_sym_string_repeat1, + [aux_sym_string_content_repeat1] = aux_sym_string_content_repeat1, + [aux_sym_format_specifier_repeat1] = aux_sym_format_specifier_repeat1, + [alias_sym_format_expression] = alias_sym_format_expression, + [anon_alias_sym_isnot] = anon_alias_sym_isnot, + [anon_alias_sym_notin] = anon_alias_sym_notin, +}; + +static const TSSymbolMetadata ts_symbol_metadata[] = { + [ts_builtin_sym_end] = { + .visible = false, + .named = true, + }, + [sym_identifier] = { + .visible = true, + .named = true, + }, + [anon_sym_import] = { + .visible = true, + .named = false, + }, + [anon_sym_DOT] = { + .visible = true, + .named = false, + }, + [anon_sym_from] = { + .visible = true, + .named = false, + }, + [anon_sym___future__] = { + .visible = true, + .named = false, + }, + [anon_sym_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_RPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_COMMA] = { + .visible = true, + .named = false, + }, + [anon_sym_as] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR] = { + .visible = true, + .named = false, + }, + [anon_sym_print] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_assert] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_return] = { + .visible = true, + .named = false, + }, + [anon_sym_del] = { + .visible = true, + .named = false, + }, + [anon_sym_raise] = { + .visible = true, + .named = false, + }, + [anon_sym_pass] = { + .visible = true, + .named = false, + }, + [anon_sym_break] = { + .visible = true, + .named = false, + }, + [anon_sym_continue] = { + .visible = true, + .named = false, + }, + [anon_sym_if] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON] = { + .visible = true, + .named = false, + }, + [anon_sym_elif] = { + .visible = true, + .named = false, + }, + [anon_sym_else] = { + .visible = true, + .named = false, + }, + [anon_sym_async] = { + .visible = true, + .named = false, + }, + [anon_sym_for] = { + .visible = true, + .named = false, + }, + [anon_sym_in] = { + .visible = true, + .named = false, + }, + [anon_sym_while] = { + .visible = true, + .named = false, + }, + [anon_sym_try] = { + .visible = true, + .named = false, + }, + [anon_sym_except] = { + .visible = true, + .named = false, + }, + [anon_sym_except_STAR] = { + .visible = true, + .named = false, + }, + [anon_sym_finally] = { + .visible = true, + .named = false, + }, + [anon_sym_with] = { + .visible = true, + .named = false, + }, + [anon_sym_match] = { + .visible = true, + .named = false, + }, + [anon_sym_case] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS] = { + .visible = true, + .named = false, + }, + [sym_match_wildcard_pattern] = { + .visible = true, + .named = true, + }, + [anon_sym_LBRACK] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACK] = { + .visible = true, + .named = false, + }, + [anon_sym_LBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR_STAR] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_def] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_global] = { + .visible = true, + .named = false, + }, + [anon_sym_nonlocal] = { + .visible = true, + .named = false, + }, + [anon_sym_exec] = { + .visible = true, + .named = false, + }, + [anon_sym_type] = { + .visible = true, + .named = false, + }, + [anon_sym_class] = { + .visible = true, + .named = false, + }, + [anon_sym_AT] = { + .visible = true, + .named = false, + }, + [anon_sym_not] = { + .visible = true, + .named = false, + }, + [anon_sym_and] = { + .visible = true, + .named = false, + }, + [anon_sym_or] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH] = { + .visible = true, + .named = false, + }, + [anon_sym_PERCENT] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH_SLASH] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP] = { + .visible = true, + .named = false, + }, + [anon_sym_CARET] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_LT] = { + .visible = true, + .named = false, + }, + [anon_sym_TILDE] = { + .visible = true, + .named = false, + }, + [anon_sym_LT] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_BANG_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_is] = { + .visible = true, + .named = false, + }, + [anon_sym_lambda] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_AT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH_SLASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_PERCENT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR_STAR_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_GT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_LT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_CARET_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_yield] = { + .visible = true, + .named = false, + }, + [sym_ellipsis] = { + .visible = true, + .named = true, + }, + [anon_sym_LBRACE2] = { + .visible = true, + .named = false, + }, + [sym__escape_interpolation] = { + .visible = false, + .named = true, + }, + [sym_escape_sequence] = { + .visible = true, + .named = true, + }, + [sym__not_escape_sequence] = { + .visible = false, + .named = true, + }, + [aux_sym_format_specifier_token1] = { + .visible = false, + .named = false, + }, + [sym_type_conversion] = { + .visible = true, + .named = true, + }, + [sym_integer] = { + .visible = true, + .named = true, + }, + [sym_float] = { + .visible = true, + .named = true, + }, + [anon_sym_await] = { + .visible = true, + .named = false, + }, + [sym_true] = { + .visible = true, + .named = true, + }, + [sym_false] = { + .visible = true, + .named = true, + }, + [sym_none] = { + .visible = true, + .named = true, + }, + [sym_comment] = { + .visible = true, + .named = true, + }, + [sym__semicolon] = { + .visible = false, + .named = true, + }, + [sym__newline] = { + .visible = false, + .named = true, + }, + [sym__indent] = { + .visible = false, + .named = true, + }, + [sym__dedent] = { + .visible = false, + .named = true, + }, + [sym__string_start] = { + .visible = true, + .named = false, + }, + [sym__string_content] = { + .visible = false, + .named = true, + }, + [sym__string_end] = { + .visible = true, + .named = false, + }, + [sym_module] = { + .visible = true, + .named = true, + }, + [sym__statement] = { + .visible = false, + .named = true, + }, + [sym__simple_statements] = { + .visible = false, + .named = true, + }, + [sym_import_statement] = { + .visible = true, + .named = true, + }, + [sym_import_prefix] = { + .visible = true, + .named = true, + }, + [sym_relative_import] = { + .visible = true, + .named = true, + }, + [sym_future_import_statement] = { + .visible = true, + .named = true, + }, + [sym_import_from_statement] = { + .visible = true, + .named = true, + }, + [sym__import_list] = { + .visible = false, + .named = true, + }, + [sym_aliased_import] = { + .visible = true, + .named = true, + }, + [sym_wildcard_import] = { + .visible = true, + .named = true, + }, + [sym_print_statement] = { + .visible = true, + .named = true, + }, + [sym_chevron] = { + .visible = true, + .named = true, + }, + [sym_assert_statement] = { + .visible = true, + .named = true, + }, + [sym_expression_statement] = { + .visible = true, + .named = true, + }, + [sym_named_expression] = { + .visible = true, + .named = true, + }, + [sym_return_statement] = { + .visible = true, + .named = true, + }, + [sym_delete_statement] = { + .visible = true, + .named = true, + }, + [sym_raise_statement] = { + .visible = true, + .named = true, + }, + [sym_pass_statement] = { + .visible = true, + .named = true, + }, + [sym_break_statement] = { + .visible = true, + .named = true, + }, + [sym_continue_statement] = { + .visible = true, + .named = true, + }, + [sym_if_statement] = { + .visible = true, + .named = true, + }, + [sym_elif_clause] = { + .visible = true, + .named = true, + }, + [sym_else_clause] = { + .visible = true, + .named = true, + }, + [sym_for_statement] = { + .visible = true, + .named = true, + }, + [sym_while_statement] = { + .visible = true, + .named = true, + }, + [sym_try_statement] = { + .visible = true, + .named = true, + }, + [sym_except_clause] = { + .visible = true, + .named = true, + }, + [sym_except_group_clause] = { + .visible = true, + .named = true, + }, + [sym_finally_clause] = { + .visible = true, + .named = true, + }, + [sym_with_statement] = { + .visible = true, + .named = true, + }, + [sym_with_clause] = { + .visible = true, + .named = true, + }, + [sym_with_item] = { + .visible = true, + .named = true, + }, + [sym_match_statement] = { + .visible = true, + .named = true, + }, + [sym_cases] = { + .visible = true, + .named = true, + }, + [sym_case_block] = { + .visible = true, + .named = true, + }, + [sym__match_patterns] = { + .visible = false, + .named = true, + }, + [sym_open_sequence_match_pattern] = { + .visible = true, + .named = true, + }, + [sym__match_pattern] = { + .visible = false, + .named = true, + }, + [sym_match_as_pattern] = { + .visible = true, + .named = true, + }, + [sym__match_or_pattern] = { + .visible = false, + .named = true, + }, + [sym_match_or_pattern] = { + .visible = true, + .named = true, + }, + [sym__closed_pattern] = { + .visible = false, + .named = true, + }, + [sym_match_literal_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_capture_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_value_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_group_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_sequence_pattern] = { + .visible = true, + .named = true, + }, + [sym__match_maybe_star_pattern] = { + .visible = false, + .named = true, + }, + [sym_match_star_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_mapping_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_double_star_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_key_value_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_class_pattern] = { + .visible = true, + .named = true, + }, + [sym_pattern_class_name] = { + .visible = true, + .named = true, + }, + [sym_match_positional_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_keyword_pattern] = { + .visible = true, + .named = true, + }, + [sym_guard] = { + .visible = true, + .named = true, + }, + [sym_function_definition] = { + .visible = true, + .named = true, + }, + [sym_parameters] = { + .visible = true, + .named = true, + }, + [sym_lambda_parameters] = { + .visible = true, + .named = true, + }, + [sym_list_splat] = { + .visible = true, + .named = true, + }, + [sym_dictionary_splat] = { + .visible = true, + .named = true, + }, + [sym_global_statement] = { + .visible = true, + .named = true, + }, + [sym_nonlocal_statement] = { + .visible = true, + .named = true, + }, + [sym_exec_statement] = { + .visible = true, + .named = true, + }, + [sym_type_alias_statement] = { + .visible = true, + .named = true, + }, + [sym_class_definition] = { + .visible = true, + .named = true, + }, + [sym_type_parameters] = { + .visible = true, + .named = true, + }, + [sym__type_bound] = { + .visible = false, + .named = true, + }, + [sym_typevar_parameter] = { + .visible = true, + .named = true, + }, + [sym_typevartuple_parameter] = { + .visible = true, + .named = true, + }, + [sym_paramspec_parameter] = { + .visible = true, + .named = true, + }, + [sym__type_parameter] = { + .visible = false, + .named = true, + }, + [sym_parenthesized_list_splat] = { + .visible = true, + .named = true, + }, + [sym_argument_list] = { + .visible = true, + .named = true, + }, + [sym_decorated_definition] = { + .visible = true, + .named = true, + }, + [sym_decorator] = { + .visible = true, + .named = true, + }, + [sym_block] = { + .visible = true, + .named = true, + }, + [sym_expression_list] = { + .visible = true, + .named = true, + }, + [sym_dotted_name] = { + .visible = true, + .named = true, + }, + [sym__parameters] = { + .visible = false, + .named = true, + }, + [sym__patterns] = { + .visible = false, + .named = true, + }, + [sym_parameter] = { + .visible = false, + .named = true, + .supertype = true, + }, + [sym_pattern] = { + .visible = false, + .named = true, + .supertype = true, + }, + [sym_tuple_pattern] = { + .visible = true, + .named = true, + }, + [sym_list_pattern] = { + .visible = true, + .named = true, + }, + [sym_default_parameter] = { + .visible = true, + .named = true, + }, + [sym_typed_default_parameter] = { + .visible = true, + .named = true, + }, + [sym_list_splat_pattern] = { + .visible = true, + .named = true, + }, + [sym_dictionary_splat_pattern] = { + .visible = true, + .named = true, + }, + [sym__expression_within_for_in_clause] = { + .visible = false, + .named = true, + }, + [sym_expression] = { + .visible = false, + .named = true, + .supertype = true, + }, + [sym_primary_expression] = { + .visible = false, + .named = true, + .supertype = true, + }, + [sym_not_operator] = { + .visible = true, + .named = true, + }, + [sym_boolean_operator] = { + .visible = true, + .named = true, + }, + [sym_binary_operator] = { + .visible = true, + .named = true, + }, + [sym_unary_operator] = { + .visible = true, + .named = true, + }, + [sym_comparison_operator] = { + .visible = true, + .named = true, + }, + [sym_lambda] = { + .visible = true, + .named = true, + }, + [sym_lambda_within_for_in_clause] = { + .visible = true, + .named = true, + }, + [sym_assignment] = { + .visible = true, + .named = true, + }, + [sym_augmented_assignment] = { + .visible = true, + .named = true, + }, + [sym_pattern_list] = { + .visible = true, + .named = true, + }, + [sym__right_hand_side] = { + .visible = false, + .named = true, + }, + [sym_yield] = { + .visible = true, + .named = true, + }, + [sym_attribute] = { + .visible = true, + .named = true, + }, + [sym_subscript] = { + .visible = true, + .named = true, + }, + [sym_slice] = { + .visible = true, + .named = true, + }, + [sym_call] = { + .visible = true, + .named = true, + }, + [sym_typed_parameter] = { + .visible = true, + .named = true, + }, + [sym_type] = { + .visible = true, + .named = true, + }, + [sym_keyword_argument] = { + .visible = true, + .named = true, + }, + [sym_list] = { + .visible = true, + .named = true, + }, + [sym_set] = { + .visible = true, + .named = true, + }, + [sym_tuple] = { + .visible = true, + .named = true, + }, + [sym_dictionary] = { + .visible = true, + .named = true, + }, + [sym_pair] = { + .visible = true, + .named = true, + }, + [sym_list_comprehension] = { + .visible = true, + .named = true, + }, + [sym_dictionary_comprehension] = { + .visible = true, + .named = true, + }, + [sym_set_comprehension] = { + .visible = true, + .named = true, + }, + [sym_generator_expression] = { + .visible = true, + .named = true, + }, + [sym__comprehension_clauses] = { + .visible = false, + .named = true, + }, + [sym_parenthesized_expression] = { + .visible = true, + .named = true, + }, + [sym__collection_elements] = { + .visible = false, + .named = true, + }, + [sym_for_in_clause] = { + .visible = true, + .named = true, + }, + [sym_if_clause] = { + .visible = true, + .named = true, + }, + [sym_conditional_expression] = { + .visible = true, + .named = true, + }, + [sym_concatenated_string] = { + .visible = true, + .named = true, + }, + [sym_string] = { + .visible = true, + .named = true, + }, + [sym_string_content] = { + .visible = true, + .named = true, + }, + [sym_interpolation] = { + .visible = true, + .named = true, + }, + [sym__f_expression] = { + .visible = false, + .named = true, + }, + [sym_format_specifier] = { + .visible = true, + .named = true, + }, + [sym_await] = { + .visible = true, + .named = true, + }, + [sym_positional_separator] = { + .visible = true, + .named = true, + }, + [sym_keyword_separator] = { + .visible = true, + .named = true, + }, + [aux_sym_module_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__simple_statements_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_import_prefix_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__import_list_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_print_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_assert_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_if_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_try_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_try_statement_repeat2] = { + .visible = false, + .named = false, + }, + [aux_sym_with_clause_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_cases_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_open_sequence_match_pattern_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_match_or_pattern_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_match_value_pattern_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_match_mapping_pattern_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_match_class_pattern_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_match_class_pattern_repeat2] = { + .visible = false, + .named = false, + }, + [aux_sym_global_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_type_parameters_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_argument_list_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_decorated_definition_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_expression_list_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__parameters_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__patterns_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_comparison_operator_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_subscript_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_dictionary_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__comprehension_clauses_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__collection_elements_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_for_in_clause_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_concatenated_string_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_string_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_string_content_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_format_specifier_repeat1] = { + .visible = false, + .named = false, + }, + [alias_sym_format_expression] = { + .visible = true, + .named = true, + }, + [anon_alias_sym_isnot] = { + .visible = true, + .named = false, + }, + [anon_alias_sym_notin] = { + .visible = true, + .named = false, + }, +}; + +enum { + field_alias = 1, + field_alternative = 2, + field_argument = 3, + field_arguments = 4, + field_attribute = 5, + field_body = 6, + field_bound = 7, + field_cases = 8, + field_cause = 9, + field_class = 10, + field_code = 11, + field_condition = 12, + field_consequence = 13, + field_content = 14, + field_definition = 15, + field_element = 16, + field_expression = 17, + field_function = 18, + field_guard = 19, + field_imaginary = 20, + field_inner = 21, + field_interpolation = 22, + field_key = 23, + field_kwarg = 24, + field_left = 25, + field_module_name = 26, + field_name = 27, + field_object = 28, + field_operator = 29, + field_operators = 30, + field_parameters = 31, + field_pattern = 32, + field_prefix = 33, + field_prefix_operator = 34, + field_real = 35, + field_return_type = 36, + field_right = 37, + field_start = 38, + field_step = 39, + field_stop = 40, + field_string_content = 41, + field_subject = 42, + field_subscript = 43, + field_suffix = 44, + field_superclasses = 45, + field_target = 46, + field_test = 47, + field_trailing_comma = 48, + field_type = 49, + field_type_parameter = 50, + field_type_parameters = 51, + field_value = 52, + field_vararg = 53, +}; + +static const char * const ts_field_names[] = { + [0] = NULL, + [field_alias] = "alias", + [field_alternative] = "alternative", + [field_argument] = "argument", + [field_arguments] = "arguments", + [field_attribute] = "attribute", + [field_body] = "body", + [field_bound] = "bound", + [field_cases] = "cases", + [field_cause] = "cause", + [field_class] = "class", + [field_code] = "code", + [field_condition] = "condition", + [field_consequence] = "consequence", + [field_content] = "content", + [field_definition] = "definition", + [field_element] = "element", + [field_expression] = "expression", + [field_function] = "function", + [field_guard] = "guard", + [field_imaginary] = "imaginary", + [field_inner] = "inner", + [field_interpolation] = "interpolation", + [field_key] = "key", + [field_kwarg] = "kwarg", + [field_left] = "left", + [field_module_name] = "module_name", + [field_name] = "name", + [field_object] = "object", + [field_operator] = "operator", + [field_operators] = "operators", + [field_parameters] = "parameters", + [field_pattern] = "pattern", + [field_prefix] = "prefix", + [field_prefix_operator] = "prefix_operator", + [field_real] = "real", + [field_return_type] = "return_type", + [field_right] = "right", + [field_start] = "start", + [field_step] = "step", + [field_stop] = "stop", + [field_string_content] = "string_content", + [field_subject] = "subject", + [field_subscript] = "subscript", + [field_suffix] = "suffix", + [field_superclasses] = "superclasses", + [field_target] = "target", + [field_test] = "test", + [field_trailing_comma] = "trailing_comma", + [field_type] = "type", + [field_type_parameter] = "type_parameter", + [field_type_parameters] = "type_parameters", + [field_value] = "value", + [field_vararg] = "vararg", +}; + +static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { + [2] = {.index = 0, .length = 2}, + [3] = {.index = 2, .length = 1}, + [4] = {.index = 3, .length = 1}, + [5] = {.index = 4, .length = 1}, + [6] = {.index = 5, .length = 1}, + [7] = {.index = 6, .length = 1}, + [8] = {.index = 7, .length = 1}, + [9] = {.index = 7, .length = 1}, + [10] = {.index = 8, .length = 1}, + [11] = {.index = 9, .length = 1}, + [12] = {.index = 10, .length = 1}, + [13] = {.index = 11, .length = 2}, + [14] = {.index = 13, .length = 1}, + [15] = {.index = 14, .length = 1}, + [16] = {.index = 15, .length = 2}, + [17] = {.index = 17, .length = 2}, + [18] = {.index = 19, .length = 1}, + [19] = {.index = 20, .length = 1}, + [20] = {.index = 21, .length = 4}, + [21] = {.index = 25, .length = 4}, + [22] = {.index = 29, .length = 2}, + [23] = {.index = 31, .length = 1}, + [24] = {.index = 32, .length = 2}, + [25] = {.index = 34, .length = 2}, + [26] = {.index = 36, .length = 1}, + [27] = {.index = 37, .length = 2}, + [28] = {.index = 39, .length = 1}, + [29] = {.index = 40, .length = 2}, + [30] = {.index = 42, .length = 1}, + [31] = {.index = 43, .length = 1}, + [32] = {.index = 44, .length = 1}, + [33] = {.index = 45, .length = 1}, + [34] = {.index = 45, .length = 1}, + [35] = {.index = 37, .length = 2}, + [36] = {.index = 46, .length = 2}, + [37] = {.index = 48, .length = 2}, + [38] = {.index = 50, .length = 2}, + [39] = {.index = 52, .length = 3}, + [40] = {.index = 55, .length = 2}, + [41] = {.index = 57, .length = 1}, + [42] = {.index = 58, .length = 2}, + [43] = {.index = 60, .length = 1}, + [44] = {.index = 61, .length = 2}, + [45] = {.index = 63, .length = 2}, + [46] = {.index = 65, .length = 1}, + [47] = {.index = 66, .length = 2}, + [48] = {.index = 68, .length = 1}, + [50] = {.index = 69, .length = 3}, + [51] = {.index = 72, .length = 1}, + [52] = {.index = 73, .length = 2}, + [53] = {.index = 75, .length = 1}, + [54] = {.index = 76, .length = 2}, + [55] = {.index = 78, .length = 2}, + [56] = {.index = 44, .length = 1}, + [57] = {.index = 80, .length = 1}, + [58] = {.index = 81, .length = 2}, + [59] = {.index = 83, .length = 2}, + [60] = {.index = 83, .length = 2}, + [61] = {.index = 85, .length = 2}, + [62] = {.index = 87, .length = 2}, + [63] = {.index = 89, .length = 2}, + [64] = {.index = 91, .length = 2}, + [65] = {.index = 93, .length = 1}, + [66] = {.index = 94, .length = 2}, + [67] = {.index = 43, .length = 1}, + [68] = {.index = 96, .length = 1}, + [69] = {.index = 97, .length = 1}, + [70] = {.index = 98, .length = 2}, + [71] = {.index = 100, .length = 2}, + [72] = {.index = 100, .length = 2}, + [74] = {.index = 102, .length = 1}, + [75] = {.index = 103, .length = 3}, + [76] = {.index = 106, .length = 3}, + [77] = {.index = 109, .length = 3}, + [78] = {.index = 112, .length = 1}, + [79] = {.index = 113, .length = 3}, + [80] = {.index = 116, .length = 3}, + [81] = {.index = 119, .length = 2}, + [82] = {.index = 121, .length = 2}, + [83] = {.index = 123, .length = 1}, + [84] = {.index = 124, .length = 2}, + [85] = {.index = 126, .length = 1}, + [86] = {.index = 127, .length = 3}, + [87] = {.index = 130, .length = 3}, + [88] = {.index = 133, .length = 3}, + [89] = {.index = 136, .length = 3}, + [90] = {.index = 139, .length = 3}, + [91] = {.index = 142, .length = 3}, + [92] = {.index = 85, .length = 2}, + [93] = {.index = 145, .length = 1}, + [94] = {.index = 146, .length = 1}, + [95] = {.index = 147, .length = 2}, + [96] = {.index = 149, .length = 3}, + [97] = {.index = 152, .length = 2}, + [98] = {.index = 154, .length = 1}, + [99] = {.index = 155, .length = 2}, + [100] = {.index = 157, .length = 2}, + [101] = {.index = 159, .length = 4}, + [102] = {.index = 163, .length = 2}, + [103] = {.index = 165, .length = 4}, + [104] = {.index = 169, .length = 4}, + [105] = {.index = 173, .length = 2}, + [106] = {.index = 175, .length = 3}, + [107] = {.index = 178, .length = 3}, + [108] = {.index = 181, .length = 4}, + [109] = {.index = 185, .length = 2}, + [110] = {.index = 187, .length = 1}, + [111] = {.index = 188, .length = 2}, + [112] = {.index = 190, .length = 2}, + [113] = {.index = 192, .length = 4}, + [114] = {.index = 196, .length = 4}, + [115] = {.index = 200, .length = 4}, + [116] = {.index = 204, .length = 4}, + [117] = {.index = 208, .length = 4}, + [118] = {.index = 212, .length = 3}, + [119] = {.index = 215, .length = 2}, + [120] = {.index = 217, .length = 2}, + [121] = {.index = 219, .length = 2}, + [122] = {.index = 221, .length = 3}, + [123] = {.index = 224, .length = 5}, + [124] = {.index = 229, .length = 3}, + [125] = {.index = 232, .length = 4}, + [126] = {.index = 236, .length = 4}, + [127] = {.index = 240, .length = 4}, + [128] = {.index = 244, .length = 4}, + [129] = {.index = 248, .length = 2}, + [130] = {.index = 250, .length = 1}, + [131] = {.index = 251, .length = 3}, + [132] = {.index = 254, .length = 1}, + [133] = {.index = 255, .length = 2}, + [134] = {.index = 257, .length = 2}, + [135] = {.index = 259, .length = 1}, + [136] = {.index = 260, .length = 4}, + [137] = {.index = 264, .length = 5}, + [138] = {.index = 269, .length = 5}, + [139] = {.index = 274, .length = 3}, + [140] = {.index = 277, .length = 3}, + [141] = {.index = 280, .length = 4}, + [142] = {.index = 284, .length = 4}, + [143] = {.index = 288, .length = 4}, + [144] = {.index = 292, .length = 5}, + [145] = {.index = 297, .length = 5}, + [146] = {.index = 302, .length = 3}, + [147] = {.index = 305, .length = 4}, + [148] = {.index = 309, .length = 3}, + [149] = {.index = 312, .length = 3}, + [150] = {.index = 315, .length = 5}, + [151] = {.index = 320, .length = 5}, + [152] = {.index = 325, .length = 5}, + [153] = {.index = 330, .length = 5}, + [154] = {.index = 335, .length = 5}, + [155] = {.index = 340, .length = 3}, + [156] = {.index = 343, .length = 4}, + [157] = {.index = 347, .length = 2}, + [158] = {.index = 349, .length = 6}, + [159] = {.index = 355, .length = 6}, + [160] = {.index = 361, .length = 4}, +}; + +static const TSFieldMapEntry ts_field_map_entries[] = { + [0] = + {field_prefix, 0}, + {field_suffix, 1}, + [2] = + {field_string_content, 0}, + [3] = + {field_interpolation, 0}, + [4] = + {field_name, 1, .inherited = true}, + [5] = + {field_name, 0}, + [6] = + {field_element, 0}, + [7] = + {field_vararg, 1}, + [8] = + {field_argument, 1}, + [9] = + {field_target, 1}, + [10] = + {field_value, 0}, + [11] = + {field_argument, 1}, + {field_operator, 0}, + [13] = + {field_value, 1}, + [14] = + {field_code, 1}, + [15] = + {field_element, 0}, + {field_element, 1, .inherited = true}, + [17] = + {field_arguments, 1}, + {field_function, 0}, + [19] = + {field_operators, 1, .inherited = true}, + [20] = + {field_definition, 1}, + [21] = + {field_interpolation, 1, .inherited = true}, + {field_prefix, 0}, + {field_string_content, 1, .inherited = true}, + {field_suffix, 2}, + [25] = + {field_interpolation, 0, .inherited = true}, + {field_interpolation, 1, .inherited = true}, + {field_string_content, 0, .inherited = true}, + {field_string_content, 1, .inherited = true}, + [29] = + {field_name, 0}, + {field_name, 1, .inherited = true}, + [31] = + {field_name, 1}, + [32] = + {field_element, 0}, + {field_trailing_comma, 1}, + [34] = + {field_element, 1, .inherited = true}, + {field_trailing_comma, 1, .inherited = true}, + [36] = + {field_inner, 1}, + [37] = + {field_name, 0}, + {field_value, 2}, + [39] = + {field_argument, 2, .inherited = true}, + [40] = + {field_argument, 1}, + {field_argument, 2, .inherited = true}, + [42] = + {field_cause, 2}, + [43] = + {field_element, 1}, + [44] = + {field_body, 2}, + [45] = + {field_kwarg, 1}, + [46] = + {field_element, 0, .inherited = true}, + {field_element, 1, .inherited = true}, + [48] = + {field_left, 0}, + {field_type, 2}, + [50] = + {field_left, 0}, + {field_right, 2}, + [52] = + {field_left, 0}, + {field_operator, 1}, + {field_right, 2}, + [55] = + {field_attribute, 2}, + {field_object, 0}, + [57] = + {field_operators, 0}, + [58] = + {field_operators, 0, .inherited = true}, + {field_operators, 1, .inherited = true}, + [60] = + {field_expression, 1}, + [61] = + {field_name, 0, .inherited = true}, + {field_name, 1, .inherited = true}, + [63] = + {field_alias, 2}, + {field_name, 0}, + [65] = + {field_name, 3, .inherited = true}, + [66] = + {field_module_name, 1}, + {field_name, 3, .inherited = true}, + [68] = + {field_module_name, 1}, + [69] = + {field_element, 0}, + {field_element, 1, .inherited = true}, + {field_trailing_comma, 2}, + [72] = + {field_body, 1}, + [73] = + {field_argument, 0, .inherited = true}, + {field_argument, 1, .inherited = true}, + [75] = + {field_cause, 3}, + [76] = + {field_condition, 1}, + {field_consequence, 3}, + [78] = + {field_body, 3}, + {field_condition, 1}, + [80] = + {field_body, 3}, + [81] = + {field_alias, 2}, + {field_value, 0}, + [83] = + {field_cases, 3}, + {field_subject, 1}, + [85] = + {field_element, 1}, + {field_element, 2, .inherited = true}, + [87] = + {field_key, 0}, + {field_value, 2}, + [89] = + {field_name, 1}, + {field_value, 3}, + [91] = + {field_body, 3}, + {field_name, 1}, + [93] = + {field_type, 2}, + [94] = + {field_body, 3}, + {field_parameters, 1}, + [96] = + {field_stop, 1}, + [97] = + {field_start, 0}, + [98] = + {field_subscript, 2}, + {field_value, 0}, + [100] = + {field_operators, 0}, + {field_operators, 1}, + [102] = + {field_alternative, 0}, + [103] = + {field_alternative, 4}, + {field_condition, 1}, + {field_consequence, 3}, + [106] = + {field_alternative, 4, .inherited = true}, + {field_condition, 1}, + {field_consequence, 3}, + [109] = + {field_condition, 1}, + {field_consequence, 3}, + {field_consequence, 4}, + [112] = + {field_body, 4}, + [113] = + {field_alternative, 4}, + {field_body, 3}, + {field_condition, 1}, + [116] = + {field_body, 3}, + {field_body, 4}, + {field_condition, 1}, + [119] = + {field_body, 2}, + {field_body, 3}, + [121] = + {field_body, 3}, + {field_body, 4}, + [123] = + {field_real, 0}, + [124] = + {field_bound, 1, .inherited = true}, + {field_name, 0}, + [126] = + {field_type_parameter, 1}, + [127] = + {field_body, 4}, + {field_name, 1}, + {field_parameters, 2}, + [130] = + {field_name, 1}, + {field_type_parameters, 2}, + {field_value, 4}, + [133] = + {field_body, 3}, + {field_body, 4}, + {field_name, 1}, + [136] = + {field_body, 4}, + {field_name, 1}, + {field_type_parameters, 2}, + [139] = + {field_body, 4}, + {field_name, 1}, + {field_superclasses, 2}, + [142] = + {field_left, 0}, + {field_right, 4}, + {field_type, 2}, + [145] = + {field_step, 2}, + [146] = + {field_subscript, 1}, + [147] = + {field_start, 0}, + {field_stop, 2}, + [149] = + {field_subscript, 2}, + {field_subscript, 3, .inherited = true}, + {field_value, 0}, + [152] = + {field_subscript, 0, .inherited = true}, + {field_subscript, 1, .inherited = true}, + [154] = + {field_name, 4, .inherited = true}, + [155] = + {field_module_name, 1}, + {field_name, 4, .inherited = true}, + [157] = + {field_left, 1}, + {field_right, 3}, + [159] = + {field_alternative, 4, .inherited = true}, + {field_alternative, 5}, + {field_condition, 1}, + {field_consequence, 3}, + [163] = + {field_alternative, 0, .inherited = true}, + {field_alternative, 1, .inherited = true}, + [165] = + {field_alternative, 5}, + {field_condition, 1}, + {field_consequence, 3}, + {field_consequence, 4}, + [169] = + {field_alternative, 5, .inherited = true}, + {field_condition, 1}, + {field_consequence, 3}, + {field_consequence, 4}, + [173] = + {field_body, 4}, + {field_body, 5}, + [175] = + {field_body, 5}, + {field_name, 2}, + {field_parameters, 3}, + [178] = + {field_body, 5}, + {field_left, 1}, + {field_right, 3}, + [181] = + {field_alternative, 5}, + {field_body, 3}, + {field_body, 4}, + {field_condition, 1}, + [185] = + {field_prefix_operator, 0}, + {field_real, 1}, + [187] = + {field_bound, 1}, + [188] = + {field_type_parameter, 1}, + {field_type_parameter, 2, .inherited = true}, + [190] = + {field_type_parameter, 0, .inherited = true}, + {field_type_parameter, 1, .inherited = true}, + [192] = + {field_body, 4}, + {field_body, 5}, + {field_name, 1}, + {field_parameters, 2}, + [196] = + {field_body, 5}, + {field_name, 1}, + {field_parameters, 3}, + {field_type_parameters, 2}, + [200] = + {field_body, 4}, + {field_body, 5}, + {field_name, 1}, + {field_type_parameters, 2}, + [204] = + {field_body, 5}, + {field_name, 1}, + {field_superclasses, 3}, + {field_type_parameters, 2}, + [208] = + {field_body, 4}, + {field_body, 5}, + {field_name, 1}, + {field_superclasses, 2}, + [212] = + {field_name, 0}, + {field_type, 2}, + {field_value, 4}, + [215] = + {field_step, 3}, + {field_stop, 1}, + [217] = + {field_start, 0}, + {field_step, 3}, + [219] = + {field_left, 2}, + {field_right, 4}, + [221] = + {field_left, 1}, + {field_right, 3}, + {field_right, 4}, + [224] = + {field_alternative, 5, .inherited = true}, + {field_alternative, 6}, + {field_condition, 1}, + {field_consequence, 3}, + {field_consequence, 4}, + [229] = + {field_body, 6}, + {field_left, 2}, + {field_right, 4}, + [232] = + {field_body, 5}, + {field_body, 6}, + {field_name, 2}, + {field_parameters, 3}, + [236] = + {field_body, 6}, + {field_name, 2}, + {field_parameters, 4}, + {field_type_parameters, 3}, + [240] = + {field_alternative, 6}, + {field_body, 5}, + {field_left, 1}, + {field_right, 3}, + [244] = + {field_body, 5}, + {field_body, 6}, + {field_left, 1}, + {field_right, 3}, + [248] = + {field_body, 3}, + {field_type, 1}, + [250] = + {field_content, 1}, + [251] = + {field_imaginary, 2}, + {field_operator, 1}, + {field_real, 0}, + [254] = + {field_test, 1}, + [255] = + {field_body, 3}, + {field_pattern, 1}, + [257] = + {field_alias, 2}, + {field_pattern, 0}, + [259] = + {field_class, 0}, + [260] = + {field_body, 6}, + {field_name, 1}, + {field_parameters, 2}, + {field_return_type, 4}, + [264] = + {field_body, 5}, + {field_body, 6}, + {field_name, 1}, + {field_parameters, 3}, + {field_type_parameters, 2}, + [269] = + {field_body, 5}, + {field_body, 6}, + {field_name, 1}, + {field_superclasses, 3}, + {field_type_parameters, 2}, + [274] = + {field_start, 0}, + {field_step, 4}, + {field_stop, 2}, + [277] = + {field_left, 2}, + {field_right, 4}, + {field_right, 5}, + [280] = + {field_alternative, 7}, + {field_body, 6}, + {field_left, 2}, + {field_right, 4}, + [284] = + {field_body, 6}, + {field_body, 7}, + {field_left, 2}, + {field_right, 4}, + [288] = + {field_body, 7}, + {field_name, 2}, + {field_parameters, 3}, + {field_return_type, 5}, + [292] = + {field_body, 6}, + {field_body, 7}, + {field_name, 2}, + {field_parameters, 4}, + {field_type_parameters, 3}, + [297] = + {field_alternative, 7}, + {field_body, 5}, + {field_body, 6}, + {field_left, 1}, + {field_right, 3}, + [302] = + {field_body, 3}, + {field_body, 4}, + {field_type, 1}, + [305] = + {field_imaginary, 3}, + {field_operator, 2}, + {field_prefix_operator, 0}, + {field_real, 1}, + [309] = + {field_body, 3}, + {field_body, 4}, + {field_pattern, 1}, + [312] = + {field_body, 4}, + {field_guard, 2}, + {field_pattern, 1}, + [315] = + {field_body, 6}, + {field_body, 7}, + {field_name, 1}, + {field_parameters, 2}, + {field_return_type, 4}, + [320] = + {field_body, 7}, + {field_name, 1}, + {field_parameters, 3}, + {field_return_type, 5}, + {field_type_parameters, 2}, + [325] = + {field_alternative, 8}, + {field_body, 6}, + {field_body, 7}, + {field_left, 2}, + {field_right, 4}, + [330] = + {field_body, 7}, + {field_body, 8}, + {field_name, 2}, + {field_parameters, 3}, + {field_return_type, 5}, + [335] = + {field_body, 8}, + {field_name, 2}, + {field_parameters, 4}, + {field_return_type, 6}, + {field_type_parameters, 3}, + [340] = + {field_alias, 3}, + {field_body, 5}, + {field_type, 1}, + [343] = + {field_body, 4}, + {field_body, 5}, + {field_guard, 2}, + {field_pattern, 1}, + [347] = + {field_attribute, 0}, + {field_value, 2}, + [349] = + {field_body, 7}, + {field_body, 8}, + {field_name, 1}, + {field_parameters, 3}, + {field_return_type, 5}, + {field_type_parameters, 2}, + [355] = + {field_body, 8}, + {field_body, 9}, + {field_name, 2}, + {field_parameters, 4}, + {field_return_type, 6}, + {field_type_parameters, 3}, + [361] = + {field_alias, 3}, + {field_body, 5}, + {field_body, 6}, + {field_type, 1}, +}; + +static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { + [0] = {0}, + [1] = { + [0] = sym_identifier, + }, + [8] = { + [1] = sym_identifier, + }, + [27] = { + [0] = sym_identifier, + }, + [33] = { + [1] = sym_identifier, + }, + [49] = { + [1] = sym_parenthesized_expression, + }, + [54] = { + [3] = sym_block, + }, + [55] = { + [3] = sym_block, + }, + [56] = { + [2] = sym_block, + }, + [57] = { + [3] = sym_block, + }, + [59] = { + [1] = sym_tuple, + }, + [64] = { + [3] = sym_block, + }, + [67] = { + [1] = sym_parenthesized_expression, + }, + [71] = { + [0] = anon_alias_sym_notin, + [1] = anon_alias_sym_notin, + }, + [72] = { + [0] = anon_alias_sym_isnot, + [1] = anon_alias_sym_isnot, + }, + [73] = { + [0] = alias_sym_format_expression, + }, + [75] = { + [3] = sym_block, + }, + [76] = { + [3] = sym_block, + }, + [78] = { + [4] = sym_block, + }, + [79] = { + [3] = sym_block, + }, + [86] = { + [4] = sym_block, + }, + [89] = { + [4] = sym_block, + }, + [90] = { + [4] = sym_block, + }, + [92] = { + [1] = sym_parenthesized_expression, + }, + [101] = { + [3] = sym_block, + }, + [106] = { + [5] = sym_block, + }, + [107] = { + [5] = sym_block, + }, + [114] = { + [5] = sym_block, + }, + [116] = { + [5] = sym_block, + }, + [124] = { + [6] = sym_block, + }, + [126] = { + [6] = sym_block, + }, + [127] = { + [5] = sym_block, + }, + [129] = { + [3] = sym_block, + }, + [133] = { + [3] = sym_block, + }, + [136] = { + [6] = sym_block, + }, + [141] = { + [6] = sym_block, + }, + [143] = { + [7] = sym_block, + }, + [149] = { + [4] = sym_block, + }, + [151] = { + [7] = sym_block, + }, + [154] = { + [8] = sym_block, + }, + [155] = { + [5] = sym_block, + }, +}; + +static const uint16_t ts_non_terminal_alias_map[] = { + sym__simple_statements, 2, + sym__simple_statements, + sym_block, + sym_parenthesized_list_splat, 2, + sym_parenthesized_list_splat, + sym_parenthesized_expression, + sym_expression_list, 2, + sym_expression_list, + sym_tuple, + sym_interpolation, 2, + sym_interpolation, + alias_sym_format_expression, + 0, +}; + +static const TSStateId ts_primary_state_ids[STATE_COUNT] = { + [0] = 0, + [1] = 1, + [2] = 2, + [3] = 3, + [4] = 4, + [5] = 5, + [6] = 6, + [7] = 7, + [8] = 8, + [9] = 9, + [10] = 8, + [11] = 11, + [12] = 12, + [13] = 13, + [14] = 14, + [15] = 15, + [16] = 16, + [17] = 5, + [18] = 13, + [19] = 14, + [20] = 20, + [21] = 16, + [22] = 22, + [23] = 23, + [24] = 24, + [25] = 6, + [26] = 3, + [27] = 12, + [28] = 15, + [29] = 29, + [30] = 30, + [31] = 22, + [32] = 23, + [33] = 33, + [34] = 34, + [35] = 35, + [36] = 36, + [37] = 20, + [38] = 38, + [39] = 39, + [40] = 36, + [41] = 41, + [42] = 9, + [43] = 24, + [44] = 4, + [45] = 41, + [46] = 39, + [47] = 34, + [48] = 35, + [49] = 49, + [50] = 2, + [51] = 7, + [52] = 33, + [53] = 30, + [54] = 54, + [55] = 54, + [56] = 11, + [57] = 38, + [58] = 49, + [59] = 29, + [60] = 60, + [61] = 60, + [62] = 60, + [63] = 63, + [64] = 64, + [65] = 60, + [66] = 60, + [67] = 63, + [68] = 60, + [69] = 60, + [70] = 70, + [71] = 70, + [72] = 72, + [73] = 73, + [74] = 74, + [75] = 75, + [76] = 76, + [77] = 77, + [78] = 78, + [79] = 79, + [80] = 80, + [81] = 81, + [82] = 82, + [83] = 80, + [84] = 84, + [85] = 74, + [86] = 86, + [87] = 82, + [88] = 88, + [89] = 89, + [90] = 84, + [91] = 72, + [92] = 92, + [93] = 93, + [94] = 77, + [95] = 95, + [96] = 96, + [97] = 97, + [98] = 76, + [99] = 89, + [100] = 100, + [101] = 78, + [102] = 102, + [103] = 103, + [104] = 104, + [105] = 105, + [106] = 102, + [107] = 81, + [108] = 108, + [109] = 96, + [110] = 88, + [111] = 93, + [112] = 112, + [113] = 105, + [114] = 114, + [115] = 115, + [116] = 116, + [117] = 79, + [118] = 73, + [119] = 108, + [120] = 92, + [121] = 116, + [122] = 115, + [123] = 104, + [124] = 97, + [125] = 103, + [126] = 100, + [127] = 95, + [128] = 112, + [129] = 86, + [130] = 114, + [131] = 131, + [132] = 132, + [133] = 133, + [134] = 133, + [135] = 135, + [136] = 135, + [137] = 133, + [138] = 133, + [139] = 133, + [140] = 133, + [141] = 135, + [142] = 135, + [143] = 135, + [144] = 135, + [145] = 133, + [146] = 135, + [147] = 147, + [148] = 148, + [149] = 148, + [150] = 148, + [151] = 151, + [152] = 131, + [153] = 148, + [154] = 151, + [155] = 155, + [156] = 156, + [157] = 157, + [158] = 158, + [159] = 159, + [160] = 159, + [161] = 159, + [162] = 162, + [163] = 163, + [164] = 162, + [165] = 165, + [166] = 166, + [167] = 167, + [168] = 168, + [169] = 166, + [170] = 166, + [171] = 171, + [172] = 172, + [173] = 173, + [174] = 174, + [175] = 175, + [176] = 176, + [177] = 177, + [178] = 178, + [179] = 177, + [180] = 158, + [181] = 181, + [182] = 182, + [183] = 178, + [184] = 177, + [185] = 185, + [186] = 186, + [187] = 187, + [188] = 188, + [189] = 189, + [190] = 187, + [191] = 187, + [192] = 192, + [193] = 188, + [194] = 194, + [195] = 168, + [196] = 196, + [197] = 194, + [198] = 189, + [199] = 199, + [200] = 200, + [201] = 201, + [202] = 202, + [203] = 196, + [204] = 188, + [205] = 171, + [206] = 194, + [207] = 189, + [208] = 186, + [209] = 199, + [210] = 167, + [211] = 200, + [212] = 188, + [213] = 213, + [214] = 186, + [215] = 199, + [216] = 196, + [217] = 187, + [218] = 218, + [219] = 219, + [220] = 220, + [221] = 221, + [222] = 222, + [223] = 223, + [224] = 224, + [225] = 225, + [226] = 226, + [227] = 227, + [228] = 228, + [229] = 229, + [230] = 230, + [231] = 231, + [232] = 232, + [233] = 233, + [234] = 234, + [235] = 233, + [236] = 236, + [237] = 234, + [238] = 232, + [239] = 236, + [240] = 229, + [241] = 228, + [242] = 242, + [243] = 243, + [244] = 244, + [245] = 244, + [246] = 246, + [247] = 247, + [248] = 243, + [249] = 243, + [250] = 242, + [251] = 246, + [252] = 246, + [253] = 242, + [254] = 247, + [255] = 255, + [256] = 256, + [257] = 255, + [258] = 258, + [259] = 259, + [260] = 256, + [261] = 261, + [262] = 261, + [263] = 263, + [264] = 264, + [265] = 265, + [266] = 266, + [267] = 267, + [268] = 268, + [269] = 261, + [270] = 267, + [271] = 266, + [272] = 268, + [273] = 256, + [274] = 255, + [275] = 275, + [276] = 263, + [277] = 258, + [278] = 278, + [279] = 265, + [280] = 280, + [281] = 281, + [282] = 282, + [283] = 283, + [284] = 284, + [285] = 285, + [286] = 286, + [287] = 287, + [288] = 288, + [289] = 289, + [290] = 290, + [291] = 281, + [292] = 283, + [293] = 293, + [294] = 294, + [295] = 295, + [296] = 296, + [297] = 297, + [298] = 296, + [299] = 299, + [300] = 300, + [301] = 299, + [302] = 302, + [303] = 303, + [304] = 304, + [305] = 288, + [306] = 306, + [307] = 285, + [308] = 308, + [309] = 309, + [310] = 299, + [311] = 287, + [312] = 312, + [313] = 308, + [314] = 314, + [315] = 282, + [316] = 316, + [317] = 317, + [318] = 318, + [319] = 288, + [320] = 320, + [321] = 321, + [322] = 322, + [323] = 323, + [324] = 324, + [325] = 325, + [326] = 281, + [327] = 316, + [328] = 328, + [329] = 329, + [330] = 330, + [331] = 331, + [332] = 317, + [333] = 333, + [334] = 334, + [335] = 335, + [336] = 226, + [337] = 218, + [338] = 338, + [339] = 339, + [340] = 340, + [341] = 321, + [342] = 220, + [343] = 221, + [344] = 223, + [345] = 345, + [346] = 322, + [347] = 347, + [348] = 348, + [349] = 347, + [350] = 323, + [351] = 351, + [352] = 219, + [353] = 340, + [354] = 288, + [355] = 282, + [356] = 281, + [357] = 333, + [358] = 308, + [359] = 288, + [360] = 308, + [361] = 361, + [362] = 308, + [363] = 329, + [364] = 364, + [365] = 227, + [366] = 328, + [367] = 287, + [368] = 324, + [369] = 308, + [370] = 281, + [371] = 282, + [372] = 318, + [373] = 320, + [374] = 287, + [375] = 287, + [376] = 281, + [377] = 325, + [378] = 287, + [379] = 282, + [380] = 345, + [381] = 288, + [382] = 282, + [383] = 335, + [384] = 331, + [385] = 385, + [386] = 386, + [387] = 387, + [388] = 388, + [389] = 389, + [390] = 390, + [391] = 391, + [392] = 392, + [393] = 393, + [394] = 394, + [395] = 395, + [396] = 396, + [397] = 397, + [398] = 398, + [399] = 399, + [400] = 400, + [401] = 401, + [402] = 402, + [403] = 403, + [404] = 404, + [405] = 389, + [406] = 406, + [407] = 403, + [408] = 408, + [409] = 396, + [410] = 396, + [411] = 395, + [412] = 412, + [413] = 413, + [414] = 408, + [415] = 386, + [416] = 402, + [417] = 417, + [418] = 387, + [419] = 391, + [420] = 420, + [421] = 388, + [422] = 392, + [423] = 404, + [424] = 400, + [425] = 425, + [426] = 386, + [427] = 427, + [428] = 427, + [429] = 386, + [430] = 430, + [431] = 431, + [432] = 430, + [433] = 420, + [434] = 434, + [435] = 435, + [436] = 397, + [437] = 397, + [438] = 438, + [439] = 385, + [440] = 413, + [441] = 441, + [442] = 442, + [443] = 385, + [444] = 444, + [445] = 391, + [446] = 395, + [447] = 425, + [448] = 389, + [449] = 449, + [450] = 450, + [451] = 451, + [452] = 392, + [453] = 453, + [454] = 454, + [455] = 395, + [456] = 385, + [457] = 396, + [458] = 444, + [459] = 459, + [460] = 442, + [461] = 461, + [462] = 462, + [463] = 444, + [464] = 464, + [465] = 397, + [466] = 466, + [467] = 454, + [468] = 398, + [469] = 406, + [470] = 391, + [471] = 399, + [472] = 464, + [473] = 473, + [474] = 473, + [475] = 475, + [476] = 392, + [477] = 477, + [478] = 401, + [479] = 479, + [480] = 480, + [481] = 444, + [482] = 389, + [483] = 483, + [484] = 412, + [485] = 485, + [486] = 485, + [487] = 487, + [488] = 488, + [489] = 489, + [490] = 487, + [491] = 491, + [492] = 492, + [493] = 492, + [494] = 491, + [495] = 488, + [496] = 489, + [497] = 497, + [498] = 498, + [499] = 499, + [500] = 500, + [501] = 501, + [502] = 502, + [503] = 503, + [504] = 504, + [505] = 505, + [506] = 506, + [507] = 507, + [508] = 508, + [509] = 509, + [510] = 510, + [511] = 511, + [512] = 512, + [513] = 512, + [514] = 514, + [515] = 498, + [516] = 507, + [517] = 517, + [518] = 518, + [519] = 519, + [520] = 504, + [521] = 521, + [522] = 522, + [523] = 523, + [524] = 524, + [525] = 500, + [526] = 524, + [527] = 527, + [528] = 528, + [529] = 529, + [530] = 530, + [531] = 531, + [532] = 532, + [533] = 533, + [534] = 534, + [535] = 535, + [536] = 534, + [537] = 529, + [538] = 530, + [539] = 511, + [540] = 533, + [541] = 541, + [542] = 502, + [543] = 543, + [544] = 544, + [545] = 510, + [546] = 509, + [547] = 508, + [548] = 501, + [549] = 549, + [550] = 527, + [551] = 503, + [552] = 552, + [553] = 531, + [554] = 549, + [555] = 528, + [556] = 506, + [557] = 505, + [558] = 532, + [559] = 559, + [560] = 543, + [561] = 561, + [562] = 541, + [563] = 535, + [564] = 559, + [565] = 561, + [566] = 517, + [567] = 567, + [568] = 514, + [569] = 567, + [570] = 570, + [571] = 571, + [572] = 571, + [573] = 573, + [574] = 573, + [575] = 575, + [576] = 522, + [577] = 575, + [578] = 544, + [579] = 579, + [580] = 497, + [581] = 581, + [582] = 582, + [583] = 579, + [584] = 499, + [585] = 570, + [586] = 581, + [587] = 587, + [588] = 523, + [589] = 582, + [590] = 587, + [591] = 518, + [592] = 521, + [593] = 519, + [594] = 552, + [595] = 595, + [596] = 596, + [597] = 597, + [598] = 598, + [599] = 599, + [600] = 600, + [601] = 601, + [602] = 602, + [603] = 603, + [604] = 602, + [605] = 603, + [606] = 606, + [607] = 607, + [608] = 608, + [609] = 609, + [610] = 610, + [611] = 611, + [612] = 612, + [613] = 613, + [614] = 614, + [615] = 615, + [616] = 616, + [617] = 617, + [618] = 618, + [619] = 619, + [620] = 620, + [621] = 621, + [622] = 622, + [623] = 623, + [624] = 624, + [625] = 625, + [626] = 626, + [627] = 627, + [628] = 628, + [629] = 629, + [630] = 630, + [631] = 631, + [632] = 632, + [633] = 633, + [634] = 634, + [635] = 635, + [636] = 636, + [637] = 637, + [638] = 638, + [639] = 639, + [640] = 640, + [641] = 641, + [642] = 642, + [643] = 630, + [644] = 644, + [645] = 645, + [646] = 646, + [647] = 647, + [648] = 647, + [649] = 649, + [650] = 650, + [651] = 651, + [652] = 652, + [653] = 653, + [654] = 651, + [655] = 645, + [656] = 656, + [657] = 656, + [658] = 653, + [659] = 659, + [660] = 646, + [661] = 650, + [662] = 662, + [663] = 662, + [664] = 659, + [665] = 652, + [666] = 649, + [667] = 667, + [668] = 668, + [669] = 669, + [670] = 669, + [671] = 671, + [672] = 672, + [673] = 669, + [674] = 667, + [675] = 668, + [676] = 669, + [677] = 599, + [678] = 598, + [679] = 679, + [680] = 680, + [681] = 681, + [682] = 682, + [683] = 683, + [684] = 630, + [685] = 685, + [686] = 682, + [687] = 687, + [688] = 688, + [689] = 599, + [690] = 690, + [691] = 679, + [692] = 681, + [693] = 693, + [694] = 679, + [695] = 695, + [696] = 680, + [697] = 695, + [698] = 698, + [699] = 690, + [700] = 682, + [701] = 688, + [702] = 680, + [703] = 695, + [704] = 681, + [705] = 690, + [706] = 687, + [707] = 698, + [708] = 687, + [709] = 683, + [710] = 687, + [711] = 682, + [712] = 679, + [713] = 600, + [714] = 690, + [715] = 715, + [716] = 693, + [717] = 681, + [718] = 688, + [719] = 683, + [720] = 598, + [721] = 695, + [722] = 680, + [723] = 698, + [724] = 688, + [725] = 672, + [726] = 683, + [727] = 671, + [728] = 698, + [729] = 693, + [730] = 693, + [731] = 662, + [732] = 649, + [733] = 652, + [734] = 659, + [735] = 647, + [736] = 609, + [737] = 653, + [738] = 651, + [739] = 645, + [740] = 630, + [741] = 646, + [742] = 600, + [743] = 656, + [744] = 610, + [745] = 650, + [746] = 662, + [747] = 651, + [748] = 748, + [749] = 330, + [750] = 653, + [751] = 652, + [752] = 649, + [753] = 647, + [754] = 667, + [755] = 668, + [756] = 645, + [757] = 659, + [758] = 609, + [759] = 759, + [760] = 760, + [761] = 646, + [762] = 449, + [763] = 656, + [764] = 334, + [765] = 475, + [766] = 650, + [767] = 767, + [768] = 441, + [769] = 610, + [770] = 431, + [771] = 626, + [772] = 639, + [773] = 625, + [774] = 624, + [775] = 637, + [776] = 620, + [777] = 623, + [778] = 617, + [779] = 475, + [780] = 622, + [781] = 629, + [782] = 632, + [783] = 615, + [784] = 627, + [785] = 628, + [786] = 671, + [787] = 672, + [788] = 631, + [789] = 441, + [790] = 634, + [791] = 635, + [792] = 633, + [793] = 613, + [794] = 618, + [795] = 612, + [796] = 640, + [797] = 642, + [798] = 667, + [799] = 621, + [800] = 641, + [801] = 668, + [802] = 644, + [803] = 619, + [804] = 611, + [805] = 638, + [806] = 431, + [807] = 616, + [808] = 614, + [809] = 634, + [810] = 220, + [811] = 642, + [812] = 759, + [813] = 626, + [814] = 625, + [815] = 624, + [816] = 623, + [817] = 611, + [818] = 622, + [819] = 637, + [820] = 621, + [821] = 620, + [822] = 219, + [823] = 616, + [824] = 614, + [825] = 629, + [826] = 641, + [827] = 632, + [828] = 638, + [829] = 227, + [830] = 644, + [831] = 613, + [832] = 618, + [833] = 631, + [834] = 223, + [835] = 640, + [836] = 221, + [837] = 760, + [838] = 639, + [839] = 612, + [840] = 627, + [841] = 617, + [842] = 628, + [843] = 615, + [844] = 218, + [845] = 226, + [846] = 619, + [847] = 633, + [848] = 635, + [849] = 849, + [850] = 850, + [851] = 851, + [852] = 849, + [853] = 853, + [854] = 854, + [855] = 855, + [856] = 856, + [857] = 857, + [858] = 858, + [859] = 859, + [860] = 860, + [861] = 861, + [862] = 862, + [863] = 863, + [864] = 864, + [865] = 865, + [866] = 866, + [867] = 867, + [868] = 868, + [869] = 868, + [870] = 870, + [871] = 870, + [872] = 872, + [873] = 873, + [874] = 874, + [875] = 875, + [876] = 876, + [877] = 868, + [878] = 870, + [879] = 879, + [880] = 880, + [881] = 870, + [882] = 882, + [883] = 868, + [884] = 884, + [885] = 885, + [886] = 885, + [887] = 887, + [888] = 885, + [889] = 889, + [890] = 885, + [891] = 891, + [892] = 892, + [893] = 893, + [894] = 894, + [895] = 895, + [896] = 896, + [897] = 897, + [898] = 895, + [899] = 896, + [900] = 900, + [901] = 901, + [902] = 902, + [903] = 902, + [904] = 904, + [905] = 905, + [906] = 906, + [907] = 907, + [908] = 908, + [909] = 909, + [910] = 910, + [911] = 907, + [912] = 912, + [913] = 913, + [914] = 914, + [915] = 915, + [916] = 916, + [917] = 917, + [918] = 907, + [919] = 909, + [920] = 920, + [921] = 914, + [922] = 916, + [923] = 908, + [924] = 912, + [925] = 925, + [926] = 926, + [927] = 920, + [928] = 926, + [929] = 929, + [930] = 930, + [931] = 930, + [932] = 932, + [933] = 933, + [934] = 934, + [935] = 932, + [936] = 936, + [937] = 937, + [938] = 936, + [939] = 939, + [940] = 940, + [941] = 932, + [942] = 936, + [943] = 943, + [944] = 934, + [945] = 930, + [946] = 940, + [947] = 947, + [948] = 948, + [949] = 936, + [950] = 934, + [951] = 951, + [952] = 934, + [953] = 940, + [954] = 954, + [955] = 955, + [956] = 956, + [957] = 957, + [958] = 958, + [959] = 959, + [960] = 960, + [961] = 961, + [962] = 962, + [963] = 963, + [964] = 964, + [965] = 965, + [966] = 966, + [967] = 904, + [968] = 968, + [969] = 969, + [970] = 970, + [971] = 971, + [972] = 972, + [973] = 973, + [974] = 914, + [975] = 975, + [976] = 901, + [977] = 977, + [978] = 978, + [979] = 979, + [980] = 926, + [981] = 981, + [982] = 982, + [983] = 983, + [984] = 984, + [985] = 985, + [986] = 986, + [987] = 987, + [988] = 988, + [989] = 989, + [990] = 990, + [991] = 965, + [992] = 909, + [993] = 993, + [994] = 994, + [995] = 995, + [996] = 996, + [997] = 912, + [998] = 998, + [999] = 999, + [1000] = 916, + [1001] = 920, + [1002] = 996, + [1003] = 983, + [1004] = 1004, + [1005] = 1005, + [1006] = 1006, + [1007] = 908, + [1008] = 1008, + [1009] = 900, + [1010] = 1010, + [1011] = 1011, + [1012] = 1012, + [1013] = 1013, + [1014] = 929, + [1015] = 900, + [1016] = 1016, + [1017] = 1017, + [1018] = 1018, + [1019] = 1019, + [1020] = 1020, + [1021] = 1021, + [1022] = 1022, + [1023] = 1023, + [1024] = 1024, + [1025] = 926, + [1026] = 1026, + [1027] = 912, + [1028] = 914, + [1029] = 920, + [1030] = 916, + [1031] = 1031, + [1032] = 908, + [1033] = 1033, + [1034] = 1034, + [1035] = 909, + [1036] = 933, + [1037] = 1037, + [1038] = 1038, + [1039] = 1039, + [1040] = 1021, + [1041] = 1041, + [1042] = 901, + [1043] = 1043, + [1044] = 1044, + [1045] = 1045, + [1046] = 1046, + [1047] = 1021, + [1048] = 947, + [1049] = 1038, + [1050] = 1050, + [1051] = 904, + [1052] = 1038, + [1053] = 1053, + [1054] = 948, + [1055] = 1055, + [1056] = 1056, + [1057] = 906, + [1058] = 1058, + [1059] = 1059, + [1060] = 1060, + [1061] = 1061, + [1062] = 1062, + [1063] = 1063, + [1064] = 1064, + [1065] = 1065, + [1066] = 1066, + [1067] = 1067, + [1068] = 1058, + [1069] = 1069, + [1070] = 1070, + [1071] = 1071, + [1072] = 1072, + [1073] = 1073, + [1074] = 1074, + [1075] = 1059, + [1076] = 1076, + [1077] = 1077, + [1078] = 1078, + [1079] = 1079, + [1080] = 1079, + [1081] = 1063, + [1082] = 1022, + [1083] = 1083, + [1084] = 1084, + [1085] = 1070, + [1086] = 1086, + [1087] = 1087, + [1088] = 1061, + [1089] = 1089, + [1090] = 1090, + [1091] = 1091, + [1092] = 964, + [1093] = 1093, + [1094] = 939, + [1095] = 1095, + [1096] = 1005, + [1097] = 1097, + [1098] = 1098, + [1099] = 1099, + [1100] = 1100, + [1101] = 917, + [1102] = 1039, + [1103] = 1103, + [1104] = 1104, + [1105] = 1105, + [1106] = 1106, + [1107] = 1107, + [1108] = 1107, + [1109] = 1109, + [1110] = 1110, + [1111] = 1111, + [1112] = 985, + [1113] = 1113, + [1114] = 1114, + [1115] = 1115, + [1116] = 1116, + [1117] = 1117, + [1118] = 1118, + [1119] = 1119, + [1120] = 1097, + [1121] = 1121, + [1122] = 1122, + [1123] = 1104, + [1124] = 1124, + [1125] = 1125, + [1126] = 1126, + [1127] = 1127, + [1128] = 1128, + [1129] = 1129, + [1130] = 1130, + [1131] = 1131, + [1132] = 1128, + [1133] = 1133, + [1134] = 1134, + [1135] = 1135, + [1136] = 1136, + [1137] = 1137, + [1138] = 1138, + [1139] = 1139, + [1140] = 1140, + [1141] = 1141, + [1142] = 1095, + [1143] = 1143, + [1144] = 1144, + [1145] = 1145, + [1146] = 1146, + [1147] = 1093, + [1148] = 1148, + [1149] = 1149, + [1150] = 1150, + [1151] = 1141, + [1152] = 1149, + [1153] = 1140, + [1154] = 1154, + [1155] = 1155, + [1156] = 1156, + [1157] = 1134, + [1158] = 1135, + [1159] = 1136, + [1160] = 1160, + [1161] = 1109, + [1162] = 1162, + [1163] = 1163, + [1164] = 1164, + [1165] = 1165, + [1166] = 1166, + [1167] = 1167, + [1168] = 913, + [1169] = 1149, + [1170] = 1170, + [1171] = 1171, + [1172] = 1172, + [1173] = 1173, + [1174] = 1174, + [1175] = 1175, + [1176] = 1131, + [1177] = 1177, + [1178] = 1178, + [1179] = 1129, + [1180] = 1180, + [1181] = 1173, + [1182] = 1118, + [1183] = 1183, + [1184] = 1180, + [1185] = 1185, + [1186] = 1149, + [1187] = 1023, + [1188] = 1188, + [1189] = 1189, + [1190] = 1190, + [1191] = 1191, + [1192] = 1192, + [1193] = 1193, + [1194] = 1194, + [1195] = 1195, + [1196] = 1196, + [1197] = 1197, + [1198] = 1198, + [1199] = 1199, + [1200] = 1200, + [1201] = 1201, + [1202] = 1202, + [1203] = 1203, + [1204] = 1204, + [1205] = 1164, + [1206] = 1163, + [1207] = 1207, + [1208] = 1208, + [1209] = 1209, + [1210] = 1210, + [1211] = 1211, + [1212] = 1212, + [1213] = 1213, + [1214] = 1209, + [1215] = 1215, + [1216] = 1216, + [1217] = 282, + [1218] = 1218, + [1219] = 1219, + [1220] = 1220, + [1221] = 1221, + [1222] = 1074, + [1223] = 1223, + [1224] = 1210, + [1225] = 1225, + [1226] = 1226, + [1227] = 1227, + [1228] = 1228, + [1229] = 1229, + [1230] = 1230, + [1231] = 1194, + [1232] = 1232, + [1233] = 308, + [1234] = 1234, + [1235] = 1235, + [1236] = 1236, + [1237] = 1194, + [1238] = 1209, + [1239] = 1239, + [1240] = 1189, + [1241] = 1194, + [1242] = 1242, + [1243] = 1242, + [1244] = 1209, + [1245] = 1183, + [1246] = 1194, + [1247] = 1234, + [1248] = 1209, + [1249] = 1204, + [1250] = 1250, + [1251] = 1219, + [1252] = 1252, + [1253] = 1060, + [1254] = 1194, + [1255] = 1239, + [1256] = 1256, + [1257] = 1257, + [1258] = 1220, + [1259] = 1259, + [1260] = 1260, + [1261] = 1209, + [1262] = 1262, + [1263] = 1263, + [1264] = 1264, + [1265] = 281, + [1266] = 1266, + [1267] = 1267, + [1268] = 1268, + [1269] = 1269, + [1270] = 1270, + [1271] = 1196, + [1272] = 1203, + [1273] = 1228, + [1274] = 1230, + [1275] = 1275, + [1276] = 1197, + [1277] = 1264, + [1278] = 1260, + [1279] = 1230, + [1280] = 1228, + [1281] = 1281, + [1282] = 1203, + [1283] = 1196, + [1284] = 1284, + [1285] = 1264, + [1286] = 1221, + [1287] = 1287, + [1288] = 1288, + [1289] = 1289, + [1290] = 1290, + [1291] = 609, + [1292] = 1292, + [1293] = 1293, + [1294] = 1220, + [1295] = 1275, + [1296] = 1296, + [1297] = 1256, + [1298] = 1239, + [1299] = 1299, + [1300] = 1234, + [1301] = 1301, + [1302] = 1242, + [1303] = 1303, + [1304] = 287, + [1305] = 1305, + [1306] = 1199, + [1307] = 1069, + [1308] = 1308, + [1309] = 1194, + [1310] = 1310, + [1311] = 1225, + [1312] = 1312, + [1313] = 1219, + [1314] = 1314, + [1315] = 1284, + [1316] = 1316, + [1317] = 1312, + [1318] = 610, + [1319] = 1209, + [1320] = 1320, + [1321] = 1143, + [1322] = 1322, + [1323] = 1323, + [1324] = 288, + [1325] = 1325, + [1326] = 1326, + [1327] = 1225, + [1328] = 1256, + [1329] = 1329, + [1330] = 1330, + [1331] = 1331, + [1332] = 1067, + [1333] = 1333, + [1334] = 1229, + [1335] = 1335, + [1336] = 1336, + [1337] = 1337, + [1338] = 1338, + [1339] = 1177, + [1340] = 1340, + [1341] = 1341, + [1342] = 1342, + [1343] = 1343, + [1344] = 1344, + [1345] = 1345, + [1346] = 1346, + [1347] = 1267, + [1348] = 1041, + [1349] = 1349, + [1350] = 1350, + [1351] = 1351, + [1352] = 1352, + [1353] = 1353, + [1354] = 1354, + [1355] = 1355, + [1356] = 1356, + [1357] = 1357, + [1358] = 1354, + [1359] = 1359, + [1360] = 1360, + [1361] = 1361, + [1362] = 1362, + [1363] = 1363, + [1364] = 1364, + [1365] = 1365, + [1366] = 1360, + [1367] = 1367, + [1368] = 1368, + [1369] = 1369, + [1370] = 1356, + [1371] = 1371, + [1372] = 1344, + [1373] = 1373, + [1374] = 1374, + [1375] = 1375, + [1376] = 1375, + [1377] = 1363, + [1378] = 1371, + [1379] = 1379, + [1380] = 1380, + [1381] = 1381, + [1382] = 1226, + [1383] = 1383, + [1384] = 1384, + [1385] = 1385, + [1386] = 1386, + [1387] = 1387, + [1388] = 1388, + [1389] = 1389, + [1390] = 1390, + [1391] = 1391, + [1392] = 1392, + [1393] = 1393, + [1394] = 1394, + [1395] = 1395, + [1396] = 1396, + [1397] = 1198, + [1398] = 1398, + [1399] = 1399, + [1400] = 1400, + [1401] = 1401, + [1402] = 1402, + [1403] = 1403, + [1404] = 1404, + [1405] = 1405, + [1406] = 1406, + [1407] = 1407, + [1408] = 1408, + [1409] = 1409, + [1410] = 1405, + [1411] = 1411, + [1412] = 1412, + [1413] = 1413, + [1414] = 1414, + [1415] = 1415, + [1416] = 1416, + [1417] = 1417, + [1418] = 1418, + [1419] = 1419, + [1420] = 1420, + [1421] = 1421, + [1422] = 1422, + [1423] = 1423, + [1424] = 1424, + [1425] = 1425, + [1426] = 1426, + [1427] = 1427, + [1428] = 1428, + [1429] = 1407, + [1430] = 1430, + [1431] = 1431, + [1432] = 1414, + [1433] = 1411, + [1434] = 1434, + [1435] = 1435, + [1436] = 1430, + [1437] = 1407, + [1438] = 1405, + [1439] = 1411, + [1440] = 1440, + [1441] = 1441, + [1442] = 1417, + [1443] = 1443, + [1444] = 1444, + [1445] = 1445, + [1446] = 1430, + [1447] = 1414, + [1448] = 1448, + [1449] = 1448, + [1450] = 1443, + [1451] = 1451, + [1452] = 1452, + [1453] = 1427, + [1454] = 1454, + [1455] = 1455, + [1456] = 1456, + [1457] = 1457, + [1458] = 1427, + [1459] = 1422, + [1460] = 1460, + [1461] = 1460, + [1462] = 1462, + [1463] = 1463, + [1464] = 1417, + [1465] = 1465, + [1466] = 1466, + [1467] = 1467, + [1468] = 1435, + [1469] = 1462, + [1470] = 1470, + [1471] = 1471, + [1472] = 1472, + [1473] = 1467, + [1474] = 1451, + [1475] = 1431, + [1476] = 1470, + [1477] = 1445, + [1478] = 1478, + [1479] = 1420, + [1480] = 1480, + [1481] = 1481, + [1482] = 1428, + [1483] = 1483, + [1484] = 1431, + [1485] = 1483, + [1486] = 1486, + [1487] = 1487, + [1488] = 1488, + [1489] = 1489, + [1490] = 1490, + [1491] = 1478, + [1492] = 1492, + [1493] = 1452, + [1494] = 1430, + [1495] = 1495, + [1496] = 1496, + [1497] = 1497, + [1498] = 1498, + [1499] = 1463, + [1500] = 1448, + [1501] = 1481, + [1502] = 1502, + [1503] = 1467, + [1504] = 1462, + [1505] = 1480, + [1506] = 1471, + [1507] = 1465, + [1508] = 1498, + [1509] = 1509, + [1510] = 1510, + [1511] = 1511, + [1512] = 1495, + [1513] = 1460, + [1514] = 1514, + [1515] = 1409, + [1516] = 1511, + [1517] = 1514, + [1518] = 1472, + [1519] = 1454, + [1520] = 1488, + [1521] = 1521, + [1522] = 1421, + [1523] = 1425, + [1524] = 1427, +}; + +static inline bool sym_identifier_character_set_1(int32_t c) { + return (c < 43514 + ? (c < 4193 + ? (c < 2707 + ? (c < 1994 + ? (c < 931 + ? (c < 748 + ? (c < 192 + ? (c < 170 + ? (c < 'a' + ? (c >= 'A' && c <= '_') + : c <= 'z') + : (c <= 170 || (c < 186 + ? c == 181 + : c <= 186))) + : (c <= 214 || (c < 710 + ? (c < 248 + ? (c >= 216 && c <= 246) + : c <= 705) + : (c <= 721 || (c >= 736 && c <= 740))))) + : (c <= 748 || (c < 895 + ? (c < 886 + ? (c < 880 + ? c == 750 + : c <= 884) + : (c <= 887 || (c >= 891 && c <= 893))) + : (c <= 895 || (c < 908 + ? (c < 904 + ? c == 902 + : c <= 906) + : (c <= 908 || (c >= 910 && c <= 929))))))) + : (c <= 1013 || (c < 1649 + ? (c < 1376 + ? (c < 1329 + ? (c < 1162 + ? (c >= 1015 && c <= 1153) + : c <= 1327) + : (c <= 1366 || c == 1369)) + : (c <= 1416 || (c < 1568 + ? (c < 1519 + ? (c >= 1488 && c <= 1514) + : c <= 1522) + : (c <= 1610 || (c >= 1646 && c <= 1647))))) + : (c <= 1747 || (c < 1791 + ? (c < 1774 + ? (c < 1765 + ? c == 1749 + : c <= 1766) + : (c <= 1775 || (c >= 1786 && c <= 1788))) + : (c <= 1791 || (c < 1869 + ? (c < 1810 + ? c == 1808 + : c <= 1839) + : (c <= 1957 || c == 1969)))))))) + : (c <= 2026 || (c < 2482 + ? (c < 2208 + ? (c < 2088 + ? (c < 2048 + ? (c < 2042 + ? (c >= 2036 && c <= 2037) + : c <= 2042) + : (c <= 2069 || (c < 2084 + ? c == 2074 + : c <= 2084))) + : (c <= 2088 || (c < 2160 + ? (c < 2144 + ? (c >= 2112 && c <= 2136) + : c <= 2154) + : (c <= 2183 || (c >= 2185 && c <= 2190))))) + : (c <= 2249 || (c < 2417 + ? (c < 2384 + ? (c < 2365 + ? (c >= 2308 && c <= 2361) + : c <= 2365) + : (c <= 2384 || (c >= 2392 && c <= 2401))) + : (c <= 2432 || (c < 2451 + ? (c < 2447 + ? (c >= 2437 && c <= 2444) + : c <= 2448) + : (c <= 2472 || (c >= 2474 && c <= 2480))))))) + : (c <= 2482 || (c < 2579 + ? (c < 2527 + ? (c < 2510 + ? (c < 2493 + ? (c >= 2486 && c <= 2489) + : c <= 2493) + : (c <= 2510 || (c >= 2524 && c <= 2525))) + : (c <= 2529 || (c < 2565 + ? (c < 2556 + ? (c >= 2544 && c <= 2545) + : c <= 2556) + : (c <= 2570 || (c >= 2575 && c <= 2576))))) + : (c <= 2600 || (c < 2649 + ? (c < 2613 + ? (c < 2610 + ? (c >= 2602 && c <= 2608) + : c <= 2611) + : (c <= 2614 || (c >= 2616 && c <= 2617))) + : (c <= 2652 || (c < 2693 + ? (c < 2674 + ? c == 2654 + : c <= 2676) + : (c <= 2701 || (c >= 2703 && c <= 2705))))))))))) + : (c <= 2728 || (c < 3242 + ? (c < 2962 + ? (c < 2858 + ? (c < 2784 + ? (c < 2741 + ? (c < 2738 + ? (c >= 2730 && c <= 2736) + : c <= 2739) + : (c <= 2745 || (c < 2768 + ? c == 2749 + : c <= 2768))) + : (c <= 2785 || (c < 2831 + ? (c < 2821 + ? c == 2809 + : c <= 2828) + : (c <= 2832 || (c >= 2835 && c <= 2856))))) + : (c <= 2864 || (c < 2911 + ? (c < 2877 + ? (c < 2869 + ? (c >= 2866 && c <= 2867) + : c <= 2873) + : (c <= 2877 || (c >= 2908 && c <= 2909))) + : (c <= 2913 || (c < 2949 + ? (c < 2947 + ? c == 2929 + : c <= 2947) + : (c <= 2954 || (c >= 2958 && c <= 2960))))))) + : (c <= 2965 || (c < 3090 + ? (c < 2984 + ? (c < 2974 + ? (c < 2972 + ? (c >= 2969 && c <= 2970) + : c <= 2972) + : (c <= 2975 || (c >= 2979 && c <= 2980))) + : (c <= 2986 || (c < 3077 + ? (c < 3024 + ? (c >= 2990 && c <= 3001) + : c <= 3024) + : (c <= 3084 || (c >= 3086 && c <= 3088))))) + : (c <= 3112 || (c < 3168 + ? (c < 3160 + ? (c < 3133 + ? (c >= 3114 && c <= 3129) + : c <= 3133) + : (c <= 3162 || c == 3165)) + : (c <= 3169 || (c < 3214 + ? (c < 3205 + ? c == 3200 + : c <= 3212) + : (c <= 3216 || (c >= 3218 && c <= 3240))))))))) + : (c <= 3251 || (c < 3648 + ? (c < 3412 + ? (c < 3332 + ? (c < 3293 + ? (c < 3261 + ? (c >= 3253 && c <= 3257) + : c <= 3261) + : (c <= 3294 || (c < 3313 + ? (c >= 3296 && c <= 3297) + : c <= 3314))) + : (c <= 3340 || (c < 3389 + ? (c < 3346 + ? (c >= 3342 && c <= 3344) + : c <= 3386) + : (c <= 3389 || c == 3406)))) + : (c <= 3414 || (c < 3507 + ? (c < 3461 + ? (c < 3450 + ? (c >= 3423 && c <= 3425) + : c <= 3455) + : (c <= 3478 || (c >= 3482 && c <= 3505))) + : (c <= 3515 || (c < 3585 + ? (c < 3520 + ? c == 3517 + : c <= 3526) + : (c <= 3632 || c == 3634)))))) + : (c <= 3654 || (c < 3782 + ? (c < 3749 + ? (c < 3718 + ? (c < 3716 + ? (c >= 3713 && c <= 3714) + : c <= 3716) + : (c <= 3722 || (c >= 3724 && c <= 3747))) + : (c <= 3749 || (c < 3773 + ? (c < 3762 + ? (c >= 3751 && c <= 3760) + : c <= 3762) + : (c <= 3773 || (c >= 3776 && c <= 3780))))) + : (c <= 3782 || (c < 3976 + ? (c < 3904 + ? (c < 3840 + ? (c >= 3804 && c <= 3807) + : c <= 3840) + : (c <= 3911 || (c >= 3913 && c <= 3948))) + : (c <= 3980 || (c < 4176 + ? (c < 4159 + ? (c >= 4096 && c <= 4138) + : c <= 4159) + : (c <= 4181 || (c >= 4186 && c <= 4189))))))))))))) + : (c <= 4193 || (c < 8134 + ? (c < 6176 + ? (c < 4808 + ? (c < 4688 + ? (c < 4295 + ? (c < 4213 + ? (c < 4206 + ? (c >= 4197 && c <= 4198) + : c <= 4208) + : (c <= 4225 || (c < 4256 + ? c == 4238 + : c <= 4293))) + : (c <= 4295 || (c < 4348 + ? (c < 4304 + ? c == 4301 + : c <= 4346) + : (c <= 4680 || (c >= 4682 && c <= 4685))))) + : (c <= 4694 || (c < 4752 + ? (c < 4704 + ? (c < 4698 + ? c == 4696 + : c <= 4701) + : (c <= 4744 || (c >= 4746 && c <= 4749))) + : (c <= 4784 || (c < 4800 + ? (c < 4792 + ? (c >= 4786 && c <= 4789) + : c <= 4798) + : (c <= 4800 || (c >= 4802 && c <= 4805))))))) + : (c <= 4822 || (c < 5792 + ? (c < 5024 + ? (c < 4888 + ? (c < 4882 + ? (c >= 4824 && c <= 4880) + : c <= 4885) + : (c <= 4954 || (c >= 4992 && c <= 5007))) + : (c <= 5109 || (c < 5743 + ? (c < 5121 + ? (c >= 5112 && c <= 5117) + : c <= 5740) + : (c <= 5759 || (c >= 5761 && c <= 5786))))) + : (c <= 5866 || (c < 5984 + ? (c < 5919 + ? (c < 5888 + ? (c >= 5870 && c <= 5880) + : c <= 5905) + : (c <= 5937 || (c >= 5952 && c <= 5969))) + : (c <= 5996 || (c < 6103 + ? (c < 6016 + ? (c >= 5998 && c <= 6000) + : c <= 6067) + : (c <= 6103 || c == 6108)))))))) + : (c <= 6264 || (c < 7312 + ? (c < 6823 + ? (c < 6512 + ? (c < 6320 + ? (c < 6314 + ? (c >= 6272 && c <= 6312) + : c <= 6314) + : (c <= 6389 || (c < 6480 + ? (c >= 6400 && c <= 6430) + : c <= 6509))) + : (c <= 6516 || (c < 6656 + ? (c < 6576 + ? (c >= 6528 && c <= 6571) + : c <= 6601) + : (c <= 6678 || (c >= 6688 && c <= 6740))))) + : (c <= 6823 || (c < 7098 + ? (c < 7043 + ? (c < 6981 + ? (c >= 6917 && c <= 6963) + : c <= 6988) + : (c <= 7072 || (c >= 7086 && c <= 7087))) + : (c <= 7141 || (c < 7258 + ? (c < 7245 + ? (c >= 7168 && c <= 7203) + : c <= 7247) + : (c <= 7293 || (c >= 7296 && c <= 7304))))))) + : (c <= 7354 || (c < 8008 + ? (c < 7418 + ? (c < 7406 + ? (c < 7401 + ? (c >= 7357 && c <= 7359) + : c <= 7404) + : (c <= 7411 || (c >= 7413 && c <= 7414))) + : (c <= 7418 || (c < 7960 + ? (c < 7680 + ? (c >= 7424 && c <= 7615) + : c <= 7957) + : (c <= 7965 || (c >= 7968 && c <= 8005))))) + : (c <= 8013 || (c < 8031 + ? (c < 8027 + ? (c < 8025 + ? (c >= 8016 && c <= 8023) + : c <= 8025) + : (c <= 8027 || c == 8029)) + : (c <= 8061 || (c < 8126 + ? (c < 8118 + ? (c >= 8064 && c <= 8116) + : c <= 8124) + : (c <= 8126 || (c >= 8130 && c <= 8132))))))))))) + : (c <= 8140 || (c < 12337 + ? (c < 8544 + ? (c < 8458 + ? (c < 8305 + ? (c < 8160 + ? (c < 8150 + ? (c >= 8144 && c <= 8147) + : c <= 8155) + : (c <= 8172 || (c < 8182 + ? (c >= 8178 && c <= 8180) + : c <= 8188))) + : (c <= 8305 || (c < 8450 + ? (c < 8336 + ? c == 8319 + : c <= 8348) + : (c <= 8450 || c == 8455)))) + : (c <= 8467 || (c < 8488 + ? (c < 8484 + ? (c < 8472 + ? c == 8469 + : c <= 8477) + : (c <= 8484 || c == 8486)) + : (c <= 8488 || (c < 8517 + ? (c < 8508 + ? (c >= 8490 && c <= 8505) + : c <= 8511) + : (c <= 8521 || c == 8526)))))) + : (c <= 8584 || (c < 11680 + ? (c < 11559 + ? (c < 11506 + ? (c < 11499 + ? (c >= 11264 && c <= 11492) + : c <= 11502) + : (c <= 11507 || (c >= 11520 && c <= 11557))) + : (c <= 11559 || (c < 11631 + ? (c < 11568 + ? c == 11565 + : c <= 11623) + : (c <= 11631 || (c >= 11648 && c <= 11670))))) + : (c <= 11686 || (c < 11720 + ? (c < 11704 + ? (c < 11696 + ? (c >= 11688 && c <= 11694) + : c <= 11702) + : (c <= 11710 || (c >= 11712 && c <= 11718))) + : (c <= 11726 || (c < 12293 + ? (c < 11736 + ? (c >= 11728 && c <= 11734) + : c <= 11742) + : (c <= 12295 || (c >= 12321 && c <= 12329))))))))) + : (c <= 12341 || (c < 42891 + ? (c < 19968 + ? (c < 12549 + ? (c < 12445 + ? (c < 12353 + ? (c >= 12344 && c <= 12348) + : c <= 12438) + : (c <= 12447 || (c < 12540 + ? (c >= 12449 && c <= 12538) + : c <= 12543))) + : (c <= 12591 || (c < 12784 + ? (c < 12704 + ? (c >= 12593 && c <= 12686) + : c <= 12735) + : (c <= 12799 || (c >= 13312 && c <= 19903))))) + : (c <= 42124 || (c < 42560 + ? (c < 42512 + ? (c < 42240 + ? (c >= 42192 && c <= 42237) + : c <= 42508) + : (c <= 42527 || (c >= 42538 && c <= 42539))) + : (c <= 42606 || (c < 42775 + ? (c < 42656 + ? (c >= 42623 && c <= 42653) + : c <= 42735) + : (c <= 42783 || (c >= 42786 && c <= 42888))))))) + : (c <= 42954 || (c < 43250 + ? (c < 43011 + ? (c < 42965 + ? (c < 42963 + ? (c >= 42960 && c <= 42961) + : c <= 42963) + : (c <= 42969 || (c >= 42994 && c <= 43009))) + : (c <= 43013 || (c < 43072 + ? (c < 43020 + ? (c >= 43015 && c <= 43018) + : c <= 43042) + : (c <= 43123 || (c >= 43138 && c <= 43187))))) + : (c <= 43255 || (c < 43360 + ? (c < 43274 + ? (c < 43261 + ? c == 43259 + : c <= 43262) + : (c <= 43301 || (c >= 43312 && c <= 43334))) + : (c <= 43388 || (c < 43488 + ? (c < 43471 + ? (c >= 43396 && c <= 43442) + : c <= 43471) + : (c <= 43492 || (c >= 43494 && c <= 43503))))))))))))))) + : (c <= 43518 || (c < 70727 + ? (c < 66956 + ? (c < 64914 + ? (c < 43868 + ? (c < 43714 + ? (c < 43646 + ? (c < 43588 + ? (c < 43584 + ? (c >= 43520 && c <= 43560) + : c <= 43586) + : (c <= 43595 || (c < 43642 + ? (c >= 43616 && c <= 43638) + : c <= 43642))) + : (c <= 43695 || (c < 43705 + ? (c < 43701 + ? c == 43697 + : c <= 43702) + : (c <= 43709 || c == 43712)))) + : (c <= 43714 || (c < 43785 + ? (c < 43762 + ? (c < 43744 + ? (c >= 43739 && c <= 43741) + : c <= 43754) + : (c <= 43764 || (c >= 43777 && c <= 43782))) + : (c <= 43790 || (c < 43816 + ? (c < 43808 + ? (c >= 43793 && c <= 43798) + : c <= 43814) + : (c <= 43822 || (c >= 43824 && c <= 43866))))))) + : (c <= 43881 || (c < 64287 + ? (c < 63744 + ? (c < 55216 + ? (c < 44032 + ? (c >= 43888 && c <= 44002) + : c <= 55203) + : (c <= 55238 || (c >= 55243 && c <= 55291))) + : (c <= 64109 || (c < 64275 + ? (c < 64256 + ? (c >= 64112 && c <= 64217) + : c <= 64262) + : (c <= 64279 || c == 64285)))) + : (c <= 64296 || (c < 64323 + ? (c < 64318 + ? (c < 64312 + ? (c >= 64298 && c <= 64310) + : c <= 64316) + : (c <= 64318 || (c >= 64320 && c <= 64321))) + : (c <= 64324 || (c < 64612 + ? (c < 64467 + ? (c >= 64326 && c <= 64433) + : c <= 64605) + : (c <= 64829 || (c >= 64848 && c <= 64911))))))))) + : (c <= 64967 || (c < 65599 + ? (c < 65382 + ? (c < 65147 + ? (c < 65139 + ? (c < 65137 + ? (c >= 65008 && c <= 65017) + : c <= 65137) + : (c <= 65139 || (c < 65145 + ? c == 65143 + : c <= 65145))) + : (c <= 65147 || (c < 65313 + ? (c < 65151 + ? c == 65149 + : c <= 65276) + : (c <= 65338 || (c >= 65345 && c <= 65370))))) + : (c <= 65437 || (c < 65498 + ? (c < 65482 + ? (c < 65474 + ? (c >= 65440 && c <= 65470) + : c <= 65479) + : (c <= 65487 || (c >= 65490 && c <= 65495))) + : (c <= 65500 || (c < 65576 + ? (c < 65549 + ? (c >= 65536 && c <= 65547) + : c <= 65574) + : (c <= 65594 || (c >= 65596 && c <= 65597))))))) + : (c <= 65613 || (c < 66464 + ? (c < 66208 + ? (c < 65856 + ? (c < 65664 + ? (c >= 65616 && c <= 65629) + : c <= 65786) + : (c <= 65908 || (c >= 66176 && c <= 66204))) + : (c <= 66256 || (c < 66384 + ? (c < 66349 + ? (c >= 66304 && c <= 66335) + : c <= 66378) + : (c <= 66421 || (c >= 66432 && c <= 66461))))) + : (c <= 66499 || (c < 66776 + ? (c < 66560 + ? (c < 66513 + ? (c >= 66504 && c <= 66511) + : c <= 66517) + : (c <= 66717 || (c >= 66736 && c <= 66771))) + : (c <= 66811 || (c < 66928 + ? (c < 66864 + ? (c >= 66816 && c <= 66855) + : c <= 66915) + : (c <= 66938 || (c >= 66940 && c <= 66954))))))))))) + : (c <= 66962 || (c < 68864 + ? (c < 67828 + ? (c < 67506 + ? (c < 67072 + ? (c < 66979 + ? (c < 66967 + ? (c >= 66964 && c <= 66965) + : c <= 66977) + : (c <= 66993 || (c < 67003 + ? (c >= 66995 && c <= 67001) + : c <= 67004))) + : (c <= 67382 || (c < 67456 + ? (c < 67424 + ? (c >= 67392 && c <= 67413) + : c <= 67431) + : (c <= 67461 || (c >= 67463 && c <= 67504))))) + : (c <= 67514 || (c < 67644 + ? (c < 67594 + ? (c < 67592 + ? (c >= 67584 && c <= 67589) + : c <= 67592) + : (c <= 67637 || (c >= 67639 && c <= 67640))) + : (c <= 67644 || (c < 67712 + ? (c < 67680 + ? (c >= 67647 && c <= 67669) + : c <= 67702) + : (c <= 67742 || (c >= 67808 && c <= 67826))))))) + : (c <= 67829 || (c < 68224 + ? (c < 68096 + ? (c < 67968 + ? (c < 67872 + ? (c >= 67840 && c <= 67861) + : c <= 67897) + : (c <= 68023 || (c >= 68030 && c <= 68031))) + : (c <= 68096 || (c < 68121 + ? (c < 68117 + ? (c >= 68112 && c <= 68115) + : c <= 68119) + : (c <= 68149 || (c >= 68192 && c <= 68220))))) + : (c <= 68252 || (c < 68448 + ? (c < 68352 + ? (c < 68297 + ? (c >= 68288 && c <= 68295) + : c <= 68324) + : (c <= 68405 || (c >= 68416 && c <= 68437))) + : (c <= 68466 || (c < 68736 + ? (c < 68608 + ? (c >= 68480 && c <= 68497) + : c <= 68680) + : (c <= 68786 || (c >= 68800 && c <= 68850))))))))) + : (c <= 68899 || (c < 70106 + ? (c < 69749 + ? (c < 69488 + ? (c < 69376 + ? (c < 69296 + ? (c >= 69248 && c <= 69289) + : c <= 69297) + : (c <= 69404 || (c < 69424 + ? c == 69415 + : c <= 69445))) + : (c <= 69505 || (c < 69635 + ? (c < 69600 + ? (c >= 69552 && c <= 69572) + : c <= 69622) + : (c <= 69687 || (c >= 69745 && c <= 69746))))) + : (c <= 69749 || (c < 69959 + ? (c < 69891 + ? (c < 69840 + ? (c >= 69763 && c <= 69807) + : c <= 69864) + : (c <= 69926 || c == 69956)) + : (c <= 69959 || (c < 70019 + ? (c < 70006 + ? (c >= 69968 && c <= 70002) + : c <= 70006) + : (c <= 70066 || (c >= 70081 && c <= 70084))))))) + : (c <= 70106 || (c < 70405 + ? (c < 70280 + ? (c < 70163 + ? (c < 70144 + ? c == 70108 + : c <= 70161) + : (c <= 70187 || (c >= 70272 && c <= 70278))) + : (c <= 70280 || (c < 70303 + ? (c < 70287 + ? (c >= 70282 && c <= 70285) + : c <= 70301) + : (c <= 70312 || (c >= 70320 && c <= 70366))))) + : (c <= 70412 || (c < 70453 + ? (c < 70442 + ? (c < 70419 + ? (c >= 70415 && c <= 70416) + : c <= 70440) + : (c <= 70448 || (c >= 70450 && c <= 70451))) + : (c <= 70457 || (c < 70493 + ? (c < 70480 + ? c == 70461 + : c <= 70480) + : (c <= 70497 || (c >= 70656 && c <= 70708))))))))))))) + : (c <= 70730 || (c < 119894 + ? (c < 73056 + ? (c < 72001 + ? (c < 71424 + ? (c < 71128 + ? (c < 70852 + ? (c < 70784 + ? (c >= 70751 && c <= 70753) + : c <= 70831) + : (c <= 70853 || (c < 71040 + ? c == 70855 + : c <= 71086))) + : (c <= 71131 || (c < 71296 + ? (c < 71236 + ? (c >= 71168 && c <= 71215) + : c <= 71236) + : (c <= 71338 || c == 71352)))) + : (c <= 71450 || (c < 71945 + ? (c < 71840 + ? (c < 71680 + ? (c >= 71488 && c <= 71494) + : c <= 71723) + : (c <= 71903 || (c >= 71935 && c <= 71942))) + : (c <= 71945 || (c < 71960 + ? (c < 71957 + ? (c >= 71948 && c <= 71955) + : c <= 71958) + : (c <= 71983 || c == 71999)))))) + : (c <= 72001 || (c < 72349 + ? (c < 72192 + ? (c < 72161 + ? (c < 72106 + ? (c >= 72096 && c <= 72103) + : c <= 72144) + : (c <= 72161 || c == 72163)) + : (c <= 72192 || (c < 72272 + ? (c < 72250 + ? (c >= 72203 && c <= 72242) + : c <= 72250) + : (c <= 72272 || (c >= 72284 && c <= 72329))))) + : (c <= 72349 || (c < 72818 + ? (c < 72714 + ? (c < 72704 + ? (c >= 72368 && c <= 72440) + : c <= 72712) + : (c <= 72750 || c == 72768)) + : (c <= 72847 || (c < 72971 + ? (c < 72968 + ? (c >= 72960 && c <= 72966) + : c <= 72969) + : (c <= 73008 || c == 73030)))))))) + : (c <= 73061 || (c < 93952 + ? (c < 82944 + ? (c < 73728 + ? (c < 73112 + ? (c < 73066 + ? (c >= 73063 && c <= 73064) + : c <= 73097) + : (c <= 73112 || (c < 73648 + ? (c >= 73440 && c <= 73458) + : c <= 73648))) + : (c <= 74649 || (c < 77712 + ? (c < 74880 + ? (c >= 74752 && c <= 74862) + : c <= 75075) + : (c <= 77808 || (c >= 77824 && c <= 78894))))) + : (c <= 83526 || (c < 92928 + ? (c < 92784 + ? (c < 92736 + ? (c >= 92160 && c <= 92728) + : c <= 92766) + : (c <= 92862 || (c >= 92880 && c <= 92909))) + : (c <= 92975 || (c < 93053 + ? (c < 93027 + ? (c >= 92992 && c <= 92995) + : c <= 93047) + : (c <= 93071 || (c >= 93760 && c <= 93823))))))) + : (c <= 94026 || (c < 110589 + ? (c < 94208 + ? (c < 94176 + ? (c < 94099 + ? c == 94032 + : c <= 94111) + : (c <= 94177 || c == 94179)) + : (c <= 100343 || (c < 110576 + ? (c < 101632 + ? (c >= 100352 && c <= 101589) + : c <= 101640) + : (c <= 110579 || (c >= 110581 && c <= 110587))))) + : (c <= 110590 || (c < 113664 + ? (c < 110948 + ? (c < 110928 + ? (c >= 110592 && c <= 110882) + : c <= 110930) + : (c <= 110951 || (c >= 110960 && c <= 111355))) + : (c <= 113770 || (c < 113808 + ? (c < 113792 + ? (c >= 113776 && c <= 113788) + : c <= 113800) + : (c <= 113817 || (c >= 119808 && c <= 119892))))))))))) + : (c <= 119964 || (c < 125259 + ? (c < 120572 + ? (c < 120086 + ? (c < 119995 + ? (c < 119973 + ? (c < 119970 + ? (c >= 119966 && c <= 119967) + : c <= 119970) + : (c <= 119974 || (c < 119982 + ? (c >= 119977 && c <= 119980) + : c <= 119993))) + : (c <= 119995 || (c < 120071 + ? (c < 120005 + ? (c >= 119997 && c <= 120003) + : c <= 120069) + : (c <= 120074 || (c >= 120077 && c <= 120084))))) + : (c <= 120092 || (c < 120138 + ? (c < 120128 + ? (c < 120123 + ? (c >= 120094 && c <= 120121) + : c <= 120126) + : (c <= 120132 || c == 120134)) + : (c <= 120144 || (c < 120514 + ? (c < 120488 + ? (c >= 120146 && c <= 120485) + : c <= 120512) + : (c <= 120538 || (c >= 120540 && c <= 120570))))))) + : (c <= 120596 || (c < 123191 + ? (c < 120714 + ? (c < 120656 + ? (c < 120630 + ? (c >= 120598 && c <= 120628) + : c <= 120654) + : (c <= 120686 || (c >= 120688 && c <= 120712))) + : (c <= 120744 || (c < 122624 + ? (c < 120772 + ? (c >= 120746 && c <= 120770) + : c <= 120779) + : (c <= 122654 || (c >= 123136 && c <= 123180))))) + : (c <= 123197 || (c < 124904 + ? (c < 123584 + ? (c < 123536 + ? c == 123214 + : c <= 123565) + : (c <= 123627 || (c >= 124896 && c <= 124902))) + : (c <= 124907 || (c < 124928 + ? (c < 124912 + ? (c >= 124909 && c <= 124910) + : c <= 124926) + : (c <= 125124 || (c >= 125184 && c <= 125251))))))))) + : (c <= 125259 || (c < 126559 + ? (c < 126535 + ? (c < 126505 + ? (c < 126497 + ? (c < 126469 + ? (c >= 126464 && c <= 126467) + : c <= 126495) + : (c <= 126498 || (c < 126503 + ? c == 126500 + : c <= 126503))) + : (c <= 126514 || (c < 126523 + ? (c < 126521 + ? (c >= 126516 && c <= 126519) + : c <= 126521) + : (c <= 126523 || c == 126530)))) + : (c <= 126535 || (c < 126548 + ? (c < 126541 + ? (c < 126539 + ? c == 126537 + : c <= 126539) + : (c <= 126543 || (c >= 126545 && c <= 126546))) + : (c <= 126548 || (c < 126555 + ? (c < 126553 + ? c == 126551 + : c <= 126553) + : (c <= 126555 || c == 126557)))))) + : (c <= 126559 || (c < 126625 + ? (c < 126580 + ? (c < 126567 + ? (c < 126564 + ? (c >= 126561 && c <= 126562) + : c <= 126564) + : (c <= 126570 || (c >= 126572 && c <= 126578))) + : (c <= 126583 || (c < 126592 + ? (c < 126590 + ? (c >= 126585 && c <= 126588) + : c <= 126590) + : (c <= 126601 || (c >= 126603 && c <= 126619))))) + : (c <= 126627 || (c < 177984 + ? (c < 131072 + ? (c < 126635 + ? (c >= 126629 && c <= 126633) + : c <= 126651) + : (c <= 173791 || (c >= 173824 && c <= 177976))) + : (c <= 178205 || (c < 194560 + ? (c < 183984 + ? (c >= 178208 && c <= 183969) + : c <= 191456) + : (c <= 195101 || (c >= 196608 && c <= 201546))))))))))))))))); +} + +static inline bool sym_identifier_character_set_2(int32_t c) { + return (c < 43514 + ? (c < 4193 + ? (c < 2707 + ? (c < 1994 + ? (c < 910 + ? (c < 736 + ? (c < 186 + ? (c < 'a' + ? (c < '_' + ? (c >= 'A' && c <= 'Z') + : c <= '_') + : (c <= 'z' || (c < 181 + ? c == 170 + : c <= 181))) + : (c <= 186 || (c < 248 + ? (c < 216 + ? (c >= 192 && c <= 214) + : c <= 246) + : (c <= 705 || (c >= 710 && c <= 721))))) + : (c <= 740 || (c < 891 + ? (c < 880 + ? (c < 750 + ? c == 748 + : c <= 750) + : (c <= 884 || (c >= 886 && c <= 887))) + : (c <= 893 || (c < 904 + ? (c < 902 + ? c == 895 + : c <= 902) + : (c <= 906 || c == 908)))))) + : (c <= 929 || (c < 1649 + ? (c < 1376 + ? (c < 1162 + ? (c < 1015 + ? (c >= 931 && c <= 1013) + : c <= 1153) + : (c <= 1327 || (c < 1369 + ? (c >= 1329 && c <= 1366) + : c <= 1369))) + : (c <= 1416 || (c < 1568 + ? (c < 1519 + ? (c >= 1488 && c <= 1514) + : c <= 1522) + : (c <= 1610 || (c >= 1646 && c <= 1647))))) + : (c <= 1747 || (c < 1791 + ? (c < 1774 + ? (c < 1765 + ? c == 1749 + : c <= 1766) + : (c <= 1775 || (c >= 1786 && c <= 1788))) + : (c <= 1791 || (c < 1869 + ? (c < 1810 + ? c == 1808 + : c <= 1839) + : (c <= 1957 || c == 1969)))))))) + : (c <= 2026 || (c < 2482 + ? (c < 2208 + ? (c < 2088 + ? (c < 2048 + ? (c < 2042 + ? (c >= 2036 && c <= 2037) + : c <= 2042) + : (c <= 2069 || (c < 2084 + ? c == 2074 + : c <= 2084))) + : (c <= 2088 || (c < 2160 + ? (c < 2144 + ? (c >= 2112 && c <= 2136) + : c <= 2154) + : (c <= 2183 || (c >= 2185 && c <= 2190))))) + : (c <= 2249 || (c < 2417 + ? (c < 2384 + ? (c < 2365 + ? (c >= 2308 && c <= 2361) + : c <= 2365) + : (c <= 2384 || (c >= 2392 && c <= 2401))) + : (c <= 2432 || (c < 2451 + ? (c < 2447 + ? (c >= 2437 && c <= 2444) + : c <= 2448) + : (c <= 2472 || (c >= 2474 && c <= 2480))))))) + : (c <= 2482 || (c < 2579 + ? (c < 2527 + ? (c < 2510 + ? (c < 2493 + ? (c >= 2486 && c <= 2489) + : c <= 2493) + : (c <= 2510 || (c >= 2524 && c <= 2525))) + : (c <= 2529 || (c < 2565 + ? (c < 2556 + ? (c >= 2544 && c <= 2545) + : c <= 2556) + : (c <= 2570 || (c >= 2575 && c <= 2576))))) + : (c <= 2600 || (c < 2649 + ? (c < 2613 + ? (c < 2610 + ? (c >= 2602 && c <= 2608) + : c <= 2611) + : (c <= 2614 || (c >= 2616 && c <= 2617))) + : (c <= 2652 || (c < 2693 + ? (c < 2674 + ? c == 2654 + : c <= 2676) + : (c <= 2701 || (c >= 2703 && c <= 2705))))))))))) + : (c <= 2728 || (c < 3242 + ? (c < 2962 + ? (c < 2858 + ? (c < 2784 + ? (c < 2741 + ? (c < 2738 + ? (c >= 2730 && c <= 2736) + : c <= 2739) + : (c <= 2745 || (c < 2768 + ? c == 2749 + : c <= 2768))) + : (c <= 2785 || (c < 2831 + ? (c < 2821 + ? c == 2809 + : c <= 2828) + : (c <= 2832 || (c >= 2835 && c <= 2856))))) + : (c <= 2864 || (c < 2911 + ? (c < 2877 + ? (c < 2869 + ? (c >= 2866 && c <= 2867) + : c <= 2873) + : (c <= 2877 || (c >= 2908 && c <= 2909))) + : (c <= 2913 || (c < 2949 + ? (c < 2947 + ? c == 2929 + : c <= 2947) + : (c <= 2954 || (c >= 2958 && c <= 2960))))))) + : (c <= 2965 || (c < 3090 + ? (c < 2984 + ? (c < 2974 + ? (c < 2972 + ? (c >= 2969 && c <= 2970) + : c <= 2972) + : (c <= 2975 || (c >= 2979 && c <= 2980))) + : (c <= 2986 || (c < 3077 + ? (c < 3024 + ? (c >= 2990 && c <= 3001) + : c <= 3024) + : (c <= 3084 || (c >= 3086 && c <= 3088))))) + : (c <= 3112 || (c < 3168 + ? (c < 3160 + ? (c < 3133 + ? (c >= 3114 && c <= 3129) + : c <= 3133) + : (c <= 3162 || c == 3165)) + : (c <= 3169 || (c < 3214 + ? (c < 3205 + ? c == 3200 + : c <= 3212) + : (c <= 3216 || (c >= 3218 && c <= 3240))))))))) + : (c <= 3251 || (c < 3648 + ? (c < 3412 + ? (c < 3332 + ? (c < 3293 + ? (c < 3261 + ? (c >= 3253 && c <= 3257) + : c <= 3261) + : (c <= 3294 || (c < 3313 + ? (c >= 3296 && c <= 3297) + : c <= 3314))) + : (c <= 3340 || (c < 3389 + ? (c < 3346 + ? (c >= 3342 && c <= 3344) + : c <= 3386) + : (c <= 3389 || c == 3406)))) + : (c <= 3414 || (c < 3507 + ? (c < 3461 + ? (c < 3450 + ? (c >= 3423 && c <= 3425) + : c <= 3455) + : (c <= 3478 || (c >= 3482 && c <= 3505))) + : (c <= 3515 || (c < 3585 + ? (c < 3520 + ? c == 3517 + : c <= 3526) + : (c <= 3632 || c == 3634)))))) + : (c <= 3654 || (c < 3782 + ? (c < 3749 + ? (c < 3718 + ? (c < 3716 + ? (c >= 3713 && c <= 3714) + : c <= 3716) + : (c <= 3722 || (c >= 3724 && c <= 3747))) + : (c <= 3749 || (c < 3773 + ? (c < 3762 + ? (c >= 3751 && c <= 3760) + : c <= 3762) + : (c <= 3773 || (c >= 3776 && c <= 3780))))) + : (c <= 3782 || (c < 3976 + ? (c < 3904 + ? (c < 3840 + ? (c >= 3804 && c <= 3807) + : c <= 3840) + : (c <= 3911 || (c >= 3913 && c <= 3948))) + : (c <= 3980 || (c < 4176 + ? (c < 4159 + ? (c >= 4096 && c <= 4138) + : c <= 4159) + : (c <= 4181 || (c >= 4186 && c <= 4189))))))))))))) + : (c <= 4193 || (c < 8134 + ? (c < 6176 + ? (c < 4808 + ? (c < 4688 + ? (c < 4295 + ? (c < 4213 + ? (c < 4206 + ? (c >= 4197 && c <= 4198) + : c <= 4208) + : (c <= 4225 || (c < 4256 + ? c == 4238 + : c <= 4293))) + : (c <= 4295 || (c < 4348 + ? (c < 4304 + ? c == 4301 + : c <= 4346) + : (c <= 4680 || (c >= 4682 && c <= 4685))))) + : (c <= 4694 || (c < 4752 + ? (c < 4704 + ? (c < 4698 + ? c == 4696 + : c <= 4701) + : (c <= 4744 || (c >= 4746 && c <= 4749))) + : (c <= 4784 || (c < 4800 + ? (c < 4792 + ? (c >= 4786 && c <= 4789) + : c <= 4798) + : (c <= 4800 || (c >= 4802 && c <= 4805))))))) + : (c <= 4822 || (c < 5792 + ? (c < 5024 + ? (c < 4888 + ? (c < 4882 + ? (c >= 4824 && c <= 4880) + : c <= 4885) + : (c <= 4954 || (c >= 4992 && c <= 5007))) + : (c <= 5109 || (c < 5743 + ? (c < 5121 + ? (c >= 5112 && c <= 5117) + : c <= 5740) + : (c <= 5759 || (c >= 5761 && c <= 5786))))) + : (c <= 5866 || (c < 5984 + ? (c < 5919 + ? (c < 5888 + ? (c >= 5870 && c <= 5880) + : c <= 5905) + : (c <= 5937 || (c >= 5952 && c <= 5969))) + : (c <= 5996 || (c < 6103 + ? (c < 6016 + ? (c >= 5998 && c <= 6000) + : c <= 6067) + : (c <= 6103 || c == 6108)))))))) + : (c <= 6264 || (c < 7312 + ? (c < 6823 + ? (c < 6512 + ? (c < 6320 + ? (c < 6314 + ? (c >= 6272 && c <= 6312) + : c <= 6314) + : (c <= 6389 || (c < 6480 + ? (c >= 6400 && c <= 6430) + : c <= 6509))) + : (c <= 6516 || (c < 6656 + ? (c < 6576 + ? (c >= 6528 && c <= 6571) + : c <= 6601) + : (c <= 6678 || (c >= 6688 && c <= 6740))))) + : (c <= 6823 || (c < 7098 + ? (c < 7043 + ? (c < 6981 + ? (c >= 6917 && c <= 6963) + : c <= 6988) + : (c <= 7072 || (c >= 7086 && c <= 7087))) + : (c <= 7141 || (c < 7258 + ? (c < 7245 + ? (c >= 7168 && c <= 7203) + : c <= 7247) + : (c <= 7293 || (c >= 7296 && c <= 7304))))))) + : (c <= 7354 || (c < 8008 + ? (c < 7418 + ? (c < 7406 + ? (c < 7401 + ? (c >= 7357 && c <= 7359) + : c <= 7404) + : (c <= 7411 || (c >= 7413 && c <= 7414))) + : (c <= 7418 || (c < 7960 + ? (c < 7680 + ? (c >= 7424 && c <= 7615) + : c <= 7957) + : (c <= 7965 || (c >= 7968 && c <= 8005))))) + : (c <= 8013 || (c < 8031 + ? (c < 8027 + ? (c < 8025 + ? (c >= 8016 && c <= 8023) + : c <= 8025) + : (c <= 8027 || c == 8029)) + : (c <= 8061 || (c < 8126 + ? (c < 8118 + ? (c >= 8064 && c <= 8116) + : c <= 8124) + : (c <= 8126 || (c >= 8130 && c <= 8132))))))))))) + : (c <= 8140 || (c < 12337 + ? (c < 8544 + ? (c < 8458 + ? (c < 8305 + ? (c < 8160 + ? (c < 8150 + ? (c >= 8144 && c <= 8147) + : c <= 8155) + : (c <= 8172 || (c < 8182 + ? (c >= 8178 && c <= 8180) + : c <= 8188))) + : (c <= 8305 || (c < 8450 + ? (c < 8336 + ? c == 8319 + : c <= 8348) + : (c <= 8450 || c == 8455)))) + : (c <= 8467 || (c < 8488 + ? (c < 8484 + ? (c < 8472 + ? c == 8469 + : c <= 8477) + : (c <= 8484 || c == 8486)) + : (c <= 8488 || (c < 8517 + ? (c < 8508 + ? (c >= 8490 && c <= 8505) + : c <= 8511) + : (c <= 8521 || c == 8526)))))) + : (c <= 8584 || (c < 11680 + ? (c < 11559 + ? (c < 11506 + ? (c < 11499 + ? (c >= 11264 && c <= 11492) + : c <= 11502) + : (c <= 11507 || (c >= 11520 && c <= 11557))) + : (c <= 11559 || (c < 11631 + ? (c < 11568 + ? c == 11565 + : c <= 11623) + : (c <= 11631 || (c >= 11648 && c <= 11670))))) + : (c <= 11686 || (c < 11720 + ? (c < 11704 + ? (c < 11696 + ? (c >= 11688 && c <= 11694) + : c <= 11702) + : (c <= 11710 || (c >= 11712 && c <= 11718))) + : (c <= 11726 || (c < 12293 + ? (c < 11736 + ? (c >= 11728 && c <= 11734) + : c <= 11742) + : (c <= 12295 || (c >= 12321 && c <= 12329))))))))) + : (c <= 12341 || (c < 42891 + ? (c < 19968 + ? (c < 12549 + ? (c < 12445 + ? (c < 12353 + ? (c >= 12344 && c <= 12348) + : c <= 12438) + : (c <= 12447 || (c < 12540 + ? (c >= 12449 && c <= 12538) + : c <= 12543))) + : (c <= 12591 || (c < 12784 + ? (c < 12704 + ? (c >= 12593 && c <= 12686) + : c <= 12735) + : (c <= 12799 || (c >= 13312 && c <= 19903))))) + : (c <= 42124 || (c < 42560 + ? (c < 42512 + ? (c < 42240 + ? (c >= 42192 && c <= 42237) + : c <= 42508) + : (c <= 42527 || (c >= 42538 && c <= 42539))) + : (c <= 42606 || (c < 42775 + ? (c < 42656 + ? (c >= 42623 && c <= 42653) + : c <= 42735) + : (c <= 42783 || (c >= 42786 && c <= 42888))))))) + : (c <= 42954 || (c < 43250 + ? (c < 43011 + ? (c < 42965 + ? (c < 42963 + ? (c >= 42960 && c <= 42961) + : c <= 42963) + : (c <= 42969 || (c >= 42994 && c <= 43009))) + : (c <= 43013 || (c < 43072 + ? (c < 43020 + ? (c >= 43015 && c <= 43018) + : c <= 43042) + : (c <= 43123 || (c >= 43138 && c <= 43187))))) + : (c <= 43255 || (c < 43360 + ? (c < 43274 + ? (c < 43261 + ? c == 43259 + : c <= 43262) + : (c <= 43301 || (c >= 43312 && c <= 43334))) + : (c <= 43388 || (c < 43488 + ? (c < 43471 + ? (c >= 43396 && c <= 43442) + : c <= 43471) + : (c <= 43492 || (c >= 43494 && c <= 43503))))))))))))))) + : (c <= 43518 || (c < 70727 + ? (c < 66956 + ? (c < 64914 + ? (c < 43868 + ? (c < 43714 + ? (c < 43646 + ? (c < 43588 + ? (c < 43584 + ? (c >= 43520 && c <= 43560) + : c <= 43586) + : (c <= 43595 || (c < 43642 + ? (c >= 43616 && c <= 43638) + : c <= 43642))) + : (c <= 43695 || (c < 43705 + ? (c < 43701 + ? c == 43697 + : c <= 43702) + : (c <= 43709 || c == 43712)))) + : (c <= 43714 || (c < 43785 + ? (c < 43762 + ? (c < 43744 + ? (c >= 43739 && c <= 43741) + : c <= 43754) + : (c <= 43764 || (c >= 43777 && c <= 43782))) + : (c <= 43790 || (c < 43816 + ? (c < 43808 + ? (c >= 43793 && c <= 43798) + : c <= 43814) + : (c <= 43822 || (c >= 43824 && c <= 43866))))))) + : (c <= 43881 || (c < 64287 + ? (c < 63744 + ? (c < 55216 + ? (c < 44032 + ? (c >= 43888 && c <= 44002) + : c <= 55203) + : (c <= 55238 || (c >= 55243 && c <= 55291))) + : (c <= 64109 || (c < 64275 + ? (c < 64256 + ? (c >= 64112 && c <= 64217) + : c <= 64262) + : (c <= 64279 || c == 64285)))) + : (c <= 64296 || (c < 64323 + ? (c < 64318 + ? (c < 64312 + ? (c >= 64298 && c <= 64310) + : c <= 64316) + : (c <= 64318 || (c >= 64320 && c <= 64321))) + : (c <= 64324 || (c < 64612 + ? (c < 64467 + ? (c >= 64326 && c <= 64433) + : c <= 64605) + : (c <= 64829 || (c >= 64848 && c <= 64911))))))))) + : (c <= 64967 || (c < 65599 + ? (c < 65382 + ? (c < 65147 + ? (c < 65139 + ? (c < 65137 + ? (c >= 65008 && c <= 65017) + : c <= 65137) + : (c <= 65139 || (c < 65145 + ? c == 65143 + : c <= 65145))) + : (c <= 65147 || (c < 65313 + ? (c < 65151 + ? c == 65149 + : c <= 65276) + : (c <= 65338 || (c >= 65345 && c <= 65370))))) + : (c <= 65437 || (c < 65498 + ? (c < 65482 + ? (c < 65474 + ? (c >= 65440 && c <= 65470) + : c <= 65479) + : (c <= 65487 || (c >= 65490 && c <= 65495))) + : (c <= 65500 || (c < 65576 + ? (c < 65549 + ? (c >= 65536 && c <= 65547) + : c <= 65574) + : (c <= 65594 || (c >= 65596 && c <= 65597))))))) + : (c <= 65613 || (c < 66464 + ? (c < 66208 + ? (c < 65856 + ? (c < 65664 + ? (c >= 65616 && c <= 65629) + : c <= 65786) + : (c <= 65908 || (c >= 66176 && c <= 66204))) + : (c <= 66256 || (c < 66384 + ? (c < 66349 + ? (c >= 66304 && c <= 66335) + : c <= 66378) + : (c <= 66421 || (c >= 66432 && c <= 66461))))) + : (c <= 66499 || (c < 66776 + ? (c < 66560 + ? (c < 66513 + ? (c >= 66504 && c <= 66511) + : c <= 66517) + : (c <= 66717 || (c >= 66736 && c <= 66771))) + : (c <= 66811 || (c < 66928 + ? (c < 66864 + ? (c >= 66816 && c <= 66855) + : c <= 66915) + : (c <= 66938 || (c >= 66940 && c <= 66954))))))))))) + : (c <= 66962 || (c < 68864 + ? (c < 67828 + ? (c < 67506 + ? (c < 67072 + ? (c < 66979 + ? (c < 66967 + ? (c >= 66964 && c <= 66965) + : c <= 66977) + : (c <= 66993 || (c < 67003 + ? (c >= 66995 && c <= 67001) + : c <= 67004))) + : (c <= 67382 || (c < 67456 + ? (c < 67424 + ? (c >= 67392 && c <= 67413) + : c <= 67431) + : (c <= 67461 || (c >= 67463 && c <= 67504))))) + : (c <= 67514 || (c < 67644 + ? (c < 67594 + ? (c < 67592 + ? (c >= 67584 && c <= 67589) + : c <= 67592) + : (c <= 67637 || (c >= 67639 && c <= 67640))) + : (c <= 67644 || (c < 67712 + ? (c < 67680 + ? (c >= 67647 && c <= 67669) + : c <= 67702) + : (c <= 67742 || (c >= 67808 && c <= 67826))))))) + : (c <= 67829 || (c < 68224 + ? (c < 68096 + ? (c < 67968 + ? (c < 67872 + ? (c >= 67840 && c <= 67861) + : c <= 67897) + : (c <= 68023 || (c >= 68030 && c <= 68031))) + : (c <= 68096 || (c < 68121 + ? (c < 68117 + ? (c >= 68112 && c <= 68115) + : c <= 68119) + : (c <= 68149 || (c >= 68192 && c <= 68220))))) + : (c <= 68252 || (c < 68448 + ? (c < 68352 + ? (c < 68297 + ? (c >= 68288 && c <= 68295) + : c <= 68324) + : (c <= 68405 || (c >= 68416 && c <= 68437))) + : (c <= 68466 || (c < 68736 + ? (c < 68608 + ? (c >= 68480 && c <= 68497) + : c <= 68680) + : (c <= 68786 || (c >= 68800 && c <= 68850))))))))) + : (c <= 68899 || (c < 70106 + ? (c < 69749 + ? (c < 69488 + ? (c < 69376 + ? (c < 69296 + ? (c >= 69248 && c <= 69289) + : c <= 69297) + : (c <= 69404 || (c < 69424 + ? c == 69415 + : c <= 69445))) + : (c <= 69505 || (c < 69635 + ? (c < 69600 + ? (c >= 69552 && c <= 69572) + : c <= 69622) + : (c <= 69687 || (c >= 69745 && c <= 69746))))) + : (c <= 69749 || (c < 69959 + ? (c < 69891 + ? (c < 69840 + ? (c >= 69763 && c <= 69807) + : c <= 69864) + : (c <= 69926 || c == 69956)) + : (c <= 69959 || (c < 70019 + ? (c < 70006 + ? (c >= 69968 && c <= 70002) + : c <= 70006) + : (c <= 70066 || (c >= 70081 && c <= 70084))))))) + : (c <= 70106 || (c < 70405 + ? (c < 70280 + ? (c < 70163 + ? (c < 70144 + ? c == 70108 + : c <= 70161) + : (c <= 70187 || (c >= 70272 && c <= 70278))) + : (c <= 70280 || (c < 70303 + ? (c < 70287 + ? (c >= 70282 && c <= 70285) + : c <= 70301) + : (c <= 70312 || (c >= 70320 && c <= 70366))))) + : (c <= 70412 || (c < 70453 + ? (c < 70442 + ? (c < 70419 + ? (c >= 70415 && c <= 70416) + : c <= 70440) + : (c <= 70448 || (c >= 70450 && c <= 70451))) + : (c <= 70457 || (c < 70493 + ? (c < 70480 + ? c == 70461 + : c <= 70480) + : (c <= 70497 || (c >= 70656 && c <= 70708))))))))))))) + : (c <= 70730 || (c < 119894 + ? (c < 73056 + ? (c < 72001 + ? (c < 71424 + ? (c < 71128 + ? (c < 70852 + ? (c < 70784 + ? (c >= 70751 && c <= 70753) + : c <= 70831) + : (c <= 70853 || (c < 71040 + ? c == 70855 + : c <= 71086))) + : (c <= 71131 || (c < 71296 + ? (c < 71236 + ? (c >= 71168 && c <= 71215) + : c <= 71236) + : (c <= 71338 || c == 71352)))) + : (c <= 71450 || (c < 71945 + ? (c < 71840 + ? (c < 71680 + ? (c >= 71488 && c <= 71494) + : c <= 71723) + : (c <= 71903 || (c >= 71935 && c <= 71942))) + : (c <= 71945 || (c < 71960 + ? (c < 71957 + ? (c >= 71948 && c <= 71955) + : c <= 71958) + : (c <= 71983 || c == 71999)))))) + : (c <= 72001 || (c < 72349 + ? (c < 72192 + ? (c < 72161 + ? (c < 72106 + ? (c >= 72096 && c <= 72103) + : c <= 72144) + : (c <= 72161 || c == 72163)) + : (c <= 72192 || (c < 72272 + ? (c < 72250 + ? (c >= 72203 && c <= 72242) + : c <= 72250) + : (c <= 72272 || (c >= 72284 && c <= 72329))))) + : (c <= 72349 || (c < 72818 + ? (c < 72714 + ? (c < 72704 + ? (c >= 72368 && c <= 72440) + : c <= 72712) + : (c <= 72750 || c == 72768)) + : (c <= 72847 || (c < 72971 + ? (c < 72968 + ? (c >= 72960 && c <= 72966) + : c <= 72969) + : (c <= 73008 || c == 73030)))))))) + : (c <= 73061 || (c < 93952 + ? (c < 82944 + ? (c < 73728 + ? (c < 73112 + ? (c < 73066 + ? (c >= 73063 && c <= 73064) + : c <= 73097) + : (c <= 73112 || (c < 73648 + ? (c >= 73440 && c <= 73458) + : c <= 73648))) + : (c <= 74649 || (c < 77712 + ? (c < 74880 + ? (c >= 74752 && c <= 74862) + : c <= 75075) + : (c <= 77808 || (c >= 77824 && c <= 78894))))) + : (c <= 83526 || (c < 92928 + ? (c < 92784 + ? (c < 92736 + ? (c >= 92160 && c <= 92728) + : c <= 92766) + : (c <= 92862 || (c >= 92880 && c <= 92909))) + : (c <= 92975 || (c < 93053 + ? (c < 93027 + ? (c >= 92992 && c <= 92995) + : c <= 93047) + : (c <= 93071 || (c >= 93760 && c <= 93823))))))) + : (c <= 94026 || (c < 110589 + ? (c < 94208 + ? (c < 94176 + ? (c < 94099 + ? c == 94032 + : c <= 94111) + : (c <= 94177 || c == 94179)) + : (c <= 100343 || (c < 110576 + ? (c < 101632 + ? (c >= 100352 && c <= 101589) + : c <= 101640) + : (c <= 110579 || (c >= 110581 && c <= 110587))))) + : (c <= 110590 || (c < 113664 + ? (c < 110948 + ? (c < 110928 + ? (c >= 110592 && c <= 110882) + : c <= 110930) + : (c <= 110951 || (c >= 110960 && c <= 111355))) + : (c <= 113770 || (c < 113808 + ? (c < 113792 + ? (c >= 113776 && c <= 113788) + : c <= 113800) + : (c <= 113817 || (c >= 119808 && c <= 119892))))))))))) + : (c <= 119964 || (c < 125259 + ? (c < 120572 + ? (c < 120086 + ? (c < 119995 + ? (c < 119973 + ? (c < 119970 + ? (c >= 119966 && c <= 119967) + : c <= 119970) + : (c <= 119974 || (c < 119982 + ? (c >= 119977 && c <= 119980) + : c <= 119993))) + : (c <= 119995 || (c < 120071 + ? (c < 120005 + ? (c >= 119997 && c <= 120003) + : c <= 120069) + : (c <= 120074 || (c >= 120077 && c <= 120084))))) + : (c <= 120092 || (c < 120138 + ? (c < 120128 + ? (c < 120123 + ? (c >= 120094 && c <= 120121) + : c <= 120126) + : (c <= 120132 || c == 120134)) + : (c <= 120144 || (c < 120514 + ? (c < 120488 + ? (c >= 120146 && c <= 120485) + : c <= 120512) + : (c <= 120538 || (c >= 120540 && c <= 120570))))))) + : (c <= 120596 || (c < 123191 + ? (c < 120714 + ? (c < 120656 + ? (c < 120630 + ? (c >= 120598 && c <= 120628) + : c <= 120654) + : (c <= 120686 || (c >= 120688 && c <= 120712))) + : (c <= 120744 || (c < 122624 + ? (c < 120772 + ? (c >= 120746 && c <= 120770) + : c <= 120779) + : (c <= 122654 || (c >= 123136 && c <= 123180))))) + : (c <= 123197 || (c < 124904 + ? (c < 123584 + ? (c < 123536 + ? c == 123214 + : c <= 123565) + : (c <= 123627 || (c >= 124896 && c <= 124902))) + : (c <= 124907 || (c < 124928 + ? (c < 124912 + ? (c >= 124909 && c <= 124910) + : c <= 124926) + : (c <= 125124 || (c >= 125184 && c <= 125251))))))))) + : (c <= 125259 || (c < 126559 + ? (c < 126535 + ? (c < 126505 + ? (c < 126497 + ? (c < 126469 + ? (c >= 126464 && c <= 126467) + : c <= 126495) + : (c <= 126498 || (c < 126503 + ? c == 126500 + : c <= 126503))) + : (c <= 126514 || (c < 126523 + ? (c < 126521 + ? (c >= 126516 && c <= 126519) + : c <= 126521) + : (c <= 126523 || c == 126530)))) + : (c <= 126535 || (c < 126548 + ? (c < 126541 + ? (c < 126539 + ? c == 126537 + : c <= 126539) + : (c <= 126543 || (c >= 126545 && c <= 126546))) + : (c <= 126548 || (c < 126555 + ? (c < 126553 + ? c == 126551 + : c <= 126553) + : (c <= 126555 || c == 126557)))))) + : (c <= 126559 || (c < 126625 + ? (c < 126580 + ? (c < 126567 + ? (c < 126564 + ? (c >= 126561 && c <= 126562) + : c <= 126564) + : (c <= 126570 || (c >= 126572 && c <= 126578))) + : (c <= 126583 || (c < 126592 + ? (c < 126590 + ? (c >= 126585 && c <= 126588) + : c <= 126590) + : (c <= 126601 || (c >= 126603 && c <= 126619))))) + : (c <= 126627 || (c < 177984 + ? (c < 131072 + ? (c < 126635 + ? (c >= 126629 && c <= 126633) + : c <= 126651) + : (c <= 173791 || (c >= 173824 && c <= 177976))) + : (c <= 178205 || (c < 194560 + ? (c < 183984 + ? (c >= 178208 && c <= 183969) + : c <= 191456) + : (c <= 195101 || (c >= 196608 && c <= 201546))))))))))))))))); +} + +static inline bool sym_identifier_character_set_3(int32_t c) { + return (c < 43616 + ? (c < 3782 + ? (c < 2748 + ? (c < 2045 + ? (c < 1015 + ? (c < 710 + ? (c < 181 + ? (c < '_' + ? (c < 'A' + ? (c >= '0' && c <= '9') + : c <= 'Z') + : (c <= '_' || (c < 170 + ? (c >= 'a' && c <= 'z') + : c <= 170))) + : (c <= 181 || (c < 192 + ? (c < 186 + ? c == 183 + : c <= 186) + : (c <= 214 || (c < 248 + ? (c >= 216 && c <= 246) + : c <= 705))))) + : (c <= 721 || (c < 891 + ? (c < 750 + ? (c < 748 + ? (c >= 736 && c <= 740) + : c <= 748) + : (c <= 750 || (c < 886 + ? (c >= 768 && c <= 884) + : c <= 887))) + : (c <= 893 || (c < 908 + ? (c < 902 + ? c == 895 + : c <= 906) + : (c <= 908 || (c < 931 + ? (c >= 910 && c <= 929) + : c <= 1013))))))) + : (c <= 1153 || (c < 1519 + ? (c < 1425 + ? (c < 1329 + ? (c < 1162 + ? (c >= 1155 && c <= 1159) + : c <= 1327) + : (c <= 1366 || (c < 1376 + ? c == 1369 + : c <= 1416))) + : (c <= 1469 || (c < 1476 + ? (c < 1473 + ? c == 1471 + : c <= 1474) + : (c <= 1477 || (c < 1488 + ? c == 1479 + : c <= 1514))))) + : (c <= 1522 || (c < 1770 + ? (c < 1646 + ? (c < 1568 + ? (c >= 1552 && c <= 1562) + : c <= 1641) + : (c <= 1747 || (c < 1759 + ? (c >= 1749 && c <= 1756) + : c <= 1768))) + : (c <= 1788 || (c < 1869 + ? (c < 1808 + ? c == 1791 + : c <= 1866) + : (c <= 1969 || (c < 2042 + ? (c >= 1984 && c <= 2037) + : c <= 2042))))))))) + : (c <= 2045 || (c < 2558 + ? (c < 2451 + ? (c < 2200 + ? (c < 2144 + ? (c < 2112 + ? (c >= 2048 && c <= 2093) + : c <= 2139) + : (c <= 2154 || (c < 2185 + ? (c >= 2160 && c <= 2183) + : c <= 2190))) + : (c <= 2273 || (c < 2417 + ? (c < 2406 + ? (c >= 2275 && c <= 2403) + : c <= 2415) + : (c <= 2435 || (c < 2447 + ? (c >= 2437 && c <= 2444) + : c <= 2448))))) + : (c <= 2472 || (c < 2507 + ? (c < 2486 + ? (c < 2482 + ? (c >= 2474 && c <= 2480) + : c <= 2482) + : (c <= 2489 || (c < 2503 + ? (c >= 2492 && c <= 2500) + : c <= 2504))) + : (c <= 2510 || (c < 2527 + ? (c < 2524 + ? c == 2519 + : c <= 2525) + : (c <= 2531 || (c < 2556 + ? (c >= 2534 && c <= 2545) + : c <= 2556))))))) + : (c <= 2558 || (c < 2635 + ? (c < 2610 + ? (c < 2575 + ? (c < 2565 + ? (c >= 2561 && c <= 2563) + : c <= 2570) + : (c <= 2576 || (c < 2602 + ? (c >= 2579 && c <= 2600) + : c <= 2608))) + : (c <= 2611 || (c < 2620 + ? (c < 2616 + ? (c >= 2613 && c <= 2614) + : c <= 2617) + : (c <= 2620 || (c < 2631 + ? (c >= 2622 && c <= 2626) + : c <= 2632))))) + : (c <= 2637 || (c < 2693 + ? (c < 2654 + ? (c < 2649 + ? c == 2641 + : c <= 2652) + : (c <= 2654 || (c < 2689 + ? (c >= 2662 && c <= 2677) + : c <= 2691))) + : (c <= 2701 || (c < 2730 + ? (c < 2707 + ? (c >= 2703 && c <= 2705) + : c <= 2728) + : (c <= 2736 || (c < 2741 + ? (c >= 2738 && c <= 2739) + : c <= 2745))))))))))) + : (c <= 2757 || (c < 3168 + ? (c < 2958 + ? (c < 2866 + ? (c < 2809 + ? (c < 2768 + ? (c < 2763 + ? (c >= 2759 && c <= 2761) + : c <= 2765) + : (c <= 2768 || (c < 2790 + ? (c >= 2784 && c <= 2787) + : c <= 2799))) + : (c <= 2815 || (c < 2831 + ? (c < 2821 + ? (c >= 2817 && c <= 2819) + : c <= 2828) + : (c <= 2832 || (c < 2858 + ? (c >= 2835 && c <= 2856) + : c <= 2864))))) + : (c <= 2867 || (c < 2908 + ? (c < 2887 + ? (c < 2876 + ? (c >= 2869 && c <= 2873) + : c <= 2884) + : (c <= 2888 || (c < 2901 + ? (c >= 2891 && c <= 2893) + : c <= 2903))) + : (c <= 2909 || (c < 2929 + ? (c < 2918 + ? (c >= 2911 && c <= 2915) + : c <= 2927) + : (c <= 2929 || (c < 2949 + ? (c >= 2946 && c <= 2947) + : c <= 2954))))))) + : (c <= 2960 || (c < 3031 + ? (c < 2984 + ? (c < 2972 + ? (c < 2969 + ? (c >= 2962 && c <= 2965) + : c <= 2970) + : (c <= 2972 || (c < 2979 + ? (c >= 2974 && c <= 2975) + : c <= 2980))) + : (c <= 2986 || (c < 3014 + ? (c < 3006 + ? (c >= 2990 && c <= 3001) + : c <= 3010) + : (c <= 3016 || (c < 3024 + ? (c >= 3018 && c <= 3021) + : c <= 3024))))) + : (c <= 3031 || (c < 3132 + ? (c < 3086 + ? (c < 3072 + ? (c >= 3046 && c <= 3055) + : c <= 3084) + : (c <= 3088 || (c < 3114 + ? (c >= 3090 && c <= 3112) + : c <= 3129))) + : (c <= 3140 || (c < 3157 + ? (c < 3146 + ? (c >= 3142 && c <= 3144) + : c <= 3149) + : (c <= 3158 || (c < 3165 + ? (c >= 3160 && c <= 3162) + : c <= 3165))))))))) + : (c <= 3171 || (c < 3450 + ? (c < 3293 + ? (c < 3242 + ? (c < 3205 + ? (c < 3200 + ? (c >= 3174 && c <= 3183) + : c <= 3203) + : (c <= 3212 || (c < 3218 + ? (c >= 3214 && c <= 3216) + : c <= 3240))) + : (c <= 3251 || (c < 3270 + ? (c < 3260 + ? (c >= 3253 && c <= 3257) + : c <= 3268) + : (c <= 3272 || (c < 3285 + ? (c >= 3274 && c <= 3277) + : c <= 3286))))) + : (c <= 3294 || (c < 3346 + ? (c < 3313 + ? (c < 3302 + ? (c >= 3296 && c <= 3299) + : c <= 3311) + : (c <= 3314 || (c < 3342 + ? (c >= 3328 && c <= 3340) + : c <= 3344))) + : (c <= 3396 || (c < 3412 + ? (c < 3402 + ? (c >= 3398 && c <= 3400) + : c <= 3406) + : (c <= 3415 || (c < 3430 + ? (c >= 3423 && c <= 3427) + : c <= 3439))))))) + : (c <= 3455 || (c < 3570 + ? (c < 3520 + ? (c < 3482 + ? (c < 3461 + ? (c >= 3457 && c <= 3459) + : c <= 3478) + : (c <= 3505 || (c < 3517 + ? (c >= 3507 && c <= 3515) + : c <= 3517))) + : (c <= 3526 || (c < 3542 + ? (c < 3535 + ? c == 3530 + : c <= 3540) + : (c <= 3542 || (c < 3558 + ? (c >= 3544 && c <= 3551) + : c <= 3567))))) + : (c <= 3571 || (c < 3718 + ? (c < 3664 + ? (c < 3648 + ? (c >= 3585 && c <= 3642) + : c <= 3662) + : (c <= 3673 || (c < 3716 + ? (c >= 3713 && c <= 3714) + : c <= 3716))) + : (c <= 3722 || (c < 3751 + ? (c < 3749 + ? (c >= 3724 && c <= 3747) + : c <= 3749) + : (c <= 3773 || (c >= 3776 && c <= 3780))))))))))))) + : (c <= 3782 || (c < 8025 + ? (c < 5888 + ? (c < 4688 + ? (c < 3953 + ? (c < 3872 + ? (c < 3804 + ? (c < 3792 + ? (c >= 3784 && c <= 3789) + : c <= 3801) + : (c <= 3807 || (c < 3864 + ? c == 3840 + : c <= 3865))) + : (c <= 3881 || (c < 3897 + ? (c < 3895 + ? c == 3893 + : c <= 3895) + : (c <= 3897 || (c < 3913 + ? (c >= 3902 && c <= 3911) + : c <= 3948))))) + : (c <= 3972 || (c < 4256 + ? (c < 4038 + ? (c < 3993 + ? (c >= 3974 && c <= 3991) + : c <= 4028) + : (c <= 4038 || (c < 4176 + ? (c >= 4096 && c <= 4169) + : c <= 4253))) + : (c <= 4293 || (c < 4304 + ? (c < 4301 + ? c == 4295 + : c <= 4301) + : (c <= 4346 || (c < 4682 + ? (c >= 4348 && c <= 4680) + : c <= 4685))))))) + : (c <= 4694 || (c < 4882 + ? (c < 4786 + ? (c < 4704 + ? (c < 4698 + ? c == 4696 + : c <= 4701) + : (c <= 4744 || (c < 4752 + ? (c >= 4746 && c <= 4749) + : c <= 4784))) + : (c <= 4789 || (c < 4802 + ? (c < 4800 + ? (c >= 4792 && c <= 4798) + : c <= 4800) + : (c <= 4805 || (c < 4824 + ? (c >= 4808 && c <= 4822) + : c <= 4880))))) + : (c <= 4885 || (c < 5112 + ? (c < 4969 + ? (c < 4957 + ? (c >= 4888 && c <= 4954) + : c <= 4959) + : (c <= 4977 || (c < 5024 + ? (c >= 4992 && c <= 5007) + : c <= 5109))) + : (c <= 5117 || (c < 5761 + ? (c < 5743 + ? (c >= 5121 && c <= 5740) + : c <= 5759) + : (c <= 5786 || (c < 5870 + ? (c >= 5792 && c <= 5866) + : c <= 5880))))))))) + : (c <= 5909 || (c < 6688 + ? (c < 6176 + ? (c < 6016 + ? (c < 5984 + ? (c < 5952 + ? (c >= 5919 && c <= 5940) + : c <= 5971) + : (c <= 5996 || (c < 6002 + ? (c >= 5998 && c <= 6000) + : c <= 6003))) + : (c <= 6099 || (c < 6112 + ? (c < 6108 + ? c == 6103 + : c <= 6109) + : (c <= 6121 || (c < 6159 + ? (c >= 6155 && c <= 6157) + : c <= 6169))))) + : (c <= 6264 || (c < 6470 + ? (c < 6400 + ? (c < 6320 + ? (c >= 6272 && c <= 6314) + : c <= 6389) + : (c <= 6430 || (c < 6448 + ? (c >= 6432 && c <= 6443) + : c <= 6459))) + : (c <= 6509 || (c < 6576 + ? (c < 6528 + ? (c >= 6512 && c <= 6516) + : c <= 6571) + : (c <= 6601 || (c < 6656 + ? (c >= 6608 && c <= 6618) + : c <= 6683))))))) + : (c <= 6750 || (c < 7232 + ? (c < 6847 + ? (c < 6800 + ? (c < 6783 + ? (c >= 6752 && c <= 6780) + : c <= 6793) + : (c <= 6809 || (c < 6832 + ? c == 6823 + : c <= 6845))) + : (c <= 6862 || (c < 7019 + ? (c < 6992 + ? (c >= 6912 && c <= 6988) + : c <= 7001) + : (c <= 7027 || (c < 7168 + ? (c >= 7040 && c <= 7155) + : c <= 7223))))) + : (c <= 7241 || (c < 7380 + ? (c < 7312 + ? (c < 7296 + ? (c >= 7245 && c <= 7293) + : c <= 7304) + : (c <= 7354 || (c < 7376 + ? (c >= 7357 && c <= 7359) + : c <= 7378))) + : (c <= 7418 || (c < 7968 + ? (c < 7960 + ? (c >= 7424 && c <= 7957) + : c <= 7965) + : (c <= 8005 || (c < 8016 + ? (c >= 8008 && c <= 8013) + : c <= 8023))))))))))) + : (c <= 8025 || (c < 11720 + ? (c < 8458 + ? (c < 8178 + ? (c < 8126 + ? (c < 8031 + ? (c < 8029 + ? c == 8027 + : c <= 8029) + : (c <= 8061 || (c < 8118 + ? (c >= 8064 && c <= 8116) + : c <= 8124))) + : (c <= 8126 || (c < 8144 + ? (c < 8134 + ? (c >= 8130 && c <= 8132) + : c <= 8140) + : (c <= 8147 || (c < 8160 + ? (c >= 8150 && c <= 8155) + : c <= 8172))))) + : (c <= 8180 || (c < 8336 + ? (c < 8276 + ? (c < 8255 + ? (c >= 8182 && c <= 8188) + : c <= 8256) + : (c <= 8276 || (c < 8319 + ? c == 8305 + : c <= 8319))) + : (c <= 8348 || (c < 8421 + ? (c < 8417 + ? (c >= 8400 && c <= 8412) + : c <= 8417) + : (c <= 8432 || (c < 8455 + ? c == 8450 + : c <= 8455))))))) + : (c <= 8467 || (c < 11499 + ? (c < 8490 + ? (c < 8484 + ? (c < 8472 + ? c == 8469 + : c <= 8477) + : (c <= 8484 || (c < 8488 + ? c == 8486 + : c <= 8488))) + : (c <= 8505 || (c < 8526 + ? (c < 8517 + ? (c >= 8508 && c <= 8511) + : c <= 8521) + : (c <= 8526 || (c < 11264 + ? (c >= 8544 && c <= 8584) + : c <= 11492))))) + : (c <= 11507 || (c < 11647 + ? (c < 11565 + ? (c < 11559 + ? (c >= 11520 && c <= 11557) + : c <= 11559) + : (c <= 11565 || (c < 11631 + ? (c >= 11568 && c <= 11623) + : c <= 11631))) + : (c <= 11670 || (c < 11696 + ? (c < 11688 + ? (c >= 11680 && c <= 11686) + : c <= 11694) + : (c <= 11702 || (c < 11712 + ? (c >= 11704 && c <= 11710) + : c <= 11718))))))))) + : (c <= 11726 || (c < 42623 + ? (c < 12540 + ? (c < 12337 + ? (c < 11744 + ? (c < 11736 + ? (c >= 11728 && c <= 11734) + : c <= 11742) + : (c <= 11775 || (c < 12321 + ? (c >= 12293 && c <= 12295) + : c <= 12335))) + : (c <= 12341 || (c < 12441 + ? (c < 12353 + ? (c >= 12344 && c <= 12348) + : c <= 12438) + : (c <= 12442 || (c < 12449 + ? (c >= 12445 && c <= 12447) + : c <= 12538))))) + : (c <= 12543 || (c < 19968 + ? (c < 12704 + ? (c < 12593 + ? (c >= 12549 && c <= 12591) + : c <= 12686) + : (c <= 12735 || (c < 13312 + ? (c >= 12784 && c <= 12799) + : c <= 19903))) + : (c <= 42124 || (c < 42512 + ? (c < 42240 + ? (c >= 42192 && c <= 42237) + : c <= 42508) + : (c <= 42539 || (c < 42612 + ? (c >= 42560 && c <= 42607) + : c <= 42621))))))) + : (c <= 42737 || (c < 43232 + ? (c < 42965 + ? (c < 42891 + ? (c < 42786 + ? (c >= 42775 && c <= 42783) + : c <= 42888) + : (c <= 42954 || (c < 42963 + ? (c >= 42960 && c <= 42961) + : c <= 42963))) + : (c <= 42969 || (c < 43072 + ? (c < 43052 + ? (c >= 42994 && c <= 43047) + : c <= 43052) + : (c <= 43123 || (c < 43216 + ? (c >= 43136 && c <= 43205) + : c <= 43225))))) + : (c <= 43255 || (c < 43471 + ? (c < 43312 + ? (c < 43261 + ? c == 43259 + : c <= 43309) + : (c <= 43347 || (c < 43392 + ? (c >= 43360 && c <= 43388) + : c <= 43456))) + : (c <= 43481 || (c < 43584 + ? (c < 43520 + ? (c >= 43488 && c <= 43518) + : c <= 43574) + : (c <= 43597 || (c >= 43600 && c <= 43609))))))))))))))) + : (c <= 43638 || (c < 71453 + ? (c < 67639 + ? (c < 65345 + ? (c < 64312 + ? (c < 43888 + ? (c < 43785 + ? (c < 43744 + ? (c < 43739 + ? (c >= 43642 && c <= 43714) + : c <= 43741) + : (c <= 43759 || (c < 43777 + ? (c >= 43762 && c <= 43766) + : c <= 43782))) + : (c <= 43790 || (c < 43816 + ? (c < 43808 + ? (c >= 43793 && c <= 43798) + : c <= 43814) + : (c <= 43822 || (c < 43868 + ? (c >= 43824 && c <= 43866) + : c <= 43881))))) + : (c <= 44010 || (c < 63744 + ? (c < 44032 + ? (c < 44016 + ? (c >= 44012 && c <= 44013) + : c <= 44025) + : (c <= 55203 || (c < 55243 + ? (c >= 55216 && c <= 55238) + : c <= 55291))) + : (c <= 64109 || (c < 64275 + ? (c < 64256 + ? (c >= 64112 && c <= 64217) + : c <= 64262) + : (c <= 64279 || (c < 64298 + ? (c >= 64285 && c <= 64296) + : c <= 64310))))))) + : (c <= 64316 || (c < 65075 + ? (c < 64612 + ? (c < 64323 + ? (c < 64320 + ? c == 64318 + : c <= 64321) + : (c <= 64324 || (c < 64467 + ? (c >= 64326 && c <= 64433) + : c <= 64605))) + : (c <= 64829 || (c < 65008 + ? (c < 64914 + ? (c >= 64848 && c <= 64911) + : c <= 64967) + : (c <= 65017 || (c < 65056 + ? (c >= 65024 && c <= 65039) + : c <= 65071))))) + : (c <= 65076 || (c < 65147 + ? (c < 65139 + ? (c < 65137 + ? (c >= 65101 && c <= 65103) + : c <= 65137) + : (c <= 65139 || (c < 65145 + ? c == 65143 + : c <= 65145))) + : (c <= 65147 || (c < 65296 + ? (c < 65151 + ? c == 65149 + : c <= 65276) + : (c <= 65305 || (c < 65343 + ? (c >= 65313 && c <= 65338) + : c <= 65343))))))))) + : (c <= 65370 || (c < 66513 + ? (c < 65664 + ? (c < 65536 + ? (c < 65482 + ? (c < 65474 + ? (c >= 65382 && c <= 65470) + : c <= 65479) + : (c <= 65487 || (c < 65498 + ? (c >= 65490 && c <= 65495) + : c <= 65500))) + : (c <= 65547 || (c < 65596 + ? (c < 65576 + ? (c >= 65549 && c <= 65574) + : c <= 65594) + : (c <= 65597 || (c < 65616 + ? (c >= 65599 && c <= 65613) + : c <= 65629))))) + : (c <= 65786 || (c < 66304 + ? (c < 66176 + ? (c < 66045 + ? (c >= 65856 && c <= 65908) + : c <= 66045) + : (c <= 66204 || (c < 66272 + ? (c >= 66208 && c <= 66256) + : c <= 66272))) + : (c <= 66335 || (c < 66432 + ? (c < 66384 + ? (c >= 66349 && c <= 66378) + : c <= 66426) + : (c <= 66461 || (c < 66504 + ? (c >= 66464 && c <= 66499) + : c <= 66511))))))) + : (c <= 66517 || (c < 66979 + ? (c < 66864 + ? (c < 66736 + ? (c < 66720 + ? (c >= 66560 && c <= 66717) + : c <= 66729) + : (c <= 66771 || (c < 66816 + ? (c >= 66776 && c <= 66811) + : c <= 66855))) + : (c <= 66915 || (c < 66956 + ? (c < 66940 + ? (c >= 66928 && c <= 66938) + : c <= 66954) + : (c <= 66962 || (c < 66967 + ? (c >= 66964 && c <= 66965) + : c <= 66977))))) + : (c <= 66993 || (c < 67456 + ? (c < 67072 + ? (c < 67003 + ? (c >= 66995 && c <= 67001) + : c <= 67004) + : (c <= 67382 || (c < 67424 + ? (c >= 67392 && c <= 67413) + : c <= 67431))) + : (c <= 67461 || (c < 67584 + ? (c < 67506 + ? (c >= 67463 && c <= 67504) + : c <= 67514) + : (c <= 67589 || (c < 67594 + ? c == 67592 + : c <= 67637))))))))))) + : (c <= 67640 || (c < 69956 + ? (c < 68448 + ? (c < 68101 + ? (c < 67828 + ? (c < 67680 + ? (c < 67647 + ? c == 67644 + : c <= 67669) + : (c <= 67702 || (c < 67808 + ? (c >= 67712 && c <= 67742) + : c <= 67826))) + : (c <= 67829 || (c < 67968 + ? (c < 67872 + ? (c >= 67840 && c <= 67861) + : c <= 67897) + : (c <= 68023 || (c < 68096 + ? (c >= 68030 && c <= 68031) + : c <= 68099))))) + : (c <= 68102 || (c < 68192 + ? (c < 68121 + ? (c < 68117 + ? (c >= 68108 && c <= 68115) + : c <= 68119) + : (c <= 68149 || (c < 68159 + ? (c >= 68152 && c <= 68154) + : c <= 68159))) + : (c <= 68220 || (c < 68297 + ? (c < 68288 + ? (c >= 68224 && c <= 68252) + : c <= 68295) + : (c <= 68326 || (c < 68416 + ? (c >= 68352 && c <= 68405) + : c <= 68437))))))) + : (c <= 68466 || (c < 69424 + ? (c < 68912 + ? (c < 68736 + ? (c < 68608 + ? (c >= 68480 && c <= 68497) + : c <= 68680) + : (c <= 68786 || (c < 68864 + ? (c >= 68800 && c <= 68850) + : c <= 68903))) + : (c <= 68921 || (c < 69296 + ? (c < 69291 + ? (c >= 69248 && c <= 69289) + : c <= 69292) + : (c <= 69297 || (c < 69415 + ? (c >= 69376 && c <= 69404) + : c <= 69415))))) + : (c <= 69456 || (c < 69759 + ? (c < 69600 + ? (c < 69552 + ? (c >= 69488 && c <= 69509) + : c <= 69572) + : (c <= 69622 || (c < 69734 + ? (c >= 69632 && c <= 69702) + : c <= 69749))) + : (c <= 69818 || (c < 69872 + ? (c < 69840 + ? c == 69826 + : c <= 69864) + : (c <= 69881 || (c < 69942 + ? (c >= 69888 && c <= 69940) + : c <= 69951))))))))) + : (c <= 69959 || (c < 70459 + ? (c < 70282 + ? (c < 70108 + ? (c < 70016 + ? (c < 70006 + ? (c >= 69968 && c <= 70003) + : c <= 70006) + : (c <= 70084 || (c < 70094 + ? (c >= 70089 && c <= 70092) + : c <= 70106))) + : (c <= 70108 || (c < 70206 + ? (c < 70163 + ? (c >= 70144 && c <= 70161) + : c <= 70199) + : (c <= 70206 || (c < 70280 + ? (c >= 70272 && c <= 70278) + : c <= 70280))))) + : (c <= 70285 || (c < 70405 + ? (c < 70320 + ? (c < 70303 + ? (c >= 70287 && c <= 70301) + : c <= 70312) + : (c <= 70378 || (c < 70400 + ? (c >= 70384 && c <= 70393) + : c <= 70403))) + : (c <= 70412 || (c < 70442 + ? (c < 70419 + ? (c >= 70415 && c <= 70416) + : c <= 70440) + : (c <= 70448 || (c < 70453 + ? (c >= 70450 && c <= 70451) + : c <= 70457))))))) + : (c <= 70468 || (c < 70855 + ? (c < 70502 + ? (c < 70480 + ? (c < 70475 + ? (c >= 70471 && c <= 70472) + : c <= 70477) + : (c <= 70480 || (c < 70493 + ? c == 70487 + : c <= 70499))) + : (c <= 70508 || (c < 70736 + ? (c < 70656 + ? (c >= 70512 && c <= 70516) + : c <= 70730) + : (c <= 70745 || (c < 70784 + ? (c >= 70750 && c <= 70753) + : c <= 70853))))) + : (c <= 70855 || (c < 71236 + ? (c < 71096 + ? (c < 71040 + ? (c >= 70864 && c <= 70873) + : c <= 71093) + : (c <= 71104 || (c < 71168 + ? (c >= 71128 && c <= 71133) + : c <= 71232))) + : (c <= 71236 || (c < 71360 + ? (c < 71296 + ? (c >= 71248 && c <= 71257) + : c <= 71352) + : (c <= 71369 || (c >= 71424 && c <= 71450))))))))))))) + : (c <= 71467 || (c < 119973 + ? (c < 77824 + ? (c < 72760 + ? (c < 72016 + ? (c < 71945 + ? (c < 71680 + ? (c < 71488 + ? (c >= 71472 && c <= 71481) + : c <= 71494) + : (c <= 71738 || (c < 71935 + ? (c >= 71840 && c <= 71913) + : c <= 71942))) + : (c <= 71945 || (c < 71960 + ? (c < 71957 + ? (c >= 71948 && c <= 71955) + : c <= 71958) + : (c <= 71989 || (c < 71995 + ? (c >= 71991 && c <= 71992) + : c <= 72003))))) + : (c <= 72025 || (c < 72263 + ? (c < 72154 + ? (c < 72106 + ? (c >= 72096 && c <= 72103) + : c <= 72151) + : (c <= 72161 || (c < 72192 + ? (c >= 72163 && c <= 72164) + : c <= 72254))) + : (c <= 72263 || (c < 72368 + ? (c < 72349 + ? (c >= 72272 && c <= 72345) + : c <= 72349) + : (c <= 72440 || (c < 72714 + ? (c >= 72704 && c <= 72712) + : c <= 72758))))))) + : (c <= 72768 || (c < 73056 + ? (c < 72968 + ? (c < 72850 + ? (c < 72818 + ? (c >= 72784 && c <= 72793) + : c <= 72847) + : (c <= 72871 || (c < 72960 + ? (c >= 72873 && c <= 72886) + : c <= 72966))) + : (c <= 72969 || (c < 73020 + ? (c < 73018 + ? (c >= 72971 && c <= 73014) + : c <= 73018) + : (c <= 73021 || (c < 73040 + ? (c >= 73023 && c <= 73031) + : c <= 73049))))) + : (c <= 73061 || (c < 73440 + ? (c < 73104 + ? (c < 73066 + ? (c >= 73063 && c <= 73064) + : c <= 73102) + : (c <= 73105 || (c < 73120 + ? (c >= 73107 && c <= 73112) + : c <= 73129))) + : (c <= 73462 || (c < 74752 + ? (c < 73728 + ? c == 73648 + : c <= 74649) + : (c <= 74862 || (c < 77712 + ? (c >= 74880 && c <= 75075) + : c <= 77808))))))))) + : (c <= 78894 || (c < 110576 + ? (c < 93027 + ? (c < 92864 + ? (c < 92736 + ? (c < 92160 + ? (c >= 82944 && c <= 83526) + : c <= 92728) + : (c <= 92766 || (c < 92784 + ? (c >= 92768 && c <= 92777) + : c <= 92862))) + : (c <= 92873 || (c < 92928 + ? (c < 92912 + ? (c >= 92880 && c <= 92909) + : c <= 92916) + : (c <= 92982 || (c < 93008 + ? (c >= 92992 && c <= 92995) + : c <= 93017))))) + : (c <= 93047 || (c < 94176 + ? (c < 93952 + ? (c < 93760 + ? (c >= 93053 && c <= 93071) + : c <= 93823) + : (c <= 94026 || (c < 94095 + ? (c >= 94031 && c <= 94087) + : c <= 94111))) + : (c <= 94177 || (c < 94208 + ? (c < 94192 + ? (c >= 94179 && c <= 94180) + : c <= 94193) + : (c <= 100343 || (c < 101632 + ? (c >= 100352 && c <= 101589) + : c <= 101640))))))) + : (c <= 110579 || (c < 118528 + ? (c < 110960 + ? (c < 110592 + ? (c < 110589 + ? (c >= 110581 && c <= 110587) + : c <= 110590) + : (c <= 110882 || (c < 110948 + ? (c >= 110928 && c <= 110930) + : c <= 110951))) + : (c <= 111355 || (c < 113792 + ? (c < 113776 + ? (c >= 113664 && c <= 113770) + : c <= 113788) + : (c <= 113800 || (c < 113821 + ? (c >= 113808 && c <= 113817) + : c <= 113822))))) + : (c <= 118573 || (c < 119210 + ? (c < 119149 + ? (c < 119141 + ? (c >= 118576 && c <= 118598) + : c <= 119145) + : (c <= 119154 || (c < 119173 + ? (c >= 119163 && c <= 119170) + : c <= 119179))) + : (c <= 119213 || (c < 119894 + ? (c < 119808 + ? (c >= 119362 && c <= 119364) + : c <= 119892) + : (c <= 119964 || (c < 119970 + ? (c >= 119966 && c <= 119967) + : c <= 119970))))))))))) + : (c <= 119974 || (c < 124912 + ? (c < 120746 + ? (c < 120134 + ? (c < 120071 + ? (c < 119995 + ? (c < 119982 + ? (c >= 119977 && c <= 119980) + : c <= 119993) + : (c <= 119995 || (c < 120005 + ? (c >= 119997 && c <= 120003) + : c <= 120069))) + : (c <= 120074 || (c < 120094 + ? (c < 120086 + ? (c >= 120077 && c <= 120084) + : c <= 120092) + : (c <= 120121 || (c < 120128 + ? (c >= 120123 && c <= 120126) + : c <= 120132))))) + : (c <= 120134 || (c < 120572 + ? (c < 120488 + ? (c < 120146 + ? (c >= 120138 && c <= 120144) + : c <= 120485) + : (c <= 120512 || (c < 120540 + ? (c >= 120514 && c <= 120538) + : c <= 120570))) + : (c <= 120596 || (c < 120656 + ? (c < 120630 + ? (c >= 120598 && c <= 120628) + : c <= 120654) + : (c <= 120686 || (c < 120714 + ? (c >= 120688 && c <= 120712) + : c <= 120744))))))) + : (c <= 120770 || (c < 122907 + ? (c < 121476 + ? (c < 121344 + ? (c < 120782 + ? (c >= 120772 && c <= 120779) + : c <= 120831) + : (c <= 121398 || (c < 121461 + ? (c >= 121403 && c <= 121452) + : c <= 121461))) + : (c <= 121476 || (c < 122624 + ? (c < 121505 + ? (c >= 121499 && c <= 121503) + : c <= 121519) + : (c <= 122654 || (c < 122888 + ? (c >= 122880 && c <= 122886) + : c <= 122904))))) + : (c <= 122913 || (c < 123214 + ? (c < 123136 + ? (c < 122918 + ? (c >= 122915 && c <= 122916) + : c <= 122922) + : (c <= 123180 || (c < 123200 + ? (c >= 123184 && c <= 123197) + : c <= 123209))) + : (c <= 123214 || (c < 124896 + ? (c < 123584 + ? (c >= 123536 && c <= 123566) + : c <= 123641) + : (c <= 124902 || (c < 124909 + ? (c >= 124904 && c <= 124907) + : c <= 124910))))))))) + : (c <= 124926 || (c < 126557 + ? (c < 126521 + ? (c < 126469 + ? (c < 125184 + ? (c < 125136 + ? (c >= 124928 && c <= 125124) + : c <= 125142) + : (c <= 125259 || (c < 126464 + ? (c >= 125264 && c <= 125273) + : c <= 126467))) + : (c <= 126495 || (c < 126503 + ? (c < 126500 + ? (c >= 126497 && c <= 126498) + : c <= 126500) + : (c <= 126503 || (c < 126516 + ? (c >= 126505 && c <= 126514) + : c <= 126519))))) + : (c <= 126521 || (c < 126541 + ? (c < 126535 + ? (c < 126530 + ? c == 126523 + : c <= 126530) + : (c <= 126535 || (c < 126539 + ? c == 126537 + : c <= 126539))) + : (c <= 126543 || (c < 126551 + ? (c < 126548 + ? (c >= 126545 && c <= 126546) + : c <= 126548) + : (c <= 126551 || (c < 126555 + ? c == 126553 + : c <= 126555))))))) + : (c <= 126557 || (c < 126629 + ? (c < 126580 + ? (c < 126564 + ? (c < 126561 + ? c == 126559 + : c <= 126562) + : (c <= 126564 || (c < 126572 + ? (c >= 126567 && c <= 126570) + : c <= 126578))) + : (c <= 126583 || (c < 126592 + ? (c < 126590 + ? (c >= 126585 && c <= 126588) + : c <= 126590) + : (c <= 126601 || (c < 126625 + ? (c >= 126603 && c <= 126619) + : c <= 126627))))) + : (c <= 126633 || (c < 178208 + ? (c < 131072 + ? (c < 130032 + ? (c >= 126635 && c <= 126651) + : c <= 130041) + : (c <= 173791 || (c < 177984 + ? (c >= 173824 && c <= 177976) + : c <= 178205))) + : (c <= 183969 || (c < 196608 + ? (c < 194560 + ? (c >= 183984 && c <= 191456) + : c <= 195101) + : (c <= 201546 || (c >= 917760 && c <= 917999))))))))))))))))); +} + +static bool ts_lex(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (eof) ADVANCE(65); + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(98); + if (lookahead == '&') ADVANCE(100); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(83); + if (lookahead == '.') ADVANCE(67); + if (lookahead == '/') ADVANCE(96); + if (lookahead == '0') ADVANCE(138); + if (lookahead == ':') ADVANCE(76); + if (lookahead == ';') ADVANCE(166); + if (lookahead == '<') ADVANCE(104); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(110); + if (lookahead == '@') ADVANCE(95); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(54) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(101); + if (lookahead == 'e') ADVANCE(161); + if (lookahead == '{') ADVANCE(127); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(61) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 1: + if (lookahead == '\n') SKIP(16) + END_STATE(); + case 2: + if (lookahead == '\n') SKIP(16) + if (lookahead == '\r') SKIP(1) + END_STATE(); + case 3: + if (lookahead == '\n') SKIP(15) + END_STATE(); + case 4: + if (lookahead == '\n') SKIP(15) + if (lookahead == '\r') SKIP(3) + END_STATE(); + case 5: + if (lookahead == '\n') SKIP(19) + END_STATE(); + case 6: + if (lookahead == '\n') SKIP(19) + if (lookahead == '\r') SKIP(5) + END_STATE(); + case 7: + if (lookahead == '\n') ADVANCE(130); + END_STATE(); + case 8: + if (lookahead == '\n') SKIP(9) + if (lookahead == '#') ADVANCE(134); + if (lookahead == '\\') ADVANCE(132); + if (lookahead == '{') ADVANCE(127); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '\t' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) ADVANCE(133); + if (lookahead != 0) ADVANCE(134); + END_STATE(); + case 9: + if (lookahead == '\n') SKIP(9) + if (lookahead == '#') ADVANCE(134); + if (lookahead == '\\') ADVANCE(132); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '\t' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) ADVANCE(133); + if (lookahead != 0 && + lookahead != '{') ADVANCE(134); + END_STATE(); + case 10: + if (lookahead == '\n') SKIP(17) + END_STATE(); + case 11: + if (lookahead == '\n') SKIP(17) + if (lookahead == '\r') SKIP(10) + END_STATE(); + case 12: + if (lookahead == '\n') SKIP(14) + END_STATE(); + case 13: + if (lookahead == '\n') SKIP(14) + if (lookahead == '\r') SKIP(12) + END_STATE(); + case 14: + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(98); + if (lookahead == '&') ADVANCE(100); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(82); + if (lookahead == '.') ADVANCE(66); + if (lookahead == '/') ADVANCE(96); + if (lookahead == ':') ADVANCE(76); + if (lookahead == ';') ADVANCE(166); + if (lookahead == '<') ADVANCE(104); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(110); + if (lookahead == '@') ADVANCE(95); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(13) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(101); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(14) + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 15: + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(98); + if (lookahead == '&') ADVANCE(100); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(82); + if (lookahead == '.') ADVANCE(66); + if (lookahead == '/') ADVANCE(96); + if (lookahead == ':') ADVANCE(75); + if (lookahead == ';') ADVANCE(166); + if (lookahead == '<') ADVANCE(104); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(110); + if (lookahead == '@') ADVANCE(95); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(4) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(101); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(15) + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 16: + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(23); + if (lookahead == '&') ADVANCE(24); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(82); + if (lookahead == '.') ADVANCE(20); + if (lookahead == '/') ADVANCE(97); + if (lookahead == '0') ADVANCE(138); + if (lookahead == ':') ADVANCE(75); + if (lookahead == '<') ADVANCE(105); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(111); + if (lookahead == '@') ADVANCE(25); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(2) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(26); + if (lookahead == '{') ADVANCE(88); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(16) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 17: + if (lookahead == '#') ADVANCE(165); + if (lookahead == '-') ADVANCE(30); + if (lookahead == ':') ADVANCE(75); + if (lookahead == '\\') SKIP(11) + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(17) + END_STATE(); + case 18: + if (lookahead == '#') ADVANCE(165); + if (lookahead == '\\') ADVANCE(131); + if (lookahead == '{') ADVANCE(128); + if (lookahead == '}') ADVANCE(36); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(19) + END_STATE(); + case 19: + if (lookahead == '#') ADVANCE(165); + if (lookahead == '\\') SKIP(6) + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(19) + END_STATE(); + case 20: + if (lookahead == '.') ADVANCE(21); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(144); + END_STATE(); + case 21: + if (lookahead == '.') ADVANCE(126); + END_STATE(); + case 22: + if (lookahead == '=') ADVANCE(108); + if (('a' <= lookahead && lookahead <= 'z')) ADVANCE(135); + END_STATE(); + case 23: + if (lookahead == '=') ADVANCE(119); + END_STATE(); + case 24: + if (lookahead == '=') ADVANCE(123); + END_STATE(); + case 25: + if (lookahead == '=') ADVANCE(117); + END_STATE(); + case 26: + if (lookahead == '=') ADVANCE(124); + END_STATE(); + case 27: + if (lookahead == '=') ADVANCE(118); + END_STATE(); + case 28: + if (lookahead == '=') ADVANCE(122); + END_STATE(); + case 29: + if (lookahead == '=') ADVANCE(121); + END_STATE(); + case 30: + if (lookahead == '>') ADVANCE(93); + END_STATE(); + case 31: + if (lookahead == '_') ADVANCE(38); + if (lookahead == '0' || + lookahead == '1') ADVANCE(140); + END_STATE(); + case 32: + if (lookahead == '_') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '7')) ADVANCE(141); + END_STATE(); + case 33: + if (lookahead == '_') ADVANCE(43); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(142); + END_STATE(); + case 34: + if (lookahead == '{') ADVANCE(52); + END_STATE(); + case 35: + if (lookahead == '}') ADVANCE(130); + if (lookahead != 0) ADVANCE(35); + END_STATE(); + case 36: + if (lookahead == '}') ADVANCE(129); + END_STATE(); + case 37: + if (lookahead == '+' || + lookahead == '-') ADVANCE(40); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(145); + END_STATE(); + case 38: + if (lookahead == '0' || + lookahead == '1') ADVANCE(140); + END_STATE(); + case 39: + if (('0' <= lookahead && lookahead <= '7')) ADVANCE(141); + END_STATE(); + case 40: + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(145); + END_STATE(); + case 41: + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(130); + END_STATE(); + case 42: + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(41); + END_STATE(); + case 43: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(142); + END_STATE(); + case 44: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(130); + END_STATE(); + case 45: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(44); + END_STATE(); + case 46: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(45); + END_STATE(); + case 47: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(46); + END_STATE(); + case 48: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(47); + END_STATE(); + case 49: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(48); + END_STATE(); + case 50: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(49); + END_STATE(); + case 51: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(50); + END_STATE(); + case 52: + if (lookahead != 0 && + lookahead != '}') ADVANCE(35); + END_STATE(); + case 53: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(61) + END_STATE(); + case 54: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(61) + if (lookahead == '\r') SKIP(53) + END_STATE(); + case 55: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(62) + END_STATE(); + case 56: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(62) + if (lookahead == '\r') SKIP(55) + END_STATE(); + case 57: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(63) + END_STATE(); + case 58: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(63) + if (lookahead == '\r') SKIP(57) + END_STATE(); + case 59: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(64) + END_STATE(); + case 60: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(64) + if (lookahead == '\r') SKIP(59) + END_STATE(); + case 61: + if (eof) ADVANCE(65); + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(98); + if (lookahead == '&') ADVANCE(100); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(83); + if (lookahead == '.') ADVANCE(67); + if (lookahead == '/') ADVANCE(96); + if (lookahead == '0') ADVANCE(138); + if (lookahead == ':') ADVANCE(76); + if (lookahead == ';') ADVANCE(166); + if (lookahead == '<') ADVANCE(104); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(110); + if (lookahead == '@') ADVANCE(95); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(54) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(101); + if (lookahead == 'e') ADVANCE(161); + if (lookahead == '{') ADVANCE(88); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(61) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 62: + if (eof) ADVANCE(65); + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(98); + if (lookahead == '&') ADVANCE(100); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(82); + if (lookahead == '.') ADVANCE(67); + if (lookahead == '/') ADVANCE(96); + if (lookahead == '0') ADVANCE(138); + if (lookahead == ':') ADVANCE(76); + if (lookahead == ';') ADVANCE(166); + if (lookahead == '<') ADVANCE(104); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(110); + if (lookahead == '@') ADVANCE(95); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(56) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(101); + if (lookahead == '{') ADVANCE(88); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(62) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 63: + if (eof) ADVANCE(65); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '(') ADVANCE(68); + if (lookahead == '*') ADVANCE(72); + if (lookahead == '+') ADVANCE(84); + if (lookahead == '-') ADVANCE(81); + if (lookahead == '.') ADVANCE(20); + if (lookahead == '0') ADVANCE(138); + if (lookahead == '@') ADVANCE(94); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(58) + if (lookahead == 'e') ADVANCE(162); + if (lookahead == '{') ADVANCE(88); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(63) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_2(lookahead)) ADVANCE(164); + END_STATE(); + case 64: + if (eof) ADVANCE(65); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '(') ADVANCE(68); + if (lookahead == '*') ADVANCE(72); + if (lookahead == '+') ADVANCE(84); + if (lookahead == '-') ADVANCE(81); + if (lookahead == '.') ADVANCE(20); + if (lookahead == '0') ADVANCE(138); + if (lookahead == '@') ADVANCE(94); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(60) + if (lookahead == 'e') ADVANCE(163); + if (lookahead == '{') ADVANCE(88); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(64) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_2(lookahead)) ADVANCE(164); + END_STATE(); + case 65: + ACCEPT_TOKEN(ts_builtin_sym_end); + END_STATE(); + case 66: + ACCEPT_TOKEN(anon_sym_DOT); + END_STATE(); + case 67: + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(21); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(144); + END_STATE(); + case 68: + ACCEPT_TOKEN(anon_sym_LPAREN); + END_STATE(); + case 69: + ACCEPT_TOKEN(anon_sym_RPAREN); + END_STATE(); + case 70: + ACCEPT_TOKEN(anon_sym_COMMA); + END_STATE(); + case 71: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(91); + if (lookahead == '=') ADVANCE(115); + END_STATE(); + case 72: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(90); + END_STATE(); + case 73: + ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '=') ADVANCE(121); + END_STATE(); + case 74: + ACCEPT_TOKEN(anon_sym_COLON_EQ); + END_STATE(); + case 75: + ACCEPT_TOKEN(anon_sym_COLON); + END_STATE(); + case 76: + ACCEPT_TOKEN(anon_sym_COLON); + if (lookahead == '=') ADVANCE(74); + END_STATE(); + case 77: + ACCEPT_TOKEN(anon_sym_except); + if (lookahead == '*') ADVANCE(79); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 78: + ACCEPT_TOKEN(anon_sym_except); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 79: + ACCEPT_TOKEN(anon_sym_except_STAR); + END_STATE(); + case 80: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '=') ADVANCE(125); + END_STATE(); + case 81: + ACCEPT_TOKEN(anon_sym_DASH); + END_STATE(); + case 82: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(114); + END_STATE(); + case 83: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(114); + if (lookahead == '>') ADVANCE(93); + END_STATE(); + case 84: + ACCEPT_TOKEN(anon_sym_PLUS); + END_STATE(); + case 85: + ACCEPT_TOKEN(anon_sym_PLUS); + if (lookahead == '=') ADVANCE(113); + END_STATE(); + case 86: + ACCEPT_TOKEN(anon_sym_LBRACK); + END_STATE(); + case 87: + ACCEPT_TOKEN(anon_sym_RBRACK); + END_STATE(); + case 88: + ACCEPT_TOKEN(anon_sym_LBRACE); + END_STATE(); + case 89: + ACCEPT_TOKEN(anon_sym_RBRACE); + END_STATE(); + case 90: + ACCEPT_TOKEN(anon_sym_STAR_STAR); + END_STATE(); + case 91: + ACCEPT_TOKEN(anon_sym_STAR_STAR); + if (lookahead == '=') ADVANCE(120); + END_STATE(); + case 92: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(107); + END_STATE(); + case 93: + ACCEPT_TOKEN(anon_sym_DASH_GT); + END_STATE(); + case 94: + ACCEPT_TOKEN(anon_sym_AT); + END_STATE(); + case 95: + ACCEPT_TOKEN(anon_sym_AT); + if (lookahead == '=') ADVANCE(117); + END_STATE(); + case 96: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(99); + if (lookahead == '=') ADVANCE(116); + END_STATE(); + case 97: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(27); + if (lookahead == '=') ADVANCE(116); + END_STATE(); + case 98: + ACCEPT_TOKEN(anon_sym_PERCENT); + if (lookahead == '=') ADVANCE(119); + END_STATE(); + case 99: + ACCEPT_TOKEN(anon_sym_SLASH_SLASH); + if (lookahead == '=') ADVANCE(118); + END_STATE(); + case 100: + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '=') ADVANCE(123); + END_STATE(); + case 101: + ACCEPT_TOKEN(anon_sym_CARET); + if (lookahead == '=') ADVANCE(124); + END_STATE(); + case 102: + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '=') ADVANCE(122); + END_STATE(); + case 103: + ACCEPT_TOKEN(anon_sym_TILDE); + END_STATE(); + case 104: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(102); + if (lookahead == '=') ADVANCE(106); + if (lookahead == '>') ADVANCE(112); + END_STATE(); + case 105: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(28); + if (lookahead == '=') ADVANCE(106); + if (lookahead == '>') ADVANCE(112); + END_STATE(); + case 106: + ACCEPT_TOKEN(anon_sym_LT_EQ); + END_STATE(); + case 107: + ACCEPT_TOKEN(anon_sym_EQ_EQ); + END_STATE(); + case 108: + ACCEPT_TOKEN(anon_sym_BANG_EQ); + END_STATE(); + case 109: + ACCEPT_TOKEN(anon_sym_GT_EQ); + END_STATE(); + case 110: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(109); + if (lookahead == '>') ADVANCE(73); + END_STATE(); + case 111: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(109); + if (lookahead == '>') ADVANCE(29); + END_STATE(); + case 112: + ACCEPT_TOKEN(anon_sym_LT_GT); + END_STATE(); + case 113: + ACCEPT_TOKEN(anon_sym_PLUS_EQ); + END_STATE(); + case 114: + ACCEPT_TOKEN(anon_sym_DASH_EQ); + END_STATE(); + case 115: + ACCEPT_TOKEN(anon_sym_STAR_EQ); + END_STATE(); + case 116: + ACCEPT_TOKEN(anon_sym_SLASH_EQ); + END_STATE(); + case 117: + ACCEPT_TOKEN(anon_sym_AT_EQ); + END_STATE(); + case 118: + ACCEPT_TOKEN(anon_sym_SLASH_SLASH_EQ); + END_STATE(); + case 119: + ACCEPT_TOKEN(anon_sym_PERCENT_EQ); + END_STATE(); + case 120: + ACCEPT_TOKEN(anon_sym_STAR_STAR_EQ); + END_STATE(); + case 121: + ACCEPT_TOKEN(anon_sym_GT_GT_EQ); + END_STATE(); + case 122: + ACCEPT_TOKEN(anon_sym_LT_LT_EQ); + END_STATE(); + case 123: + ACCEPT_TOKEN(anon_sym_AMP_EQ); + END_STATE(); + case 124: + ACCEPT_TOKEN(anon_sym_CARET_EQ); + END_STATE(); + case 125: + ACCEPT_TOKEN(anon_sym_PIPE_EQ); + END_STATE(); + case 126: + ACCEPT_TOKEN(sym_ellipsis); + END_STATE(); + case 127: + ACCEPT_TOKEN(anon_sym_LBRACE2); + END_STATE(); + case 128: + ACCEPT_TOKEN(anon_sym_LBRACE2); + if (lookahead == '{') ADVANCE(129); + END_STATE(); + case 129: + ACCEPT_TOKEN(sym__escape_interpolation); + END_STATE(); + case 130: + ACCEPT_TOKEN(sym_escape_sequence); + END_STATE(); + case 131: + ACCEPT_TOKEN(sym__not_escape_sequence); + if (lookahead == '\n') ADVANCE(130); + if (lookahead == '\r') ADVANCE(7); + if (lookahead == 'N') ADVANCE(34); + if (lookahead == 'U') ADVANCE(51); + if (lookahead == 'u') ADVANCE(47); + if (lookahead == 'x') ADVANCE(45); + if (lookahead == '"' || + lookahead == '\'' || + lookahead == '\\' || + lookahead == 'a' || + lookahead == 'b' || + lookahead == 'f' || + lookahead == 'n' || + lookahead == 'r' || + ('t' <= lookahead && lookahead <= 'v')) ADVANCE(130); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(42); + END_STATE(); + case 132: + ACCEPT_TOKEN(aux_sym_format_specifier_token1); + if (lookahead == '\r') ADVANCE(134); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '{' && + lookahead != '}') ADVANCE(134); + END_STATE(); + case 133: + ACCEPT_TOKEN(aux_sym_format_specifier_token1); + if (lookahead == '#') ADVANCE(134); + if (lookahead == '\\') ADVANCE(132); + if (lookahead == '\t' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) ADVANCE(133); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '{' && + lookahead != '}') ADVANCE(134); + END_STATE(); + case 134: + ACCEPT_TOKEN(aux_sym_format_specifier_token1); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '{' && + lookahead != '}') ADVANCE(134); + END_STATE(); + case 135: + ACCEPT_TOKEN(sym_type_conversion); + END_STATE(); + case 136: + ACCEPT_TOKEN(sym_integer); + END_STATE(); + case 137: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '.') ADVANCE(146); + if (lookahead == '_') ADVANCE(139); + if (lookahead == 'E' || + lookahead == 'e') ADVANCE(37); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(136); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(137); + END_STATE(); + case 138: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '.') ADVANCE(146); + if (lookahead == 'B' || + lookahead == 'b') ADVANCE(31); + if (lookahead == 'O' || + lookahead == 'o') ADVANCE(32); + if (lookahead == 'X' || + lookahead == 'x') ADVANCE(33); + if (lookahead == '_') ADVANCE(139); + if (lookahead == 'E' || + lookahead == 'e') ADVANCE(37); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(136); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(137); + END_STATE(); + case 139: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '.') ADVANCE(146); + if (lookahead == 'E' || + lookahead == 'e') ADVANCE(37); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(136); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(137); + END_STATE(); + case 140: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '_') ADVANCE(38); + if (lookahead == 'L' || + lookahead == 'l') ADVANCE(136); + if (lookahead == '0' || + lookahead == '1') ADVANCE(140); + END_STATE(); + case 141: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '_') ADVANCE(39); + if (lookahead == 'L' || + lookahead == 'l') ADVANCE(136); + if (('0' <= lookahead && lookahead <= '7')) ADVANCE(141); + END_STATE(); + case 142: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '_') ADVANCE(43); + if (lookahead == 'L' || + lookahead == 'l') ADVANCE(136); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(142); + END_STATE(); + case 143: + ACCEPT_TOKEN(sym_float); + END_STATE(); + case 144: + ACCEPT_TOKEN(sym_float); + if (lookahead == '_') ADVANCE(146); + if (lookahead == 'E' || + lookahead == 'e') ADVANCE(37); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(143); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(144); + END_STATE(); + case 145: + ACCEPT_TOKEN(sym_float); + if (lookahead == '_') ADVANCE(147); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(143); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(145); + END_STATE(); + case 146: + ACCEPT_TOKEN(sym_float); + if (lookahead == 'E' || + lookahead == 'e') ADVANCE(37); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(143); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(144); + END_STATE(); + case 147: + ACCEPT_TOKEN(sym_float); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(143); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(145); + END_STATE(); + case 148: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == '*') ADVANCE(79); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 149: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'c') ADVANCE(152); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 150: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'c') ADVANCE(153); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 151: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'c') ADVANCE(154); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 152: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(155); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 153: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(156); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 154: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(157); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 155: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'p') ADVANCE(158); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 156: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'p') ADVANCE(159); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 157: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'p') ADVANCE(160); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 158: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(77); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 159: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(78); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 160: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(148); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 161: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'x') ADVANCE(149); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 162: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'x') ADVANCE(150); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 163: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'x') ADVANCE(151); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 164: + ACCEPT_TOKEN(sym_identifier); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 165: + ACCEPT_TOKEN(sym_comment); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(165); + END_STATE(); + case 166: + ACCEPT_TOKEN(sym__semicolon); + END_STATE(); + default: + return false; + } +} + +static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (lookahead == 'F') ADVANCE(1); + if (lookahead == 'N') ADVANCE(2); + if (lookahead == 'T') ADVANCE(3); + if (lookahead == '\\') SKIP(4) + if (lookahead == '_') ADVANCE(5); + if (lookahead == 'a') ADVANCE(6); + if (lookahead == 'b') ADVANCE(7); + if (lookahead == 'c') ADVANCE(8); + if (lookahead == 'd') ADVANCE(9); + if (lookahead == 'e') ADVANCE(10); + if (lookahead == 'f') ADVANCE(11); + if (lookahead == 'g') ADVANCE(12); + if (lookahead == 'i') ADVANCE(13); + if (lookahead == 'l') ADVANCE(14); + if (lookahead == 'm') ADVANCE(15); + if (lookahead == 'n') ADVANCE(16); + if (lookahead == 'o') ADVANCE(17); + if (lookahead == 'p') ADVANCE(18); + if (lookahead == 'r') ADVANCE(19); + if (lookahead == 't') ADVANCE(20); + if (lookahead == 'w') ADVANCE(21); + if (lookahead == 'y') ADVANCE(22); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(0) + END_STATE(); + case 1: + if (lookahead == 'a') ADVANCE(23); + END_STATE(); + case 2: + if (lookahead == 'o') ADVANCE(24); + END_STATE(); + case 3: + if (lookahead == 'r') ADVANCE(25); + END_STATE(); + case 4: + if (lookahead == '\n') SKIP(0) + if (lookahead == '\r') SKIP(26) + END_STATE(); + case 5: + ACCEPT_TOKEN(sym_match_wildcard_pattern); + if (lookahead == '_') ADVANCE(27); + END_STATE(); + case 6: + if (lookahead == 'n') ADVANCE(28); + if (lookahead == 's') ADVANCE(29); + if (lookahead == 'w') ADVANCE(30); + END_STATE(); + case 7: + if (lookahead == 'r') ADVANCE(31); + END_STATE(); + case 8: + if (lookahead == 'a') ADVANCE(32); + if (lookahead == 'l') ADVANCE(33); + if (lookahead == 'o') ADVANCE(34); + END_STATE(); + case 9: + if (lookahead == 'e') ADVANCE(35); + END_STATE(); + case 10: + if (lookahead == 'l') ADVANCE(36); + if (lookahead == 'x') ADVANCE(37); + END_STATE(); + case 11: + if (lookahead == 'i') ADVANCE(38); + if (lookahead == 'o') ADVANCE(39); + if (lookahead == 'r') ADVANCE(40); + END_STATE(); + case 12: + if (lookahead == 'l') ADVANCE(41); + END_STATE(); + case 13: + if (lookahead == 'f') ADVANCE(42); + if (lookahead == 'm') ADVANCE(43); + if (lookahead == 'n') ADVANCE(44); + if (lookahead == 's') ADVANCE(45); + END_STATE(); + case 14: + if (lookahead == 'a') ADVANCE(46); + END_STATE(); + case 15: + if (lookahead == 'a') ADVANCE(47); + END_STATE(); + case 16: + if (lookahead == 'o') ADVANCE(48); + END_STATE(); + case 17: + if (lookahead == 'r') ADVANCE(49); + END_STATE(); + case 18: + if (lookahead == 'a') ADVANCE(50); + if (lookahead == 'r') ADVANCE(51); + END_STATE(); + case 19: + if (lookahead == 'a') ADVANCE(52); + if (lookahead == 'e') ADVANCE(53); + END_STATE(); + case 20: + if (lookahead == 'r') ADVANCE(54); + if (lookahead == 'y') ADVANCE(55); + END_STATE(); + case 21: + if (lookahead == 'h') ADVANCE(56); + if (lookahead == 'i') ADVANCE(57); + END_STATE(); + case 22: + if (lookahead == 'i') ADVANCE(58); + END_STATE(); + case 23: + if (lookahead == 'l') ADVANCE(59); + END_STATE(); + case 24: + if (lookahead == 'n') ADVANCE(60); + END_STATE(); + case 25: + if (lookahead == 'u') ADVANCE(61); + END_STATE(); + case 26: + if (lookahead == '\n') SKIP(0) + END_STATE(); + case 27: + if (lookahead == 'f') ADVANCE(62); + END_STATE(); + case 28: + if (lookahead == 'd') ADVANCE(63); + END_STATE(); + case 29: + ACCEPT_TOKEN(anon_sym_as); + if (lookahead == 's') ADVANCE(64); + if (lookahead == 'y') ADVANCE(65); + END_STATE(); + case 30: + if (lookahead == 'a') ADVANCE(66); + END_STATE(); + case 31: + if (lookahead == 'e') ADVANCE(67); + END_STATE(); + case 32: + if (lookahead == 's') ADVANCE(68); + END_STATE(); + case 33: + if (lookahead == 'a') ADVANCE(69); + END_STATE(); + case 34: + if (lookahead == 'n') ADVANCE(70); + END_STATE(); + case 35: + if (lookahead == 'f') ADVANCE(71); + if (lookahead == 'l') ADVANCE(72); + END_STATE(); + case 36: + if (lookahead == 'i') ADVANCE(73); + if (lookahead == 's') ADVANCE(74); + END_STATE(); + case 37: + if (lookahead == 'e') ADVANCE(75); + END_STATE(); + case 38: + if (lookahead == 'n') ADVANCE(76); + END_STATE(); + case 39: + if (lookahead == 'r') ADVANCE(77); + END_STATE(); + case 40: + if (lookahead == 'o') ADVANCE(78); + END_STATE(); + case 41: + if (lookahead == 'o') ADVANCE(79); + END_STATE(); + case 42: + ACCEPT_TOKEN(anon_sym_if); + END_STATE(); + case 43: + if (lookahead == 'p') ADVANCE(80); + END_STATE(); + case 44: + ACCEPT_TOKEN(anon_sym_in); + END_STATE(); + case 45: + ACCEPT_TOKEN(anon_sym_is); + END_STATE(); + case 46: + if (lookahead == 'm') ADVANCE(81); + END_STATE(); + case 47: + if (lookahead == 't') ADVANCE(82); + END_STATE(); + case 48: + if (lookahead == 'n') ADVANCE(83); + if (lookahead == 't') ADVANCE(84); + END_STATE(); + case 49: + ACCEPT_TOKEN(anon_sym_or); + END_STATE(); + case 50: + if (lookahead == 's') ADVANCE(85); + END_STATE(); + case 51: + if (lookahead == 'i') ADVANCE(86); + END_STATE(); + case 52: + if (lookahead == 'i') ADVANCE(87); + END_STATE(); + case 53: + if (lookahead == 't') ADVANCE(88); + END_STATE(); + case 54: + if (lookahead == 'y') ADVANCE(89); + END_STATE(); + case 55: + if (lookahead == 'p') ADVANCE(90); + END_STATE(); + case 56: + if (lookahead == 'i') ADVANCE(91); + END_STATE(); + case 57: + if (lookahead == 't') ADVANCE(92); + END_STATE(); + case 58: + if (lookahead == 'e') ADVANCE(93); + END_STATE(); + case 59: + if (lookahead == 's') ADVANCE(94); + END_STATE(); + case 60: + if (lookahead == 'e') ADVANCE(95); + END_STATE(); + case 61: + if (lookahead == 'e') ADVANCE(96); + END_STATE(); + case 62: + if (lookahead == 'u') ADVANCE(97); + END_STATE(); + case 63: + ACCEPT_TOKEN(anon_sym_and); + END_STATE(); + case 64: + if (lookahead == 'e') ADVANCE(98); + END_STATE(); + case 65: + if (lookahead == 'n') ADVANCE(99); + END_STATE(); + case 66: + if (lookahead == 'i') ADVANCE(100); + END_STATE(); + case 67: + if (lookahead == 'a') ADVANCE(101); + END_STATE(); + case 68: + if (lookahead == 'e') ADVANCE(102); + END_STATE(); + case 69: + if (lookahead == 's') ADVANCE(103); + END_STATE(); + case 70: + if (lookahead == 't') ADVANCE(104); + END_STATE(); + case 71: + ACCEPT_TOKEN(anon_sym_def); + END_STATE(); + case 72: + ACCEPT_TOKEN(anon_sym_del); + END_STATE(); + case 73: + if (lookahead == 'f') ADVANCE(105); + END_STATE(); + case 74: + if (lookahead == 'e') ADVANCE(106); + END_STATE(); + case 75: + if (lookahead == 'c') ADVANCE(107); + END_STATE(); + case 76: + if (lookahead == 'a') ADVANCE(108); + END_STATE(); + case 77: + ACCEPT_TOKEN(anon_sym_for); + END_STATE(); + case 78: + if (lookahead == 'm') ADVANCE(109); + END_STATE(); + case 79: + if (lookahead == 'b') ADVANCE(110); + END_STATE(); + case 80: + if (lookahead == 'o') ADVANCE(111); + END_STATE(); + case 81: + if (lookahead == 'b') ADVANCE(112); + END_STATE(); + case 82: + if (lookahead == 'c') ADVANCE(113); + END_STATE(); + case 83: + if (lookahead == 'l') ADVANCE(114); + END_STATE(); + case 84: + ACCEPT_TOKEN(anon_sym_not); + END_STATE(); + case 85: + if (lookahead == 's') ADVANCE(115); + END_STATE(); + case 86: + if (lookahead == 'n') ADVANCE(116); + END_STATE(); + case 87: + if (lookahead == 's') ADVANCE(117); + END_STATE(); + case 88: + if (lookahead == 'u') ADVANCE(118); + END_STATE(); + case 89: + ACCEPT_TOKEN(anon_sym_try); + END_STATE(); + case 90: + if (lookahead == 'e') ADVANCE(119); + END_STATE(); + case 91: + if (lookahead == 'l') ADVANCE(120); + END_STATE(); + case 92: + if (lookahead == 'h') ADVANCE(121); + END_STATE(); + case 93: + if (lookahead == 'l') ADVANCE(122); + END_STATE(); + case 94: + if (lookahead == 'e') ADVANCE(123); + END_STATE(); + case 95: + ACCEPT_TOKEN(sym_none); + END_STATE(); + case 96: + ACCEPT_TOKEN(sym_true); + END_STATE(); + case 97: + if (lookahead == 't') ADVANCE(124); + END_STATE(); + case 98: + if (lookahead == 'r') ADVANCE(125); + END_STATE(); + case 99: + if (lookahead == 'c') ADVANCE(126); + END_STATE(); + case 100: + if (lookahead == 't') ADVANCE(127); + END_STATE(); + case 101: + if (lookahead == 'k') ADVANCE(128); + END_STATE(); + case 102: + ACCEPT_TOKEN(anon_sym_case); + END_STATE(); + case 103: + if (lookahead == 's') ADVANCE(129); + END_STATE(); + case 104: + if (lookahead == 'i') ADVANCE(130); + END_STATE(); + case 105: + ACCEPT_TOKEN(anon_sym_elif); + END_STATE(); + case 106: + ACCEPT_TOKEN(anon_sym_else); + END_STATE(); + case 107: + ACCEPT_TOKEN(anon_sym_exec); + END_STATE(); + case 108: + if (lookahead == 'l') ADVANCE(131); + END_STATE(); + case 109: + ACCEPT_TOKEN(anon_sym_from); + END_STATE(); + case 110: + if (lookahead == 'a') ADVANCE(132); + END_STATE(); + case 111: + if (lookahead == 'r') ADVANCE(133); + END_STATE(); + case 112: + if (lookahead == 'd') ADVANCE(134); + END_STATE(); + case 113: + if (lookahead == 'h') ADVANCE(135); + END_STATE(); + case 114: + if (lookahead == 'o') ADVANCE(136); + END_STATE(); + case 115: + ACCEPT_TOKEN(anon_sym_pass); + END_STATE(); + case 116: + if (lookahead == 't') ADVANCE(137); + END_STATE(); + case 117: + if (lookahead == 'e') ADVANCE(138); + END_STATE(); + case 118: + if (lookahead == 'r') ADVANCE(139); + END_STATE(); + case 119: + ACCEPT_TOKEN(anon_sym_type); + END_STATE(); + case 120: + if (lookahead == 'e') ADVANCE(140); + END_STATE(); + case 121: + ACCEPT_TOKEN(anon_sym_with); + END_STATE(); + case 122: + if (lookahead == 'd') ADVANCE(141); + END_STATE(); + case 123: + ACCEPT_TOKEN(sym_false); + END_STATE(); + case 124: + if (lookahead == 'u') ADVANCE(142); + END_STATE(); + case 125: + if (lookahead == 't') ADVANCE(143); + END_STATE(); + case 126: + ACCEPT_TOKEN(anon_sym_async); + END_STATE(); + case 127: + ACCEPT_TOKEN(anon_sym_await); + END_STATE(); + case 128: + ACCEPT_TOKEN(anon_sym_break); + END_STATE(); + case 129: + ACCEPT_TOKEN(anon_sym_class); + END_STATE(); + case 130: + if (lookahead == 'n') ADVANCE(144); + END_STATE(); + case 131: + if (lookahead == 'l') ADVANCE(145); + END_STATE(); + case 132: + if (lookahead == 'l') ADVANCE(146); + END_STATE(); + case 133: + if (lookahead == 't') ADVANCE(147); + END_STATE(); + case 134: + if (lookahead == 'a') ADVANCE(148); + END_STATE(); + case 135: + ACCEPT_TOKEN(anon_sym_match); + END_STATE(); + case 136: + if (lookahead == 'c') ADVANCE(149); + END_STATE(); + case 137: + ACCEPT_TOKEN(anon_sym_print); + END_STATE(); + case 138: + ACCEPT_TOKEN(anon_sym_raise); + END_STATE(); + case 139: + if (lookahead == 'n') ADVANCE(150); + END_STATE(); + case 140: + ACCEPT_TOKEN(anon_sym_while); + END_STATE(); + case 141: + ACCEPT_TOKEN(anon_sym_yield); + END_STATE(); + case 142: + if (lookahead == 'r') ADVANCE(151); + END_STATE(); + case 143: + ACCEPT_TOKEN(anon_sym_assert); + END_STATE(); + case 144: + if (lookahead == 'u') ADVANCE(152); + END_STATE(); + case 145: + if (lookahead == 'y') ADVANCE(153); + END_STATE(); + case 146: + ACCEPT_TOKEN(anon_sym_global); + END_STATE(); + case 147: + ACCEPT_TOKEN(anon_sym_import); + END_STATE(); + case 148: + ACCEPT_TOKEN(anon_sym_lambda); + END_STATE(); + case 149: + if (lookahead == 'a') ADVANCE(154); + END_STATE(); + case 150: + ACCEPT_TOKEN(anon_sym_return); + END_STATE(); + case 151: + if (lookahead == 'e') ADVANCE(155); + END_STATE(); + case 152: + if (lookahead == 'e') ADVANCE(156); + END_STATE(); + case 153: + ACCEPT_TOKEN(anon_sym_finally); + END_STATE(); + case 154: + if (lookahead == 'l') ADVANCE(157); + END_STATE(); + case 155: + if (lookahead == '_') ADVANCE(158); + END_STATE(); + case 156: + ACCEPT_TOKEN(anon_sym_continue); + END_STATE(); + case 157: + ACCEPT_TOKEN(anon_sym_nonlocal); + END_STATE(); + case 158: + if (lookahead == '_') ADVANCE(159); + END_STATE(); + case 159: + ACCEPT_TOKEN(anon_sym___future__); + END_STATE(); + default: + return false; + } +} + +static const TSLexMode ts_lex_modes[STATE_COUNT] = { + [0] = {.lex_state = 0, .external_lex_state = 1}, + [1] = {.lex_state = 62, .external_lex_state = 2}, + [2] = {.lex_state = 62, .external_lex_state = 3}, + [3] = {.lex_state = 62, .external_lex_state = 3}, + [4] = {.lex_state = 62, .external_lex_state = 3}, + [5] = {.lex_state = 62, .external_lex_state = 3}, + [6] = {.lex_state = 62, .external_lex_state = 3}, + [7] = {.lex_state = 62, .external_lex_state = 3}, + [8] = {.lex_state = 62, .external_lex_state = 3}, + [9] = {.lex_state = 62, .external_lex_state = 3}, + [10] = {.lex_state = 62, .external_lex_state = 3}, + [11] = {.lex_state = 62, .external_lex_state = 3}, + [12] = {.lex_state = 62, .external_lex_state = 3}, + [13] = {.lex_state = 62, .external_lex_state = 3}, + [14] = {.lex_state = 62, .external_lex_state = 3}, + [15] = {.lex_state = 62, .external_lex_state = 3}, + [16] = {.lex_state = 62, .external_lex_state = 3}, + [17] = {.lex_state = 62, .external_lex_state = 3}, + [18] = {.lex_state = 62, .external_lex_state = 3}, + [19] = {.lex_state = 62, .external_lex_state = 3}, + [20] = {.lex_state = 62, .external_lex_state = 3}, + [21] = {.lex_state = 62, .external_lex_state = 3}, + [22] = {.lex_state = 62, .external_lex_state = 3}, + [23] = {.lex_state = 62, .external_lex_state = 3}, + [24] = {.lex_state = 62, .external_lex_state = 3}, + [25] = {.lex_state = 62, .external_lex_state = 3}, + [26] = {.lex_state = 62, .external_lex_state = 3}, + [27] = {.lex_state = 62, .external_lex_state = 3}, + [28] = {.lex_state = 62, .external_lex_state = 3}, + [29] = {.lex_state = 62, .external_lex_state = 3}, + [30] = {.lex_state = 62, .external_lex_state = 3}, + [31] = {.lex_state = 62, .external_lex_state = 3}, + [32] = {.lex_state = 62, .external_lex_state = 3}, + [33] = {.lex_state = 62, .external_lex_state = 3}, + [34] = {.lex_state = 62, .external_lex_state = 3}, + [35] = {.lex_state = 62, .external_lex_state = 3}, + [36] = {.lex_state = 62, .external_lex_state = 3}, + [37] = {.lex_state = 62, .external_lex_state = 3}, + [38] = {.lex_state = 62, .external_lex_state = 3}, + [39] = {.lex_state = 62, .external_lex_state = 3}, + [40] = {.lex_state = 62, .external_lex_state = 3}, + [41] = {.lex_state = 62, .external_lex_state = 3}, + [42] = {.lex_state = 62, .external_lex_state = 3}, + [43] = {.lex_state = 62, .external_lex_state = 3}, + [44] = {.lex_state = 62, .external_lex_state = 3}, + [45] = {.lex_state = 62, .external_lex_state = 3}, + [46] = {.lex_state = 62, .external_lex_state = 3}, + [47] = {.lex_state = 62, .external_lex_state = 3}, + [48] = {.lex_state = 62, .external_lex_state = 3}, + [49] = {.lex_state = 62, .external_lex_state = 3}, + [50] = {.lex_state = 62, .external_lex_state = 3}, + [51] = {.lex_state = 62, .external_lex_state = 3}, + [52] = {.lex_state = 62, .external_lex_state = 3}, + [53] = {.lex_state = 62, .external_lex_state = 3}, + [54] = {.lex_state = 62, .external_lex_state = 3}, + [55] = {.lex_state = 62, .external_lex_state = 3}, + [56] = {.lex_state = 62, .external_lex_state = 3}, + [57] = {.lex_state = 62, .external_lex_state = 3}, + [58] = {.lex_state = 62, .external_lex_state = 3}, + [59] = {.lex_state = 62, .external_lex_state = 3}, + [60] = {.lex_state = 62, .external_lex_state = 3}, + [61] = {.lex_state = 62, .external_lex_state = 3}, + [62] = {.lex_state = 62, .external_lex_state = 3}, + [63] = {.lex_state = 62, .external_lex_state = 3}, + [64] = {.lex_state = 62, .external_lex_state = 2}, + [65] = {.lex_state = 62, .external_lex_state = 3}, + [66] = {.lex_state = 62, .external_lex_state = 3}, + [67] = {.lex_state = 62, .external_lex_state = 2}, + [68] = {.lex_state = 62, .external_lex_state = 3}, + [69] = {.lex_state = 62, .external_lex_state = 3}, + [70] = {.lex_state = 62, .external_lex_state = 4}, + [71] = {.lex_state = 62, .external_lex_state = 4}, + [72] = {.lex_state = 62, .external_lex_state = 5}, + [73] = {.lex_state = 62, .external_lex_state = 5}, + [74] = {.lex_state = 62, .external_lex_state = 5}, + [75] = {.lex_state = 62, .external_lex_state = 4}, + [76] = {.lex_state = 62, .external_lex_state = 5}, + [77] = {.lex_state = 62, .external_lex_state = 5}, + [78] = {.lex_state = 62, .external_lex_state = 5}, + [79] = {.lex_state = 62, .external_lex_state = 5}, + [80] = {.lex_state = 62, .external_lex_state = 5}, + [81] = {.lex_state = 62, .external_lex_state = 5}, + [82] = {.lex_state = 62, .external_lex_state = 5}, + [83] = {.lex_state = 62, .external_lex_state = 5}, + [84] = {.lex_state = 62, .external_lex_state = 5}, + [85] = {.lex_state = 62, .external_lex_state = 5}, + [86] = {.lex_state = 62, .external_lex_state = 5}, + [87] = {.lex_state = 62, .external_lex_state = 5}, + [88] = {.lex_state = 62, .external_lex_state = 5}, + [89] = {.lex_state = 62, .external_lex_state = 5}, + [90] = {.lex_state = 62, .external_lex_state = 5}, + [91] = {.lex_state = 62, .external_lex_state = 5}, + [92] = {.lex_state = 62, .external_lex_state = 5}, + [93] = {.lex_state = 62, .external_lex_state = 5}, + [94] = {.lex_state = 62, .external_lex_state = 5}, + [95] = {.lex_state = 62, .external_lex_state = 5}, + [96] = {.lex_state = 62, .external_lex_state = 5}, + [97] = {.lex_state = 62, .external_lex_state = 5}, + [98] = {.lex_state = 62, .external_lex_state = 5}, + [99] = {.lex_state = 62, .external_lex_state = 5}, + [100] = {.lex_state = 62, .external_lex_state = 5}, + [101] = {.lex_state = 62, .external_lex_state = 5}, + [102] = {.lex_state = 62, .external_lex_state = 5}, + [103] = {.lex_state = 62, .external_lex_state = 5}, + [104] = {.lex_state = 62, .external_lex_state = 5}, + [105] = {.lex_state = 62, .external_lex_state = 5}, + [106] = {.lex_state = 62, .external_lex_state = 5}, + [107] = {.lex_state = 62, .external_lex_state = 5}, + [108] = {.lex_state = 62, .external_lex_state = 5}, + [109] = {.lex_state = 62, .external_lex_state = 5}, + [110] = {.lex_state = 62, .external_lex_state = 5}, + [111] = {.lex_state = 62, .external_lex_state = 5}, + [112] = {.lex_state = 62, .external_lex_state = 5}, + [113] = {.lex_state = 62, .external_lex_state = 5}, + [114] = {.lex_state = 62, .external_lex_state = 5}, + [115] = {.lex_state = 62, .external_lex_state = 5}, + [116] = {.lex_state = 62, .external_lex_state = 5}, + [117] = {.lex_state = 62, .external_lex_state = 5}, + [118] = {.lex_state = 62, .external_lex_state = 5}, + [119] = {.lex_state = 62, .external_lex_state = 5}, + [120] = {.lex_state = 62, .external_lex_state = 5}, + [121] = {.lex_state = 62, .external_lex_state = 5}, + [122] = {.lex_state = 62, .external_lex_state = 5}, + [123] = {.lex_state = 62, .external_lex_state = 5}, + [124] = {.lex_state = 62, .external_lex_state = 5}, + [125] = {.lex_state = 62, .external_lex_state = 5}, + [126] = {.lex_state = 62, .external_lex_state = 5}, + [127] = {.lex_state = 62, .external_lex_state = 5}, + [128] = {.lex_state = 62, .external_lex_state = 5}, + [129] = {.lex_state = 62, .external_lex_state = 5}, + [130] = {.lex_state = 62, .external_lex_state = 5}, + [131] = {.lex_state = 62, .external_lex_state = 4}, + [132] = {.lex_state = 62, .external_lex_state = 2}, + [133] = {.lex_state = 62, .external_lex_state = 4}, + [134] = {.lex_state = 62, .external_lex_state = 4}, + [135] = {.lex_state = 62, .external_lex_state = 4}, + [136] = {.lex_state = 62, .external_lex_state = 4}, + [137] = {.lex_state = 62, .external_lex_state = 4}, + [138] = {.lex_state = 62, .external_lex_state = 4}, + [139] = {.lex_state = 62, .external_lex_state = 4}, + [140] = {.lex_state = 62, .external_lex_state = 4}, + [141] = {.lex_state = 62, .external_lex_state = 4}, + [142] = {.lex_state = 62, .external_lex_state = 4}, + [143] = {.lex_state = 62, .external_lex_state = 4}, + [144] = {.lex_state = 62, .external_lex_state = 4}, + [145] = {.lex_state = 62, .external_lex_state = 4}, + [146] = {.lex_state = 62, .external_lex_state = 4}, + [147] = {.lex_state = 62, .external_lex_state = 2}, + [148] = {.lex_state = 62, .external_lex_state = 2}, + [149] = {.lex_state = 62, .external_lex_state = 2}, + [150] = {.lex_state = 62, .external_lex_state = 4}, + [151] = {.lex_state = 62, .external_lex_state = 2}, + [152] = {.lex_state = 62, .external_lex_state = 2}, + [153] = {.lex_state = 62, .external_lex_state = 2}, + [154] = {.lex_state = 62, .external_lex_state = 2}, + [155] = {.lex_state = 62, .external_lex_state = 2}, + [156] = {.lex_state = 62, .external_lex_state = 2}, + [157] = {.lex_state = 62, .external_lex_state = 2}, + [158] = {.lex_state = 16, .external_lex_state = 2}, + [159] = {.lex_state = 62, .external_lex_state = 2}, + [160] = {.lex_state = 62, .external_lex_state = 2}, + [161] = {.lex_state = 62, .external_lex_state = 2}, + [162] = {.lex_state = 62, .external_lex_state = 2}, + [163] = {.lex_state = 62, .external_lex_state = 2}, + [164] = {.lex_state = 62, .external_lex_state = 2}, + [165] = {.lex_state = 16, .external_lex_state = 2}, + [166] = {.lex_state = 62, .external_lex_state = 2}, + [167] = {.lex_state = 16, .external_lex_state = 2}, + [168] = {.lex_state = 16, .external_lex_state = 2}, + [169] = {.lex_state = 62, .external_lex_state = 2}, + [170] = {.lex_state = 62, .external_lex_state = 2}, + [171] = {.lex_state = 16, .external_lex_state = 2}, + [172] = {.lex_state = 16, .external_lex_state = 2}, + [173] = {.lex_state = 62, .external_lex_state = 2}, + [174] = {.lex_state = 62, .external_lex_state = 2}, + [175] = {.lex_state = 62, .external_lex_state = 2}, + [176] = {.lex_state = 62, .external_lex_state = 2}, + [177] = {.lex_state = 62, .external_lex_state = 2}, + [178] = {.lex_state = 62, .external_lex_state = 2}, + [179] = {.lex_state = 62, .external_lex_state = 2}, + [180] = {.lex_state = 62, .external_lex_state = 4}, + [181] = {.lex_state = 62, .external_lex_state = 4}, + [182] = {.lex_state = 62, .external_lex_state = 2}, + [183] = {.lex_state = 62, .external_lex_state = 2}, + [184] = {.lex_state = 62, .external_lex_state = 2}, + [185] = {.lex_state = 62, .external_lex_state = 2}, + [186] = {.lex_state = 62, .external_lex_state = 2}, + [187] = {.lex_state = 62, .external_lex_state = 2}, + [188] = {.lex_state = 62, .external_lex_state = 2}, + [189] = {.lex_state = 62, .external_lex_state = 2}, + [190] = {.lex_state = 62, .external_lex_state = 2}, + [191] = {.lex_state = 62, .external_lex_state = 2}, + [192] = {.lex_state = 62, .external_lex_state = 2}, + [193] = {.lex_state = 62, .external_lex_state = 2}, + [194] = {.lex_state = 62, .external_lex_state = 2}, + [195] = {.lex_state = 62, .external_lex_state = 4}, + [196] = {.lex_state = 62, .external_lex_state = 2}, + [197] = {.lex_state = 62, .external_lex_state = 2}, + [198] = {.lex_state = 62, .external_lex_state = 2}, + [199] = {.lex_state = 62, .external_lex_state = 2}, + [200] = {.lex_state = 62, .external_lex_state = 2}, + [201] = {.lex_state = 62, .external_lex_state = 4}, + [202] = {.lex_state = 62, .external_lex_state = 2}, + [203] = {.lex_state = 62, .external_lex_state = 2}, + [204] = {.lex_state = 62, .external_lex_state = 2}, + [205] = {.lex_state = 62, .external_lex_state = 4}, + [206] = {.lex_state = 62, .external_lex_state = 2}, + [207] = {.lex_state = 62, .external_lex_state = 2}, + [208] = {.lex_state = 62, .external_lex_state = 2}, + [209] = {.lex_state = 62, .external_lex_state = 2}, + [210] = {.lex_state = 62, .external_lex_state = 4}, + [211] = {.lex_state = 62, .external_lex_state = 2}, + [212] = {.lex_state = 62, .external_lex_state = 2}, + [213] = {.lex_state = 62, .external_lex_state = 2}, + [214] = {.lex_state = 62, .external_lex_state = 2}, + [215] = {.lex_state = 62, .external_lex_state = 2}, + [216] = {.lex_state = 62, .external_lex_state = 2}, + [217] = {.lex_state = 62, .external_lex_state = 2}, + [218] = {.lex_state = 15}, + [219] = {.lex_state = 15}, + [220] = {.lex_state = 15}, + [221] = {.lex_state = 15}, + [222] = {.lex_state = 62, .external_lex_state = 2}, + [223] = {.lex_state = 15}, + [224] = {.lex_state = 62, .external_lex_state = 2}, + [225] = {.lex_state = 62, .external_lex_state = 2}, + [226] = {.lex_state = 15}, + [227] = {.lex_state = 15}, + [228] = {.lex_state = 63, .external_lex_state = 2}, + [229] = {.lex_state = 64, .external_lex_state = 3}, + [230] = {.lex_state = 62, .external_lex_state = 2}, + [231] = {.lex_state = 62, .external_lex_state = 2}, + [232] = {.lex_state = 63, .external_lex_state = 3}, + [233] = {.lex_state = 62, .external_lex_state = 2}, + [234] = {.lex_state = 64, .external_lex_state = 3}, + [235] = {.lex_state = 62, .external_lex_state = 2}, + [236] = {.lex_state = 62, .external_lex_state = 2}, + [237] = {.lex_state = 64, .external_lex_state = 2}, + [238] = {.lex_state = 63, .external_lex_state = 2}, + [239] = {.lex_state = 62, .external_lex_state = 2}, + [240] = {.lex_state = 64, .external_lex_state = 2}, + [241] = {.lex_state = 63, .external_lex_state = 3}, + [242] = {.lex_state = 62, .external_lex_state = 2}, + [243] = {.lex_state = 62, .external_lex_state = 2}, + [244] = {.lex_state = 62, .external_lex_state = 2}, + [245] = {.lex_state = 62, .external_lex_state = 2}, + [246] = {.lex_state = 62, .external_lex_state = 2}, + [247] = {.lex_state = 14, .external_lex_state = 6}, + [248] = {.lex_state = 62, .external_lex_state = 2}, + [249] = {.lex_state = 62, .external_lex_state = 2}, + [250] = {.lex_state = 62, .external_lex_state = 2}, + [251] = {.lex_state = 62, .external_lex_state = 2}, + [252] = {.lex_state = 62, .external_lex_state = 2}, + [253] = {.lex_state = 62, .external_lex_state = 2}, + [254] = {.lex_state = 14, .external_lex_state = 6}, + [255] = {.lex_state = 16, .external_lex_state = 2}, + [256] = {.lex_state = 16, .external_lex_state = 2}, + [257] = {.lex_state = 16, .external_lex_state = 2}, + [258] = {.lex_state = 62, .external_lex_state = 3}, + [259] = {.lex_state = 16, .external_lex_state = 2}, + [260] = {.lex_state = 16, .external_lex_state = 2}, + [261] = {.lex_state = 16, .external_lex_state = 2}, + [262] = {.lex_state = 16, .external_lex_state = 2}, + [263] = {.lex_state = 62, .external_lex_state = 3}, + [264] = {.lex_state = 16, .external_lex_state = 2}, + [265] = {.lex_state = 62, .external_lex_state = 3}, + [266] = {.lex_state = 63, .external_lex_state = 3}, + [267] = {.lex_state = 64, .external_lex_state = 3}, + [268] = {.lex_state = 62, .external_lex_state = 2}, + [269] = {.lex_state = 16, .external_lex_state = 2}, + [270] = {.lex_state = 64, .external_lex_state = 2}, + [271] = {.lex_state = 63, .external_lex_state = 2}, + [272] = {.lex_state = 62, .external_lex_state = 3}, + [273] = {.lex_state = 16, .external_lex_state = 2}, + [274] = {.lex_state = 16, .external_lex_state = 2}, + [275] = {.lex_state = 62, .external_lex_state = 2}, + [276] = {.lex_state = 62, .external_lex_state = 2}, + [277] = {.lex_state = 62, .external_lex_state = 2}, + [278] = {.lex_state = 14, .external_lex_state = 4}, + [279] = {.lex_state = 62, .external_lex_state = 2}, + [280] = {.lex_state = 62, .external_lex_state = 2}, + [281] = {.lex_state = 62, .external_lex_state = 2}, + [282] = {.lex_state = 62, .external_lex_state = 2}, + [283] = {.lex_state = 62, .external_lex_state = 2}, + [284] = {.lex_state = 14, .external_lex_state = 6}, + [285] = {.lex_state = 62, .external_lex_state = 2}, + [286] = {.lex_state = 62, .external_lex_state = 2}, + [287] = {.lex_state = 62, .external_lex_state = 2}, + [288] = {.lex_state = 62, .external_lex_state = 3}, + [289] = {.lex_state = 62, .external_lex_state = 2}, + [290] = {.lex_state = 62, .external_lex_state = 2}, + [291] = {.lex_state = 62, .external_lex_state = 3}, + [292] = {.lex_state = 62, .external_lex_state = 2}, + [293] = {.lex_state = 62, .external_lex_state = 2}, + [294] = {.lex_state = 62, .external_lex_state = 2}, + [295] = {.lex_state = 62, .external_lex_state = 4}, + [296] = {.lex_state = 62, .external_lex_state = 2}, + [297] = {.lex_state = 62, .external_lex_state = 2}, + [298] = {.lex_state = 62, .external_lex_state = 2}, + [299] = {.lex_state = 16, .external_lex_state = 2}, + [300] = {.lex_state = 62, .external_lex_state = 4}, + [301] = {.lex_state = 16, .external_lex_state = 2}, + [302] = {.lex_state = 62, .external_lex_state = 2}, + [303] = {.lex_state = 62, .external_lex_state = 4}, + [304] = {.lex_state = 62, .external_lex_state = 4}, + [305] = {.lex_state = 62, .external_lex_state = 2}, + [306] = {.lex_state = 62, .external_lex_state = 2}, + [307] = {.lex_state = 62, .external_lex_state = 3}, + [308] = {.lex_state = 62, .external_lex_state = 3}, + [309] = {.lex_state = 62, .external_lex_state = 2}, + [310] = {.lex_state = 16, .external_lex_state = 2}, + [311] = {.lex_state = 62, .external_lex_state = 3}, + [312] = {.lex_state = 62, .external_lex_state = 2}, + [313] = {.lex_state = 62, .external_lex_state = 2}, + [314] = {.lex_state = 16, .external_lex_state = 2}, + [315] = {.lex_state = 62, .external_lex_state = 3}, + [316] = {.lex_state = 64, .external_lex_state = 3}, + [317] = {.lex_state = 63, .external_lex_state = 3}, + [318] = {.lex_state = 64, .external_lex_state = 2}, + [319] = {.lex_state = 63, .external_lex_state = 2}, + [320] = {.lex_state = 63, .external_lex_state = 2}, + [321] = {.lex_state = 62, .external_lex_state = 2}, + [322] = {.lex_state = 62, .external_lex_state = 2}, + [323] = {.lex_state = 62, .external_lex_state = 2}, + [324] = {.lex_state = 62, .external_lex_state = 2}, + [325] = {.lex_state = 63, .external_lex_state = 2}, + [326] = {.lex_state = 63, .external_lex_state = 2}, + [327] = {.lex_state = 64, .external_lex_state = 2}, + [328] = {.lex_state = 63, .external_lex_state = 2}, + [329] = {.lex_state = 64, .external_lex_state = 2}, + [330] = {.lex_state = 14, .external_lex_state = 6}, + [331] = {.lex_state = 64, .external_lex_state = 2}, + [332] = {.lex_state = 63, .external_lex_state = 2}, + [333] = {.lex_state = 63, .external_lex_state = 2}, + [334] = {.lex_state = 14, .external_lex_state = 6}, + [335] = {.lex_state = 16, .external_lex_state = 2}, + [336] = {.lex_state = 15, .external_lex_state = 6}, + [337] = {.lex_state = 15, .external_lex_state = 6}, + [338] = {.lex_state = 14}, + [339] = {.lex_state = 14}, + [340] = {.lex_state = 63, .external_lex_state = 2}, + [341] = {.lex_state = 62, .external_lex_state = 2}, + [342] = {.lex_state = 15, .external_lex_state = 6}, + [343] = {.lex_state = 15, .external_lex_state = 6}, + [344] = {.lex_state = 15, .external_lex_state = 6}, + [345] = {.lex_state = 62, .external_lex_state = 3}, + [346] = {.lex_state = 62, .external_lex_state = 2}, + [347] = {.lex_state = 62, .external_lex_state = 2}, + [348] = {.lex_state = 62, .external_lex_state = 2}, + [349] = {.lex_state = 62, .external_lex_state = 3}, + [350] = {.lex_state = 62, .external_lex_state = 2}, + [351] = {.lex_state = 62, .external_lex_state = 2}, + [352] = {.lex_state = 15, .external_lex_state = 6}, + [353] = {.lex_state = 63, .external_lex_state = 3}, + [354] = {.lex_state = 64, .external_lex_state = 3}, + [355] = {.lex_state = 64, .external_lex_state = 3}, + [356] = {.lex_state = 64, .external_lex_state = 3}, + [357] = {.lex_state = 63, .external_lex_state = 3}, + [358] = {.lex_state = 64, .external_lex_state = 3}, + [359] = {.lex_state = 64, .external_lex_state = 2}, + [360] = {.lex_state = 63, .external_lex_state = 3}, + [361] = {.lex_state = 62, .external_lex_state = 2}, + [362] = {.lex_state = 64, .external_lex_state = 2}, + [363] = {.lex_state = 64, .external_lex_state = 3}, + [364] = {.lex_state = 62, .external_lex_state = 2}, + [365] = {.lex_state = 15, .external_lex_state = 6}, + [366] = {.lex_state = 63, .external_lex_state = 3}, + [367] = {.lex_state = 64, .external_lex_state = 2}, + [368] = {.lex_state = 62, .external_lex_state = 2}, + [369] = {.lex_state = 63, .external_lex_state = 2}, + [370] = {.lex_state = 63, .external_lex_state = 3}, + [371] = {.lex_state = 64, .external_lex_state = 2}, + [372] = {.lex_state = 64, .external_lex_state = 3}, + [373] = {.lex_state = 63, .external_lex_state = 3}, + [374] = {.lex_state = 64, .external_lex_state = 3}, + [375] = {.lex_state = 63, .external_lex_state = 2}, + [376] = {.lex_state = 64, .external_lex_state = 2}, + [377] = {.lex_state = 63, .external_lex_state = 3}, + [378] = {.lex_state = 63, .external_lex_state = 3}, + [379] = {.lex_state = 63, .external_lex_state = 3}, + [380] = {.lex_state = 62, .external_lex_state = 2}, + [381] = {.lex_state = 63, .external_lex_state = 3}, + [382] = {.lex_state = 63, .external_lex_state = 2}, + [383] = {.lex_state = 16, .external_lex_state = 2}, + [384] = {.lex_state = 64, .external_lex_state = 3}, + [385] = {.lex_state = 62, .external_lex_state = 2}, + [386] = {.lex_state = 62, .external_lex_state = 2}, + [387] = {.lex_state = 62, .external_lex_state = 2}, + [388] = {.lex_state = 62, .external_lex_state = 2}, + [389] = {.lex_state = 62, .external_lex_state = 2}, + [390] = {.lex_state = 62, .external_lex_state = 2}, + [391] = {.lex_state = 62, .external_lex_state = 2}, + [392] = {.lex_state = 62, .external_lex_state = 2}, + [393] = {.lex_state = 62, .external_lex_state = 2}, + [394] = {.lex_state = 62, .external_lex_state = 2}, + [395] = {.lex_state = 62, .external_lex_state = 2}, + [396] = {.lex_state = 62, .external_lex_state = 2}, + [397] = {.lex_state = 62, .external_lex_state = 2}, + [398] = {.lex_state = 62, .external_lex_state = 2}, + [399] = {.lex_state = 62, .external_lex_state = 2}, + [400] = {.lex_state = 62, .external_lex_state = 2}, + [401] = {.lex_state = 62, .external_lex_state = 2}, + [402] = {.lex_state = 62, .external_lex_state = 2}, + [403] = {.lex_state = 62, .external_lex_state = 3}, + [404] = {.lex_state = 62, .external_lex_state = 2}, + [405] = {.lex_state = 62, .external_lex_state = 2}, + [406] = {.lex_state = 62, .external_lex_state = 2}, + [407] = {.lex_state = 62, .external_lex_state = 2}, + [408] = {.lex_state = 62, .external_lex_state = 2}, + [409] = {.lex_state = 62, .external_lex_state = 2}, + [410] = {.lex_state = 62, .external_lex_state = 2}, + [411] = {.lex_state = 62, .external_lex_state = 2}, + [412] = {.lex_state = 62, .external_lex_state = 2}, + [413] = {.lex_state = 62, .external_lex_state = 3}, + [414] = {.lex_state = 62, .external_lex_state = 3}, + [415] = {.lex_state = 62, .external_lex_state = 2}, + [416] = {.lex_state = 62, .external_lex_state = 2}, + [417] = {.lex_state = 62, .external_lex_state = 2}, + [418] = {.lex_state = 62, .external_lex_state = 3}, + [419] = {.lex_state = 62, .external_lex_state = 2}, + [420] = {.lex_state = 62, .external_lex_state = 3}, + [421] = {.lex_state = 62, .external_lex_state = 3}, + [422] = {.lex_state = 62, .external_lex_state = 2}, + [423] = {.lex_state = 62, .external_lex_state = 2}, + [424] = {.lex_state = 62, .external_lex_state = 2}, + [425] = {.lex_state = 62, .external_lex_state = 2}, + [426] = {.lex_state = 62, .external_lex_state = 2}, + [427] = {.lex_state = 62, .external_lex_state = 2}, + [428] = {.lex_state = 62, .external_lex_state = 3}, + [429] = {.lex_state = 62, .external_lex_state = 2}, + [430] = {.lex_state = 62, .external_lex_state = 2}, + [431] = {.lex_state = 15, .external_lex_state = 6}, + [432] = {.lex_state = 62, .external_lex_state = 3}, + [433] = {.lex_state = 62, .external_lex_state = 2}, + [434] = {.lex_state = 62, .external_lex_state = 2}, + [435] = {.lex_state = 62, .external_lex_state = 2}, + [436] = {.lex_state = 62, .external_lex_state = 2}, + [437] = {.lex_state = 62, .external_lex_state = 2}, + [438] = {.lex_state = 62, .external_lex_state = 2}, + [439] = {.lex_state = 62, .external_lex_state = 2}, + [440] = {.lex_state = 62, .external_lex_state = 2}, + [441] = {.lex_state = 15, .external_lex_state = 6}, + [442] = {.lex_state = 62, .external_lex_state = 2}, + [443] = {.lex_state = 62, .external_lex_state = 2}, + [444] = {.lex_state = 62, .external_lex_state = 2}, + [445] = {.lex_state = 62, .external_lex_state = 2}, + [446] = {.lex_state = 62, .external_lex_state = 2}, + [447] = {.lex_state = 62, .external_lex_state = 2}, + [448] = {.lex_state = 62, .external_lex_state = 2}, + [449] = {.lex_state = 15}, + [450] = {.lex_state = 62, .external_lex_state = 2}, + [451] = {.lex_state = 62, .external_lex_state = 2}, + [452] = {.lex_state = 62, .external_lex_state = 2}, + [453] = {.lex_state = 62, .external_lex_state = 2}, + [454] = {.lex_state = 62, .external_lex_state = 3}, + [455] = {.lex_state = 62, .external_lex_state = 2}, + [456] = {.lex_state = 62, .external_lex_state = 2}, + [457] = {.lex_state = 62, .external_lex_state = 2}, + [458] = {.lex_state = 62, .external_lex_state = 2}, + [459] = {.lex_state = 62, .external_lex_state = 2}, + [460] = {.lex_state = 62, .external_lex_state = 2}, + [461] = {.lex_state = 62, .external_lex_state = 2}, + [462] = {.lex_state = 62, .external_lex_state = 2}, + [463] = {.lex_state = 62, .external_lex_state = 2}, + [464] = {.lex_state = 62, .external_lex_state = 3}, + [465] = {.lex_state = 62, .external_lex_state = 2}, + [466] = {.lex_state = 62, .external_lex_state = 2}, + [467] = {.lex_state = 62, .external_lex_state = 2}, + [468] = {.lex_state = 62, .external_lex_state = 2}, + [469] = {.lex_state = 62, .external_lex_state = 2}, + [470] = {.lex_state = 62, .external_lex_state = 2}, + [471] = {.lex_state = 62, .external_lex_state = 2}, + [472] = {.lex_state = 62, .external_lex_state = 2}, + [473] = {.lex_state = 62, .external_lex_state = 2}, + [474] = {.lex_state = 62, .external_lex_state = 2}, + [475] = {.lex_state = 15, .external_lex_state = 6}, + [476] = {.lex_state = 62, .external_lex_state = 2}, + [477] = {.lex_state = 62, .external_lex_state = 2}, + [478] = {.lex_state = 62, .external_lex_state = 3}, + [479] = {.lex_state = 62, .external_lex_state = 2}, + [480] = {.lex_state = 62, .external_lex_state = 2}, + [481] = {.lex_state = 62, .external_lex_state = 2}, + [482] = {.lex_state = 62, .external_lex_state = 2}, + [483] = {.lex_state = 62, .external_lex_state = 2}, + [484] = {.lex_state = 62, .external_lex_state = 2}, + [485] = {.lex_state = 62, .external_lex_state = 3}, + [486] = {.lex_state = 62, .external_lex_state = 2}, + [487] = {.lex_state = 62, .external_lex_state = 3}, + [488] = {.lex_state = 62, .external_lex_state = 2}, + [489] = {.lex_state = 62, .external_lex_state = 3}, + [490] = {.lex_state = 62, .external_lex_state = 2}, + [491] = {.lex_state = 62, .external_lex_state = 3}, + [492] = {.lex_state = 62, .external_lex_state = 3}, + [493] = {.lex_state = 62, .external_lex_state = 2}, + [494] = {.lex_state = 62, .external_lex_state = 2}, + [495] = {.lex_state = 62, .external_lex_state = 3}, + [496] = {.lex_state = 62, .external_lex_state = 2}, + [497] = {.lex_state = 62, .external_lex_state = 2}, + [498] = {.lex_state = 62, .external_lex_state = 3}, + [499] = {.lex_state = 62, .external_lex_state = 2}, + [500] = {.lex_state = 62, .external_lex_state = 2}, + [501] = {.lex_state = 62, .external_lex_state = 2}, + [502] = {.lex_state = 62, .external_lex_state = 3}, + [503] = {.lex_state = 62, .external_lex_state = 2}, + [504] = {.lex_state = 62, .external_lex_state = 2}, + [505] = {.lex_state = 62, .external_lex_state = 3}, + [506] = {.lex_state = 62, .external_lex_state = 3}, + [507] = {.lex_state = 62, .external_lex_state = 2}, + [508] = {.lex_state = 62, .external_lex_state = 3}, + [509] = {.lex_state = 62, .external_lex_state = 3}, + [510] = {.lex_state = 62, .external_lex_state = 3}, + [511] = {.lex_state = 62, .external_lex_state = 2}, + [512] = {.lex_state = 62, .external_lex_state = 2}, + [513] = {.lex_state = 62, .external_lex_state = 3}, + [514] = {.lex_state = 62, .external_lex_state = 2}, + [515] = {.lex_state = 62, .external_lex_state = 2}, + [516] = {.lex_state = 62, .external_lex_state = 3}, + [517] = {.lex_state = 62, .external_lex_state = 3}, + [518] = {.lex_state = 62, .external_lex_state = 2}, + [519] = {.lex_state = 62, .external_lex_state = 2}, + [520] = {.lex_state = 62, .external_lex_state = 3}, + [521] = {.lex_state = 62, .external_lex_state = 2}, + [522] = {.lex_state = 62, .external_lex_state = 3}, + [523] = {.lex_state = 62, .external_lex_state = 2}, + [524] = {.lex_state = 62, .external_lex_state = 2}, + [525] = {.lex_state = 62, .external_lex_state = 3}, + [526] = {.lex_state = 62, .external_lex_state = 3}, + [527] = {.lex_state = 62, .external_lex_state = 3}, + [528] = {.lex_state = 62, .external_lex_state = 2}, + [529] = {.lex_state = 62, .external_lex_state = 3}, + [530] = {.lex_state = 62, .external_lex_state = 3}, + [531] = {.lex_state = 62, .external_lex_state = 3}, + [532] = {.lex_state = 62, .external_lex_state = 2}, + [533] = {.lex_state = 62, .external_lex_state = 2}, + [534] = {.lex_state = 62, .external_lex_state = 3}, + [535] = {.lex_state = 62, .external_lex_state = 2}, + [536] = {.lex_state = 62, .external_lex_state = 2}, + [537] = {.lex_state = 62, .external_lex_state = 2}, + [538] = {.lex_state = 62, .external_lex_state = 2}, + [539] = {.lex_state = 62, .external_lex_state = 3}, + [540] = {.lex_state = 62, .external_lex_state = 3}, + [541] = {.lex_state = 62, .external_lex_state = 2}, + [542] = {.lex_state = 62, .external_lex_state = 2}, + [543] = {.lex_state = 62, .external_lex_state = 2}, + [544] = {.lex_state = 62, .external_lex_state = 3}, + [545] = {.lex_state = 62, .external_lex_state = 2}, + [546] = {.lex_state = 62, .external_lex_state = 2}, + [547] = {.lex_state = 62, .external_lex_state = 2}, + [548] = {.lex_state = 62, .external_lex_state = 3}, + [549] = {.lex_state = 62, .external_lex_state = 2}, + [550] = {.lex_state = 62, .external_lex_state = 2}, + [551] = {.lex_state = 62, .external_lex_state = 3}, + [552] = {.lex_state = 62, .external_lex_state = 2}, + [553] = {.lex_state = 62, .external_lex_state = 2}, + [554] = {.lex_state = 62, .external_lex_state = 3}, + [555] = {.lex_state = 62, .external_lex_state = 3}, + [556] = {.lex_state = 62, .external_lex_state = 2}, + [557] = {.lex_state = 62, .external_lex_state = 2}, + [558] = {.lex_state = 62, .external_lex_state = 3}, + [559] = {.lex_state = 62, .external_lex_state = 2}, + [560] = {.lex_state = 62, .external_lex_state = 3}, + [561] = {.lex_state = 62, .external_lex_state = 2}, + [562] = {.lex_state = 62, .external_lex_state = 3}, + [563] = {.lex_state = 62, .external_lex_state = 3}, + [564] = {.lex_state = 62, .external_lex_state = 3}, + [565] = {.lex_state = 62, .external_lex_state = 3}, + [566] = {.lex_state = 62, .external_lex_state = 2}, + [567] = {.lex_state = 62, .external_lex_state = 3}, + [568] = {.lex_state = 62, .external_lex_state = 3}, + [569] = {.lex_state = 62, .external_lex_state = 2}, + [570] = {.lex_state = 62, .external_lex_state = 3}, + [571] = {.lex_state = 62, .external_lex_state = 3}, + [572] = {.lex_state = 62, .external_lex_state = 2}, + [573] = {.lex_state = 62, .external_lex_state = 2}, + [574] = {.lex_state = 62, .external_lex_state = 3}, + [575] = {.lex_state = 62, .external_lex_state = 2}, + [576] = {.lex_state = 62, .external_lex_state = 2}, + [577] = {.lex_state = 62, .external_lex_state = 3}, + [578] = {.lex_state = 62, .external_lex_state = 2}, + [579] = {.lex_state = 62, .external_lex_state = 3}, + [580] = {.lex_state = 62, .external_lex_state = 3}, + [581] = {.lex_state = 62, .external_lex_state = 3}, + [582] = {.lex_state = 62, .external_lex_state = 3}, + [583] = {.lex_state = 62, .external_lex_state = 2}, + [584] = {.lex_state = 62, .external_lex_state = 3}, + [585] = {.lex_state = 62, .external_lex_state = 2}, + [586] = {.lex_state = 62, .external_lex_state = 2}, + [587] = {.lex_state = 62, .external_lex_state = 3}, + [588] = {.lex_state = 62, .external_lex_state = 3}, + [589] = {.lex_state = 62, .external_lex_state = 2}, + [590] = {.lex_state = 62, .external_lex_state = 2}, + [591] = {.lex_state = 62, .external_lex_state = 3}, + [592] = {.lex_state = 62, .external_lex_state = 3}, + [593] = {.lex_state = 62, .external_lex_state = 3}, + [594] = {.lex_state = 62, .external_lex_state = 3}, + [595] = {.lex_state = 62, .external_lex_state = 2}, + [596] = {.lex_state = 62, .external_lex_state = 2}, + [597] = {.lex_state = 62, .external_lex_state = 2}, + [598] = {.lex_state = 15, .external_lex_state = 2}, + [599] = {.lex_state = 15, .external_lex_state = 2}, + [600] = {.lex_state = 15, .external_lex_state = 2}, + [601] = {.lex_state = 62, .external_lex_state = 2}, + [602] = {.lex_state = 62, .external_lex_state = 2}, + [603] = {.lex_state = 62, .external_lex_state = 2}, + [604] = {.lex_state = 62, .external_lex_state = 2}, + [605] = {.lex_state = 62, .external_lex_state = 2}, + [606] = {.lex_state = 62, .external_lex_state = 2}, + [607] = {.lex_state = 62, .external_lex_state = 2}, + [608] = {.lex_state = 62, .external_lex_state = 2}, + [609] = {.lex_state = 15, .external_lex_state = 2}, + [610] = {.lex_state = 15, .external_lex_state = 2}, + [611] = {.lex_state = 15}, + [612] = {.lex_state = 15}, + [613] = {.lex_state = 15}, + [614] = {.lex_state = 15}, + [615] = {.lex_state = 15}, + [616] = {.lex_state = 15}, + [617] = {.lex_state = 15}, + [618] = {.lex_state = 15}, + [619] = {.lex_state = 15}, + [620] = {.lex_state = 15}, + [621] = {.lex_state = 15}, + [622] = {.lex_state = 15}, + [623] = {.lex_state = 15}, + [624] = {.lex_state = 15}, + [625] = {.lex_state = 15}, + [626] = {.lex_state = 15}, + [627] = {.lex_state = 15}, + [628] = {.lex_state = 15}, + [629] = {.lex_state = 15}, + [630] = {.lex_state = 15}, + [631] = {.lex_state = 15}, + [632] = {.lex_state = 15}, + [633] = {.lex_state = 15}, + [634] = {.lex_state = 15}, + [635] = {.lex_state = 15}, + [636] = {.lex_state = 16, .external_lex_state = 2}, + [637] = {.lex_state = 15}, + [638] = {.lex_state = 15}, + [639] = {.lex_state = 15}, + [640] = {.lex_state = 15}, + [641] = {.lex_state = 15}, + [642] = {.lex_state = 15}, + [643] = {.lex_state = 15}, + [644] = {.lex_state = 15}, + [645] = {.lex_state = 15}, + [646] = {.lex_state = 15}, + [647] = {.lex_state = 15}, + [648] = {.lex_state = 15}, + [649] = {.lex_state = 15}, + [650] = {.lex_state = 15}, + [651] = {.lex_state = 15}, + [652] = {.lex_state = 15}, + [653] = {.lex_state = 15}, + [654] = {.lex_state = 15}, + [655] = {.lex_state = 15}, + [656] = {.lex_state = 15}, + [657] = {.lex_state = 15}, + [658] = {.lex_state = 15}, + [659] = {.lex_state = 15}, + [660] = {.lex_state = 15}, + [661] = {.lex_state = 15}, + [662] = {.lex_state = 15}, + [663] = {.lex_state = 15}, + [664] = {.lex_state = 15}, + [665] = {.lex_state = 15}, + [666] = {.lex_state = 15}, + [667] = {.lex_state = 14}, + [668] = {.lex_state = 14}, + [669] = {.lex_state = 62, .external_lex_state = 2}, + [670] = {.lex_state = 62, .external_lex_state = 2}, + [671] = {.lex_state = 15}, + [672] = {.lex_state = 15}, + [673] = {.lex_state = 62, .external_lex_state = 2}, + [674] = {.lex_state = 14}, + [675] = {.lex_state = 14}, + [676] = {.lex_state = 62, .external_lex_state = 2}, + [677] = {.lex_state = 15, .external_lex_state = 2}, + [678] = {.lex_state = 15, .external_lex_state = 2}, + [679] = {.lex_state = 62, .external_lex_state = 2}, + [680] = {.lex_state = 62, .external_lex_state = 2}, + [681] = {.lex_state = 62, .external_lex_state = 2}, + [682] = {.lex_state = 62, .external_lex_state = 2}, + [683] = {.lex_state = 62, .external_lex_state = 2}, + [684] = {.lex_state = 15, .external_lex_state = 6}, + [685] = {.lex_state = 62, .external_lex_state = 2}, + [686] = {.lex_state = 62, .external_lex_state = 2}, + [687] = {.lex_state = 62, .external_lex_state = 2}, + [688] = {.lex_state = 62, .external_lex_state = 2}, + [689] = {.lex_state = 15, .external_lex_state = 4}, + [690] = {.lex_state = 62, .external_lex_state = 2}, + [691] = {.lex_state = 62, .external_lex_state = 2}, + [692] = {.lex_state = 62, .external_lex_state = 2}, + [693] = {.lex_state = 62, .external_lex_state = 2}, + [694] = {.lex_state = 62, .external_lex_state = 2}, + [695] = {.lex_state = 62, .external_lex_state = 2}, + [696] = {.lex_state = 62, .external_lex_state = 2}, + [697] = {.lex_state = 62, .external_lex_state = 2}, + [698] = {.lex_state = 62, .external_lex_state = 2}, + [699] = {.lex_state = 62, .external_lex_state = 2}, + [700] = {.lex_state = 62, .external_lex_state = 2}, + [701] = {.lex_state = 62, .external_lex_state = 2}, + [702] = {.lex_state = 62, .external_lex_state = 2}, + [703] = {.lex_state = 62, .external_lex_state = 2}, + [704] = {.lex_state = 62, .external_lex_state = 2}, + [705] = {.lex_state = 62, .external_lex_state = 2}, + [706] = {.lex_state = 62, .external_lex_state = 2}, + [707] = {.lex_state = 62, .external_lex_state = 2}, + [708] = {.lex_state = 62, .external_lex_state = 2}, + [709] = {.lex_state = 62, .external_lex_state = 2}, + [710] = {.lex_state = 62, .external_lex_state = 2}, + [711] = {.lex_state = 62, .external_lex_state = 2}, + [712] = {.lex_state = 62, .external_lex_state = 2}, + [713] = {.lex_state = 15, .external_lex_state = 4}, + [714] = {.lex_state = 62, .external_lex_state = 2}, + [715] = {.lex_state = 62, .external_lex_state = 2}, + [716] = {.lex_state = 62, .external_lex_state = 2}, + [717] = {.lex_state = 62, .external_lex_state = 2}, + [718] = {.lex_state = 62, .external_lex_state = 2}, + [719] = {.lex_state = 62, .external_lex_state = 2}, + [720] = {.lex_state = 15, .external_lex_state = 4}, + [721] = {.lex_state = 62, .external_lex_state = 2}, + [722] = {.lex_state = 62, .external_lex_state = 2}, + [723] = {.lex_state = 62, .external_lex_state = 2}, + [724] = {.lex_state = 62, .external_lex_state = 2}, + [725] = {.lex_state = 15}, + [726] = {.lex_state = 62, .external_lex_state = 2}, + [727] = {.lex_state = 15}, + [728] = {.lex_state = 62, .external_lex_state = 2}, + [729] = {.lex_state = 62, .external_lex_state = 2}, + [730] = {.lex_state = 62, .external_lex_state = 2}, + [731] = {.lex_state = 15, .external_lex_state = 6}, + [732] = {.lex_state = 15, .external_lex_state = 6}, + [733] = {.lex_state = 15, .external_lex_state = 6}, + [734] = {.lex_state = 15, .external_lex_state = 6}, + [735] = {.lex_state = 15, .external_lex_state = 6}, + [736] = {.lex_state = 15, .external_lex_state = 2}, + [737] = {.lex_state = 15, .external_lex_state = 6}, + [738] = {.lex_state = 15, .external_lex_state = 6}, + [739] = {.lex_state = 15, .external_lex_state = 6}, + [740] = {.lex_state = 15}, + [741] = {.lex_state = 15, .external_lex_state = 6}, + [742] = {.lex_state = 15, .external_lex_state = 2}, + [743] = {.lex_state = 15, .external_lex_state = 6}, + [744] = {.lex_state = 15, .external_lex_state = 2}, + [745] = {.lex_state = 15, .external_lex_state = 6}, + [746] = {.lex_state = 15}, + [747] = {.lex_state = 15}, + [748] = {.lex_state = 15}, + [749] = {.lex_state = 14}, + [750] = {.lex_state = 15}, + [751] = {.lex_state = 15}, + [752] = {.lex_state = 15}, + [753] = {.lex_state = 15}, + [754] = {.lex_state = 14, .external_lex_state = 6}, + [755] = {.lex_state = 14, .external_lex_state = 6}, + [756] = {.lex_state = 15}, + [757] = {.lex_state = 15}, + [758] = {.lex_state = 15, .external_lex_state = 4}, + [759] = {.lex_state = 14}, + [760] = {.lex_state = 14}, + [761] = {.lex_state = 15}, + [762] = {.lex_state = 15}, + [763] = {.lex_state = 15}, + [764] = {.lex_state = 14}, + [765] = {.lex_state = 15}, + [766] = {.lex_state = 15}, + [767] = {.lex_state = 15}, + [768] = {.lex_state = 15}, + [769] = {.lex_state = 15, .external_lex_state = 4}, + [770] = {.lex_state = 15}, + [771] = {.lex_state = 15, .external_lex_state = 6}, + [772] = {.lex_state = 15, .external_lex_state = 6}, + [773] = {.lex_state = 15, .external_lex_state = 6}, + [774] = {.lex_state = 15, .external_lex_state = 6}, + [775] = {.lex_state = 15, .external_lex_state = 6}, + [776] = {.lex_state = 15, .external_lex_state = 6}, + [777] = {.lex_state = 15, .external_lex_state = 6}, + [778] = {.lex_state = 15, .external_lex_state = 6}, + [779] = {.lex_state = 15}, + [780] = {.lex_state = 15, .external_lex_state = 6}, + [781] = {.lex_state = 15, .external_lex_state = 6}, + [782] = {.lex_state = 15, .external_lex_state = 6}, + [783] = {.lex_state = 15, .external_lex_state = 6}, + [784] = {.lex_state = 15, .external_lex_state = 6}, + [785] = {.lex_state = 15, .external_lex_state = 6}, + [786] = {.lex_state = 15, .external_lex_state = 6}, + [787] = {.lex_state = 15, .external_lex_state = 6}, + [788] = {.lex_state = 15, .external_lex_state = 6}, + [789] = {.lex_state = 15}, + [790] = {.lex_state = 15, .external_lex_state = 6}, + [791] = {.lex_state = 15, .external_lex_state = 6}, + [792] = {.lex_state = 15, .external_lex_state = 6}, + [793] = {.lex_state = 15, .external_lex_state = 6}, + [794] = {.lex_state = 15, .external_lex_state = 6}, + [795] = {.lex_state = 15, .external_lex_state = 6}, + [796] = {.lex_state = 15, .external_lex_state = 6}, + [797] = {.lex_state = 15, .external_lex_state = 6}, + [798] = {.lex_state = 14}, + [799] = {.lex_state = 15, .external_lex_state = 6}, + [800] = {.lex_state = 15, .external_lex_state = 6}, + [801] = {.lex_state = 14}, + [802] = {.lex_state = 15, .external_lex_state = 6}, + [803] = {.lex_state = 15, .external_lex_state = 6}, + [804] = {.lex_state = 15, .external_lex_state = 6}, + [805] = {.lex_state = 15, .external_lex_state = 6}, + [806] = {.lex_state = 15}, + [807] = {.lex_state = 15, .external_lex_state = 6}, + [808] = {.lex_state = 15, .external_lex_state = 6}, + [809] = {.lex_state = 15}, + [810] = {.lex_state = 15}, + [811] = {.lex_state = 15}, + [812] = {.lex_state = 14}, + [813] = {.lex_state = 15}, + [814] = {.lex_state = 15}, + [815] = {.lex_state = 15}, + [816] = {.lex_state = 15}, + [817] = {.lex_state = 15}, + [818] = {.lex_state = 15}, + [819] = {.lex_state = 15}, + [820] = {.lex_state = 15}, + [821] = {.lex_state = 15}, + [822] = {.lex_state = 15}, + [823] = {.lex_state = 15}, + [824] = {.lex_state = 15}, + [825] = {.lex_state = 15}, + [826] = {.lex_state = 15}, + [827] = {.lex_state = 15}, + [828] = {.lex_state = 15}, + [829] = {.lex_state = 15}, + [830] = {.lex_state = 15}, + [831] = {.lex_state = 15}, + [832] = {.lex_state = 15}, + [833] = {.lex_state = 15}, + [834] = {.lex_state = 15}, + [835] = {.lex_state = 15}, + [836] = {.lex_state = 15}, + [837] = {.lex_state = 14}, + [838] = {.lex_state = 15}, + [839] = {.lex_state = 15}, + [840] = {.lex_state = 15}, + [841] = {.lex_state = 15}, + [842] = {.lex_state = 15}, + [843] = {.lex_state = 15}, + [844] = {.lex_state = 15}, + [845] = {.lex_state = 15}, + [846] = {.lex_state = 15}, + [847] = {.lex_state = 15}, + [848] = {.lex_state = 15}, + [849] = {.lex_state = 62, .external_lex_state = 2}, + [850] = {.lex_state = 16, .external_lex_state = 2}, + [851] = {.lex_state = 16, .external_lex_state = 2}, + [852] = {.lex_state = 62, .external_lex_state = 2}, + [853] = {.lex_state = 62, .external_lex_state = 2}, + [854] = {.lex_state = 62, .external_lex_state = 2}, + [855] = {.lex_state = 62, .external_lex_state = 2}, + [856] = {.lex_state = 62, .external_lex_state = 2}, + [857] = {.lex_state = 62, .external_lex_state = 2}, + [858] = {.lex_state = 62, .external_lex_state = 2}, + [859] = {.lex_state = 62, .external_lex_state = 2}, + [860] = {.lex_state = 62, .external_lex_state = 2}, + [861] = {.lex_state = 62, .external_lex_state = 2}, + [862] = {.lex_state = 62, .external_lex_state = 2}, + [863] = {.lex_state = 62, .external_lex_state = 2}, + [864] = {.lex_state = 62, .external_lex_state = 2}, + [865] = {.lex_state = 62, .external_lex_state = 2}, + [866] = {.lex_state = 62, .external_lex_state = 2}, + [867] = {.lex_state = 62, .external_lex_state = 2}, + [868] = {.lex_state = 16}, + [869] = {.lex_state = 16}, + [870] = {.lex_state = 16}, + [871] = {.lex_state = 16}, + [872] = {.lex_state = 16}, + [873] = {.lex_state = 16}, + [874] = {.lex_state = 16}, + [875] = {.lex_state = 16}, + [876] = {.lex_state = 16}, + [877] = {.lex_state = 62, .external_lex_state = 6}, + [878] = {.lex_state = 62, .external_lex_state = 6}, + [879] = {.lex_state = 15}, + [880] = {.lex_state = 15}, + [881] = {.lex_state = 16}, + [882] = {.lex_state = 15}, + [883] = {.lex_state = 16}, + [884] = {.lex_state = 16}, + [885] = {.lex_state = 16}, + [886] = {.lex_state = 16}, + [887] = {.lex_state = 16}, + [888] = {.lex_state = 16}, + [889] = {.lex_state = 16}, + [890] = {.lex_state = 16}, + [891] = {.lex_state = 62, .external_lex_state = 2}, + [892] = {.lex_state = 62, .external_lex_state = 2}, + [893] = {.lex_state = 62}, + [894] = {.lex_state = 62, .external_lex_state = 2}, + [895] = {.lex_state = 62}, + [896] = {.lex_state = 16}, + [897] = {.lex_state = 16}, + [898] = {.lex_state = 16}, + [899] = {.lex_state = 62}, + [900] = {.lex_state = 16}, + [901] = {.lex_state = 16}, + [902] = {.lex_state = 62}, + [903] = {.lex_state = 62}, + [904] = {.lex_state = 16}, + [905] = {.lex_state = 62, .external_lex_state = 2}, + [906] = {.lex_state = 15}, + [907] = {.lex_state = 16}, + [908] = {.lex_state = 16}, + [909] = {.lex_state = 16}, + [910] = {.lex_state = 15}, + [911] = {.lex_state = 16}, + [912] = {.lex_state = 16}, + [913] = {.lex_state = 16, .external_lex_state = 2}, + [914] = {.lex_state = 16}, + [915] = {.lex_state = 62}, + [916] = {.lex_state = 16}, + [917] = {.lex_state = 15}, + [918] = {.lex_state = 16}, + [919] = {.lex_state = 16}, + [920] = {.lex_state = 16}, + [921] = {.lex_state = 16}, + [922] = {.lex_state = 16}, + [923] = {.lex_state = 16}, + [924] = {.lex_state = 16}, + [925] = {.lex_state = 15}, + [926] = {.lex_state = 16}, + [927] = {.lex_state = 16}, + [928] = {.lex_state = 16}, + [929] = {.lex_state = 16}, + [930] = {.lex_state = 62}, + [931] = {.lex_state = 62}, + [932] = {.lex_state = 62}, + [933] = {.lex_state = 16}, + [934] = {.lex_state = 18, .external_lex_state = 7}, + [935] = {.lex_state = 62}, + [936] = {.lex_state = 18, .external_lex_state = 7}, + [937] = {.lex_state = 18, .external_lex_state = 7}, + [938] = {.lex_state = 18, .external_lex_state = 7}, + [939] = {.lex_state = 16}, + [940] = {.lex_state = 62}, + [941] = {.lex_state = 62}, + [942] = {.lex_state = 18, .external_lex_state = 7}, + [943] = {.lex_state = 16}, + [944] = {.lex_state = 18, .external_lex_state = 7}, + [945] = {.lex_state = 62}, + [946] = {.lex_state = 62}, + [947] = {.lex_state = 16}, + [948] = {.lex_state = 16}, + [949] = {.lex_state = 18, .external_lex_state = 7}, + [950] = {.lex_state = 18, .external_lex_state = 7}, + [951] = {.lex_state = 16}, + [952] = {.lex_state = 18, .external_lex_state = 7}, + [953] = {.lex_state = 62}, + [954] = {.lex_state = 16}, + [955] = {.lex_state = 62}, + [956] = {.lex_state = 62}, + [957] = {.lex_state = 16}, + [958] = {.lex_state = 62}, + [959] = {.lex_state = 62}, + [960] = {.lex_state = 16}, + [961] = {.lex_state = 16}, + [962] = {.lex_state = 62}, + [963] = {.lex_state = 62}, + [964] = {.lex_state = 16}, + [965] = {.lex_state = 0}, + [966] = {.lex_state = 16}, + [967] = {.lex_state = 62, .external_lex_state = 6}, + [968] = {.lex_state = 16}, + [969] = {.lex_state = 16}, + [970] = {.lex_state = 16}, + [971] = {.lex_state = 16}, + [972] = {.lex_state = 16}, + [973] = {.lex_state = 16}, + [974] = {.lex_state = 62, .external_lex_state = 6}, + [975] = {.lex_state = 16}, + [976] = {.lex_state = 62, .external_lex_state = 6}, + [977] = {.lex_state = 16}, + [978] = {.lex_state = 62}, + [979] = {.lex_state = 62}, + [980] = {.lex_state = 62, .external_lex_state = 6}, + [981] = {.lex_state = 16}, + [982] = {.lex_state = 62, .external_lex_state = 6}, + [983] = {.lex_state = 0}, + [984] = {.lex_state = 16}, + [985] = {.lex_state = 16}, + [986] = {.lex_state = 16}, + [987] = {.lex_state = 16}, + [988] = {.lex_state = 16}, + [989] = {.lex_state = 16}, + [990] = {.lex_state = 16}, + [991] = {.lex_state = 0}, + [992] = {.lex_state = 62, .external_lex_state = 6}, + [993] = {.lex_state = 16}, + [994] = {.lex_state = 62}, + [995] = {.lex_state = 62}, + [996] = {.lex_state = 62}, + [997] = {.lex_state = 62, .external_lex_state = 6}, + [998] = {.lex_state = 16}, + [999] = {.lex_state = 15}, + [1000] = {.lex_state = 62, .external_lex_state = 6}, + [1001] = {.lex_state = 62, .external_lex_state = 6}, + [1002] = {.lex_state = 62}, + [1003] = {.lex_state = 0}, + [1004] = {.lex_state = 16}, + [1005] = {.lex_state = 16}, + [1006] = {.lex_state = 16}, + [1007] = {.lex_state = 62, .external_lex_state = 6}, + [1008] = {.lex_state = 16}, + [1009] = {.lex_state = 62, .external_lex_state = 6}, + [1010] = {.lex_state = 16}, + [1011] = {.lex_state = 16}, + [1012] = {.lex_state = 62}, + [1013] = {.lex_state = 62}, + [1014] = {.lex_state = 62, .external_lex_state = 6}, + [1015] = {.lex_state = 16}, + [1016] = {.lex_state = 15}, + [1017] = {.lex_state = 62}, + [1018] = {.lex_state = 62}, + [1019] = {.lex_state = 62, .external_lex_state = 6}, + [1020] = {.lex_state = 62}, + [1021] = {.lex_state = 16}, + [1022] = {.lex_state = 16}, + [1023] = {.lex_state = 16}, + [1024] = {.lex_state = 16}, + [1025] = {.lex_state = 16}, + [1026] = {.lex_state = 62, .external_lex_state = 6}, + [1027] = {.lex_state = 16}, + [1028] = {.lex_state = 16}, + [1029] = {.lex_state = 16}, + [1030] = {.lex_state = 16}, + [1031] = {.lex_state = 18, .external_lex_state = 7}, + [1032] = {.lex_state = 16}, + [1033] = {.lex_state = 62}, + [1034] = {.lex_state = 62, .external_lex_state = 6}, + [1035] = {.lex_state = 16}, + [1036] = {.lex_state = 62, .external_lex_state = 6}, + [1037] = {.lex_state = 62}, + [1038] = {.lex_state = 62}, + [1039] = {.lex_state = 62}, + [1040] = {.lex_state = 16}, + [1041] = {.lex_state = 16}, + [1042] = {.lex_state = 16}, + [1043] = {.lex_state = 62, .external_lex_state = 6}, + [1044] = {.lex_state = 62, .external_lex_state = 6}, + [1045] = {.lex_state = 62, .external_lex_state = 6}, + [1046] = {.lex_state = 62, .external_lex_state = 6}, + [1047] = {.lex_state = 16}, + [1048] = {.lex_state = 62, .external_lex_state = 6}, + [1049] = {.lex_state = 62}, + [1050] = {.lex_state = 16}, + [1051] = {.lex_state = 16}, + [1052] = {.lex_state = 62}, + [1053] = {.lex_state = 62}, + [1054] = {.lex_state = 62, .external_lex_state = 6}, + [1055] = {.lex_state = 18, .external_lex_state = 7}, + [1056] = {.lex_state = 62}, + [1057] = {.lex_state = 15, .external_lex_state = 6}, + [1058] = {.lex_state = 15}, + [1059] = {.lex_state = 16}, + [1060] = {.lex_state = 18, .external_lex_state = 7}, + [1061] = {.lex_state = 15}, + [1062] = {.lex_state = 62}, + [1063] = {.lex_state = 16}, + [1064] = {.lex_state = 16}, + [1065] = {.lex_state = 62, .external_lex_state = 6}, + [1066] = {.lex_state = 62, .external_lex_state = 6}, + [1067] = {.lex_state = 18, .external_lex_state = 7}, + [1068] = {.lex_state = 15, .external_lex_state = 6}, + [1069] = {.lex_state = 18, .external_lex_state = 7}, + [1070] = {.lex_state = 16}, + [1071] = {.lex_state = 62}, + [1072] = {.lex_state = 18, .external_lex_state = 7}, + [1073] = {.lex_state = 16}, + [1074] = {.lex_state = 18, .external_lex_state = 7}, + [1075] = {.lex_state = 16}, + [1076] = {.lex_state = 18, .external_lex_state = 7}, + [1077] = {.lex_state = 16}, + [1078] = {.lex_state = 62, .external_lex_state = 6}, + [1079] = {.lex_state = 16}, + [1080] = {.lex_state = 16}, + [1081] = {.lex_state = 16}, + [1082] = {.lex_state = 62, .external_lex_state = 6}, + [1083] = {.lex_state = 16}, + [1084] = {.lex_state = 16}, + [1085] = {.lex_state = 16}, + [1086] = {.lex_state = 16}, + [1087] = {.lex_state = 16}, + [1088] = {.lex_state = 15, .external_lex_state = 6}, + [1089] = {.lex_state = 16}, + [1090] = {.lex_state = 62}, + [1091] = {.lex_state = 62}, + [1092] = {.lex_state = 62, .external_lex_state = 6}, + [1093] = {.lex_state = 62, .external_lex_state = 6}, + [1094] = {.lex_state = 62, .external_lex_state = 6}, + [1095] = {.lex_state = 62, .external_lex_state = 6}, + [1096] = {.lex_state = 62, .external_lex_state = 6}, + [1097] = {.lex_state = 16}, + [1098] = {.lex_state = 62}, + [1099] = {.lex_state = 8}, + [1100] = {.lex_state = 0}, + [1101] = {.lex_state = 15, .external_lex_state = 6}, + [1102] = {.lex_state = 62}, + [1103] = {.lex_state = 62}, + [1104] = {.lex_state = 16}, + [1105] = {.lex_state = 62, .external_lex_state = 6}, + [1106] = {.lex_state = 16}, + [1107] = {.lex_state = 16}, + [1108] = {.lex_state = 16}, + [1109] = {.lex_state = 62, .external_lex_state = 6}, + [1110] = {.lex_state = 16}, + [1111] = {.lex_state = 0}, + [1112] = {.lex_state = 62, .external_lex_state = 6}, + [1113] = {.lex_state = 62, .external_lex_state = 6}, + [1114] = {.lex_state = 0}, + [1115] = {.lex_state = 0}, + [1116] = {.lex_state = 62}, + [1117] = {.lex_state = 8}, + [1118] = {.lex_state = 62, .external_lex_state = 6}, + [1119] = {.lex_state = 62}, + [1120] = {.lex_state = 16}, + [1121] = {.lex_state = 62, .external_lex_state = 6}, + [1122] = {.lex_state = 62, .external_lex_state = 6}, + [1123] = {.lex_state = 16}, + [1124] = {.lex_state = 62}, + [1125] = {.lex_state = 8}, + [1126] = {.lex_state = 62}, + [1127] = {.lex_state = 62}, + [1128] = {.lex_state = 0}, + [1129] = {.lex_state = 62}, + [1130] = {.lex_state = 62}, + [1131] = {.lex_state = 0}, + [1132] = {.lex_state = 0}, + [1133] = {.lex_state = 16}, + [1134] = {.lex_state = 16}, + [1135] = {.lex_state = 16}, + [1136] = {.lex_state = 16}, + [1137] = {.lex_state = 0, .external_lex_state = 6}, + [1138] = {.lex_state = 0, .external_lex_state = 6}, + [1139] = {.lex_state = 16}, + [1140] = {.lex_state = 16}, + [1141] = {.lex_state = 16}, + [1142] = {.lex_state = 62}, + [1143] = {.lex_state = 0, .external_lex_state = 6}, + [1144] = {.lex_state = 15}, + [1145] = {.lex_state = 16}, + [1146] = {.lex_state = 0}, + [1147] = {.lex_state = 62}, + [1148] = {.lex_state = 16}, + [1149] = {.lex_state = 62}, + [1150] = {.lex_state = 0, .external_lex_state = 6}, + [1151] = {.lex_state = 16}, + [1152] = {.lex_state = 62}, + [1153] = {.lex_state = 16}, + [1154] = {.lex_state = 0, .external_lex_state = 6}, + [1155] = {.lex_state = 0, .external_lex_state = 6}, + [1156] = {.lex_state = 62, .external_lex_state = 6}, + [1157] = {.lex_state = 16}, + [1158] = {.lex_state = 16}, + [1159] = {.lex_state = 16}, + [1160] = {.lex_state = 0, .external_lex_state = 6}, + [1161] = {.lex_state = 62}, + [1162] = {.lex_state = 0, .external_lex_state = 6}, + [1163] = {.lex_state = 0, .external_lex_state = 6}, + [1164] = {.lex_state = 0, .external_lex_state = 6}, + [1165] = {.lex_state = 15}, + [1166] = {.lex_state = 0}, + [1167] = {.lex_state = 0}, + [1168] = {.lex_state = 16, .external_lex_state = 2}, + [1169] = {.lex_state = 62}, + [1170] = {.lex_state = 0}, + [1171] = {.lex_state = 0, .external_lex_state = 6}, + [1172] = {.lex_state = 0, .external_lex_state = 6}, + [1173] = {.lex_state = 16}, + [1174] = {.lex_state = 0, .external_lex_state = 6}, + [1175] = {.lex_state = 0}, + [1176] = {.lex_state = 0}, + [1177] = {.lex_state = 16}, + [1178] = {.lex_state = 16}, + [1179] = {.lex_state = 62}, + [1180] = {.lex_state = 62}, + [1181] = {.lex_state = 16}, + [1182] = {.lex_state = 62}, + [1183] = {.lex_state = 62, .external_lex_state = 6}, + [1184] = {.lex_state = 62}, + [1185] = {.lex_state = 62}, + [1186] = {.lex_state = 62}, + [1187] = {.lex_state = 62, .external_lex_state = 6}, + [1188] = {.lex_state = 62}, + [1189] = {.lex_state = 0, .external_lex_state = 6}, + [1190] = {.lex_state = 16}, + [1191] = {.lex_state = 0, .external_lex_state = 6}, + [1192] = {.lex_state = 0, .external_lex_state = 6}, + [1193] = {.lex_state = 62}, + [1194] = {.lex_state = 0, .external_lex_state = 6}, + [1195] = {.lex_state = 62}, + [1196] = {.lex_state = 0}, + [1197] = {.lex_state = 62}, + [1198] = {.lex_state = 0, .external_lex_state = 6}, + [1199] = {.lex_state = 62}, + [1200] = {.lex_state = 0, .external_lex_state = 6}, + [1201] = {.lex_state = 16}, + [1202] = {.lex_state = 0}, + [1203] = {.lex_state = 0}, + [1204] = {.lex_state = 16}, + [1205] = {.lex_state = 0}, + [1206] = {.lex_state = 0}, + [1207] = {.lex_state = 16}, + [1208] = {.lex_state = 0}, + [1209] = {.lex_state = 0, .external_lex_state = 6}, + [1210] = {.lex_state = 16}, + [1211] = {.lex_state = 0}, + [1212] = {.lex_state = 0}, + [1213] = {.lex_state = 0}, + [1214] = {.lex_state = 0, .external_lex_state = 6}, + [1215] = {.lex_state = 62}, + [1216] = {.lex_state = 0}, + [1217] = {.lex_state = 0}, + [1218] = {.lex_state = 0}, + [1219] = {.lex_state = 0}, + [1220] = {.lex_state = 0}, + [1221] = {.lex_state = 16}, + [1222] = {.lex_state = 8}, + [1223] = {.lex_state = 0, .external_lex_state = 6}, + [1224] = {.lex_state = 16}, + [1225] = {.lex_state = 0}, + [1226] = {.lex_state = 0, .external_lex_state = 6}, + [1227] = {.lex_state = 0}, + [1228] = {.lex_state = 0}, + [1229] = {.lex_state = 0}, + [1230] = {.lex_state = 0}, + [1231] = {.lex_state = 0, .external_lex_state = 6}, + [1232] = {.lex_state = 0}, + [1233] = {.lex_state = 0}, + [1234] = {.lex_state = 0}, + [1235] = {.lex_state = 0}, + [1236] = {.lex_state = 62}, + [1237] = {.lex_state = 0, .external_lex_state = 6}, + [1238] = {.lex_state = 0, .external_lex_state = 6}, + [1239] = {.lex_state = 0}, + [1240] = {.lex_state = 0}, + [1241] = {.lex_state = 0, .external_lex_state = 6}, + [1242] = {.lex_state = 0}, + [1243] = {.lex_state = 0}, + [1244] = {.lex_state = 0, .external_lex_state = 6}, + [1245] = {.lex_state = 62}, + [1246] = {.lex_state = 0, .external_lex_state = 6}, + [1247] = {.lex_state = 0}, + [1248] = {.lex_state = 0, .external_lex_state = 6}, + [1249] = {.lex_state = 0}, + [1250] = {.lex_state = 16}, + [1251] = {.lex_state = 0}, + [1252] = {.lex_state = 0}, + [1253] = {.lex_state = 8}, + [1254] = {.lex_state = 0, .external_lex_state = 6}, + [1255] = {.lex_state = 0}, + [1256] = {.lex_state = 0}, + [1257] = {.lex_state = 0}, + [1258] = {.lex_state = 0}, + [1259] = {.lex_state = 62}, + [1260] = {.lex_state = 16}, + [1261] = {.lex_state = 0, .external_lex_state = 6}, + [1262] = {.lex_state = 15}, + [1263] = {.lex_state = 0, .external_lex_state = 6}, + [1264] = {.lex_state = 0}, + [1265] = {.lex_state = 0}, + [1266] = {.lex_state = 16}, + [1267] = {.lex_state = 16}, + [1268] = {.lex_state = 0}, + [1269] = {.lex_state = 8}, + [1270] = {.lex_state = 16}, + [1271] = {.lex_state = 0}, + [1272] = {.lex_state = 0}, + [1273] = {.lex_state = 0}, + [1274] = {.lex_state = 0}, + [1275] = {.lex_state = 0}, + [1276] = {.lex_state = 62}, + [1277] = {.lex_state = 0}, + [1278] = {.lex_state = 16}, + [1279] = {.lex_state = 0}, + [1280] = {.lex_state = 0}, + [1281] = {.lex_state = 16}, + [1282] = {.lex_state = 0}, + [1283] = {.lex_state = 0}, + [1284] = {.lex_state = 16}, + [1285] = {.lex_state = 0}, + [1286] = {.lex_state = 16}, + [1287] = {.lex_state = 16}, + [1288] = {.lex_state = 62, .external_lex_state = 6}, + [1289] = {.lex_state = 0}, + [1290] = {.lex_state = 0}, + [1291] = {.lex_state = 62, .external_lex_state = 6}, + [1292] = {.lex_state = 0}, + [1293] = {.lex_state = 62}, + [1294] = {.lex_state = 0}, + [1295] = {.lex_state = 16}, + [1296] = {.lex_state = 0}, + [1297] = {.lex_state = 0}, + [1298] = {.lex_state = 0}, + [1299] = {.lex_state = 0}, + [1300] = {.lex_state = 0}, + [1301] = {.lex_state = 0}, + [1302] = {.lex_state = 0}, + [1303] = {.lex_state = 0}, + [1304] = {.lex_state = 0}, + [1305] = {.lex_state = 62}, + [1306] = {.lex_state = 62}, + [1307] = {.lex_state = 8}, + [1308] = {.lex_state = 16}, + [1309] = {.lex_state = 0, .external_lex_state = 6}, + [1310] = {.lex_state = 0}, + [1311] = {.lex_state = 0}, + [1312] = {.lex_state = 62}, + [1313] = {.lex_state = 0}, + [1314] = {.lex_state = 62}, + [1315] = {.lex_state = 16}, + [1316] = {.lex_state = 0}, + [1317] = {.lex_state = 62}, + [1318] = {.lex_state = 62, .external_lex_state = 6}, + [1319] = {.lex_state = 0, .external_lex_state = 6}, + [1320] = {.lex_state = 16}, + [1321] = {.lex_state = 0}, + [1322] = {.lex_state = 16}, + [1323] = {.lex_state = 0}, + [1324] = {.lex_state = 0}, + [1325] = {.lex_state = 0}, + [1326] = {.lex_state = 0}, + [1327] = {.lex_state = 0}, + [1328] = {.lex_state = 0}, + [1329] = {.lex_state = 62}, + [1330] = {.lex_state = 0}, + [1331] = {.lex_state = 0}, + [1332] = {.lex_state = 8}, + [1333] = {.lex_state = 16}, + [1334] = {.lex_state = 16}, + [1335] = {.lex_state = 62, .external_lex_state = 6}, + [1336] = {.lex_state = 0}, + [1337] = {.lex_state = 0}, + [1338] = {.lex_state = 62}, + [1339] = {.lex_state = 16}, + [1340] = {.lex_state = 16}, + [1341] = {.lex_state = 0}, + [1342] = {.lex_state = 0, .external_lex_state = 6}, + [1343] = {.lex_state = 0}, + [1344] = {.lex_state = 17}, + [1345] = {.lex_state = 0, .external_lex_state = 6}, + [1346] = {.lex_state = 0, .external_lex_state = 6}, + [1347] = {.lex_state = 16}, + [1348] = {.lex_state = 0, .external_lex_state = 6}, + [1349] = {.lex_state = 0, .external_lex_state = 6}, + [1350] = {.lex_state = 0, .external_lex_state = 6}, + [1351] = {.lex_state = 0, .external_lex_state = 6}, + [1352] = {.lex_state = 0}, + [1353] = {.lex_state = 62}, + [1354] = {.lex_state = 0}, + [1355] = {.lex_state = 0}, + [1356] = {.lex_state = 0}, + [1357] = {.lex_state = 62}, + [1358] = {.lex_state = 0}, + [1359] = {.lex_state = 0}, + [1360] = {.lex_state = 0}, + [1361] = {.lex_state = 0, .external_lex_state = 6}, + [1362] = {.lex_state = 0}, + [1363] = {.lex_state = 17}, + [1364] = {.lex_state = 0}, + [1365] = {.lex_state = 15}, + [1366] = {.lex_state = 0}, + [1367] = {.lex_state = 0}, + [1368] = {.lex_state = 0}, + [1369] = {.lex_state = 0, .external_lex_state = 6}, + [1370] = {.lex_state = 0}, + [1371] = {.lex_state = 17}, + [1372] = {.lex_state = 17}, + [1373] = {.lex_state = 0}, + [1374] = {.lex_state = 17}, + [1375] = {.lex_state = 17}, + [1376] = {.lex_state = 17}, + [1377] = {.lex_state = 17}, + [1378] = {.lex_state = 17}, + [1379] = {.lex_state = 0}, + [1380] = {.lex_state = 17}, + [1381] = {.lex_state = 0}, + [1382] = {.lex_state = 0}, + [1383] = {.lex_state = 0, .external_lex_state = 6}, + [1384] = {.lex_state = 0}, + [1385] = {.lex_state = 0, .external_lex_state = 6}, + [1386] = {.lex_state = 0, .external_lex_state = 6}, + [1387] = {.lex_state = 0}, + [1388] = {.lex_state = 0}, + [1389] = {.lex_state = 0, .external_lex_state = 6}, + [1390] = {.lex_state = 0}, + [1391] = {.lex_state = 0, .external_lex_state = 6}, + [1392] = {.lex_state = 0}, + [1393] = {.lex_state = 0, .external_lex_state = 6}, + [1394] = {.lex_state = 0, .external_lex_state = 6}, + [1395] = {.lex_state = 0, .external_lex_state = 6}, + [1396] = {.lex_state = 0}, + [1397] = {.lex_state = 0}, + [1398] = {.lex_state = 0}, + [1399] = {.lex_state = 0}, + [1400] = {.lex_state = 0, .external_lex_state = 6}, + [1401] = {.lex_state = 0}, + [1402] = {.lex_state = 0}, + [1403] = {.lex_state = 0}, + [1404] = {.lex_state = 0}, + [1405] = {.lex_state = 0}, + [1406] = {.lex_state = 0}, + [1407] = {.lex_state = 0}, + [1408] = {.lex_state = 62}, + [1409] = {.lex_state = 0}, + [1410] = {.lex_state = 0}, + [1411] = {.lex_state = 0}, + [1412] = {.lex_state = 0}, + [1413] = {.lex_state = 16}, + [1414] = {.lex_state = 0}, + [1415] = {.lex_state = 0}, + [1416] = {.lex_state = 62}, + [1417] = {.lex_state = 0}, + [1418] = {.lex_state = 0}, + [1419] = {.lex_state = 62}, + [1420] = {.lex_state = 0}, + [1421] = {.lex_state = 62}, + [1422] = {.lex_state = 16}, + [1423] = {.lex_state = 16}, + [1424] = {.lex_state = 0}, + [1425] = {.lex_state = 0}, + [1426] = {.lex_state = 0}, + [1427] = {.lex_state = 16}, + [1428] = {.lex_state = 16}, + [1429] = {.lex_state = 0}, + [1430] = {.lex_state = 62}, + [1431] = {.lex_state = 0}, + [1432] = {.lex_state = 0}, + [1433] = {.lex_state = 0}, + [1434] = {.lex_state = 0}, + [1435] = {.lex_state = 16}, + [1436] = {.lex_state = 62}, + [1437] = {.lex_state = 0}, + [1438] = {.lex_state = 0}, + [1439] = {.lex_state = 0}, + [1440] = {.lex_state = 62}, + [1441] = {.lex_state = 62}, + [1442] = {.lex_state = 0}, + [1443] = {.lex_state = 62}, + [1444] = {.lex_state = 62}, + [1445] = {.lex_state = 62}, + [1446] = {.lex_state = 62}, + [1447] = {.lex_state = 0}, + [1448] = {.lex_state = 62}, + [1449] = {.lex_state = 62}, + [1450] = {.lex_state = 62}, + [1451] = {.lex_state = 16}, + [1452] = {.lex_state = 16}, + [1453] = {.lex_state = 16}, + [1454] = {.lex_state = 62}, + [1455] = {.lex_state = 0}, + [1456] = {.lex_state = 62}, + [1457] = {.lex_state = 62}, + [1458] = {.lex_state = 16}, + [1459] = {.lex_state = 16}, + [1460] = {.lex_state = 0}, + [1461] = {.lex_state = 0}, + [1462] = {.lex_state = 0}, + [1463] = {.lex_state = 16}, + [1464] = {.lex_state = 0}, + [1465] = {.lex_state = 16}, + [1466] = {.lex_state = 62}, + [1467] = {.lex_state = 0}, + [1468] = {.lex_state = 16}, + [1469] = {.lex_state = 0}, + [1470] = {.lex_state = 16}, + [1471] = {.lex_state = 16}, + [1472] = {.lex_state = 16}, + [1473] = {.lex_state = 0}, + [1474] = {.lex_state = 16}, + [1475] = {.lex_state = 0}, + [1476] = {.lex_state = 16}, + [1477] = {.lex_state = 62}, + [1478] = {.lex_state = 16}, + [1479] = {.lex_state = 0}, + [1480] = {.lex_state = 16}, + [1481] = {.lex_state = 16}, + [1482] = {.lex_state = 16}, + [1483] = {.lex_state = 16}, + [1484] = {.lex_state = 0}, + [1485] = {.lex_state = 16}, + [1486] = {.lex_state = 16}, + [1487] = {.lex_state = 16}, + [1488] = {.lex_state = 62}, + [1489] = {.lex_state = 16}, + [1490] = {.lex_state = 62}, + [1491] = {.lex_state = 16}, + [1492] = {.lex_state = 0}, + [1493] = {.lex_state = 16}, + [1494] = {.lex_state = 62}, + [1495] = {.lex_state = 16}, + [1496] = {.lex_state = 0}, + [1497] = {.lex_state = 0}, + [1498] = {.lex_state = 62}, + [1499] = {.lex_state = 16}, + [1500] = {.lex_state = 62}, + [1501] = {.lex_state = 16}, + [1502] = {.lex_state = 0}, + [1503] = {.lex_state = 0}, + [1504] = {.lex_state = 0}, + [1505] = {.lex_state = 16}, + [1506] = {.lex_state = 16}, + [1507] = {.lex_state = 16}, + [1508] = {.lex_state = 62}, + [1509] = {.lex_state = 62}, + [1510] = {.lex_state = 62}, + [1511] = {.lex_state = 62}, + [1512] = {.lex_state = 16}, + [1513] = {.lex_state = 0}, + [1514] = {.lex_state = 62}, + [1515] = {.lex_state = 0}, + [1516] = {.lex_state = 62}, + [1517] = {.lex_state = 62}, + [1518] = {.lex_state = 16}, + [1519] = {.lex_state = 62}, + [1520] = {.lex_state = 62}, + [1521] = {.lex_state = 16}, + [1522] = {.lex_state = 62}, + [1523] = {.lex_state = 0}, + [1524] = {.lex_state = 16}, +}; + +enum { + ts_external_token__newline = 0, + ts_external_token__indent = 1, + ts_external_token__dedent = 2, + ts_external_token__string_start = 3, + ts_external_token__string_content = 4, + ts_external_token__string_end = 5, +}; + +static const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = { + [ts_external_token__newline] = sym__newline, + [ts_external_token__indent] = sym__indent, + [ts_external_token__dedent] = sym__dedent, + [ts_external_token__string_start] = sym__string_start, + [ts_external_token__string_content] = sym__string_content, + [ts_external_token__string_end] = sym__string_end, +}; + +static const bool ts_external_scanner_states[8][EXTERNAL_TOKEN_COUNT] = { + [1] = { + [ts_external_token__newline] = true, + [ts_external_token__indent] = true, + [ts_external_token__dedent] = true, + [ts_external_token__string_start] = true, + [ts_external_token__string_content] = true, + [ts_external_token__string_end] = true, + }, + [2] = { + [ts_external_token__string_start] = true, + }, + [3] = { + [ts_external_token__dedent] = true, + [ts_external_token__string_start] = true, + }, + [4] = { + [ts_external_token__newline] = true, + [ts_external_token__string_start] = true, + }, + [5] = { + [ts_external_token__newline] = true, + [ts_external_token__indent] = true, + [ts_external_token__string_start] = true, + }, + [6] = { + [ts_external_token__newline] = true, + }, + [7] = { + [ts_external_token__string_content] = true, + [ts_external_token__string_end] = true, + }, +}; + +static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { + [0] = { + [ts_builtin_sym_end] = ACTIONS(1), + [sym_identifier] = ACTIONS(1), + [anon_sym_import] = ACTIONS(1), + [anon_sym_DOT] = ACTIONS(1), + [anon_sym_from] = ACTIONS(1), + [anon_sym___future__] = ACTIONS(1), + [anon_sym_LPAREN] = ACTIONS(1), + [anon_sym_RPAREN] = ACTIONS(1), + [anon_sym_COMMA] = ACTIONS(1), + [anon_sym_as] = ACTIONS(1), + [anon_sym_STAR] = ACTIONS(1), + [anon_sym_print] = ACTIONS(1), + [anon_sym_GT_GT] = ACTIONS(1), + [anon_sym_assert] = ACTIONS(1), + [anon_sym_COLON_EQ] = ACTIONS(1), + [anon_sym_return] = ACTIONS(1), + [anon_sym_del] = ACTIONS(1), + [anon_sym_raise] = ACTIONS(1), + [anon_sym_pass] = ACTIONS(1), + [anon_sym_break] = ACTIONS(1), + [anon_sym_continue] = ACTIONS(1), + [anon_sym_if] = ACTIONS(1), + [anon_sym_COLON] = ACTIONS(1), + [anon_sym_elif] = ACTIONS(1), + [anon_sym_else] = ACTIONS(1), + [anon_sym_async] = ACTIONS(1), + [anon_sym_for] = ACTIONS(1), + [anon_sym_in] = ACTIONS(1), + [anon_sym_while] = ACTIONS(1), + [anon_sym_try] = ACTIONS(1), + [anon_sym_except] = ACTIONS(1), + [anon_sym_except_STAR] = ACTIONS(1), + [anon_sym_finally] = ACTIONS(1), + [anon_sym_with] = ACTIONS(1), + [anon_sym_match] = ACTIONS(1), + [anon_sym_case] = ACTIONS(1), + [anon_sym_PIPE] = ACTIONS(1), + [anon_sym_DASH] = ACTIONS(1), + [anon_sym_PLUS] = ACTIONS(1), + [sym_match_wildcard_pattern] = ACTIONS(1), + [anon_sym_LBRACK] = ACTIONS(1), + [anon_sym_RBRACK] = ACTIONS(1), + [anon_sym_LBRACE] = ACTIONS(1), + [anon_sym_RBRACE] = ACTIONS(1), + [anon_sym_STAR_STAR] = ACTIONS(1), + [anon_sym_EQ] = ACTIONS(1), + [anon_sym_def] = ACTIONS(1), + [anon_sym_DASH_GT] = ACTIONS(1), + [anon_sym_global] = ACTIONS(1), + [anon_sym_nonlocal] = ACTIONS(1), + [anon_sym_exec] = ACTIONS(1), + [anon_sym_type] = ACTIONS(1), + [anon_sym_class] = ACTIONS(1), + [anon_sym_AT] = ACTIONS(1), + [anon_sym_not] = ACTIONS(1), + [anon_sym_and] = ACTIONS(1), + [anon_sym_or] = ACTIONS(1), + [anon_sym_SLASH] = ACTIONS(1), + [anon_sym_PERCENT] = ACTIONS(1), + [anon_sym_SLASH_SLASH] = ACTIONS(1), + [anon_sym_AMP] = ACTIONS(1), + [anon_sym_CARET] = ACTIONS(1), + [anon_sym_LT_LT] = ACTIONS(1), + [anon_sym_TILDE] = ACTIONS(1), + [anon_sym_LT] = ACTIONS(1), + [anon_sym_LT_EQ] = ACTIONS(1), + [anon_sym_EQ_EQ] = ACTIONS(1), + [anon_sym_BANG_EQ] = ACTIONS(1), + [anon_sym_GT_EQ] = ACTIONS(1), + [anon_sym_GT] = ACTIONS(1), + [anon_sym_LT_GT] = ACTIONS(1), + [anon_sym_is] = ACTIONS(1), + [anon_sym_lambda] = ACTIONS(1), + [anon_sym_PLUS_EQ] = ACTIONS(1), + [anon_sym_DASH_EQ] = ACTIONS(1), + [anon_sym_STAR_EQ] = ACTIONS(1), + [anon_sym_SLASH_EQ] = ACTIONS(1), + [anon_sym_AT_EQ] = ACTIONS(1), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(1), + [anon_sym_PERCENT_EQ] = ACTIONS(1), + [anon_sym_STAR_STAR_EQ] = ACTIONS(1), + [anon_sym_GT_GT_EQ] = ACTIONS(1), + [anon_sym_LT_LT_EQ] = ACTIONS(1), + [anon_sym_AMP_EQ] = ACTIONS(1), + [anon_sym_CARET_EQ] = ACTIONS(1), + [anon_sym_PIPE_EQ] = ACTIONS(1), + [anon_sym_yield] = ACTIONS(1), + [sym_ellipsis] = ACTIONS(1), + [anon_sym_LBRACE2] = ACTIONS(1), + [sym_type_conversion] = ACTIONS(1), + [sym_integer] = ACTIONS(1), + [sym_float] = ACTIONS(1), + [anon_sym_await] = ACTIONS(1), + [sym_true] = ACTIONS(1), + [sym_false] = ACTIONS(1), + [sym_none] = ACTIONS(1), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(1), + [sym__newline] = ACTIONS(1), + [sym__indent] = ACTIONS(1), + [sym__dedent] = ACTIONS(1), + [sym__string_start] = ACTIONS(1), + [sym__string_content] = ACTIONS(1), + [sym__string_end] = ACTIONS(1), + }, + [1] = { + [sym_module] = STATE(1502), + [sym__statement] = STATE(64), + [sym__simple_statements] = STATE(64), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_if_statement] = STATE(64), + [sym_for_statement] = STATE(64), + [sym_while_statement] = STATE(64), + [sym_try_statement] = STATE(64), + [sym_with_statement] = STATE(64), + [sym_match_statement] = STATE(64), + [sym_function_definition] = STATE(64), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_class_definition] = STATE(64), + [sym_decorated_definition] = STATE(64), + [sym_decorator] = STATE(1002), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(64), + [aux_sym_decorated_definition_repeat1] = STATE(1002), + [ts_builtin_sym_end] = ACTIONS(5), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(33), + [anon_sym_async] = ACTIONS(35), + [anon_sym_for] = ACTIONS(37), + [anon_sym_while] = ACTIONS(39), + [anon_sym_try] = ACTIONS(41), + [anon_sym_with] = ACTIONS(43), + [anon_sym_match] = ACTIONS(45), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(55), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(65), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(81), + }, + [2] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(996), + [sym_block] = STATE(357), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(101), + [sym__string_start] = ACTIONS(81), + }, + [3] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(587), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [4] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(540), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [5] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(534), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [6] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(996), + [sym_block] = STATE(373), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(101), + [sym__string_start] = ACTIONS(81), + }, + [7] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(403), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [8] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(509), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [9] = { + [sym__statement] = STATE(62), + [sym__simple_statements] = STATE(62), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(62), + [sym_for_statement] = STATE(62), + [sym_while_statement] = STATE(62), + [sym_try_statement] = STATE(62), + [sym_with_statement] = STATE(62), + [sym_match_statement] = STATE(62), + [sym_function_definition] = STATE(62), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(62), + [sym_decorated_definition] = STATE(62), + [sym_decorator] = STATE(996), + [sym_block] = STATE(372), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(62), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(105), + [sym__string_start] = ACTIONS(81), + }, + [10] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(546), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [11] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(279), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [12] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(491), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [13] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(495), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [14] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(506), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [15] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(505), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [16] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(408), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [17] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(536), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [18] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(488), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [19] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(556), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [20] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(528), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [21] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(414), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [22] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(996), + [sym_block] = STATE(366), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(101), + [sym__string_start] = ACTIONS(81), + }, + [23] = { + [sym__statement] = STATE(62), + [sym__simple_statements] = STATE(62), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(62), + [sym_for_statement] = STATE(62), + [sym_while_statement] = STATE(62), + [sym_try_statement] = STATE(62), + [sym_with_statement] = STATE(62), + [sym_match_statement] = STATE(62), + [sym_function_definition] = STATE(62), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(62), + [sym_decorated_definition] = STATE(62), + [sym_decorator] = STATE(996), + [sym_block] = STATE(363), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(62), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(105), + [sym__string_start] = ACTIONS(81), + }, + [24] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(512), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [25] = { + [sym__statement] = STATE(60), + [sym__simple_statements] = STATE(60), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(60), + [sym_for_statement] = STATE(60), + [sym_while_statement] = STATE(60), + [sym_try_statement] = STATE(60), + [sym_with_statement] = STATE(60), + [sym_match_statement] = STATE(60), + [sym_function_definition] = STATE(60), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(60), + [sym_decorated_definition] = STATE(60), + [sym_decorator] = STATE(996), + [sym_block] = STATE(320), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(60), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(109), + [sym__string_start] = ACTIONS(81), + }, + [26] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(590), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [27] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(494), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [28] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(557), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [29] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(549), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [30] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(586), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [31] = { + [sym__statement] = STATE(60), + [sym__simple_statements] = STATE(60), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(60), + [sym_for_statement] = STATE(60), + [sym_while_statement] = STATE(60), + [sym_try_statement] = STATE(60), + [sym_with_statement] = STATE(60), + [sym_match_statement] = STATE(60), + [sym_function_definition] = STATE(60), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(60), + [sym_decorated_definition] = STATE(60), + [sym_decorator] = STATE(996), + [sym_block] = STATE(328), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(60), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(109), + [sym__string_start] = ACTIONS(81), + }, + [32] = { + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(996), + [sym_block] = STATE(329), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(111), + [sym__string_start] = ACTIONS(81), + }, + [33] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(583), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [34] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(418), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [35] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(489), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [36] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(498), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [37] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(555), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [38] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(565), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [39] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(428), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [40] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(515), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [41] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(574), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [42] = { + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(996), + [sym_block] = STATE(318), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(111), + [sym__string_start] = ACTIONS(81), + }, + [43] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(513), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [44] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(533), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [45] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(573), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [46] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(427), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [47] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(387), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [48] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(496), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [49] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(566), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [50] = { + [sym__statement] = STATE(60), + [sym__simple_statements] = STATE(60), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(60), + [sym_for_statement] = STATE(60), + [sym_while_statement] = STATE(60), + [sym_try_statement] = STATE(60), + [sym_with_statement] = STATE(60), + [sym_match_statement] = STATE(60), + [sym_function_definition] = STATE(60), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(60), + [sym_decorated_definition] = STATE(60), + [sym_decorator] = STATE(996), + [sym_block] = STATE(333), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(60), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(109), + [sym__string_start] = ACTIONS(81), + }, + [51] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(407), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [52] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(579), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [53] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(581), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [54] = { + [sym__statement] = STATE(69), + [sym__simple_statements] = STATE(69), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(69), + [sym_for_statement] = STATE(69), + [sym_while_statement] = STATE(69), + [sym_try_statement] = STATE(69), + [sym_with_statement] = STATE(69), + [sym_match_statement] = STATE(69), + [sym_function_definition] = STATE(69), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(69), + [sym_decorated_definition] = STATE(69), + [sym_decorator] = STATE(996), + [sym_block] = STATE(1003), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(69), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(113), + [sym__string_start] = ACTIONS(81), + }, + [55] = { + [sym__statement] = STATE(69), + [sym__simple_statements] = STATE(69), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(69), + [sym_for_statement] = STATE(69), + [sym_while_statement] = STATE(69), + [sym_try_statement] = STATE(69), + [sym_with_statement] = STATE(69), + [sym_match_statement] = STATE(69), + [sym_function_definition] = STATE(69), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(69), + [sym_decorated_definition] = STATE(69), + [sym_decorator] = STATE(996), + [sym_block] = STATE(983), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(69), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(113), + [sym__string_start] = ACTIONS(81), + }, + [56] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(265), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [57] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(561), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [58] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(517), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [59] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(554), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [60] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(115), + [sym__string_start] = ACTIONS(81), + }, + [61] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(117), + [sym__string_start] = ACTIONS(81), + }, + [62] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(119), + [sym__string_start] = ACTIONS(81), + }, + [63] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(121), + [anon_sym_import] = ACTIONS(124), + [anon_sym_from] = ACTIONS(127), + [anon_sym_LPAREN] = ACTIONS(130), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_print] = ACTIONS(136), + [anon_sym_assert] = ACTIONS(139), + [anon_sym_return] = ACTIONS(142), + [anon_sym_del] = ACTIONS(145), + [anon_sym_raise] = ACTIONS(148), + [anon_sym_pass] = ACTIONS(151), + [anon_sym_break] = ACTIONS(154), + [anon_sym_continue] = ACTIONS(157), + [anon_sym_if] = ACTIONS(160), + [anon_sym_async] = ACTIONS(163), + [anon_sym_for] = ACTIONS(166), + [anon_sym_while] = ACTIONS(169), + [anon_sym_try] = ACTIONS(172), + [anon_sym_with] = ACTIONS(175), + [anon_sym_match] = ACTIONS(178), + [anon_sym_DASH] = ACTIONS(181), + [anon_sym_PLUS] = ACTIONS(181), + [anon_sym_LBRACK] = ACTIONS(184), + [anon_sym_LBRACE] = ACTIONS(187), + [anon_sym_STAR_STAR] = ACTIONS(190), + [anon_sym_def] = ACTIONS(193), + [anon_sym_global] = ACTIONS(196), + [anon_sym_nonlocal] = ACTIONS(199), + [anon_sym_exec] = ACTIONS(202), + [anon_sym_type] = ACTIONS(205), + [anon_sym_class] = ACTIONS(208), + [anon_sym_AT] = ACTIONS(211), + [anon_sym_not] = ACTIONS(214), + [anon_sym_TILDE] = ACTIONS(181), + [anon_sym_lambda] = ACTIONS(217), + [anon_sym_yield] = ACTIONS(220), + [sym_ellipsis] = ACTIONS(223), + [sym_integer] = ACTIONS(226), + [sym_float] = ACTIONS(223), + [anon_sym_await] = ACTIONS(229), + [sym_true] = ACTIONS(226), + [sym_false] = ACTIONS(226), + [sym_none] = ACTIONS(226), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(232), + [sym__string_start] = ACTIONS(234), + }, + [64] = { + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(1002), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(1002), + [ts_builtin_sym_end] = ACTIONS(237), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(33), + [anon_sym_async] = ACTIONS(35), + [anon_sym_for] = ACTIONS(37), + [anon_sym_while] = ACTIONS(39), + [anon_sym_try] = ACTIONS(41), + [anon_sym_with] = ACTIONS(43), + [anon_sym_match] = ACTIONS(45), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(55), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(65), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(81), + }, + [65] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(239), + [sym__string_start] = ACTIONS(81), + }, + [66] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(241), + [sym__string_start] = ACTIONS(81), + }, + [67] = { + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(1002), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(1002), + [ts_builtin_sym_end] = ACTIONS(232), + [sym_identifier] = ACTIONS(121), + [anon_sym_import] = ACTIONS(124), + [anon_sym_from] = ACTIONS(127), + [anon_sym_LPAREN] = ACTIONS(130), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_print] = ACTIONS(136), + [anon_sym_assert] = ACTIONS(139), + [anon_sym_return] = ACTIONS(142), + [anon_sym_del] = ACTIONS(145), + [anon_sym_raise] = ACTIONS(148), + [anon_sym_pass] = ACTIONS(151), + [anon_sym_break] = ACTIONS(154), + [anon_sym_continue] = ACTIONS(157), + [anon_sym_if] = ACTIONS(243), + [anon_sym_async] = ACTIONS(246), + [anon_sym_for] = ACTIONS(249), + [anon_sym_while] = ACTIONS(252), + [anon_sym_try] = ACTIONS(255), + [anon_sym_with] = ACTIONS(258), + [anon_sym_match] = ACTIONS(261), + [anon_sym_DASH] = ACTIONS(181), + [anon_sym_PLUS] = ACTIONS(181), + [anon_sym_LBRACK] = ACTIONS(184), + [anon_sym_LBRACE] = ACTIONS(187), + [anon_sym_STAR_STAR] = ACTIONS(190), + [anon_sym_def] = ACTIONS(264), + [anon_sym_global] = ACTIONS(196), + [anon_sym_nonlocal] = ACTIONS(199), + [anon_sym_exec] = ACTIONS(202), + [anon_sym_type] = ACTIONS(205), + [anon_sym_class] = ACTIONS(267), + [anon_sym_AT] = ACTIONS(211), + [anon_sym_not] = ACTIONS(214), + [anon_sym_TILDE] = ACTIONS(181), + [anon_sym_lambda] = ACTIONS(217), + [anon_sym_yield] = ACTIONS(220), + [sym_ellipsis] = ACTIONS(223), + [sym_integer] = ACTIONS(226), + [sym_float] = ACTIONS(223), + [anon_sym_await] = ACTIONS(229), + [sym_true] = ACTIONS(226), + [sym_false] = ACTIONS(226), + [sym_none] = ACTIONS(226), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(234), + }, + [68] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(270), + [sym__string_start] = ACTIONS(81), + }, + [69] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(272), + [sym__string_start] = ACTIONS(81), + }, + [70] = { + [sym_named_expression] = STATE(900), + [sym_list_splat] = STATE(1366), + [sym_dictionary_splat] = STATE(1366), + [sym_expression_list] = STATE(1452), + [sym_expression] = STATE(1079), + [sym_primary_expression] = STATE(630), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(274), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(278), + [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_STAR] = ACTIONS(283), + [anon_sym_print] = ACTIONS(285), + [anon_sym_GT_GT] = ACTIONS(276), + [anon_sym_COLON_EQ] = ACTIONS(287), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(289), + [anon_sym_async] = ACTIONS(285), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(285), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(291), + [anon_sym_PLUS] = ACTIONS(291), + [anon_sym_LBRACK] = ACTIONS(293), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(297), + [anon_sym_EQ] = ACTIONS(289), + [anon_sym_exec] = ACTIONS(285), + [anon_sym_type] = ACTIONS(285), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(299), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(305), + [anon_sym_PLUS_EQ] = ACTIONS(307), + [anon_sym_DASH_EQ] = ACTIONS(307), + [anon_sym_STAR_EQ] = ACTIONS(307), + [anon_sym_SLASH_EQ] = ACTIONS(307), + [anon_sym_AT_EQ] = ACTIONS(307), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(307), + [anon_sym_PERCENT_EQ] = ACTIONS(307), + [anon_sym_STAR_STAR_EQ] = ACTIONS(307), + [anon_sym_GT_GT_EQ] = ACTIONS(307), + [anon_sym_LT_LT_EQ] = ACTIONS(307), + [anon_sym_AMP_EQ] = ACTIONS(307), + [anon_sym_CARET_EQ] = ACTIONS(307), + [anon_sym_PIPE_EQ] = ACTIONS(307), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(313), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(303), + [sym__newline] = ACTIONS(303), + [sym__string_start] = ACTIONS(315), + }, + [71] = { + [sym_named_expression] = STATE(900), + [sym_list_splat] = STATE(1366), + [sym_dictionary_splat] = STATE(1366), + [sym_expression_list] = STATE(1493), + [sym_expression] = STATE(1080), + [sym_primary_expression] = STATE(630), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(274), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(278), + [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_STAR] = ACTIONS(283), + [anon_sym_print] = ACTIONS(285), + [anon_sym_GT_GT] = ACTIONS(276), + [anon_sym_COLON_EQ] = ACTIONS(287), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(289), + [anon_sym_async] = ACTIONS(285), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(285), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(291), + [anon_sym_PLUS] = ACTIONS(291), + [anon_sym_LBRACK] = ACTIONS(293), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(297), + [anon_sym_EQ] = ACTIONS(289), + [anon_sym_exec] = ACTIONS(285), + [anon_sym_type] = ACTIONS(285), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(299), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(305), + [anon_sym_PLUS_EQ] = ACTIONS(307), + [anon_sym_DASH_EQ] = ACTIONS(307), + [anon_sym_STAR_EQ] = ACTIONS(307), + [anon_sym_SLASH_EQ] = ACTIONS(307), + [anon_sym_AT_EQ] = ACTIONS(307), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(307), + [anon_sym_PERCENT_EQ] = ACTIONS(307), + [anon_sym_STAR_STAR_EQ] = ACTIONS(307), + [anon_sym_GT_GT_EQ] = ACTIONS(307), + [anon_sym_LT_LT_EQ] = ACTIONS(307), + [anon_sym_AMP_EQ] = ACTIONS(307), + [anon_sym_CARET_EQ] = ACTIONS(307), + [anon_sym_PIPE_EQ] = ACTIONS(307), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(313), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(303), + [sym__newline] = ACTIONS(303), + [sym__string_start] = ACTIONS(315), + }, + [72] = { + [sym__simple_statements] = STATE(550), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(319), + [sym__indent] = ACTIONS(321), + [sym__string_start] = ACTIONS(81), + }, + [73] = { + [sym__simple_statements] = STATE(432), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(323), + [sym__indent] = ACTIONS(325), + [sym__string_start] = ACTIONS(81), + }, + [74] = { + [sym__simple_statements] = STATE(327), + [sym_import_statement] = STATE(1248), + [sym_future_import_statement] = STATE(1248), + [sym_import_from_statement] = STATE(1248), + [sym_print_statement] = STATE(1248), + [sym_assert_statement] = STATE(1248), + [sym_expression_statement] = STATE(1248), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1248), + [sym_delete_statement] = STATE(1248), + [sym_raise_statement] = STATE(1248), + [sym_pass_statement] = STATE(1248), + [sym_break_statement] = STATE(1248), + [sym_continue_statement] = STATE(1248), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1248), + [sym_nonlocal_statement] = STATE(1248), + [sym_exec_statement] = STATE(1248), + [sym_type_alias_statement] = STATE(1248), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(327), + [sym__indent] = ACTIONS(329), + [sym__string_start] = ACTIONS(81), + }, + [75] = { + [sym_chevron] = STATE(1150), + [sym_named_expression] = STATE(1009), + [sym_expression] = STATE(1043), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_attribute] = STATE(797), + [sym_subscript] = STATE(797), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(331), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(333), + [anon_sym_GT_GT] = ACTIONS(335), + [anon_sym_COLON_EQ] = ACTIONS(287), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(289), + [anon_sym_async] = ACTIONS(333), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(333), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(276), + [anon_sym_PLUS] = ACTIONS(276), + [anon_sym_LBRACK] = ACTIONS(303), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(276), + [anon_sym_EQ] = ACTIONS(289), + [anon_sym_exec] = ACTIONS(333), + [anon_sym_type] = ACTIONS(333), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(276), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_PLUS_EQ] = ACTIONS(307), + [anon_sym_DASH_EQ] = ACTIONS(307), + [anon_sym_STAR_EQ] = ACTIONS(307), + [anon_sym_SLASH_EQ] = ACTIONS(307), + [anon_sym_AT_EQ] = ACTIONS(307), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(307), + [anon_sym_PERCENT_EQ] = ACTIONS(307), + [anon_sym_STAR_STAR_EQ] = ACTIONS(307), + [anon_sym_GT_GT_EQ] = ACTIONS(307), + [anon_sym_LT_LT_EQ] = ACTIONS(307), + [anon_sym_AMP_EQ] = ACTIONS(307), + [anon_sym_CARET_EQ] = ACTIONS(307), + [anon_sym_PIPE_EQ] = ACTIONS(307), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(337), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(303), + [sym__newline] = ACTIONS(303), + [sym__string_start] = ACTIONS(81), + }, + [76] = { + [sym__simple_statements] = STATE(340), + [sym_import_statement] = STATE(1261), + [sym_future_import_statement] = STATE(1261), + [sym_import_from_statement] = STATE(1261), + [sym_print_statement] = STATE(1261), + [sym_assert_statement] = STATE(1261), + [sym_expression_statement] = STATE(1261), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1261), + [sym_delete_statement] = STATE(1261), + [sym_raise_statement] = STATE(1261), + [sym_pass_statement] = STATE(1261), + [sym_break_statement] = STATE(1261), + [sym_continue_statement] = STATE(1261), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1261), + [sym_nonlocal_statement] = STATE(1261), + [sym_exec_statement] = STATE(1261), + [sym_type_alias_statement] = STATE(1261), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(339), + [sym__indent] = ACTIONS(341), + [sym__string_start] = ACTIONS(81), + }, + [77] = { + [sym__simple_statements] = STATE(530), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(343), + [sym__indent] = ACTIONS(345), + [sym__string_start] = ACTIONS(81), + }, + [78] = { + [sym__simple_statements] = STATE(521), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(347), + [sym__indent] = ACTIONS(349), + [sym__string_start] = ACTIONS(81), + }, + [79] = { + [sym__simple_statements] = STATE(548), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(351), + [sym__indent] = ACTIONS(353), + [sym__string_start] = ACTIONS(81), + }, + [80] = { + [sym__simple_statements] = STATE(325), + [sym_import_statement] = STATE(1261), + [sym_future_import_statement] = STATE(1261), + [sym_import_from_statement] = STATE(1261), + [sym_print_statement] = STATE(1261), + [sym_assert_statement] = STATE(1261), + [sym_expression_statement] = STATE(1261), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1261), + [sym_delete_statement] = STATE(1261), + [sym_raise_statement] = STATE(1261), + [sym_pass_statement] = STATE(1261), + [sym_break_statement] = STATE(1261), + [sym_continue_statement] = STATE(1261), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1261), + [sym_nonlocal_statement] = STATE(1261), + [sym_exec_statement] = STATE(1261), + [sym_type_alias_statement] = STATE(1261), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(355), + [sym__indent] = ACTIONS(357), + [sym__string_start] = ACTIONS(81), + }, + [81] = { + [sym__simple_statements] = STATE(535), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(359), + [sym__indent] = ACTIONS(361), + [sym__string_start] = ACTIONS(81), + }, + [82] = { + [sym__simple_statements] = STATE(508), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(363), + [sym__indent] = ACTIONS(365), + [sym__string_start] = ACTIONS(81), + }, + [83] = { + [sym__simple_statements] = STATE(377), + [sym_import_statement] = STATE(1244), + [sym_future_import_statement] = STATE(1244), + [sym_import_from_statement] = STATE(1244), + [sym_print_statement] = STATE(1244), + [sym_assert_statement] = STATE(1244), + [sym_expression_statement] = STATE(1244), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1244), + [sym_delete_statement] = STATE(1244), + [sym_raise_statement] = STATE(1244), + [sym_pass_statement] = STATE(1244), + [sym_break_statement] = STATE(1244), + [sym_continue_statement] = STATE(1244), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1244), + [sym_nonlocal_statement] = STATE(1244), + [sym_exec_statement] = STATE(1244), + [sym_type_alias_statement] = STATE(1244), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(367), + [sym__indent] = ACTIONS(369), + [sym__string_start] = ACTIONS(81), + }, + [84] = { + [sym__simple_statements] = STATE(524), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(371), + [sym__indent] = ACTIONS(373), + [sym__string_start] = ACTIONS(81), + }, + [85] = { + [sym__simple_statements] = STATE(316), + [sym_import_statement] = STATE(1238), + [sym_future_import_statement] = STATE(1238), + [sym_import_from_statement] = STATE(1238), + [sym_print_statement] = STATE(1238), + [sym_assert_statement] = STATE(1238), + [sym_expression_statement] = STATE(1238), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1238), + [sym_delete_statement] = STATE(1238), + [sym_raise_statement] = STATE(1238), + [sym_pass_statement] = STATE(1238), + [sym_break_statement] = STATE(1238), + [sym_continue_statement] = STATE(1238), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1238), + [sym_nonlocal_statement] = STATE(1238), + [sym_exec_statement] = STATE(1238), + [sym_type_alias_statement] = STATE(1238), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(375), + [sym__indent] = ACTIONS(377), + [sym__string_start] = ACTIONS(81), + }, + [86] = { + [sym__simple_statements] = STATE(532), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(379), + [sym__indent] = ACTIONS(381), + [sym__string_start] = ACTIONS(81), + }, + [87] = { + [sym__simple_statements] = STATE(547), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(383), + [sym__indent] = ACTIONS(385), + [sym__string_start] = ACTIONS(81), + }, + [88] = { + [sym__simple_statements] = STATE(401), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(387), + [sym__indent] = ACTIONS(389), + [sym__string_start] = ACTIONS(81), + }, + [89] = { + [sym__simple_statements] = STATE(502), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(391), + [sym__indent] = ACTIONS(393), + [sym__string_start] = ACTIONS(81), + }, + [90] = { + [sym__simple_statements] = STATE(526), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(395), + [sym__indent] = ACTIONS(397), + [sym__string_start] = ACTIONS(81), + }, + [91] = { + [sym__simple_statements] = STATE(527), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(399), + [sym__indent] = ACTIONS(401), + [sym__string_start] = ACTIONS(81), + }, + [92] = { + [sym__simple_statements] = STATE(531), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(403), + [sym__indent] = ACTIONS(405), + [sym__string_start] = ACTIONS(81), + }, + [93] = { + [sym__simple_statements] = STATE(268), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(407), + [sym__indent] = ACTIONS(409), + [sym__string_start] = ACTIONS(81), + }, + [94] = { + [sym__simple_statements] = STATE(538), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(411), + [sym__indent] = ACTIONS(413), + [sym__string_start] = ACTIONS(81), + }, + [95] = { + [sym__simple_statements] = STATE(594), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(415), + [sym__indent] = ACTIONS(417), + [sym__string_start] = ACTIONS(81), + }, + [96] = { + [sym__simple_statements] = STATE(965), + [sym_import_statement] = STATE(1214), + [sym_future_import_statement] = STATE(1214), + [sym_import_from_statement] = STATE(1214), + [sym_print_statement] = STATE(1214), + [sym_assert_statement] = STATE(1214), + [sym_expression_statement] = STATE(1214), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1214), + [sym_delete_statement] = STATE(1214), + [sym_raise_statement] = STATE(1214), + [sym_pass_statement] = STATE(1214), + [sym_break_statement] = STATE(1214), + [sym_continue_statement] = STATE(1214), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1214), + [sym_nonlocal_statement] = STATE(1214), + [sym_exec_statement] = STATE(1214), + [sym_type_alias_statement] = STATE(1214), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(419), + [sym__indent] = ACTIONS(421), + [sym__string_start] = ACTIONS(81), + }, + [97] = { + [sym__simple_statements] = STATE(464), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(423), + [sym__indent] = ACTIONS(425), + [sym__string_start] = ACTIONS(81), + }, + [98] = { + [sym__simple_statements] = STATE(353), + [sym_import_statement] = STATE(1244), + [sym_future_import_statement] = STATE(1244), + [sym_import_from_statement] = STATE(1244), + [sym_print_statement] = STATE(1244), + [sym_assert_statement] = STATE(1244), + [sym_expression_statement] = STATE(1244), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1244), + [sym_delete_statement] = STATE(1244), + [sym_raise_statement] = STATE(1244), + [sym_pass_statement] = STATE(1244), + [sym_break_statement] = STATE(1244), + [sym_continue_statement] = STATE(1244), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1244), + [sym_nonlocal_statement] = STATE(1244), + [sym_exec_statement] = STATE(1244), + [sym_type_alias_statement] = STATE(1244), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(427), + [sym__indent] = ACTIONS(429), + [sym__string_start] = ACTIONS(81), + }, + [99] = { + [sym__simple_statements] = STATE(542), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(431), + [sym__indent] = ACTIONS(433), + [sym__string_start] = ACTIONS(81), + }, + [100] = { + [sym__simple_statements] = STATE(331), + [sym_import_statement] = STATE(1248), + [sym_future_import_statement] = STATE(1248), + [sym_import_from_statement] = STATE(1248), + [sym_print_statement] = STATE(1248), + [sym_assert_statement] = STATE(1248), + [sym_expression_statement] = STATE(1248), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1248), + [sym_delete_statement] = STATE(1248), + [sym_raise_statement] = STATE(1248), + [sym_pass_statement] = STATE(1248), + [sym_break_statement] = STATE(1248), + [sym_continue_statement] = STATE(1248), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1248), + [sym_nonlocal_statement] = STATE(1248), + [sym_exec_statement] = STATE(1248), + [sym_type_alias_statement] = STATE(1248), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(435), + [sym__indent] = ACTIONS(437), + [sym__string_start] = ACTIONS(81), + }, + [101] = { + [sym__simple_statements] = STATE(592), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(439), + [sym__indent] = ACTIONS(441), + [sym__string_start] = ACTIONS(81), + }, + [102] = { + [sym__simple_statements] = STATE(492), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(443), + [sym__indent] = ACTIONS(445), + [sym__string_start] = ACTIONS(81), + }, + [103] = { + [sym__simple_statements] = STATE(332), + [sym_import_statement] = STATE(1261), + [sym_future_import_statement] = STATE(1261), + [sym_import_from_statement] = STATE(1261), + [sym_print_statement] = STATE(1261), + [sym_assert_statement] = STATE(1261), + [sym_expression_statement] = STATE(1261), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1261), + [sym_delete_statement] = STATE(1261), + [sym_raise_statement] = STATE(1261), + [sym_pass_statement] = STATE(1261), + [sym_break_statement] = STATE(1261), + [sym_continue_statement] = STATE(1261), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1261), + [sym_nonlocal_statement] = STATE(1261), + [sym_exec_statement] = STATE(1261), + [sym_type_alias_statement] = STATE(1261), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(447), + [sym__indent] = ACTIONS(449), + [sym__string_start] = ACTIONS(81), + }, + [104] = { + [sym__simple_statements] = STATE(544), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(451), + [sym__indent] = ACTIONS(453), + [sym__string_start] = ACTIONS(81), + }, + [105] = { + [sym__simple_statements] = STATE(582), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(455), + [sym__indent] = ACTIONS(457), + [sym__string_start] = ACTIONS(81), + }, + [106] = { + [sym__simple_statements] = STATE(493), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(459), + [sym__indent] = ACTIONS(461), + [sym__string_start] = ACTIONS(81), + }, + [107] = { + [sym__simple_statements] = STATE(563), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(463), + [sym__indent] = ACTIONS(465), + [sym__string_start] = ACTIONS(81), + }, + [108] = { + [sym__simple_statements] = STATE(580), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(467), + [sym__indent] = ACTIONS(469), + [sym__string_start] = ACTIONS(81), + }, + [109] = { + [sym__simple_statements] = STATE(991), + [sym_import_statement] = STATE(1214), + [sym_future_import_statement] = STATE(1214), + [sym_import_from_statement] = STATE(1214), + [sym_print_statement] = STATE(1214), + [sym_assert_statement] = STATE(1214), + [sym_expression_statement] = STATE(1214), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1214), + [sym_delete_statement] = STATE(1214), + [sym_raise_statement] = STATE(1214), + [sym_pass_statement] = STATE(1214), + [sym_break_statement] = STATE(1214), + [sym_continue_statement] = STATE(1214), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1214), + [sym_nonlocal_statement] = STATE(1214), + [sym_exec_statement] = STATE(1214), + [sym_type_alias_statement] = STATE(1214), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(471), + [sym__indent] = ACTIONS(473), + [sym__string_start] = ACTIONS(81), + }, + [110] = { + [sym__simple_statements] = STATE(478), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(475), + [sym__indent] = ACTIONS(477), + [sym__string_start] = ACTIONS(81), + }, + [111] = { + [sym__simple_statements] = STATE(272), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(479), + [sym__indent] = ACTIONS(481), + [sym__string_start] = ACTIONS(81), + }, + [112] = { + [sym__simple_statements] = STATE(490), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(483), + [sym__indent] = ACTIONS(485), + [sym__string_start] = ACTIONS(81), + }, + [113] = { + [sym__simple_statements] = STATE(589), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(487), + [sym__indent] = ACTIONS(489), + [sym__string_start] = ACTIONS(81), + }, + [114] = { + [sym__simple_statements] = STATE(388), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(491), + [sym__indent] = ACTIONS(493), + [sym__string_start] = ACTIONS(81), + }, + [115] = { + [sym__simple_statements] = STATE(572), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(495), + [sym__indent] = ACTIONS(497), + [sym__string_start] = ACTIONS(81), + }, + [116] = { + [sym__simple_statements] = STATE(485), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(499), + [sym__indent] = ACTIONS(501), + [sym__string_start] = ACTIONS(81), + }, + [117] = { + [sym__simple_statements] = STATE(501), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(503), + [sym__indent] = ACTIONS(505), + [sym__string_start] = ACTIONS(81), + }, + [118] = { + [sym__simple_statements] = STATE(430), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(507), + [sym__indent] = ACTIONS(509), + [sym__string_start] = ACTIONS(81), + }, + [119] = { + [sym__simple_statements] = STATE(497), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(511), + [sym__indent] = ACTIONS(513), + [sym__string_start] = ACTIONS(81), + }, + [120] = { + [sym__simple_statements] = STATE(553), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(515), + [sym__indent] = ACTIONS(517), + [sym__string_start] = ACTIONS(81), + }, + [121] = { + [sym__simple_statements] = STATE(486), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(519), + [sym__indent] = ACTIONS(521), + [sym__string_start] = ACTIONS(81), + }, + [122] = { + [sym__simple_statements] = STATE(571), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(523), + [sym__indent] = ACTIONS(525), + [sym__string_start] = ACTIONS(81), + }, + [123] = { + [sym__simple_statements] = STATE(578), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(527), + [sym__indent] = ACTIONS(529), + [sym__string_start] = ACTIONS(81), + }, + [124] = { + [sym__simple_statements] = STATE(472), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(531), + [sym__indent] = ACTIONS(533), + [sym__string_start] = ACTIONS(81), + }, + [125] = { + [sym__simple_statements] = STATE(317), + [sym_import_statement] = STATE(1244), + [sym_future_import_statement] = STATE(1244), + [sym_import_from_statement] = STATE(1244), + [sym_print_statement] = STATE(1244), + [sym_assert_statement] = STATE(1244), + [sym_expression_statement] = STATE(1244), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1244), + [sym_delete_statement] = STATE(1244), + [sym_raise_statement] = STATE(1244), + [sym_pass_statement] = STATE(1244), + [sym_break_statement] = STATE(1244), + [sym_continue_statement] = STATE(1244), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1244), + [sym_nonlocal_statement] = STATE(1244), + [sym_exec_statement] = STATE(1244), + [sym_type_alias_statement] = STATE(1244), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(535), + [sym__indent] = ACTIONS(537), + [sym__string_start] = ACTIONS(81), + }, + [126] = { + [sym__simple_statements] = STATE(384), + [sym_import_statement] = STATE(1238), + [sym_future_import_statement] = STATE(1238), + [sym_import_from_statement] = STATE(1238), + [sym_print_statement] = STATE(1238), + [sym_assert_statement] = STATE(1238), + [sym_expression_statement] = STATE(1238), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1238), + [sym_delete_statement] = STATE(1238), + [sym_raise_statement] = STATE(1238), + [sym_pass_statement] = STATE(1238), + [sym_break_statement] = STATE(1238), + [sym_continue_statement] = STATE(1238), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1238), + [sym_nonlocal_statement] = STATE(1238), + [sym_exec_statement] = STATE(1238), + [sym_type_alias_statement] = STATE(1238), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(539), + [sym__indent] = ACTIONS(541), + [sym__string_start] = ACTIONS(81), + }, + [127] = { + [sym__simple_statements] = STATE(552), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(543), + [sym__indent] = ACTIONS(545), + [sym__string_start] = ACTIONS(81), + }, + [128] = { + [sym__simple_statements] = STATE(487), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(547), + [sym__indent] = ACTIONS(549), + [sym__string_start] = ACTIONS(81), + }, + [129] = { + [sym__simple_statements] = STATE(558), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(551), + [sym__indent] = ACTIONS(553), + [sym__string_start] = ACTIONS(81), + }, + [130] = { + [sym__simple_statements] = STATE(421), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(555), + [sym__indent] = ACTIONS(557), + [sym__string_start] = ACTIONS(81), + }, + [131] = { + [sym_named_expression] = STATE(1009), + [sym_expression] = STATE(976), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_attribute] = STATE(797), + [sym_subscript] = STATE(797), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(331), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(559), + [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(333), + [anon_sym_GT_GT] = ACTIONS(276), + [anon_sym_COLON_EQ] = ACTIONS(287), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(289), + [anon_sym_async] = ACTIONS(333), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(333), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(561), + [anon_sym_PLUS] = ACTIONS(561), + [anon_sym_LBRACK] = ACTIONS(563), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(276), + [anon_sym_EQ] = ACTIONS(289), + [anon_sym_exec] = ACTIONS(333), + [anon_sym_type] = ACTIONS(333), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(69), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_PLUS_EQ] = ACTIONS(307), + [anon_sym_DASH_EQ] = ACTIONS(307), + [anon_sym_STAR_EQ] = ACTIONS(307), + [anon_sym_SLASH_EQ] = ACTIONS(307), + [anon_sym_AT_EQ] = ACTIONS(307), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(307), + [anon_sym_PERCENT_EQ] = ACTIONS(307), + [anon_sym_STAR_STAR_EQ] = ACTIONS(307), + [anon_sym_GT_GT_EQ] = ACTIONS(307), + [anon_sym_LT_LT_EQ] = ACTIONS(307), + [anon_sym_AMP_EQ] = ACTIONS(307), + [anon_sym_CARET_EQ] = ACTIONS(307), + [anon_sym_PIPE_EQ] = ACTIONS(307), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(337), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(303), + [sym__newline] = ACTIONS(303), + [sym__string_start] = ACTIONS(81), + }, + [132] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(630), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(274), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(278), + [anon_sym_RPAREN] = ACTIONS(565), + [anon_sym_COMMA] = ACTIONS(565), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(285), + [anon_sym_GT_GT] = ACTIONS(276), + [anon_sym_COLON_EQ] = ACTIONS(568), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(570), + [anon_sym_async] = ACTIONS(285), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(285), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(291), + [anon_sym_PLUS] = ACTIONS(291), + [anon_sym_LBRACK] = ACTIONS(293), + [anon_sym_RBRACK] = ACTIONS(565), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(276), + [anon_sym_EQ] = ACTIONS(570), + [anon_sym_exec] = ACTIONS(285), + [anon_sym_type] = ACTIONS(285), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(299), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(305), + [anon_sym_PLUS_EQ] = ACTIONS(572), + [anon_sym_DASH_EQ] = ACTIONS(572), + [anon_sym_STAR_EQ] = ACTIONS(572), + [anon_sym_SLASH_EQ] = ACTIONS(572), + [anon_sym_AT_EQ] = ACTIONS(572), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(572), + [anon_sym_PERCENT_EQ] = ACTIONS(572), + [anon_sym_STAR_STAR_EQ] = ACTIONS(572), + [anon_sym_GT_GT_EQ] = ACTIONS(572), + [anon_sym_LT_LT_EQ] = ACTIONS(572), + [anon_sym_AMP_EQ] = ACTIONS(572), + [anon_sym_CARET_EQ] = ACTIONS(572), + [anon_sym_PIPE_EQ] = ACTIONS(572), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(313), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, + [133] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(574), + [sym__string_start] = ACTIONS(81), + }, + [134] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(576), + [sym__string_start] = ACTIONS(81), + }, + [135] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(578), + [sym__string_start] = ACTIONS(81), + }, + [136] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(580), + [sym__string_start] = ACTIONS(81), + }, + [137] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(582), + [sym__string_start] = ACTIONS(81), + }, + [138] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(584), + [sym__string_start] = ACTIONS(81), + }, + [139] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(586), + [sym__string_start] = ACTIONS(81), + }, + [140] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(588), + [sym__string_start] = ACTIONS(81), + }, + [141] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(590), + [sym__string_start] = ACTIONS(81), + }, + [142] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(592), + [sym__string_start] = ACTIONS(81), + }, + [143] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(594), + [sym__string_start] = ACTIONS(81), + }, + [144] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(596), + [sym__string_start] = ACTIONS(81), + }, + [145] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(598), + [sym__string_start] = ACTIONS(81), + }, + [146] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(600), + [sym__string_start] = ACTIONS(81), + }, + [147] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(81), + }, + [148] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(630), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(274), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(278), + [anon_sym_RPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(285), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(568), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(276), + [anon_sym_else] = ACTIONS(276), + [anon_sym_async] = ACTIONS(285), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(285), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(301), + [anon_sym_PLUS] = ACTIONS(301), + [anon_sym_LBRACK] = ACTIONS(293), + [anon_sym_RBRACK] = ACTIONS(303), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_RBRACE] = ACTIONS(303), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_EQ] = ACTIONS(276), + [anon_sym_exec] = ACTIONS(285), + [anon_sym_type] = ACTIONS(285), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(299), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(305), + [sym_ellipsis] = ACTIONS(309), + [sym_type_conversion] = ACTIONS(303), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(313), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, + [149] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(643), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(602), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(604), + [anon_sym_RPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_as] = ACTIONS(276), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(606), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(608), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(276), + [anon_sym_async] = ACTIONS(606), + [anon_sym_for] = ACTIONS(276), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(606), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(610), + [anon_sym_PLUS] = ACTIONS(610), + [anon_sym_LBRACK] = ACTIONS(612), + [anon_sym_RBRACK] = ACTIONS(303), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_RBRACE] = ACTIONS(303), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_exec] = ACTIONS(606), + [anon_sym_type] = ACTIONS(606), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(614), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(610), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(616), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(618), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, + [150] = { + [sym_named_expression] = STATE(1009), + [sym_expression] = STATE(976), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_attribute] = STATE(797), + [sym_subscript] = STATE(797), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(331), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_from] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(559), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(333), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(287), + [anon_sym_if] = ACTIONS(276), + [anon_sym_async] = ACTIONS(333), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(333), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(563), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_EQ] = ACTIONS(276), + [anon_sym_exec] = ACTIONS(333), + [anon_sym_type] = ACTIONS(333), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(69), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(71), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(337), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(303), + [sym__newline] = ACTIONS(303), + [sym__string_start] = ACTIONS(81), + }, + [151] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(643), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(602), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(604), + [anon_sym_RPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(606), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(608), + [anon_sym_if] = ACTIONS(276), + [anon_sym_async] = ACTIONS(606), + [anon_sym_for] = ACTIONS(276), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(606), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(610), + [anon_sym_PLUS] = ACTIONS(610), + [anon_sym_LBRACK] = ACTIONS(612), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_EQ] = ACTIONS(620), + [anon_sym_exec] = ACTIONS(606), + [anon_sym_type] = ACTIONS(606), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(614), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(610), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(616), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(618), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, + [152] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(643), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(602), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(604), + [anon_sym_RPAREN] = ACTIONS(280), + [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(606), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(608), + [anon_sym_if] = ACTIONS(276), + [anon_sym_async] = ACTIONS(606), + [anon_sym_for] = ACTIONS(276), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(606), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(610), + [anon_sym_PLUS] = ACTIONS(610), + [anon_sym_LBRACK] = ACTIONS(612), + [anon_sym_RBRACK] = ACTIONS(280), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_exec] = ACTIONS(606), + [anon_sym_type] = ACTIONS(606), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(614), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(610), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(616), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(618), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, + [153] = { + [sym_named_expression] = STATE(1015), + [sym_expression] = STATE(1042), + [sym_primary_expression] = STATE(740), + [sym_not_operator] = STATE(1015), + [sym_boolean_operator] = STATE(1015), + [sym_binary_operator] = STATE(811), + [sym_unary_operator] = STATE(811), + [sym_comparison_operator] = STATE(1015), + [sym_lambda] = STATE(1015), + [sym_attribute] = STATE(811), + [sym_subscript] = STATE(811), + [sym_call] = STATE(811), + [sym_list] = STATE(811), + [sym_set] = STATE(811), + [sym_tuple] = STATE(811), + [sym_dictionary] = STATE(811), + [sym_list_comprehension] = STATE(811), + [sym_dictionary_comprehension] = STATE(811), + [sym_set_comprehension] = STATE(811), + [sym_generator_expression] = STATE(811), + [sym_parenthesized_expression] = STATE(811), + [sym_conditional_expression] = STATE(1015), + [sym_concatenated_string] = STATE(811), + [sym_string] = STATE(742), + [sym_await] = STATE(1015), + [sym_identifier] = ACTIONS(622), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(624), + [anon_sym_RPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_as] = ACTIONS(276), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(626), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(628), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(276), + [anon_sym_async] = ACTIONS(626), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(626), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(630), + [anon_sym_PLUS] = ACTIONS(630), + [anon_sym_LBRACK] = ACTIONS(632), + [anon_sym_LBRACE] = ACTIONS(634), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_exec] = ACTIONS(626), + [anon_sym_type] = ACTIONS(626), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(636), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(630), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(638), + [sym_ellipsis] = ACTIONS(640), + [sym_integer] = ACTIONS(642), + [sym_float] = ACTIONS(640), + [anon_sym_await] = ACTIONS(644), + [sym_true] = ACTIONS(642), + [sym_false] = ACTIONS(642), + [sym_none] = ACTIONS(642), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(646), + }, + [154] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(630), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(274), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(278), + [anon_sym_RPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(285), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(568), + [anon_sym_if] = ACTIONS(276), + [anon_sym_async] = ACTIONS(285), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(285), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(301), + [anon_sym_PLUS] = ACTIONS(301), + [anon_sym_LBRACK] = ACTIONS(293), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_EQ] = ACTIONS(620), + [anon_sym_exec] = ACTIONS(285), + [anon_sym_type] = ACTIONS(285), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(299), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(305), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(313), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, +}; + +static const uint16_t ts_small_parse_table[] = { + [0] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_identifier, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + anon_sym_STAR, + ACTIONS(49), 1, + anon_sym_LBRACK, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(73), 1, + anon_sym_yield, + ACTIONS(79), 1, + anon_sym_await, + ACTIONS(81), 1, + sym__string_start, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(889), 1, + sym_pattern, + STATE(897), 1, + sym_pattern_list, + STATE(1034), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + STATE(431), 2, + sym_attribute, + sym_subscript, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(317), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1369), 5, + sym_expression_list, + sym_assignment, + sym_augmented_assignment, + sym__right_hand_side, + sym_yield, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [118] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_identifier, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + anon_sym_STAR, + ACTIONS(49), 1, + anon_sym_LBRACK, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(73), 1, + anon_sym_yield, + ACTIONS(79), 1, + anon_sym_await, + ACTIONS(81), 1, + sym__string_start, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(889), 1, + sym_pattern, + STATE(897), 1, + sym_pattern_list, + STATE(1034), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + STATE(431), 2, + sym_attribute, + sym_subscript, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(317), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1391), 5, + sym_expression_list, + sym_assignment, + sym_augmented_assignment, + sym__right_hand_side, + sym_yield, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [236] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_identifier, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + anon_sym_STAR, + ACTIONS(49), 1, + anon_sym_LBRACK, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(73), 1, + anon_sym_yield, + ACTIONS(79), 1, + anon_sym_await, + ACTIONS(81), 1, + sym__string_start, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(889), 1, + sym_pattern, + STATE(897), 1, + sym_pattern_list, + STATE(1034), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + STATE(431), 2, + sym_attribute, + sym_subscript, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(317), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1386), 5, + sym_expression_list, + sym_assignment, + sym_augmented_assignment, + sym__right_hand_side, + sym_yield, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [354] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(648), 1, + anon_sym_from, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(929), 1, + sym_expression, + STATE(1041), 1, + sym_expression_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + ACTIONS(650), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [464] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(662), 1, + anon_sym_RBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(932), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1497), 1, + sym__patterns, + STATE(1503), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [579] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + ACTIONS(668), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(941), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1467), 1, + sym__collection_elements, + STATE(1497), 1, + sym__patterns, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [694] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + ACTIONS(670), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(941), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1467), 1, + sym__collection_elements, + STATE(1497), 1, + sym__patterns, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [809] = 28, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + ACTIONS(672), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1219), 1, + sym_yield, + STATE(1434), 1, + sym__patterns, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [926] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + ACTIONS(674), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1219), 1, + sym_yield, + STATE(1301), 1, + sym_parenthesized_list_splat, + STATE(1303), 1, + sym_list_splat, + STATE(1434), 1, + sym__patterns, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1045] = 28, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + ACTIONS(676), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(931), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1251), 1, + sym_yield, + STATE(1431), 1, + sym__collection_elements, + STATE(1434), 1, + sym__patterns, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1162] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(301), 1, + anon_sym_TILDE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(682), 1, + anon_sym_STAR, + ACTIONS(688), 1, + anon_sym_in, + ACTIONS(690), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(876), 1, + sym_pattern, + STATE(882), 1, + sym_primary_expression, + ACTIONS(291), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + ACTIONS(686), 15, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [1262] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(694), 1, + anon_sym_COMMA, + ACTIONS(696), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(907), 1, + sym_expression, + STATE(1052), 1, + sym_pair, + STATE(1327), 1, + sym_dictionary_splat, + STATE(1513), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1376] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(933), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1023), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + ACTIONS(698), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1480] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(933), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1023), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + ACTIONS(700), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1584] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(702), 1, + anon_sym_COMMA, + ACTIONS(704), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(911), 1, + sym_expression, + STATE(1038), 1, + sym_pair, + STATE(1225), 1, + sym_dictionary_splat, + STATE(1460), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1698] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(706), 1, + anon_sym_COMMA, + ACTIONS(708), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(918), 1, + sym_expression, + STATE(1049), 1, + sym_pair, + STATE(1311), 1, + sym_dictionary_splat, + STATE(1461), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1812] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(933), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1023), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + ACTIONS(700), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1916] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(301), 1, + anon_sym_TILDE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(682), 1, + anon_sym_STAR, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(712), 1, + anon_sym_in, + STATE(600), 1, + sym_string, + STATE(876), 1, + sym_pattern, + STATE(882), 1, + sym_primary_expression, + ACTIONS(291), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + ACTIONS(710), 15, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [2016] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(714), 1, + anon_sym_RPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(915), 1, + sym_expression, + STATE(1268), 1, + sym_with_item, + STATE(1313), 1, + sym_yield, + STATE(1475), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2123] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(720), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2224] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(720), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2325] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(724), 1, + anon_sym_RPAREN, + ACTIONS(726), 1, + anon_sym_COMMA, + ACTIONS(730), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1071), 1, + sym_expression, + STATE(1256), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1255), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2430] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(724), 1, + anon_sym_RPAREN, + ACTIONS(726), 1, + anon_sym_COMMA, + ACTIONS(732), 1, + sym_identifier, + ACTIONS(736), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(953), 1, + sym_expression, + STATE(1256), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1255), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(734), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2535] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(960), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1120), 3, + sym_expression_list, + sym_yield, + sym__f_expression, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2638] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, + sym_identifier, + ACTIONS(736), 1, + anon_sym_await, + ACTIONS(738), 1, + anon_sym_RPAREN, + ACTIONS(740), 1, + anon_sym_COMMA, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(940), 1, + sym_expression, + STATE(1328), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1239), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(734), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2743] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(742), 1, + anon_sym_from, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1014), 1, + sym_expression, + STATE(1348), 1, + sym_expression_list, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(650), 2, + sym__newline, + sym__semicolon, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2848] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(744), 1, + anon_sym_from, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(982), 1, + sym_expression, + STATE(1288), 1, + sym_expression_list, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(746), 2, + sym__newline, + sym__semicolon, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2953] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(748), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3054] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(960), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1097), 3, + sym_expression_list, + sym_yield, + sym__f_expression, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3157] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, + sym_identifier, + ACTIONS(736), 1, + anon_sym_await, + ACTIONS(750), 1, + anon_sym_RPAREN, + ACTIONS(752), 1, + anon_sym_COMMA, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(946), 1, + sym_expression, + STATE(1297), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1298), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(734), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3262] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1018), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(754), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(756), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 4, + anon_sym_print, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3360] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(760), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3462] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(762), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(941), 1, + sym_expression, + STATE(1467), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3564] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(714), 1, + anon_sym_RPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1219), 1, + sym_yield, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3668] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(764), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3770] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(766), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(941), 1, + sym_expression, + STATE(1467), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3872] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(768), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(932), 1, + sym_expression, + STATE(1503), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3974] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1018), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(770), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(772), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 4, + anon_sym_print, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4072] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(774), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(931), 1, + sym_expression, + STATE(1251), 1, + sym_yield, + STATE(1431), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4176] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(776), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4278] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(778), 1, + anon_sym_from, + ACTIONS(780), 1, + anon_sym_STAR, + ACTIONS(782), 1, + anon_sym_STAR_STAR, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1036), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(700), 2, + sym__newline, + sym__semicolon, + STATE(1187), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4380] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(784), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4482] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(786), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4584] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(788), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4686] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(790), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4788] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(792), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1219), 1, + sym_yield, + STATE(1301), 1, + sym_parenthesized_list_splat, + STATE(1303), 1, + sym_list_splat, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4894] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1045), 1, + sym_expression, + STATE(1394), 1, + sym_expression_list, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(794), 2, + sym__newline, + sym__semicolon, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4996] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1018), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(796), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(798), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 4, + anon_sym_print, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5094] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(800), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5196] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(792), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1219), 1, + sym_yield, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5300] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(778), 1, + anon_sym_from, + ACTIONS(780), 1, + anon_sym_STAR, + ACTIONS(782), 1, + anon_sym_STAR_STAR, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1036), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(700), 2, + sym__newline, + sym__semicolon, + STATE(1187), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5402] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(802), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5504] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(804), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5606] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(806), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5708] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(808), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5810] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(780), 1, + anon_sym_STAR, + ACTIONS(782), 1, + anon_sym_STAR_STAR, + ACTIONS(810), 1, + anon_sym_from, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1036), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(698), 2, + sym__newline, + sym__semicolon, + STATE(1187), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5912] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(714), 1, + anon_sym_RPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1219), 1, + sym_yield, + STATE(1301), 1, + sym_parenthesized_list_splat, + STATE(1303), 1, + sym_list_splat, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6018] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(714), 1, + anon_sym_RPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(945), 1, + sym_expression, + STATE(1313), 1, + sym_yield, + STATE(1475), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6122] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1018), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(812), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(814), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 4, + anon_sym_print, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6220] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(816), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6322] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(818), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6424] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(820), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6526] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(766), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(935), 1, + sym_expression, + STATE(1473), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6628] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [6689] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(828), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(826), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [6750] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [6811] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [6872] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6971] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(836), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(834), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [7032] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(720), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [7131] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(720), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [7230] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [7291] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(840), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(838), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [7352] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(848), 1, + anon_sym_except, + ACTIONS(850), 1, + anon_sym_finally, + STATE(440), 1, + sym_else_clause, + STATE(504), 1, + sym_finally_clause, + STATE(271), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(842), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [7424] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(854), 1, + anon_sym_except_STAR, + ACTIONS(856), 1, + anon_sym_finally, + STATE(413), 1, + sym_else_clause, + STATE(520), 1, + sym_finally_clause, + STATE(267), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(842), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [7496] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [7592] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1046), 1, + sym_expression, + STATE(1389), 1, + sym_expression_list, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [7690] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(856), 1, + anon_sym_finally, + ACTIONS(862), 1, + anon_sym_except, + STATE(454), 1, + sym_else_clause, + STATE(588), 1, + sym_finally_clause, + STATE(266), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(860), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [7762] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1070), 1, + sym_expression, + STATE(1472), 1, + sym_expression_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [7860] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(854), 1, + anon_sym_except_STAR, + ACTIONS(856), 1, + anon_sym_finally, + STATE(454), 1, + sym_else_clause, + STATE(588), 1, + sym_finally_clause, + STATE(267), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(860), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [7932] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1085), 1, + sym_expression, + STATE(1518), 1, + sym_expression_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8030] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1059), 1, + sym_expression, + STATE(1507), 1, + sym_expression_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8128] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(850), 1, + anon_sym_finally, + ACTIONS(864), 1, + anon_sym_except_STAR, + STATE(467), 1, + sym_else_clause, + STATE(523), 1, + sym_finally_clause, + STATE(270), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(860), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [8200] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(848), 1, + anon_sym_except, + ACTIONS(850), 1, + anon_sym_finally, + STATE(467), 1, + sym_else_clause, + STATE(523), 1, + sym_finally_clause, + STATE(271), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(860), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [8272] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1075), 1, + sym_expression, + STATE(1465), 1, + sym_expression_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8370] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(850), 1, + anon_sym_finally, + ACTIONS(864), 1, + anon_sym_except_STAR, + STATE(440), 1, + sym_else_clause, + STATE(504), 1, + sym_finally_clause, + STATE(270), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(842), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [8442] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(856), 1, + anon_sym_finally, + ACTIONS(862), 1, + anon_sym_except, + STATE(413), 1, + sym_else_clause, + STATE(520), 1, + sym_finally_clause, + STATE(266), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(842), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [8514] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(866), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8609] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(868), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8704] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(780), 1, + anon_sym_STAR, + ACTIONS(782), 1, + anon_sym_STAR_STAR, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1036), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + STATE(1187), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8799] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(933), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1023), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8894] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(870), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8989] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(872), 1, + anon_sym_for, + ACTIONS(874), 1, + anon_sym_with, + ACTIONS(876), 1, + anon_sym_def, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [9062] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(878), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9157] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(880), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9252] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(882), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9347] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(884), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9442] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(886), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9537] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(888), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9632] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(890), 1, + anon_sym_for, + ACTIONS(892), 1, + anon_sym_with, + ACTIONS(894), 1, + anon_sym_def, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [9705] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(898), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9799] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(900), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9893] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(902), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9987] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(307), 1, + aux_sym_if_statement_repeat1, + STATE(420), 1, + sym_elif_clause, + STATE(577), 1, + sym_else_clause, + ACTIONS(906), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(904), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10055] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(912), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1064), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(910), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10147] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(914), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10241] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(916), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10335] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(918), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10429] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(307), 1, + aux_sym_if_statement_repeat1, + STATE(420), 1, + sym_elif_clause, + STATE(570), 1, + sym_else_clause, + ACTIONS(922), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(920), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10497] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(926), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1083), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(924), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10589] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(258), 1, + aux_sym_if_statement_repeat1, + STATE(420), 1, + sym_elif_clause, + STATE(522), 1, + sym_else_clause, + ACTIONS(930), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(928), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10657] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(936), 1, + anon_sym_except, + STATE(266), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(934), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(932), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10719] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(943), 1, + anon_sym_except_STAR, + STATE(267), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(941), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(939), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10781] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(950), 1, + anon_sym_elif, + STATE(276), 1, + aux_sym_if_statement_repeat1, + STATE(433), 1, + sym_elif_clause, + STATE(537), 1, + sym_else_clause, + ACTIONS(946), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(948), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10849] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(952), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10943] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(954), 1, + anon_sym_except_STAR, + STATE(270), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(941), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(939), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11005] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(957), 1, + anon_sym_except, + STATE(271), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(934), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(932), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11067] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(263), 1, + aux_sym_if_statement_repeat1, + STATE(420), 1, + sym_elif_clause, + STATE(529), 1, + sym_else_clause, + ACTIONS(946), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(948), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11135] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(960), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [11229] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(962), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [11323] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [11415] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(950), 1, + anon_sym_elif, + STATE(285), 1, + aux_sym_if_statement_repeat1, + STATE(433), 1, + sym_elif_clause, + STATE(585), 1, + sym_else_clause, + ACTIONS(922), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(920), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11483] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(950), 1, + anon_sym_elif, + STATE(285), 1, + aux_sym_if_statement_repeat1, + STATE(433), 1, + sym_elif_clause, + STATE(575), 1, + sym_else_clause, + ACTIONS(906), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(904), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11551] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(964), 1, + sym__string_start, + STATE(1335), 1, + sym_string, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [11621] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(950), 1, + anon_sym_elif, + STATE(277), 1, + aux_sym_if_statement_repeat1, + STATE(433), 1, + sym_elif_clause, + STATE(576), 1, + sym_else_clause, + ACTIONS(930), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(928), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11689] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1018), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [11778] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11835] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11892] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(974), 1, + anon_sym_LPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1320), 1, + sym_with_item, + STATE(1422), 1, + sym_with_clause, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [11983] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(976), 1, + sym_identifier, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(303), 10, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + sym__semicolon, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 21, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + anon_sym_is, + [12050] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(982), 1, + anon_sym_elif, + STATE(285), 1, + aux_sym_if_statement_repeat1, + STATE(433), 1, + sym_elif_clause, + ACTIONS(978), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(980), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [12113] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(979), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12202] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [12259] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [12316] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1103), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(993), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12405] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(995), 1, + anon_sym_RPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1308), 1, + sym_with_item, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12496] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [12553] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(974), 1, + anon_sym_LPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1320), 1, + sym_with_item, + STATE(1459), 1, + sym_with_clause, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12644] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1090), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(997), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12733] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1091), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(999), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12822] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1066), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(1001), 2, + sym__newline, + sym__semicolon, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12911] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(974), 1, + anon_sym_LPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1320), 1, + sym_with_item, + STATE(1474), 1, + sym_with_clause, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13002] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1013), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13091] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(974), 1, + anon_sym_LPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1320), 1, + sym_with_item, + STATE(1451), 1, + sym_with_clause, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13182] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1047), 1, + sym_expression, + STATE(1294), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13273] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1066), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(1003), 2, + sym__newline, + sym__semicolon, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13362] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1021), 1, + sym_expression, + STATE(1220), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13453] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1005), 1, + anon_sym_RPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1308), 1, + sym_with_item, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13544] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1066), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(1007), 2, + sym__newline, + sym__semicolon, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13633] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1066), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(1009), 2, + sym__newline, + sym__semicolon, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13722] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [13779] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1119), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(1011), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13868] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1013), 1, + anon_sym_elif, + STATE(307), 1, + aux_sym_if_statement_repeat1, + STATE(420), 1, + sym_elif_clause, + ACTIONS(978), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(980), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [13931] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [13988] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(963), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1017), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14077] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1040), 1, + sym_expression, + STATE(1258), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14168] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14225] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(958), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1033), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14314] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14371] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14462] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14519] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1022), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1020), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14575] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1026), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1024), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14631] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1028), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1030), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14687] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14743] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1032), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1034), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14799] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1483), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14887] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1482), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14975] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1480), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [15063] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1478), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [15151] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1036), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1038), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15207] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15263] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1022), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1020), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15319] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1040), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1042), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15375] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1046), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15431] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1050), 1, + anon_sym_COMMA, + ACTIONS(1055), 1, + anon_sym_COLON_EQ, + ACTIONS(1057), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(1059), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1053), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [15495] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1061), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1063), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15551] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1026), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1024), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15607] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1065), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1067), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15663] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [15727] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1069), 1, + anon_sym_COLON, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1063), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [15815] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [15871] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [15927] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(568), 1, + anon_sym_COLON_EQ, + ACTIONS(570), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(565), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(572), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(303), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + [15991] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1074), 1, + anon_sym_COLON_EQ, + ACTIONS(1076), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(1071), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1078), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1048), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + ACTIONS(1053), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + [16055] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1080), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1082), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [16111] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1485), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16199] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [16255] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [16311] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(836), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(834), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [16367] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 1, + anon_sym_case, + STATE(349), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1086), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1084), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [16427] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1428), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16515] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 1, + anon_sym_case, + STATE(347), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1090), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1092), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [16575] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1082), 1, + sym_expression, + STATE(1263), 1, + sym_type, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16663] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1097), 1, + anon_sym_case, + STATE(349), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1090), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1092), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [16723] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1505), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16811] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1308), 1, + sym_with_item, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16899] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(828), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(826), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [16955] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1080), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1082), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17011] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17067] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17123] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17179] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1065), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1067), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17235] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17291] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17347] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17403] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1133), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [17491] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17547] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1046), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17603] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1270), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [17691] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(840), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(838), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [17747] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1040), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1042), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17803] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17859] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1491), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [17947] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18003] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18059] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18115] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1028), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1030), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18171] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1032), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1034), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18227] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18283] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18339] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18395] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1036), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1038), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18451] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18507] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18563] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 1, + anon_sym_case, + STATE(347), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1086), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1084), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18623] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18679] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18735] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1102), 1, + anon_sym_COLON, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1081), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [18823] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1061), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1063), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18879] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(980), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [18964] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1186), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19049] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(545), 1, + sym_else_clause, + ACTIONS(1104), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1106), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [19108] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1108), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1110), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [19163] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(919), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19248] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(994), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19333] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(904), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19418] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1028), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19503] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1112), 1, + sym_identifier, + ACTIONS(1116), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(948), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(449), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(1114), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19590] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1044), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19675] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1029), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19760] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1030), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19845] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1032), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19930] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1134), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20015] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1135), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20100] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1151), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20185] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(500), 1, + sym_else_clause, + ACTIONS(1118), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1120), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [20244] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1104), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20329] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1124), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1122), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [20384] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1153), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20469] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1035), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20554] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(947), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20639] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1124), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1122), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [20694] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(519), 1, + sym_else_clause, + ACTIONS(1126), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1128), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [20753] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(916), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20838] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1000), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20923] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1001), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21008] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1136), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21093] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(856), 1, + anon_sym_finally, + STATE(591), 1, + sym_finally_clause, + ACTIONS(1132), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1130), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [21152] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(593), 1, + sym_else_clause, + ACTIONS(1126), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1128), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [21211] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1169), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21296] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1123), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21381] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1156), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21466] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(510), 1, + sym_else_clause, + ACTIONS(1104), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1106), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [21525] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(967), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21610] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1136), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1134), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [21665] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1108), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1110), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [21720] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(974), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21805] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1140), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21890] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1141), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21975] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1094), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22060] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1149), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22145] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(511), 1, + sym_else_clause, + ACTIONS(1138), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1140), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [22204] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(539), 1, + sym_else_clause, + ACTIONS(1138), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1140), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [22263] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1152), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22348] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(503), 1, + sym_else_clause, + ACTIONS(1142), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1144), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [22407] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1050), 1, + anon_sym_COMMA, + ACTIONS(1057), 1, + anon_sym_EQ, + ACTIONS(1059), 14, + anon_sym_COLON, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1053), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [22468] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(551), 1, + sym_else_clause, + ACTIONS(1142), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1144), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [22527] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1136), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1134), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [22582] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1098), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22667] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1121), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22752] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(908), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22837] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1007), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22922] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1073), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23007] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(928), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23092] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(850), 1, + anon_sym_finally, + STATE(518), 1, + sym_finally_clause, + ACTIONS(1132), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1130), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [23151] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1148), 1, + anon_sym_COMMA, + ACTIONS(1155), 1, + anon_sym_EQ, + ACTIONS(1153), 14, + anon_sym_COLON, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1151), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [23212] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1054), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23297] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1025), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23382] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(912), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23467] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1051), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23552] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(920), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23637] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(939), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23722] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(992), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23807] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1076), 1, + anon_sym_EQ, + ACTIONS(1071), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1048), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + ACTIONS(1078), 14, + anon_sym_COLON, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1053), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + [23868] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1126), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23953] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1127), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24038] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(914), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24123] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1078), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24208] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(856), 1, + anon_sym_finally, + STATE(564), 1, + sym_finally_clause, + ACTIONS(1159), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1157), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [24267] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(927), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24352] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(926), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24437] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(922), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24522] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1027), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24607] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1148), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24692] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(948), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24777] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1113), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24862] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1026), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24947] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(924), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25032] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(567), 1, + sym_else_clause, + ACTIONS(1163), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1161), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [25091] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(923), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25176] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1105), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25261] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(850), 1, + anon_sym_finally, + STATE(559), 1, + sym_finally_clause, + ACTIONS(1159), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1157), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [25320] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1157), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25405] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1048), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25490] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(904), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25575] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1158), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25660] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(569), 1, + sym_else_clause, + ACTIONS(1163), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1161), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [25719] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(1039), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25804] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1102), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25889] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1167), 1, + anon_sym_COMMA, + ACTIONS(1174), 1, + anon_sym_EQ, + ACTIONS(1172), 14, + anon_sym_COLON, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1170), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [25950] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(921), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26035] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1122), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26120] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(525), 1, + sym_else_clause, + ACTIONS(1118), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1120), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26179] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1084), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26264] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1065), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26349] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(997), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26434] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(909), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26519] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1066), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26604] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1159), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26689] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1178), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1176), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26743] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1178), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1176), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26797] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1182), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1180), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26851] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1184), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1186), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26905] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1190), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1188), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26959] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1182), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1180), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27013] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1194), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1192), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27067] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1198), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1196), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27121] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1198), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1196), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27175] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1194), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1192), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27229] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1184), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1186), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27283] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1190), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1188), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27337] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1200), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1202), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27390] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1206), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1204), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27443] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1208), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1210), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27496] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1212), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1214), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27549] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1216), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1218), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27602] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1222), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1220), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27655] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1224), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1226), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27708] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1132), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1130), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27761] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1230), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1228), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27814] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1234), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1232), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27867] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(860), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27920] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1238), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1236), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27973] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1242), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1240), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28026] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1246), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1244), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28079] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1248), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1250), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28132] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1252), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1254), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28185] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1252), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1254), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28238] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(842), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28291] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1206), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1204), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28344] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(860), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28397] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1258), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1256), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28450] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1260), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1262), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28503] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1264), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1266), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28556] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1132), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1130), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28609] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1268), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1270), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28662] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1274), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1272), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28715] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1159), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1157), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28768] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1278), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28821] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1212), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1214), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28874] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1278), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28927] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1282), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1280), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28980] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1284), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1286), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29033] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1290), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1288), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29086] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1294), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1292), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29139] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1298), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1296), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29192] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1300), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1302), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29245] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1304), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1306), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29298] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1310), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1308), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29351] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1312), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1314), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29404] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1310), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1308), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29457] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1290), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1288), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29510] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1294), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1292), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29563] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1248), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1250), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29616] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1304), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1306), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29669] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1316), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1318), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29722] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1222), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1220), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29775] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1320), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1322), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29828] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1326), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1324), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29881] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1246), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1244), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29934] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1242), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1240), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29987] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1238), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1236), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30040] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1216), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1218), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30093] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1328), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1330), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30146] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1282), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1280), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30199] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1224), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1226), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30252] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1332), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1334), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30305] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1298), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1296), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30358] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1328), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1330), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30411] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1284), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1286), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30464] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1234), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1232), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30517] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1230), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1228), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30570] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1300), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1302), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30623] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1336), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1338), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30676] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1320), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1322), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30729] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1340), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1342), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30782] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1316), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1318), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30835] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1312), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1314), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30888] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1336), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1338), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30941] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1340), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1342), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30994] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1258), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1256), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31047] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1346), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1344), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31100] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(842), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31153] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1346), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1344), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31206] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1350), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1348), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31259] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1354), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1352), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31312] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1354), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1352), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31365] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1356), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1358), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31418] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1356), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1358), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31471] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1360), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1362), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31524] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1274), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1272), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31577] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1360), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1362), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31630] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1326), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1324), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31683] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1366), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1364), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31736] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1200), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1202), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31789] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1370), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1368), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31842] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1374), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1372), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31895] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1366), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1364), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31948] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1208), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1210), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32001] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1350), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1348), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32054] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1370), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1368), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32107] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1378), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1376), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32160] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1159), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1157), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32213] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1374), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1372), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32266] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1378), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1376), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32319] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1260), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1262), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32372] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1268), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1270), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32425] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1264), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1266), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32478] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1332), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1334), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32531] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(876), 1, + sym_pattern, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(1380), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [32613] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + ACTIONS(1384), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1146), 1, + sym_pattern, + STATE(1434), 1, + sym__patterns, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [32697] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(876), 1, + sym_pattern, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(1386), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [32779] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + STATE(599), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1390), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1388), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [32834] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1396), 1, + sym__string_start, + STATE(599), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1394), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1392), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [32889] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + STATE(598), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1053), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [32944] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1305), 1, + sym_pattern, + STATE(1466), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33025] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1306), 1, + sym_pattern, + STATE(1454), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33106] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1197), 1, + sym_pattern, + STATE(1522), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33187] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1199), 1, + sym_pattern, + STATE(1519), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33268] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1276), 1, + sym_pattern, + STATE(1421), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33349] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1293), 1, + sym_pattern, + STATE(1419), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33430] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(876), 1, + sym_pattern, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33508] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1281), 1, + sym_pattern, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33586] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1401), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1399), 35, + sym__string_start, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33635] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1405), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1403), 35, + sym__string_start, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33684] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1409), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1407), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33732] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1413), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1411), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33780] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33828] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33876] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33924] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33972] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1429), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1427), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34020] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(276), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34068] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1433), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1431), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34116] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1437), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1435), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34164] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1441), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1439), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34212] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1445), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1443), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34260] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1449), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1447), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34308] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1453), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1451), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34356] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1457), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1455), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34404] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1461), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1459), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34452] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1465), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1463), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34500] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1469), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1467), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34548] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1473), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1471), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34596] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1487), 1, + anon_sym_PIPE, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1495), 1, + anon_sym_EQ, + ACTIONS(1499), 1, + anon_sym_not, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1507), 1, + anon_sym_is, + STATE(870), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1505), 2, + anon_sym_LT, + anon_sym_GT, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1485), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1479), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [34678] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1511), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1509), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34726] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34774] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1515), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1513), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34822] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34870] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1523), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1521), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34918] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1525), 1, + sym_identifier, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(762), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(1527), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(1529), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [34990] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1533), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1531), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35038] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1537), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1535), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35086] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35134] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35182] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1541), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1539), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35230] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1053), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35278] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1495), 1, + anon_sym_as, + ACTIONS(1549), 1, + anon_sym_PIPE, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1557), 1, + anon_sym_not, + ACTIONS(1559), 1, + anon_sym_AMP, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1565), 1, + anon_sym_is, + STATE(871), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1563), 2, + anon_sym_LT, + anon_sym_GT, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1547), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1479), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + [35360] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1569), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1567), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35408] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35465] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 20, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35532] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [35589] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35646] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 23, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [35709] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1577), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1575), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35766] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35827] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1549), 1, + anon_sym_PIPE, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1559), 1, + anon_sym_AMP, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1581), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1579), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [35898] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1559), 1, + anon_sym_AMP, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [35967] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36028] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36085] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 21, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36150] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 21, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36215] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36284] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1549), 1, + anon_sym_PIPE, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1559), 1, + anon_sym_AMP, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1585), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1583), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36355] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 20, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36422] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1577), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1575), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36479] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1549), 1, + anon_sym_PIPE, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1559), 1, + anon_sym_AMP, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1589), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1587), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36550] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1487), 1, + anon_sym_PIPE, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1589), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1587), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36621] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1487), 1, + anon_sym_PIPE, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1585), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1583), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36692] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1487), 1, + anon_sym_PIPE, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1581), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1579), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36763] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 23, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36826] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1591), 1, + anon_sym_COLON_EQ, + ACTIONS(1053), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36874] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(608), 1, + anon_sym_COLON_EQ, + ACTIONS(276), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36922] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(1595), 1, + anon_sym_not, + STATE(713), 1, + sym_string, + STATE(733), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [36988] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1599), 1, + anon_sym_not, + STATE(742), 1, + sym_string, + STATE(751), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37054] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1151), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 33, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [37100] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1170), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 33, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [37146] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1603), 1, + anon_sym_not, + STATE(600), 1, + sym_string, + STATE(665), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37212] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1074), 1, + anon_sym_COLON_EQ, + ACTIONS(1053), 6, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [37260] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(568), 1, + anon_sym_COLON_EQ, + ACTIONS(276), 6, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [37308] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(1605), 1, + anon_sym_not, + STATE(600), 1, + sym_string, + STATE(652), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37374] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1607), 1, + sym__string_start, + STATE(677), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1394), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1392), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [37424] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + STATE(677), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1390), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1388), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [37474] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(663), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37537] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(751), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37600] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(747), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37663] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(763), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37726] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(766), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37789] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1495), 1, + anon_sym_EQ, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1620), 1, + anon_sym_PIPE, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1630), 1, + anon_sym_not, + ACTIONS(1632), 1, + anon_sym_AMP, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1638), 1, + anon_sym_is, + STATE(878), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1636), 2, + anon_sym_LT, + anon_sym_GT, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1618), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1479), 7, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [37868] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1525), 1, + sym_identifier, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(762), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(1529), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37935] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(656), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37998] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(646), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38061] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(659), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38124] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1640), 1, + sym__string_start, + STATE(689), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1394), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1392), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [38173] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(645), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38236] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(746), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38299] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(651), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38362] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(647), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38425] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(731), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38488] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(658), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38551] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(665), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38614] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(750), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38677] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(649), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38740] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(756), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38803] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(743), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38866] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(734), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38929] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(652), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38992] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(653), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39055] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(654), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39118] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(655), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39181] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(741), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39244] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(666), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39307] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(761), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39370] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(661), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39433] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(660), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39496] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(657), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39559] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(662), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39622] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(81), 1, + sym__string_start, + STATE(720), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1053), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [39671] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(739), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39734] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1643), 1, + sym_identifier, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(879), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(1645), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39801] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(648), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39864] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(738), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39927] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(664), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39990] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(745), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40053] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(81), 1, + sym__string_start, + STATE(689), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1390), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1388), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [40102] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(737), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40165] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(733), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40228] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(732), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40291] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(757), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40354] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1170), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 32, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [40399] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(650), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40462] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1151), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 32, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [40507] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(752), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40570] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(753), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40633] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(735), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40696] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1620), 1, + anon_sym_PIPE, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1632), 1, + anon_sym_AMP, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1589), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1587), 15, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [40764] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 20, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [40824] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1620), 1, + anon_sym_PIPE, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1632), 1, + anon_sym_AMP, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1581), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1579), 15, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [40892] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1620), 1, + anon_sym_PIPE, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1632), 1, + anon_sym_AMP, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1585), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1583), 15, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [40960] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41014] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1401), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1399), 32, + sym__string_start, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41058] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1632), 1, + anon_sym_AMP, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 16, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41124] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 22, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41182] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41236] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1657), 1, + anon_sym_PIPE, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1667), 1, + anon_sym_not, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1675), 1, + anon_sym_is, + STATE(881), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1673), 2, + anon_sym_LT, + anon_sym_GT, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1655), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1479), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [41312] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 17, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41376] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + STATE(678), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41424] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 18, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41486] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1405), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1403), 32, + sym__string_start, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41530] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1577), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1575), 25, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41584] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1657), 1, + anon_sym_PIPE, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1589), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1587), 15, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41651] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1573), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 22, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41708] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(303), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(276), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(307), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [41753] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1591), 1, + anon_sym_COLON_EQ, + ACTIONS(1050), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41800] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1573), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 16, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41865] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1657), 1, + anon_sym_PIPE, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1581), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1579), 15, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41932] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1573), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 20, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41991] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42044] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1055), 1, + anon_sym_COLON_EQ, + ACTIONS(1053), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42089] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(276), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42134] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42187] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1657), 1, + anon_sym_PIPE, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1585), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1583), 15, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42254] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1401), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1399), 30, + sym__newline, + sym__string_start, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42297] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1591), 1, + anon_sym_COLON_EQ, + ACTIONS(1677), 1, + anon_sym_EQ, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42344] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(608), 1, + anon_sym_COLON_EQ, + ACTIONS(620), 1, + anon_sym_EQ, + ACTIONS(276), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42391] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1573), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 17, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42454] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(1053), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(1078), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42499] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1573), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42560] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(608), 1, + anon_sym_COLON_EQ, + ACTIONS(280), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(276), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42607] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1165), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(1170), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(1172), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42652] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1577), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1575), 25, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42705] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(303), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(276), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(572), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42750] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1146), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(1151), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(1153), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42795] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1405), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1403), 30, + sym__newline, + sym__string_start, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42838] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(1053), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(1059), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42883] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1461), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1459), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42925] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42967] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1457), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1455), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43009] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1453), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1451), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43051] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1533), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1531), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43093] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1437), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1435), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43135] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1449), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1447), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43177] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1429), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1427), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43219] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1167), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1170), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [43263] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1445), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1443), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43305] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1473), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1471), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43347] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43389] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43431] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1465), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1463), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43473] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1469), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1467), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43515] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1151), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43557] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1170), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43599] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1511), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1509), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43641] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1148), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1151), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [43685] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43727] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1523), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1521), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43769] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1515), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1513), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43811] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43853] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(276), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43895] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1413), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1411), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43937] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43979] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1053), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44021] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1679), 1, + anon_sym_COLON_EQ, + ACTIONS(1053), 5, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 28, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44065] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1441), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1439), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44107] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1541), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1539), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44149] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(628), 1, + anon_sym_COLON_EQ, + ACTIONS(276), 5, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 28, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44193] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1569), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1567), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44235] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1433), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1431), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44277] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1409), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1407), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44319] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1537), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1535), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44361] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1050), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44405] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44447] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44489] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44530] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44571] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44612] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1074), 1, + anon_sym_COLON_EQ, + ACTIONS(1677), 1, + anon_sym_EQ, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44657] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1461), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1459), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44698] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1457), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1455), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44739] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1453), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1451), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44780] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1449), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1447), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44821] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1409), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1407), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44862] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1445), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1443), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44903] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1533), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1531), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44944] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1441), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1439), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44985] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1437), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1435), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45026] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(828), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(826), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45067] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45108] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45149] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1473), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1471), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45190] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1541), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1539), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45231] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45272] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1537), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1535), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45313] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(840), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(838), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45354] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1569), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1567), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45395] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45436] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(276), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45477] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1511), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1509), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45518] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(836), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(834), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45559] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45600] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45641] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(568), 1, + anon_sym_COLON_EQ, + ACTIONS(620), 1, + anon_sym_EQ, + ACTIONS(276), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45686] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45727] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1413), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1411), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45768] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1465), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1463), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45809] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1429), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1427), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45850] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1469), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1467), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45891] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45932] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45973] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [46014] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1433), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1431), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [46055] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1515), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1513), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [46096] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1523), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1521), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [46137] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1286), 2, + sym__match_patterns, + sym_open_sequence_match_pattern, + STATE(1287), 2, + sym__match_pattern, + sym_match_as_pattern, + STATE(1404), 2, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46211] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1701), 1, + anon_sym_if, + ACTIONS(1703), 1, + anon_sym_COLON, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46285] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1705), 1, + anon_sym_if, + ACTIONS(1707), 1, + anon_sym_COLON, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46359] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1221), 2, + sym__match_patterns, + sym_open_sequence_match_pattern, + STATE(1287), 2, + sym__match_pattern, + sym_match_as_pattern, + STATE(1404), 2, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46433] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1709), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1392), 2, + sym__match_pattern, + sym_match_as_pattern, + STATE(1396), 2, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46506] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1711), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46577] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1711), 1, + anon_sym_RBRACK, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46648] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1709), 1, + anon_sym_RBRACK, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1202), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46719] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1713), 1, + anon_sym_RBRACK, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46790] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1713), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46861] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46929] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1715), 1, + sym_identifier, + ACTIONS(1717), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1212), 1, + sym_match_positional_pattern, + STATE(1330), 1, + sym_match_keyword_pattern, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1364), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47001] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1715), 1, + sym_identifier, + ACTIONS(1719), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1290), 1, + sym_match_keyword_pattern, + STATE(1403), 1, + sym_match_positional_pattern, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1364), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47073] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1715), 1, + sym_identifier, + ACTIONS(1721), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1326), 1, + sym_match_keyword_pattern, + STATE(1403), 1, + sym_match_positional_pattern, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1364), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47145] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1403), 1, + sym_match_positional_pattern, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1364), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47211] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1355), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47274] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1399), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47337] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1723), 1, + sym_match_wildcard_pattern, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(984), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47392] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1725), 1, + sym_match_wildcard_pattern, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(957), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47447] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1729), 1, + anon_sym_as, + ACTIONS(1734), 1, + anon_sym_not, + ACTIONS(1740), 1, + anon_sym_is, + STATE(868), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1737), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1731), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1727), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + [47487] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1729), 1, + anon_sym_EQ, + ACTIONS(1746), 1, + anon_sym_not, + ACTIONS(1752), 1, + anon_sym_is, + STATE(869), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1749), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1743), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1727), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [47527] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1499), 1, + anon_sym_not, + ACTIONS(1507), 1, + anon_sym_is, + ACTIONS(1757), 1, + anon_sym_EQ, + STATE(869), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1505), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1485), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1755), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [47567] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1557), 1, + anon_sym_not, + ACTIONS(1565), 1, + anon_sym_is, + ACTIONS(1757), 1, + anon_sym_as, + STATE(868), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1563), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1547), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1755), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + [47607] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1761), 1, + anon_sym_COMMA, + STATE(872), 1, + aux_sym__patterns_repeat1, + ACTIONS(1759), 18, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [47637] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1764), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [47662] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1766), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [47687] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1059), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [47712] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1768), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [47737] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1729), 1, + anon_sym_EQ, + ACTIONS(1773), 1, + anon_sym_not, + ACTIONS(1779), 1, + anon_sym_is, + STATE(877), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1776), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1770), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1727), 7, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [47774] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1630), 1, + anon_sym_not, + ACTIONS(1638), 1, + anon_sym_is, + ACTIONS(1757), 1, + anon_sym_EQ, + STATE(877), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1636), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1618), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1755), 7, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [47811] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1053), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1782), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(1048), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + [47840] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(276), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1784), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(303), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + [47869] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1667), 1, + anon_sym_not, + ACTIONS(1675), 1, + anon_sym_is, + STATE(883), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1673), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1655), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1755), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [47903] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1487), 1, + anon_sym_PIPE, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + [47949] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1789), 1, + anon_sym_not, + ACTIONS(1795), 1, + anon_sym_is, + STATE(883), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1792), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1786), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1727), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [47983] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1798), 1, + anon_sym_COMMA, + STATE(872), 1, + aux_sym__patterns_repeat1, + ACTIONS(1800), 16, + anon_sym_COLON, + anon_sym_in, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [48011] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1808), 1, + anon_sym_COLON, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + STATE(1334), 1, + sym_parameter, + STATE(1453), 1, + sym_lambda_parameters, + STATE(1521), 1, + sym__parameters, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48054] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1814), 1, + anon_sym_COLON, + STATE(1334), 1, + sym_parameter, + STATE(1458), 1, + sym_lambda_parameters, + STATE(1521), 1, + sym__parameters, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48097] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1816), 1, + anon_sym_COLON, + STATE(1334), 1, + sym_parameter, + STATE(1413), 1, + sym_lambda_parameters, + STATE(1521), 1, + sym__parameters, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48140] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1818), 1, + anon_sym_COLON, + STATE(1334), 1, + sym_parameter, + STATE(1427), 1, + sym_lambda_parameters, + STATE(1521), 1, + sym__parameters, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48183] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(1822), 1, + anon_sym_COLON, + ACTIONS(1824), 1, + anon_sym_EQ, + STATE(884), 1, + aux_sym__patterns_repeat1, + ACTIONS(1826), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [48214] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1828), 1, + anon_sym_COLON, + STATE(1334), 1, + sym_parameter, + STATE(1521), 1, + sym__parameters, + STATE(1524), 1, + sym_lambda_parameters, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48257] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1830), 1, + sym_identifier, + ACTIONS(1832), 1, + anon_sym_RBRACE, + ACTIONS(1834), 1, + anon_sym_STAR_STAR, + STATE(975), 1, + sym_concatenated_string, + STATE(1168), 1, + sym_string, + STATE(1359), 1, + sym_match_double_star_pattern, + STATE(1362), 1, + sym_match_key_value_pattern, + STATE(1486), 2, + sym_match_literal_pattern, + sym_match_value_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + [48303] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1830), 1, + sym_identifier, + ACTIONS(1834), 1, + anon_sym_STAR_STAR, + ACTIONS(1836), 1, + anon_sym_RBRACE, + STATE(975), 1, + sym_concatenated_string, + STATE(1168), 1, + sym_string, + STATE(1218), 1, + sym_match_key_value_pattern, + STATE(1368), 1, + sym_match_double_star_pattern, + STATE(1486), 2, + sym_match_literal_pattern, + sym_match_value_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + [48349] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1838), 1, + sym_identifier, + ACTIONS(1840), 1, + anon_sym_RPAREN, + STATE(1229), 1, + sym_parameter, + STATE(1455), 1, + sym__parameters, + STATE(1267), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48389] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1830), 1, + sym_identifier, + ACTIONS(1834), 1, + anon_sym_STAR_STAR, + ACTIONS(1842), 1, + anon_sym_RBRACE, + STATE(975), 1, + sym_concatenated_string, + STATE(1168), 1, + sym_string, + STATE(1362), 1, + sym_match_key_value_pattern, + STATE(1401), 1, + sym_match_double_star_pattern, + STATE(1486), 2, + sym_match_literal_pattern, + sym_match_value_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + [48435] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1838), 1, + sym_identifier, + ACTIONS(1844), 1, + anon_sym_RPAREN, + STATE(1201), 1, + sym_parameter, + STATE(1267), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48472] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1846), 1, + anon_sym_COLON, + STATE(1201), 1, + sym_parameter, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48509] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1822), 1, + anon_sym_COLON, + ACTIONS(1824), 1, + anon_sym_EQ, + ACTIONS(1826), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [48534] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1844), 1, + anon_sym_COLON, + STATE(1201), 1, + sym_parameter, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48571] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1838), 1, + sym_identifier, + ACTIONS(1846), 1, + anon_sym_RPAREN, + STATE(1201), 1, + sym_parameter, + STATE(1267), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48608] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1495), 1, + anon_sym_as, + ACTIONS(1479), 13, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [48630] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1850), 1, + anon_sym_as, + ACTIONS(1848), 13, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [48652] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + STATE(1201), 1, + sym_parameter, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48686] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1838), 1, + sym_identifier, + STATE(1201), 1, + sym_parameter, + STATE(1267), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48720] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1854), 1, + anon_sym_as, + ACTIONS(1852), 13, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [48742] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1830), 1, + sym_identifier, + STATE(975), 1, + sym_concatenated_string, + STATE(1168), 1, + sym_string, + STATE(1362), 1, + sym_match_key_value_pattern, + STATE(1486), 2, + sym_match_literal_pattern, + sym_match_value_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + [48779] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1858), 1, + anon_sym_DOT, + STATE(906), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1856), 10, + anon_sym_import, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48801] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1865), 1, + anon_sym_COLON, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACE, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1438), 1, + sym__comprehension_clauses, + [48838] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1877), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [48861] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1887), 1, + anon_sym_as, + ACTIONS(1885), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48886] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + ACTIONS(1891), 1, + anon_sym_LPAREN, + STATE(906), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1893), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48909] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1865), 1, + anon_sym_COLON, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACE, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1405), 1, + sym__comprehension_clauses, + [48946] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1897), 1, + anon_sym_as, + ACTIONS(1895), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48971] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + STATE(678), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1899), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48992] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1903), 1, + anon_sym_as, + ACTIONS(1901), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49015] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1905), 1, + anon_sym_RPAREN, + ACTIONS(1907), 1, + anon_sym_COMMA, + ACTIONS(1910), 1, + anon_sym_as, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1464), 1, + sym__comprehension_clauses, + [49052] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1912), 9, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49073] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1856), 11, + anon_sym_import, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49090] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1865), 1, + anon_sym_COLON, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACE, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1410), 1, + sym__comprehension_clauses, + [49127] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1885), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49150] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1912), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + anon_sym_or, + sym_type_conversion, + [49169] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1901), 9, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49190] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1914), 1, + anon_sym_as, + ACTIONS(1912), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49213] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1916), 1, + anon_sym_as, + ACTIONS(1877), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49238] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1895), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49261] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + ACTIONS(1918), 1, + anon_sym_LPAREN, + STATE(910), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1920), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49284] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1922), 9, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49305] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_as, + ACTIONS(1912), 9, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_or, + [49326] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1924), 1, + anon_sym_as, + ACTIONS(1922), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49349] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + STATE(964), 1, + aux_sym_expression_list_repeat1, + ACTIONS(1926), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49376] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1930), 1, + anon_sym_RPAREN, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1442), 1, + sym__comprehension_clauses, + [49410] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1932), 1, + anon_sym_RPAREN, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1417), 1, + sym__comprehension_clauses, + [49444] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACK, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1429), 1, + sym__comprehension_clauses, + [49478] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1934), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49500] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1944), 1, + sym__string_end, + STATE(936), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49530] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACK, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1407), 1, + sym__comprehension_clauses, + [49564] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1946), 1, + sym__string_end, + STATE(937), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49594] = 9, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1948), 1, + anon_sym_LBRACE2, + ACTIONS(1954), 1, + sym__not_escape_sequence, + ACTIONS(1957), 1, + sym__string_end, + STATE(937), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1951), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49624] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1959), 1, + sym__string_end, + STATE(937), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49654] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1961), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49676] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1963), 1, + anon_sym_RPAREN, + ACTIONS(1965), 1, + anon_sym_COMMA, + STATE(956), 1, + sym_for_in_clause, + STATE(1228), 1, + aux_sym_argument_list_repeat1, + STATE(1417), 1, + sym__comprehension_clauses, + [49710] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACK, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1437), 1, + sym__comprehension_clauses, + [49744] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1967), 1, + sym__string_end, + STATE(937), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49774] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1971), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1969), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49792] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1973), 1, + sym__string_end, + STATE(942), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49822] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1905), 1, + anon_sym_RPAREN, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1464), 1, + sym__comprehension_clauses, + [49856] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1975), 1, + anon_sym_RPAREN, + ACTIONS(1977), 1, + anon_sym_COMMA, + STATE(956), 1, + sym_for_in_clause, + STATE(1273), 1, + aux_sym_argument_list_repeat1, + STATE(1464), 1, + sym__comprehension_clauses, + [49890] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1979), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49912] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1981), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49934] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1983), 1, + sym__string_end, + STATE(937), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49964] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1985), 1, + sym__string_end, + STATE(949), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49994] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1989), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1987), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50012] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1991), 1, + sym__string_end, + STATE(938), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [50042] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1993), 1, + anon_sym_RPAREN, + ACTIONS(1995), 1, + anon_sym_COMMA, + STATE(956), 1, + sym_for_in_clause, + STATE(1280), 1, + aux_sym_argument_list_repeat1, + STATE(1442), 1, + sym__comprehension_clauses, + [50076] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1999), 1, + anon_sym_PIPE, + STATE(954), 1, + aux_sym_match_or_pattern_repeat1, + ACTIONS(1997), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50095] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2004), 1, + anon_sym_if, + ACTIONS(2007), 1, + anon_sym_async, + ACTIONS(2010), 1, + anon_sym_for, + ACTIONS(2002), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(955), 3, + sym_for_in_clause, + sym_if_clause, + aux_sym__comprehension_clauses_repeat1, + [50118] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(2015), 1, + anon_sym_if, + ACTIONS(2013), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(959), 3, + sym_for_in_clause, + sym_if_clause, + aux_sym__comprehension_clauses_repeat1, + [50141] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2019), 1, + anon_sym_PIPE, + STATE(961), 1, + aux_sym_match_or_pattern_repeat1, + ACTIONS(2017), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50160] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(2021), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50179] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(2015), 1, + anon_sym_if, + ACTIONS(2023), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(955), 3, + sym_for_in_clause, + sym_if_clause, + aux_sym__comprehension_clauses_repeat1, + [50202] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + STATE(964), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2025), 4, + anon_sym_COLON, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [50227] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2019), 1, + anon_sym_PIPE, + STATE(954), 1, + aux_sym_match_or_pattern_repeat1, + ACTIONS(2027), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50246] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(2021), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50265] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(2021), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50284] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2031), 1, + anon_sym_COMMA, + STATE(1005), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2029), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [50302] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(854), 1, + anon_sym_except_STAR, + ACTIONS(862), 1, + anon_sym_except, + ACTIONS(2033), 1, + anon_sym_finally, + STATE(568), 1, + sym_finally_clause, + STATE(229), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + STATE(241), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + [50326] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50340] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1852), 8, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [50354] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2037), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50368] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2039), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50382] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2041), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50396] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2045), 1, + anon_sym_PIPE, + ACTIONS(2043), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50412] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2047), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50426] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2049), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50440] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(1901), 6, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + sym__semicolon, + [50458] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1899), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50472] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1848), 8, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [50486] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2055), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50500] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2059), 1, + anon_sym_COMMA, + STATE(1012), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2057), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50518] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2063), 1, + anon_sym_COMMA, + STATE(995), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2061), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50536] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(1922), 6, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + sym__semicolon, + [50554] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2065), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50568] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2067), 1, + anon_sym_from, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2073), 2, + sym__newline, + sym__semicolon, + [50594] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(854), 1, + anon_sym_except_STAR, + ACTIONS(862), 1, + anon_sym_except, + ACTIONS(2033), 1, + anon_sym_finally, + STATE(516), 1, + sym_finally_clause, + STATE(232), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + STATE(234), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + [50618] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1997), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50632] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2075), 1, + anon_sym_COMMA, + STATE(1005), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2029), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [50650] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2077), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50664] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50678] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2081), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50692] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2083), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50706] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2085), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50720] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(848), 1, + anon_sym_except, + ACTIONS(864), 1, + anon_sym_except_STAR, + ACTIONS(2087), 1, + anon_sym_finally, + STATE(514), 1, + sym_finally_clause, + STATE(228), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + STATE(240), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + [50744] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1885), 5, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_EQ, + sym__semicolon, + [50764] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2089), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50778] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(2091), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50796] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2095), 1, + anon_sym_COMMA, + STATE(1012), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2093), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50814] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(67), 1, + anon_sym_AT, + ACTIONS(2097), 1, + anon_sym_async, + ACTIONS(2099), 1, + anon_sym_def, + ACTIONS(2101), 1, + anon_sym_class, + STATE(584), 2, + sym_function_definition, + sym_class_definition, + STATE(1062), 2, + sym_decorator, + aux_sym_decorated_definition_repeat1, + [50838] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1895), 5, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_EQ, + sym__semicolon, + [50858] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2103), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50872] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + ACTIONS(1918), 1, + anon_sym_LPAREN, + ACTIONS(2105), 1, + anon_sym_EQ, + STATE(910), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1920), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_PIPE, + [50894] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(1912), 6, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + sym__semicolon, + [50912] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(1912), 7, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + anon_sym_or, + sym__semicolon, + [50928] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(67), 1, + anon_sym_AT, + ACTIONS(2107), 1, + anon_sym_async, + ACTIONS(2109), 1, + anon_sym_def, + ACTIONS(2111), 1, + anon_sym_class, + STATE(499), 2, + sym_function_definition, + sym_class_definition, + STATE(1062), 2, + sym_decorator, + aux_sym_decorated_definition_repeat1, + [50952] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(848), 1, + anon_sym_except, + ACTIONS(864), 1, + anon_sym_except_STAR, + ACTIONS(2087), 1, + anon_sym_finally, + STATE(507), 1, + sym_finally_clause, + STATE(237), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + STATE(238), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + [50976] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2113), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50990] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2117), 1, + anon_sym_COMMA, + STATE(1005), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2115), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [51008] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2120), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51022] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1877), 5, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_EQ, + sym__semicolon, + [51042] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2122), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51056] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1479), 8, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [51070] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2124), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51084] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2126), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51098] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2130), 1, + anon_sym_COMMA, + STATE(1012), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2128), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51116] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2135), 1, + anon_sym_COMMA, + STATE(978), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2133), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51134] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(1926), 2, + sym__newline, + sym__semicolon, + [51157] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1479), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [51170] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2137), 1, + sym_identifier, + ACTIONS(2139), 1, + anon_sym_DOT, + ACTIONS(2141), 1, + anon_sym___future__, + STATE(1144), 1, + aux_sym_import_prefix_repeat1, + STATE(1236), 1, + sym_import_prefix, + STATE(1441), 2, + sym_relative_import, + sym_dotted_name, + [51193] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2143), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51206] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2128), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51219] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2145), 2, + sym__newline, + sym__semicolon, + [51242] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2147), 1, + sym_identifier, + ACTIONS(2149), 1, + anon_sym_STAR, + ACTIONS(2151), 1, + anon_sym_STAR_STAR, + STATE(1388), 4, + sym_typevar_parameter, + sym_typevartuple_parameter, + sym_paramspec_parameter, + sym__type_parameter, + [51261] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2153), 1, + anon_sym_COMMA, + ACTIONS(2155), 1, + anon_sym_COLON, + ACTIONS(2157), 1, + anon_sym_RBRACK, + STATE(1203), 1, + aux_sym_subscript_repeat1, + [51286] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2159), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_EQ, + [51305] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1934), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [51318] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2163), 1, + anon_sym_as, + ACTIONS(2161), 6, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51333] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(1922), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + [51350] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2169), 1, + anon_sym_COMMA, + STATE(1137), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2171), 2, + sym__newline, + sym__semicolon, + [51373] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(1895), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_COLON, + [51392] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(1901), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + [51409] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(1912), 6, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_or, + [51424] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(1912), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + [51441] = 6, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2175), 1, + anon_sym_LBRACE2, + ACTIONS(2179), 1, + sym__not_escape_sequence, + ACTIONS(2181), 1, + sym__string_end, + STATE(1055), 1, + aux_sym_string_content_repeat1, + ACTIONS(2177), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [51462] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(1877), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_COLON, + [51481] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2183), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51494] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2185), 2, + sym__newline, + sym__semicolon, + [51517] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(1885), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_COLON, + [51536] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1934), 4, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + sym__semicolon, + [51555] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2147), 1, + sym_identifier, + ACTIONS(2149), 1, + anon_sym_STAR, + ACTIONS(2151), 1, + anon_sym_STAR_STAR, + STATE(1227), 4, + sym_typevar_parameter, + sym_typevartuple_parameter, + sym_paramspec_parameter, + sym__type_parameter, + [51574] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(2187), 1, + anon_sym_COMMA, + ACTIONS(2189), 1, + anon_sym_RBRACE, + STATE(956), 1, + sym_for_in_clause, + STATE(1247), 1, + aux_sym_dictionary_repeat1, + STATE(1433), 1, + sym__comprehension_clauses, + [51599] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(2191), 4, + anon_sym_COMMA, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACE, + [51618] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2155), 1, + anon_sym_COLON, + ACTIONS(2193), 1, + anon_sym_COMMA, + ACTIONS(2195), 1, + anon_sym_RBRACK, + STATE(1282), 1, + aux_sym_subscript_repeat1, + [51643] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1926), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [51656] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1848), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [51669] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2197), 1, + anon_sym_COMMA, + STATE(1172), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2199), 2, + sym__newline, + sym__semicolon, + [51692] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2169), 1, + anon_sym_COMMA, + STATE(1174), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2201), 2, + sym__newline, + sym__semicolon, + [51715] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2203), 2, + sym__newline, + sym__semicolon, + [51738] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2205), 2, + sym__newline, + sym__semicolon, + [51761] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2155), 1, + anon_sym_COLON, + ACTIONS(2207), 1, + anon_sym_COMMA, + ACTIONS(2209), 1, + anon_sym_RBRACK, + STATE(1272), 1, + aux_sym_subscript_repeat1, + [51786] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1979), 4, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + sym__semicolon, + [51805] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(2211), 1, + anon_sym_COMMA, + ACTIONS(2213), 1, + anon_sym_RBRACE, + STATE(956), 1, + sym_for_in_clause, + STATE(1300), 1, + aux_sym_dictionary_repeat1, + STATE(1411), 1, + sym__comprehension_clauses, + [51830] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(2217), 1, + anon_sym_as, + ACTIONS(2215), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [51851] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1852), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [51864] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(2219), 1, + anon_sym_COMMA, + ACTIONS(2221), 1, + anon_sym_RBRACE, + STATE(956), 1, + sym_for_in_clause, + STATE(1234), 1, + aux_sym_dictionary_repeat1, + STATE(1439), 1, + sym__comprehension_clauses, + [51889] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2223), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51908] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1981), 4, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + sym__semicolon, + [51927] = 6, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2225), 1, + anon_sym_LBRACE2, + ACTIONS(2230), 1, + sym__not_escape_sequence, + ACTIONS(2233), 1, + sym__string_end, + STATE(1055), 1, + aux_sym_string_content_repeat1, + ACTIONS(2227), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [51948] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + ACTIONS(2237), 1, + anon_sym_LPAREN, + ACTIONS(2239), 1, + anon_sym_STAR, + STATE(1109), 1, + sym_dotted_name, + STATE(1143), 1, + sym_aliased_import, + STATE(1393), 1, + sym_wildcard_import, + STATE(1395), 1, + sym__import_list, + [51973] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2241), 1, + anon_sym_DOT, + STATE(1057), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1856), 4, + sym__newline, + anon_sym_COMMA, + anon_sym_as, + sym__semicolon, + [51989] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + STATE(906), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2244), 4, + anon_sym_import, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + [52005] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2246), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52027] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2248), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2250), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52041] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + STATE(1058), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2252), 4, + anon_sym_import, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + [52057] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2256), 1, + anon_sym_AT, + STATE(1062), 2, + sym_decorator, + aux_sym_decorated_definition_repeat1, + ACTIONS(2254), 3, + anon_sym_async, + anon_sym_def, + anon_sym_class, + [52073] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(2261), 1, + anon_sym_COLON, + ACTIONS(2259), 2, + anon_sym_COMMA, + anon_sym_as, + [52093] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2265), 1, + anon_sym_COLON, + ACTIONS(2263), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52113] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2267), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [52131] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2269), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [52149] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2271), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2273), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52163] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2275), 1, + anon_sym_DOT, + STATE(1057), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2244), 4, + sym__newline, + anon_sym_COMMA, + anon_sym_as, + sym__semicolon, + [52179] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2277), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2279), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52193] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2281), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52215] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1993), 1, + anon_sym_RPAREN, + ACTIONS(1995), 1, + anon_sym_COMMA, + STATE(1280), 1, + aux_sym_argument_list_repeat1, + [52237] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2283), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2285), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52251] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2287), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [52269] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2289), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2291), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52283] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2293), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52305] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2295), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2297), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52319] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2301), 1, + anon_sym_COMMA, + STATE(1077), 1, + aux_sym_open_sequence_match_pattern_repeat1, + ACTIONS(2299), 4, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + [52335] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2304), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [52353] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2306), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52375] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2308), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52397] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(2312), 1, + anon_sym_COLON, + ACTIONS(2310), 2, + anon_sym_COMMA, + anon_sym_as, + [52417] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2159), 3, + sym__newline, + anon_sym_EQ, + sym__semicolon, + [52435] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2316), 1, + anon_sym_COLON, + ACTIONS(2314), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52455] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2318), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [52473] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2320), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52495] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2155), 1, + anon_sym_COLON, + ACTIONS(2322), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52515] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1920), 6, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52527] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2275), 1, + anon_sym_DOT, + STATE(1068), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2252), 4, + sym__newline, + anon_sym_COMMA, + anon_sym_as, + sym__semicolon, + [52543] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2324), 6, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52555] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2326), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52572] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2328), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52589] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2330), 1, + anon_sym_COMMA, + STATE(1096), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2029), 3, + sym__newline, + anon_sym_from, + sym__semicolon, + [52604] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + STATE(1183), 1, + sym_dotted_name, + STATE(1198), 1, + sym_aliased_import, + ACTIONS(2332), 2, + sym__newline, + sym__semicolon, + [52621] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1961), 2, + sym__newline, + sym__semicolon, + [52638] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + STATE(1183), 1, + sym_dotted_name, + STATE(1198), 1, + sym_aliased_import, + ACTIONS(2332), 2, + sym__newline, + sym__semicolon, + [52655] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2334), 1, + anon_sym_COMMA, + STATE(1096), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2115), 3, + sym__newline, + anon_sym_from, + sym__semicolon, + [52670] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2339), 1, + anon_sym_RBRACE, + ACTIONS(2341), 1, + anon_sym_EQ, + ACTIONS(2343), 1, + sym_type_conversion, + STATE(1425), 1, + sym_format_specifier, + [52689] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2345), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52706] = 6, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2347), 1, + anon_sym_RBRACE, + ACTIONS(2349), 1, + anon_sym_LBRACE2, + ACTIONS(2351), 1, + aux_sym_format_specifier_token1, + STATE(1117), 1, + aux_sym_format_specifier_repeat1, + STATE(1269), 1, + sym_interpolation, + [52725] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + STATE(1115), 1, + aux_sym__collection_elements_repeat1, + ACTIONS(1871), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52740] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1856), 5, + sym__newline, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_as, + sym__semicolon, + [52751] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2191), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [52768] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2353), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52785] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(2355), 1, + anon_sym_as, + ACTIONS(2357), 1, + anon_sym_COLON, + [52804] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2359), 2, + sym__newline, + sym__semicolon, + [52821] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2299), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + [52832] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2361), 1, + anon_sym_LPAREN, + ACTIONS(2363), 1, + anon_sym_COLON, + ACTIONS(2365), 1, + anon_sym_LBRACK, + STATE(1224), 1, + sym_type_parameters, + STATE(1463), 1, + sym_argument_list, + [52851] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2361), 1, + anon_sym_LPAREN, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2367), 1, + anon_sym_COLON, + STATE(1210), 1, + sym_type_parameters, + STATE(1499), 1, + sym_argument_list, + [52870] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2369), 1, + anon_sym_COMMA, + ACTIONS(2371), 1, + anon_sym_as, + STATE(1164), 1, + aux_sym__import_list_repeat1, + ACTIONS(2373), 2, + sym__newline, + sym__semicolon, + [52887] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2375), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + [52898] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2379), 1, + anon_sym_COMMA, + STATE(1114), 1, + aux_sym__collection_elements_repeat1, + ACTIONS(2377), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52913] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2381), 1, + anon_sym_COMMA, + STATE(1096), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2029), 3, + sym__newline, + anon_sym_from, + sym__semicolon, + [52928] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2383), 2, + sym__newline, + sym__semicolon, + [52945] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2387), 1, + anon_sym_COMMA, + STATE(1114), 1, + aux_sym__collection_elements_repeat1, + ACTIONS(2385), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52960] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2390), 1, + anon_sym_COMMA, + STATE(1114), 1, + aux_sym__collection_elements_repeat1, + ACTIONS(2377), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52975] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + ACTIONS(2392), 1, + anon_sym_LPAREN, + STATE(1109), 1, + sym_dotted_name, + STATE(1143), 1, + sym_aliased_import, + STATE(1385), 1, + sym__import_list, + [52994] = 6, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2394), 1, + anon_sym_RBRACE, + ACTIONS(2396), 1, + anon_sym_LBRACE2, + ACTIONS(2399), 1, + aux_sym_format_specifier_token1, + STATE(1117), 1, + aux_sym_format_specifier_repeat1, + STATE(1269), 1, + sym_interpolation, + [53013] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + STATE(1183), 1, + sym_dotted_name, + STATE(1198), 1, + sym_aliased_import, + ACTIONS(2402), 2, + sym__newline, + sym__semicolon, + [53030] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2404), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [53047] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2406), 1, + anon_sym_RBRACE, + ACTIONS(2408), 1, + anon_sym_EQ, + ACTIONS(2410), 1, + sym_type_conversion, + STATE(1523), 1, + sym_format_specifier, + [53066] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2412), 2, + sym__newline, + sym__semicolon, + [53083] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2414), 2, + sym__newline, + sym__semicolon, + [53100] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(2416), 1, + anon_sym_as, + ACTIONS(2418), 1, + anon_sym_COLON, + [53119] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2420), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [53136] = 6, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2349), 1, + anon_sym_LBRACE2, + ACTIONS(2422), 1, + anon_sym_RBRACE, + ACTIONS(2424), 1, + aux_sym_format_specifier_token1, + STATE(1099), 1, + aux_sym_format_specifier_repeat1, + STATE(1269), 1, + sym_interpolation, + [53155] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2426), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [53172] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2428), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [53189] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1370), 1, + sym_type_parameters, + STATE(1371), 1, + sym_parameters, + [53205] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2432), 1, + anon_sym_case, + STATE(562), 1, + sym_cases, + STATE(345), 2, + sym_case_block, + aux_sym_cases_repeat1, + [53219] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + STATE(1109), 1, + sym_dotted_name, + STATE(1143), 1, + sym_aliased_import, + STATE(1383), 1, + sym__import_list, + [53235] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1354), 1, + sym_type_parameters, + STATE(1377), 1, + sym_parameters, + [53251] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1356), 1, + sym_type_parameters, + STATE(1378), 1, + sym_parameters, + [53267] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2436), 1, + anon_sym_EQ, + ACTIONS(2434), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [53279] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2438), 1, + anon_sym_COLON, + [53295] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2440), 1, + anon_sym_COLON, + [53311] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2442), 1, + anon_sym_COLON, + [53327] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2169), 1, + anon_sym_COMMA, + STATE(1160), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2444), 2, + sym__newline, + sym__semicolon, + [53341] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2446), 1, + anon_sym_COMMA, + STATE(1138), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2449), 2, + sym__newline, + sym__semicolon, + [53355] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2453), 1, + anon_sym_COLON, + STATE(1343), 1, + sym__type_bound, + ACTIONS(2451), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [53369] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2455), 1, + anon_sym_COLON, + [53385] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2457), 1, + anon_sym_COLON, + [53401] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2332), 1, + anon_sym_RPAREN, + ACTIONS(2459), 1, + sym_identifier, + STATE(1245), 1, + sym_dotted_name, + STATE(1397), 1, + sym_aliased_import, + [53417] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2369), 1, + anon_sym_COMMA, + STATE(1163), 1, + aux_sym__import_list_repeat1, + ACTIONS(2373), 2, + sym__newline, + sym__semicolon, + [53431] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2463), 1, + anon_sym_DOT, + STATE(1165), 1, + aux_sym_import_prefix_repeat1, + ACTIONS(2461), 2, + anon_sym_import, + sym_identifier, + [53445] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2465), 1, + anon_sym_COLON, + [53461] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2469), 1, + anon_sym_COMMA, + STATE(1167), 1, + aux_sym__patterns_repeat1, + ACTIONS(2467), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [53475] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2332), 1, + anon_sym_RPAREN, + ACTIONS(2459), 1, + sym_identifier, + STATE(1245), 1, + sym_dotted_name, + STATE(1397), 1, + sym_aliased_import, + [53491] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2471), 1, + anon_sym_COLON, + [53507] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2473), 1, + anon_sym_else, + [53523] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2475), 1, + anon_sym_COMMA, + STATE(1171), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2477), 2, + sym__newline, + sym__semicolon, + [53537] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2479), 1, + anon_sym_COLON, + [53553] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2481), 1, + anon_sym_else, + [53569] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2483), 1, + anon_sym_COLON, + [53585] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2485), 1, + anon_sym_COMMA, + STATE(1192), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2487), 2, + sym__newline, + sym__semicolon, + [53599] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2485), 1, + anon_sym_COMMA, + STATE(1191), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2489), 2, + sym__newline, + sym__semicolon, + [53613] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2491), 1, + sym__newline, + [53629] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2493), 1, + anon_sym_COLON, + [53645] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2495), 1, + anon_sym_COLON, + [53661] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2497), 1, + anon_sym_COLON, + [53677] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2499), 1, + anon_sym_COMMA, + STATE(1160), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2267), 2, + sym__newline, + sym__semicolon, + [53691] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2373), 1, + anon_sym_RPAREN, + ACTIONS(2502), 1, + anon_sym_COMMA, + ACTIONS(2504), 1, + anon_sym_as, + STATE(1205), 1, + aux_sym__import_list_repeat1, + [53707] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2506), 1, + anon_sym_COMMA, + STATE(1162), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2509), 2, + sym__newline, + sym__semicolon, + [53721] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2511), 1, + anon_sym_COMMA, + STATE(1189), 1, + aux_sym__import_list_repeat1, + ACTIONS(2513), 2, + sym__newline, + sym__semicolon, + [53735] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2515), 1, + anon_sym_COMMA, + STATE(1189), 1, + aux_sym__import_list_repeat1, + ACTIONS(2513), 2, + sym__newline, + sym__semicolon, + [53749] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2519), 1, + anon_sym_DOT, + STATE(1165), 1, + aux_sym_import_prefix_repeat1, + ACTIONS(2517), 2, + anon_sym_import, + sym_identifier, + [53763] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2223), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_RBRACE, + [53773] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2524), 1, + anon_sym_COMMA, + STATE(872), 1, + aux_sym__patterns_repeat1, + ACTIONS(2522), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [53787] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1899), 1, + anon_sym_COLON, + STATE(598), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + [53801] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2526), 1, + anon_sym_else, + [53817] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2528), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_RBRACE, + [53827] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2530), 1, + anon_sym_COMMA, + STATE(1162), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2532), 2, + sym__newline, + sym__semicolon, + [53841] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2534), 1, + anon_sym_COMMA, + STATE(1162), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2536), 2, + sym__newline, + sym__semicolon, + [53855] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2538), 1, + anon_sym_RBRACE, + ACTIONS(2540), 1, + sym_type_conversion, + STATE(1479), 1, + sym_format_specifier, + [53871] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2169), 1, + anon_sym_COMMA, + STATE(1160), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2542), 2, + sym__newline, + sym__semicolon, + [53885] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2544), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_RBRACE, + [53895] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1358), 1, + sym_type_parameters, + STATE(1363), 1, + sym_parameters, + [53911] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2548), 1, + anon_sym_COLON, + ACTIONS(2550), 1, + anon_sym_EQ, + ACTIONS(2546), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [53925] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2554), 1, + anon_sym_COMMA, + STATE(1178), 1, + aux_sym_with_clause_repeat1, + ACTIONS(2552), 2, + anon_sym_RPAREN, + anon_sym_COLON, + [53939] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2557), 1, + anon_sym_case, + STATE(541), 1, + sym_cases, + STATE(380), 2, + sym_case_block, + aux_sym_cases_repeat1, + [53953] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2557), 1, + anon_sym_case, + STATE(543), 1, + sym_cases, + STATE(380), 2, + sym_case_block, + aux_sym_cases_repeat1, + [53967] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2559), 1, + anon_sym_RBRACE, + ACTIONS(2561), 1, + sym_type_conversion, + STATE(1420), 1, + sym_format_specifier, + [53983] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2402), 1, + anon_sym_RPAREN, + ACTIONS(2459), 1, + sym_identifier, + STATE(1245), 1, + sym_dotted_name, + STATE(1397), 1, + sym_aliased_import, + [53999] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2371), 1, + anon_sym_as, + ACTIONS(2563), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [54011] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2432), 1, + anon_sym_case, + STATE(560), 1, + sym_cases, + STATE(345), 2, + sym_case_block, + aux_sym_cases_repeat1, + [54025] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2565), 4, + anon_sym_async, + anon_sym_def, + anon_sym_class, + anon_sym_AT, + [54035] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2567), 1, + anon_sym_else, + [54051] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1934), 4, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + sym__semicolon, + [54061] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2459), 1, + sym_identifier, + STATE(1161), 1, + sym_dotted_name, + STATE(1321), 1, + sym_aliased_import, + STATE(1415), 1, + sym__import_list, + [54077] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2569), 1, + anon_sym_COMMA, + STATE(1189), 1, + aux_sym__import_list_repeat1, + ACTIONS(2572), 2, + sym__newline, + sym__semicolon, + [54091] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2574), 1, + anon_sym_COMMA, + STATE(1077), 1, + aux_sym_open_sequence_match_pattern_repeat1, + ACTIONS(1703), 2, + anon_sym_if, + anon_sym_COLON, + [54105] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2485), 1, + anon_sym_COMMA, + STATE(1138), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2576), 2, + sym__newline, + sym__semicolon, + [54119] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2485), 1, + anon_sym_COMMA, + STATE(1138), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2578), 2, + sym__newline, + sym__semicolon, + [54133] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2459), 1, + sym_identifier, + STATE(1161), 1, + sym_dotted_name, + STATE(1321), 1, + sym_aliased_import, + STATE(1418), 1, + sym__import_list, + [54149] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(584), 1, + sym__newline, + ACTIONS(2580), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54162] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2582), 1, + sym_identifier, + ACTIONS(2584), 1, + anon_sym_RPAREN, + STATE(1341), 1, + sym_match_keyword_pattern, + [54175] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2586), 1, + anon_sym_COMMA, + ACTIONS(2588), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [54188] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2590), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [54201] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2563), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [54210] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2592), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [54223] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2594), 1, + sym__semicolon, + ACTIONS(2597), 1, + sym__newline, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54236] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2599), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [54245] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2601), 1, + anon_sym_COMMA, + ACTIONS(2603), 1, + anon_sym_RBRACK, + STATE(1323), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [54258] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2605), 1, + anon_sym_COMMA, + ACTIONS(2607), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [54271] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1844), 1, + anon_sym_COLON, + ACTIONS(2609), 1, + anon_sym_COMMA, + STATE(1295), 1, + aux_sym__parameters_repeat1, + [54284] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2513), 1, + anon_sym_RPAREN, + ACTIONS(2611), 1, + anon_sym_COMMA, + STATE(1240), 1, + aux_sym__import_list_repeat1, + [54297] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2513), 1, + anon_sym_RPAREN, + ACTIONS(2613), 1, + anon_sym_COMMA, + STATE(1240), 1, + aux_sym__import_list_repeat1, + [54310] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1153), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [54319] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2615), 1, + anon_sym_COMMA, + ACTIONS(2617), 1, + anon_sym_RBRACK, + STATE(1252), 1, + aux_sym_type_parameters_repeat1, + [54332] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2619), 1, + sym__semicolon, + ACTIONS(2621), 1, + sym__newline, + STATE(1194), 1, + aux_sym__simple_statements_repeat1, + [54345] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2361), 1, + anon_sym_LPAREN, + ACTIONS(2623), 1, + anon_sym_COLON, + STATE(1476), 1, + sym_argument_list, + [54358] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2625), 1, + anon_sym_COMMA, + ACTIONS(2628), 1, + anon_sym_RBRACE, + STATE(1211), 1, + aux_sym_match_mapping_pattern_repeat1, + [54371] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2630), 1, + anon_sym_RPAREN, + ACTIONS(2632), 1, + anon_sym_COMMA, + STATE(1213), 1, + aux_sym_match_class_pattern_repeat1, + [54384] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1719), 1, + anon_sym_RPAREN, + ACTIONS(2634), 1, + anon_sym_COMMA, + STATE(1296), 1, + aux_sym_match_class_pattern_repeat1, + [54397] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2636), 1, + sym__semicolon, + ACTIONS(2638), 1, + sym__newline, + STATE(1231), 1, + aux_sym__simple_statements_repeat1, + [54410] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1719), 1, + anon_sym_RPAREN, + ACTIONS(2582), 1, + sym_identifier, + STATE(1341), 1, + sym_match_keyword_pattern, + [54423] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1719), 1, + anon_sym_RPAREN, + ACTIONS(2640), 1, + anon_sym_COMMA, + STATE(1316), 1, + aux_sym_match_class_pattern_repeat2, + [54436] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(972), 1, + anon_sym_except, + ACTIONS(970), 2, + anon_sym_except_STAR, + anon_sym_finally, + [54447] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2642), 1, + anon_sym_COMMA, + ACTIONS(2644), 1, + anon_sym_RBRACE, + STATE(1257), 1, + aux_sym_match_mapping_pattern_repeat1, + [54460] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1930), 1, + anon_sym_RPAREN, + STATE(1292), 1, + aux_sym__collection_elements_repeat1, + [54473] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2153), 1, + anon_sym_COMMA, + ACTIONS(2157), 1, + anon_sym_RBRACK, + STATE(1196), 1, + aux_sym_subscript_repeat1, + [54486] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2646), 1, + anon_sym_if, + ACTIONS(2648), 1, + anon_sym_COLON, + STATE(1481), 1, + sym_guard, + [54499] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2289), 1, + anon_sym_RBRACE, + ACTIONS(2291), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [54510] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2449), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [54519] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2361), 1, + anon_sym_LPAREN, + ACTIONS(2650), 1, + anon_sym_COLON, + STATE(1470), 1, + sym_argument_list, + [54532] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2187), 1, + anon_sym_COMMA, + ACTIONS(2189), 1, + anon_sym_RBRACE, + STATE(1243), 1, + aux_sym_dictionary_repeat1, + [54545] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2652), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [54554] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2615), 1, + anon_sym_COMMA, + ACTIONS(2654), 1, + anon_sym_RBRACK, + STATE(1208), 1, + aux_sym_type_parameters_repeat1, + [54567] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2656), 1, + anon_sym_RPAREN, + ACTIONS(2658), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [54580] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2660), 1, + anon_sym_RPAREN, + ACTIONS(2662), 1, + anon_sym_COMMA, + STATE(1249), 1, + aux_sym__parameters_repeat1, + [54593] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2664), 1, + anon_sym_RPAREN, + ACTIONS(2666), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [54606] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(586), 1, + sym__newline, + ACTIONS(2668), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54619] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2670), 1, + anon_sym_RPAREN, + ACTIONS(2672), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [54632] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1016), 1, + anon_sym_except, + ACTIONS(1018), 2, + anon_sym_except_STAR, + anon_sym_finally, + [54643] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2675), 1, + anon_sym_COMMA, + ACTIONS(2677), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [54656] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2679), 1, + anon_sym_COMMA, + ACTIONS(2682), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [54669] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2137), 1, + sym_identifier, + ACTIONS(2684), 1, + anon_sym_import, + STATE(1408), 1, + sym_dotted_name, + [54682] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(598), 1, + sym__newline, + ACTIONS(2686), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54695] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2688), 1, + sym__semicolon, + ACTIONS(2690), 1, + sym__newline, + STATE(1237), 1, + aux_sym__simple_statements_repeat1, + [54708] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1963), 1, + anon_sym_RPAREN, + ACTIONS(1965), 1, + anon_sym_COMMA, + STATE(1264), 1, + aux_sym_argument_list_repeat1, + [54721] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2572), 1, + anon_sym_RPAREN, + ACTIONS(2692), 1, + anon_sym_COMMA, + STATE(1240), 1, + aux_sym__import_list_repeat1, + [54734] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(576), 1, + sym__newline, + ACTIONS(2695), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54747] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2697), 1, + anon_sym_COMMA, + ACTIONS(2699), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [54760] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2701), 1, + anon_sym_COMMA, + ACTIONS(2703), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [54773] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2705), 1, + sym__semicolon, + ACTIONS(2707), 1, + sym__newline, + STATE(1241), 1, + aux_sym__simple_statements_repeat1, + [54786] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2504), 1, + anon_sym_as, + ACTIONS(2563), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [54797] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(582), 1, + sym__newline, + ACTIONS(2709), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54810] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2711), 1, + anon_sym_COMMA, + ACTIONS(2713), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [54823] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2715), 1, + sym__semicolon, + ACTIONS(2717), 1, + sym__newline, + STATE(1246), 1, + aux_sym__simple_statements_repeat1, + [54836] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1844), 1, + anon_sym_RPAREN, + ACTIONS(2719), 1, + anon_sym_COMMA, + STATE(1275), 1, + aux_sym__parameters_repeat1, + [54849] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2721), 3, + anon_sym_LPAREN, + anon_sym_COLON, + anon_sym_EQ, + [54858] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1932), 1, + anon_sym_RPAREN, + STATE(1292), 1, + aux_sym__collection_elements_repeat1, + [54871] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2723), 1, + anon_sym_COMMA, + ACTIONS(2726), 1, + anon_sym_RBRACK, + STATE(1252), 1, + aux_sym_type_parameters_repeat1, + [54884] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2248), 1, + anon_sym_RBRACE, + ACTIONS(2250), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [54895] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(574), 1, + sym__newline, + ACTIONS(2728), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54908] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1993), 1, + anon_sym_RPAREN, + ACTIONS(1995), 1, + anon_sym_COMMA, + STATE(1277), 1, + aux_sym_argument_list_repeat1, + [54921] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2730), 1, + anon_sym_RPAREN, + ACTIONS(2732), 1, + anon_sym_COMMA, + STATE(1279), 1, + aux_sym_argument_list_repeat1, + [54934] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1832), 1, + anon_sym_RBRACE, + ACTIONS(2734), 1, + anon_sym_COMMA, + STATE(1211), 1, + aux_sym_match_mapping_pattern_repeat1, + [54947] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2193), 1, + anon_sym_COMMA, + ACTIONS(2195), 1, + anon_sym_RBRACK, + STATE(1283), 1, + aux_sym_subscript_repeat1, + [54960] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2736), 1, + sym_identifier, + ACTIONS(2738), 1, + sym_match_wildcard_pattern, + STATE(1110), 1, + sym_match_capture_pattern, + [54973] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2559), 1, + anon_sym_RBRACE, + STATE(1420), 1, + sym_format_specifier, + [54986] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2740), 1, + sym__semicolon, + ACTIONS(2742), 1, + sym__newline, + STATE(1254), 1, + aux_sym__simple_statements_repeat1, + [54999] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + ACTIONS(1893), 1, + anon_sym_COLON, + STATE(906), 1, + aux_sym_match_value_pattern_repeat1, + [55012] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2744), 1, + anon_sym_EQ, + ACTIONS(2746), 2, + sym__newline, + sym__semicolon, + [55023] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2748), 1, + anon_sym_RPAREN, + ACTIONS(2750), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55036] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(968), 1, + anon_sym_except, + ACTIONS(966), 2, + anon_sym_except_STAR, + anon_sym_finally, + [55047] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2752), 1, + anon_sym_COMMA, + ACTIONS(2754), 1, + anon_sym_COLON, + STATE(1178), 1, + aux_sym_with_clause_repeat1, + [55060] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2756), 1, + anon_sym_COLON, + ACTIONS(2546), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [55071] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2758), 1, + anon_sym_RPAREN, + ACTIONS(2760), 1, + anon_sym_COMMA, + STATE(1310), 1, + aux_sym_with_clause_repeat1, + [55084] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2762), 1, + anon_sym_RBRACE, + ACTIONS(2764), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [55095] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2434), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [55104] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2766), 1, + anon_sym_COMMA, + ACTIONS(2768), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [55117] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2770), 1, + anon_sym_COMMA, + ACTIONS(2772), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [55130] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2774), 1, + anon_sym_RPAREN, + ACTIONS(2776), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55143] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2778), 1, + anon_sym_RPAREN, + ACTIONS(2780), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55156] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2599), 1, + anon_sym_RPAREN, + ACTIONS(2782), 1, + anon_sym_COMMA, + STATE(1275), 1, + aux_sym__parameters_repeat1, + [55169] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2785), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [55182] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2787), 1, + anon_sym_RPAREN, + ACTIONS(2789), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55195] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2538), 1, + anon_sym_RBRACE, + STATE(1479), 1, + sym_format_specifier, + [55208] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2791), 1, + anon_sym_RPAREN, + ACTIONS(2793), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55221] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2795), 1, + anon_sym_RPAREN, + ACTIONS(2797), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55234] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2799), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [55243] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2801), 1, + anon_sym_COMMA, + ACTIONS(2803), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [55256] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2805), 1, + anon_sym_COMMA, + ACTIONS(2807), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [55269] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2809), 1, + anon_sym_RBRACE, + STATE(1409), 1, + sym_format_specifier, + [55282] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2811), 1, + anon_sym_RPAREN, + ACTIONS(2813), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55295] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2646), 1, + anon_sym_if, + ACTIONS(2815), 1, + anon_sym_COLON, + STATE(1501), 1, + sym_guard, + [55308] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2817), 1, + anon_sym_COMMA, + ACTIONS(2819), 2, + anon_sym_if, + anon_sym_COLON, + [55319] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2067), 1, + anon_sym_from, + ACTIONS(2073), 2, + sym__newline, + sym__semicolon, + [55330] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2377), 1, + anon_sym_RPAREN, + ACTIONS(2821), 1, + anon_sym_COMMA, + STATE(1114), 1, + aux_sym__collection_elements_repeat1, + [55343] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1721), 1, + anon_sym_RPAREN, + ACTIONS(2823), 1, + anon_sym_COMMA, + STATE(1325), 1, + aux_sym_match_class_pattern_repeat2, + [55356] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1399), 3, + sym__newline, + anon_sym_in, + sym__semicolon, + [55365] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2377), 1, + anon_sym_RPAREN, + ACTIONS(2825), 1, + anon_sym_COMMA, + STATE(1114), 1, + aux_sym__collection_elements_repeat1, + [55378] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2827), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [55391] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2207), 1, + anon_sym_COMMA, + ACTIONS(2209), 1, + anon_sym_RBRACK, + STATE(1271), 1, + aux_sym_subscript_repeat1, + [55404] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2599), 1, + anon_sym_COLON, + ACTIONS(2829), 1, + anon_sym_COMMA, + STATE(1295), 1, + aux_sym__parameters_repeat1, + [55417] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2832), 1, + anon_sym_RPAREN, + ACTIONS(2834), 1, + anon_sym_COMMA, + STATE(1296), 1, + aux_sym_match_class_pattern_repeat1, + [55430] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2837), 1, + anon_sym_RPAREN, + ACTIONS(2839), 1, + anon_sym_COMMA, + STATE(1274), 1, + aux_sym_argument_list_repeat1, + [55443] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1975), 1, + anon_sym_RPAREN, + ACTIONS(1977), 1, + anon_sym_COMMA, + STATE(1285), 1, + aux_sym_argument_list_repeat1, + [55456] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2841), 1, + anon_sym_COMMA, + ACTIONS(2844), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [55469] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2846), 1, + anon_sym_COMMA, + ACTIONS(2848), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [55482] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(2850), 1, + anon_sym_RPAREN, + STATE(1289), 1, + aux_sym__collection_elements_repeat1, + [55495] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2852), 1, + anon_sym_COMMA, + ACTIONS(2854), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [55508] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(2856), 1, + anon_sym_RPAREN, + STATE(1115), 1, + aux_sym__collection_elements_repeat1, + [55521] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(987), 1, + anon_sym_except, + ACTIONS(985), 2, + anon_sym_except_STAR, + anon_sym_finally, + [55532] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2858), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [55545] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2860), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [55558] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2277), 1, + anon_sym_RBRACE, + ACTIONS(2279), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [55569] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2552), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [55578] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(588), 1, + sym__newline, + ACTIONS(2862), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [55591] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(995), 1, + anon_sym_RPAREN, + ACTIONS(2864), 1, + anon_sym_COMMA, + STATE(1178), 1, + aux_sym_with_clause_repeat1, + [55604] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2211), 1, + anon_sym_COMMA, + ACTIONS(2213), 1, + anon_sym_RBRACE, + STATE(1302), 1, + aux_sym_dictionary_repeat1, + [55617] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + STATE(1183), 1, + sym_dotted_name, + STATE(1198), 1, + sym_aliased_import, + [55630] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1905), 1, + anon_sym_RPAREN, + STATE(1292), 1, + aux_sym__collection_elements_repeat1, + [55643] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1721), 1, + anon_sym_RPAREN, + ACTIONS(2582), 1, + sym_identifier, + STATE(1341), 1, + sym_match_keyword_pattern, + [55656] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2866), 1, + anon_sym_RBRACE, + STATE(1515), 1, + sym_format_specifier, + [55669] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2868), 1, + anon_sym_RPAREN, + ACTIONS(2870), 1, + anon_sym_COMMA, + STATE(1316), 1, + aux_sym_match_class_pattern_repeat2, + [55682] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2459), 1, + sym_identifier, + STATE(1245), 1, + sym_dotted_name, + STATE(1397), 1, + sym_aliased_import, + [55695] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1403), 3, + sym__newline, + anon_sym_in, + sym__semicolon, + [55704] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2873), 1, + sym__semicolon, + ACTIONS(2875), 1, + sym__newline, + STATE(1309), 1, + aux_sym__simple_statements_repeat1, + [55717] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2752), 1, + anon_sym_COMMA, + ACTIONS(2877), 1, + anon_sym_COLON, + STATE(1266), 1, + aux_sym_with_clause_repeat1, + [55730] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2373), 1, + anon_sym_RPAREN, + ACTIONS(2502), 1, + anon_sym_COMMA, + STATE(1206), 1, + aux_sym__import_list_repeat1, + [55743] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2879), 3, + anon_sym_LPAREN, + anon_sym_COLON, + anon_sym_EQ, + [55752] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1711), 1, + anon_sym_RBRACK, + ACTIONS(2881), 1, + anon_sym_COMMA, + STATE(1077), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [55765] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(989), 1, + anon_sym_except, + ACTIONS(991), 2, + anon_sym_except_STAR, + anon_sym_finally, + [55776] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2584), 1, + anon_sym_RPAREN, + ACTIONS(2883), 1, + anon_sym_COMMA, + STATE(1316), 1, + aux_sym_match_class_pattern_repeat2, + [55789] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2584), 1, + anon_sym_RPAREN, + ACTIONS(2883), 1, + anon_sym_COMMA, + STATE(1331), 1, + aux_sym_match_class_pattern_repeat2, + [55802] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2219), 1, + anon_sym_COMMA, + ACTIONS(2221), 1, + anon_sym_RBRACE, + STATE(1242), 1, + aux_sym_dictionary_repeat1, + [55815] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2885), 1, + anon_sym_RPAREN, + ACTIONS(2887), 1, + anon_sym_COMMA, + STATE(1230), 1, + aux_sym_argument_list_repeat1, + [55828] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2582), 1, + sym_identifier, + ACTIONS(2889), 1, + anon_sym_RPAREN, + STATE(1341), 1, + sym_match_keyword_pattern, + [55841] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2630), 1, + anon_sym_RPAREN, + ACTIONS(2891), 1, + anon_sym_COMMA, + STATE(1216), 1, + aux_sym_match_class_pattern_repeat2, + [55854] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2889), 1, + anon_sym_RPAREN, + ACTIONS(2893), 1, + anon_sym_COMMA, + STATE(1316), 1, + aux_sym_match_class_pattern_repeat2, + [55867] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2271), 1, + anon_sym_RBRACE, + ACTIONS(2273), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [55878] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2546), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [55887] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2660), 1, + anon_sym_COLON, + ACTIONS(2895), 1, + anon_sym_COMMA, + STATE(1204), 1, + aux_sym__parameters_repeat1, + [55900] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2897), 1, + anon_sym_in, + ACTIONS(2899), 2, + sym__newline, + sym__semicolon, + [55911] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2901), 1, + anon_sym_EQ, + STATE(1492), 1, + sym_type_parameters, + [55924] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1711), 1, + anon_sym_RPAREN, + ACTIONS(2903), 1, + anon_sym_COMMA, + STATE(1077), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [55937] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2582), 1, + sym_identifier, + ACTIONS(2905), 1, + anon_sym_RPAREN, + STATE(1341), 1, + sym_match_keyword_pattern, + [55950] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2550), 1, + anon_sym_EQ, + ACTIONS(2546), 2, + anon_sym_COMMA, + anon_sym_COLON, + [55961] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2907), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [55970] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2868), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [55978] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2909), 2, + sym__newline, + sym__semicolon, + [55986] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [55994] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2913), 1, + anon_sym_COLON, + ACTIONS(2915), 1, + anon_sym_DASH_GT, + [56004] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2917), 2, + sym__newline, + sym__semicolon, + [56012] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2919), 2, + sym__newline, + sym__semicolon, + [56020] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2546), 2, + anon_sym_COMMA, + anon_sym_COLON, + [56028] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1926), 2, + sym__newline, + sym__semicolon, + [56036] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2921), 2, + sym__newline, + sym__semicolon, + [56044] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2923), 2, + sym__newline, + sym__semicolon, + [56052] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2597), 2, + sym__newline, + sym__semicolon, + [56060] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2925), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56068] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2582), 1, + sym_identifier, + STATE(1341), 1, + sym_match_keyword_pattern, + [56078] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1372), 1, + sym_parameters, + [56088] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2927), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [56096] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1375), 1, + sym_parameters, + [56106] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2929), 1, + sym_identifier, + STATE(1367), 1, + sym_match_capture_pattern, + [56116] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1344), 1, + sym_parameters, + [56126] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1842), 1, + anon_sym_RBRACE, + ACTIONS(2931), 1, + anon_sym_COMMA, + [56136] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2069), 1, + anon_sym_COMMA, + STATE(1112), 1, + aux_sym_expression_list_repeat1, + [56146] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2145), 2, + sym__newline, + sym__semicolon, + [56154] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2628), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [56162] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2933), 1, + anon_sym_COLON, + ACTIONS(2935), 1, + anon_sym_DASH_GT, + [56172] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2937), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56180] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + STATE(1262), 1, + aux_sym_match_value_pattern_repeat1, + [56190] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1928), 1, + anon_sym_COMMA, + STATE(985), 1, + aux_sym_expression_list_repeat1, + [56200] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2939), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [56208] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2644), 1, + anon_sym_RBRACE, + ACTIONS(2941), 1, + anon_sym_COMMA, + [56218] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2943), 2, + sym__newline, + sym__semicolon, + [56226] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1376), 1, + sym_parameters, + [56236] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2945), 1, + anon_sym_COLON, + ACTIONS(2947), 1, + anon_sym_DASH_GT, + [56246] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2949), 1, + anon_sym_COLON, + ACTIONS(2951), 1, + anon_sym_DASH_GT, + [56256] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2420), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56264] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2953), 2, + anon_sym_COLON, + anon_sym_DASH_GT, + [56272] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2955), 1, + anon_sym_COLON, + ACTIONS(2957), 1, + anon_sym_DASH_GT, + [56282] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2959), 1, + anon_sym_COLON, + ACTIONS(2961), 1, + anon_sym_DASH_GT, + [56292] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2963), 1, + anon_sym_COLON, + ACTIONS(2965), 1, + anon_sym_DASH_GT, + [56302] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2967), 1, + anon_sym_COLON, + ACTIONS(2969), 1, + anon_sym_DASH_GT, + [56312] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2971), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56320] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2973), 2, + anon_sym_COLON, + anon_sym_DASH_GT, + [56328] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2975), 1, + sym_integer, + ACTIONS(2977), 1, + sym_float, + [56338] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2652), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56346] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2979), 2, + sym__newline, + sym__semicolon, + [56354] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2981), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [56362] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2983), 2, + sym__newline, + sym__semicolon, + [56370] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2985), 2, + sym__newline, + sym__semicolon, + [56378] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2987), 1, + sym_integer, + ACTIONS(2989), 1, + sym_float, + [56388] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2991), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56396] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2205), 2, + sym__newline, + sym__semicolon, + [56404] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2993), 1, + sym_integer, + ACTIONS(2995), 1, + sym_float, + [56414] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2997), 2, + sym__newline, + sym__semicolon, + [56422] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2817), 1, + anon_sym_COMMA, + ACTIONS(2999), 1, + anon_sym_RPAREN, + [56432] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3001), 2, + sym__newline, + sym__semicolon, + [56440] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2203), 2, + sym__newline, + sym__semicolon, + [56448] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3003), 2, + sym__newline, + sym__semicolon, + [56456] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3005), 1, + anon_sym_COMMA, + STATE(1337), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [56466] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2563), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56474] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2322), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56482] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3007), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56490] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3009), 2, + sym__newline, + sym__semicolon, + [56498] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3011), 1, + anon_sym_COMMA, + ACTIONS(3013), 1, + anon_sym_RBRACE, + [56508] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3015), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56516] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2832), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56524] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3017), 1, + anon_sym_COMMA, + STATE(1190), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [56534] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3019), 1, + anon_sym_RBRACE, + [56541] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3021), 1, + anon_sym_LPAREN, + [56548] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3023), 1, + anon_sym_RBRACK, + [56555] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3025), 1, + anon_sym_import, + [56562] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3027), 1, + anon_sym_RBRACE, + [56569] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3029), 1, + anon_sym_RBRACE, + [56576] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3031), 1, + anon_sym_RBRACE, + [56583] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2105), 1, + anon_sym_EQ, + [56590] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3033), 1, + anon_sym_COLON, + [56597] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3035), 1, + anon_sym_RPAREN, + [56604] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3037), 1, + anon_sym_RPAREN, + [56611] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3039), 1, + anon_sym_for, + [56618] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3041), 1, + anon_sym_RPAREN, + [56625] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3043), 1, + anon_sym_RPAREN, + [56632] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2827), 1, + anon_sym_in, + [56639] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_RBRACE, + [56646] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2785), 1, + anon_sym_in, + [56653] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3045), 1, + anon_sym_COLON, + [56660] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3047), 1, + anon_sym_COLON, + [56667] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3013), 1, + anon_sym_RBRACE, + [56674] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2559), 1, + anon_sym_RBRACE, + [56681] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1832), 1, + anon_sym_RBRACE, + [56688] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3049), 1, + anon_sym_COLON, + [56695] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3051), 1, + anon_sym_COLON, + [56702] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3053), 1, + anon_sym_RBRACK, + [56709] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3055), 1, + anon_sym_in, + [56716] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3057), 1, + anon_sym_RPAREN, + [56723] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3059), 1, + anon_sym_RPAREN, + [56730] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3061), 1, + anon_sym_RBRACE, + [56737] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3063), 1, + anon_sym_RPAREN, + [56744] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3065), 1, + anon_sym_COLON, + [56751] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3067), 1, + anon_sym_in, + [56758] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3069), 1, + anon_sym_RBRACK, + [56765] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3071), 1, + anon_sym_RBRACE, + [56772] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3073), 1, + anon_sym_RBRACE, + [56779] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3075), 1, + sym_identifier, + [56786] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3077), 1, + anon_sym_import, + [56793] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3079), 1, + anon_sym_RPAREN, + [56800] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3081), 1, + sym_identifier, + [56807] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3083), 1, + anon_sym_import, + [56814] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3085), 1, + sym_identifier, + [56821] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3087), 1, + anon_sym_in, + [56828] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3089), 1, + anon_sym_RPAREN, + [56835] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3091), 1, + sym_identifier, + [56842] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3093), 1, + sym_identifier, + [56849] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3095), 1, + sym_identifier, + [56856] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3097), 1, + anon_sym_COLON, + [56863] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3099), 1, + anon_sym_COLON, + [56870] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3101), 1, + anon_sym_COLON, + [56877] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2860), 1, + anon_sym_in, + [56884] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3103), 1, + anon_sym_RPAREN, + [56891] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3105), 1, + sym_identifier, + [56898] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3107), 1, + sym_identifier, + [56905] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3109), 1, + anon_sym_COLON, + [56912] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3111), 1, + anon_sym_COLON, + [56919] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3113), 1, + anon_sym_RBRACE, + [56926] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3115), 1, + anon_sym_RBRACE, + [56933] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3117), 1, + anon_sym_RBRACE, + [56940] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3119), 1, + anon_sym_COLON, + [56947] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3121), 1, + anon_sym_RPAREN, + [56954] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2293), 1, + anon_sym_COLON, + [56961] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2858), 1, + anon_sym_in, + [56968] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3123), 1, + anon_sym_RBRACK, + [56975] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3125), 1, + anon_sym_COLON, + [56982] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3127), 1, + anon_sym_RBRACE, + [56989] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3129), 1, + anon_sym_COLON, + [56996] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3131), 1, + anon_sym_COLON, + [57003] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2281), 1, + anon_sym_COLON, + [57010] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3133), 1, + anon_sym_RBRACK, + [57017] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3135), 1, + anon_sym_COLON, + [57024] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3137), 1, + anon_sym_RPAREN, + [57031] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3139), 1, + anon_sym_COLON, + [57038] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3141), 1, + sym_identifier, + [57045] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3143), 1, + anon_sym_COLON, + [57052] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2866), 1, + anon_sym_RBRACE, + [57059] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3145), 1, + anon_sym_COLON, + [57066] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3147), 1, + anon_sym_COLON, + [57073] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3149), 1, + anon_sym_COLON, + [57080] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3151), 1, + anon_sym_COLON, + [57087] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3153), 1, + anon_sym_RPAREN, + [57094] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3155), 1, + anon_sym_COLON, + [57101] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3157), 1, + anon_sym_COLON, + [57108] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3159), 1, + anon_sym_COLON, + [57115] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(876), 1, + anon_sym_def, + [57122] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3161), 1, + anon_sym_COLON, + [57129] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3163), 1, + sym_identifier, + [57136] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3165), 1, + anon_sym_COLON, + [57143] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3167), 1, + anon_sym_EQ, + [57150] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3169), 1, + anon_sym_COLON, + [57157] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3171), 1, + anon_sym_in, + [57164] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3173), 1, + anon_sym_COLON, + [57171] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3175), 1, + anon_sym_RBRACE, + [57178] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3177), 1, + anon_sym_RBRACK, + [57185] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3179), 1, + sym_identifier, + [57192] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3181), 1, + anon_sym_COLON, + [57199] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3183), 1, + sym_identifier, + [57206] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3185), 1, + anon_sym_COLON, + [57213] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3187), 1, + ts_builtin_sym_end, + [57220] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3189), 1, + anon_sym_RBRACK, + [57227] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3191), 1, + anon_sym_RBRACE, + [57234] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3193), 1, + anon_sym_COLON, + [57241] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3195), 1, + anon_sym_COLON, + [57248] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2246), 1, + anon_sym_COLON, + [57255] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3197), 1, + sym_identifier, + [57262] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3199), 1, + sym_identifier, + [57269] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3201), 1, + sym_identifier, + [57276] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3203), 1, + sym_identifier, + [57283] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3205), 1, + anon_sym_COLON, + [57290] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3207), 1, + anon_sym_RBRACE, + [57297] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3209), 1, + sym_identifier, + [57304] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3211), 1, + anon_sym_RBRACE, + [57311] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3213), 1, + sym_identifier, + [57318] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3215), 1, + sym_identifier, + [57325] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2320), 1, + anon_sym_COLON, + [57332] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2592), 1, + anon_sym_in, + [57339] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(894), 1, + anon_sym_def, + [57346] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3217), 1, + anon_sym_COLON, + [57353] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2590), 1, + anon_sym_in, + [57360] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2538), 1, + anon_sym_RBRACE, + [57367] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3219), 1, + anon_sym_COLON, +}; + +static const uint32_t ts_small_parse_table_map[] = { + [SMALL_STATE(155)] = 0, + [SMALL_STATE(156)] = 118, + [SMALL_STATE(157)] = 236, + [SMALL_STATE(158)] = 354, + [SMALL_STATE(159)] = 464, + [SMALL_STATE(160)] = 579, + [SMALL_STATE(161)] = 694, + [SMALL_STATE(162)] = 809, + [SMALL_STATE(163)] = 926, + [SMALL_STATE(164)] = 1045, + [SMALL_STATE(165)] = 1162, + [SMALL_STATE(166)] = 1262, + [SMALL_STATE(167)] = 1376, + [SMALL_STATE(168)] = 1480, + [SMALL_STATE(169)] = 1584, + [SMALL_STATE(170)] = 1698, + [SMALL_STATE(171)] = 1812, + [SMALL_STATE(172)] = 1916, + [SMALL_STATE(173)] = 2016, + [SMALL_STATE(174)] = 2123, + [SMALL_STATE(175)] = 2224, + [SMALL_STATE(176)] = 2325, + [SMALL_STATE(177)] = 2430, + [SMALL_STATE(178)] = 2535, + [SMALL_STATE(179)] = 2638, + [SMALL_STATE(180)] = 2743, + [SMALL_STATE(181)] = 2848, + [SMALL_STATE(182)] = 2953, + [SMALL_STATE(183)] = 3054, + [SMALL_STATE(184)] = 3157, + [SMALL_STATE(185)] = 3262, + [SMALL_STATE(186)] = 3360, + [SMALL_STATE(187)] = 3462, + [SMALL_STATE(188)] = 3564, + [SMALL_STATE(189)] = 3668, + [SMALL_STATE(190)] = 3770, + [SMALL_STATE(191)] = 3872, + [SMALL_STATE(192)] = 3974, + [SMALL_STATE(193)] = 4072, + [SMALL_STATE(194)] = 4176, + [SMALL_STATE(195)] = 4278, + [SMALL_STATE(196)] = 4380, + [SMALL_STATE(197)] = 4482, + [SMALL_STATE(198)] = 4584, + [SMALL_STATE(199)] = 4686, + [SMALL_STATE(200)] = 4788, + [SMALL_STATE(201)] = 4894, + [SMALL_STATE(202)] = 4996, + [SMALL_STATE(203)] = 5094, + [SMALL_STATE(204)] = 5196, + [SMALL_STATE(205)] = 5300, + [SMALL_STATE(206)] = 5402, + [SMALL_STATE(207)] = 5504, + [SMALL_STATE(208)] = 5606, + [SMALL_STATE(209)] = 5708, + [SMALL_STATE(210)] = 5810, + [SMALL_STATE(211)] = 5912, + [SMALL_STATE(212)] = 6018, + [SMALL_STATE(213)] = 6122, + [SMALL_STATE(214)] = 6220, + [SMALL_STATE(215)] = 6322, + [SMALL_STATE(216)] = 6424, + [SMALL_STATE(217)] = 6526, + [SMALL_STATE(218)] = 6628, + [SMALL_STATE(219)] = 6689, + [SMALL_STATE(220)] = 6750, + [SMALL_STATE(221)] = 6811, + [SMALL_STATE(222)] = 6872, + [SMALL_STATE(223)] = 6971, + [SMALL_STATE(224)] = 7032, + [SMALL_STATE(225)] = 7131, + [SMALL_STATE(226)] = 7230, + [SMALL_STATE(227)] = 7291, + [SMALL_STATE(228)] = 7352, + [SMALL_STATE(229)] = 7424, + [SMALL_STATE(230)] = 7496, + [SMALL_STATE(231)] = 7592, + [SMALL_STATE(232)] = 7690, + [SMALL_STATE(233)] = 7762, + [SMALL_STATE(234)] = 7860, + [SMALL_STATE(235)] = 7932, + [SMALL_STATE(236)] = 8030, + [SMALL_STATE(237)] = 8128, + [SMALL_STATE(238)] = 8200, + [SMALL_STATE(239)] = 8272, + [SMALL_STATE(240)] = 8370, + [SMALL_STATE(241)] = 8442, + [SMALL_STATE(242)] = 8514, + [SMALL_STATE(243)] = 8609, + [SMALL_STATE(244)] = 8704, + [SMALL_STATE(245)] = 8799, + [SMALL_STATE(246)] = 8894, + [SMALL_STATE(247)] = 8989, + [SMALL_STATE(248)] = 9062, + [SMALL_STATE(249)] = 9157, + [SMALL_STATE(250)] = 9252, + [SMALL_STATE(251)] = 9347, + [SMALL_STATE(252)] = 9442, + [SMALL_STATE(253)] = 9537, + [SMALL_STATE(254)] = 9632, + [SMALL_STATE(255)] = 9705, + [SMALL_STATE(256)] = 9799, + [SMALL_STATE(257)] = 9893, + [SMALL_STATE(258)] = 9987, + [SMALL_STATE(259)] = 10055, + [SMALL_STATE(260)] = 10147, + [SMALL_STATE(261)] = 10241, + [SMALL_STATE(262)] = 10335, + [SMALL_STATE(263)] = 10429, + [SMALL_STATE(264)] = 10497, + [SMALL_STATE(265)] = 10589, + [SMALL_STATE(266)] = 10657, + [SMALL_STATE(267)] = 10719, + [SMALL_STATE(268)] = 10781, + [SMALL_STATE(269)] = 10849, + [SMALL_STATE(270)] = 10943, + [SMALL_STATE(271)] = 11005, + [SMALL_STATE(272)] = 11067, + [SMALL_STATE(273)] = 11135, + [SMALL_STATE(274)] = 11229, + [SMALL_STATE(275)] = 11323, + [SMALL_STATE(276)] = 11415, + [SMALL_STATE(277)] = 11483, + [SMALL_STATE(278)] = 11551, + [SMALL_STATE(279)] = 11621, + [SMALL_STATE(280)] = 11689, + [SMALL_STATE(281)] = 11778, + [SMALL_STATE(282)] = 11835, + [SMALL_STATE(283)] = 11892, + [SMALL_STATE(284)] = 11983, + [SMALL_STATE(285)] = 12050, + [SMALL_STATE(286)] = 12113, + [SMALL_STATE(287)] = 12202, + [SMALL_STATE(288)] = 12259, + [SMALL_STATE(289)] = 12316, + [SMALL_STATE(290)] = 12405, + [SMALL_STATE(291)] = 12496, + [SMALL_STATE(292)] = 12553, + [SMALL_STATE(293)] = 12644, + [SMALL_STATE(294)] = 12733, + [SMALL_STATE(295)] = 12822, + [SMALL_STATE(296)] = 12911, + [SMALL_STATE(297)] = 13002, + [SMALL_STATE(298)] = 13091, + [SMALL_STATE(299)] = 13182, + [SMALL_STATE(300)] = 13273, + [SMALL_STATE(301)] = 13362, + [SMALL_STATE(302)] = 13453, + [SMALL_STATE(303)] = 13544, + [SMALL_STATE(304)] = 13633, + [SMALL_STATE(305)] = 13722, + [SMALL_STATE(306)] = 13779, + [SMALL_STATE(307)] = 13868, + [SMALL_STATE(308)] = 13931, + [SMALL_STATE(309)] = 13988, + [SMALL_STATE(310)] = 14077, + [SMALL_STATE(311)] = 14168, + [SMALL_STATE(312)] = 14225, + [SMALL_STATE(313)] = 14314, + [SMALL_STATE(314)] = 14371, + [SMALL_STATE(315)] = 14462, + [SMALL_STATE(316)] = 14519, + [SMALL_STATE(317)] = 14575, + [SMALL_STATE(318)] = 14631, + [SMALL_STATE(319)] = 14687, + [SMALL_STATE(320)] = 14743, + [SMALL_STATE(321)] = 14799, + [SMALL_STATE(322)] = 14887, + [SMALL_STATE(323)] = 14975, + [SMALL_STATE(324)] = 15063, + [SMALL_STATE(325)] = 15151, + [SMALL_STATE(326)] = 15207, + [SMALL_STATE(327)] = 15263, + [SMALL_STATE(328)] = 15319, + [SMALL_STATE(329)] = 15375, + [SMALL_STATE(330)] = 15431, + [SMALL_STATE(331)] = 15495, + [SMALL_STATE(332)] = 15551, + [SMALL_STATE(333)] = 15607, + [SMALL_STATE(334)] = 15663, + [SMALL_STATE(335)] = 15727, + [SMALL_STATE(336)] = 15815, + [SMALL_STATE(337)] = 15871, + [SMALL_STATE(338)] = 15927, + [SMALL_STATE(339)] = 15991, + [SMALL_STATE(340)] = 16055, + [SMALL_STATE(341)] = 16111, + [SMALL_STATE(342)] = 16199, + [SMALL_STATE(343)] = 16255, + [SMALL_STATE(344)] = 16311, + [SMALL_STATE(345)] = 16367, + [SMALL_STATE(346)] = 16427, + [SMALL_STATE(347)] = 16515, + [SMALL_STATE(348)] = 16575, + [SMALL_STATE(349)] = 16663, + [SMALL_STATE(350)] = 16723, + [SMALL_STATE(351)] = 16811, + [SMALL_STATE(352)] = 16899, + [SMALL_STATE(353)] = 16955, + [SMALL_STATE(354)] = 17011, + [SMALL_STATE(355)] = 17067, + [SMALL_STATE(356)] = 17123, + [SMALL_STATE(357)] = 17179, + [SMALL_STATE(358)] = 17235, + [SMALL_STATE(359)] = 17291, + [SMALL_STATE(360)] = 17347, + [SMALL_STATE(361)] = 17403, + [SMALL_STATE(362)] = 17491, + [SMALL_STATE(363)] = 17547, + [SMALL_STATE(364)] = 17603, + [SMALL_STATE(365)] = 17691, + [SMALL_STATE(366)] = 17747, + [SMALL_STATE(367)] = 17803, + [SMALL_STATE(368)] = 17859, + [SMALL_STATE(369)] = 17947, + [SMALL_STATE(370)] = 18003, + [SMALL_STATE(371)] = 18059, + [SMALL_STATE(372)] = 18115, + [SMALL_STATE(373)] = 18171, + [SMALL_STATE(374)] = 18227, + [SMALL_STATE(375)] = 18283, + [SMALL_STATE(376)] = 18339, + [SMALL_STATE(377)] = 18395, + [SMALL_STATE(378)] = 18451, + [SMALL_STATE(379)] = 18507, + [SMALL_STATE(380)] = 18563, + [SMALL_STATE(381)] = 18623, + [SMALL_STATE(382)] = 18679, + [SMALL_STATE(383)] = 18735, + [SMALL_STATE(384)] = 18823, + [SMALL_STATE(385)] = 18879, + [SMALL_STATE(386)] = 18964, + [SMALL_STATE(387)] = 19049, + [SMALL_STATE(388)] = 19108, + [SMALL_STATE(389)] = 19163, + [SMALL_STATE(390)] = 19248, + [SMALL_STATE(391)] = 19333, + [SMALL_STATE(392)] = 19418, + [SMALL_STATE(393)] = 19503, + [SMALL_STATE(394)] = 19590, + [SMALL_STATE(395)] = 19675, + [SMALL_STATE(396)] = 19760, + [SMALL_STATE(397)] = 19845, + [SMALL_STATE(398)] = 19930, + [SMALL_STATE(399)] = 20015, + [SMALL_STATE(400)] = 20100, + [SMALL_STATE(401)] = 20185, + [SMALL_STATE(402)] = 20244, + [SMALL_STATE(403)] = 20329, + [SMALL_STATE(404)] = 20384, + [SMALL_STATE(405)] = 20469, + [SMALL_STATE(406)] = 20554, + [SMALL_STATE(407)] = 20639, + [SMALL_STATE(408)] = 20694, + [SMALL_STATE(409)] = 20753, + [SMALL_STATE(410)] = 20838, + [SMALL_STATE(411)] = 20923, + [SMALL_STATE(412)] = 21008, + [SMALL_STATE(413)] = 21093, + [SMALL_STATE(414)] = 21152, + [SMALL_STATE(415)] = 21211, + [SMALL_STATE(416)] = 21296, + [SMALL_STATE(417)] = 21381, + [SMALL_STATE(418)] = 21466, + [SMALL_STATE(419)] = 21525, + [SMALL_STATE(420)] = 21610, + [SMALL_STATE(421)] = 21665, + [SMALL_STATE(422)] = 21720, + [SMALL_STATE(423)] = 21805, + [SMALL_STATE(424)] = 21890, + [SMALL_STATE(425)] = 21975, + [SMALL_STATE(426)] = 22060, + [SMALL_STATE(427)] = 22145, + [SMALL_STATE(428)] = 22204, + [SMALL_STATE(429)] = 22263, + [SMALL_STATE(430)] = 22348, + [SMALL_STATE(431)] = 22407, + [SMALL_STATE(432)] = 22468, + [SMALL_STATE(433)] = 22527, + [SMALL_STATE(434)] = 22582, + [SMALL_STATE(435)] = 22667, + [SMALL_STATE(436)] = 22752, + [SMALL_STATE(437)] = 22837, + [SMALL_STATE(438)] = 22922, + [SMALL_STATE(439)] = 23007, + [SMALL_STATE(440)] = 23092, + [SMALL_STATE(441)] = 23151, + [SMALL_STATE(442)] = 23212, + [SMALL_STATE(443)] = 23297, + [SMALL_STATE(444)] = 23382, + [SMALL_STATE(445)] = 23467, + [SMALL_STATE(446)] = 23552, + [SMALL_STATE(447)] = 23637, + [SMALL_STATE(448)] = 23722, + [SMALL_STATE(449)] = 23807, + [SMALL_STATE(450)] = 23868, + [SMALL_STATE(451)] = 23953, + [SMALL_STATE(452)] = 24038, + [SMALL_STATE(453)] = 24123, + [SMALL_STATE(454)] = 24208, + [SMALL_STATE(455)] = 24267, + [SMALL_STATE(456)] = 24352, + [SMALL_STATE(457)] = 24437, + [SMALL_STATE(458)] = 24522, + [SMALL_STATE(459)] = 24607, + [SMALL_STATE(460)] = 24692, + [SMALL_STATE(461)] = 24777, + [SMALL_STATE(462)] = 24862, + [SMALL_STATE(463)] = 24947, + [SMALL_STATE(464)] = 25032, + [SMALL_STATE(465)] = 25091, + [SMALL_STATE(466)] = 25176, + [SMALL_STATE(467)] = 25261, + [SMALL_STATE(468)] = 25320, + [SMALL_STATE(469)] = 25405, + [SMALL_STATE(470)] = 25490, + [SMALL_STATE(471)] = 25575, + [SMALL_STATE(472)] = 25660, + [SMALL_STATE(473)] = 25719, + [SMALL_STATE(474)] = 25804, + [SMALL_STATE(475)] = 25889, + [SMALL_STATE(476)] = 25950, + [SMALL_STATE(477)] = 26035, + [SMALL_STATE(478)] = 26120, + [SMALL_STATE(479)] = 26179, + [SMALL_STATE(480)] = 26264, + [SMALL_STATE(481)] = 26349, + [SMALL_STATE(482)] = 26434, + [SMALL_STATE(483)] = 26519, + [SMALL_STATE(484)] = 26604, + [SMALL_STATE(485)] = 26689, + [SMALL_STATE(486)] = 26743, + [SMALL_STATE(487)] = 26797, + [SMALL_STATE(488)] = 26851, + [SMALL_STATE(489)] = 26905, + [SMALL_STATE(490)] = 26959, + [SMALL_STATE(491)] = 27013, + [SMALL_STATE(492)] = 27067, + [SMALL_STATE(493)] = 27121, + [SMALL_STATE(494)] = 27175, + [SMALL_STATE(495)] = 27229, + [SMALL_STATE(496)] = 27283, + [SMALL_STATE(497)] = 27337, + [SMALL_STATE(498)] = 27390, + [SMALL_STATE(499)] = 27443, + [SMALL_STATE(500)] = 27496, + [SMALL_STATE(501)] = 27549, + [SMALL_STATE(502)] = 27602, + [SMALL_STATE(503)] = 27655, + [SMALL_STATE(504)] = 27708, + [SMALL_STATE(505)] = 27761, + [SMALL_STATE(506)] = 27814, + [SMALL_STATE(507)] = 27867, + [SMALL_STATE(508)] = 27920, + [SMALL_STATE(509)] = 27973, + [SMALL_STATE(510)] = 28026, + [SMALL_STATE(511)] = 28079, + [SMALL_STATE(512)] = 28132, + [SMALL_STATE(513)] = 28185, + [SMALL_STATE(514)] = 28238, + [SMALL_STATE(515)] = 28291, + [SMALL_STATE(516)] = 28344, + [SMALL_STATE(517)] = 28397, + [SMALL_STATE(518)] = 28450, + [SMALL_STATE(519)] = 28503, + [SMALL_STATE(520)] = 28556, + [SMALL_STATE(521)] = 28609, + [SMALL_STATE(522)] = 28662, + [SMALL_STATE(523)] = 28715, + [SMALL_STATE(524)] = 28768, + [SMALL_STATE(525)] = 28821, + [SMALL_STATE(526)] = 28874, + [SMALL_STATE(527)] = 28927, + [SMALL_STATE(528)] = 28980, + [SMALL_STATE(529)] = 29033, + [SMALL_STATE(530)] = 29086, + [SMALL_STATE(531)] = 29139, + [SMALL_STATE(532)] = 29192, + [SMALL_STATE(533)] = 29245, + [SMALL_STATE(534)] = 29298, + [SMALL_STATE(535)] = 29351, + [SMALL_STATE(536)] = 29404, + [SMALL_STATE(537)] = 29457, + [SMALL_STATE(538)] = 29510, + [SMALL_STATE(539)] = 29563, + [SMALL_STATE(540)] = 29616, + [SMALL_STATE(541)] = 29669, + [SMALL_STATE(542)] = 29722, + [SMALL_STATE(543)] = 29775, + [SMALL_STATE(544)] = 29828, + [SMALL_STATE(545)] = 29881, + [SMALL_STATE(546)] = 29934, + [SMALL_STATE(547)] = 29987, + [SMALL_STATE(548)] = 30040, + [SMALL_STATE(549)] = 30093, + [SMALL_STATE(550)] = 30146, + [SMALL_STATE(551)] = 30199, + [SMALL_STATE(552)] = 30252, + [SMALL_STATE(553)] = 30305, + [SMALL_STATE(554)] = 30358, + [SMALL_STATE(555)] = 30411, + [SMALL_STATE(556)] = 30464, + [SMALL_STATE(557)] = 30517, + [SMALL_STATE(558)] = 30570, + [SMALL_STATE(559)] = 30623, + [SMALL_STATE(560)] = 30676, + [SMALL_STATE(561)] = 30729, + [SMALL_STATE(562)] = 30782, + [SMALL_STATE(563)] = 30835, + [SMALL_STATE(564)] = 30888, + [SMALL_STATE(565)] = 30941, + [SMALL_STATE(566)] = 30994, + [SMALL_STATE(567)] = 31047, + [SMALL_STATE(568)] = 31100, + [SMALL_STATE(569)] = 31153, + [SMALL_STATE(570)] = 31206, + [SMALL_STATE(571)] = 31259, + [SMALL_STATE(572)] = 31312, + [SMALL_STATE(573)] = 31365, + [SMALL_STATE(574)] = 31418, + [SMALL_STATE(575)] = 31471, + [SMALL_STATE(576)] = 31524, + [SMALL_STATE(577)] = 31577, + [SMALL_STATE(578)] = 31630, + [SMALL_STATE(579)] = 31683, + [SMALL_STATE(580)] = 31736, + [SMALL_STATE(581)] = 31789, + [SMALL_STATE(582)] = 31842, + [SMALL_STATE(583)] = 31895, + [SMALL_STATE(584)] = 31948, + [SMALL_STATE(585)] = 32001, + [SMALL_STATE(586)] = 32054, + [SMALL_STATE(587)] = 32107, + [SMALL_STATE(588)] = 32160, + [SMALL_STATE(589)] = 32213, + [SMALL_STATE(590)] = 32266, + [SMALL_STATE(591)] = 32319, + [SMALL_STATE(592)] = 32372, + [SMALL_STATE(593)] = 32425, + [SMALL_STATE(594)] = 32478, + [SMALL_STATE(595)] = 32531, + [SMALL_STATE(596)] = 32613, + [SMALL_STATE(597)] = 32697, + [SMALL_STATE(598)] = 32779, + [SMALL_STATE(599)] = 32834, + [SMALL_STATE(600)] = 32889, + [SMALL_STATE(601)] = 32944, + [SMALL_STATE(602)] = 33025, + [SMALL_STATE(603)] = 33106, + [SMALL_STATE(604)] = 33187, + [SMALL_STATE(605)] = 33268, + [SMALL_STATE(606)] = 33349, + [SMALL_STATE(607)] = 33430, + [SMALL_STATE(608)] = 33508, + [SMALL_STATE(609)] = 33586, + [SMALL_STATE(610)] = 33635, + [SMALL_STATE(611)] = 33684, + [SMALL_STATE(612)] = 33732, + [SMALL_STATE(613)] = 33780, + [SMALL_STATE(614)] = 33828, + [SMALL_STATE(615)] = 33876, + [SMALL_STATE(616)] = 33924, + [SMALL_STATE(617)] = 33972, + [SMALL_STATE(618)] = 34020, + [SMALL_STATE(619)] = 34068, + [SMALL_STATE(620)] = 34116, + [SMALL_STATE(621)] = 34164, + [SMALL_STATE(622)] = 34212, + [SMALL_STATE(623)] = 34260, + [SMALL_STATE(624)] = 34308, + [SMALL_STATE(625)] = 34356, + [SMALL_STATE(626)] = 34404, + [SMALL_STATE(627)] = 34452, + [SMALL_STATE(628)] = 34500, + [SMALL_STATE(629)] = 34548, + [SMALL_STATE(630)] = 34596, + [SMALL_STATE(631)] = 34678, + [SMALL_STATE(632)] = 34726, + [SMALL_STATE(633)] = 34774, + [SMALL_STATE(634)] = 34822, + [SMALL_STATE(635)] = 34870, + [SMALL_STATE(636)] = 34918, + [SMALL_STATE(637)] = 34990, + [SMALL_STATE(638)] = 35038, + [SMALL_STATE(639)] = 35086, + [SMALL_STATE(640)] = 35134, + [SMALL_STATE(641)] = 35182, + [SMALL_STATE(642)] = 35230, + [SMALL_STATE(643)] = 35278, + [SMALL_STATE(644)] = 35360, + [SMALL_STATE(645)] = 35408, + [SMALL_STATE(646)] = 35465, + [SMALL_STATE(647)] = 35532, + [SMALL_STATE(648)] = 35589, + [SMALL_STATE(649)] = 35646, + [SMALL_STATE(650)] = 35709, + [SMALL_STATE(651)] = 35766, + [SMALL_STATE(652)] = 35827, + [SMALL_STATE(653)] = 35898, + [SMALL_STATE(654)] = 35967, + [SMALL_STATE(655)] = 36028, + [SMALL_STATE(656)] = 36085, + [SMALL_STATE(657)] = 36150, + [SMALL_STATE(658)] = 36215, + [SMALL_STATE(659)] = 36284, + [SMALL_STATE(660)] = 36355, + [SMALL_STATE(661)] = 36422, + [SMALL_STATE(662)] = 36479, + [SMALL_STATE(663)] = 36550, + [SMALL_STATE(664)] = 36621, + [SMALL_STATE(665)] = 36692, + [SMALL_STATE(666)] = 36763, + [SMALL_STATE(667)] = 36826, + [SMALL_STATE(668)] = 36874, + [SMALL_STATE(669)] = 36922, + [SMALL_STATE(670)] = 36988, + [SMALL_STATE(671)] = 37054, + [SMALL_STATE(672)] = 37100, + [SMALL_STATE(673)] = 37146, + [SMALL_STATE(674)] = 37212, + [SMALL_STATE(675)] = 37260, + [SMALL_STATE(676)] = 37308, + [SMALL_STATE(677)] = 37374, + [SMALL_STATE(678)] = 37424, + [SMALL_STATE(679)] = 37474, + [SMALL_STATE(680)] = 37537, + [SMALL_STATE(681)] = 37600, + [SMALL_STATE(682)] = 37663, + [SMALL_STATE(683)] = 37726, + [SMALL_STATE(684)] = 37789, + [SMALL_STATE(685)] = 37868, + [SMALL_STATE(686)] = 37935, + [SMALL_STATE(687)] = 37998, + [SMALL_STATE(688)] = 38061, + [SMALL_STATE(689)] = 38124, + [SMALL_STATE(690)] = 38173, + [SMALL_STATE(691)] = 38236, + [SMALL_STATE(692)] = 38299, + [SMALL_STATE(693)] = 38362, + [SMALL_STATE(694)] = 38425, + [SMALL_STATE(695)] = 38488, + [SMALL_STATE(696)] = 38551, + [SMALL_STATE(697)] = 38614, + [SMALL_STATE(698)] = 38677, + [SMALL_STATE(699)] = 38740, + [SMALL_STATE(700)] = 38803, + [SMALL_STATE(701)] = 38866, + [SMALL_STATE(702)] = 38929, + [SMALL_STATE(703)] = 38992, + [SMALL_STATE(704)] = 39055, + [SMALL_STATE(705)] = 39118, + [SMALL_STATE(706)] = 39181, + [SMALL_STATE(707)] = 39244, + [SMALL_STATE(708)] = 39307, + [SMALL_STATE(709)] = 39370, + [SMALL_STATE(710)] = 39433, + [SMALL_STATE(711)] = 39496, + [SMALL_STATE(712)] = 39559, + [SMALL_STATE(713)] = 39622, + [SMALL_STATE(714)] = 39671, + [SMALL_STATE(715)] = 39734, + [SMALL_STATE(716)] = 39801, + [SMALL_STATE(717)] = 39864, + [SMALL_STATE(718)] = 39927, + [SMALL_STATE(719)] = 39990, + [SMALL_STATE(720)] = 40053, + [SMALL_STATE(721)] = 40102, + [SMALL_STATE(722)] = 40165, + [SMALL_STATE(723)] = 40228, + [SMALL_STATE(724)] = 40291, + [SMALL_STATE(725)] = 40354, + [SMALL_STATE(726)] = 40399, + [SMALL_STATE(727)] = 40462, + [SMALL_STATE(728)] = 40507, + [SMALL_STATE(729)] = 40570, + [SMALL_STATE(730)] = 40633, + [SMALL_STATE(731)] = 40696, + [SMALL_STATE(732)] = 40764, + [SMALL_STATE(733)] = 40824, + [SMALL_STATE(734)] = 40892, + [SMALL_STATE(735)] = 40960, + [SMALL_STATE(736)] = 41014, + [SMALL_STATE(737)] = 41058, + [SMALL_STATE(738)] = 41124, + [SMALL_STATE(739)] = 41182, + [SMALL_STATE(740)] = 41236, + [SMALL_STATE(741)] = 41312, + [SMALL_STATE(742)] = 41376, + [SMALL_STATE(743)] = 41424, + [SMALL_STATE(744)] = 41486, + [SMALL_STATE(745)] = 41530, + [SMALL_STATE(746)] = 41584, + [SMALL_STATE(747)] = 41651, + [SMALL_STATE(748)] = 41708, + [SMALL_STATE(749)] = 41753, + [SMALL_STATE(750)] = 41800, + [SMALL_STATE(751)] = 41865, + [SMALL_STATE(752)] = 41932, + [SMALL_STATE(753)] = 41991, + [SMALL_STATE(754)] = 42044, + [SMALL_STATE(755)] = 42089, + [SMALL_STATE(756)] = 42134, + [SMALL_STATE(757)] = 42187, + [SMALL_STATE(758)] = 42254, + [SMALL_STATE(759)] = 42297, + [SMALL_STATE(760)] = 42344, + [SMALL_STATE(761)] = 42391, + [SMALL_STATE(762)] = 42454, + [SMALL_STATE(763)] = 42499, + [SMALL_STATE(764)] = 42560, + [SMALL_STATE(765)] = 42607, + [SMALL_STATE(766)] = 42652, + [SMALL_STATE(767)] = 42705, + [SMALL_STATE(768)] = 42750, + [SMALL_STATE(769)] = 42795, + [SMALL_STATE(770)] = 42838, + [SMALL_STATE(771)] = 42883, + [SMALL_STATE(772)] = 42925, + [SMALL_STATE(773)] = 42967, + [SMALL_STATE(774)] = 43009, + [SMALL_STATE(775)] = 43051, + [SMALL_STATE(776)] = 43093, + [SMALL_STATE(777)] = 43135, + [SMALL_STATE(778)] = 43177, + [SMALL_STATE(779)] = 43219, + [SMALL_STATE(780)] = 43263, + [SMALL_STATE(781)] = 43305, + [SMALL_STATE(782)] = 43347, + [SMALL_STATE(783)] = 43389, + [SMALL_STATE(784)] = 43431, + [SMALL_STATE(785)] = 43473, + [SMALL_STATE(786)] = 43515, + [SMALL_STATE(787)] = 43557, + [SMALL_STATE(788)] = 43599, + [SMALL_STATE(789)] = 43641, + [SMALL_STATE(790)] = 43685, + [SMALL_STATE(791)] = 43727, + [SMALL_STATE(792)] = 43769, + [SMALL_STATE(793)] = 43811, + [SMALL_STATE(794)] = 43853, + [SMALL_STATE(795)] = 43895, + [SMALL_STATE(796)] = 43937, + [SMALL_STATE(797)] = 43979, + [SMALL_STATE(798)] = 44021, + [SMALL_STATE(799)] = 44065, + [SMALL_STATE(800)] = 44107, + [SMALL_STATE(801)] = 44149, + [SMALL_STATE(802)] = 44193, + [SMALL_STATE(803)] = 44235, + [SMALL_STATE(804)] = 44277, + [SMALL_STATE(805)] = 44319, + [SMALL_STATE(806)] = 44361, + [SMALL_STATE(807)] = 44405, + [SMALL_STATE(808)] = 44447, + [SMALL_STATE(809)] = 44489, + [SMALL_STATE(810)] = 44530, + [SMALL_STATE(811)] = 44571, + [SMALL_STATE(812)] = 44612, + [SMALL_STATE(813)] = 44657, + [SMALL_STATE(814)] = 44698, + [SMALL_STATE(815)] = 44739, + [SMALL_STATE(816)] = 44780, + [SMALL_STATE(817)] = 44821, + [SMALL_STATE(818)] = 44862, + [SMALL_STATE(819)] = 44903, + [SMALL_STATE(820)] = 44944, + [SMALL_STATE(821)] = 44985, + [SMALL_STATE(822)] = 45026, + [SMALL_STATE(823)] = 45067, + [SMALL_STATE(824)] = 45108, + [SMALL_STATE(825)] = 45149, + [SMALL_STATE(826)] = 45190, + [SMALL_STATE(827)] = 45231, + [SMALL_STATE(828)] = 45272, + [SMALL_STATE(829)] = 45313, + [SMALL_STATE(830)] = 45354, + [SMALL_STATE(831)] = 45395, + [SMALL_STATE(832)] = 45436, + [SMALL_STATE(833)] = 45477, + [SMALL_STATE(834)] = 45518, + [SMALL_STATE(835)] = 45559, + [SMALL_STATE(836)] = 45600, + [SMALL_STATE(837)] = 45641, + [SMALL_STATE(838)] = 45686, + [SMALL_STATE(839)] = 45727, + [SMALL_STATE(840)] = 45768, + [SMALL_STATE(841)] = 45809, + [SMALL_STATE(842)] = 45850, + [SMALL_STATE(843)] = 45891, + [SMALL_STATE(844)] = 45932, + [SMALL_STATE(845)] = 45973, + [SMALL_STATE(846)] = 46014, + [SMALL_STATE(847)] = 46055, + [SMALL_STATE(848)] = 46096, + [SMALL_STATE(849)] = 46137, + [SMALL_STATE(850)] = 46211, + [SMALL_STATE(851)] = 46285, + [SMALL_STATE(852)] = 46359, + [SMALL_STATE(853)] = 46433, + [SMALL_STATE(854)] = 46506, + [SMALL_STATE(855)] = 46577, + [SMALL_STATE(856)] = 46648, + [SMALL_STATE(857)] = 46719, + [SMALL_STATE(858)] = 46790, + [SMALL_STATE(859)] = 46861, + [SMALL_STATE(860)] = 46929, + [SMALL_STATE(861)] = 47001, + [SMALL_STATE(862)] = 47073, + [SMALL_STATE(863)] = 47145, + [SMALL_STATE(864)] = 47211, + [SMALL_STATE(865)] = 47274, + [SMALL_STATE(866)] = 47337, + [SMALL_STATE(867)] = 47392, + [SMALL_STATE(868)] = 47447, + [SMALL_STATE(869)] = 47487, + [SMALL_STATE(870)] = 47527, + [SMALL_STATE(871)] = 47567, + [SMALL_STATE(872)] = 47607, + [SMALL_STATE(873)] = 47637, + [SMALL_STATE(874)] = 47662, + [SMALL_STATE(875)] = 47687, + [SMALL_STATE(876)] = 47712, + [SMALL_STATE(877)] = 47737, + [SMALL_STATE(878)] = 47774, + [SMALL_STATE(879)] = 47811, + [SMALL_STATE(880)] = 47840, + [SMALL_STATE(881)] = 47869, + [SMALL_STATE(882)] = 47903, + [SMALL_STATE(883)] = 47949, + [SMALL_STATE(884)] = 47983, + [SMALL_STATE(885)] = 48011, + [SMALL_STATE(886)] = 48054, + [SMALL_STATE(887)] = 48097, + [SMALL_STATE(888)] = 48140, + [SMALL_STATE(889)] = 48183, + [SMALL_STATE(890)] = 48214, + [SMALL_STATE(891)] = 48257, + [SMALL_STATE(892)] = 48303, + [SMALL_STATE(893)] = 48349, + [SMALL_STATE(894)] = 48389, + [SMALL_STATE(895)] = 48435, + [SMALL_STATE(896)] = 48472, + [SMALL_STATE(897)] = 48509, + [SMALL_STATE(898)] = 48534, + [SMALL_STATE(899)] = 48571, + [SMALL_STATE(900)] = 48608, + [SMALL_STATE(901)] = 48630, + [SMALL_STATE(902)] = 48652, + [SMALL_STATE(903)] = 48686, + [SMALL_STATE(904)] = 48720, + [SMALL_STATE(905)] = 48742, + [SMALL_STATE(906)] = 48779, + [SMALL_STATE(907)] = 48801, + [SMALL_STATE(908)] = 48838, + [SMALL_STATE(909)] = 48861, + [SMALL_STATE(910)] = 48886, + [SMALL_STATE(911)] = 48909, + [SMALL_STATE(912)] = 48946, + [SMALL_STATE(913)] = 48971, + [SMALL_STATE(914)] = 48992, + [SMALL_STATE(915)] = 49015, + [SMALL_STATE(916)] = 49052, + [SMALL_STATE(917)] = 49073, + [SMALL_STATE(918)] = 49090, + [SMALL_STATE(919)] = 49127, + [SMALL_STATE(920)] = 49150, + [SMALL_STATE(921)] = 49169, + [SMALL_STATE(922)] = 49190, + [SMALL_STATE(923)] = 49213, + [SMALL_STATE(924)] = 49238, + [SMALL_STATE(925)] = 49261, + [SMALL_STATE(926)] = 49284, + [SMALL_STATE(927)] = 49305, + [SMALL_STATE(928)] = 49326, + [SMALL_STATE(929)] = 49349, + [SMALL_STATE(930)] = 49376, + [SMALL_STATE(931)] = 49410, + [SMALL_STATE(932)] = 49444, + [SMALL_STATE(933)] = 49478, + [SMALL_STATE(934)] = 49500, + [SMALL_STATE(935)] = 49530, + [SMALL_STATE(936)] = 49564, + [SMALL_STATE(937)] = 49594, + [SMALL_STATE(938)] = 49624, + [SMALL_STATE(939)] = 49654, + [SMALL_STATE(940)] = 49676, + [SMALL_STATE(941)] = 49710, + [SMALL_STATE(942)] = 49744, + [SMALL_STATE(943)] = 49774, + [SMALL_STATE(944)] = 49792, + [SMALL_STATE(945)] = 49822, + [SMALL_STATE(946)] = 49856, + [SMALL_STATE(947)] = 49890, + [SMALL_STATE(948)] = 49912, + [SMALL_STATE(949)] = 49934, + [SMALL_STATE(950)] = 49964, + [SMALL_STATE(951)] = 49994, + [SMALL_STATE(952)] = 50012, + [SMALL_STATE(953)] = 50042, + [SMALL_STATE(954)] = 50076, + [SMALL_STATE(955)] = 50095, + [SMALL_STATE(956)] = 50118, + [SMALL_STATE(957)] = 50141, + [SMALL_STATE(958)] = 50160, + [SMALL_STATE(959)] = 50179, + [SMALL_STATE(960)] = 50202, + [SMALL_STATE(961)] = 50227, + [SMALL_STATE(962)] = 50246, + [SMALL_STATE(963)] = 50265, + [SMALL_STATE(964)] = 50284, + [SMALL_STATE(965)] = 50302, + [SMALL_STATE(966)] = 50326, + [SMALL_STATE(967)] = 50340, + [SMALL_STATE(968)] = 50354, + [SMALL_STATE(969)] = 50368, + [SMALL_STATE(970)] = 50382, + [SMALL_STATE(971)] = 50396, + [SMALL_STATE(972)] = 50412, + [SMALL_STATE(973)] = 50426, + [SMALL_STATE(974)] = 50440, + [SMALL_STATE(975)] = 50458, + [SMALL_STATE(976)] = 50472, + [SMALL_STATE(977)] = 50486, + [SMALL_STATE(978)] = 50500, + [SMALL_STATE(979)] = 50518, + [SMALL_STATE(980)] = 50536, + [SMALL_STATE(981)] = 50554, + [SMALL_STATE(982)] = 50568, + [SMALL_STATE(983)] = 50594, + [SMALL_STATE(984)] = 50618, + [SMALL_STATE(985)] = 50632, + [SMALL_STATE(986)] = 50650, + [SMALL_STATE(987)] = 50664, + [SMALL_STATE(988)] = 50678, + [SMALL_STATE(989)] = 50692, + [SMALL_STATE(990)] = 50706, + [SMALL_STATE(991)] = 50720, + [SMALL_STATE(992)] = 50744, + [SMALL_STATE(993)] = 50764, + [SMALL_STATE(994)] = 50778, + [SMALL_STATE(995)] = 50796, + [SMALL_STATE(996)] = 50814, + [SMALL_STATE(997)] = 50838, + [SMALL_STATE(998)] = 50858, + [SMALL_STATE(999)] = 50872, + [SMALL_STATE(1000)] = 50894, + [SMALL_STATE(1001)] = 50912, + [SMALL_STATE(1002)] = 50928, + [SMALL_STATE(1003)] = 50952, + [SMALL_STATE(1004)] = 50976, + [SMALL_STATE(1005)] = 50990, + [SMALL_STATE(1006)] = 51008, + [SMALL_STATE(1007)] = 51022, + [SMALL_STATE(1008)] = 51042, + [SMALL_STATE(1009)] = 51056, + [SMALL_STATE(1010)] = 51070, + [SMALL_STATE(1011)] = 51084, + [SMALL_STATE(1012)] = 51098, + [SMALL_STATE(1013)] = 51116, + [SMALL_STATE(1014)] = 51134, + [SMALL_STATE(1015)] = 51157, + [SMALL_STATE(1016)] = 51170, + [SMALL_STATE(1017)] = 51193, + [SMALL_STATE(1018)] = 51206, + [SMALL_STATE(1019)] = 51219, + [SMALL_STATE(1020)] = 51242, + [SMALL_STATE(1021)] = 51261, + [SMALL_STATE(1022)] = 51286, + [SMALL_STATE(1023)] = 51305, + [SMALL_STATE(1024)] = 51318, + [SMALL_STATE(1025)] = 51333, + [SMALL_STATE(1026)] = 51350, + [SMALL_STATE(1027)] = 51373, + [SMALL_STATE(1028)] = 51392, + [SMALL_STATE(1029)] = 51409, + [SMALL_STATE(1030)] = 51424, + [SMALL_STATE(1031)] = 51441, + [SMALL_STATE(1032)] = 51462, + [SMALL_STATE(1033)] = 51481, + [SMALL_STATE(1034)] = 51494, + [SMALL_STATE(1035)] = 51517, + [SMALL_STATE(1036)] = 51536, + [SMALL_STATE(1037)] = 51555, + [SMALL_STATE(1038)] = 51574, + [SMALL_STATE(1039)] = 51599, + [SMALL_STATE(1040)] = 51618, + [SMALL_STATE(1041)] = 51643, + [SMALL_STATE(1042)] = 51656, + [SMALL_STATE(1043)] = 51669, + [SMALL_STATE(1044)] = 51692, + [SMALL_STATE(1045)] = 51715, + [SMALL_STATE(1046)] = 51738, + [SMALL_STATE(1047)] = 51761, + [SMALL_STATE(1048)] = 51786, + [SMALL_STATE(1049)] = 51805, + [SMALL_STATE(1050)] = 51830, + [SMALL_STATE(1051)] = 51851, + [SMALL_STATE(1052)] = 51864, + [SMALL_STATE(1053)] = 51889, + [SMALL_STATE(1054)] = 51908, + [SMALL_STATE(1055)] = 51927, + [SMALL_STATE(1056)] = 51948, + [SMALL_STATE(1057)] = 51973, + [SMALL_STATE(1058)] = 51989, + [SMALL_STATE(1059)] = 52005, + [SMALL_STATE(1060)] = 52027, + [SMALL_STATE(1061)] = 52041, + [SMALL_STATE(1062)] = 52057, + [SMALL_STATE(1063)] = 52073, + [SMALL_STATE(1064)] = 52093, + [SMALL_STATE(1065)] = 52113, + [SMALL_STATE(1066)] = 52131, + [SMALL_STATE(1067)] = 52149, + [SMALL_STATE(1068)] = 52163, + [SMALL_STATE(1069)] = 52179, + [SMALL_STATE(1070)] = 52193, + [SMALL_STATE(1071)] = 52215, + [SMALL_STATE(1072)] = 52237, + [SMALL_STATE(1073)] = 52251, + [SMALL_STATE(1074)] = 52269, + [SMALL_STATE(1075)] = 52283, + [SMALL_STATE(1076)] = 52305, + [SMALL_STATE(1077)] = 52319, + [SMALL_STATE(1078)] = 52335, + [SMALL_STATE(1079)] = 52353, + [SMALL_STATE(1080)] = 52375, + [SMALL_STATE(1081)] = 52397, + [SMALL_STATE(1082)] = 52417, + [SMALL_STATE(1083)] = 52435, + [SMALL_STATE(1084)] = 52455, + [SMALL_STATE(1085)] = 52473, + [SMALL_STATE(1086)] = 52495, + [SMALL_STATE(1087)] = 52515, + [SMALL_STATE(1088)] = 52527, + [SMALL_STATE(1089)] = 52543, + [SMALL_STATE(1090)] = 52555, + [SMALL_STATE(1091)] = 52572, + [SMALL_STATE(1092)] = 52589, + [SMALL_STATE(1093)] = 52604, + [SMALL_STATE(1094)] = 52621, + [SMALL_STATE(1095)] = 52638, + [SMALL_STATE(1096)] = 52655, + [SMALL_STATE(1097)] = 52670, + [SMALL_STATE(1098)] = 52689, + [SMALL_STATE(1099)] = 52706, + [SMALL_STATE(1100)] = 52725, + [SMALL_STATE(1101)] = 52740, + [SMALL_STATE(1102)] = 52751, + [SMALL_STATE(1103)] = 52768, + [SMALL_STATE(1104)] = 52785, + [SMALL_STATE(1105)] = 52804, + [SMALL_STATE(1106)] = 52821, + [SMALL_STATE(1107)] = 52832, + [SMALL_STATE(1108)] = 52851, + [SMALL_STATE(1109)] = 52870, + [SMALL_STATE(1110)] = 52887, + [SMALL_STATE(1111)] = 52898, + [SMALL_STATE(1112)] = 52913, + [SMALL_STATE(1113)] = 52928, + [SMALL_STATE(1114)] = 52945, + [SMALL_STATE(1115)] = 52960, + [SMALL_STATE(1116)] = 52975, + [SMALL_STATE(1117)] = 52994, + [SMALL_STATE(1118)] = 53013, + [SMALL_STATE(1119)] = 53030, + [SMALL_STATE(1120)] = 53047, + [SMALL_STATE(1121)] = 53066, + [SMALL_STATE(1122)] = 53083, + [SMALL_STATE(1123)] = 53100, + [SMALL_STATE(1124)] = 53119, + [SMALL_STATE(1125)] = 53136, + [SMALL_STATE(1126)] = 53155, + [SMALL_STATE(1127)] = 53172, + [SMALL_STATE(1128)] = 53189, + [SMALL_STATE(1129)] = 53205, + [SMALL_STATE(1130)] = 53219, + [SMALL_STATE(1131)] = 53235, + [SMALL_STATE(1132)] = 53251, + [SMALL_STATE(1133)] = 53267, + [SMALL_STATE(1134)] = 53279, + [SMALL_STATE(1135)] = 53295, + [SMALL_STATE(1136)] = 53311, + [SMALL_STATE(1137)] = 53327, + [SMALL_STATE(1138)] = 53341, + [SMALL_STATE(1139)] = 53355, + [SMALL_STATE(1140)] = 53369, + [SMALL_STATE(1141)] = 53385, + [SMALL_STATE(1142)] = 53401, + [SMALL_STATE(1143)] = 53417, + [SMALL_STATE(1144)] = 53431, + [SMALL_STATE(1145)] = 53445, + [SMALL_STATE(1146)] = 53461, + [SMALL_STATE(1147)] = 53475, + [SMALL_STATE(1148)] = 53491, + [SMALL_STATE(1149)] = 53507, + [SMALL_STATE(1150)] = 53523, + [SMALL_STATE(1151)] = 53537, + [SMALL_STATE(1152)] = 53553, + [SMALL_STATE(1153)] = 53569, + [SMALL_STATE(1154)] = 53585, + [SMALL_STATE(1155)] = 53599, + [SMALL_STATE(1156)] = 53613, + [SMALL_STATE(1157)] = 53629, + [SMALL_STATE(1158)] = 53645, + [SMALL_STATE(1159)] = 53661, + [SMALL_STATE(1160)] = 53677, + [SMALL_STATE(1161)] = 53691, + [SMALL_STATE(1162)] = 53707, + [SMALL_STATE(1163)] = 53721, + [SMALL_STATE(1164)] = 53735, + [SMALL_STATE(1165)] = 53749, + [SMALL_STATE(1166)] = 53763, + [SMALL_STATE(1167)] = 53773, + [SMALL_STATE(1168)] = 53787, + [SMALL_STATE(1169)] = 53801, + [SMALL_STATE(1170)] = 53817, + [SMALL_STATE(1171)] = 53827, + [SMALL_STATE(1172)] = 53841, + [SMALL_STATE(1173)] = 53855, + [SMALL_STATE(1174)] = 53871, + [SMALL_STATE(1175)] = 53885, + [SMALL_STATE(1176)] = 53895, + [SMALL_STATE(1177)] = 53911, + [SMALL_STATE(1178)] = 53925, + [SMALL_STATE(1179)] = 53939, + [SMALL_STATE(1180)] = 53953, + [SMALL_STATE(1181)] = 53967, + [SMALL_STATE(1182)] = 53983, + [SMALL_STATE(1183)] = 53999, + [SMALL_STATE(1184)] = 54011, + [SMALL_STATE(1185)] = 54025, + [SMALL_STATE(1186)] = 54035, + [SMALL_STATE(1187)] = 54051, + [SMALL_STATE(1188)] = 54061, + [SMALL_STATE(1189)] = 54077, + [SMALL_STATE(1190)] = 54091, + [SMALL_STATE(1191)] = 54105, + [SMALL_STATE(1192)] = 54119, + [SMALL_STATE(1193)] = 54133, + [SMALL_STATE(1194)] = 54149, + [SMALL_STATE(1195)] = 54162, + [SMALL_STATE(1196)] = 54175, + [SMALL_STATE(1197)] = 54188, + [SMALL_STATE(1198)] = 54201, + [SMALL_STATE(1199)] = 54210, + [SMALL_STATE(1200)] = 54223, + [SMALL_STATE(1201)] = 54236, + [SMALL_STATE(1202)] = 54245, + [SMALL_STATE(1203)] = 54258, + [SMALL_STATE(1204)] = 54271, + [SMALL_STATE(1205)] = 54284, + [SMALL_STATE(1206)] = 54297, + [SMALL_STATE(1207)] = 54310, + [SMALL_STATE(1208)] = 54319, + [SMALL_STATE(1209)] = 54332, + [SMALL_STATE(1210)] = 54345, + [SMALL_STATE(1211)] = 54358, + [SMALL_STATE(1212)] = 54371, + [SMALL_STATE(1213)] = 54384, + [SMALL_STATE(1214)] = 54397, + [SMALL_STATE(1215)] = 54410, + [SMALL_STATE(1216)] = 54423, + [SMALL_STATE(1217)] = 54436, + [SMALL_STATE(1218)] = 54447, + [SMALL_STATE(1219)] = 54460, + [SMALL_STATE(1220)] = 54473, + [SMALL_STATE(1221)] = 54486, + [SMALL_STATE(1222)] = 54499, + [SMALL_STATE(1223)] = 54510, + [SMALL_STATE(1224)] = 54519, + [SMALL_STATE(1225)] = 54532, + [SMALL_STATE(1226)] = 54545, + [SMALL_STATE(1227)] = 54554, + [SMALL_STATE(1228)] = 54567, + [SMALL_STATE(1229)] = 54580, + [SMALL_STATE(1230)] = 54593, + [SMALL_STATE(1231)] = 54606, + [SMALL_STATE(1232)] = 54619, + [SMALL_STATE(1233)] = 54632, + [SMALL_STATE(1234)] = 54643, + [SMALL_STATE(1235)] = 54656, + [SMALL_STATE(1236)] = 54669, + [SMALL_STATE(1237)] = 54682, + [SMALL_STATE(1238)] = 54695, + [SMALL_STATE(1239)] = 54708, + [SMALL_STATE(1240)] = 54721, + [SMALL_STATE(1241)] = 54734, + [SMALL_STATE(1242)] = 54747, + [SMALL_STATE(1243)] = 54760, + [SMALL_STATE(1244)] = 54773, + [SMALL_STATE(1245)] = 54786, + [SMALL_STATE(1246)] = 54797, + [SMALL_STATE(1247)] = 54810, + [SMALL_STATE(1248)] = 54823, + [SMALL_STATE(1249)] = 54836, + [SMALL_STATE(1250)] = 54849, + [SMALL_STATE(1251)] = 54858, + [SMALL_STATE(1252)] = 54871, + [SMALL_STATE(1253)] = 54884, + [SMALL_STATE(1254)] = 54895, + [SMALL_STATE(1255)] = 54908, + [SMALL_STATE(1256)] = 54921, + [SMALL_STATE(1257)] = 54934, + [SMALL_STATE(1258)] = 54947, + [SMALL_STATE(1259)] = 54960, + [SMALL_STATE(1260)] = 54973, + [SMALL_STATE(1261)] = 54986, + [SMALL_STATE(1262)] = 54999, + [SMALL_STATE(1263)] = 55012, + [SMALL_STATE(1264)] = 55023, + [SMALL_STATE(1265)] = 55036, + [SMALL_STATE(1266)] = 55047, + [SMALL_STATE(1267)] = 55060, + [SMALL_STATE(1268)] = 55071, + [SMALL_STATE(1269)] = 55084, + [SMALL_STATE(1270)] = 55095, + [SMALL_STATE(1271)] = 55104, + [SMALL_STATE(1272)] = 55117, + [SMALL_STATE(1273)] = 55130, + [SMALL_STATE(1274)] = 55143, + [SMALL_STATE(1275)] = 55156, + [SMALL_STATE(1276)] = 55169, + [SMALL_STATE(1277)] = 55182, + [SMALL_STATE(1278)] = 55195, + [SMALL_STATE(1279)] = 55208, + [SMALL_STATE(1280)] = 55221, + [SMALL_STATE(1281)] = 55234, + [SMALL_STATE(1282)] = 55243, + [SMALL_STATE(1283)] = 55256, + [SMALL_STATE(1284)] = 55269, + [SMALL_STATE(1285)] = 55282, + [SMALL_STATE(1286)] = 55295, + [SMALL_STATE(1287)] = 55308, + [SMALL_STATE(1288)] = 55319, + [SMALL_STATE(1289)] = 55330, + [SMALL_STATE(1290)] = 55343, + [SMALL_STATE(1291)] = 55356, + [SMALL_STATE(1292)] = 55365, + [SMALL_STATE(1293)] = 55378, + [SMALL_STATE(1294)] = 55391, + [SMALL_STATE(1295)] = 55404, + [SMALL_STATE(1296)] = 55417, + [SMALL_STATE(1297)] = 55430, + [SMALL_STATE(1298)] = 55443, + [SMALL_STATE(1299)] = 55456, + [SMALL_STATE(1300)] = 55469, + [SMALL_STATE(1301)] = 55482, + [SMALL_STATE(1302)] = 55495, + [SMALL_STATE(1303)] = 55508, + [SMALL_STATE(1304)] = 55521, + [SMALL_STATE(1305)] = 55532, + [SMALL_STATE(1306)] = 55545, + [SMALL_STATE(1307)] = 55558, + [SMALL_STATE(1308)] = 55569, + [SMALL_STATE(1309)] = 55578, + [SMALL_STATE(1310)] = 55591, + [SMALL_STATE(1311)] = 55604, + [SMALL_STATE(1312)] = 55617, + [SMALL_STATE(1313)] = 55630, + [SMALL_STATE(1314)] = 55643, + [SMALL_STATE(1315)] = 55656, + [SMALL_STATE(1316)] = 55669, + [SMALL_STATE(1317)] = 55682, + [SMALL_STATE(1318)] = 55695, + [SMALL_STATE(1319)] = 55704, + [SMALL_STATE(1320)] = 55717, + [SMALL_STATE(1321)] = 55730, + [SMALL_STATE(1322)] = 55743, + [SMALL_STATE(1323)] = 55752, + [SMALL_STATE(1324)] = 55765, + [SMALL_STATE(1325)] = 55776, + [SMALL_STATE(1326)] = 55789, + [SMALL_STATE(1327)] = 55802, + [SMALL_STATE(1328)] = 55815, + [SMALL_STATE(1329)] = 55828, + [SMALL_STATE(1330)] = 55841, + [SMALL_STATE(1331)] = 55854, + [SMALL_STATE(1332)] = 55867, + [SMALL_STATE(1333)] = 55878, + [SMALL_STATE(1334)] = 55887, + [SMALL_STATE(1335)] = 55900, + [SMALL_STATE(1336)] = 55911, + [SMALL_STATE(1337)] = 55924, + [SMALL_STATE(1338)] = 55937, + [SMALL_STATE(1339)] = 55950, + [SMALL_STATE(1340)] = 55961, + [SMALL_STATE(1341)] = 55970, + [SMALL_STATE(1342)] = 55978, + [SMALL_STATE(1343)] = 55986, + [SMALL_STATE(1344)] = 55994, + [SMALL_STATE(1345)] = 56004, + [SMALL_STATE(1346)] = 56012, + [SMALL_STATE(1347)] = 56020, + [SMALL_STATE(1348)] = 56028, + [SMALL_STATE(1349)] = 56036, + [SMALL_STATE(1350)] = 56044, + [SMALL_STATE(1351)] = 56052, + [SMALL_STATE(1352)] = 56060, + [SMALL_STATE(1353)] = 56068, + [SMALL_STATE(1354)] = 56078, + [SMALL_STATE(1355)] = 56088, + [SMALL_STATE(1356)] = 56096, + [SMALL_STATE(1357)] = 56106, + [SMALL_STATE(1358)] = 56116, + [SMALL_STATE(1359)] = 56126, + [SMALL_STATE(1360)] = 56136, + [SMALL_STATE(1361)] = 56146, + [SMALL_STATE(1362)] = 56154, + [SMALL_STATE(1363)] = 56162, + [SMALL_STATE(1364)] = 56172, + [SMALL_STATE(1365)] = 56180, + [SMALL_STATE(1366)] = 56190, + [SMALL_STATE(1367)] = 56200, + [SMALL_STATE(1368)] = 56208, + [SMALL_STATE(1369)] = 56218, + [SMALL_STATE(1370)] = 56226, + [SMALL_STATE(1371)] = 56236, + [SMALL_STATE(1372)] = 56246, + [SMALL_STATE(1373)] = 56256, + [SMALL_STATE(1374)] = 56264, + [SMALL_STATE(1375)] = 56272, + [SMALL_STATE(1376)] = 56282, + [SMALL_STATE(1377)] = 56292, + [SMALL_STATE(1378)] = 56302, + [SMALL_STATE(1379)] = 56312, + [SMALL_STATE(1380)] = 56320, + [SMALL_STATE(1381)] = 56328, + [SMALL_STATE(1382)] = 56338, + [SMALL_STATE(1383)] = 56346, + [SMALL_STATE(1384)] = 56354, + [SMALL_STATE(1385)] = 56362, + [SMALL_STATE(1386)] = 56370, + [SMALL_STATE(1387)] = 56378, + [SMALL_STATE(1388)] = 56388, + [SMALL_STATE(1389)] = 56396, + [SMALL_STATE(1390)] = 56404, + [SMALL_STATE(1391)] = 56414, + [SMALL_STATE(1392)] = 56422, + [SMALL_STATE(1393)] = 56432, + [SMALL_STATE(1394)] = 56440, + [SMALL_STATE(1395)] = 56448, + [SMALL_STATE(1396)] = 56456, + [SMALL_STATE(1397)] = 56466, + [SMALL_STATE(1398)] = 56474, + [SMALL_STATE(1399)] = 56482, + [SMALL_STATE(1400)] = 56490, + [SMALL_STATE(1401)] = 56498, + [SMALL_STATE(1402)] = 56508, + [SMALL_STATE(1403)] = 56516, + [SMALL_STATE(1404)] = 56524, + [SMALL_STATE(1405)] = 56534, + [SMALL_STATE(1406)] = 56541, + [SMALL_STATE(1407)] = 56548, + [SMALL_STATE(1408)] = 56555, + [SMALL_STATE(1409)] = 56562, + [SMALL_STATE(1410)] = 56569, + [SMALL_STATE(1411)] = 56576, + [SMALL_STATE(1412)] = 56583, + [SMALL_STATE(1413)] = 56590, + [SMALL_STATE(1414)] = 56597, + [SMALL_STATE(1415)] = 56604, + [SMALL_STATE(1416)] = 56611, + [SMALL_STATE(1417)] = 56618, + [SMALL_STATE(1418)] = 56625, + [SMALL_STATE(1419)] = 56632, + [SMALL_STATE(1420)] = 56639, + [SMALL_STATE(1421)] = 56646, + [SMALL_STATE(1422)] = 56653, + [SMALL_STATE(1423)] = 56660, + [SMALL_STATE(1424)] = 56667, + [SMALL_STATE(1425)] = 56674, + [SMALL_STATE(1426)] = 56681, + [SMALL_STATE(1427)] = 56688, + [SMALL_STATE(1428)] = 56695, + [SMALL_STATE(1429)] = 56702, + [SMALL_STATE(1430)] = 56709, + [SMALL_STATE(1431)] = 56716, + [SMALL_STATE(1432)] = 56723, + [SMALL_STATE(1433)] = 56730, + [SMALL_STATE(1434)] = 56737, + [SMALL_STATE(1435)] = 56744, + [SMALL_STATE(1436)] = 56751, + [SMALL_STATE(1437)] = 56758, + [SMALL_STATE(1438)] = 56765, + [SMALL_STATE(1439)] = 56772, + [SMALL_STATE(1440)] = 56779, + [SMALL_STATE(1441)] = 56786, + [SMALL_STATE(1442)] = 56793, + [SMALL_STATE(1443)] = 56800, + [SMALL_STATE(1444)] = 56807, + [SMALL_STATE(1445)] = 56814, + [SMALL_STATE(1446)] = 56821, + [SMALL_STATE(1447)] = 56828, + [SMALL_STATE(1448)] = 56835, + [SMALL_STATE(1449)] = 56842, + [SMALL_STATE(1450)] = 56849, + [SMALL_STATE(1451)] = 56856, + [SMALL_STATE(1452)] = 56863, + [SMALL_STATE(1453)] = 56870, + [SMALL_STATE(1454)] = 56877, + [SMALL_STATE(1455)] = 56884, + [SMALL_STATE(1456)] = 56891, + [SMALL_STATE(1457)] = 56898, + [SMALL_STATE(1458)] = 56905, + [SMALL_STATE(1459)] = 56912, + [SMALL_STATE(1460)] = 56919, + [SMALL_STATE(1461)] = 56926, + [SMALL_STATE(1462)] = 56933, + [SMALL_STATE(1463)] = 56940, + [SMALL_STATE(1464)] = 56947, + [SMALL_STATE(1465)] = 56954, + [SMALL_STATE(1466)] = 56961, + [SMALL_STATE(1467)] = 56968, + [SMALL_STATE(1468)] = 56975, + [SMALL_STATE(1469)] = 56982, + [SMALL_STATE(1470)] = 56989, + [SMALL_STATE(1471)] = 56996, + [SMALL_STATE(1472)] = 57003, + [SMALL_STATE(1473)] = 57010, + [SMALL_STATE(1474)] = 57017, + [SMALL_STATE(1475)] = 57024, + [SMALL_STATE(1476)] = 57031, + [SMALL_STATE(1477)] = 57038, + [SMALL_STATE(1478)] = 57045, + [SMALL_STATE(1479)] = 57052, + [SMALL_STATE(1480)] = 57059, + [SMALL_STATE(1481)] = 57066, + [SMALL_STATE(1482)] = 57073, + [SMALL_STATE(1483)] = 57080, + [SMALL_STATE(1484)] = 57087, + [SMALL_STATE(1485)] = 57094, + [SMALL_STATE(1486)] = 57101, + [SMALL_STATE(1487)] = 57108, + [SMALL_STATE(1488)] = 57115, + [SMALL_STATE(1489)] = 57122, + [SMALL_STATE(1490)] = 57129, + [SMALL_STATE(1491)] = 57136, + [SMALL_STATE(1492)] = 57143, + [SMALL_STATE(1493)] = 57150, + [SMALL_STATE(1494)] = 57157, + [SMALL_STATE(1495)] = 57164, + [SMALL_STATE(1496)] = 57171, + [SMALL_STATE(1497)] = 57178, + [SMALL_STATE(1498)] = 57185, + [SMALL_STATE(1499)] = 57192, + [SMALL_STATE(1500)] = 57199, + [SMALL_STATE(1501)] = 57206, + [SMALL_STATE(1502)] = 57213, + [SMALL_STATE(1503)] = 57220, + [SMALL_STATE(1504)] = 57227, + [SMALL_STATE(1505)] = 57234, + [SMALL_STATE(1506)] = 57241, + [SMALL_STATE(1507)] = 57248, + [SMALL_STATE(1508)] = 57255, + [SMALL_STATE(1509)] = 57262, + [SMALL_STATE(1510)] = 57269, + [SMALL_STATE(1511)] = 57276, + [SMALL_STATE(1512)] = 57283, + [SMALL_STATE(1513)] = 57290, + [SMALL_STATE(1514)] = 57297, + [SMALL_STATE(1515)] = 57304, + [SMALL_STATE(1516)] = 57311, + [SMALL_STATE(1517)] = 57318, + [SMALL_STATE(1518)] = 57325, + [SMALL_STATE(1519)] = 57332, + [SMALL_STATE(1520)] = 57339, + [SMALL_STATE(1521)] = 57346, + [SMALL_STATE(1522)] = 57353, + [SMALL_STATE(1523)] = 57360, + [SMALL_STATE(1524)] = 57367, +}; + +static const TSParseActionEntry ts_parse_actions[] = { + [0] = {.entry = {.count = 0, .reusable = false}}, + [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), + [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), + [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module, 0), + [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1130), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1016), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(393), + [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(394), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(201), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(181), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1345), + [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1346), + [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1349), + [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(400), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(247), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(602), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(404), + [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1512), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(296), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), + [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(719), + [49] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), + [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(406), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1511), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1510), + [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1509), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(278), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(284), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1508), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(417), + [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(419), + [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(890), + [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(797), + [77] = {.entry = {.count = 1, .reusable = false}}, SHIFT(797), + [79] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(952), + [83] = {.entry = {.count = 1, .reusable = false}}, SHIFT(424), + [85] = {.entry = {.count = 1, .reusable = false}}, SHIFT(254), + [87] = {.entry = {.count = 1, .reusable = false}}, SHIFT(604), + [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(423), + [91] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1495), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(298), + [95] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), + [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1516), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1498), + [101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(370), + [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), + [105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(356), + [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), + [109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(326), + [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376), + [113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1265), + [115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(319), + [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354), + [121] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(330), + [124] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1130), + [127] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1016), + [130] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(164), + [133] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(393), + [136] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(75), + [139] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(394), + [142] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(201), + [145] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(231), + [148] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(181), + [151] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1345), + [154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1346), + [157] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1349), + [160] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(424), + [163] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(254), + [166] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(604), + [169] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(423), + [172] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1495), + [175] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(298), + [178] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(70), + [181] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(719), + [184] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(159), + [187] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(166), + [190] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(406), + [193] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1516), + [196] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1510), + [199] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1509), + [202] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(278), + [205] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(284), + [208] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1498), + [211] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(417), + [214] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(419), + [217] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(890), + [220] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(180), + [223] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(797), + [226] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(797), + [229] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(131), + [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), + [234] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(952), + [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module, 1), + [239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(381), + [241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359), + [243] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(400), + [246] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(247), + [249] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(602), + [252] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(404), + [255] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1512), + [258] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(296), + [261] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(71), + [264] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1511), + [267] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1508), + [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), + [272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1324), + [274] = {.entry = {.count = 1, .reusable = false}}, SHIFT(674), + [276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), + [278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), + [280] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, .production_id = 1), REDUCE(sym_primary_expression, 1, .production_id = 1), + [283] = {.entry = {.count = 1, .reusable = false}}, SHIFT(460), + [285] = {.entry = {.count = 1, .reusable = false}}, SHIFT(675), + [287] = {.entry = {.count = 1, .reusable = true}}, SHIFT(385), + [289] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1, .production_id = 1), + [291] = {.entry = {.count = 1, .reusable = false}}, SHIFT(726), + [293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [295] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [297] = {.entry = {.count = 1, .reusable = false}}, SHIFT(406), + [299] = {.entry = {.count = 1, .reusable = false}}, SHIFT(470), + [301] = {.entry = {.count = 1, .reusable = true}}, SHIFT(726), + [303] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), + [305] = {.entry = {.count = 1, .reusable = false}}, SHIFT(886), + [307] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, .production_id = 1), + [309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(642), + [311] = {.entry = {.count = 1, .reusable = false}}, SHIFT(642), + [313] = {.entry = {.count = 1, .reusable = false}}, SHIFT(148), + [315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(944), + [317] = {.entry = {.count = 1, .reusable = false}}, SHIFT(334), + [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(550), + [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(432), + [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), + [329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(754), + [333] = {.entry = {.count = 1, .reusable = false}}, SHIFT(755), + [335] = {.entry = {.count = 1, .reusable = false}}, SHIFT(453), + [337] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), + [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), + [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(530), + [345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(521), + [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(548), + [353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), + [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(535), + [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(508), + [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(377), + [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(524), + [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(316), + [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(532), + [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(547), + [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(401), + [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(502), + [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(526), + [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(527), + [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(531), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), + [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(538), + [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(594), + [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(965), + [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(464), + [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(353), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(542), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(592), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(492), + [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), + [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(544), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(582), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(493), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(563), + [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(580), + [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(991), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(478), + [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), + [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(490), + [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(589), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(388), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(572), + [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(485), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(501), + [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(430), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(497), + [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(553), + [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(486), + [521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(571), + [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(578), + [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(472), + [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(317), + [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(384), + [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(552), + [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(487), + [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(558), + [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(421), + [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), + [561] = {.entry = {.count = 1, .reusable = false}}, SHIFT(719), + [563] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), + [565] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), REDUCE(sym_list_splat_pattern, 2, .production_id = 8), + [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(456), + [570] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 8), + [572] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 8), + [574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), + [576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(378), + [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(371), + [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379), + [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(367), + [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), + [586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1304), + [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), + [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(315), + [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1217), + [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(382), + [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(374), + [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(355), + [602] = {.entry = {.count = 1, .reusable = false}}, SHIFT(667), + [604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(668), + [608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(439), + [610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(709), + [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), + [614] = {.entry = {.count = 1, .reusable = false}}, SHIFT(391), + [616] = {.entry = {.count = 1, .reusable = false}}, SHIFT(885), + [618] = {.entry = {.count = 1, .reusable = false}}, SHIFT(149), + [620] = {.entry = {.count = 1, .reusable = false}}, SHIFT(450), + [622] = {.entry = {.count = 1, .reusable = false}}, SHIFT(798), + [624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), + [626] = {.entry = {.count = 1, .reusable = false}}, SHIFT(801), + [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(443), + [630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(683), + [632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), + [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [636] = {.entry = {.count = 1, .reusable = false}}, SHIFT(445), + [638] = {.entry = {.count = 1, .reusable = false}}, SHIFT(888), + [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811), + [642] = {.entry = {.count = 1, .reusable = false}}, SHIFT(811), + [644] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), + [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(934), + [648] = {.entry = {.count = 1, .reusable = false}}, SHIFT(447), + [650] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 1), + [652] = {.entry = {.count = 1, .reusable = false}}, SHIFT(749), + [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(393), + [658] = {.entry = {.count = 1, .reusable = false}}, SHIFT(764), + [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(475), + [664] = {.entry = {.count = 1, .reusable = false}}, SHIFT(158), + [666] = {.entry = {.count = 1, .reusable = false}}, SHIFT(152), + [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(765), + [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(779), + [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(768), + [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(789), + [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(441), + [678] = {.entry = {.count = 1, .reusable = false}}, SHIFT(770), + [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [682] = {.entry = {.count = 1, .reusable = false}}, SHIFT(685), + [684] = {.entry = {.count = 1, .reusable = false}}, SHIFT(748), + [686] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, .production_id = 7), + [688] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 2, .production_id = 7), + [690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), + [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), + [694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1504), + [696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(803), + [698] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2, .production_id = 7), + [700] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 3, .production_id = 16), + [702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1462), + [704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(619), + [706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1469), + [708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(846), + [710] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 3, .production_id = 16), + [712] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 3, .production_id = 16), + [714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(671), + [716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(460), + [718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), + [720] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 3, .production_id = 50), + [722] = {.entry = {.count = 1, .reusable = false}}, SHIFT(812), + [724] = {.entry = {.count = 1, .reusable = true}}, SHIFT(631), + [726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1432), + [728] = {.entry = {.count = 1, .reusable = false}}, SHIFT(837), + [730] = {.entry = {.count = 1, .reusable = false}}, SHIFT(154), + [732] = {.entry = {.count = 1, .reusable = false}}, SHIFT(759), + [734] = {.entry = {.count = 1, .reusable = false}}, SHIFT(760), + [736] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), + [738] = {.entry = {.count = 1, .reusable = true}}, SHIFT(788), + [740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1447), + [742] = {.entry = {.count = 1, .reusable = false}}, SHIFT(425), + [744] = {.entry = {.count = 1, .reusable = false}}, SHIFT(466), + [746] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 1), + [748] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, .production_id = 24), + [750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(833), + [752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1414), + [754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 7, .production_id = 140), + [756] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 7, .production_id = 140), + [758] = {.entry = {.count = 1, .reusable = false}}, SHIFT(887), + [760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(828), + [762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(725), + [764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(778), + [766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(672), + [768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(787), + [770] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 122), + [772] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, .production_id = 122), + [774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(786), + [776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(783), + [778] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 3, .production_id = 16), + [780] = {.entry = {.count = 1, .reusable = false}}, SHIFT(442), + [782] = {.entry = {.count = 1, .reusable = true}}, SHIFT(469), + [784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(825), + [786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(843), + [788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(841), + [790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(838), + [792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(727), + [794] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 1), + [796] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 121), + [798] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, .production_id = 121), + [800] = {.entry = {.count = 1, .reusable = true}}, SHIFT(629), + [802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(615), + [804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(617), + [806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(638), + [808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(639), + [810] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 2, .production_id = 7), + [812] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 100), + [814] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 5, .production_id = 100), + [816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(805), + [818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(772), + [820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(781), + [822] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 6, .production_id = 96), + [824] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 6, .production_id = 96), + [826] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 4, .production_id = 70), + [828] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 4, .production_id = 70), + [830] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 5, .production_id = 96), + [832] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 5, .production_id = 96), + [834] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 5, .production_id = 70), + [836] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 5, .production_id = 70), + [838] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3, .production_id = 40), + [840] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attribute, 3, .production_id = 40), + [842] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 4, .production_id = 56), + [844] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 4, .production_id = 56), + [846] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1506), + [848] = {.entry = {.count = 1, .reusable = false}}, SHIFT(383), + [850] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1435), + [852] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1471), + [854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416), + [856] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1468), + [858] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, .production_id = 81), + [860] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, .production_id = 81), + [862] = {.entry = {.count = 1, .reusable = false}}, SHIFT(335), + [864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(402), + [866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(614), + [868] = {.entry = {.count = 1, .reusable = true}}, SHIFT(823), + [870] = {.entry = {.count = 1, .reusable = true}}, SHIFT(826), + [872] = {.entry = {.count = 1, .reusable = true}}, SHIFT(605), + [874] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), + [876] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1514), + [878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(807), + [880] = {.entry = {.count = 1, .reusable = true}}, SHIFT(616), + [882] = {.entry = {.count = 1, .reusable = true}}, SHIFT(824), + [884] = {.entry = {.count = 1, .reusable = true}}, SHIFT(800), + [886] = {.entry = {.count = 1, .reusable = true}}, SHIFT(641), + [888] = {.entry = {.count = 1, .reusable = true}}, SHIFT(808), + [890] = {.entry = {.count = 1, .reusable = true}}, SHIFT(603), + [892] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), + [894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1517), + [896] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), + [898] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [900] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), + [902] = {.entry = {.count = 1, .reusable = true}}, SHIFT(845), + [904] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 104), + [906] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 104), + [908] = {.entry = {.count = 1, .reusable = false}}, SHIFT(412), + [910] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, .production_id = 69), + [912] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), + [914] = {.entry = {.count = 1, .reusable = true}}, SHIFT(844), + [916] = {.entry = {.count = 1, .reusable = true}}, SHIFT(834), + [918] = {.entry = {.count = 1, .reusable = true}}, SHIFT(344), + [920] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 76), + [922] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 76), + [924] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 1), + [926] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), + [928] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 77), + [930] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 77), + [932] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), + [934] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat1, 2), + [936] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), SHIFT_REPEAT(335), + [939] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat2, 2), + [941] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2), + [943] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2), SHIFT_REPEAT(416), + [946] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 4, .production_id = 54), + [948] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 4, .production_id = 54), + [950] = {.entry = {.count = 1, .reusable = false}}, SHIFT(484), + [952] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), + [954] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2), SHIFT_REPEAT(402), + [957] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), SHIFT_REPEAT(383), + [960] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), + [962] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), + [964] = {.entry = {.count = 1, .reusable = true}}, SHIFT(950), + [966] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 1), + [968] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 1), + [970] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 4), + [972] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 4), + [974] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [976] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1336), + [978] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), + [980] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), + [982] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), SHIFT_REPEAT(484), + [985] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 3), + [987] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 3), + [989] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 2), + [991] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 2), + [993] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 95), + [995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1423), + [997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 69), + [999] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 68), + [1001] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3), + [1003] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 10), + [1005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1487), + [1007] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, .production_id = 29), + [1009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, .production_id = 28), + [1011] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2), + [1013] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), SHIFT_REPEAT(412), + [1016] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 2), + [1018] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 2), + [1020] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 6, .production_id = 155), + [1022] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 6, .production_id = 155), + [1024] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, .production_id = 129), + [1026] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, .production_id = 129), + [1028] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 5, .production_id = 146), + [1030] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 5, .production_id = 146), + [1032] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 5, .production_id = 146), + [1034] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 5, .production_id = 146), + [1036] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 6, .production_id = 155), + [1038] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 6, .production_id = 155), + [1040] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 7, .production_id = 160), + [1042] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 7, .production_id = 160), + [1044] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 7, .production_id = 160), + [1046] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 7, .production_id = 160), + [1048] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1), + [1050] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1), REDUCE(sym_primary_expression, 1), + [1053] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1), + [1055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(422), + [1057] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1), + [1059] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1), + [1061] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 4, .production_id = 129), + [1063] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 4, .production_id = 129), + [1065] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, .production_id = 81), + [1067] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, .production_id = 81), + [1069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [1071] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_list_splat_pattern, 2, .production_id = 9), + [1074] = {.entry = {.count = 1, .reusable = true}}, SHIFT(476), + [1076] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 9), + [1078] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 9), + [1080] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 3, .production_id = 56), + [1082] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 3, .production_id = 56), + [1084] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_cases, 1), + [1086] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cases, 1), + [1088] = {.entry = {.count = 1, .reusable = false}}, SHIFT(852), + [1090] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_cases_repeat1, 2), + [1092] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), + [1094] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), SHIFT_REPEAT(849), + [1097] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), SHIFT_REPEAT(852), + [1100] = {.entry = {.count = 1, .reusable = false}}, SHIFT(849), + [1102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [1104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 142), + [1106] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 142), + [1108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 4, .production_id = 54), + [1110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 4, .production_id = 54), + [1112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(339), + [1114] = {.entry = {.count = 1, .reusable = false}}, SHIFT(338), + [1116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(132), + [1118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 4, .production_id = 55), + [1120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 4, .production_id = 55), + [1122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 5, .production_id = 77), + [1124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 5, .production_id = 77), + [1126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, .production_id = 80), + [1128] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, .production_id = 80), + [1130] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, .production_id = 56), + [1132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, .production_id = 56), + [1134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 74), + [1136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 74), + [1138] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 128), + [1140] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 128), + [1142] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 124), + [1144] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 124), + [1146] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 2), + [1148] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_tuple_pattern, 2), REDUCE(sym_tuple, 2), + [1151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 2), + [1153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 2), + [1155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_pattern, 2), + [1157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, .production_id = 81), + [1159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, .production_id = 81), + [1161] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 6, .production_id = 107), + [1163] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 6, .production_id = 107), + [1165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2), + [1167] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_list_pattern, 2), REDUCE(sym_list, 2), + [1170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2), + [1172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 2), + [1174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_pattern, 2), + [1176] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 3, .production_id = 56), + [1178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 3, .production_id = 56), + [1180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 4, .production_id = 133), + [1182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 4, .production_id = 133), + [1184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 6, .production_id = 156), + [1186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 6, .production_id = 156), + [1188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 4, .production_id = 81), + [1190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 4, .production_id = 81), + [1192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, .production_id = 148), + [1194] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, .production_id = 148), + [1196] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, .production_id = 149), + [1198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, .production_id = 149), + [1200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 116), + [1202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 116), + [1204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 7, .production_id = 138), + [1206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 7, .production_id = 138), + [1208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorated_definition, 2, .production_id = 19), + [1210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_decorated_definition, 2, .production_id = 19), + [1212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, .production_id = 79), + [1214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, .production_id = 79), + [1216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 143), + [1218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 143), + [1220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 5, .production_id = 86), + [1222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 5, .production_id = 86), + [1224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 141), + [1226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 141), + [1228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 10, .production_id = 159), + [1230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 10, .production_id = 159), + [1232] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 158), + [1234] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 158), + [1236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 154), + [1238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 154), + [1240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 153), + [1242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 153), + [1244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 9, .production_id = 152), + [1246] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 9, .production_id = 152), + [1248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 145), + [1250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 145), + [1252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, .production_id = 82), + [1254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, .production_id = 82), + [1256] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 6, .production_id = 105), + [1258] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 6, .production_id = 105), + [1260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, .production_id = 56), + [1262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, .production_id = 56), + [1264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 6, .production_id = 108), + [1266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 6, .production_id = 108), + [1268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 3, .production_id = 56), + [1270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 3, .production_id = 56), + [1272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 103), + [1274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 103), + [1276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, .production_id = 78), + [1278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, .production_id = 78), + [1280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 89), + [1282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 89), + [1284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 137), + [1286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 137), + [1288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 75), + [1290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 75), + [1292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 151), + [1294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 151), + [1296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 90), + [1298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 90), + [1300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 136), + [1302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 136), + [1304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 144), + [1306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 144), + [1308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 150), + [1310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 150), + [1312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 4, .production_id = 57), + [1314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 4, .production_id = 57), + [1316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, .production_id = 59), + [1318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, .production_id = 59), + [1320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, .production_id = 60), + [1322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, .production_id = 60), + [1324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 4, .production_id = 64), + [1326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 4, .production_id = 64), + [1328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 88), + [1330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 88), + [1332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 106), + [1334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 106), + [1336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 7, .production_id = 81), + [1338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 7, .production_id = 81), + [1340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 4, .production_id = 81), + [1342] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 4, .production_id = 81), + [1344] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 127), + [1346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 127), + [1348] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 101), + [1350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 101), + [1352] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 126), + [1354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 126), + [1356] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 125), + [1358] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 125), + [1360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 7, .production_id = 123), + [1362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 7, .production_id = 123), + [1364] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 117), + [1366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 117), + [1368] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 115), + [1370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 115), + [1372] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 114), + [1374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 114), + [1376] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 113), + [1378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 113), + [1380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 3, .production_id = 50), + [1382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(685), + [1384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1207), + [1386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, .production_id = 24), + [1388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_concatenated_string, 2), + [1390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_concatenated_string, 2), + [1392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), + [1394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), + [1396] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(944), + [1399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3, .production_id = 20), + [1401] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3, .production_id = 20), + [1403] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2, .production_id = 2), + [1405] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 2, .production_id = 2), + [1407] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_comprehension, 4, .production_id = 51), + [1409] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_comprehension, 4, .production_id = 51), + [1411] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set_comprehension, 4, .production_id = 51), + [1413] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set_comprehension, 4, .production_id = 51), + [1415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 61), + [1417] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 61), + [1419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 5, .production_id = 61), + [1421] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 5, .production_id = 61), + [1423] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, .production_id = 61), + [1425] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, .production_id = 61), + [1427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, .production_id = 92), + [1429] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, .production_id = 92), + [1431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 2), + [1433] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 2), + [1435] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, .production_id = 67), + [1437] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, .production_id = 67), + [1439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, .production_id = 31), + [1441] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, .production_id = 31), + [1443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3), + [1445] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3), + [1447] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set, 3, .production_id = 25), + [1449] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set, 3, .production_id = 25), + [1451] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3, .production_id = 31), + [1453] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3, .production_id = 31), + [1455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3), + [1457] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3), + [1459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, .production_id = 25), + [1461] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, .production_id = 25), + [1463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 3, .production_id = 25), + [1465] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 3, .production_id = 25), + [1467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression, 3, .production_id = 26), + [1469] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression, 3, .production_id = 26), + [1471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 31), + [1473] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 31), + [1475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1449), + [1477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), + [1479] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1), + [1481] = {.entry = {.count = 1, .reusable = false}}, SHIFT(716), + [1483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(707), + [1485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(696), + [1487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695), + [1489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(692), + [1491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), + [1493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(690), + [1495] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1), + [1497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(716), + [1499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1436), + [1501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(687), + [1503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(686), + [1505] = {.entry = {.count = 1, .reusable = false}}, SHIFT(696), + [1507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(673), + [1509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 2), + [1511] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 2), + [1513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call, 2, .production_id = 17), + [1515] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call, 2, .production_id = 17), + [1517] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, .production_id = 61), + [1519] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, .production_id = 61), + [1521] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_comprehension, 4, .production_id = 51), + [1523] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_comprehension, 4, .production_id = 51), + [1525] = {.entry = {.count = 1, .reusable = false}}, SHIFT(762), + [1527] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_separator, 1), + [1529] = {.entry = {.count = 1, .reusable = false}}, SHIFT(767), + [1531] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_expression, 4, .production_id = 51), + [1533] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_expression, 4, .production_id = 51), + [1535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 67), + [1537] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 67), + [1539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, .production_id = 31), + [1541] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, .production_id = 31), + [1543] = {.entry = {.count = 1, .reusable = false}}, SHIFT(693), + [1545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(698), + [1547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(702), + [1549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(703), + [1551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(704), + [1553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(705), + [1555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(693), + [1557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1446), + [1559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(710), + [1561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(711), + [1563] = {.entry = {.count = 1, .reusable = false}}, SHIFT(702), + [1565] = {.entry = {.count = 1, .reusable = true}}, SHIFT(676), + [1567] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 92), + [1569] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 92), + [1571] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_operator, 3, .production_id = 39), + [1573] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_operator, 3, .production_id = 39), + [1575] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_operator, 2, .production_id = 13), + [1577] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_operator, 2, .production_id = 13), + [1579] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 41), + [1581] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 41), + [1583] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 71), + [1585] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 71), + [1587] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 72), + [1589] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 72), + [1591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(452), + [1593] = {.entry = {.count = 1, .reusable = false}}, SHIFT(794), + [1595] = {.entry = {.count = 1, .reusable = false}}, SHIFT(694), + [1597] = {.entry = {.count = 1, .reusable = false}}, SHIFT(832), + [1599] = {.entry = {.count = 1, .reusable = false}}, SHIFT(691), + [1601] = {.entry = {.count = 1, .reusable = false}}, SHIFT(618), + [1603] = {.entry = {.count = 1, .reusable = false}}, SHIFT(679), + [1605] = {.entry = {.count = 1, .reusable = false}}, SHIFT(712), + [1607] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(934), + [1610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1500), + [1612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [1614] = {.entry = {.count = 1, .reusable = false}}, SHIFT(730), + [1616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(723), + [1618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(722), + [1620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(721), + [1622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(717), + [1624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(301), + [1626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(714), + [1628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(730), + [1630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1494), + [1632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(706), + [1634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(700), + [1636] = {.entry = {.count = 1, .reusable = false}}, SHIFT(722), + [1638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(669), + [1640] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(952), + [1643] = {.entry = {.count = 1, .reusable = false}}, SHIFT(879), + [1645] = {.entry = {.count = 1, .reusable = false}}, SHIFT(880), + [1647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1448), + [1649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), + [1651] = {.entry = {.count = 1, .reusable = false}}, SHIFT(729), + [1653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(728), + [1655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(680), + [1657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(697), + [1659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(681), + [1661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), + [1663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(699), + [1665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(729), + [1667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1430), + [1669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(708), + [1671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(682), + [1673] = {.entry = {.count = 1, .reusable = false}}, SHIFT(680), + [1675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(670), + [1677] = {.entry = {.count = 1, .reusable = false}}, SHIFT(451), + [1679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(392), + [1681] = {.entry = {.count = 1, .reusable = false}}, SHIFT(925), + [1683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(853), + [1685] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1259), + [1687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1390), + [1689] = {.entry = {.count = 1, .reusable = false}}, SHIFT(971), + [1691] = {.entry = {.count = 1, .reusable = true}}, SHIFT(856), + [1693] = {.entry = {.count = 1, .reusable = true}}, SHIFT(892), + [1695] = {.entry = {.count = 1, .reusable = false}}, SHIFT(943), + [1697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(943), + [1699] = {.entry = {.count = 1, .reusable = false}}, SHIFT(975), + [1701] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 2), + [1703] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 2), + [1705] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 3), + [1707] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 3), + [1709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1006), + [1711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1011), + [1713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(987), + [1715] = {.entry = {.count = 1, .reusable = false}}, SHIFT(999), + [1717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(998), + [1719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(981), + [1721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(970), + [1723] = {.entry = {.count = 1, .reusable = false}}, SHIFT(984), + [1725] = {.entry = {.count = 1, .reusable = false}}, SHIFT(957), + [1727] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), + [1729] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), + [1731] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(702), + [1734] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1446), + [1737] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(702), + [1740] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(676), + [1743] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(696), + [1746] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1436), + [1749] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(696), + [1752] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(673), + [1755] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comparison_operator, 2, .production_id = 18), + [1757] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comparison_operator, 2, .production_id = 18), + [1759] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 36), + [1761] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 36), SHIFT_REPEAT(607), + [1764] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 3, .production_id = 25), + [1766] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 3, .production_id = 25), + [1768] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 31), + [1770] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(722), + [1773] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1494), + [1776] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(722), + [1779] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(669), + [1782] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, .production_id = 34), + [1784] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, .production_id = 33), + [1786] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(680), + [1789] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1430), + [1792] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(680), + [1795] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(670), + [1798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [1800] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, .production_id = 16), + [1802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1339), + [1804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(596), + [1806] = {.entry = {.count = 1, .reusable = false}}, SHIFT(636), + [1808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(444), + [1810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(715), + [1812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1340), + [1814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(463), + [1816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), + [1818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(458), + [1820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [1822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), + [1824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [1826] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [1828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(481), + [1830] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1365), + [1832] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1008), + [1834] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1357), + [1836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(993), + [1838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1177), + [1840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1380), + [1842] = {.entry = {.count = 1, .reusable = true}}, SHIFT(986), + [1844] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 2), + [1846] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 3), + [1848] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_await, 2), + [1850] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_await, 2), + [1852] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_not_operator, 2, .production_id = 10), + [1854] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_not_operator, 2, .production_id = 10), + [1856] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), + [1858] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), SHIFT_REPEAT(1445), + [1861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), + [1863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), + [1865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(473), + [1867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1416), + [1869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(601), + [1871] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 1, .production_id = 7), + [1873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(455), + [1875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(457), + [1877] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 4, .production_id = 66), + [1879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(429), + [1881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(446), + [1883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(409), + [1885] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_conditional_expression, 5), + [1887] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_conditional_expression, 5), + [1889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1445), + [1891] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 2), + [1893] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_value_pattern, 2), + [1895] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 3, .production_id = 32), + [1897] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 3, .production_id = 32), + [1899] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1), + [1901] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, .production_id = 35), + [1903] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, .production_id = 35), + [1905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(842), + [1907] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_with_item, 1, .dynamic_precedence = -1, .production_id = 12), SHIFT(182), + [1910] = {.entry = {.count = 1, .reusable = false}}, SHIFT(608), + [1912] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean_operator, 3, .production_id = 39), + [1914] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean_operator, 3, .production_id = 39), + [1916] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 4, .production_id = 66), + [1918] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 1), + [1920] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_capture_pattern, 1), + [1922] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, .production_id = 27), + [1924] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, .production_id = 27), + [1926] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 2), + [1928] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [1930] = {.entry = {.count = 1, .reusable = true}}, SHIFT(628), + [1932] = {.entry = {.count = 1, .reusable = true}}, SHIFT(785), + [1934] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 31), + [1936] = {.entry = {.count = 1, .reusable = false}}, SHIFT(178), + [1938] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1031), + [1940] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1031), + [1942] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), + [1944] = {.entry = {.count = 1, .reusable = true}}, SHIFT(744), + [1946] = {.entry = {.count = 1, .reusable = true}}, SHIFT(736), + [1948] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(178), + [1951] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(1031), + [1954] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(1031), + [1957] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), + [1959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(758), + [1961] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 3), + [1963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(799), + [1965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [1967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(609), + [1969] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1, .production_id = 83), + [1971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1381), + [1973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(610), + [1975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820), + [1977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [1979] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat, 2, .production_id = 14), + [1981] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat, 2), + [1983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1291), + [1985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1318), + [1987] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 2, .production_id = 109), + [1989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1387), + [1991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(769), + [1993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(621), + [1995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), + [1997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2), + [1999] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2), SHIFT_REPEAT(866), + [2002] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), + [2004] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(390), + [2007] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(1416), + [2010] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(601), + [2013] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 1), + [2015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(390), + [2017] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 3), + [2019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(866), + [2021] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expression_within_for_in_clause, 1), + [2023] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 2), + [2025] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__f_expression, 1), + [2027] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 4), + [2029] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2, .production_id = 16), + [2031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [2033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1468), + [2035] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 8, .production_id = 135), + [2037] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 7, .production_id = 135), + [2039] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 7), + [2041] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 6, .production_id = 135), + [2043] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_or_pattern, 1), + [2045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(867), + [2047] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 6), + [2049] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 3), + [2051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(411), + [2053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(410), + [2055] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_group_pattern, 3, .production_id = 130), + [2057] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 122), + [2059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [2061] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 121), + [2063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [2065] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 5, .production_id = 135), + [2067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(477), + [2069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), + [2071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(415), + [2073] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 2), + [2075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [2077] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 5), + [2079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 5), + [2081] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 3), + [2083] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 9, .production_id = 135), + [2085] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 3, .production_id = 131), + [2087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1435), + [2089] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 2), + [2091] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_clause, 2), + [2093] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 140), + [2095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), + [2097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1520), + [2099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1516), + [2101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1498), + [2103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 3, .production_id = 135), + [2105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(865), + [2107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1488), + [2109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1511), + [2111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1508), + [2113] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 4, .production_id = 135), + [2115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), + [2117] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(245), + [2120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 2), + [2122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 4), + [2124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 4, .production_id = 147), + [2126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 4), + [2128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2), + [2130] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2), SHIFT_REPEAT(280), + [2133] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 4, .production_id = 100), + [2135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), + [2137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1061), + [2139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1144), + [2141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1444), + [2143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 3, .production_id = 32), + [2145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 1), + [2147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1139), + [2149] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1456), + [2151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1457), + [2153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), + [2155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [2157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(352), + [2159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type, 1), + [2161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_pattern, 1), + [2163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1440), + [2165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(395), + [2167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(396), + [2169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(480), + [2171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 4, .production_id = 15), + [2173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(426), + [2175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_content, 1), + [2177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1055), + [2179] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1055), + [2181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string_content, 1), + [2183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 4, .production_id = 66), + [2185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__right_hand_side, 1), + [2187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252), + [2189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(624), + [2191] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pair, 3, .production_id = 62), + [2193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), + [2195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), + [2197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), + [2199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2, .production_id = 10), + [2201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 2), + [2203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 2), + [2205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_delete_statement, 2, .production_id = 11), + [2207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(261), + [2209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(822), + [2211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), + [2213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(815), + [2215] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 1, .dynamic_precedence = -1, .production_id = 12), + [2217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(608), + [2219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), + [2221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(774), + [2223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 31), + [2225] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2), + [2227] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2), SHIFT_REPEAT(1055), + [2230] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2), SHIFT_REPEAT(1055), + [2233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2), + [2235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1088), + [2237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1193), + [2239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1400), + [2241] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), SHIFT_REPEAT(1477), + [2244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 2), + [2246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [2248] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 3, .production_id = 43), + [2250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 3, .production_id = 43), + [2252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 1), + [2254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2), + [2256] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2), SHIFT_REPEAT(417), + [2259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(399), + [2261] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [2263] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 95), + [2265] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), + [2267] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2), + [2269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 10), + [2271] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 4, .production_id = 43), + [2273] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 4, .production_id = 43), + [2275] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1477), + [2277] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 5, .production_id = 43), + [2279] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 5, .production_id = 43), + [2281] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [2283] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 3), + [2285] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 3), + [2287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_default_parameter, 3, .production_id = 35), + [2289] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 6, .production_id = 43), + [2291] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 6, .production_id = 43), + [2293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [2295] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 4), + [2297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 4), + [2299] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2), + [2301] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2), SHIFT_REPEAT(859), + [2304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chevron, 2), + [2306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1184), + [2308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1180), + [2310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(471), + [2312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), + [2314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, .production_id = 68), + [2316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [2318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_default_parameter, 5, .production_id = 118), + [2320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [2322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, .production_id = 94), + [2324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_as_pattern, 3, .production_id = 134), + [2326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 120), + [2328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 119), + [2330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), + [2332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 3, .production_id = 22), + [2334] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(244), + [2337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1125), + [2339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1253), + [2341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1181), + [2343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1260), + [2345] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_bound, 2, .production_id = 110), + [2347] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 2), + [2349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), + [2351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1117), + [2353] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 5, .production_id = 139), + [2355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(468), + [2357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [2359] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 3, .production_id = 30), + [2361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [2363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), + [2365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1037), + [2367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [2369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1118), + [2371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1450), + [2373] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 1, .production_id = 6), + [2375] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_star_pattern, 2, .production_id = 11), + [2377] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, .production_id = 16), + [2379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), + [2381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), + [2383] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 4, .production_id = 63), + [2385] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 36), + [2387] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 36), SHIFT_REPEAT(230), + [2390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [2392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1188), + [2394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 2), + [2396] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2), SHIFT_REPEAT(183), + [2399] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2), SHIFT_REPEAT(1117), + [2402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, .production_id = 6), + [2404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 93), + [2406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1060), + [2408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1173), + [2410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1278), + [2412] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 5, .production_id = 87), + [2414] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 4, .production_id = 53), + [2416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(398), + [2418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [2420] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 31), + [2422] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 1), + [2424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1099), + [2426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, .production_id = 27), + [2428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, .production_id = 35), + [2430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(893), + [2432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(852), + [2434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_parameter, 3, .production_id = 65), + [2436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(479), + [2438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [2440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [2442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [2444] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 5, .production_id = 15), + [2446] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2), SHIFT_REPEAT(1490), + [2449] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2), + [2451] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 1, .production_id = 6), + [2453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(434), + [2455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [2457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [2459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1061), + [2461] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_prefix, 1), + [2463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1165), + [2465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(474), + [2467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 1, .production_id = 7), + [2469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(597), + [2471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_guard, 2, .production_id = 132), + [2473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(405), + [2475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), + [2477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2), + [2479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [2481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(389), + [2483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [2485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1490), + [2487] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 2), + [2489] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 2), + [2491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1185), + [2493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [2495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [2497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [2499] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2), SHIFT_REPEAT(480), + [2502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1182), + [2504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1443), + [2506] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 52), SHIFT_REPEAT(483), + [2509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 52), + [2511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1093), + [2513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, .production_id = 22), + [2515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1095), + [2517] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_import_prefix_repeat1, 2), + [2519] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_import_prefix_repeat1, 2), SHIFT_REPEAT(1165), + [2522] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, .production_id = 16), + [2524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(595), + [2526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(448), + [2528] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3, .production_id = 49), + [2530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [2532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 28), + [2534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), + [2536] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 29), + [2538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1067), + [2540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1315), + [2542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 3), + [2544] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3), + [2546] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter, 1), + [2548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), + [2550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(438), + [2552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2), + [2554] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2), SHIFT_REPEAT(351), + [2557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(849), + [2559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1332), + [2561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1284), + [2563] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 23), + [2565] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorator, 3), + [2567] = {.entry = {.count = 1, .reusable = true}}, SHIFT(482), + [2569] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), SHIFT_REPEAT(1312), + [2572] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), + [2574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(851), + [2576] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 3), + [2578] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 3), + [2580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [2582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1412), + [2584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(968), + [2586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274), + [2588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(342), + [2590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [2592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), + [2594] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2), SHIFT_REPEAT(147), + [2597] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2), + [2599] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), + [2601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(855), + [2603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(973), + [2605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), + [2607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(343), + [2609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(896), + [2611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1142), + [2613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1147), + [2615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1020), + [2617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1250), + [2619] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), + [2621] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313), + [2623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [2625] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2), SHIFT_REPEAT(905), + [2628] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2), + [2630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1004), + [2632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(861), + [2634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(862), + [2636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), + [2638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1233), + [2640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1314), + [2642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(891), + [2644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(988), + [2646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(459), + [2648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [2650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [2652] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_aliased_import, 3, .production_id = 45), + [2654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1322), + [2656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(793), + [2658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [2660] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 1), + [2662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(895), + [2664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(802), + [2666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), + [2668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [2670] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 36), + [2672] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(222), + [2675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), + [2677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(790), + [2679] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 36), SHIFT_REPEAT(275), + [2682] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 36), + [2684] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_relative_import, 1), + [2686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [2688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [2690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358), + [2692] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), SHIFT_REPEAT(1317), + [2695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [2697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [2699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(796), + [2701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), + [2703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(640), + [2705] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [2707] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), + [2709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [2711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), + [2713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(634), + [2715] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [2717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(362), + [2719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(899), + [2721] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 4, .production_id = 111), + [2723] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 112), SHIFT_REPEAT(1020), + [2726] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 112), + [2728] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [2730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(620), + [2732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208), + [2734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(894), + [2736] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1087), + [2738] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1110), + [2740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [2742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(369), + [2744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [2746] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, .production_id = 37), + [2748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), + [2750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), + [2752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(351), + [2754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 2), + [2756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364), + [2758] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1489), + [2760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [2762] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 1, .production_id = 73), + [2764] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 1, .production_id = 73), + [2766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), + [2768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(810), + [2770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [2772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(836), + [2774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(831), + [2776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [2778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(830), + [2780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), + [2782] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), SHIFT_REPEAT(903), + [2785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [2787] = {.entry = {.count = 1, .reusable = true}}, SHIFT(632), + [2789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(209), + [2791] = {.entry = {.count = 1, .reusable = true}}, SHIFT(644), + [2793] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), + [2795] = {.entry = {.count = 1, .reusable = true}}, SHIFT(613), + [2797] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), + [2799] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 3, .dynamic_precedence = -1, .production_id = 58), + [2801] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), + [2803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), + [2805] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255), + [2807] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), + [2809] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1307), + [2811] = {.entry = {.count = 1, .reusable = true}}, SHIFT(827), + [2813] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), + [2815] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [2817] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_maybe_star_pattern, 1), + [2819] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_patterns, 1), + [2821] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [2823] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1195), + [2825] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [2827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), + [2829] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), SHIFT_REPEAT(902), + [2832] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2), + [2834] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2), SHIFT_REPEAT(863), + [2837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(821), + [2839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), + [2841] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, .production_id = 97), SHIFT_REPEAT(314), + [2844] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, .production_id = 97), + [2846] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [2848] = {.entry = {.count = 1, .reusable = true}}, SHIFT(809), + [2850] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1170), + [2852] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), + [2854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(835), + [2856] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1175), + [2858] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), + [2860] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [2862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [2864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), + [2866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1069), + [2868] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2), + [2870] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2), SHIFT_REPEAT(1353), + [2873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [2875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), + [2877] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 1), + [2879] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 3, .production_id = 85), + [2881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(857), + [2883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1329), + [2885] = {.entry = {.count = 1, .reusable = true}}, SHIFT(776), + [2887] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), + [2889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(966), + [2891] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1215), + [2893] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1338), + [2895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(898), + [2897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(462), + [2899] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 2, .production_id = 15), + [2901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(461), + [2903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(858), + [2905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(989), + [2907] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_positional_separator, 1), + [2909] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 6, .production_id = 98), + [2911] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 2, .production_id = 84), + [2913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [2915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(341), + [2917] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pass_statement, 1), + [2919] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_break_statement, 1), + [2921] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_continue_statement, 1), + [2923] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 6, .production_id = 99), + [2925] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevartuple_parameter, 2, .production_id = 23), + [2927] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_key_value_pattern, 3, .production_id = 62), + [2929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1087), + [2931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1424), + [2933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [2935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(350), + [2937] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_positional_pattern, 1), + [2939] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_double_star_pattern, 2, .production_id = 11), + [2941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1426), + [2943] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 5, .production_id = 91), + [2945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [2947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(368), + [2949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [2951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [2953] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 3), + [2955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), + [2957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(322), + [2959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [2961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(346), + [2963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [2965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), + [2967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [2969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), + [2971] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 67), + [2973] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 2), + [2975] = {.entry = {.count = 1, .reusable = false}}, SHIFT(990), + [2977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(990), + [2979] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 2, .production_id = 5), + [2981] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 31), + [2983] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 4, .production_id = 46), + [2985] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_augmented_assignment, 3, .production_id = 39), + [2987] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1010), + [2989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1010), + [2991] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 85), + [2993] = {.entry = {.count = 1, .reusable = false}}, SHIFT(951), + [2995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(951), + [2997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, .production_id = 38), + [2999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(977), + [3001] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, .production_id = 48), + [3003] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, .production_id = 47), + [3005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(854), + [3007] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_keyword_pattern, 3, .production_id = 157), + [3009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_wildcard_import, 1), + [3011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1496), + [3013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(972), + [3015] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_paramspec_parameter, 2, .production_id = 23), + [3017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(850), + [3019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(612), + [3021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(860), + [3023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(817), + [3025] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_relative_import, 2, .production_id = 23), + [3027] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1222), + [3029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(839), + [3031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(848), + [3033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), + [3035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(818), + [3037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1342), + [3039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(606), + [3041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(775), + [3043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1350), + [3045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [3047] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 4), + [3049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(397), + [3051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [3053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(804), + [3055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(724), + [3057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(784), + [3059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(622), + [3061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(635), + [3063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(873), + [3065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [3067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(718), + [3069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(611), + [3071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(795), + [3073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(791), + [3075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1089), + [3077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1056), + [3079] = {.entry = {.count = 1, .reusable = true}}, SHIFT(637), + [3081] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1382), + [3083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1116), + [3085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(917), + [3087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(688), + [3089] = {.entry = {.count = 1, .reusable = true}}, SHIFT(780), + [3091] = {.entry = {.count = 1, .reusable = true}}, SHIFT(829), + [3093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), + [3095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1226), + [3097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [3099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1129), + [3101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(465), + [3103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1374), + [3105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1352), + [3107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1402), + [3109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(436), + [3111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [3113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(623), + [3115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), + [3117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(625), + [3119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [3121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(819), + [3123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(626), + [3125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [3127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814), + [3129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), + [3131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [3133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(813), + [3135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [3137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(840), + [3139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [3141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1101), + [3143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [3145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [3147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), + [3149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [3151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [3153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(627), + [3155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [3157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(864), + [3159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 5), + [3161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 3), + [3163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1223), + [3165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [3167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(435), + [3169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1179), + [3171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(701), + [3173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [3175] = {.entry = {.count = 1, .reusable = true}}, SHIFT(969), + [3177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(874), + [3179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1107), + [3181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [3183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(365), + [3185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), + [3187] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [3189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(771), + [3191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(773), + [3193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [3195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [3197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1108), + [3199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1155), + [3201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1154), + [3203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1128), + [3205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [3207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(777), + [3209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1176), + [3211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1074), + [3213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1132), + [3215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1131), + [3217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_parameters, 1), + [3219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(437), +}; + +#ifdef __cplusplus +extern "C" { +#endif +void *tree_sitter_python_external_scanner_create(void); +void tree_sitter_python_external_scanner_destroy(void *); +bool tree_sitter_python_external_scanner_scan(void *, TSLexer *, const bool *); +unsigned tree_sitter_python_external_scanner_serialize(void *, char *); +void tree_sitter_python_external_scanner_deserialize(void *, const char *, unsigned); + +#ifdef _WIN32 +#define extern __declspec(dllexport) +#endif + +extern const TSLanguage *tree_sitter_python(void) { + static const TSLanguage language = { + .version = LANGUAGE_VERSION, + .symbol_count = SYMBOL_COUNT, + .alias_count = ALIAS_COUNT, + .token_count = TOKEN_COUNT, + .external_token_count = EXTERNAL_TOKEN_COUNT, + .state_count = STATE_COUNT, + .large_state_count = LARGE_STATE_COUNT, + .production_id_count = PRODUCTION_ID_COUNT, + .field_count = FIELD_COUNT, + .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, + .parse_table = &ts_parse_table[0][0], + .small_parse_table = ts_small_parse_table, + .small_parse_table_map = ts_small_parse_table_map, + .parse_actions = ts_parse_actions, + .symbol_names = ts_symbol_names, + .field_names = ts_field_names, + .field_map_slices = ts_field_map_slices, + .field_map_entries = ts_field_map_entries, + .symbol_metadata = ts_symbol_metadata, + .public_symbol_map = ts_symbol_map, + .alias_map = ts_non_terminal_alias_map, + .alias_sequences = &ts_alias_sequences[0][0], + .lex_modes = ts_lex_modes, + .lex_fn = ts_lex, + .keyword_lex_fn = ts_lex_keywords, + .keyword_capture_token = sym_identifier, + .external_scanner = { + &ts_external_scanner_states[0][0], + ts_external_scanner_symbol_map, + tree_sitter_python_external_scanner_create, + tree_sitter_python_external_scanner_destroy, + tree_sitter_python_external_scanner_scan, + tree_sitter_python_external_scanner_serialize, + tree_sitter_python_external_scanner_deserialize, + }, + .primary_state_ids = ts_primary_state_ids, + }; + return &language; +} +#ifdef __cplusplus +} +#endif diff --git a/python/extractor/tsg-python/tree-sitter-python/src/scanner.cc b/python/extractor/tsg-python/tree-sitter-python/src/scanner.cc new file mode 100644 index 00000000000..140bb65b1cf --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/src/scanner.cc @@ -0,0 +1,402 @@ +#include +#include +#include +#include +#include +#include +namespace { + +using std::vector; +using std::iswspace; +using std::memcpy; + +enum TokenType { + NEWLINE, + INDENT, + DEDENT, + STRING_START, + STRING_CONTENT, + STRING_END, +}; + +struct Delimiter { + enum { + SingleQuote = 1 << 0, + DoubleQuote = 1 << 1, + BackQuote = 1 << 2, + Raw = 1 << 3, + Format = 1 << 4, + Triple = 1 << 5, + Bytes = 1 << 6, + }; + + Delimiter() : flags(0) {} + + bool is_format() const { + return flags & Format; + } + + bool is_raw() const { + return flags & Raw; + } + + bool is_triple() const { + return flags & Triple; + } + + bool is_bytes() const { + return flags & Bytes; + } + + int32_t end_character() const { + if (flags & SingleQuote) return '\''; + if (flags & DoubleQuote) return '"'; + if (flags & BackQuote) return '`'; + return 0; + } + + void set_format() { + flags |= Format; + } + + void set_raw() { + flags |= Raw; + } + + void set_triple() { + flags |= Triple; + } + + void set_bytes() { + flags |= Bytes; + } + + void set_end_character(int32_t character) { + switch (character) { + case '\'': + flags |= SingleQuote; + break; + case '"': + flags |= DoubleQuote; + break; + case '`': + flags |= BackQuote; + break; + default: + assert(false); + } + } + + char flags; +}; + +struct Scanner { + Scanner() { + assert(sizeof(Delimiter) == sizeof(char)); + deserialize(NULL, 0); + } + + unsigned serialize(char *buffer) { + size_t i = 0; + + size_t delimiter_count = delimiter_stack.size(); + if (delimiter_count > UINT8_MAX) delimiter_count = UINT8_MAX; + buffer[i++] = delimiter_count; + + if (delimiter_count > 0) { + memcpy(&buffer[i], delimiter_stack.data(), delimiter_count); + } + i += delimiter_count; + + vector::iterator + iter = indent_length_stack.begin() + 1, + end = indent_length_stack.end(); + + for (; iter != end && i < TREE_SITTER_SERIALIZATION_BUFFER_SIZE; ++iter) { + buffer[i++] = *iter; + } + + return i; + } + + void deserialize(const char *buffer, unsigned length) { + delimiter_stack.clear(); + indent_length_stack.clear(); + indent_length_stack.push_back(0); + + if (length > 0) { + size_t i = 0; + + size_t delimiter_count = (uint8_t)buffer[i++]; + delimiter_stack.resize(delimiter_count); + if (delimiter_count > 0) { + memcpy(delimiter_stack.data(), &buffer[i], delimiter_count); + } + i += delimiter_count; + + for (; i < length; i++) { + indent_length_stack.push_back(buffer[i]); + } + } + } + + void advance(TSLexer *lexer) { + lexer->advance(lexer, false); + } + + void skip(TSLexer *lexer) { + lexer->advance(lexer, true); + } + + bool scan(TSLexer *lexer, const bool *valid_symbols) { + if (valid_symbols[STRING_CONTENT] && !valid_symbols[INDENT] && !delimiter_stack.empty()) { + Delimiter delimiter = delimiter_stack.back(); + int32_t end_character = delimiter.end_character(); + bool has_content = false; + while (lexer->lookahead) { + if ((lexer->lookahead == '{' || lexer->lookahead == '}') && delimiter.is_format()) { + lexer->mark_end(lexer); + lexer->result_symbol = STRING_CONTENT; + return has_content; + } else if (lexer->lookahead == '\\') { + if (delimiter.is_raw()) { + lexer->advance(lexer, false); + continue; + } else if (delimiter.is_bytes()) { + lexer->mark_end(lexer); + lexer->advance(lexer, false); + if (lexer->lookahead == 'N' || lexer->lookahead == 'u' || lexer->lookahead == 'U') { + // In bytes string, \N{...}, \uXXXX and \UXXXXXXXX are not escape sequences + // https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals + lexer->advance(lexer, false); + } else { + lexer->result_symbol = STRING_CONTENT; + return has_content; + } + } else { + lexer->mark_end(lexer); + lexer->result_symbol = STRING_CONTENT; + return has_content; + } + } else if (lexer->lookahead == end_character) { + if (delimiter.is_triple()) { + lexer->mark_end(lexer); + lexer->advance(lexer, false); + if (lexer->lookahead == end_character) { + lexer->advance(lexer, false); + if (lexer->lookahead == end_character) { + if (has_content) { + lexer->result_symbol = STRING_CONTENT; + } else { + lexer->advance(lexer, false); + lexer->mark_end(lexer); + delimiter_stack.pop_back(); + lexer->result_symbol = STRING_END; + } + return true; + } else { + lexer->mark_end(lexer); + lexer->result_symbol = STRING_CONTENT; + return true; + } + } else { + lexer->mark_end(lexer); + lexer->result_symbol = STRING_CONTENT; + return true; + } + } else { + if (has_content) { + lexer->result_symbol = STRING_CONTENT; + } else { + lexer->advance(lexer, false); + delimiter_stack.pop_back(); + lexer->result_symbol = STRING_END; + } + lexer->mark_end(lexer); + return true; + } + } else if (lexer->lookahead == '\n' && has_content && !delimiter.is_triple()) { + return false; + } + advance(lexer); + has_content = true; + } + } + + lexer->mark_end(lexer); + + bool found_end_of_line = false; + uint32_t indent_length = 0; + int32_t first_comment_indent_length = -1; + for (;;) { + if (lexer->lookahead == '\n') { + found_end_of_line = true; + indent_length = 0; + skip(lexer); + } else if (lexer->lookahead == ' ') { + indent_length++; + skip(lexer); + } else if (lexer->lookahead == '\r') { + indent_length = 0; + skip(lexer); + } else if (lexer->lookahead == '\t') { + indent_length += 8; + skip(lexer); + } else if (lexer->lookahead == '#') { + if (first_comment_indent_length == -1) { + first_comment_indent_length = (int32_t)indent_length; + } + while (lexer->lookahead && lexer->lookahead != '\n') { + skip(lexer); + } + skip(lexer); + indent_length = 0; + } else if (lexer->lookahead == '\\') { + skip(lexer); + if (lexer->lookahead == '\r') { + skip(lexer); + } + if (lexer->lookahead == '\n') { + skip(lexer); + } else { + return false; + } + } else if (lexer->lookahead == '\f') { + indent_length = 0; + skip(lexer); + } else if (lexer->lookahead == 0) { + indent_length = 0; + found_end_of_line = true; + break; + } else { + break; + } + } + + if (found_end_of_line) { + if (!indent_length_stack.empty()) { + uint16_t current_indent_length = indent_length_stack.back(); + + if ( + valid_symbols[INDENT] && + indent_length > current_indent_length + ) { + indent_length_stack.push_back(indent_length); + lexer->result_symbol = INDENT; + return true; + } + + if ( + valid_symbols[DEDENT] && + indent_length < current_indent_length && + + // Wait to create a dedent token until we've consumed any comments + // whose indentation matches the current block. + first_comment_indent_length < (int32_t)current_indent_length + ) { + indent_length_stack.pop_back(); + lexer->result_symbol = DEDENT; + return true; + } + } + + if (valid_symbols[NEWLINE]) { + lexer->result_symbol = NEWLINE; + return true; + } + } + + if (first_comment_indent_length == -1 && valid_symbols[STRING_START]) { + Delimiter delimiter; + + bool has_flags = false; + while (lexer->lookahead) { + if (lexer->lookahead == 'f' || lexer->lookahead == 'F') { + delimiter.set_format(); + } else if (lexer->lookahead == 'r' || lexer->lookahead == 'R') { + delimiter.set_raw(); + } else if (lexer->lookahead == 'b' || lexer->lookahead == 'B') { + delimiter.set_bytes(); + } else if (lexer->lookahead != 'u' && lexer->lookahead != 'U') { + break; + } + has_flags = true; + advance(lexer); + } + + if (lexer->lookahead == '`') { + delimiter.set_end_character('`'); + advance(lexer); + lexer->mark_end(lexer); + } else if (lexer->lookahead == '\'') { + delimiter.set_end_character('\''); + advance(lexer); + lexer->mark_end(lexer); + if (lexer->lookahead == '\'') { + advance(lexer); + if (lexer->lookahead == '\'') { + advance(lexer); + lexer->mark_end(lexer); + delimiter.set_triple(); + } + } + } else if (lexer->lookahead == '"') { + delimiter.set_end_character('"'); + advance(lexer); + lexer->mark_end(lexer); + if (lexer->lookahead == '"') { + advance(lexer); + if (lexer->lookahead == '"') { + advance(lexer); + lexer->mark_end(lexer); + delimiter.set_triple(); + } + } + } + + if (delimiter.end_character()) { + delimiter_stack.push_back(delimiter); + lexer->result_symbol = STRING_START; + return true; + } else if (has_flags) { + return false; + } + } + + return false; + } + + vector indent_length_stack; + vector delimiter_stack; +}; + +} + +extern "C" { + +void *tree_sitter_python_external_scanner_create() { + return new Scanner(); +} + +bool tree_sitter_python_external_scanner_scan(void *payload, TSLexer *lexer, + const bool *valid_symbols) { + Scanner *scanner = static_cast(payload); + return scanner->scan(lexer, valid_symbols); +} + +unsigned tree_sitter_python_external_scanner_serialize(void *payload, char *buffer) { + Scanner *scanner = static_cast(payload); + return scanner->serialize(buffer); +} + +void tree_sitter_python_external_scanner_deserialize(void *payload, const char *buffer, unsigned length) { + Scanner *scanner = static_cast(payload); + scanner->deserialize(buffer, length); +} + +void tree_sitter_python_external_scanner_destroy(void *payload) { + Scanner *scanner = static_cast(payload); + delete scanner; +} + +} diff --git a/python/extractor/tsg-python/tree-sitter-python/src/tree_sitter/parser.h b/python/extractor/tsg-python/tree-sitter-python/src/tree_sitter/parser.h new file mode 100644 index 00000000000..2b14ac1046b --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/src/tree_sitter/parser.h @@ -0,0 +1,224 @@ +#ifndef TREE_SITTER_PARSER_H_ +#define TREE_SITTER_PARSER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define ts_builtin_sym_error ((TSSymbol)-1) +#define ts_builtin_sym_end 0 +#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 + +typedef uint16_t TSStateId; + +#ifndef TREE_SITTER_API_H_ +typedef uint16_t TSSymbol; +typedef uint16_t TSFieldId; +typedef struct TSLanguage TSLanguage; +#endif + +typedef struct { + TSFieldId field_id; + uint8_t child_index; + bool inherited; +} TSFieldMapEntry; + +typedef struct { + uint16_t index; + uint16_t length; +} TSFieldMapSlice; + +typedef struct { + bool visible; + bool named; + bool supertype; +} TSSymbolMetadata; + +typedef struct TSLexer TSLexer; + +struct TSLexer { + int32_t lookahead; + TSSymbol result_symbol; + void (*advance)(TSLexer *, bool); + void (*mark_end)(TSLexer *); + uint32_t (*get_column)(TSLexer *); + bool (*is_at_included_range_start)(const TSLexer *); + bool (*eof)(const TSLexer *); +}; + +typedef enum { + TSParseActionTypeShift, + TSParseActionTypeReduce, + TSParseActionTypeAccept, + TSParseActionTypeRecover, +} TSParseActionType; + +typedef union { + struct { + uint8_t type; + TSStateId state; + bool extra; + bool repetition; + } shift; + struct { + uint8_t type; + uint8_t child_count; + TSSymbol symbol; + int16_t dynamic_precedence; + uint16_t production_id; + } reduce; + uint8_t type; +} TSParseAction; + +typedef struct { + uint16_t lex_state; + uint16_t external_lex_state; +} TSLexMode; + +typedef union { + TSParseAction action; + struct { + uint8_t count; + bool reusable; + } entry; +} TSParseActionEntry; + +struct TSLanguage { + uint32_t version; + uint32_t symbol_count; + uint32_t alias_count; + uint32_t token_count; + uint32_t external_token_count; + uint32_t state_count; + uint32_t large_state_count; + uint32_t production_id_count; + uint32_t field_count; + uint16_t max_alias_sequence_length; + const uint16_t *parse_table; + const uint16_t *small_parse_table; + const uint32_t *small_parse_table_map; + const TSParseActionEntry *parse_actions; + const char * const *symbol_names; + const char * const *field_names; + const TSFieldMapSlice *field_map_slices; + const TSFieldMapEntry *field_map_entries; + const TSSymbolMetadata *symbol_metadata; + const TSSymbol *public_symbol_map; + const uint16_t *alias_map; + const TSSymbol *alias_sequences; + const TSLexMode *lex_modes; + bool (*lex_fn)(TSLexer *, TSStateId); + bool (*keyword_lex_fn)(TSLexer *, TSStateId); + TSSymbol keyword_capture_token; + struct { + const bool *states; + const TSSymbol *symbol_map; + void *(*create)(void); + void (*destroy)(void *); + bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist); + unsigned (*serialize)(void *, char *); + void (*deserialize)(void *, const char *, unsigned); + } external_scanner; + const TSStateId *primary_state_ids; +}; + +/* + * Lexer Macros + */ + +#define START_LEXER() \ + bool result = false; \ + bool skip = false; \ + bool eof = false; \ + int32_t lookahead; \ + goto start; \ + next_state: \ + lexer->advance(lexer, skip); \ + start: \ + skip = false; \ + lookahead = lexer->lookahead; + +#define ADVANCE(state_value) \ + { \ + state = state_value; \ + goto next_state; \ + } + +#define SKIP(state_value) \ + { \ + skip = true; \ + state = state_value; \ + goto next_state; \ + } + +#define ACCEPT_TOKEN(symbol_value) \ + result = true; \ + lexer->result_symbol = symbol_value; \ + lexer->mark_end(lexer); + +#define END_STATE() return result; + +/* + * Parse Table Macros + */ + +#define SMALL_STATE(id) id - LARGE_STATE_COUNT + +#define STATE(id) id + +#define ACTIONS(id) id + +#define SHIFT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = state_value \ + } \ + }} + +#define SHIFT_REPEAT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = state_value, \ + .repetition = true \ + } \ + }} + +#define SHIFT_EXTRA() \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .extra = true \ + } \ + }} + +#define REDUCE(symbol_val, child_count_val, ...) \ + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_val, \ + .child_count = child_count_val, \ + __VA_ARGS__ \ + }, \ + }} + +#define RECOVER() \ + {{ \ + .type = TSParseActionTypeRecover \ + }} + +#define ACCEPT_INPUT() \ + {{ \ + .type = TSParseActionTypeAccept \ + }} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_PARSER_H_ diff --git a/python/extractor/tsg-python/tsg_to_dot.py b/python/extractor/tsg-python/tsg_to_dot.py new file mode 100644 index 00000000000..a39111f5077 --- /dev/null +++ b/python/extractor/tsg-python/tsg_to_dot.py @@ -0,0 +1,60 @@ +# Convert output of tree-sitter-graph to dot format. + +import sys +import re + +# regular expression to match a node +node_re = re.compile(r"node (?P\d+)") + +# regular expression to match an edge +edge_re = re.compile(r"edge (?P\d+) -> (?P\d+)") + +# regular expression to match a property +prop_re = re.compile(r"\s+(?P\w+): (?P.*)") + +# regular expression to match a link: "[graph node n]" +link_re = re.compile(r"\[graph node (?P\d+)\]") + +with open(sys.argv[1], 'r') as f, open(sys.argv[2], 'w') as out: + out.write("digraph G {\n") + label = [] + inside = False + node_id = 0 + links = {} + for line in f: + + m = node_re.match(line) + if m: + if inside: + out.write('\\n'.join(label) + "\"];\n") + for k, v in links.items(): + out.write("{} -> {} [label=\"{}\"];\n".format(node_id, v, k)) + out.write("{id} [label=\"".format(**m.groupdict())) + label = ["id={id}".format(**m.groupdict())] + inside = True + node_id = m.group('id') + links = {} + + m = edge_re.match(line) + if m: + if inside: + out.write('\\n'.join(label) + "\"];\n") + for k, v in links.items(): + out.write("{} -> {} [label=\"{}\"];\n".format(node_id, v, k)) + out.write("{from} -> {to} [label=\"".format(**m.groupdict())) + label = [] + inside = True + node_id = 0 + links = {} + + m = prop_re.match(line) + if m: + # escape quotes in value + label.append("{key}={value}".format(**m.groupdict()).replace('"', '\\"').replace('\\\\"', '')) + l = link_re.match(m.group('value')) + if l: + links[m.group('key')] = l.group('id') + out.write('\\n'.join(label) + "\"];\n") + for k, v in links.items(): + out.write("{} -> {} [label=\"{}\"];\n".format(node_id, v, k)) + out.write("}\n") diff --git a/python/extractor/unparse.py b/python/extractor/unparse.py new file mode 100644 index 00000000000..b12f1501592 --- /dev/null +++ b/python/extractor/unparse.py @@ -0,0 +1,709 @@ +#Copied Tools.unparse.py with modifications. Copyright PSF. + +"Usage: unparse.py " +import sys +import ast +import tokenize +import io +import os +import shutil + +# Large float and imaginary literals get turned into infinities in the AST. +# We unparse those infinities to INFSTR. +INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1) + +def interleave(inter, f, seq): + """Call f on each item in seq, calling inter() in between. + """ + seq = iter(seq) + try: + f(next(seq)) + except StopIteration: + pass + else: + for x in seq: + inter() + f(x) + +class Unparser: + """Methods in this class recursively traverse an AST and + output source code for the abstract syntax; original formatting + is disregarded. """ + + def __init__(self, tree, file = sys.stdout): + """Unparser(tree, file=sys.stdout) -> None. + Print the source for tree to file.""" + self.f = file + self._indent = 0 + self.dispatch(tree) + print("", file=self.f) + self.f.flush() + + def fill(self, text = ""): + "Indent a piece of text, according to the current indentation level" + self.f.write("\n"+" "*self._indent + text) + + def write(self, text): + "Append a piece of text to the current line." + self.f.write(text) + + def enter(self): + "Print ':', and increase the indentation." + self.write(":") + self._indent += 1 + + def leave(self): + "Decrease the indentation level." + self._indent -= 1 + + def dispatch(self, tree): + "Dispatcher function, dispatching tree type T to method _T." + if isinstance(tree, list): + for t in tree: + self.dispatch(t) + return + meth = getattr(self, "_"+tree.__class__.__name__) + meth(tree) + + def remove_docstring(self, t): + if hasattr(t, "docstring"): + return + if not t.body: + return + if not isinstance(t.body[0], ast.Expr): + return + if not isinstance(t.body[0].value, ast.Str): + return + t.body = t.body[1:] + + def add_pass(self, t): + if t.body: + #No pass needed + return + t.body = [ast.Pass()] + + ############### Unparsing methods ###################### + # There should be one method per concrete grammar type # + # Constructors should be grouped by sum type. Ideally, # + # this would follow the order in the grammar, but # + # currently doesn't. # + ######################################################## + + def _Module(self, tree): + self.remove_docstring(tree) + self.add_pass(tree) + for stmt in tree.body: + self.dispatch(stmt) + + # stmt + def _Expr(self, tree): + self.fill() + self.dispatch(tree.value) + + def _Import(self, t): + self.fill("import ") + interleave(lambda: self.write(", "), self.dispatch, t.names) + + def _ImportFrom(self, t): + self.fill("from ") + self.write("." * t.level) + if t.module: + self.write(t.module) + self.write(" import ") + interleave(lambda: self.write(", "), self.dispatch, t.names) + + def _Assign(self, t): + self.fill() + for target in t.targets: + self.dispatch(target) + self.write(" = ") + self.dispatch(t.value) + + def _AugAssign(self, t): + self.fill() + self.dispatch(t.target) + self.write(" "+self.binop[t.op.__class__.__name__]+"= ") + self.dispatch(t.value) + + def _AnnAssign(self, t): + self.fill() + if not t.simple and isinstance(t.target, ast.Name): + self.write('(') + self.dispatch(t.target) + if not t.simple and isinstance(t.target, ast.Name): + self.write(')') + self.write(": ") + self.dispatch(t.annotation) + if t.value: + self.write(" = ") + self.dispatch(t.value) + + def _Return(self, t): + self.fill("return") + if t.value: + self.write(" ") + self.dispatch(t.value) + + def _Pass(self, t): + self.fill("pass") + + def _Break(self, t): + self.fill("break") + + def _Continue(self, t): + self.fill("continue") + + def _Delete(self, t): + self.fill("del ") + interleave(lambda: self.write(", "), self.dispatch, t.targets) + + def _Assert(self, t): + self.fill("assert ") + self.dispatch(t.test) + if t.msg: + self.write(", ") + self.dispatch(t.msg) + + def _Global(self, t): + self.fill("global ") + interleave(lambda: self.write(", "), self.write, t.names) + + def _Nonlocal(self, t): + self.fill("nonlocal ") + interleave(lambda: self.write(", "), self.write, t.names) + + def _Await(self, t): + self.write("(") + self.write("await") + if t.value: + self.write(" ") + self.dispatch(t.value) + self.write(")") + + def _Yield(self, t): + self.write("(") + self.write("yield") + if t.value: + self.write(" ") + self.dispatch(t.value) + self.write(")") + + def _YieldFrom(self, t): + self.write("(") + self.write("yield from") + if t.value: + self.write(" ") + self.dispatch(t.value) + self.write(")") + + def _Raise(self, t): + self.fill("raise") + if not t.exc: + assert not t.cause + return + self.write(" ") + self.dispatch(t.exc) + if t.cause: + self.write(" from ") + self.dispatch(t.cause) + + def _Try(self, t): + self.fill("try") + self.enter() + self.dispatch(t.body) + self.leave() + for ex in t.handlers: + self.dispatch(ex) + if t.orelse: + self.fill("else") + self.enter() + self.dispatch(t.orelse) + self.leave() + if t.finalbody: + self.fill("finally") + self.enter() + self.dispatch(t.finalbody) + self.leave() + + def _ExceptHandler(self, t): + self.fill("except") + if t.type: + self.write(" ") + self.dispatch(t.type) + if t.name: + self.write(" as ") + self.write(t.name) + self.enter() + self.dispatch(t.body) + self.leave() + + def _ClassDef(self, t): + self.write("\n") + for deco in t.decorator_list: + self.fill("@") + self.dispatch(deco) + self.fill("class "+t.name) + self.write("(") + comma = False + for e in t.bases: + if comma: self.write(", ") + else: comma = True + self.dispatch(e) + for e in t.keywords: + if comma: self.write(", ") + else: comma = True + self.dispatch(e) + self.write(")") + + self.enter() + self.remove_docstring(t) + self.add_pass(t) + self.dispatch(t.body) + self.leave() + + def _FunctionDef(self, t): + self.__FunctionDef_helper(t, "def") + + def _AsyncFunctionDef(self, t): + self.__FunctionDef_helper(t, "async def") + + def __FunctionDef_helper(self, t, fill_suffix): + self.write("\n") + for deco in t.decorator_list: + self.fill("@") + self.dispatch(deco) + def_str = fill_suffix+" "+t.name + "(" + self.fill(def_str) + self.dispatch(t.args) + self.write(")") + if t.returns: + self.write(" -> ") + self.dispatch(t.returns) + self.enter() + self.remove_docstring(t) + self.add_pass(t) + self.dispatch(t.body) + self.leave() + + def _For(self, t): + self.__For_helper("for ", t) + + def _AsyncFor(self, t): + self.__For_helper("async for ", t) + + def __For_helper(self, fill, t): + self.fill(fill) + self.dispatch(t.target) + self.write(" in ") + self.dispatch(t.iter) + self.enter() + self.dispatch(t.body) + self.leave() + if t.orelse: + self.fill("else") + self.enter() + self.dispatch(t.orelse) + self.leave() + + def _If(self, t): + self.fill("if ") + self.dispatch(t.test) + self.enter() + self.dispatch(t.body) + self.leave() + # collapse nested ifs into equivalent elifs. + while (t.orelse and len(t.orelse) == 1 and + isinstance(t.orelse[0], ast.If)): + t = t.orelse[0] + self.fill("elif ") + self.dispatch(t.test) + self.enter() + self.dispatch(t.body) + self.leave() + # final else + if t.orelse: + self.fill("else") + self.enter() + self.dispatch(t.orelse) + self.leave() + + def _While(self, t): + self.fill("while ") + self.dispatch(t.test) + self.enter() + self.dispatch(t.body) + self.leave() + if t.orelse: + self.fill("else") + self.enter() + self.dispatch(t.orelse) + self.leave() + + def _With(self, t): + self.fill("with ") + interleave(lambda: self.write(", "), self.dispatch, t.items) + self.enter() + self.dispatch(t.body) + self.leave() + + def _AsyncWith(self, t): + self.fill("async with ") + interleave(lambda: self.write(", "), self.dispatch, t.items) + self.enter() + self.dispatch(t.body) + self.leave() + + # expr + def _Bytes(self, t): + self.write(repr(t.s)) + + def _Str(self, tree): + s = repr(tree.s).encode("ascii", errors="backslashreplace").decode("ascii") + self.write(s) + + def _JoinedStr(self, t): + self.write("f") + string = io.StringIO() + self._fstring_JoinedStr(t, string.write) + self.write(repr(string.getvalue())) + + def _FormattedValue(self, t): + self.write("f") + string = io.StringIO() + self._fstring_FormattedValue(t, string.write) + self.write(repr(string.getvalue())) + + def _fstring_JoinedStr(self, t, write): + for value in t.values: + meth = getattr(self, "_fstring_" + type(value).__name__) + meth(value, write) + + def _fstring_Str(self, t, write): + value = t.s.replace("{", "{{").replace("}", "}}") + write(value) + + def _fstring_Constant(self, t, write): + assert isinstance(t.value, str) + value = t.value.replace("{", "{{").replace("}", "}}") + write(value) + + def _fstring_FormattedValue(self, t, write): + write("{") + expr = io.StringIO() + Unparser(t.value, expr) + expr = expr.getvalue().rstrip("\n") + if expr.startswith("{"): + write(" ") # Separate pair of opening brackets as "{ {" + write(expr) + if t.conversion != -1: + conversion = chr(t.conversion) + assert conversion in "sra" + write("!%s" % conversion) + if t.format_spec: + write(":") + meth = getattr(self, "_fstring_" + type(t.format_spec).__name__) + meth(t.format_spec, write) + write("}") + + def _Name(self, t): + self.write(t.id) + + def _write_constant(self, value): + if isinstance(value, (float, complex)): + self.write(repr(value).replace("inf", INFSTR)) + else: + self.write(repr(value)) + + def _Constant(self, t): + value = t.value + if isinstance(value, tuple): + self.write("(") + if len(value) == 1: + self._write_constant(value[0]) + self.write(",") + else: + interleave(lambda: self.write(", "), self._write_constant, value) + self.write(")") + else: + self._write_constant(t.value) + + def _NameConstant(self, t): + self.write(repr(t.value)) + + def _Num(self, t): + # Substitute overflowing decimal literal for AST infinities. + self.write(repr(t.n).replace("inf", INFSTR)) + + def _List(self, t): + self.write("[") + interleave(lambda: self.write(", "), self.dispatch, t.elts) + self.write("]") + + def _ListComp(self, t): + self.write("[") + self.dispatch(t.elt) + for gen in t.generators: + self.dispatch(gen) + self.write("]") + + def _GeneratorExp(self, t): + self.write("(") + self.dispatch(t.elt) + for gen in t.generators: + self.dispatch(gen) + self.write(")") + + def _SetComp(self, t): + self.write("{") + self.dispatch(t.elt) + for gen in t.generators: + self.dispatch(gen) + self.write("}") + + def _DictComp(self, t): + self.write("{") + self.dispatch(t.key) + self.write(": ") + self.dispatch(t.value) + for gen in t.generators: + self.dispatch(gen) + self.write("}") + + def _comprehension(self, t): + if hasattr(t, "is_async") and t.is_async: + self.write(" async for ") + else: + self.write(" for ") + self.dispatch(t.target) + self.write(" in ") + self.dispatch(t.iter) + for if_clause in t.ifs: + self.write(" if ") + self.dispatch(if_clause) + + def _IfExp(self, t): + self.write("(") + self.dispatch(t.body) + self.write(" if ") + self.dispatch(t.test) + self.write(" else ") + self.dispatch(t.orelse) + self.write(")") + + def _Set(self, t): + assert(t.elts) # should be at least one element + self.write("{") + interleave(lambda: self.write(", "), self.dispatch, t.elts) + self.write("}") + + def _Dict(self, t): + self.write("{") + def write_key_value_pair(k, v): + self.dispatch(k) + self.write(": ") + self.dispatch(v) + + def write_item(item): + k, v = item + if k is None: + # for dictionary unpacking operator in dicts {**{'y': 2}} + # see PEP 448 for details + self.write("**") + self.dispatch(v) + else: + write_key_value_pair(k, v) + interleave(lambda: self.write(", "), write_item, zip(t.keys, t.values)) + self.write("}") + + def _Tuple(self, t): + self.write("(") + if len(t.elts) == 1: + elt = t.elts[0] + self.dispatch(elt) + self.write(",") + else: + interleave(lambda: self.write(", "), self.dispatch, t.elts) + self.write(")") + + unop = {"Invert":"~", "Not": "not", "UAdd":"+", "USub":"-"} + def _UnaryOp(self, t): + self.write("(") + self.write(self.unop[t.op.__class__.__name__]) + self.write(" ") + self.dispatch(t.operand) + self.write(")") + + binop = { "Add":"+", "Sub":"-", "Mult":"*", "MatMult":"@", "Div":"/", "Mod":"%", + "LShift":"<<", "RShift":">>", "BitOr":"|", "BitXor":"^", "BitAnd":"&", + "FloorDiv":"//", "Pow": "**"} + def _BinOp(self, t): + self.write("(") + self.dispatch(t.left) + self.write(" " + self.binop[t.op.__class__.__name__] + " ") + self.dispatch(t.right) + self.write(")") + + cmpops = {"Eq":"==", "NotEq":"!=", "Lt":"<", "LtE":"<=", "Gt":">", "GtE":">=", + "Is":"is", "IsNot":"is not", "In":"in", "NotIn":"not in"} + def _Compare(self, t): + self.write("(") + self.dispatch(t.left) + for o, e in zip(t.ops, t.comparators): + self.write(" " + self.cmpops[o.__class__.__name__] + " ") + self.dispatch(e) + self.write(")") + + boolops = {ast.And: 'and', ast.Or: 'or'} + def _BoolOp(self, t): + self.write("(") + s = " %s " % self.boolops[t.op.__class__] + interleave(lambda: self.write(s), self.dispatch, t.values) + self.write(")") + + def _Attribute(self,t): + self.dispatch(t.value) + # Special case: 3.__abs__() is a syntax error, so if t.value + # is an integer literal then we need to either parenthesize + # it or add an extra space to get 3 .__abs__(). + if isinstance(t.value, ast.Num) and isinstance(t.value.n, int): + self.write(" ") + self.write(".") + self.write(t.attr) + + def _Call(self, t): + self.dispatch(t.func) + self.write("(") + comma = False + for e in t.args: + if comma: self.write(", ") + else: comma = True + self.dispatch(e) + for e in t.keywords: + if comma: self.write(", ") + else: comma = True + self.dispatch(e) + self.write(")") + + def _Subscript(self, t): + self.dispatch(t.value) + self.write("[") + self.dispatch(t.slice) + self.write("]") + + def _Starred(self, t): + self.write("*") + self.dispatch(t.value) + + # slice + def _Ellipsis(self, t): + self.write("...") + + def _Index(self, t): + self.dispatch(t.value) + + def _Slice(self, t): + if t.lower: + self.dispatch(t.lower) + self.write(":") + if t.upper: + self.dispatch(t.upper) + if t.step: + self.write(":") + self.dispatch(t.step) + + def _ExtSlice(self, t): + interleave(lambda: self.write(', '), self.dispatch, t.dims) + + # argument + def _arg(self, t): + self.write(t.arg) + if t.annotation: + self.write(": ") + self.dispatch(t.annotation) + + # others + def _arguments(self, t): + first = True + # normal arguments + defaults = [None] * (len(t.args) - len(t.defaults)) + t.defaults + for a, d in zip(t.args, defaults): + if first:first = False + else: self.write(", ") + self.dispatch(a) + if d: + self.write("=") + self.dispatch(d) + + # varargs, or bare '*' if no varargs but keyword-only arguments present + if t.vararg or t.kwonlyargs: + if first:first = False + else: self.write(", ") + self.write("*") + if t.vararg: + self.write(t.vararg.arg) + if t.vararg.annotation: + self.write(": ") + self.dispatch(t.vararg.annotation) + + # keyword-only arguments + if t.kwonlyargs: + for a, d in zip(t.kwonlyargs, t.kw_defaults): + if first:first = False + else: self.write(", ") + self.dispatch(a), + if d: + self.write("=") + self.dispatch(d) + + # kwargs + if t.kwarg: + if first:first = False + else: self.write(", ") + self.write("**"+t.kwarg.arg) + if t.kwarg.annotation: + self.write(": ") + self.dispatch(t.kwarg.annotation) + + def _keyword(self, t): + if t.arg is None: + self.write("**") + else: + self.write(t.arg) + self.write("=") + self.dispatch(t.value) + + def _Lambda(self, t): + self.write("(") + self.write("lambda ") + self.dispatch(t.args) + self.write(": ") + self.dispatch(t.body) + self.write(")") + + def _alias(self, t): + self.write(t.name) + if t.asname: + self.write(" as "+t.asname) + + def _withitem(self, t): + self.dispatch(t.context_expr) + if t.optional_vars: + self.write(" as ") + self.dispatch(t.optional_vars) + +def roundtrip(filename, outpath): + with open(filename, "rb") as pyfile: + encoding = tokenize.detect_encoding(pyfile.readline)[0] + with open(filename, "r", encoding=encoding) as pyfile: + source = pyfile.read() + tree = compile(source, filename, "exec", ast.PyCF_ONLY_AST) + with open(outpath, "w", encoding=encoding) as output: + Unparser(tree, output) + +def strip_comments_and_docstrings(path): + tmp = path + ".tmp" + if path.endswith(".py"): + roundtrip(path, tmp) + else: + shutil.copy(path, tmp) + return tmp