blob: 0b5e6c66a0fc5adc7f080f90127b81de05a90be0 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>apache_beam.typehints.opcodes &mdash; Apache Beam documentation</title>
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="index" title="Index"
href="../../../genindex.html"/>
<link rel="search" title="Search" href="../../../search.html"/>
<link rel="top" title="Apache Beam documentation" href="../../../index.html"/>
<link rel="up" title="Module code" href="../../index.html"/>
<script src="../../../_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../../../index.html" class="icon icon-home"> Apache Beam
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.coders.html">apache_beam.coders package</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.internal.html">apache_beam.internal package</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.io.html">apache_beam.io package</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.metrics.html">apache_beam.metrics package</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.options.html">apache_beam.options package</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.portability.html">apache_beam.portability package</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.runners.html">apache_beam.runners package</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.testing.html">apache_beam.testing package</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.tools.html">apache_beam.tools package</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.transforms.html">apache_beam.transforms package</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.typehints.html">apache_beam.typehints package</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.utils.html">apache_beam.utils package</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.error.html">apache_beam.error module</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.pipeline.html">apache_beam.pipeline module</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.pvalue.html">apache_beam.pvalue module</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../apache_beam.version.html">apache_beam.version module</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">Apache Beam</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html">Docs</a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>apache_beam.typehints.opcodes</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for apache_beam.typehints.opcodes</h1><div class="highlight"><pre>
<span></span><span class="c1">#</span>
<span class="c1"># Licensed to the Apache Software Foundation (ASF) under one or more</span>
<span class="c1"># contributor license agreements. See the NOTICE file distributed with</span>
<span class="c1"># this work for additional information regarding copyright ownership.</span>
<span class="c1"># The ASF licenses this file to You under the Apache License, Version 2.0</span>
<span class="c1"># (the &quot;License&quot;); you may not use this file except in compliance with</span>
<span class="c1"># the License. You may obtain a copy of the License at</span>
<span class="c1">#</span>
<span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="c1">#</span>
<span class="c1"># Unless required by applicable law or agreed to in writing, software</span>
<span class="c1"># distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
<span class="c1"># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="c1"># See the License for the specific language governing permissions and</span>
<span class="c1"># limitations under the License.</span>
<span class="c1">#</span>
<span class="sd">&quot;&quot;&quot;Defines the actions various bytecodes have on the frame.</span>
<span class="sd">Each function here corresponds to a bytecode documented in</span>
<span class="sd">https://docs.python.org/2/library/dis.html. The first argument is a (mutable)</span>
<span class="sd">FrameState object, the second the integer opcode argument.</span>
<span class="sd">Bytecodes with more complicated behavior (e.g. modifying the program counter)</span>
<span class="sd">are handled inline rather than here.</span>
<span class="sd">For internal use only; no backwards-compatibility guarantees.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span class="kn">import</span> <span class="nn">inspect</span>
<span class="kn">import</span> <span class="nn">logging</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">types</span>
<span class="kn">from</span> <span class="nn">functools</span> <span class="k">import</span> <span class="n">reduce</span>
<span class="kn">from</span> <span class="nn">past.builtins</span> <span class="k">import</span> <span class="n">unicode</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="k">import</span> <span class="n">typehints</span>
<span class="kn">from</span> <span class="nn">.trivial_inference</span> <span class="k">import</span> <span class="n">BoundMethod</span>
<span class="kn">from</span> <span class="nn">.trivial_inference</span> <span class="k">import</span> <span class="n">Const</span>
<span class="kn">from</span> <span class="nn">.trivial_inference</span> <span class="k">import</span> <span class="n">element_type</span>
<span class="kn">from</span> <span class="nn">.trivial_inference</span> <span class="k">import</span> <span class="n">union</span>
<span class="kn">from</span> <span class="nn">.typehints</span> <span class="k">import</span> <span class="n">Any</span>
<span class="kn">from</span> <span class="nn">.typehints</span> <span class="k">import</span> <span class="n">Dict</span>
<span class="kn">from</span> <span class="nn">.typehints</span> <span class="k">import</span> <span class="n">Iterable</span>
<span class="kn">from</span> <span class="nn">.typehints</span> <span class="k">import</span> <span class="n">List</span>
<span class="kn">from</span> <span class="nn">.typehints</span> <span class="k">import</span> <span class="n">Tuple</span>
<span class="kn">from</span> <span class="nn">.typehints</span> <span class="k">import</span> <span class="n">Union</span>
<div class="viewcode-block" id="pop_one"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.pop_one">[docs]</a><span class="k">def</span> <span class="nf">pop_one</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="k">del</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">:]</span></div>
<div class="viewcode-block" id="pop_two"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.pop_two">[docs]</a><span class="k">def</span> <span class="nf">pop_two</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="k">del</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">:]</span></div>
<div class="viewcode-block" id="pop_three"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.pop_three">[docs]</a><span class="k">def</span> <span class="nf">pop_three</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="k">del</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">:]</span></div>
<div class="viewcode-block" id="push_value"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.push_value">[docs]</a><span class="k">def</span> <span class="nf">push_value</span><span class="p">(</span><span class="n">v</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">pusher</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">return</span> <span class="n">pusher</span></div>
<div class="viewcode-block" id="nop"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.nop">[docs]</a><span class="k">def</span> <span class="nf">nop</span><span class="p">(</span><span class="n">unused_state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="pop_top"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.pop_top">[docs]</a><span class="k">def</span> <span class="nf">pop_top</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span></div>
<div class="viewcode-block" id="rot_n"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.rot_n">[docs]</a><span class="k">def</span> <span class="nf">rot_n</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">n</span><span class="p">:]</span> <span class="o">=</span> <span class="p">[</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">+</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">n</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span></div>
<div class="viewcode-block" id="rot_two"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.rot_two">[docs]</a><span class="k">def</span> <span class="nf">rot_two</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">rot_n</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span></div>
<div class="viewcode-block" id="rot_three"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.rot_three">[docs]</a><span class="k">def</span> <span class="nf">rot_three</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">rot_n</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span></div>
<div class="viewcode-block" id="rot_four"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.rot_four">[docs]</a><span class="k">def</span> <span class="nf">rot_four</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">rot_n</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span></div>
<div class="viewcode-block" id="dup_top"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.dup_top">[docs]</a><span class="k">def</span> <span class="nf">dup_top</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span></div>
<div class="viewcode-block" id="unary"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.unary">[docs]</a><span class="k">def</span> <span class="nf">unary</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">Const</span><span class="o">.</span><span class="n">unwrap</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span></div>
<span class="n">unary_positive</span> <span class="o">=</span> <span class="n">unary_negative</span> <span class="o">=</span> <span class="n">unary_invert</span> <span class="o">=</span> <span class="n">unary</span>
<div class="viewcode-block" id="unary_not"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.unary_not">[docs]</a><span class="k">def</span> <span class="nf">unary_not</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">bool</span></div>
<div class="viewcode-block" id="unary_convert"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.unary_convert">[docs]</a><span class="k">def</span> <span class="nf">unary_convert</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span></div>
<div class="viewcode-block" id="get_iter"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.get_iter">[docs]</a><span class="k">def</span> <span class="nf">get_iter</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Iterable</span><span class="p">[</span><span class="n">element_type</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">())])</span></div>
<div class="viewcode-block" id="symmetric_binary_op"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.symmetric_binary_op">[docs]</a><span class="k">def</span> <span class="nf">symmetric_binary_op</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="c1"># TODO(robertwb): This may not be entirely correct...</span>
<span class="n">b</span><span class="p">,</span> <span class="n">a</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">(),</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="k">if</span> <span class="n">a</span> <span class="o">==</span> <span class="n">b</span><span class="p">:</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">typehints</span><span class="o">.</span><span class="n">SequenceTypeConstraint</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">a</span><span class="p">)(</span><span class="n">union</span><span class="p">(</span><span class="n">element_type</span><span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="n">element_type</span><span class="p">(</span><span class="n">b</span><span class="p">))))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Any</span><span class="p">)</span></div>
<span class="c1"># Except for int ** -int</span>
<span class="n">binary_power</span> <span class="o">=</span> <span class="n">inplace_power</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<span class="n">binary_multiply</span> <span class="o">=</span> <span class="n">inplace_multiply</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<span class="n">binary_divide</span> <span class="o">=</span> <span class="n">inplace_divide</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<span class="n">binary_floor_divide</span> <span class="o">=</span> <span class="n">inplace_floor_divide</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<div class="viewcode-block" id="binary_true_divide"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.binary_true_divide">[docs]</a><span class="k">def</span> <span class="nf">binary_true_divide</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">u</span> <span class="o">=</span> <span class="n">union</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">(),</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">)</span>
<span class="k">if</span> <span class="n">u</span> <span class="o">==</span> <span class="nb">int</span><span class="p">:</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">u</span><span class="p">)</span></div>
<span class="n">inplace_true_divide</span> <span class="o">=</span> <span class="n">binary_true_divide</span>
<span class="n">binary_modulo</span> <span class="o">=</span> <span class="n">inplace_modulo</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<span class="c1"># TODO(robertwb): Tuple add.</span>
<span class="n">binary_add</span> <span class="o">=</span> <span class="n">inplace_add</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<span class="n">binary_subtract</span> <span class="o">=</span> <span class="n">inplace_subtract</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<div class="viewcode-block" id="binary_subscr"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.binary_subscr">[docs]</a><span class="k">def</span> <span class="nf">binary_subscr</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">index</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="n">base</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="k">if</span> <span class="n">base</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">unicode</span><span class="p">):</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">base</span>
<span class="k">elif</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">Const</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">index</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span>
<span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">base</span><span class="p">,</span> <span class="n">typehints</span><span class="o">.</span><span class="n">IndexableTypeConstraint</span><span class="p">)):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">base</span><span class="o">.</span><span class="n">_constraint_for_index</span><span class="p">(</span><span class="n">index</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">element_type</span><span class="p">(</span><span class="n">base</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">index</span> <span class="o">==</span> <span class="nb">slice</span><span class="p">:</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">typehints</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">element_type</span><span class="p">(</span><span class="n">base</span><span class="p">)]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">element_type</span><span class="p">(</span><span class="n">base</span><span class="p">)</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">out</span><span class="p">)</span></div>
<span class="c1"># As far as types are concerned.</span>
<span class="n">binary_lshift</span> <span class="o">=</span> <span class="n">inplace_lshift</span> <span class="o">=</span> <span class="n">binary_rshift</span> <span class="o">=</span> <span class="n">inplace_rshift</span> <span class="o">=</span> <span class="n">pop_top</span>
<span class="n">binary_and</span> <span class="o">=</span> <span class="n">inplace_and</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<span class="n">binary_xor</span> <span class="o">=</span> <span class="n">inplace_xor</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<span class="n">binary_or</span> <span class="o">=</span> <span class="n">inpalce_or</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<span class="c1"># As far as types are concerned.</span>
<span class="n">slice_0</span> <span class="o">=</span> <span class="n">nop</span>
<span class="n">slice_1</span> <span class="o">=</span> <span class="n">slice_2</span> <span class="o">=</span> <span class="n">pop_top</span>
<span class="n">slice_3</span> <span class="o">=</span> <span class="n">pop_two</span>
<span class="n">store_slice_0</span> <span class="o">=</span> <span class="n">store_slice_1</span> <span class="o">=</span> <span class="n">store_slice_2</span> <span class="o">=</span> <span class="n">store_slice_3</span> <span class="o">=</span> <span class="n">nop</span>
<span class="n">delete_slice_0</span> <span class="o">=</span> <span class="n">delete_slice_1</span> <span class="o">=</span> <span class="n">delete_slice_2</span> <span class="o">=</span> <span class="n">delete_slice_3</span> <span class="o">=</span> <span class="n">nop</span>
<div class="viewcode-block" id="store_subscr"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.store_subscr">[docs]</a><span class="k">def</span> <span class="nf">store_subscr</span><span class="p">(</span><span class="n">unused_state</span><span class="p">,</span> <span class="n">unused_args</span><span class="p">):</span>
<span class="c1"># TODO(robertwb): Update element/value type of iterable/dict.</span>
<span class="k">pass</span></div>
<span class="n">binary_divide</span> <span class="o">=</span> <span class="n">binary_floor_divide</span> <span class="o">=</span> <span class="n">binary_modulo</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<span class="n">binary_divide</span> <span class="o">=</span> <span class="n">binary_floor_divide</span> <span class="o">=</span> <span class="n">binary_modulo</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<span class="n">binary_divide</span> <span class="o">=</span> <span class="n">binary_floor_divide</span> <span class="o">=</span> <span class="n">binary_modulo</span> <span class="o">=</span> <span class="n">symmetric_binary_op</span>
<span class="c1"># print_expr</span>
<span class="n">print_item</span> <span class="o">=</span> <span class="n">pop_top</span>
<span class="c1"># print_item_to</span>
<span class="n">print_newline</span> <span class="o">=</span> <span class="n">nop</span>
<span class="c1"># print_newline_to</span>
<span class="c1"># break_loop</span>
<span class="c1"># continue_loop</span>
<div class="viewcode-block" id="list_append"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.list_append">[docs]</a><span class="k">def</span> <span class="nf">list_append</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">new_element_type</span> <span class="o">=</span> <span class="n">Const</span><span class="o">.</span><span class="n">unwrap</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">]</span> <span class="o">=</span> <span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="n">element_type</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">]),</span>
<span class="n">new_element_type</span><span class="p">]]</span></div>
<div class="viewcode-block" id="map_add"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.map_add">[docs]</a><span class="k">def</span> <span class="nf">map_add</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">new_key_type</span> <span class="o">=</span> <span class="n">Const</span><span class="o">.</span><span class="n">unwrap</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
<span class="n">new_value_type</span> <span class="o">=</span> <span class="n">Const</span><span class="o">.</span><span class="n">unwrap</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">]</span> <span class="o">=</span> <span class="n">Dict</span><span class="p">[</span>
<span class="n">Union</span><span class="p">[</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">]</span><span class="o">.</span><span class="n">key_type</span><span class="p">,</span> <span class="n">new_key_type</span><span class="p">],</span>
<span class="n">Union</span><span class="p">[</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">]</span><span class="o">.</span><span class="n">value_type</span><span class="p">,</span> <span class="n">new_value_type</span><span class="p">]]</span></div>
<span class="n">load_locals</span> <span class="o">=</span> <span class="n">push_value</span><span class="p">(</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span>
<span class="c1"># return_value</span>
<span class="c1"># yield_value</span>
<span class="c1"># import_star</span>
<span class="n">exec_stmt</span> <span class="o">=</span> <span class="n">pop_three</span>
<span class="c1"># pop_block</span>
<span class="c1"># end_finally</span>
<span class="n">build_class</span> <span class="o">=</span> <span class="n">pop_three</span>
<span class="c1"># setup_with</span>
<span class="c1"># with_cleanup</span>
<span class="c1"># store_name</span>
<span class="c1"># delete_name</span>
<div class="viewcode-block" id="unpack_sequence"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.unpack_sequence">[docs]</a><span class="k">def</span> <span class="nf">unpack_sequence</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">Const</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">unpacked</span> <span class="o">=</span> <span class="p">[</span><span class="n">Const</span><span class="p">(</span><span class="n">ti</span><span class="p">)</span> <span class="k">for</span> <span class="n">ti</span> <span class="ow">in</span> <span class="n">t</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">unpacked</span><span class="p">)</span> <span class="o">!=</span> <span class="n">arg</span><span class="p">:</span>
<span class="n">unpacked</span> <span class="o">=</span> <span class="p">[</span><span class="n">Any</span><span class="p">]</span> <span class="o">*</span> <span class="n">arg</span>
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
<span class="n">unpacked</span> <span class="o">=</span> <span class="p">[</span><span class="n">Any</span><span class="p">]</span> <span class="o">*</span> <span class="n">arg</span>
<span class="k">elif</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">typehints</span><span class="o">.</span><span class="n">TupleHint</span><span class="o">.</span><span class="n">TupleConstraint</span><span class="p">)</span>
<span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">tuple_types</span><span class="p">)</span> <span class="o">==</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">unpacked</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">tuple_types</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">unpacked</span> <span class="o">=</span> <span class="p">[</span><span class="n">element_type</span><span class="p">(</span><span class="n">t</span><span class="p">)]</span> <span class="o">*</span> <span class="n">arg</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span> <span class="o">+=</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">unpacked</span><span class="p">)</span></div>
<div class="viewcode-block" id="dup_topx"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.dup_topx">[docs]</a><span class="k">def</span> <span class="nf">dup_topx</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span> <span class="o">+=</span> <span class="n">state</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">:]</span></div>
<span class="n">store_attr</span> <span class="o">=</span> <span class="n">pop_top</span>
<span class="n">delete_attr</span> <span class="o">=</span> <span class="n">nop</span>
<span class="n">store_global</span> <span class="o">=</span> <span class="n">pop_top</span>
<span class="n">delete_global</span> <span class="o">=</span> <span class="n">nop</span>
<div class="viewcode-block" id="load_const"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.load_const">[docs]</a><span class="k">def</span> <span class="nf">load_const</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">const_type</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span></div>
<span class="n">load_name</span> <span class="o">=</span> <span class="n">push_value</span><span class="p">(</span><span class="n">Any</span><span class="p">)</span>
<div class="viewcode-block" id="build_tuple"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.build_tuple">[docs]</a><span class="k">def</span> <span class="nf">build_tuple</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="k">if</span> <span class="n">arg</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Tuple</span><span class="p">[()])</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">:]</span> <span class="o">=</span> <span class="p">[</span><span class="n">Tuple</span><span class="p">[[</span><span class="n">Const</span><span class="o">.</span><span class="n">unwrap</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">:]]]]</span></div>
<div class="viewcode-block" id="build_list"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.build_list">[docs]</a><span class="k">def</span> <span class="nf">build_list</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="k">if</span> <span class="n">arg</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[()]])</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">:]</span> <span class="o">=</span> <span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">reduce</span><span class="p">(</span><span class="n">union</span><span class="p">,</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">:],</span> <span class="n">Union</span><span class="p">[()])]]</span></div>
<span class="c1"># A Dict[Union[], Union[]] is the type of an empty dict.</span>
<div class="viewcode-block" id="build_map"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.build_map">[docs]</a><span class="k">def</span> <span class="nf">build_map</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Dict</span><span class="p">[</span><span class="n">Union</span><span class="p">[()],</span> <span class="n">Union</span><span class="p">[()]])</span></div>
<div class="viewcode-block" id="load_attr"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.load_attr">[docs]</a><span class="k">def</span> <span class="nf">load_attr</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Replaces the top of the stack, TOS, with</span>
<span class="sd"> getattr(TOS, co_names[arg])</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">o</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">get_name</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">Const</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">o</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Const</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">o</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">name</span><span class="p">)))</span>
<span class="k">elif</span> <span class="p">(</span><span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> <span class="ow">and</span>
<span class="nb">isinstance</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
<span class="p">(</span><span class="n">types</span><span class="o">.</span><span class="n">MethodType</span><span class="p">,</span> <span class="n">types</span><span class="o">.</span><span class="n">FunctionType</span><span class="p">))):</span>
<span class="c1"># TODO(luke-zhu): Support other callable objects</span>
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">func</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="vm">__func__</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">func</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> <span class="c1"># Python 3 has no unbound methods</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Const</span><span class="p">(</span><span class="n">BoundMethod</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">o</span><span class="p">)))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Any</span><span class="p">)</span></div>
<div class="viewcode-block" id="load_method"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.load_method">[docs]</a><span class="k">def</span> <span class="nf">load_method</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Like load_attr. Replaces TOS object with method and TOS.&quot;&quot;&quot;</span>
<span class="n">o</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">get_name</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">Const</span><span class="p">):</span>
<span class="n">method</span> <span class="o">=</span> <span class="n">Const</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">o</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">typehints</span><span class="o">.</span><span class="n">AnyTypeConstraint</span><span class="p">):</span>
<span class="n">method</span> <span class="o">=</span> <span class="n">typehints</span><span class="o">.</span><span class="n">Any</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">method</span> <span class="o">=</span> <span class="n">Const</span><span class="p">(</span><span class="n">BoundMethod</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">name</span><span class="p">),</span> <span class="n">o</span><span class="p">))</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">method</span><span class="p">)</span></div>
<div class="viewcode-block" id="compare_op"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.compare_op">[docs]</a><span class="k">def</span> <span class="nf">compare_op</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="c1"># Could really be anything...</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">:]</span> <span class="o">=</span> <span class="p">[</span><span class="nb">bool</span><span class="p">]</span></div>
<div class="viewcode-block" id="import_name"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.import_name">[docs]</a><span class="k">def</span> <span class="nf">import_name</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">unused_arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">:]</span> <span class="o">=</span> <span class="p">[</span><span class="n">Any</span><span class="p">]</span></div>
<span class="n">import_from</span> <span class="o">=</span> <span class="n">push_value</span><span class="p">(</span><span class="n">Any</span><span class="p">)</span>
<span class="c1"># jump</span>
<span class="c1"># for_iter</span>
<div class="viewcode-block" id="load_global"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.load_global">[docs]</a><span class="k">def</span> <span class="nf">load_global</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span></div>
<span class="c1"># setup_loop</span>
<span class="c1"># setup_except</span>
<span class="c1"># setup_finally</span>
<span class="n">store_map</span> <span class="o">=</span> <span class="n">pop_two</span>
<div class="viewcode-block" id="load_fast"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.load_fast">[docs]</a><span class="k">def</span> <span class="nf">load_fast</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">vars</span><span class="p">[</span><span class="n">arg</span><span class="p">])</span></div>
<div class="viewcode-block" id="store_fast"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.store_fast">[docs]</a><span class="k">def</span> <span class="nf">store_fast</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">vars</span><span class="p">[</span><span class="n">arg</span><span class="p">]</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span></div>
<div class="viewcode-block" id="delete_fast"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.delete_fast">[docs]</a><span class="k">def</span> <span class="nf">delete_fast</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">vars</span><span class="p">[</span><span class="n">arg</span><span class="p">]</span> <span class="o">=</span> <span class="n">Any</span> <span class="c1"># really an error</span></div>
<div class="viewcode-block" id="load_closure"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.load_closure">[docs]</a><span class="k">def</span> <span class="nf">load_closure</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">get_closure</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span></div>
<div class="viewcode-block" id="load_deref"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.load_deref">[docs]</a><span class="k">def</span> <span class="nf">load_deref</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">closure_type</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span></div>
<span class="c1"># raise_varargs</span>
<div class="viewcode-block" id="make_function"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.make_function">[docs]</a><span class="k">def</span> <span class="nf">make_function</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Creates a function with the arguments at the top of the stack.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># TODO(luke-zhu): Handle default argument types</span>
<span class="nb">globals</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">f</span><span class="o">.</span><span class="vm">__globals__</span> <span class="c1"># Inherits globals from the current frame</span>
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">func_code</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">FunctionType</span><span class="p">(</span><span class="n">func_code</span><span class="p">,</span> <span class="nb">globals</span><span class="p">)</span>
<span class="c1"># argc is the number of default parameters. Ignored here.</span>
<span class="n">pop_count</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">arg</span>
<span class="k">else</span><span class="p">:</span> <span class="c1"># Python 3.x</span>
<span class="n">func_name</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
<span class="n">func_code</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
<span class="n">pop_count</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">closure</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">):</span>
<span class="c1"># https://docs.python.org/3.5/library/dis.html#opcode-MAKE_FUNCTION</span>
<span class="n">num_default_pos_args</span> <span class="o">=</span> <span class="p">(</span><span class="n">arg</span> <span class="o">&amp;</span> <span class="mh">0xff</span><span class="p">)</span>
<span class="n">num_default_kwonly_args</span> <span class="o">=</span> <span class="p">((</span><span class="n">arg</span> <span class="o">&gt;&gt;</span> <span class="mi">8</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0xff</span><span class="p">)</span>
<span class="n">num_annotations</span> <span class="o">=</span> <span class="p">((</span><span class="n">arg</span> <span class="o">&gt;&gt;</span> <span class="mi">16</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0x7fff</span><span class="p">)</span>
<span class="n">pop_count</span> <span class="o">+=</span> <span class="p">(</span><span class="n">num_default_pos_args</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">num_default_kwonly_args</span> <span class="o">+</span>
<span class="n">num_annotations</span> <span class="o">+</span> <span class="n">num_annotations</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span> <span class="o">&gt;=</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">):</span>
<span class="c1"># arg contains flags, with corresponding stack values if positive.</span>
<span class="c1"># https://docs.python.org/3.6/library/dis.html#opcode-MAKE_FUNCTION</span>
<span class="n">pop_count</span> <span class="o">+=</span> <span class="nb">bin</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">&#39;1&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">arg</span> <span class="o">&amp;</span> <span class="mh">0x08</span><span class="p">:</span>
<span class="c1"># Convert types in Tuple constraint to a tuple of CPython cells.</span>
<span class="c1"># https://stackoverflow.com/a/44670295</span>
<span class="n">closure</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
<span class="p">(</span><span class="k">lambda</span> <span class="n">_</span><span class="p">:</span> <span class="k">lambda</span><span class="p">:</span> <span class="n">_</span><span class="p">)(</span><span class="n">t</span><span class="p">)</span><span class="o">.</span><span class="vm">__closure__</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">tuple_types</span><span class="p">)</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">FunctionType</span><span class="p">(</span><span class="n">func_code</span><span class="p">,</span> <span class="nb">globals</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">func_name</span><span class="p">,</span>
<span class="n">closure</span><span class="o">=</span><span class="n">closure</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">pop_count</span> <span class="o">&lt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">)</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">pop_count</span><span class="p">:]</span> <span class="o">=</span> <span class="p">[</span><span class="n">Const</span><span class="p">(</span><span class="n">func</span><span class="p">)]</span></div>
<div class="viewcode-block" id="make_closure"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.make_closure">[docs]</a><span class="k">def</span> <span class="nf">make_closure</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span> <span class="o">-</span> <span class="mi">2</span><span class="p">:]</span> <span class="o">=</span> <span class="p">[</span><span class="n">Any</span><span class="p">]</span> <span class="c1"># a callable</span></div>
<div class="viewcode-block" id="build_slice"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.build_slice">[docs]</a><span class="k">def</span> <span class="nf">build_slice</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">:]</span> <span class="o">=</span> <span class="p">[</span><span class="nb">slice</span><span class="p">]</span> <span class="c1"># a slice object</span></div>
<span class="k">def</span> <span class="nf">_unpack_lists</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Extract inner types of Lists and Tuples.</span>
<span class="sd"> Pops arg count items from the stack, concatenates their inner types into 1</span>
<span class="sd"> list, and returns that list.</span>
<span class="sd"> Example: if stack[-arg:] == [[i1, i2], [i3]], the output is [i1, i2, i3]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">types</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">type_constraint</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">i</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_constraint</span><span class="p">,</span> <span class="n">typehints</span><span class="o">.</span><span class="n">IndexableTypeConstraint</span><span class="p">):</span>
<span class="n">types</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">type_constraint</span><span class="o">.</span><span class="n">_inner_types</span><span class="p">())</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">logging</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s1">&#39;Unhandled type_constraint: </span><span class="si">%r</span><span class="s1">&#39;</span><span class="p">,</span> <span class="n">type_constraint</span><span class="p">)</span>
<span class="n">types</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">typehints</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="n">arg</span><span class="p">:]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">return</span> <span class="n">types</span>
<div class="viewcode-block" id="build_list_unpack"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.build_list_unpack">[docs]</a><span class="k">def</span> <span class="nf">build_list_unpack</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Joins arg count iterables from the stack into a single list.&quot;&quot;&quot;</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="n">_unpack_lists</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">)]])</span></div>
<div class="viewcode-block" id="build_tuple_unpack"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.build_tuple_unpack">[docs]</a><span class="k">def</span> <span class="nf">build_tuple_unpack</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Joins arg count iterables from the stack into a single tuple.&quot;&quot;&quot;</span>
<span class="n">state</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Tuple</span><span class="p">[</span><span class="n">_unpack_lists</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">)])</span></div>
<div class="viewcode-block" id="build_tuple_unpack_with_call"><a class="viewcode-back" href="../../../apache_beam.typehints.opcodes.html#apache_beam.typehints.opcodes.build_tuple_unpack_with_call">[docs]</a><span class="k">def</span> <span class="nf">build_tuple_unpack_with_call</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Same as build_tuple_unpack, with an extra fn argument at the bottom of the</span>
<span class="sd"> stack, which remains untouched.&quot;&quot;&quot;</span>
<span class="n">build_tuple_unpack</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span></div>
</pre></div>
</div>
<div class="articleComments">
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright .
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../../',
VERSION:'',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>